summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWiktor Kwapisiewicz <wiktor@metacode.biz>2023-09-01 11:32:53 +0200
committerWiktor Kwapisiewicz <wiktor@metacode.biz>2023-09-04 11:15:02 +0200
commit2b8f5db01e32da5634a14115add5043a9a208852 (patch)
tree2d70bc68c731f778d82c67133c9eacf7e5e4a8af
parentbedff19babee71325e5c2be695a468df90892780 (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.rs2
-rw-r--r--openpgp/src/crypto/backend/interface.rs11
-rw-r--r--openpgp/src/crypto/backend/rust/asymmetric.rs2
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]> {