This commit is contained in:
Nicholas Ward 2021-11-10 11:53:45 -08:00
parent e4b894cb12
commit c7fda246ca
5 changed files with 18 additions and 21 deletions

View File

@ -93,10 +93,6 @@ pub trait Field:
self.square() * *self self.square() * *self
} }
fn double(&self) -> Self {
*self * Self::TWO
}
fn triple(&self) -> Self { fn triple(&self) -> Self {
*self * (Self::ONE + Self::TWO) *self * (Self::ONE + Self::TWO)
} }

View File

@ -1,18 +1,18 @@
use crate::curve::curve_types::{AffinePoint, Curve}; use crate::curve::curve_types::{AffinePoint, Curve};
use crate::field::extension_field::Extendable; use crate::field::extension_field::Extendable;
use crate::field::field_types::{Field, RichField}; use crate::field::field_types::{Field, RichField};
use crate::gadgets::nonnative::ForeignFieldTarget; use crate::gadgets::nonnative::NonNativeTarget;
use crate::plonk::circuit_builder::CircuitBuilder; use crate::plonk::circuit_builder::CircuitBuilder;
/// A Target representing an affine point on the curve `C`. /// A Target representing an affine point on the curve `C`.
#[derive(Clone, Debug)] #[derive(Clone, Debug)]
pub struct AffinePointTarget<C: Curve> { pub struct AffinePointTarget<C: Curve> {
pub x: ForeignFieldTarget<C::BaseField>, pub x: NonNativeTarget<C::BaseField>,
pub y: ForeignFieldTarget<C::BaseField>, pub y: NonNativeTarget<C::BaseField>,
} }
impl<C: Curve> AffinePointTarget<C> { impl<C: Curve> AffinePointTarget<C> {
pub fn to_vec(&self) -> Vec<ForeignFieldTarget<C::BaseField>> { pub fn to_vec(&self) -> Vec<NonNativeTarget<C::BaseField>> {
vec![self.x.clone(), self.y.clone()] vec![self.x.clone(), self.y.clone()]
} }
} }
@ -130,8 +130,8 @@ mod tests {
use crate::curve::curve_types::{AffinePoint, Curve}; use crate::curve::curve_types::{AffinePoint, Curve};
use crate::curve::secp256k1::Secp256K1; use crate::curve::secp256k1::Secp256K1;
use crate::field::crandall_field::CrandallField;
use crate::field::field_types::Field; use crate::field::field_types::Field;
use crate::field::goldilocks_field::GoldilocksField;
use crate::field::secp256k1_base::Secp256K1Base; use crate::field::secp256k1_base::Secp256K1Base;
use crate::iop::witness::PartialWitness; use crate::iop::witness::PartialWitness;
use crate::plonk::circuit_builder::CircuitBuilder; use crate::plonk::circuit_builder::CircuitBuilder;
@ -140,7 +140,7 @@ mod tests {
#[test] #[test]
fn test_curve_point_is_valid() -> Result<()> { fn test_curve_point_is_valid() -> Result<()> {
type F = CrandallField; type F = GoldilocksField;
const D: usize = 4; const D: usize = 4;
let config = CircuitConfig::large_config(); let config = CircuitConfig::large_config();
@ -164,7 +164,7 @@ mod tests {
#[test] #[test]
#[should_panic] #[should_panic]
fn test_curve_point_is_not_valid() { fn test_curve_point_is_not_valid() {
type F = CrandallField; type F = GoldilocksField;
const D: usize = 4; const D: usize = 4;
let config = CircuitConfig::large_config(); let config = CircuitConfig::large_config();
@ -190,7 +190,7 @@ mod tests {
#[test] #[test]
fn test_curve_double() -> Result<()> { fn test_curve_double() -> Result<()> {
type F = CrandallField; type F = GoldilocksField;
const D: usize = 4; const D: usize = 4;
let config = CircuitConfig::large_config(); let config = CircuitConfig::large_config();

View File

@ -10,8 +10,9 @@ use crate::iop::target::Target;
use crate::iop::witness::{PartitionWitness, Witness}; use crate::iop::witness::{PartitionWitness, Witness};
use crate::plonk::circuit_builder::CircuitBuilder; use crate::plonk::circuit_builder::CircuitBuilder;
#[derive(Clone, Debug)]
pub struct NonNativeTarget<FF: Field> { pub struct NonNativeTarget<FF: Field> {
value: BigUintTarget, pub(crate) value: BigUintTarget,
_phantom: PhantomData<FF>, _phantom: PhantomData<FF>,
} }
@ -107,8 +108,8 @@ impl<F: RichField + Extendable<D>, const D: usize> CircuitBuilder<F, D> {
inv inv
} }
/// Returns `x % |FF|` as a `ForeignFieldTarget`. /// Returns `x % |FF|` as a `NonNativeTarget`.
fn reduce<FF: Field>(&mut self, x: &BigUintTarget) -> ForeignFieldTarget<FF> { fn reduce<FF: Field>(&mut self, x: &BigUintTarget) -> NonNativeTarget<FF> {
let modulus = FF::order(); let modulus = FF::order();
let order_target = self.constant_biguint(&modulus); let order_target = self.constant_biguint(&modulus);
let value = self.rem_biguint(x, &order_target); let value = self.rem_biguint(x, &order_target);
@ -131,8 +132,8 @@ impl<F: RichField + Extendable<D>, const D: usize> CircuitBuilder<F, D> {
#[derive(Debug)] #[derive(Debug)]
struct NonNativeInverseGenerator<F: RichField + Extendable<D>, const D: usize, FF: Field> { struct NonNativeInverseGenerator<F: RichField + Extendable<D>, const D: usize, FF: Field> {
x: ForeignFieldTarget<FF>, x: NonNativeTarget<FF>,
inv: ForeignFieldTarget<FF>, inv: NonNativeTarget<FF>,
_phantom: PhantomData<F>, _phantom: PhantomData<F>,
} }

View File

@ -8,7 +8,7 @@ use crate::field::extension_field::{Extendable, FieldExtension};
use crate::field::field_types::{Field, RichField}; use crate::field::field_types::{Field, RichField};
use crate::gadgets::arithmetic_u32::U32Target; use crate::gadgets::arithmetic_u32::U32Target;
use crate::gadgets::biguint::BigUintTarget; use crate::gadgets::biguint::BigUintTarget;
use crate::gadgets::nonnative::ForeignFieldTarget; use crate::gadgets::nonnative::NonNativeTarget;
use crate::hash::hash_types::{HashOut, HashOutTarget}; use crate::hash::hash_types::{HashOut, HashOutTarget};
use crate::iop::target::Target; use crate::iop::target::Target;
use crate::iop::wire::Wire; use crate::iop::wire::Wire;
@ -169,7 +169,7 @@ impl<F: Field> GeneratedValues<F> {
} }
} }
pub fn set_nonnative_target<FF: Field>(&mut self, target: ForeignFieldTarget<FF>, value: FF) { pub fn set_nonnative_target<FF: Field>(&mut self, target: NonNativeTarget<FF>, value: FF) {
self.set_biguint_target(target.value, value.to_biguint()) self.set_biguint_target(target.value, value.to_biguint())
} }

View File

@ -6,7 +6,7 @@ use crate::field::extension_field::target::ExtensionTarget;
use crate::field::extension_field::{Extendable, FieldExtension}; use crate::field::extension_field::{Extendable, FieldExtension};
use crate::field::field_types::Field; use crate::field::field_types::Field;
use crate::gadgets::biguint::BigUintTarget; use crate::gadgets::biguint::BigUintTarget;
use crate::gadgets::nonnative::ForeignFieldTarget; use crate::gadgets::nonnative::NonNativeTarget;
use crate::hash::hash_types::HashOutTarget; use crate::hash::hash_types::HashOutTarget;
use crate::hash::hash_types::{HashOut, MerkleCapTarget}; use crate::hash::hash_types::{HashOut, MerkleCapTarget};
use crate::hash::merkle_tree::MerkleCap; use crate::hash::merkle_tree::MerkleCap;
@ -69,7 +69,7 @@ pub trait Witness<F: Field> {
result result
} }
fn get_nonnative_target<FF: Field>(&self, target: ForeignFieldTarget<FF>) -> FF { fn get_nonnative_target<FF: Field>(&self, target: NonNativeTarget<FF>) -> FF {
let val = self.get_biguint_target(target.value); let val = self.get_biguint_target(target.value);
FF::from_biguint(val) FF::from_biguint(val)
} }