[zk-token-sdk] Add encryption error variant `SeedLengthTooShort` and remove variant `PubkeyDoesNotExist` (#31840)

This commit is contained in:
samkim-crypto 2023-05-27 09:14:13 +09:00 committed by GitHub
parent e58ad81b64
commit 93efc13bbf
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 14 additions and 10 deletions

View File

@ -36,9 +36,8 @@ use {
pub enum AuthenticatedEncryptionError {
#[error("key derivation method not supported")]
DerivationMethodNotSupported,
#[error("pubkey does not exist")]
PubkeyDoesNotExist,
#[error("seed length too short for derivation")]
SeedLengthTooShort,
}
struct AuthenticatedEncryption;
@ -163,7 +162,7 @@ impl SeedDerivable for AeKey {
const MINIMUM_SEED_LEN: usize = 16;
if seed.len() < MINIMUM_SEED_LEN {
return Err("Seed is too short".into());
return Err(AuthenticatedEncryptionError::SeedLengthTooShort.into());
}
let mut hasher = Sha3_512::new();

View File

@ -54,6 +54,8 @@ use {
pub enum ElGamalError {
#[error("key derivation method not supported")]
DerivationMethodNotSupported,
#[error("seed length too short for derivation")]
SeedLengthTooShort,
}
/// Algorithm handle for the twisted ElGamal encryption scheme
@ -373,7 +375,8 @@ impl ElGamalSecretKey {
public_seed: &[u8],
) -> Result<Self, Box<dyn error::Error>> {
let seed = Self::seed_from_signer(signer, public_seed)?;
Self::from_seed(&seed)
let key = Self::from_seed(&seed)?;
Ok(key)
}
/// Derive a seed from a Solana signer used to generate an ElGamal secret key.
@ -407,11 +410,11 @@ impl ElGamalSecretKey {
}
/// Derive an ElGamal secret key from an entropy seed.
pub fn from_seed(seed: &[u8]) -> Result<Self, Box<dyn error::Error>> {
pub fn from_seed(seed: &[u8]) -> Result<Self, ElGamalError> {
const MINIMUM_SEED_LEN: usize = 32;
if seed.len() < MINIMUM_SEED_LEN {
return Err("Seed is too short".into());
return Err(ElGamalError::SeedLengthTooShort);
}
Ok(ElGamalSecretKey(Scalar::hash_from_bytes::<Sha3_512>(seed)))
}
@ -467,7 +470,8 @@ impl EncodableKey for ElGamalSecretKey {
impl SeedDerivable for ElGamalSecretKey {
fn from_seed(seed: &[u8]) -> Result<Self, Box<dyn error::Error>> {
Self::from_seed(seed)
let key = Self::from_seed(seed)?;
Ok(key)
}
fn from_seed_and_derivation_path(
@ -481,10 +485,11 @@ impl SeedDerivable for ElGamalSecretKey {
seed_phrase: &str,
passphrase: &str,
) -> Result<Self, Box<dyn error::Error>> {
Self::from_seed(&generate_seed_from_seed_phrase_and_passphrase(
let key = Self::from_seed(&generate_seed_from_seed_phrase_and_passphrase(
seed_phrase,
passphrase,
))
))?;
Ok(key)
}
}