Skip to content

Commit fdcb5d9

Browse files
committed
feat(common): add signed messages recording in 'FakeKesSigner'
1 parent 22b5720 commit fdcb5d9

File tree

1 file changed

+20
-5
lines changed

1 file changed

+20
-5
lines changed

mithril-common/src/test/crypto_helper/cardano/kes/signer_fake.rs

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,24 @@ type KesSignatureResult = StdResult<(Sum6KesSig, OpCert)>;
1616
/// Fake KES Signer implementation.
1717
pub struct KesSignerFake {
1818
results: Mutex<VecDeque<KesSignatureResult>>,
19+
signed_messages: Mutex<VecDeque<Vec<u8>>>,
1920
}
2021

2122
impl KesSignerFake {
2223
/// Creates a new `KesSignerFake` instance.
2324
pub fn new(results: Vec<KesSignatureResult>) -> Self {
2425
Self {
2526
results: Mutex::new(results.into()),
27+
signed_messages: Mutex::new(VecDeque::new()),
2628
}
2729
}
2830

31+
/// Returns the messages that were requested to be signed
32+
pub fn get_signed_messages(&self) -> Vec<Vec<u8>> {
33+
let messages = self.signed_messages.lock().unwrap();
34+
messages.iter().cloned().collect()
35+
}
36+
2937
/// Returns a dummy signature result that is always successful.
3038
pub fn dummy_signature(test_directory: &str) -> (Sum6KesSig, OpCert) {
3139
let KesCryptographicMaterialForTest {
@@ -55,7 +63,10 @@ impl KesSignerFake {
5563
}
5664

5765
impl KesSigner for KesSignerFake {
58-
fn sign(&self, _message: &[u8], _kes_period: KesPeriod) -> KesSignatureResult {
66+
fn sign(&self, message: &[u8], _kes_period: KesPeriod) -> KesSignatureResult {
67+
let mut messages = self.signed_messages.lock().unwrap();
68+
messages.push_back(message.to_vec());
69+
5970
let mut results = self.results.lock().unwrap();
6071

6172
results.pop_front().unwrap()
@@ -77,25 +88,29 @@ mod tests {
7788
0 as KesPeriod,
7889
"fake_kes_signer_returns_signature_batches_in_expected_order",
7990
);
80-
let message = b"Test message for KES signing";
91+
let message1 = b"Test message 1 for KES signing";
8192
let kes_signer = KesSignerStandard::new(kes_secret_key_file, operational_certificate_file);
8293
let kes_signing_period = 1;
8394
let (kes_signature, op_cert) = kes_signer
84-
.sign(message, kes_signing_period)
95+
.sign(message1, kes_signing_period)
8596
.expect("Signing should not fail");
8697
let fake_kes_signer = KesSignerFake::new(vec![
8798
Ok((kes_signature, op_cert.clone())),
8899
Err(anyhow::anyhow!("Fake error")),
89100
]);
90101

91102
let (kes_signature_1, op_cert_1) = fake_kes_signer
92-
.sign(message, kes_signing_period)
103+
.sign(message1, kes_signing_period)
93104
.expect("Signing should not fail");
94105
assert_eq!(kes_signature, kes_signature_1);
95106
assert_eq!(op_cert, op_cert_1);
96107

108+
let message2 = b"Test message 2 for KES signing";
97109
fake_kes_signer
98-
.sign(message, kes_signing_period)
110+
.sign(message2, kes_signing_period)
99111
.expect_err("Signing should fail");
112+
113+
let signed_messages = fake_kes_signer.get_signed_messages();
114+
assert_eq!(vec![message1.to_vec(), message2.to_vec()], signed_messages);
100115
}
101116
}

0 commit comments

Comments
 (0)