feat: derive hashes

This commit is contained in:
zhenfei
2024-01-15 15:19:08 -05:00
parent 0623d021be
commit bfc97cbd12
3 changed files with 14 additions and 9 deletions

View File

@@ -1,21 +1,23 @@
use crate::util::{add_no_canonicalize_trashing_input, branch_hint, split, sqrt_tonelli_shanks};
use crate::util::{assume, try_inverse_u64};
use core::iter::{Product, Sum};
use core::ops::{Add, AddAssign, Mul, MulAssign, Neg, Sub, SubAssign};
use std::fmt::{Display, Formatter};
use std::io::{Read, Write};
use ff::{Field, FromUniformBytes, PrimeField};
use halo2curves::serde::SerdeObject;
use itertools::Itertools;
use rand_core::RngCore;
use serde::{Deserialize, Serialize};
use std::fmt::{Display, Formatter};
use std::io::{Read, Write};
use subtle::{Choice, ConditionallySelectable, ConstantTimeEq, CtOption};
use crate::util::{add_no_canonicalize_trashing_input, branch_hint, split, sqrt_tonelli_shanks};
use crate::util::{assume, try_inverse_u64};
/// Goldilocks field with modulus 2^64 - 2^32 + 1.
/// A Goldilocks field may store a non-canonical form of the element
/// where the value can be between 0 and 2^64.
/// For unique representation of its form, use `to_canonical_u64`
#[derive(Clone, Copy, Debug, Default, Eq, Serialize, Deserialize)]
#[derive(Clone, Copy, Debug, Default, Eq, Serialize, Deserialize, Hash)]
pub struct Goldilocks(pub(crate) u64);
impl SerdeObject for Goldilocks {

View File

@@ -2,18 +2,20 @@
use core::iter::{Product, Sum};
use core::ops::{Add, AddAssign, Mul, MulAssign, Neg, Sub, SubAssign};
use std::hash::Hash;
use std::io::{Read, Write};
use ff::{Field, FromUniformBytes, PrimeField};
use halo2curves::serde::SerdeObject;
use rand_core::RngCore;
use serde::{Deserialize, Serialize};
use std::io::{Read, Write};
use subtle::{Choice, ConditionallySelectable, ConstantTimeEq, CtOption};
use crate::field::SmallField;
use crate::Goldilocks;
/// Degree 3 Goldilocks extension field mod x^2 - 7
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Serialize, Deserialize)]
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Serialize, Deserialize, Hash)]
pub struct GoldilocksExt2(pub [Goldilocks; 2]);
/// For a = (a1, a2) and b = (b1, b2)

View File

@@ -2,18 +2,19 @@
use core::iter::{Product, Sum};
use core::ops::{Add, AddAssign, Mul, MulAssign, Neg, Sub, SubAssign};
use std::io::{Read, Write};
use ff::{Field, FromUniformBytes, PrimeField};
use halo2curves::serde::SerdeObject;
use rand_core::RngCore;
use serde::{Deserialize, Serialize};
use std::io::{Read, Write};
use subtle::{Choice, ConditionallySelectable, ConstantTimeEq, CtOption};
use crate::field::SmallField;
use crate::Goldilocks;
/// Degree 3 Goldilocks extension field mod x^3-x-1
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Serialize, Deserialize)]
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Serialize, Deserialize, Hash)]
pub struct GoldilocksExt3(pub [Goldilocks; 3]);
/// For a = (a1, a2, a3) and b = (b1, b2, b3)