Skip to content

Commit 2cd1075

Browse files
author
Damien LACHAUME / PALO-IT
committed
Implement ProtocolKey for Genesis Secret Key
1 parent 477895c commit 2cd1075

File tree

5 files changed

+26
-35
lines changed

5 files changed

+26
-35
lines changed

mithril-aggregator/src/commands/genesis_command.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
use anyhow::{anyhow, Context};
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, ProtocolGenesisSigner},
5+
crypto_helper::{ProtocolGenesisSecretKey, ProtocolGenesisSigner},
66
entities::HexEncodedGenesisSecretKey,
77
StdResult,
88
};
@@ -175,8 +175,8 @@ impl BootstrapGenesisSubCommand {
175175
let genesis_tools = GenesisTools::from_dependencies(dependencies)
176176
.await
177177
.with_context(|| "genesis-tools: initialization error")?;
178-
let genesis_secret_key = key_decode_hex(&self.genesis_secret_key)
179-
.map_err(|e| anyhow!(e).context("json hex decode of genesis secret key failure"))?;
178+
let genesis_secret_key = ProtocolGenesisSecretKey::from_json_hex(&self.genesis_secret_key)
179+
.with_context(|| "json hex decode of genesis secret key failure")?;
180180
let genesis_signer = ProtocolGenesisSigner::from_secret_key(genesis_secret_key);
181181
genesis_tools
182182
.bootstrap_test_genesis_certificate(genesis_signer)

mithril-aggregator/src/tools/genesis.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use anyhow::anyhow;
1+
use anyhow::{anyhow, Context};
22
use std::{fs::File, io::prelude::*, io::Write, path::Path, sync::Arc};
33
use tokio::sync::RwLock;
44

@@ -139,8 +139,10 @@ impl GenesisTools {
139139
let mut genesis_secret_key_serialized = String::new();
140140
genesis_secret_key_file.read_to_string(&mut genesis_secret_key_serialized)?;
141141

142-
let genesis_secret_key = key_decode_hex(genesis_secret_key_serialized.trim())
143-
.map_err(|e| anyhow!(e).context("Genesis secret key decode error"))?;
142+
let genesis_secret_key = genesis_secret_key_serialized
143+
.trim()
144+
.try_into()
145+
.with_context(|| "Genesis secret key decode error")?;
144146
let genesis_signer = ProtocolGenesisSigner::from_secret_key(genesis_secret_key);
145147

146148
let mut to_sign_payload_file = File::open(to_sign_payload_path).unwrap();

mithril-common/src/crypto_helper/genesis.rs

Lines changed: 13 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,7 @@ use serde::{Deserialize, Serialize};
66
use std::{fs::File, io::Write, path::Path};
77
use thiserror::Error;
88

9-
use super::{
10-
key_encode_hex, ProtocolGenesisSecretKey, ProtocolGenesisSignature,
11-
ProtocolGenesisVerificationKey,
12-
};
9+
use super::{ProtocolGenesisSecretKey, ProtocolGenesisSignature, ProtocolGenesisVerificationKey};
1310

1411
#[derive(Error, Debug)]
1512
/// [ProtocolGenesisSigner] and [ProtocolGenesisVerifier] related errors.
@@ -33,8 +30,8 @@ impl ProtocolGenesisSigner {
3330
where
3431
R: CryptoRng + RngCore,
3532
{
36-
let secret_key = ProtocolGenesisSecretKey::generate(&mut rng);
37-
Self::from_secret_key(secret_key)
33+
let secret_key = ed25519_dalek::SecretKey::generate(&mut rng);
34+
Self::from_secret_key(secret_key.into())
3835
}
3936

4037
/// ProtocolGenesisSigner deterministic
@@ -56,7 +53,7 @@ impl ProtocolGenesisSigner {
5653

5754
/// Create a an expanded secret key
5855
fn create_expanded_secret_key(&self) -> ExpandedSecretKey {
59-
ExpandedSecretKey::from(&self.secret_key)
56+
ExpandedSecretKey::from(&*self.secret_key)
6057
}
6158

6259
/// Create a ProtocolGenesisVerificationKey
@@ -85,11 +82,7 @@ impl ProtocolGenesisSigner {
8582
#[doc(hidden)]
8683
pub fn export_to_file(&self, secret_key_path: &Path) -> StdResult<()> {
8784
let mut genesis_secret_key_file = File::create(secret_key_path)?;
88-
genesis_secret_key_file.write_all(
89-
key_encode_hex(self.secret_key.as_bytes())
90-
.unwrap()
91-
.as_bytes(),
92-
)?;
85+
genesis_secret_key_file.write_all(self.secret_key.to_json_hex().unwrap().as_bytes())?;
9386

9487
Ok(())
9588
}
@@ -125,7 +118,6 @@ impl ProtocolGenesisVerifier {
125118

126119
#[cfg(test)]
127120
mod tests {
128-
use super::super::codec::{key_decode_hex, key_encode_hex};
129121
use super::*;
130122

131123
#[test]
@@ -145,11 +137,11 @@ mod tests {
145137

146138
println!(
147139
"Deterministic Genesis Verification Key={}",
148-
key_encode_hex(genesis_verifier.verification_key.as_bytes()).unwrap()
140+
genesis_verifier.verification_key.to_json_hex().unwrap()
149141
);
150142
println!(
151143
"Deterministic Genesis Secret Key=={}",
152-
key_encode_hex(genesis_signer.secret_key.as_bytes()).unwrap()
144+
genesis_signer.secret_key.to_json_hex().unwrap()
153145
);
154146
}
155147

@@ -160,25 +152,23 @@ mod tests {
160152

161153
println!(
162154
"Non Deterministic Genesis Verification Key={}",
163-
key_encode_hex(genesis_verifier.verification_key.as_bytes()).unwrap()
155+
genesis_verifier.verification_key.to_json_hex().unwrap()
164156
);
165157
println!(
166158
"Non Deterministic Genesis Secret Key=={}",
167-
key_encode_hex(genesis_signer.secret_key.as_bytes()).unwrap()
159+
genesis_signer.secret_key.to_json_hex().unwrap()
168160
);
169161
}
170162

171163
#[test]
172164
fn test_codec_genesis_keypair() {
173165
let genesis_signer = ProtocolGenesisSigner::create_deterministic_genesis_signer();
174166
let genesis_verifier = genesis_signer.create_genesis_verifier();
175-
let secret_key_encoded = key_encode_hex(genesis_signer.secret_key.as_bytes()).unwrap();
176-
let verification_key_encoded =
177-
key_encode_hex(genesis_verifier.verification_key.as_bytes()).unwrap();
178-
let secret_key_decoded: ProtocolGenesisSecretKey =
179-
key_decode_hex(&secret_key_encoded).unwrap();
167+
let secret_key_encoded = genesis_signer.secret_key.to_json_hex().unwrap();
168+
let verification_key_encoded = genesis_verifier.verification_key.to_json_hex().unwrap();
169+
let secret_key_decoded: ProtocolGenesisSecretKey = secret_key_encoded.try_into().unwrap();
180170
let verification_key_decoded: ProtocolGenesisVerificationKey =
181-
key_decode_hex(&verification_key_encoded).unwrap();
171+
verification_key_encoded.try_into().unwrap();
182172
let genesis_signer_decoded = ProtocolGenesisSigner::from_secret_key(secret_key_decoded);
183173
let genesis_verifier_decoded =
184174
ProtocolGenesisVerifier::from_verification_key(verification_key_decoded);

mithril-common/src/crypto_helper/types/alias.rs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ use mithril_stm::{
1010
};
1111

1212
use blake2::{digest::consts::U32, Blake2b};
13-
use ed25519_dalek;
1413

1514
/// A protocol version
1615
pub type ProtocolVersion<'a> = &'a str;
@@ -51,9 +50,6 @@ pub type ProtocolClosedKeyRegistration = ClosedKeyReg<D>;
5150
/// Alias of [MithrilStm:StmAggrVerificationKey](struct@mithril_stm::stm::StmAggrVerificationKey).
5251
pub type ProtocolAggregateVerificationKey = StmAggrVerificationKey<D>;
5352

54-
/// Alias of [Ed25519:SecretKey](https://docs.rs/ed25519-dalek/latest/ed25519_dalek/struct.SecretKey.html).
55-
pub type ProtocolGenesisSecretKey = ed25519_dalek::SecretKey;
56-
5753
// Error alias
5854
/// Alias of a wrapper of [MithrilCommon:ProtocolRegistrationErrorWrapper](enum@ProtocolRegistrationErrorWrapper).
5955
pub type ProtocolRegistrationError = ProtocolRegistrationErrorWrapper;

mithril-common/src/crypto_helper/types/wrappers.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@ pub type ProtocolOpCert = ProtocolKey<OpCert>;
2929
/// Alias of [Ed25519:PublicKey](https://docs.rs/ed25519-dalek/latest/ed25519_dalek/struct.PublicKey.html).
3030
pub type ProtocolGenesisVerificationKey = ProtocolKey<ed25519_dalek::PublicKey>;
3131

32+
/// Alias of [Ed25519:SecretKey](https://docs.rs/ed25519-dalek/latest/ed25519_dalek/struct.SecretKey.html).
33+
pub type ProtocolGenesisSecretKey = ProtocolKey<ed25519_dalek::SecretKey>;
34+
3235
impl ProtocolGenesisSignature {
3336
/// Create an instance from a bytes hex representation
3437
pub fn from_bytes_hex(hex_string: &str) -> StdResult<Self> {
@@ -73,6 +76,6 @@ impl ProtocolKeyCodec<ed25519_dalek::Signature> for ed25519_dalek::Signature {
7376
}
7477

7578
impl_codec_and_type_conversions_for_protocol_key!(
76-
json_hex_codec => StmVerificationKeyPoP, Sum6KesSig, StmSig, StmAggrSig<D>, OpCert, ed25519_dalek::PublicKey
79+
json_hex_codec => StmVerificationKeyPoP, Sum6KesSig, StmSig, StmAggrSig<D>, OpCert, ed25519_dalek::PublicKey, ed25519_dalek::SecretKey
7780
);
7881
impl_codec_and_type_conversions_for_protocol_key!(no_default_codec => ed25519_dalek::Signature);

0 commit comments

Comments
 (0)