Skip to content

Commit a9057ed

Browse files
authored
fixed #687 - PKCS8 key encryption not working (#688)
1 parent 54857ca commit a9057ed

2 files changed

Lines changed: 15 additions & 1 deletion

File tree

russh/src/keys/format/pkcs8.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ pub fn encode_pkcs8_encrypted(
123123

124124
use rand_core::Rng;
125125
let mut rng = safe_rng();
126-
let mut salt = [0; 64];
126+
let mut salt = [0; 32];
127127
rng.fill_bytes(&mut salt);
128128
let mut iv = [0; 16];
129129
rng.fill_bytes(&mut iv);

russh/src/keys/format/tests.rs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
use ssh_key::{Algorithm, PrivateKey};
2+
3+
use crate::keys::pkcs8::{decode_pkcs8, encode_pkcs8_encrypted};
4+
15
use super::decode_secret_key;
26

37
#[test]
@@ -10,3 +14,13 @@ lpQg5vf23Fc9fFrQ9AnQKrb1dgTkoxQ=
1014
-----END EC PRIVATE KEY-----"#;
1115
decode_secret_key(key, None).unwrap();
1216
}
17+
18+
#[test]
19+
fn test_pkcs8_roundtrip() {
20+
let password = b"SomePassword";
21+
let original_key = PrivateKey::random(&mut rand::rng(), Algorithm::Ed25519).unwrap();
22+
23+
let encrypted = encode_pkcs8_encrypted(password, 10, &original_key).unwrap();
24+
let decrypted = decode_pkcs8(&encrypted, Some(password)).unwrap();
25+
assert_eq!(decrypted, original_key);
26+
}

0 commit comments

Comments
 (0)