Skip to content

Commit 666c255

Browse files
committed
Use anyhow in cardano key registration crypto helper
1 parent 817c062 commit 666c255

File tree

2 files changed

+32
-21
lines changed

2 files changed

+32
-21
lines changed

mithril-common/src/crypto_helper/cardano/key_certification.rs

Lines changed: 30 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,24 @@
33
//! These wrappers allows keeping mithril-stm agnostic to Cardano, while providing some
44
//! guarantees that mithril-stm will not be misused in the context of Cardano.
55
6-
use crate::crypto_helper::{
7-
cardano::{ParseError, SerDeShelleyFileFormat},
8-
types::{
9-
ProtocolParameters, ProtocolPartyId, ProtocolSignerVerificationKey,
10-
ProtocolSignerVerificationKeySignature, ProtocolStakeDistribution,
6+
use crate::{
7+
crypto_helper::{
8+
cardano::SerDeShelleyFileFormat,
9+
types::{
10+
ProtocolParameters, ProtocolPartyId, ProtocolSignerVerificationKey,
11+
ProtocolSignerVerificationKeySignature, ProtocolStakeDistribution,
12+
},
13+
ProtocolOpCert,
1114
},
12-
ProtocolOpCert,
15+
StdError, StdResult,
1316
};
1417

1518
use mithril_stm::key_reg::{ClosedKeyReg, KeyReg};
1619
use mithril_stm::stm::{Stake, StmInitializer, StmParameters, StmSigner, StmVerificationKeyPoP};
1720
use mithril_stm::RegisterError;
1821

1922
use crate::crypto_helper::cardano::Sum6KesBytes;
23+
use anyhow::{anyhow, Context};
2024
use blake2::{
2125
digest::{consts::U32, FixedOutput},
2226
Blake2b, Digest,
@@ -36,7 +40,7 @@ type D = Blake2b<U32>;
3640
pub type KESPeriod = u32;
3741

3842
/// New registration error
39-
#[derive(Error, Debug, PartialEq, Eq)]
43+
#[derive(Error, Debug)]
4044
pub enum ProtocolRegistrationErrorWrapper {
4145
/// Error raised when a party id is needed but not provided
4246
// TODO: Should be removed once the signer certification is fully deployed
@@ -72,16 +76,16 @@ pub enum ProtocolRegistrationErrorWrapper {
7276
PoolAddressEncoding,
7377

7478
/// Error raised when a core registration error occurs
75-
#[error("core registration error: '{0}'")]
76-
CoreRegister(#[from] RegisterError),
79+
#[error("core registration error: '{0:?}'")]
80+
CoreRegister(StdError),
7781
}
7882

7983
/// New initializer error
8084
#[derive(Error, Debug)]
8185
pub enum ProtocolInitializerErrorWrapper {
82-
/// Error raised when a codec parse error occurs
83-
#[error("codec parse error: '{0}'")]
84-
Codec(#[from] ParseError),
86+
/// Error raised when the underlying protocol initializer fails
87+
#[error("protocol initializer error {0:?}")]
88+
ProtocolInitializer(StdError),
8589

8690
/// Error raised when a KES update error occurs
8791
#[error("KES key cannot be updated for period {0}")]
@@ -122,19 +126,22 @@ impl StmInitializerWrapper {
122126
kes_period: Option<KESPeriod>,
123127
stake: Stake,
124128
rng: &mut R,
125-
) -> Result<Self, ProtocolInitializerErrorWrapper> {
129+
) -> StdResult<Self> {
126130
let stm_initializer = StmInitializer::setup(params, stake, rng);
127131
let kes_signature = if let Some(kes_sk_path) = kes_sk_path {
128-
let mut kes_sk_bytes = Sum6KesBytes::from_file(kes_sk_path)?;
132+
let mut kes_sk_bytes = Sum6KesBytes::from_file(kes_sk_path)
133+
.map_err(|e| anyhow!(e))
134+
.with_context(|| "StmInitializerWrapper can not read KES secret key from file")?;
129135
let mut kes_sk = Sum6Kes::try_from(&mut kes_sk_bytes)
130-
.map_err(ProtocolInitializerErrorWrapper::Codec)?;
136+
.map_err(|e| ProtocolInitializerErrorWrapper::ProtocolInitializer(anyhow!(e)))
137+
.with_context(|| "StmInitializerWrapper can not use KES secret key")?;
131138
let kes_sk_period = kes_sk.get_period();
132139
let provided_period = kes_period.unwrap_or_default();
133140
if kes_sk_period > provided_period {
134-
return Err(ProtocolInitializerErrorWrapper::KesMismatch(
141+
return Err(anyhow!(ProtocolInitializerErrorWrapper::KesMismatch(
135142
kes_sk_period,
136143
provided_period,
137-
));
144+
)));
138145
}
139146

140147
// We need to perform the evolutions
@@ -192,7 +199,10 @@ impl StmInitializerWrapper {
192199
self,
193200
closed_reg: ClosedKeyReg<D>,
194201
) -> Result<StmSigner<D>, ProtocolRegistrationErrorWrapper> {
195-
Ok(self.stm_initializer.new_signer(closed_reg)?)
202+
self.stm_initializer
203+
.new_signer(closed_reg)
204+
.with_context(|| "StmInitializerWrapper can not create a new signer")
205+
.map_err(|e| ProtocolRegistrationErrorWrapper::CoreRegister(anyhow!(e)))
196206
}
197207

198208
/// Convert to bytes
@@ -279,7 +289,8 @@ impl KeyRegWrapper {
279289
if let Some(&stake) = self.stake_distribution.get(&pool_id_bech32) {
280290
self.stm_key_reg
281291
.register(stake, pk.into())
282-
.map_err(ProtocolRegistrationErrorWrapper::CoreRegister)?;
292+
.with_context(|| format!("KeyRegWrapper can not register pool {pool_id_bech32}"))
293+
.map_err(|e| ProtocolRegistrationErrorWrapper::CoreRegister(anyhow!(e)))?;
283294
return Ok(pool_id_bech32);
284295
}
285296
Err(ProtocolRegistrationErrorWrapper::PartyIdNonExisting)

mithril-signer/src/single_signer.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use slog_scope::{info, trace, warn};
44
use std::path::PathBuf;
55
use thiserror::Error;
66

7-
use mithril_common::crypto_helper::{KESPeriod, ProtocolInitializer, ProtocolInitializerError};
7+
use mithril_common::crypto_helper::{KESPeriod, ProtocolInitializer};
88
use mithril_common::entities::{
99
PartyId, ProtocolMessage, ProtocolParameters, SignerWithStake, SingleSignatures, Stake,
1010
};
@@ -24,7 +24,7 @@ impl MithrilProtocolInitializerBuilder {
2424
protocol_parameters: &ProtocolParameters,
2525
kes_secret_key_path: Option<PathBuf>,
2626
kes_period: Option<KESPeriod>,
27-
) -> Result<ProtocolInitializer, ProtocolInitializerError> {
27+
) -> StdResult<ProtocolInitializer> {
2828
let mut rng = rand_core::OsRng;
2929
let protocol_initializer = ProtocolInitializer::setup(
3030
protocol_parameters.to_owned().into(),

0 commit comments

Comments
 (0)