From 5a9a125bfd93f35135133492954541bb91c718cb Mon Sep 17 00:00:00 2001 From: link2xt Date: Mon, 18 Nov 2024 23:11:59 +0000 Subject: [PATCH] feat: switch to OpenPGP v6 --- src/key.rs | 10 +++++++--- src/pgp.rs | 8 +++----- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/key.rs b/src/key.rs index b03d06610..c8a0e34b6 100644 --- a/src/key.rs +++ b/src/key.rs @@ -382,9 +382,9 @@ pub async fn preconfigure_keypair(context: &Context, secret_data: &str) -> Resul pub struct Fingerprint(Vec); impl Fingerprint { - /// Creates new 160-bit (20 bytes) fingerprint. + /// Creates new 160-bit (20 bytes) or 256-bit (32 bytes) fingerprint. pub fn new(v: Vec) -> Fingerprint { - debug_assert_eq!(v.len(), 20); + debug_assert!(v.len() == 20 || v.len() == 32); Fingerprint(v) } @@ -438,7 +438,11 @@ impl std::str::FromStr for Fingerprint { .filter(|&c| c.is_ascii_hexdigit()) .collect(); let v: Vec = hex::decode(&hex_repr)?; - ensure!(v.len() == 20, "wrong fingerprint length: {}", hex_repr); + ensure!( + v.len() == 20 || v.len() == 32, + "wrong fingerprint length: {}", + hex_repr + ); let fp = Fingerprint::new(v); Ok(fp) } diff --git a/src/pgp.rs b/src/pgp.rs index f729237d9..bf4e03869 100644 --- a/src/pgp.rs +++ b/src/pgp.rs @@ -11,7 +11,6 @@ use pgp::composed::{ Deserializable, KeyType as PgpKeyType, Message, SecretKeyParamsBuilder, SignedPublicKey, SignedPublicSubKey, SignedSecretKey, StandaloneSignature, SubkeyParamsBuilder, }; -use pgp::crypto::ecc_curve::ECCCurve; use pgp::crypto::hash::HashAlgorithm; use pgp::crypto::sym::SymmetricKeyAlgorithm; use pgp::types::{CompressionAlgorithm, PublicKeyTrait, SignatureBytes, StringToKey}; @@ -187,14 +186,12 @@ pub(crate) fn create_keypair(addr: EmailAddress, keygen_type: KeyGenType) -> Res let (signing_key_type, encryption_key_type) = match keygen_type { KeyGenType::Rsa2048 => (PgpKeyType::Rsa(2048), PgpKeyType::Rsa(2048)), KeyGenType::Rsa4096 => (PgpKeyType::Rsa(4096), PgpKeyType::Rsa(4096)), - KeyGenType::Ed25519 | KeyGenType::Default => ( - PgpKeyType::EdDSALegacy, - PgpKeyType::ECDH(ECCCurve::Curve25519), - ), + KeyGenType::Ed25519 | KeyGenType::Default => (PgpKeyType::Ed25519, PgpKeyType::X25519), }; let user_id = format!("<{addr}>"); let key_params = SecretKeyParamsBuilder::default() + .version(pgp::types::KeyVersion::V6) .key_type(signing_key_type) .can_certify(true) .can_sign(true) @@ -218,6 +215,7 @@ pub(crate) fn create_keypair(addr: EmailAddress, keygen_type: KeyGenType) -> Res ]) .subkey( SubkeyParamsBuilder::default() + .version(pgp::types::KeyVersion::V6) .key_type(encryption_key_type) .can_encrypt(true) .passphrase(None)