#[non_exhaustive]pub enum Error {
Show 17 variants
Codex32(Error),
MnemUnknownLanguage(u8),
WrongHrp {
got: String,
},
ThresholdNotZero {
got: u8,
},
ShareIndexNotSecret {
got: char,
},
TagInvalidAlphabet {
got: [u8; 4],
},
UnknownTag {
got: [u8; 4],
},
ReservedTagNotEmittedInV01 {
got: [u8; 4],
},
ReservedPrefixViolation {
got: u8,
},
UnexpectedStringLength {
got: usize,
allowed: &'static [usize],
},
PayloadLengthMismatch {
tag: [u8; 4],
expected: &'static [usize],
got: usize,
},
TooManyErrors {
bound: u8,
},
InvalidShareCount {
k: u8,
n: usize,
},
InvalidThreshold(u8),
IsShareNotSingleString {
threshold: char,
index: char,
},
SecretShareSuppliedToCombine,
InconsistentShareSet,
}Expand description
ms-codec error type.
Debug is hand-implemented (NOT derived) so that neither Display nor
Debug of this type can echo ≥8 contiguous chars of secret input
(ms-codec-error-display-echoes-input, 0.4.4). A derived Debug would
print every field — including the raw input carried by the inner
crate::codex32::Error (InvalidChecksum/MismatchedHrp/MismatchedId) and the
WrongHrp.got HRP — so it is replaced by a delegation to the sanitized
Display. This is load-bearing for downstream #[derive(Debug)] wrappers
(toolkit ToolkitError/CliError) whose {:?} transitively renders this
type via panics / expect / logging. Replacing the derive is NOT a SemVer
break (the Debug IMPL is preserved; its exact output is not contractual).
Variants (Non-exhaustive)§
This enum is marked as non-exhaustive
Codex32(Error)
codex32 parse / checksum failure, delegated from the vendored codex32
module (crate::codex32::Error; Cycle-B inlined the formerly-external
codex32 = "=0.1.0" crate). The variant NAME and field SHAPE are
unchanged from the external-dep era; only the inner type’s crate-path
moved (codex32::Error → crate::codex32::Error) — a pre-1.0 breaking
change for any downstream matcher that named the old extern type (the
toolkit’s friendly.rs is exactly such a matcher → its paired bump).
MnemUnknownLanguage(u8)
Mnem wordlist-language byte was not in the valid range 0..=9 (SPEC v0.2 §3).
WrongHrp
HRP was not “ms” (SPEC §4 rule 2).
ThresholdNotZero
Threshold was not 0 (SPEC §4 rule 3).
Share-index was not ‘s’ — BIP-93 requires ‘s’ for threshold=0 (SPEC §4 rule 4).
TagInvalidAlphabet
Tag bytes were not in the codex32 alphabet (SPEC §4 rule 5).
UnknownTag
Tag was structurally valid but not in RESERVED_TAG_TABLE (SPEC §4 rule 6).
ReservedTagNotEmittedInV01
Tag was in RESERVED_TAG_TABLE but reserved-not-emitted in v0.1 (SPEC §4 rule 7, SPEC §3.5.1 encoder symmetry).
ReservedPrefixViolation
Reserved-prefix byte was not 0x00 (SPEC §4 rule 8).
UnexpectedStringLength
Total string length was outside the v0.1 emittable set (SPEC §4 rule 9).
Fields
PayloadLengthMismatch
Payload byte length did not match the tag’s spec (SPEC §3.5, §4 rule 10).
Fields
TooManyErrors
BCH error-correction (bch_decode) reported the input is uncorrectable
— the number of symbol errors exceeds the regular code’s t = 4
correction capacity (singleton bound d = 8). Surfaced by
crate::decode_with_correction when bch_decode::decode_regular_errors
returns None, or when a post-correction re-verification step fails
(catches pathological 5+-error patterns that fool the decoder into
producing a “consistent” but invalid locator). Added v0.2.0 per plan
§1 D29 + §2.B.2.
bound = 8 is the BCH(93,80,8) singleton bound. ms1 is single-chunk
only — no chunk_index field (cf. md-codec’s TooManyErrors which
carries chunk-set context).
Share count n was outside the valid range for threshold k (need
k <= n <= 31; there are exactly 31 valid non-s share indices).
InvalidThreshold(u8)
Threshold k was not in the valid share range 2..=9
(Threshold::ZERO is the unshared single-string sentinel, a const).
A single-string decode was handed one share of a K-of-N share-set
(threshold char 2..9). Use ms combine to recombine K shares.
combine_shares was handed the secret-at-S (index s) as an input.
The secret-at-S is the recovery target, never a combine input; codex32’s
interpolate_at would short-circuit on it and bypass validation (C1).
combine_shares was handed a same-id (same hrp/id/threshold/length) but
cross-polynomial share set: the first k shares define one polynomial,
but at least one EXTRA supplied share does not lie on it. Beyond-BIP-93
defense-in-depth (codex32 K-of-N carries no digest share) — without this
check the combine would silently return a WRONG secret. The supplied
shares are not all from the same split.
Trait Implementations§
Source§impl Debug for Error
impl Debug for Error
Source§fn fmt(&self, f: &mut Formatter<'_>) -> Result
fn fmt(&self, f: &mut Formatter<'_>) -> Result
Hand-rolled to match Display’s sanitization — see the type doc.
Delegates to the (non-echoing) Display so the leaky inner
crate::codex32::Error String fields and the (already construction-bounded)
WrongHrp.got can never reach a derived field dump. Wrapped as
Error("…") so the output still reads as a debug value.
Source§impl Error for Error
impl Error for Error
Source§fn source(&self) -> Option<&(dyn Error + 'static)>
fn source(&self) -> Option<&(dyn Error + 'static)>
1.0.0 · Source§fn description(&self) -> &str
fn description(&self) -> &str
use the Display impl or to_string()