diff options
author | Wiktor Kwapisiewicz <wiktor@metacode.biz> | 2023-09-01 11:32:53 +0200 |
---|---|---|
committer | Wiktor Kwapisiewicz <wiktor@metacode.biz> | 2023-09-04 11:15:02 +0200 |
commit | 2b8f5db01e32da5634a14115add5043a9a208852 (patch) | |
tree | 2d70bc68c731f778d82c67133c9eacf7e5e4a8af | |
parent | bedff19babee71325e5c2be695a468df90892780 (diff) |
openpgp: Fix returning secret key as the public key
- Add regression unit test to catch this type of mistake in other
backends.
-rw-r--r-- | openpgp/src/crypto/backend/cng/asymmetric.rs | 2 | ||||
-rw-r--r-- | openpgp/src/crypto/backend/interface.rs | 11 | ||||
-rw-r--r-- | openpgp/src/crypto/backend/rust/asymmetric.rs | 2 |
3 files changed, 13 insertions, 2 deletions
diff --git a/openpgp/src/crypto/backend/cng/asymmetric.rs b/openpgp/src/crypto/backend/cng/asymmetric.rs index 668ea7ac..d75107d7 100644 --- a/openpgp/src/crypto/backend/cng/asymmetric.rs +++ b/openpgp/src/crypto/backend/cng/asymmetric.rs @@ -103,7 +103,7 @@ impl Asymmetric for super::Backend { fn ed25519_generate_key() -> Result<(Protected, [u8; 32])> { let mut rng = cng::random::RandomNumberGenerator::system_preferred(); let pair = ed25519_dalek::Keypair::generate(&mut rng); - Ok((pair.secret.as_bytes().as_slice().into(), pair.secret.to_bytes())) + Ok((pair.secret.as_bytes().as_slice().into(), pair.public.to_bytes())) } fn ed25519_derive_public(secret: &Protected) -> Result<[u8; 32]> { diff --git a/openpgp/src/crypto/backend/interface.rs b/openpgp/src/crypto/backend/interface.rs index 25b4cd37..bf6f876a 100644 --- a/openpgp/src/crypto/backend/interface.rs +++ b/openpgp/src/crypto/backend/interface.rs @@ -94,3 +94,14 @@ pub trait Asymmetric { PublicKeyAlgorithm::ElGamalEncrypt).into()) } } + +#[cfg(test)] +mod tests { + use crate::crypto::backend::{Backend, interface::Asymmetric}; + + #[test] + pub fn ed25519_generate_key_private_and_public_not_equal() { + let (secret, public) = Backend::ed25519_generate_key().unwrap(); + assert_ne!(secret.as_ref(), public); + } +} diff --git a/openpgp/src/crypto/backend/rust/asymmetric.rs b/openpgp/src/crypto/backend/rust/asymmetric.rs index 764f6803..7e10d34a 100644 --- a/openpgp/src/crypto/backend/rust/asymmetric.rs +++ b/openpgp/src/crypto/backend/rust/asymmetric.rs @@ -94,7 +94,7 @@ impl Asymmetric for super::Backend { // depends on 0.7. use rand07::rngs::OsRng as OsRng; let pair = ed25519_dalek::Keypair::generate(&mut OsRng); - Ok((pair.secret.as_bytes().as_slice().into(), pair.secret.to_bytes())) + Ok((pair.secret.as_bytes().as_slice().into(), pair.public.to_bytes())) } fn ed25519_derive_public(secret: &Protected) -> Result<[u8; 32]> { |