From 9e82416e7d42fcacb519e44cbdaff531c681a78d Mon Sep 17 00:00:00 2001 From: Luke Parker Date: Fri, 9 Dec 2022 09:50:00 -0500 Subject: [PATCH] Correct derives on errors --- coins/monero/src/ringct/clsag/mod.rs | 6 +-- coins/monero/src/rpc.rs | 8 ++-- coins/monero/src/wallet/address.rs | 2 +- coins/monero/src/wallet/decoys.rs | 4 +- coins/monero/src/wallet/send/mod.rs | 2 +- crypto/dkg/src/lib.rs | 56 ++++++++++++++-------------- crypto/frost/src/lib.rs | 46 +++++++++++------------ 7 files changed, 62 insertions(+), 62 deletions(-) diff --git a/coins/monero/src/ringct/clsag/mod.rs b/coins/monero/src/ringct/clsag/mod.rs index f0b7f2b4..2d9ba830 100644 --- a/coins/monero/src/ringct/clsag/mod.rs +++ b/coins/monero/src/ringct/clsag/mod.rs @@ -33,10 +33,10 @@ lazy_static! { } /// Errors returned when CLSAG signing fails. -#[derive(Clone, Error, Debug)] +#[derive(Clone, Copy, PartialEq, Eq, Debug, Error)] pub enum ClsagError { #[error("internal error ({0})")] - InternalError(String), + InternalError(&'static str), #[error("invalid ring")] InvalidRing, #[error("invalid ring member (member {0}, ring size {1})")] @@ -66,7 +66,7 @@ impl ClsagInput { pub fn new(commitment: Commitment, decoys: Decoys) -> Result { let n = decoys.len(); if n > u8::MAX.into() { - Err(ClsagError::InternalError("max ring size in this library is u8 max".to_string()))?; + Err(ClsagError::InternalError("max ring size in this library is u8 max"))?; } let n = u8::try_from(n).unwrap(); if decoys.i >= n { diff --git a/coins/monero/src/rpc.rs b/coins/monero/src/rpc.rs index 21ac9b0a..94bf84ff 100644 --- a/coins/monero/src/rpc.rs +++ b/coins/monero/src/rpc.rs @@ -38,10 +38,10 @@ struct TransactionsResponse { txs: Vec, } -#[derive(Clone, Error, Debug)] +#[derive(Clone, PartialEq, Eq, Debug, Error)] pub enum RpcError { #[error("internal error ({0})")] - InternalError(String), + InternalError(&'static str), #[error("connection error")] ConnectionError, #[error("invalid node")] @@ -184,10 +184,10 @@ impl Rpc { Ok(if !method.ends_with(".bin") { serde_json::from_str(&res.text().await.map_err(|_| RpcError::ConnectionError)?) - .map_err(|_| RpcError::InternalError("Failed to parse JSON response".to_string()))? + .map_err(|_| RpcError::InternalError("Failed to parse JSON response"))? } else { monero_epee_bin_serde::from_bytes(&res.bytes().await.map_err(|_| RpcError::ConnectionError)?) - .map_err(|_| RpcError::InternalError("Failed to parse binary response".to_string()))? + .map_err(|_| RpcError::InternalError("Failed to parse binary response"))? }) } diff --git a/coins/monero/src/wallet/address.rs b/coins/monero/src/wallet/address.rs index 574fabf4..063c7e6f 100644 --- a/coins/monero/src/wallet/address.rs +++ b/coins/monero/src/wallet/address.rs @@ -81,7 +81,7 @@ impl Zeroize for AddressMeta { } /// Error when decoding an address. -#[derive(Clone, Error, Debug)] +#[derive(Clone, Copy, PartialEq, Eq, Debug, Error)] pub enum AddressError { #[error("invalid address byte")] InvalidByte, diff --git a/coins/monero/src/wallet/decoys.rs b/coins/monero/src/wallet/decoys.rs index b62b2b51..a0dd32bd 100644 --- a/coins/monero/src/wallet/decoys.rs +++ b/coins/monero/src/wallet/decoys.rs @@ -47,7 +47,7 @@ async fn select_n( iters += 1; // This is cheap and on fresh chains, thousands of rounds may be needed if iters == 10000 { - Err(RpcError::InternalError("not enough decoy candidates".to_string()))?; + Err(RpcError::InternalError("not enough decoy candidates"))?; } // Use a gamma distribution @@ -178,7 +178,7 @@ impl Decoys { // TODO: Simply create a TX with less than the target amount if (high - MATURITY) < u64::try_from(inputs.len() * ring_len).unwrap() { - Err(RpcError::InternalError("not enough decoy candidates".to_string()))?; + Err(RpcError::InternalError("not enough decoy candidates"))?; } // Select all decoys for this transaction, assuming we generate a sane transaction diff --git a/coins/monero/src/wallet/send/mod.rs b/coins/monero/src/wallet/send/mod.rs index 691131c4..b4b6d6e6 100644 --- a/coins/monero/src/wallet/send/mod.rs +++ b/coins/monero/src/wallet/send/mod.rs @@ -79,7 +79,7 @@ impl SendOutput { } } -#[derive(Clone, Error, Debug)] +#[derive(Clone, PartialEq, Eq, Debug, Error)] pub enum TransactionError { #[error("multiple addresses with payment IDs")] MultiplePaymentIds, diff --git a/crypto/dkg/src/lib.rs b/crypto/dkg/src/lib.rs index 99d9e0c3..079a8462 100644 --- a/crypto/dkg/src/lib.rs +++ b/crypto/dkg/src/lib.rs @@ -33,6 +33,34 @@ pub mod promote; #[cfg(any(test, feature = "tests"))] pub mod tests; +/// Various errors possible during key generation/signing. +#[derive(Clone, Copy, PartialEq, Eq, Debug, Error)] +pub enum DkgError { + #[error("a parameter was 0 (required {0}, participants {1})")] + ZeroParameter(u16, u16), + #[error("invalid amount of required participants (max {1}, got {0})")] + InvalidRequiredQuantity(u16, u16), + #[error("invalid participant index (0 < index <= {0}, yet index is {1})")] + InvalidParticipantIndex(u16, u16), + + #[error("invalid signing set")] + InvalidSigningSet, + #[error("invalid participant quantity (expected {0}, got {1})")] + InvalidParticipantQuantity(usize, usize), + #[error("duplicated participant index ({0})")] + DuplicatedIndex(u16), + #[error("missing participant {0}")] + MissingParticipant(u16), + + #[error("invalid proof of knowledge (participant {0})")] + InvalidProofOfKnowledge(u16), + #[error("invalid share (participant {0})")] + InvalidShare(u16), + + #[error("internal error ({0})")] + InternalError(&'static str), +} + // Validate a map of values to have the expected included participants pub(crate) fn validate_map( map: &HashMap, @@ -100,34 +128,6 @@ impl ThresholdParams { } } -/// Various errors possible during key generation/signing. -#[derive(Copy, Clone, Error, Debug)] -pub enum DkgError { - #[error("a parameter was 0 (required {0}, participants {1})")] - ZeroParameter(u16, u16), - #[error("invalid amount of required participants (max {1}, got {0})")] - InvalidRequiredQuantity(u16, u16), - #[error("invalid participant index (0 < index <= {0}, yet index is {1})")] - InvalidParticipantIndex(u16, u16), - - #[error("invalid signing set")] - InvalidSigningSet, - #[error("invalid participant quantity (expected {0}, got {1})")] - InvalidParticipantQuantity(usize, usize), - #[error("duplicated participant index ({0})")] - DuplicatedIndex(u16), - #[error("missing participant {0}")] - MissingParticipant(u16), - - #[error("invalid proof of knowledge (participant {0})")] - InvalidProofOfKnowledge(u16), - #[error("invalid share (participant {0})")] - InvalidShare(u16), - - #[error("internal error ({0})")] - InternalError(&'static str), -} - /// Calculate the lagrange coefficient for a signing set. pub fn lagrange(i: u16, included: &[u16]) -> F { let mut num = F::one(); diff --git a/crypto/frost/src/lib.rs b/crypto/frost/src/lib.rs index 81518b24..9648e05d 100644 --- a/crypto/frost/src/lib.rs +++ b/crypto/frost/src/lib.rs @@ -35,6 +35,29 @@ pub mod sign; #[cfg(any(test, feature = "tests"))] pub mod tests; +/// Various errors possible during signing. +#[derive(Clone, Copy, PartialEq, Eq, Debug, Error)] +pub enum FrostError { + #[error("invalid participant index (0 < index <= {0}, yet index is {1})")] + InvalidParticipantIndex(u16, u16), + #[error("invalid signing set ({0})")] + InvalidSigningSet(&'static str), + #[error("invalid participant quantity (expected {0}, got {1})")] + InvalidParticipantQuantity(usize, usize), + #[error("duplicated participant index ({0})")] + DuplicatedIndex(u16), + #[error("missing participant {0}")] + MissingParticipant(u16), + + #[error("invalid preprocess (participant {0})")] + InvalidPreprocess(u16), + #[error("invalid share (participant {0})")] + InvalidShare(u16), + + #[error("internal error ({0})")] + InternalError(&'static str), +} + // Validate a map of values to have the expected included participants pub fn validate_map( map: &HashMap, @@ -60,26 +83,3 @@ pub fn validate_map( Ok(()) } - -/// Various errors possible during signing. -#[derive(Copy, Clone, Error, Debug)] -pub enum FrostError { - #[error("invalid participant index (0 < index <= {0}, yet index is {1})")] - InvalidParticipantIndex(u16, u16), - #[error("invalid signing set ({0})")] - InvalidSigningSet(&'static str), - #[error("invalid participant quantity (expected {0}, got {1})")] - InvalidParticipantQuantity(usize, usize), - #[error("duplicated participant index ({0})")] - DuplicatedIndex(u16), - #[error("missing participant {0}")] - MissingParticipant(u16), - - #[error("invalid preprocess (participant {0})")] - InvalidPreprocess(u16), - #[error("invalid share (participant {0})")] - InvalidShare(u16), - - #[error("internal error ({0})")] - InternalError(&'static str), -}