From 643057a07c7c6aa055d85fff0f5db79f44d1d082 Mon Sep 17 00:00:00 2001 From: VolodymyrBg Date: Mon, 9 Feb 2026 10:11:59 +0200 Subject: [PATCH 1/2] perf: remove redundant Felt252 bytes roundtrip in SignatureBuiltinRunner --- vm/src/vm/runners/builtin_runner/signature.rs | 38 ++++--------------- 1 file changed, 7 insertions(+), 31 deletions(-) diff --git a/vm/src/vm/runners/builtin_runner/signature.rs b/vm/src/vm/runners/builtin_runner/signature.rs index bdd7a95a0c..6bd529596a 100644 --- a/vm/src/vm/runners/builtin_runner/signature.rs +++ b/vm/src/vm/runners/builtin_runner/signature.rs @@ -61,17 +61,7 @@ impl SignatureBuiltinRunner { relocatable: Relocatable, (r, s): &(Felt252, Felt252), ) -> Result<(), MemoryError> { - let r_be_bytes = r.to_bytes_be(); - let s_be_bytes = s.to_bytes_be(); - let (r_felt, s_felt) = ( - Felt252::from_bytes_be(&r_be_bytes), - Felt252::from_bytes_be(&s_be_bytes), - ); - - let signature = Signature { - r: r_felt, - s: s_felt, - }; + let signature = Signature { r: *r, s: *s }; self.signatures .borrow_mut() @@ -131,10 +121,8 @@ impl SignatureBuiltinRunner { .get(&pubkey_addr) .ok_or_else(|| MemoryError::SignatureNotFound(Box::new(pubkey_addr)))?; - let public_key = Felt252::from_bytes_be(&pubkey.to_bytes_be()); let (r, s) = (signature.r, signature.s); - let message = Felt252::from_bytes_be(&msg.to_bytes_be()); - match verify(&public_key, &message, &r, &s) { + match verify(&pubkey, &msg, &r, &s) { Ok(true) => Ok(vec![]), _ => Err(MemoryError::InvalidSignature(Box::new(( format!("({}, {})", signature.r, signature.s), @@ -171,15 +159,7 @@ impl SignatureBuiltinRunner { .signatures .borrow() .iter() - .map(|(k, v)| { - ( - *k, - ( - Felt252::from_bytes_be(&v.r.to_bytes_be()), - Felt252::from_bytes_be(&v.s.to_bytes_be()), - ), - ) - }) + .map(|(k, v)| (*k, (v.r, v.s))) .collect(); BuiltinAdditionalData::Signature(signatures) } @@ -197,13 +177,9 @@ impl SignatureBuiltinRunner { if addr.segment_index != self.base as isize { return Err(RunnerError::InvalidAdditionalData(BuiltinName::ecdsa)); } - self.signatures.borrow_mut().insert( - *addr, - Signature { - r: Felt252::from_bytes_be(&r.to_bytes_be()), - s: Felt252::from_bytes_be(&s.to_bytes_be()), - }, - ); + self.signatures + .borrow_mut() + .insert(*addr, Signature { r: *r, s: *s }); } Ok(()) } @@ -235,7 +211,7 @@ impl SignatureBuiltinRunner { pubkey: *pubkey, msg: *msg, signature_input: SignatureInput { - r: Felt252::from_bytes_be(&signature.r.to_bytes_be()), + r: signature.r, w: Felt252::from( &div_mod( &BigInt::one(), From 6fbb83e9da1d302ce1bfbabbed024c5c726b96ca Mon Sep 17 00:00:00 2001 From: VolodymyrBg Date: Mon, 9 Feb 2026 10:15:36 +0200 Subject: [PATCH 2/2] Update CHANGELOG.md --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9c2b25e9a3..9a7242ee79 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,8 @@ Both branches support Stwo prover opcodes (Blake2s, QM31) since v2.0.0. #### Upcoming Changes +* perf: remove redundant Felt252 bytes roundtrip in SignatureBuiltinRunner [#2323](https://github.com/lambdaclass/cairo-vm/pull/2323) + * feat: Make `write_encoded` API public again [#2306](https://github.com/lambdaclass/cairo-vm/pull/2306) * refactor: deduplicate memcpy/memset scope initialization in builtin hint processor [#2313](https://github.com/lambdaclass/cairo-vm/pull/2313)