keyfork-shard: make custom error for Sharks errors
This commit is contained in:
parent
a79c4a4079
commit
d08765b956
|
@ -15,6 +15,15 @@ use x25519_dalek::{EphemeralSecret, PublicKey};
|
||||||
#[cfg(feature = "openpgp")]
|
#[cfg(feature = "openpgp")]
|
||||||
pub mod 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:
|
/// Decrypt hunk version 1:
|
||||||
/// 1 byte: Version
|
/// 1 byte: Version
|
||||||
/// 1 byte: Threshold
|
/// 1 byte: Threshold
|
||||||
|
@ -94,10 +103,10 @@ pub fn remote_decrypt() -> Result<(), Box<dyn std::error::Error>> {
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(|s| Share::try_from(s.as_slice()))
|
.map(|s| Share::try_from(s.as_slice()))
|
||||||
.collect::<Result<Vec<_>, &str>>()
|
.collect::<Result<Vec<_>, &str>>()
|
||||||
.map_err(|e| anyhow::anyhow!("{e}"))?;
|
.map_err(|e| SharksError::Share(e.to_string()))?;
|
||||||
let secret = Sharks(threshold)
|
let secret = Sharks(threshold)
|
||||||
.recover(&shares)
|
.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
|
* Verification would take up too much size, mnemonic would be very large
|
||||||
|
|
|
@ -48,22 +48,19 @@ use smartcard::SmartcardManager;
|
||||||
const SHARD_METADATA_VERSION: u8 = 1;
|
const SHARD_METADATA_VERSION: u8 = 1;
|
||||||
const SHARD_METADATA_OFFSET: usize = 2;
|
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
|
// 256 bit share is 49 bytes + some amount of hunk bytes, gives us reasonable padding
|
||||||
const ENC_LEN: u8 = 4 * 16;
|
const ENC_LEN: u8 = 4 * 16;
|
||||||
|
|
||||||
#[derive(Debug, thiserror::Error)]
|
#[derive(Debug, thiserror::Error)]
|
||||||
pub enum Error {
|
pub enum Error {
|
||||||
#[error("Error with creating Share: {0}")]
|
#[error("{0}")]
|
||||||
Share(String),
|
Sharks(#[from] SharksError),
|
||||||
|
|
||||||
#[error("Error decrypting share: {0}")]
|
#[error("Error decrypting share: {0}")]
|
||||||
SymDecryptShare(#[from] AesError),
|
SymDecryptShare(#[from] AesError),
|
||||||
|
|
||||||
#[error("Error combining shares: {0}")]
|
|
||||||
CombineShares(String),
|
|
||||||
|
|
||||||
#[error("Derived secret hash {0} != expected {1}")]
|
#[error("Derived secret hash {0} != expected {1}")]
|
||||||
InvalidSecret(Fingerprint, Fingerprint),
|
InvalidSecret(Fingerprint, Fingerprint),
|
||||||
|
|
||||||
|
@ -509,10 +506,10 @@ pub fn combine(
|
||||||
.values()
|
.values()
|
||||||
.map(|message| Share::try_from(message.as_slice()))
|
.map(|message| Share::try_from(message.as_slice()))
|
||||||
.collect::<Result<Vec<_>, &str>>()
|
.collect::<Result<Vec<_>, &str>>()
|
||||||
.map_err(|e| Error::Share(e.to_string()))?;
|
.map_err(|e| SharksError::Share(e.to_string()))?;
|
||||||
let secret = Sharks(threshold)
|
let secret = Sharks(threshold)
|
||||||
.recover(&shares)
|
.recover(&shares)
|
||||||
.map_err(|e| Error::CombineShares(e.to_string()))?;
|
.map_err(|e| SharksError::CombineShare(e.to_string()))?;
|
||||||
|
|
||||||
// TODO: extract as function
|
// TODO: extract as function
|
||||||
let userid = UserID::from("keyfork-sss");
|
let userid = UserID::from("keyfork-sss");
|
||||||
|
|
Loading…
Reference in New Issue