summaryrefslogtreecommitdiff
path: root/ext/node/ops/crypto/keys.rs
diff options
context:
space:
mode:
authorLuca Casonato <hello@lcas.dev>2024-08-09 12:58:20 +0200
committerGitHub <noreply@github.com>2024-08-09 12:58:20 +0200
commitfc023038424f3de81d7dd66c68634024a5b29eed (patch)
tree24cf26fd44306c35bb898d017fc342bce0d319dc /ext/node/ops/crypto/keys.rs
parentc9f626e2512d52fdc354e490b179eed7200b394b (diff)
fix(ext/node): ed25519 signing and cipheriv autopadding fixes (#24957)
- Return auth tag for GCM ciphers from auto padding shortcircuit - Use _ring_ for ed25519 signing --------- Co-authored-by: Divy Srivastava <dj.srivastava23@gmail.com>
Diffstat (limited to 'ext/node/ops/crypto/keys.rs')
-rw-r--r--ext/node/ops/crypto/keys.rs21
1 files changed, 4 insertions, 17 deletions
diff --git a/ext/node/ops/crypto/keys.rs b/ext/node/ops/crypto/keys.rs
index 5f634b35f..87e0e5439 100644
--- a/ext/node/ops/crypto/keys.rs
+++ b/ext/node/ops/crypto/keys.rs
@@ -496,14 +496,9 @@ impl KeyObjectHandle {
AsymmetricPrivateKey::X25519(x25519_dalek::StaticSecret::from(bytes))
}
ED25519_OID => {
- let string_ref = OctetStringRef::from_der(pk_info.private_key)
+ let signing_key = ed25519_dalek::SigningKey::try_from(pk_info)
.map_err(|_| type_error("invalid Ed25519 private key"))?;
- if string_ref.as_bytes().len() != 32 {
- return Err(type_error("Ed25519 private key is the wrong length"));
- }
- let mut bytes = [0; 32];
- bytes.copy_from_slice(string_ref.as_bytes());
- AsymmetricPrivateKey::Ed25519(ed25519_dalek::SigningKey::from(bytes))
+ AsymmetricPrivateKey::Ed25519(signing_key)
}
DH_KEY_AGREEMENT_OID => {
let params = pk_info
@@ -643,16 +638,8 @@ impl KeyObjectHandle {
AsymmetricPublicKey::X25519(x25519_dalek::PublicKey::from(bytes))
}
ED25519_OID => {
- let mut bytes = [0; 32];
- let data = spki.subject_public_key.as_bytes().ok_or_else(|| {
- type_error("malformed or missing public key in ed25519 spki")
- })?;
- if data.len() < 32 {
- return Err(type_error("ed25519 public key is too short"));
- }
- bytes.copy_from_slice(&data[0..32]);
- let verifying_key = ed25519_dalek::VerifyingKey::from_bytes(&bytes)
- .map_err(|_| type_error("ed25519 public key is malformed"))?;
+ let verifying_key = ed25519_dalek::VerifyingKey::try_from(spki)
+ .map_err(|_| type_error("invalid Ed25519 private key"))?;
AsymmetricPublicKey::Ed25519(verifying_key)
}
DH_KEY_AGREEMENT_OID => {