Skip to content

Commit f14654c

Browse files
committed
tests(stm): add golden test for aggregate signature with concatenation
1 parent 4253450 commit f14654c

File tree

1 file changed

+114
-1
lines changed

1 file changed

+114
-1
lines changed

mithril-stm/src/aggregate_signature/signature.rs

Lines changed: 114 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ impl<D: Clone + Digest + FixedOutput + Send + Sync> AggregateSignature<D> {
200200
mod tests {
201201
use super::*;
202202

203-
mod aggregate_signature_type {
203+
mod aggregate_signature_type_golden {
204204
use super::*;
205205

206206
#[test]
@@ -215,4 +215,117 @@ mod tests {
215215
);
216216
}
217217
}
218+
219+
mod aggregate_signature_golden_concatenation {
220+
use blake2::{Blake2b, digest::consts::U32};
221+
use rand_chacha::ChaCha20Rng;
222+
use rand_core::SeedableRng;
223+
224+
use crate::bls_multi_signature::{BlsSigningKey, BlsVerificationKeyProofOfPossession};
225+
use crate::{
226+
AggregateSignature, AggregateSignatureType, Clerk, ClosedKeyRegistration,
227+
KeyRegistration, Parameters, Signer,
228+
};
229+
230+
type D = Blake2b<U32>;
231+
232+
const GOLDEN_JSON: &str = r#"
233+
{
234+
"signatures": [
235+
[
236+
{
237+
"sigma": [
238+
149, 157, 201, 187, 140, 54, 0, 128, 209, 88, 16, 203, 61, 78, 77, 98,
239+
161, 133, 58, 152, 29, 74, 217, 113, 64, 100, 10, 161, 186, 167, 133,
240+
114, 211, 153, 218, 56, 223, 84, 105, 242, 41, 54, 224, 170, 208, 185,
241+
126, 83
242+
],
243+
"indexes": [1, 4, 5, 8],
244+
"signer_index": 0
245+
},
246+
[
247+
[
248+
143, 161, 255, 48, 78, 57, 204, 220, 25, 221, 164, 252, 248, 14, 56,
249+
126, 186, 135, 228, 188, 145, 181, 52, 200, 97, 99, 213, 46, 0, 199,
250+
193, 89, 187, 88, 29, 135, 173, 244, 86, 36, 83, 54, 67, 164, 6, 137,
251+
94, 72, 6, 105, 128, 128, 93, 48, 176, 11, 4, 246, 138, 48, 180, 133,
252+
90, 142, 192, 24, 193, 111, 142, 31, 76, 111, 110, 234, 153, 90, 208,
253+
192, 31, 124, 95, 102, 49, 158, 99, 52, 220, 165, 94, 251, 68, 69,
254+
121, 16, 224, 194
255+
],
256+
1
257+
]
258+
],
259+
[
260+
{
261+
"sigma": [
262+
149, 169, 22, 201, 216, 97, 163, 188, 115, 210, 217, 236, 233, 161,
263+
201, 13, 42, 132, 12, 63, 5, 31, 120, 22, 78, 177, 125, 134, 208, 205,
264+
73, 58, 247, 141, 59, 62, 187, 81, 213, 30, 153, 218, 41, 42, 110,
265+
156, 161, 205
266+
],
267+
"indexes": [0, 3, 6],
268+
"signer_index": 1
269+
},
270+
[
271+
[
272+
145, 56, 175, 32, 122, 187, 214, 226, 251, 148, 88, 9, 1, 103, 159,
273+
146, 80, 166, 107, 243, 251, 236, 41, 28, 111, 128, 207, 164, 132,
274+
147, 228, 83, 246, 228, 170, 68, 89, 78, 60, 28, 123, 130, 88, 234,
275+
38, 97, 42, 65, 1, 100, 53, 18, 78, 131, 8, 61, 122, 131, 238, 84,
276+
233, 223, 154, 118, 118, 73, 28, 27, 101, 78, 80, 233, 123, 206, 220,
277+
174, 134, 205, 71, 110, 112, 180, 97, 98, 0, 113, 69, 145, 231, 168,
278+
43, 173, 172, 56, 104, 208
279+
],
280+
1
281+
]
282+
]
283+
],
284+
"batch_proof": { "values": [], "indices": [0, 1], "hasher": null }
285+
}
286+
"#;
287+
288+
fn golden_value() -> AggregateSignature<D> {
289+
let mut rng = ChaCha20Rng::from_seed([0u8; 32]);
290+
let msg = [0u8; 16];
291+
let params = Parameters {
292+
m: 10,
293+
k: 5,
294+
phi_f: 0.8,
295+
};
296+
let sk_1 = BlsSigningKey::generate(&mut rng);
297+
let sk_2 = BlsSigningKey::generate(&mut rng);
298+
let pk_1 = BlsVerificationKeyProofOfPossession::from(&sk_1);
299+
let pk_2 = BlsVerificationKeyProofOfPossession::from(&sk_2);
300+
let mut key_reg = KeyRegistration::init();
301+
key_reg.register(1, pk_1).unwrap();
302+
key_reg.register(1, pk_2).unwrap();
303+
let closed_key_reg: ClosedKeyRegistration<D> = key_reg.close();
304+
let clerk = Clerk::new_clerk_from_closed_key_registration(&params, &closed_key_reg);
305+
let signer_1 = Signer::set_signer(0, 1, params, sk_1, pk_1.vk, closed_key_reg.clone());
306+
let signer_2 = Signer::set_signer(1, 1, params, sk_2, pk_2.vk, closed_key_reg);
307+
let signature_1 = signer_1.sign(&msg).unwrap();
308+
let signature_2 = signer_2.sign(&msg).unwrap();
309+
310+
clerk
311+
.aggregate_signatures_with_type(
312+
&[signature_1, signature_2],
313+
&msg,
314+
AggregateSignatureType::Concatenation,
315+
)
316+
.unwrap()
317+
}
318+
319+
#[test]
320+
fn golden_conversions() {
321+
let value: AggregateSignature<D> = serde_json::from_str(GOLDEN_JSON)
322+
.expect("This JSON deserialization should not fail");
323+
324+
let serialized =
325+
serde_json::to_string(&value).expect("This JSON serialization should not fail");
326+
let golden_serialized = serde_json::to_string(&golden_value())
327+
.expect("This JSON serialization should not fail");
328+
assert_eq!(golden_serialized, serialized);
329+
}
330+
}
218331
}

0 commit comments

Comments
 (0)