From d08765b956e43b0ca13ba668ee810b5dede54fb6 Mon Sep 17 00:00:00 2001 From: ryan Date: Thu, 4 Jan 2024 23:11:15 -0500 Subject: [PATCH] keyfork-shard: make custom error for Sharks errors --- keyfork-shard/src/lib.rs | 13 +++++++++++-- keyfork-shard/src/openpgp.rs | 13 +++++-------- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/keyfork-shard/src/lib.rs b/keyfork-shard/src/lib.rs index 31fcb87..9cbca98 100644 --- a/keyfork-shard/src/lib.rs +++ b/keyfork-shard/src/lib.rs @@ -15,6 +15,15 @@ use x25519_dalek::{EphemeralSecret, PublicKey}; #[cfg(feature = "openpgp")] pub mod openpgp; +#[derive(thiserror::Error, Debug)] +pub enum SharksError { + #[error("Error creating share: {0}")] + Share(String), + + #[error("Error combining shares: {0}")] + CombineShare(String), +} + /// Decrypt hunk version 1: /// 1 byte: Version /// 1 byte: Threshold @@ -94,10 +103,10 @@ pub fn remote_decrypt() -> Result<(), Box> { .into_iter() .map(|s| Share::try_from(s.as_slice())) .collect::, &str>>() - .map_err(|e| anyhow::anyhow!("{e}"))?; + .map_err(|e| SharksError::Share(e.to_string()))?; let secret = Sharks(threshold) .recover(&shares) - .map_err(|e| anyhow::anyhow!("{e}"))?; + .map_err(|e| SharksError::CombineShare(e.to_string()))?; /* * Verification would take up too much size, mnemonic would be very large diff --git a/keyfork-shard/src/openpgp.rs b/keyfork-shard/src/openpgp.rs index 4cb37e3..5446e8f 100644 --- a/keyfork-shard/src/openpgp.rs +++ b/keyfork-shard/src/openpgp.rs @@ -48,22 +48,19 @@ use smartcard::SmartcardManager; const SHARD_METADATA_VERSION: u8 = 1; const SHARD_METADATA_OFFSET: usize = 2; -use super::HUNK_VERSION; +use super::{HUNK_VERSION, SharksError}; // 256 bit share is 49 bytes + some amount of hunk bytes, gives us reasonable padding const ENC_LEN: u8 = 4 * 16; #[derive(Debug, thiserror::Error)] pub enum Error { - #[error("Error with creating Share: {0}")] - Share(String), + #[error("{0}")] + Sharks(#[from] SharksError), #[error("Error decrypting share: {0}")] SymDecryptShare(#[from] AesError), - #[error("Error combining shares: {0}")] - CombineShares(String), - #[error("Derived secret hash {0} != expected {1}")] InvalidSecret(Fingerprint, Fingerprint), @@ -509,10 +506,10 @@ pub fn combine( .values() .map(|message| Share::try_from(message.as_slice())) .collect::, &str>>() - .map_err(|e| Error::Share(e.to_string()))?; + .map_err(|e| SharksError::Share(e.to_string()))?; let secret = Sharks(threshold) .recover(&shares) - .map_err(|e| Error::CombineShares(e.to_string()))?; + .map_err(|e| SharksError::CombineShare(e.to_string()))?; // TODO: extract as function let userid = UserID::from("keyfork-sss");