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
}
fn double(&self) -> Self {
*self * Self::TWO
}
fn triple(&self) -> Self {
*self * (Self::ONE + Self::TWO)
}

View File

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

View File

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

View File

@ -6,7 +6,7 @@ use crate::field::extension_field::target::ExtensionTarget;
use crate::field::extension_field::{Extendable, FieldExtension};
use crate::field::field_types::Field;
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::{HashOut, MerkleCapTarget};
use crate::hash::merkle_tree::MerkleCap;
@ -69,7 +69,7 @@ pub trait Witness<F: Field> {
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);
FF::from_biguint(val)
}