From bbc2ff27ab0df2dd0dc83ef8a66d5354ad774af7 Mon Sep 17 00:00:00 2001 From: wborgeaud Date: Sat, 23 Jul 2022 09:18:41 +0200 Subject: [PATCH 1/2] Fix minor bug where `constant_affine_point` is called on zero --- ecdsa/src/gadgets/curve_fixed_base.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/ecdsa/src/gadgets/curve_fixed_base.rs b/ecdsa/src/gadgets/curve_fixed_base.rs index 8d675d12..d99d5760 100644 --- a/ecdsa/src/gadgets/curve_fixed_base.rs +++ b/ecdsa/src/gadgets/curve_fixed_base.rs @@ -40,14 +40,18 @@ pub fn fixed_base_curve_mul_circuit, cons // `s * P = sum s_i * P_i` with `P_i = (16^i) * P` and `s = sum s_i * (16^i)`. for (limb, point) in limbs.into_iter().zip(scaled_base) { // `muls_point[t] = t * P_i` for `t=0..16`. - let muls_point = (0..16) + let mut muls_point = (0..16) .scan(AffinePoint::ZERO, |acc, _| { let tmp = *acc; *acc = (point + *acc).to_affine(); Some(tmp) }) + // First element if zero, so we skip it since `constant_affine_point` takes non-zero input. + .skip(1) .map(|p| builder.constant_affine_point(p)) .collect::>(); + // We add back a point in position 0. `limb == zero` is checked below, so this point can be arbitrary. + muls_point.insert(0, muls_point[0].clone()); let is_zero = builder.is_equal(limb, zero); let should_add = builder.not(is_zero); // `r = s_i * P_i` From 1db5b7374da4f3f3cd07a6063aa917d53010c334 Mon Sep 17 00:00:00 2001 From: Daniel Lubarov Date: Sun, 24 Jul 2022 08:42:06 -0700 Subject: [PATCH 2/2] Move storage asm --- evm/src/cpu/kernel/aggregator.rs | 4 ++-- evm/src/cpu/kernel/asm/storage/read.asm | 2 ++ evm/src/cpu/kernel/asm/storage/write.asm | 2 ++ evm/src/cpu/kernel/asm/storage_read.asm | 10 ---------- evm/src/cpu/kernel/asm/storage_write.asm | 6 ------ 5 files changed, 6 insertions(+), 18 deletions(-) create mode 100644 evm/src/cpu/kernel/asm/storage/read.asm create mode 100644 evm/src/cpu/kernel/asm/storage/write.asm delete mode 100644 evm/src/cpu/kernel/asm/storage_read.asm delete mode 100644 evm/src/cpu/kernel/asm/storage_write.asm diff --git a/evm/src/cpu/kernel/aggregator.rs b/evm/src/cpu/kernel/aggregator.rs index ec42f5c4..ac5ec6df 100644 --- a/evm/src/cpu/kernel/aggregator.rs +++ b/evm/src/cpu/kernel/aggregator.rs @@ -43,8 +43,8 @@ pub(crate) fn combined_kernel() -> Kernel { include_str!("asm/secp256k1/lift_x.asm"), include_str!("asm/secp256k1/inverse_scalar.asm"), include_str!("asm/ecrecover.asm"), - include_str!("asm/storage_read.asm"), - include_str!("asm/storage_write.asm"), + include_str!("asm/storage/read.asm"), + include_str!("asm/storage/write.asm"), ]; let parsed_files = files.iter().map(|f| parse(f)).collect_vec(); diff --git a/evm/src/cpu/kernel/asm/storage/read.asm b/evm/src/cpu/kernel/asm/storage/read.asm new file mode 100644 index 00000000..04fea17a --- /dev/null +++ b/evm/src/cpu/kernel/asm/storage/read.asm @@ -0,0 +1,2 @@ +global storage_read: + // TODO diff --git a/evm/src/cpu/kernel/asm/storage/write.asm b/evm/src/cpu/kernel/asm/storage/write.asm new file mode 100644 index 00000000..940fb548 --- /dev/null +++ b/evm/src/cpu/kernel/asm/storage/write.asm @@ -0,0 +1,2 @@ +global storage_write: + // TODO diff --git a/evm/src/cpu/kernel/asm/storage_read.asm b/evm/src/cpu/kernel/asm/storage_read.asm deleted file mode 100644 index 6a704c61..00000000 --- a/evm/src/cpu/kernel/asm/storage_read.asm +++ /dev/null @@ -1,10 +0,0 @@ -// TODO: Dummy code for now. -global storage_read: - JUMPDEST - PUSH 1234 - POP - // An infinite loop: -mylabel: - JUMPDEST - PUSH mylabel - JUMP diff --git a/evm/src/cpu/kernel/asm/storage_write.asm b/evm/src/cpu/kernel/asm/storage_write.asm deleted file mode 100644 index 15c41b7c..00000000 --- a/evm/src/cpu/kernel/asm/storage_write.asm +++ /dev/null @@ -1,6 +0,0 @@ -// TODO: Dummy code for now. -global storage_write: - JUMPDEST - PUSH 123 // Whatever. - POP - BYTES 0x1, 0x02, 3