Skip to content

Commit 831afba

Browse files
committed
Convert EraMarkersVerifier VerifKey & SecretKey to ProtocolKey
1 parent 60b0fa0 commit 831afba

File tree

3 files changed

+54
-34
lines changed

3 files changed

+54
-34
lines changed

mithril-aggregator/src/commands/era_command.rs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
use anyhow::anyhow;
1+
use anyhow::Context;
22
use clap::{Parser, Subcommand};
33
use config::{builder::DefaultState, ConfigBuilder};
44
use mithril_common::{
5-
crypto_helper::{key_decode_hex, EraMarkersSigner},
5+
crypto_helper::{EraMarkersSigner, EraMarkersVerifierSecretKey},
66
entities::{Epoch, HexEncodedEraMarkersSecretKey},
77
StdResult,
88
};
@@ -89,8 +89,9 @@ impl GenerateTxDatumEraSubCommand {
8989
debug!("GENERATETXDATUM ERA command");
9090
let era_tools = EraTools::new();
9191

92-
let era_markers_secret_key = key_decode_hex(&self.era_markers_secret_key)
93-
.map_err(|e| anyhow!(e).context("json hex decode of era markers secret key failure"))?;
92+
let era_markers_secret_key =
93+
EraMarkersVerifierSecretKey::from_json_hex(&self.era_markers_secret_key)
94+
.with_context(|| "json hex decode of era markers secret key failure")?;
9495
let era_markers_signer = EraMarkersSigner::from_secret_key(era_markers_secret_key);
9596
print!(
9697
"{}",

mithril-common/src/crypto_helper/era.rs

Lines changed: 22 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,13 @@ use rand_chacha_dalek_compat::ChaCha20Rng;
44
use serde::{Deserialize, Serialize};
55
use thiserror::Error;
66

7+
use super::ProtocolKey;
8+
79
/// Alias of [Ed25519:PublicKey](https://docs.rs/ed25519-dalek/latest/ed25519_dalek/struct.PublicKey.html).
8-
pub type EraMarkersVerifierVerificationKey = ed25519_dalek::PublicKey;
10+
pub type EraMarkersVerifierVerificationKey = ProtocolKey<ed25519_dalek::PublicKey>;
911

1012
/// Alias of [Ed25519:SecretKey](https://docs.rs/ed25519-dalek/latest/ed25519_dalek/struct.SecretKey.html).
11-
pub type EraMarkersVerifierSecretKey = ed25519_dalek::SecretKey;
13+
pub type EraMarkersVerifierSecretKey = ProtocolKey<ed25519_dalek::SecretKey>;
1214

1315
/// Alias of [Ed25519:Signature](https://docs.rs/ed25519-dalek/latest/ed25519_dalek/struct.Signature.html).
1416
pub type EraMarkersVerifierSignature = ed25519_dalek::Signature;
@@ -21,7 +23,7 @@ pub enum EraMarkersVerifierError {
2123
SignatureVerification(#[from] SignatureError),
2224
}
2325

24-
/// A cryptographic signer that is responsible for signing the EreMarkers
26+
/// A cryptographic signer that is responsible for signing the EraMarkers
2527
#[derive(Debug, Serialize, Deserialize)]
2628
pub struct EraMarkersSigner {
2729
pub(crate) secret_key: EraMarkersVerifierSecretKey,
@@ -33,8 +35,8 @@ impl EraMarkersSigner {
3335
where
3436
R: CryptoRng + RngCore,
3537
{
36-
let secret_key = EraMarkersVerifierSecretKey::generate(&mut rng);
37-
Self::from_secret_key(secret_key)
38+
let secret_key = ed25519_dalek::SecretKey::generate(&mut rng);
39+
Self::from_secret_key(secret_key.into())
3840
}
3941

4042
/// EraMarkersSigner deterministic
@@ -56,16 +58,15 @@ impl EraMarkersSigner {
5658

5759
/// Create a an expanded secret key
5860
fn create_expanded_secret_key(&self) -> ExpandedSecretKey {
59-
ExpandedSecretKey::from(&self.secret_key)
61+
ExpandedSecretKey::from(&*self.secret_key)
6062
}
6163

6264
/// Create a EraMarkersVerifierVerificationKey
6365
fn create_verification_key(
6466
&self,
6567
expanded_secret_key: &ExpandedSecretKey,
6668
) -> EraMarkersVerifierVerificationKey {
67-
let verification_key: EraMarkersVerifierVerificationKey = expanded_secret_key.into();
68-
verification_key
69+
EraMarkersVerifierVerificationKey::new(expanded_secret_key.into())
6970
}
7071

7172
/// Create a EraMarkersVerifier
@@ -112,25 +113,23 @@ impl EraMarkersVerifier {
112113

113114
#[cfg(test)]
114115
mod tests {
115-
use super::super::codec::{key_decode_hex, key_encode_hex};
116116
use super::*;
117117

118-
const GOLDEN_ERA_MARKER_VERIFICATION_KEY: &str =
118+
const GOLDEN_ERA_MARKERS_VERIFICATION_KEY: &str =
119119
"5b32332c32372c3131322c362c35372c38342c3138302c342c3135302c3233322c3233372c3132362c3131392c\
120120
3231342c33352c35342c38312c3230382c3231372c39392c3137302c3233312c3133392c362c3132322c39342c3\
121121
9322c3137322c32332c3130322c3135372c3136375d";
122-
const GOLDEN_ERA_MARKER_SECRET_KEY: &str =
122+
const GOLDEN_ERA_MARKERS_SECRET_KEY: &str =
123123
"5b34332c3133322c3232312c3138382c3235332c3132372c3235352c38362c3136322c3133312c3233332c3131\
124124
362c3134322c3233352c3131312c3133332c3134312c3138332c302c33392c3132302c3139372c39322c3133302\
125125
c3233342c34362c3135372c32352c3133322c31352c3234312c3235345d";
126126

127127
#[test]
128128
fn golden_master() {
129-
let _: EraMarkersVerifierVerificationKey =
130-
key_decode_hex(GOLDEN_ERA_MARKER_VERIFICATION_KEY)
131-
.expect("Decoding golden verification key should not fail");
129+
EraMarkersVerifierVerificationKey::from_json_hex(GOLDEN_ERA_MARKERS_VERIFICATION_KEY)
130+
.expect("Decoding golden verification key should not fail");
132131

133-
let _: EraMarkersVerifierSecretKey = key_decode_hex(GOLDEN_ERA_MARKER_SECRET_KEY)
132+
EraMarkersVerifierSecretKey::from_json_hex(GOLDEN_ERA_MARKERS_SECRET_KEY)
134133
.expect("Decoding golden secret key should not fail");
135134
}
136135

@@ -148,11 +147,11 @@ mod tests {
148147

149148
println!(
150149
"Deterministic Verification Key={}",
151-
key_encode_hex(verifier.verification_key.as_bytes()).unwrap()
150+
verifier.verification_key.to_json_hex().unwrap()
152151
);
153152
println!(
154153
"Deterministic Secret Key=={}",
155-
key_encode_hex(signer.secret_key.as_bytes()).unwrap()
154+
signer.secret_key.to_json_hex().unwrap()
156155
);
157156
}
158157

@@ -163,25 +162,24 @@ mod tests {
163162

164163
println!(
165164
"Non Deterministic Verification Key={}",
166-
key_encode_hex(verifier.verification_key.as_bytes()).unwrap()
165+
verifier.verification_key.to_json_hex().unwrap()
167166
);
168167
println!(
169168
"Non Deterministic Secret Key=={}",
170-
key_encode_hex(signer.secret_key.as_bytes()).unwrap()
169+
signer.secret_key.to_json_hex().unwrap()
171170
);
172171
}
173172

174173
#[test]
175174
fn test_codec_keypair() {
176175
let signer = EraMarkersSigner::create_deterministic_signer();
177176
let verifier = signer.create_verifier();
178-
let secret_key_encoded = key_encode_hex(signer.secret_key.as_bytes()).unwrap();
179-
let verification_key_encoded =
180-
key_encode_hex(verifier.verification_key.as_bytes()).unwrap();
177+
let secret_key_encoded = signer.secret_key.to_json_hex().unwrap();
178+
let verification_key_encoded = verifier.verification_key.to_json_hex().unwrap();
181179
let secret_key_decoded: EraMarkersVerifierSecretKey =
182-
key_decode_hex(&secret_key_encoded).unwrap();
180+
secret_key_encoded.try_into().unwrap();
183181
let verification_key_decoded: EraMarkersVerifierVerificationKey =
184-
key_decode_hex(&verification_key_encoded).unwrap();
182+
verification_key_encoded.try_into().unwrap();
185183
let signer_decoded = EraMarkersSigner::from_secret_key(secret_key_decoded);
186184
let verifier_decoded = EraMarkersVerifier::from_verification_key(verification_key_decoded);
187185

mithril-common/src/era/adapters/builder.rs

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,15 @@ use thiserror::Error;
44

55
use crate::{
66
chain_observer::{ChainAddress, ChainObserver},
7-
crypto_helper::key_decode_hex,
8-
entities::HexEncodedEraMarkersSignature,
7+
crypto_helper::EraMarkersVerifierVerificationKey,
98
era::{
109
adapters::{
1110
EraReaderBootstrapAdapter, EraReaderCardanoChainAdapter, EraReaderDummyAdapter,
1211
EraReaderFileAdapter,
1312
},
1413
EraMarker, EraReaderAdapter,
1514
},
15+
StdError,
1616
};
1717

1818
/// Type of era reader adapaters available
@@ -43,7 +43,7 @@ pub enum AdapterBuilderError {
4343

4444
/// Parameters decode error.
4545
#[error("era reader adapter parameters decode error: {0:?}")]
46-
Decode(String),
46+
Decode(StdError),
4747
}
4848

4949
/// Era adapter builder
@@ -71,7 +71,7 @@ impl AdapterBuilder {
7171
#[derive(Deserialize)]
7272
struct CardanoChainAdapterConfig {
7373
address: ChainAddress,
74-
verification_key: HexEncodedEraMarkersSignature,
74+
verification_key: EraMarkersVerifierVerificationKey,
7575
}
7676

7777
let adapter_config: CardanoChainAdapterConfig = serde_json::from_str(
@@ -84,8 +84,7 @@ impl AdapterBuilder {
8484
Ok(Arc::new(EraReaderCardanoChainAdapter::new(
8585
adapter_config.address,
8686
chain_observer,
87-
key_decode_hex(&adapter_config.verification_key)
88-
.map_err(AdapterBuilderError::Decode)?,
87+
adapter_config.verification_key,
8988
)))
9089
}
9190
AdapterType::File => {
@@ -125,3 +124,25 @@ impl AdapterBuilder {
125124
}
126125
}
127126
}
127+
128+
#[cfg(test)]
129+
mod test {
130+
use crate::chain_observer::MockChainObserver;
131+
132+
use super::*;
133+
134+
const GOLDEN_ADAPTER_PARAMS: &str = r#"{
135+
"address":"addr_test1qrv5xfwh043mlc3vk5d97s4nmhxu7cmleyssvhx37gkfyejfe8d38v3vsfgetjafgrsdc49krug8wf04h5rmtengtejqlxrksk",
136+
"verification_key":"5b35352c3232382c3134342c38372c3133382c3133362c34382c382c31342c3138372c38352c3134382c39372c3233322c3235352c3232392c33382c3234342c3234372c3230342c3139382c31332c33312c3232322c32352c3136342c35322c3130322c39312c3132302c3230382c3134375d"
137+
}"#;
138+
139+
#[test]
140+
fn golden_test_for_cardano_chain() {
141+
AdapterBuilder::new(
142+
&AdapterType::CardanoChain,
143+
&Some(GOLDEN_ADAPTER_PARAMS.to_owned()),
144+
)
145+
.build(Arc::new(MockChainObserver::new()))
146+
.expect("building an cardano chain era reader with golden params should not fail");
147+
}
148+
}

0 commit comments

Comments
 (0)