diff --git a/openpgp-card-sequoia/src/util.rs b/openpgp-card-sequoia/src/util.rs index 4661bc8..0288efe 100644 --- a/openpgp-card-sequoia/src/util.rs +++ b/openpgp-card-sequoia/src/util.rs @@ -247,7 +247,7 @@ pub fn public_key_material_to_key( match key_type { KeyType::Authentication | KeyType::Signing => { - if algo_ecc.curve() == Curve::Ed25519 { + if algo_ecc.curve() == &Curve::Ed25519 { // EdDSA let k4 = Key4::import_public_ed25519(ecc.data(), time).map_err(|e| { @@ -277,7 +277,7 @@ pub fn public_key_material_to_key( } } KeyType::Decryption => { - if algo_ecc.curve() == Curve::Cv25519 { + if algo_ecc.curve() == &Curve::Cv25519 { // EdDSA let k4 = Key4::import_public_cv25519(ecc.data(), hash, sym, time) .map_err(|e| { diff --git a/openpgp-card/src/algorithm.rs b/openpgp-card/src/algorithm.rs index 6a772c8..46a475c 100644 --- a/openpgp-card/src/algorithm.rs +++ b/openpgp-card/src/algorithm.rs @@ -298,8 +298,8 @@ impl EccAttrs { self.ecc_type } - pub fn curve(&self) -> Curve { - self.curve + pub fn curve(&self) -> &Curve { + &self.curve } pub fn oid(&self) -> &[u8] { @@ -312,7 +312,7 @@ impl EccAttrs { } /// Enum for naming ECC curves, and mapping them to/from their OIDs. -#[derive(Debug, Clone, Copy, Eq, PartialEq)] +#[derive(Debug, Clone, Eq, PartialEq)] #[non_exhaustive] pub enum Curve { NistP256r1, @@ -326,6 +326,7 @@ pub enum Curve { Cv25519, Ed448, X448, + Unknown(Vec), } impl Curve { @@ -343,6 +344,7 @@ impl Curve { Cv25519 => oid::CV25519, Ed448 => oid::ED448, X448 => oid::X448, + Unknown(v) => v, } } } @@ -370,7 +372,7 @@ impl TryFrom<&[u8]> for Curve { oid::ED448 => Ed448, oid::X448 => X448, - _ => return Err(Error::ParseError(format!("Unknown curve OID {oid:?}"))), + o => Unknown(o.to_vec()), }; Ok(curve)