mithril_common/test/crypto_helper/cardano/kes/
signer_fake.rs1use std::collections::VecDeque;
2
3use kes_summed_ed25519::kes::Sum6KesSig;
4use std::sync::Mutex;
5
6use crate::{
7 StdResult,
8 crypto_helper::{KesPeriod, KesSigner, KesSignerStandard, OpCert},
9 test::crypto_helper::{
10 KesCryptographicMaterialForTest, KesPartyIndexForTest, create_kes_cryptographic_material,
11 },
12};
13
14type KesSignatureResult = StdResult<(Sum6KesSig, OpCert)>;
15
16pub struct KesSignerFake {
18 results: Mutex<VecDeque<KesSignatureResult>>,
19}
20
21impl KesSignerFake {
22 pub fn new(results: Vec<KesSignatureResult>) -> Self {
24 Self {
25 results: Mutex::new(results.into()),
26 }
27 }
28
29 pub fn dummy_signature() -> (Sum6KesSig, OpCert) {
31 let KesCryptographicMaterialForTest {
32 party_id: _,
33 operational_certificate_file,
34 kes_secret_key_file,
35 } = create_kes_cryptographic_material(
36 1 as KesPartyIndexForTest,
37 0 as KesPeriod,
38 "fake_kes_signer_returns_signature_batches_in_expected_order",
39 );
40 let message = b"Test message for KES signing";
41 let kes_signer = KesSignerStandard::new(kes_secret_key_file, operational_certificate_file);
42 let kes_signing_period = 1;
43 let (kes_signature, op_cert) = kes_signer
44 .sign(message, kes_signing_period)
45 .expect("Signing should not fail");
46
47 (kes_signature, op_cert)
48 }
49
50 pub fn dummy_signature_result_err() -> KesSignatureResult {
52 Err(anyhow::anyhow!("Dummy error"))
53 }
54}
55
56impl KesSigner for KesSignerFake {
57 fn sign(&self, _message: &[u8], _kes_period: KesPeriod) -> KesSignatureResult {
58 let mut results = self.results.lock().unwrap();
59
60 results.pop_front().unwrap()
61 }
62}
63
64#[cfg(test)]
65mod tests {
66 use super::*;
67
68 #[test]
69 fn fake_kes_signer_returns_signature_batches_in_expected_order() {
70 let KesCryptographicMaterialForTest {
71 party_id: _,
72 operational_certificate_file,
73 kes_secret_key_file,
74 } = create_kes_cryptographic_material(
75 1 as KesPartyIndexForTest,
76 0 as KesPeriod,
77 "fake_kes_signer_returns_signature_batches_in_expected_order",
78 );
79 let message = b"Test message for KES signing";
80 let kes_signer = KesSignerStandard::new(kes_secret_key_file, operational_certificate_file);
81 let kes_signing_period = 1;
82 let (kes_signature, op_cert) = kes_signer
83 .sign(message, kes_signing_period)
84 .expect("Signing should not fail");
85 let fake_kes_signer = KesSignerFake::new(vec![
86 Ok((kes_signature, op_cert.clone())),
87 Err(anyhow::anyhow!("Fake error")),
88 ]);
89
90 let (kes_signature_1, op_cert_1) = fake_kes_signer
91 .sign(message, kes_signing_period)
92 .expect("Signing should not fail");
93 assert_eq!(kes_signature, kes_signature_1);
94 assert_eq!(op_cert, op_cert_1);
95
96 fake_kes_signer
97 .sign(message, kes_signing_period)
98 .expect_err("Signing should fail");
99 }
100}