Files
RustySecrets/src/errors.rs
Noah Vesely ed867ba938 Remove ShareIdentifierTooBig error and validation
Since id is a `u8` it will never be greater than 255.
2018-08-13 21:29:39 +02:00

137 lines
5.0 KiB
Rust

//! Define the various error kinds specific to deterministic secret sharing.
#![allow(unknown_lints, missing_docs)]
use std::collections::HashSet;
#[cfg(feature = "dss")]
use dss::ss1;
/// Minimum allowed number of shares (n)
pub(crate) static MIN_SHARES: u8 = 2;
/// Minimum allowed threshold (k)
pub(crate) static MIN_THRESHOLD: u8 = 2;
/// Maximum allowed number of shares (k,n)
pub(crate) static MAX_SHARES: u8 = 255;
/// SSS Shares should be structured as k-n-data hence 3 parts
pub(crate) static SSS_SHARE_PARTS_COUNT: usize = 3;
/// Create the Error, ErrorKind, ResultExt, and Result types
error_chain! {
errors {
ThresholdTooBig(k: u8, n: u8) {
description("Threshold k must be smaller than or equal to n")
display("Threshold k must be smaller than or equal to n, got: k = {}, n = {}.", k, n)
}
ThresholdTooSmall(k: u8) {
description("Threshold k must be bigger than or equal to 2")
display("Threshold k must be bigger than or equal to 2, got: k = {}", k)
}
SecretTooBig(len: usize, max: usize) {
description("The secret is too long")
display("The secret is too long, maximum allowed size = {} bytes, got {} bytes", max, len)
}
InvalidShareCountMax(nb_shares: u8, max: u8) {
description("Number of shares is too big")
display("Number of shares must be smaller than or equal {}, got: {} shares.", max, nb_shares)
}
InvalidShareCountMin(nb_shares: u8, min: u8) {
description("Number of shares is too small")
display("Number of shares must be larger than or equal {}, got: {} shares.", min, nb_shares)
}
EmptySecret {
description("The secret cannot be empty")
display("The secret cannot be empty")
}
EmptyShares {
description("No shares provided")
display("No shares were provided.")
}
IncompatibleSets(sets: Vec<HashSet<u8>>) {
description("The shares are incompatible with each other.")
display("The shares are incompatible with each other.")
}
MissingShares(provided: usize, required: usize) {
description("The number of shares provided is insufficient to recover the secret.")
display("{} shares are required to recover the secret, found only {}.", required, provided)
}
InvalidSignature(share_id: u8, signature: String) {
description("The signature of this share is not valid.")
}
MissingSignature(share_id: u8) {
description("Signature is missing while shares are required to be signed.")
}
SecretDeserializationError {
description("An issue was encountered deserializing the secret. \
Updating to the latest version of RustySecrets might help fix this.")
}
ShareParsingError(reason: String) {
description("This share is incorrectly formatted.")
display("This share is incorrectly formatted. Reason: {}", reason)
}
ShareParsingErrorEmptyShare(share_id: u8) {
description("This share is empty.")
display("Found empty share for share identifier ({})", share_id)
}
ShareParsingInvalidShareId(share_id: u8) {
description("Invalid share identifier.")
display("Found invalid share identifier ({})", share_id)
}
InvalidSS1Parameters(r: usize, s: usize) {
description("Invalid parameters for the SS1 sharing scheme")
display("Invalid parameters for the SS1 sharing scheme: r = {}, s = {}.", r, s)
}
InvalidSplitParametersZero(k: u8, n: u8) {
description("Parameters k and n must be greater than zero")
display("Parameters k and n must be greater than zero.")
}
#[cfg(feature = "dss")]
MismatchingShares(got: ss1::Share, expected: ss1::Share) {
description("Share mismatch during verification of secret recovery")
display("Share mismatch during verification of secret recovery.")
}
CannotGenerateRandomNumbers {
description("Cannot generate random numbers")
display("Cannot generate random numbers.")
}
DuplicateShareId(share_id: u8) {
description("This share number has already been used by a previous share.")
display("This share number ({}) has already been used by a previous share.", share_id)
}
DuplicateShareData(share_id: u8) {
description("The data encoded in this share is the same as the one found in a previous share")
display("The data encoded in share #{} is the same as the one found in a previous share.", share_id)
}
InconsistentShares {
description("The shares are inconsistent")
display("The shares are inconsistent")
}
}
foreign_links {
Io(::std::io::Error);
IntegerParsingError(::std::num::ParseIntError);
}
}