mirror of
https://github.com/arnaucube/ark-r1cs-std.git
synced 2026-01-11 08:21:30 +01:00
Adds alloc_constant to AllocGadget (#189)
* adds alloc constant to AllocGadget * fmt * fmt * more alloc constant impls * fmt * even more impls * fixes type * fixes alloc_constant in gm17 * uses alloc_constant from field gadget in group gadgets * fmt * handle most comments
This commit is contained in:
@@ -8,6 +8,13 @@ where
|
||||
Self: Sized,
|
||||
V: ?Sized,
|
||||
{
|
||||
fn alloc_constant<T, CS: ConstraintSystem<ConstraintF>>(
|
||||
cs: CS,
|
||||
t: T,
|
||||
) -> Result<Self, SynthesisError>
|
||||
where
|
||||
T: Borrow<V>;
|
||||
|
||||
fn alloc<F, T, CS: ConstraintSystem<ConstraintF>>(cs: CS, f: F) -> Result<Self, SynthesisError>
|
||||
where
|
||||
F: FnOnce() -> Result<T, SynthesisError>,
|
||||
@@ -47,6 +54,21 @@ where
|
||||
impl<I, ConstraintF: Field, A: AllocGadget<I, ConstraintF>> AllocGadget<[I], ConstraintF>
|
||||
for Vec<A>
|
||||
{
|
||||
#[inline]
|
||||
fn alloc_constant<T, CS: ConstraintSystem<ConstraintF>>(
|
||||
mut cs: CS,
|
||||
t: T,
|
||||
) -> Result<Self, SynthesisError>
|
||||
where
|
||||
T: Borrow<[I]>,
|
||||
{
|
||||
let mut vec = Vec::new();
|
||||
for (i, value) in t.borrow().iter().enumerate() {
|
||||
vec.push(A::alloc_constant(cs.ns(|| format!("value_{}", i)), value)?);
|
||||
}
|
||||
Ok(vec)
|
||||
}
|
||||
|
||||
fn alloc<F, T, CS: ConstraintSystem<ConstraintF>>(
|
||||
mut cs: CS,
|
||||
f: F,
|
||||
|
||||
@@ -235,6 +235,16 @@ impl PartialEq for AllocatedBit {
|
||||
impl Eq for AllocatedBit {}
|
||||
|
||||
impl<ConstraintF: Field> AllocGadget<bool, ConstraintF> for AllocatedBit {
|
||||
fn alloc_constant<T, CS: ConstraintSystem<ConstraintF>>(
|
||||
_cs: CS,
|
||||
_t: T,
|
||||
) -> Result<Self, SynthesisError>
|
||||
where
|
||||
T: Borrow<bool>,
|
||||
{
|
||||
unimplemented!();
|
||||
}
|
||||
|
||||
fn alloc<F, T, CS: ConstraintSystem<ConstraintF>>(
|
||||
mut cs: CS,
|
||||
value_gen: F,
|
||||
@@ -715,6 +725,16 @@ impl From<AllocatedBit> for Boolean {
|
||||
}
|
||||
|
||||
impl<ConstraintF: Field> AllocGadget<bool, ConstraintF> for Boolean {
|
||||
fn alloc_constant<T, CS: ConstraintSystem<ConstraintF>>(
|
||||
_cs: CS,
|
||||
t: T,
|
||||
) -> Result<Self, SynthesisError>
|
||||
where
|
||||
T: Borrow<bool>,
|
||||
{
|
||||
Ok(Boolean::constant(*t.borrow()))
|
||||
}
|
||||
|
||||
fn alloc<F, T, CS: ConstraintSystem<ConstraintF>>(
|
||||
cs: CS,
|
||||
value_gen: F,
|
||||
|
||||
@@ -277,6 +277,16 @@ impl UInt64 {
|
||||
}
|
||||
|
||||
impl<ConstraintF: Field> AllocGadget<u64, ConstraintF> for UInt64 {
|
||||
fn alloc_constant<T, CS: ConstraintSystem<ConstraintF>>(
|
||||
_cs: CS,
|
||||
t: T,
|
||||
) -> Result<Self, SynthesisError>
|
||||
where
|
||||
T: Borrow<u64>,
|
||||
{
|
||||
Ok(UInt64::constant(*t.borrow()))
|
||||
}
|
||||
|
||||
fn alloc<F, T, CS: ConstraintSystem<ConstraintF>>(
|
||||
mut cs: CS,
|
||||
value_gen: F,
|
||||
|
||||
@@ -214,6 +214,16 @@ impl<ConstraintF: Field> ConditionalEqGadget<ConstraintF> for UInt8 {
|
||||
impl<ConstraintF: Field> EqGadget<ConstraintF> for UInt8 {}
|
||||
|
||||
impl<ConstraintF: Field> AllocGadget<u8, ConstraintF> for UInt8 {
|
||||
fn alloc_constant<T, CS: ConstraintSystem<ConstraintF>>(
|
||||
_cs: CS,
|
||||
t: T,
|
||||
) -> Result<Self, SynthesisError>
|
||||
where
|
||||
T: Borrow<u8>,
|
||||
{
|
||||
Ok(UInt8::constant(*t.borrow()))
|
||||
}
|
||||
|
||||
fn alloc<F, T, CS: ConstraintSystem<ConstraintF>>(
|
||||
mut cs: CS,
|
||||
value_gen: F,
|
||||
|
||||
@@ -584,6 +584,18 @@ impl<F: PrimeField> Clone for FpGadget<F> {
|
||||
}
|
||||
|
||||
impl<F: PrimeField> AllocGadget<F, F> for FpGadget<F> {
|
||||
#[inline]
|
||||
fn alloc_constant<T, CS: ConstraintSystem<F>>(_cs: CS, t: T) -> Result<Self, SynthesisError>
|
||||
where
|
||||
T: Borrow<F>,
|
||||
{
|
||||
let value = t.borrow().clone();
|
||||
Ok(Self {
|
||||
value: Some(value),
|
||||
variable: LinearCombination::from((value, CS::one())).into(),
|
||||
})
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn alloc<FN, T, CS: ConstraintSystem<F>>(
|
||||
mut cs: CS,
|
||||
|
||||
@@ -834,6 +834,17 @@ where
|
||||
P: Fp12Parameters,
|
||||
<P::Fp6Params as Fp6Parameters>::Fp2Params: Fp2Parameters<Fp = ConstraintF>,
|
||||
{
|
||||
#[inline]
|
||||
fn alloc_constant<T, CS: ConstraintSystem<ConstraintF>>(
|
||||
mut cs: CS,
|
||||
t: T,
|
||||
) -> Result<Self, SynthesisError>
|
||||
where
|
||||
T: Borrow<Fp12<P>>,
|
||||
{
|
||||
Self::zero(cs.ns(|| "zero"))?.add_constant(cs.ns(|| "add constant"), t.borrow())
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn alloc<F, T, CS: ConstraintSystem<ConstraintF>>(
|
||||
mut cs: CS,
|
||||
|
||||
@@ -611,6 +611,17 @@ impl<P: Fp2Parameters<Fp = ConstraintF>, ConstraintF: PrimeField>
|
||||
impl<P: Fp2Parameters<Fp = ConstraintF>, ConstraintF: PrimeField> AllocGadget<Fp2<P>, ConstraintF>
|
||||
for Fp2Gadget<P, ConstraintF>
|
||||
{
|
||||
#[inline]
|
||||
fn alloc_constant<T, CS: ConstraintSystem<ConstraintF>>(
|
||||
mut cs: CS,
|
||||
t: T,
|
||||
) -> Result<Self, SynthesisError>
|
||||
where
|
||||
T: Borrow<Fp2<P>>,
|
||||
{
|
||||
Self::zero(cs.ns(|| "zero"))?.add_constant(cs.ns(|| "add constant"), t.borrow())
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn alloc<F, T, CS: ConstraintSystem<ConstraintF>>(
|
||||
mut cs: CS,
|
||||
|
||||
@@ -867,6 +867,17 @@ impl<P: Fp3Parameters<Fp = ConstraintF>, ConstraintF: PrimeField + SquareRootFie
|
||||
impl<P: Fp3Parameters<Fp = ConstraintF>, ConstraintF: PrimeField + SquareRootField>
|
||||
AllocGadget<Fp3<P>, ConstraintF> for Fp3Gadget<P, ConstraintF>
|
||||
{
|
||||
#[inline]
|
||||
fn alloc_constant<T, CS: ConstraintSystem<ConstraintF>>(
|
||||
mut cs: CS,
|
||||
t: T,
|
||||
) -> Result<Self, SynthesisError>
|
||||
where
|
||||
T: Borrow<Fp3<P>>,
|
||||
{
|
||||
Self::zero(cs.ns(|| "zero"))?.add_constant(cs.ns(|| "add constant"), t.borrow())
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn alloc<F, T, CS: ConstraintSystem<ConstraintF>>(
|
||||
mut cs: CS,
|
||||
|
||||
@@ -673,6 +673,17 @@ where
|
||||
P: Fp4Parameters,
|
||||
P::Fp2Params: Fp2Parameters<Fp = ConstraintF>,
|
||||
{
|
||||
#[inline]
|
||||
fn alloc_constant<T, CS: ConstraintSystem<ConstraintF>>(
|
||||
mut cs: CS,
|
||||
t: T,
|
||||
) -> Result<Self, SynthesisError>
|
||||
where
|
||||
T: Borrow<Fp4<P>>,
|
||||
{
|
||||
Self::zero(cs.ns(|| "zero"))?.add_constant(cs.ns(|| "add constant"), t.borrow())
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn alloc<F, T, CS: ConstraintSystem<ConstraintF>>(
|
||||
mut cs: CS,
|
||||
|
||||
@@ -664,6 +664,17 @@ where
|
||||
P: Fp6Parameters,
|
||||
P::Fp3Params: Fp3Parameters<Fp = ConstraintF>,
|
||||
{
|
||||
#[inline]
|
||||
fn alloc_constant<T, CS: ConstraintSystem<ConstraintF>>(
|
||||
mut cs: CS,
|
||||
t: T,
|
||||
) -> Result<Self, SynthesisError>
|
||||
where
|
||||
T: Borrow<Fp6<P>>,
|
||||
{
|
||||
Self::zero(cs.ns(|| "zero"))?.add_constant(cs.ns(|| "add constant"), t.borrow())
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn alloc<F, T, CS: ConstraintSystem<ConstraintF>>(
|
||||
mut cs: CS,
|
||||
|
||||
@@ -964,6 +964,17 @@ where
|
||||
P: Fp6Parameters,
|
||||
P::Fp2Params: Fp2Parameters<Fp = ConstraintF>,
|
||||
{
|
||||
#[inline]
|
||||
fn alloc_constant<T, CS: ConstraintSystem<ConstraintF>>(
|
||||
mut cs: CS,
|
||||
t: T,
|
||||
) -> Result<Self, SynthesisError>
|
||||
where
|
||||
T: Borrow<Fp6<P>>,
|
||||
{
|
||||
Self::zero(cs.ns(|| "zero"))?.add_constant(cs.ns(|| "add constant"), t.borrow())
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn alloc<F, T, CS: ConstraintSystem<ConstraintF>>(
|
||||
mut cs: CS,
|
||||
|
||||
@@ -437,6 +437,24 @@ where
|
||||
ConstraintF: PrimeField,
|
||||
F: FieldGadget<P::BaseField, ConstraintF>,
|
||||
{
|
||||
#[inline]
|
||||
fn alloc_constant<T, CS: ConstraintSystem<ConstraintF>>(
|
||||
mut cs: CS,
|
||||
t: T,
|
||||
) -> Result<Self, SynthesisError>
|
||||
where
|
||||
T: Borrow<SWProjective<P>>,
|
||||
{
|
||||
let p = t.borrow().into_affine();
|
||||
Ok(Self {
|
||||
x: F::alloc_constant(cs.ns(|| "x"), &p.x)?,
|
||||
y: F::alloc_constant(cs.ns(|| "y"), &p.y)?,
|
||||
infinity: Boolean::constant(p.infinity),
|
||||
_params: PhantomData,
|
||||
_engine: PhantomData,
|
||||
})
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn alloc<FN, T, CS: ConstraintSystem<ConstraintF>>(
|
||||
mut cs: CS,
|
||||
|
||||
@@ -492,6 +492,23 @@ mod affine_impl {
|
||||
F: FieldGadget<P::BaseField, ConstraintF>,
|
||||
Self: GroupGadget<TEAffine<P>, ConstraintF>,
|
||||
{
|
||||
#[inline]
|
||||
fn alloc_constant<T, CS: ConstraintSystem<ConstraintF>>(
|
||||
mut cs: CS,
|
||||
t: T,
|
||||
) -> Result<Self, SynthesisError>
|
||||
where
|
||||
T: Borrow<TEAffine<P>>,
|
||||
{
|
||||
let p = t.borrow();
|
||||
Ok(Self {
|
||||
x: F::alloc_constant(cs.ns(|| "x"), &p.x)?,
|
||||
y: F::alloc_constant(cs.ns(|| "y"), &p.y)?,
|
||||
_params: PhantomData,
|
||||
_engine: PhantomData,
|
||||
})
|
||||
}
|
||||
|
||||
fn alloc<FN, T, CS: ConstraintSystem<ConstraintF>>(
|
||||
mut cs: CS,
|
||||
value_gen: FN,
|
||||
@@ -1089,6 +1106,23 @@ mod projective_impl {
|
||||
F: FieldGadget<P::BaseField, ConstraintF>,
|
||||
Self: GroupGadget<TEProjective<P>, ConstraintF>,
|
||||
{
|
||||
#[inline]
|
||||
fn alloc_constant<T, CS: ConstraintSystem<ConstraintF>>(
|
||||
mut cs: CS,
|
||||
t: T,
|
||||
) -> Result<Self, SynthesisError>
|
||||
where
|
||||
T: Borrow<TEProjective<P>>,
|
||||
{
|
||||
let p = t.borrow().into_affine();
|
||||
Ok(Self {
|
||||
x: F::alloc_constant(cs.ns(|| "x"), &p.x)?,
|
||||
y: F::alloc_constant(cs.ns(|| "y"), &p.y)?,
|
||||
_params: PhantomData,
|
||||
_engine: PhantomData,
|
||||
})
|
||||
}
|
||||
|
||||
fn alloc<FN, T, CS: ConstraintSystem<ConstraintF>>(
|
||||
mut cs: CS,
|
||||
value_gen: FN,
|
||||
|
||||
Reference in New Issue
Block a user