Skip to content

Commit 78d78a1

Browse files
committed
Convert ProtocolAvk to a ProtocolKey & update usages
1 parent 45768aa commit 78d78a1

File tree

12 files changed

+65
-64
lines changed

12 files changed

+65
-64
lines changed

mithril-aggregator/src/multi_signer.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@ use thiserror::Error;
55

66
use mithril_common::{
77
crypto_helper::{
8-
key_encode_hex, ProtocolAggregateVerificationKey, ProtocolAggregationError,
9-
ProtocolMultiSignature, ProtocolParameters, ProtocolRegistrationError,
10-
ProtocolStakeDistribution,
8+
ProtocolAggregateVerificationKey, ProtocolAggregationError, ProtocolMultiSignature,
9+
ProtocolParameters, ProtocolRegistrationError, ProtocolStakeDistribution,
1110
},
1211
entities::{self, Epoch, SignerWithStake, StakeDistribution},
1312
protocol::{MultiSigner as ProtocolMultiSigner, SignerBuilder},
1413
store::{StakeStorer, StoreError},
14+
StdError,
1515
};
1616

1717
use crate::{entities::OpenMessage, store::VerificationKeyStorer, ProtocolParametersStorer};
@@ -39,8 +39,8 @@ pub enum ProtocolError {
3939
ExistingSingleSignature(entities::PartyId),
4040

4141
/// Codec error.
42-
#[error("codec error: '{0}'")]
43-
Codec(String),
42+
#[error("codec error: '{0:?}'")]
43+
Codec(StdError),
4444

4545
/// Mithril STM library returned an error.
4646
#[error("core error: '{0}'")]
@@ -131,7 +131,7 @@ pub trait MultiSigner: Sync + Send {
131131
let avk = self
132132
.compute_aggregate_verification_key(&signers_with_stake, &protocol_parameters)
133133
.await?;
134-
Ok(key_encode_hex(avk).map_err(ProtocolError::Codec)?)
134+
Ok(avk.to_json_hex().map_err(ProtocolError::Codec)?)
135135
}
136136

137137
/// Compute next stake distribution aggregate verification key
@@ -146,7 +146,7 @@ pub trait MultiSigner: Sync + Send {
146146
let next_avk = self
147147
.compute_aggregate_verification_key(&next_signers_with_stake, &protocol_parameters)
148148
.await?;
149-
Ok(key_encode_hex(next_avk).map_err(ProtocolError::Codec)?)
149+
Ok(next_avk.to_json_hex().map_err(ProtocolError::Codec)?)
150150
}
151151

152152
/// Get signers

mithril-aggregator/src/tools/genesis.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ use tokio::sync::RwLock;
55
use mithril_common::{
66
certificate_chain::{CertificateGenesisProducer, CertificateVerifier},
77
crypto_helper::{
8-
key_decode_hex, ProtocolAggregateVerificationKey, ProtocolGenesisSignature,
9-
ProtocolGenesisSigner, ProtocolGenesisVerifier,
8+
ProtocolAggregateVerificationKey, ProtocolGenesisSignature, ProtocolGenesisSigner,
9+
ProtocolGenesisVerifier,
1010
},
1111
entities::{Beacon, ProtocolParameters},
1212
BeaconProvider, StdResult,
@@ -82,8 +82,8 @@ impl GenesisTools {
8282
let genesis_avk = multi_signer
8383
.compute_next_stake_distribution_aggregate_verification_key()
8484
.await?;
85-
let genesis_avk: ProtocolAggregateVerificationKey = key_decode_hex(&genesis_avk)
86-
.map_err(|e| anyhow!(e).context("Aggregate verification key decode error"))?;
85+
let genesis_avk = ProtocolAggregateVerificationKey::from_json_hex(&genesis_avk)
86+
.with_context(|| "Aggregate verification key decode error")?;
8787

8888
Ok(Self::new(
8989
protocol_parameters,
@@ -211,7 +211,7 @@ mod tests {
211211
let fixture = MithrilFixtureBuilder::default().with_signers(5).build();
212212
let first_signer = fixture.signers_fixture()[0].clone().protocol_signer;
213213
let clerk = ProtocolClerk::from_signer(&first_signer);
214-
clerk.compute_avk()
214+
clerk.compute_avk().into()
215215
}
216216

217217
fn build_tools(

mithril-client/src/services/mithril_stake_distribution.rs

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use anyhow::{anyhow, Context};
1+
use anyhow::Context;
22
use async_trait::async_trait;
33
use std::{
44
path::{Path, PathBuf},
@@ -9,8 +9,7 @@ use thiserror::Error;
99
use mithril_common::{
1010
certificate_chain::CertificateVerifier,
1111
crypto_helper::{
12-
key_encode_hex, ProtocolAggregateVerificationKey, ProtocolGenesisVerificationKey,
13-
ProtocolGenesisVerifier,
12+
ProtocolAggregateVerificationKey, ProtocolGenesisVerificationKey, ProtocolGenesisVerifier,
1413
},
1514
entities::{MithrilStakeDistribution, ProtocolMessagePartKey},
1615
messages::MithrilStakeDistributionListItemMessage,
@@ -156,12 +155,11 @@ impl MithrilStakeDistributionService for AppMithrilStakeDistributionService {
156155
)
157156
.await?;
158157

159-
let avk = key_encode_hex(
160-
self.compute_avk_from_mithril_stake_distribution(&stake_distribution_entity.artifact)
161-
.await?,
162-
)
163-
.map_err(|e| anyhow!(e))
164-
.with_context(|| "Encoding avk error")?;
158+
let avk = self
159+
.compute_avk_from_mithril_stake_distribution(&stake_distribution_entity.artifact)
160+
.await?
161+
.to_json_hex()
162+
.with_context(|| "Encoding avk error")?;
165163

166164
let mut protocol_message = certificate.protocol_message.clone();
167165
protocol_message

mithril-common/src/certificate_chain/certificate_genesis.rs

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,21 +7,22 @@ use thiserror::Error;
77

88
use crate::{
99
crypto_helper::{
10-
key_encode_hex, ProtocolAggregateVerificationKey, ProtocolGenesisSignature,
11-
ProtocolGenesisSigner, PROTOCOL_VERSION,
10+
ProtocolAggregateVerificationKey, ProtocolGenesisSignature, ProtocolGenesisSigner,
11+
PROTOCOL_VERSION,
1212
},
1313
entities::{
1414
Beacon, Certificate, CertificateMetadata, CertificateSignature, ProtocolMessage,
1515
ProtocolMessagePartKey, ProtocolParameters,
1616
},
17+
StdError,
1718
};
1819

1920
/// [CertificateGenesisProducer] related errors.
2021
#[derive(Error, Debug)]
2122
pub enum CertificateGenesisProducerError {
2223
/// Error raised when a Codec error occurs
23-
#[error("codec error: '{0}'")]
24-
Codec(String),
24+
#[error("codec error: '{0:?}'")]
25+
Codec(StdError),
2526

2627
/// Error raised when there is no genesis signer available
2728
#[error("missing genesis signer error")]
@@ -44,8 +45,9 @@ impl CertificateGenesisProducer {
4445
pub fn create_genesis_protocol_message(
4546
genesis_avk: &ProtocolAggregateVerificationKey,
4647
) -> Result<ProtocolMessage, CertificateGenesisProducerError> {
47-
let genesis_avk =
48-
key_encode_hex(genesis_avk).map_err(CertificateGenesisProducerError::Codec)?;
48+
let genesis_avk = genesis_avk
49+
.to_json_hex()
50+
.map_err(CertificateGenesisProducerError::Codec)?;
4951
let mut protocol_message = ProtocolMessage::new();
5052
protocol_message.set_message_part(
5153
ProtocolMessagePartKey::NextAggregateVerificationKey,
@@ -86,8 +88,9 @@ impl CertificateGenesisProducer {
8688
);
8789
let previous_hash = "".to_string();
8890
let genesis_protocol_message = Self::create_genesis_protocol_message(&genesis_avk)?;
89-
let genesis_avk =
90-
key_encode_hex(&genesis_avk).map_err(CertificateGenesisProducerError::Codec)?;
91+
let genesis_avk = genesis_avk
92+
.to_json_hex()
93+
.map_err(CertificateGenesisProducerError::Codec)?;
9194
Ok(Certificate::new(
9295
previous_hash,
9396
beacon,

mithril-common/src/certificate_chain/certificate_verifier.rs

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,13 @@ use thiserror::Error;
88

99
use super::{CertificateRetriever, CertificateRetrieverError};
1010
use crate::crypto_helper::{
11-
key_decode_hex, ProtocolGenesisError, ProtocolGenesisVerifier, ProtocolMultiSignature,
11+
ProtocolAggregateVerificationKey, ProtocolGenesisError, ProtocolGenesisVerifier,
12+
ProtocolMultiSignature,
1213
};
1314
use crate::entities::{
1415
Certificate, CertificateSignature, ProtocolMessage, ProtocolMessagePartKey, ProtocolParameters,
1516
};
17+
use crate::StdError;
1618

1719
#[cfg(test)]
1820
use mockall::automock;
@@ -25,8 +27,8 @@ pub enum CertificateVerifierError {
2527
VerifyMultiSignature(String),
2628

2729
/// Error raised when encoding or decoding of data to hex fails.
28-
#[error("codec hex error: '{0}'")]
29-
Codec(String),
30+
#[error("codec hex error: '{0:?}'")]
31+
Codec(StdError),
3032

3133
/// Error raised when encoding or decoding of data to genesis type.
3234
#[error("codec genesis error: '{0}'")]
@@ -151,7 +153,8 @@ impl MithrilCertificateVerifier {
151153
message.encode_hex::<String>()
152154
);
153155
let aggregate_verification_key =
154-
key_decode_hex(aggregate_verification_key).map_err(CertificateVerifierError::Codec)?;
156+
ProtocolAggregateVerificationKey::from_json_hex(aggregate_verification_key)
157+
.map_err(CertificateVerifierError::Codec)?;
155158

156159
multi_signature
157160
.verify(
@@ -287,8 +290,7 @@ mod tests {
287290
use super::CertificateRetriever;
288291
use super::*;
289292

290-
use crate::crypto_helper::tests_setup::*;
291-
use crate::crypto_helper::{key_encode_hex, ProtocolClerk};
293+
use crate::crypto_helper::{tests_setup::*, ProtocolClerk};
292294
use crate::test_utils::MithrilFixtureBuilder;
293295

294296
mock! {
@@ -321,7 +323,7 @@ mod tests {
321323

322324
let first_signer = &signers[0].protocol_signer;
323325
let clerk = ProtocolClerk::from_signer(first_signer);
324-
let aggregate_verification_key = clerk.compute_avk();
326+
let aggregate_verification_key = clerk.compute_avk().into();
325327
let multi_signature = clerk
326328
.aggregate(&single_signatures, &message_hash)
327329
.unwrap()
@@ -334,7 +336,7 @@ mod tests {
334336
.verify_multi_signature(
335337
&message_tampered,
336338
&multi_signature,
337-
&key_encode_hex(&aggregate_verification_key).unwrap(),
339+
&aggregate_verification_key.to_json_hex().unwrap(),
338340
&fixture.protocol_parameters(),
339341
)
340342
.is_err(),
@@ -344,7 +346,7 @@ mod tests {
344346
.verify_multi_signature(
345347
&message_hash,
346348
&multi_signature,
347-
&key_encode_hex(&aggregate_verification_key).unwrap(),
349+
&aggregate_verification_key.to_json_hex().unwrap(),
348350
&fixture.protocol_parameters(),
349351
)
350352
.expect("multi signature verification should have succeeded");

mithril-common/src/crypto_helper/tests_setup.rs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
//! Test data builders for Mithril STM types, for testing purpose.
2-
use super::{genesis::*, key_encode_hex, types::*, OpCert, SerDeShelleyFileFormat};
2+
use super::{genesis::*, types::*, OpCert, SerDeShelleyFileFormat};
33
use crate::{
44
certificate_chain::CertificateGenesisProducer,
55
entities::{
@@ -11,9 +11,7 @@ use crate::{
1111

1212
use rand_chacha::ChaCha20Rng;
1313
use rand_core::SeedableRng;
14-
use std::{cmp::min, fs, sync::Arc};
15-
16-
use std::{collections::HashMap, path::PathBuf};
14+
use std::{cmp::min, collections::HashMap, fs, path::PathBuf, sync::Arc};
1715

1816
/// Create or retrieve a temporary directory for storing cryptographic material for a signer, use this for tests only.
1917
pub fn setup_temp_directory_for_signer(
@@ -204,10 +202,10 @@ pub fn setup_certificate_chain(
204202
};
205203
let avk_for_signers = |signers: &[SignerFixture]| -> ProtocolAggregateVerificationKey {
206204
let clerk = clerk_for_signers(signers);
207-
clerk.compute_avk()
205+
clerk.compute_avk().into()
208206
};
209207
let avk_encode =
210-
|avk: &ProtocolAggregateVerificationKey| -> String { key_encode_hex(avk).unwrap() };
208+
|avk: &ProtocolAggregateVerificationKey| -> String { avk.to_json_hex().unwrap() };
211209
epochs.pop();
212210
let certificates = epochs
213211
.into_iter()

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

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use crate::crypto_helper::cardano::{
55

66
use mithril_stm::{
77
key_reg::ClosedKeyReg,
8-
stm::{Index, Stake, StmAggrVerificationKey, StmClerk, StmParameters, StmSigner},
8+
stm::{Index, Stake, StmClerk, StmParameters, StmSigner},
99
AggregationError,
1010
};
1111

@@ -47,9 +47,6 @@ pub type ProtocolKeyRegistration = KeyRegWrapper;
4747
/// Alias of a wrapper of [MithrilStm:ClosedKeyReg](struct@mithril_stm::key_reg::KeyReg).
4848
pub type ProtocolClosedKeyRegistration = ClosedKeyReg<D>;
4949

50-
/// Alias of [MithrilStm:StmAggrVerificationKey](struct@mithril_stm::stm::StmAggrVerificationKey).
51-
pub type ProtocolAggregateVerificationKey = StmAggrVerificationKey<D>;
52-
5350
// Error alias
5451
/// Alias of a wrapper of [MithrilCommon:ProtocolRegistrationErrorWrapper](enum@ProtocolRegistrationErrorWrapper).
5552
pub type ProtocolRegistrationError = ProtocolRegistrationErrorWrapper;

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

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use anyhow::Context;
22
use hex::{FromHex, ToHex};
33
use kes_summed_ed25519::kes::Sum6KesSig;
4-
use mithril_stm::stm::{StmAggrSig, StmSig, StmVerificationKeyPoP};
4+
use mithril_stm::stm::{StmAggrSig, StmAggrVerificationKey, StmSig, StmVerificationKeyPoP};
55

66
use crate::crypto_helper::{OpCert, ProtocolKey, ProtocolKeyCodec, D};
77
use crate::StdResult;
@@ -32,6 +32,9 @@ pub type ProtocolGenesisVerificationKey = ProtocolKey<ed25519_dalek::PublicKey>;
3232
/// Alias of [Ed25519:SecretKey](https://docs.rs/ed25519-dalek/latest/ed25519_dalek/struct.SecretKey.html).
3333
pub type ProtocolGenesisSecretKey = ProtocolKey<ed25519_dalek::SecretKey>;
3434

35+
/// Alias of [MithrilStm:StmAggrVerificationKey](struct@mithril_stm::stm::StmAggrVerificationKey).
36+
pub type ProtocolAggregateVerificationKey = ProtocolKey<StmAggrVerificationKey<D>>;
37+
3538
impl ProtocolGenesisSignature {
3639
/// Create an instance from a bytes hex representation
3740
pub fn from_bytes_hex(hex_string: &str) -> StdResult<Self> {
@@ -76,6 +79,7 @@ impl ProtocolKeyCodec<ed25519_dalek::Signature> for ed25519_dalek::Signature {
7679
}
7780

7881
impl_codec_and_type_conversions_for_protocol_key!(
79-
json_hex_codec => StmVerificationKeyPoP, Sum6KesSig, StmSig, StmAggrSig<D>, OpCert, ed25519_dalek::PublicKey, ed25519_dalek::SecretKey
82+
json_hex_codec => StmVerificationKeyPoP, Sum6KesSig, StmSig, StmAggrSig<D>, OpCert,
83+
ed25519_dalek::PublicKey, ed25519_dalek::SecretKey, StmAggrVerificationKey<D>
8084
);
8185
impl_codec_and_type_conversions_for_protocol_key!(no_default_codec => ed25519_dalek::Signature);

mithril-common/src/protocol/multi_signer.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ impl MultiSigner {
4444

4545
/// Compute aggregate verification key from stake distribution
4646
pub fn compute_aggregate_verification_key(&self) -> ProtocolAggregateVerificationKey {
47-
self.protocol_clerk.compute_avk()
47+
self.protocol_clerk.compute_avk().into()
4848
}
4949

5050
/// Verify a single signature

mithril-common/src/protocol/signer_builder.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,10 @@ use rand_core::{CryptoRng, RngCore, SeedableRng};
44
use std::path::Path;
55
use thiserror::Error;
66

7-
use crate::crypto_helper::ProtocolAggregateVerificationKey;
87
use crate::{
98
crypto_helper::{
10-
ProtocolClerk, ProtocolClosedKeyRegistration, ProtocolInitializer, ProtocolKeyRegistration,
11-
ProtocolStakeDistribution,
9+
ProtocolAggregateVerificationKey, ProtocolClerk, ProtocolClosedKeyRegistration,
10+
ProtocolInitializer, ProtocolKeyRegistration, ProtocolStakeDistribution,
1211
},
1312
entities::{PartyId, ProtocolParameters, SignerWithStake},
1413
protocol::MultiSigner,
@@ -84,7 +83,7 @@ impl SignerBuilder {
8483
let clerk =
8584
ProtocolClerk::from_registration(&stm_parameters, &self.closed_key_registration);
8685

87-
clerk.compute_avk()
86+
clerk.compute_avk().into()
8887
}
8988

9089
fn build_single_signer_with_rng<R: RngCore + CryptoRng>(

0 commit comments

Comments
 (0)