mirror of
https://github.com/logos-storage/plonky2.git
synced 2026-01-04 14:53:08 +00:00
new api
This commit is contained in:
parent
c9b09936ce
commit
1f0776281e
@ -14,8 +14,8 @@ fn test_bls_fp2_mul() -> Result<()> {
|
||||
let x: Fp2<BLS381> = rng.gen::<Fp2<BLS381>>();
|
||||
let y: Fp2<BLS381> = rng.gen::<Fp2<BLS381>>();
|
||||
|
||||
let mut stack = x.to_stack();
|
||||
stack.extend(y.to_stack());
|
||||
let mut stack = x.to_stack().to_vec();
|
||||
stack.extend(y.to_stack().to_vec());
|
||||
stack.push(U256::from(0xdeadbeefu32));
|
||||
let setup = InterpreterMemoryInitialization {
|
||||
label: "mul_fp381_2".to_string(),
|
||||
|
||||
@ -2,6 +2,7 @@ use std::mem::transmute;
|
||||
use std::ops::{Add, Div, Mul, Neg, Sub};
|
||||
|
||||
use ethereum_types::{U256, U512};
|
||||
use plonky2::field::types::Field;
|
||||
use rand::distributions::{Distribution, Standard};
|
||||
use rand::Rng;
|
||||
|
||||
@ -1201,14 +1202,19 @@ where
|
||||
}
|
||||
|
||||
pub trait Stack {
|
||||
const SIZE: usize;
|
||||
|
||||
fn to_stack(&self) -> &[U256];
|
||||
|
||||
fn from_stack(stack: &[U256]) -> Self;
|
||||
}
|
||||
|
||||
impl Stack for BN254 {
|
||||
const SIZE: usize = 1;
|
||||
|
||||
fn to_stack(&self) -> &[U256] {
|
||||
&[self.val]
|
||||
let boxed: Box<[U256]> = Box::new([self.val]);
|
||||
Box::leak(boxed)
|
||||
}
|
||||
|
||||
fn from_stack(stack: &[U256]) -> BN254 {
|
||||
@ -1216,66 +1222,12 @@ impl Stack for BN254 {
|
||||
}
|
||||
}
|
||||
|
||||
impl Stack for Fp2<BN254> {
|
||||
fn to_stack(&self) -> &[U256] {
|
||||
let re = self.re.to_stack();
|
||||
let im = self.im.to_stack();
|
||||
let mut res = [U256::default(); 4];
|
||||
&[re[0], im[0]]
|
||||
}
|
||||
|
||||
fn from_stack(stack: &[U256]) -> Fp2<BN254> {
|
||||
let re = BN254::from_stack(&stack[0..2]);
|
||||
let im = BN254::from_stack(&stack[2..4]);
|
||||
Fp2 { re, im }
|
||||
}
|
||||
}
|
||||
|
||||
impl Stack for Fp6<BN254> {
|
||||
fn to_stack(&self) -> &[U256] {
|
||||
let t0 = self.t0.to_stack();
|
||||
let t1 = self.t1.to_stack();
|
||||
let t2 = self.t2.to_stack();
|
||||
|
||||
let mut res = [U256::default(); 6];
|
||||
for i in 0..2 {
|
||||
res[i] = t0[i];
|
||||
res[2 + i] = t1[i];
|
||||
res[4 + i] = t2[i];
|
||||
}
|
||||
&res
|
||||
}
|
||||
|
||||
fn from_stack(stack: &[U256]) -> Self {
|
||||
let mut f = [U256::zero(); 6];
|
||||
f.copy_from_slice(stack);
|
||||
unsafe { transmute(f) }
|
||||
}
|
||||
}
|
||||
|
||||
impl Stack for Fp12<BN254> {
|
||||
fn to_stack(&self) -> &[U256] {
|
||||
let z0 = self.z0.to_stack();
|
||||
let z1 = self.z1.to_stack();
|
||||
|
||||
let mut res = [U256::default(); 12];
|
||||
for i in 0..6 {
|
||||
res[i] = z0[i];
|
||||
res[6 + i] = z1[i];
|
||||
}
|
||||
&res
|
||||
}
|
||||
|
||||
fn from_stack(stack: &[U256]) -> Self {
|
||||
let mut f = [U256::zero(); 12];
|
||||
f.copy_from_slice(stack);
|
||||
unsafe { transmute(f) }
|
||||
}
|
||||
}
|
||||
|
||||
impl Stack for BLS381 {
|
||||
const SIZE: usize = 2;
|
||||
|
||||
fn to_stack(&self) -> &[U256] {
|
||||
&[self.lo(), self.hi()]
|
||||
let boxed: Box<[U256]> = Box::new([self.lo(), self.hi()]);
|
||||
Box::leak(boxed)
|
||||
}
|
||||
|
||||
fn from_stack(stack: &[U256]) -> BLS381 {
|
||||
@ -1286,65 +1238,74 @@ impl Stack for BLS381 {
|
||||
}
|
||||
}
|
||||
|
||||
impl Stack for Fp2<BLS381> {
|
||||
impl<T: FieldExt + Stack> Stack for Fp2<T> {
|
||||
const SIZE: usize = 2 * T::SIZE;
|
||||
|
||||
fn to_stack(&self) -> &[U256] {
|
||||
let re = self.re.to_stack();
|
||||
let im = self.im.to_stack();
|
||||
|
||||
let mut res = [U256::default(); 4];
|
||||
for i in 0..2 {
|
||||
res[i] = re[i];
|
||||
res[2 + i] = im[i];
|
||||
}
|
||||
&res
|
||||
let mut combined: Vec<U256> = Vec::new();
|
||||
combined.extend_from_slice(re);
|
||||
combined.extend_from_slice(im);
|
||||
Box::leak(combined.into_boxed_slice())
|
||||
}
|
||||
|
||||
fn from_stack(stack: &[U256]) -> Fp2<BLS381> {
|
||||
let re = BLS381::from_stack(&stack[0..2]);
|
||||
let im = BLS381::from_stack(&stack[2..4]);
|
||||
fn from_stack(stack: &[U256]) -> Fp2<T> {
|
||||
let re = T::from_stack(&stack[0..2]);
|
||||
let im = T::from_stack(&stack[2..4]);
|
||||
Fp2 { re, im }
|
||||
}
|
||||
}
|
||||
|
||||
impl Stack for Fp6<BLS381> {
|
||||
fn to_stack(&self) -> &[U256] {
|
||||
let t0 = self.t0.to_stack();
|
||||
let t1 = self.t1.to_stack();
|
||||
let t2 = self.t2.to_stack();
|
||||
// impl<T> Stack for Fp6<T>
|
||||
// where
|
||||
// T: FieldExt,
|
||||
// Fp2<T>: Adj,
|
||||
// Fp2<T>: Stack,
|
||||
// {
|
||||
// const SIZE: usize = 3 * Fp2::<T>::SIZE;
|
||||
|
||||
let mut res = [U256::default(); 12];
|
||||
for i in 0..4 {
|
||||
res[i] = t0[i];
|
||||
res[4 + i] = t1[i];
|
||||
res[8 + i] = t2[i];
|
||||
}
|
||||
&res
|
||||
}
|
||||
// fn to_stack(&self) -> &[U256] {
|
||||
// let t0 = self.t0.to_stack();
|
||||
// let t1 = self.t1.to_stack();
|
||||
// let t2 = self.t2.to_stack();
|
||||
|
||||
fn from_stack(stack: &[U256]) -> Fp6<BLS381> {
|
||||
let t0 = Fp2::<BLS381>::from_stack(&stack[0..4]);
|
||||
let t1 = Fp2::<BLS381>::from_stack(&stack[4..8]);
|
||||
let t2 = Fp2::<BLS381>::from_stack(&stack[8..12]);
|
||||
Fp6 { t0, t1, t2 }
|
||||
}
|
||||
}
|
||||
// let mut combined: Vec<U256> = Vec::new();
|
||||
// combined.extend_from_slice(t0);
|
||||
// combined.extend_from_slice(t1);
|
||||
// combined.extend_from_slice(t2);
|
||||
// Box::leak(combined.into_boxed_slice())
|
||||
// }
|
||||
|
||||
impl Stack for Fp12<BLS381> {
|
||||
fn to_stack(&self) -> &[U256] {
|
||||
let z0 = self.z0.to_stack();
|
||||
let z1 = self.z1.to_stack();
|
||||
// fn from_stack(stack: &[U256]) -> Self {
|
||||
// let f = [
|
||||
// T::from_stack(&stack[0..2]),
|
||||
// T::from_stack(&stack[2..4]),
|
||||
// T::from_stack(&stack[4..6]),
|
||||
// ];
|
||||
// f.copy_from_slice(stack);
|
||||
// unsafe { transmute(f) }
|
||||
// }
|
||||
// }
|
||||
|
||||
let mut res = [U256::default(); 24];
|
||||
for i in 0..12 {
|
||||
res[i] = z0[i];
|
||||
res[12 + i] = z1[i];
|
||||
}
|
||||
&res
|
||||
}
|
||||
// impl<T> Stack for Fp12<T>
|
||||
// where
|
||||
// T: FieldExt,
|
||||
// Fp2<T>: Adj,
|
||||
// Fp6<T>: Stack,{
|
||||
// const SIZE: usize = 2 * Fp6::<T>::SIZE;
|
||||
|
||||
fn from_stack(stack: &[U256]) -> Fp12<BLS381> {
|
||||
let z0 = Fp6::<BLS381>::from_stack(&stack[0..12]);
|
||||
let z1 = Fp6::<BLS381>::from_stack(&stack[12..24]);
|
||||
Fp12 { z0, z1 }
|
||||
}
|
||||
}
|
||||
// fn to_stack(&self) -> &[U256] {
|
||||
// let z0 = self.z0.to_stack();
|
||||
// let z1 = self.z1.to_stack();
|
||||
|
||||
// let mut combined: Vec<U256> = Vec::new();
|
||||
// combined.extend_from_slice(z0);
|
||||
// combined.extend_from_slice(z1);
|
||||
// Box::leak(combined.into_boxed_slice())
|
||||
// }
|
||||
|
||||
// fn from_stack(stack: &[U256]) -> Self {
|
||||
// let f = [T::from_stack(&stack[0..6]), T::from_stack(&stack[6..12])];
|
||||
// }
|
||||
// }
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user