Extend modular-frost to test with scaled and offset keys

The transcript transcripted the group key _plus_ the offset, when it should've
only transcripted the group key as the declared group key already had the
offset applied. This has been fixed.
This commit is contained in:
Luke Parker
2025-08-15 21:16:23 -04:00
parent 38dd8cb191
commit 3919cf55ae
2 changed files with 4 additions and 8 deletions

View File

@@ -357,12 +357,7 @@ impl<C: Curve, A: Algorithm<C>> SignMachine<A::Signature> for AlgorithmSignMachi
// Re-format into the FROST-expected rho transcript // Re-format into the FROST-expected rho transcript
let mut rho_transcript = A::Transcript::new(b"FROST_rho"); let mut rho_transcript = A::Transcript::new(b"FROST_rho");
rho_transcript.append_message( rho_transcript.append_message(b"group_key", self.params.keys.group_key().to_bytes());
b"group_key",
(self.params.keys.group_key() +
(C::generator() * self.params.keys.current_offset().unwrap_or(C::F::ZERO)))
.to_bytes(),
);
rho_transcript.append_message(b"message", C::hash_msg(msg)); rho_transcript.append_message(b"message", C::hash_msg(msg));
rho_transcript.append_message( rho_transcript.append_message(
b"preprocesses", b"preprocesses",

View File

@@ -251,10 +251,11 @@ pub fn test_offset_schnorr<R: RngCore + CryptoRng, C: Curve, H: Hram<C>>(rng: &m
let mut keys = key_gen(&mut *rng); let mut keys = key_gen(&mut *rng);
let group_key = keys[&Participant::new(1).unwrap()].group_key(); let group_key = keys[&Participant::new(1).unwrap()].group_key();
let scalar = C::F::from(3);
let offset = C::F::from(5); let offset = C::F::from(5);
let offset_key = group_key + (C::generator() * offset); let offset_key = (group_key * scalar) + (C::generator() * offset);
for keys in keys.values_mut() { for keys in keys.values_mut() {
*keys = keys.offset(offset); *keys = keys.clone().scale(scalar).unwrap().offset(offset);
assert_eq!(keys.group_key(), offset_key); assert_eq!(keys.group_key(), offset_key);
} }