@@ -6,19 +6,19 @@ pub const X25519_PRIVATE_KEY_SIZE: usize = 32;
6
6
pub const X25519_PUBLIC_KEY_SIZE : usize = 32 ;
7
7
8
8
/// Create a new X25519 private key using the given random number generator.
9
- pub fn x25519_new_agreement_private_key_using ( rng : & mut impl RandomNumberGenerator ) -> [ u8 ; X25519_PRIVATE_KEY_SIZE ] {
9
+ pub fn x25519_new_private_key_using ( rng : & mut impl RandomNumberGenerator ) -> [ u8 ; X25519_PRIVATE_KEY_SIZE ] {
10
10
rng. random_data ( X25519_PRIVATE_KEY_SIZE ) . try_into ( ) . unwrap ( )
11
11
}
12
12
13
13
/// Derive a X25519 public key from a private key.
14
- pub fn x25519_agreement_public_key_from_private_key ( agreement_private_key : & [ u8 ; X25519_PRIVATE_KEY_SIZE ] ) -> [ u8 ; X25519_PUBLIC_KEY_SIZE ] {
15
- let sk = StaticSecret :: from ( * agreement_private_key ) ;
14
+ pub fn x25519_public_key_from_private_key ( x25519_private_key : & [ u8 ; X25519_PRIVATE_KEY_SIZE ] ) -> [ u8 ; X25519_PUBLIC_KEY_SIZE ] {
15
+ let sk = StaticSecret :: from ( * x25519_private_key ) ;
16
16
let pk = PublicKey :: from ( & sk) ;
17
17
pk. as_bytes ( ) . to_owned ( )
18
18
}
19
19
20
- /// Derive an X25519 agreement private key from the given key material.
21
- pub fn x25519_derive_agreement_private_key ( key_material : impl AsRef < [ u8 ] > ) -> [ u8 ; X25519_PRIVATE_KEY_SIZE ] {
20
+ /// Derive an X25519 private key from the given key material.
21
+ pub fn x25519_derive_private_key ( key_material : impl AsRef < [ u8 ] > ) -> [ u8 ; X25519_PRIVATE_KEY_SIZE ] {
22
22
hkdf_hmac_sha256 ( key_material, "agreement" . as_bytes ( ) , X25519_PRIVATE_KEY_SIZE ) . try_into ( ) . unwrap ( )
23
23
}
24
24
@@ -27,10 +27,10 @@ pub fn x25519_derive_signing_private_key(key_material: impl AsRef<[u8]>) -> [u8;
27
27
hkdf_hmac_sha256 ( key_material, "signing" . as_bytes ( ) , X25519_PRIVATE_KEY_SIZE ) . try_into ( ) . unwrap ( )
28
28
}
29
29
30
- /// Compute the shared symmetric key from the given agreement private key and agreement public key .
31
- pub fn x25519_shared_key ( agreement_private_key : & [ u8 ; X25519_PRIVATE_KEY_SIZE ] , agreement_public_key : & [ u8 ; X25519_PUBLIC_KEY_SIZE ] ) -> [ u8 ; SYMMETRIC_KEY_SIZE ] {
32
- let sk = StaticSecret :: from ( * agreement_private_key ) ;
33
- let pk = PublicKey :: from ( * agreement_public_key ) ;
30
+ /// Compute the shared symmetric key from the given X25519 private and public keys .
31
+ pub fn x25519_shared_key ( x25519_private_key : & [ u8 ; X25519_PRIVATE_KEY_SIZE ] , x25519_public_key : & [ u8 ; X25519_PUBLIC_KEY_SIZE ] ) -> [ u8 ; SYMMETRIC_KEY_SIZE ] {
32
+ let sk = StaticSecret :: from ( * x25519_private_key ) ;
33
+ let pk = PublicKey :: from ( * x25519_public_key ) ;
34
34
let shared_secret = sk. diffie_hellman ( & pk) ;
35
35
hkdf_hmac_sha256 ( shared_secret. as_bytes ( ) , "agreement" . as_bytes ( ) , 32 ) . try_into ( ) . unwrap ( )
36
36
}
@@ -40,18 +40,18 @@ mod tests {
40
40
use bc_rand:: make_fake_random_number_generator;
41
41
use hex_literal:: hex;
42
42
43
- use crate :: { x25519_new_agreement_private_key_using , x25519_agreement_public_key_from_private_key , x25519_derive_agreement_private_key , x25519_derive_signing_private_key, x25519_shared_key} ;
43
+ use crate :: { x25519_new_private_key_using , x25519_public_key_from_private_key , x25519_derive_private_key , x25519_derive_signing_private_key, x25519_shared_key} ;
44
44
45
45
#[ test]
46
46
fn test_x25519_keys ( ) {
47
47
let mut rng = make_fake_random_number_generator ( ) ;
48
- let private_key = x25519_new_agreement_private_key_using ( & mut rng) ;
48
+ let private_key = x25519_new_private_key_using ( & mut rng) ;
49
49
assert_eq ! ( private_key, hex!( "7eb559bbbf6cce2632cf9f194aeb50943de7e1cbad54dcfab27a42759f5e2fed" ) ) ;
50
- let public_key = x25519_agreement_public_key_from_private_key ( & private_key) ;
50
+ let public_key = x25519_public_key_from_private_key ( & private_key) ;
51
51
assert_eq ! ( public_key, hex!( "f1bd7a7e118ea461eba95126a3efef543ebb78439d1574bedcbe7d89174cf025" ) ) ;
52
52
53
- let derived_agreement_private_key = x25519_derive_agreement_private_key ( b"password" ) ;
54
- assert_eq ! ( derived_agreement_private_key , hex!( "7b19769132648ff43ae60cbaa696d5be3f6d53e6645db72e2d37516f0729619f" ) ) ;
53
+ let derived_x25519_private_key = x25519_derive_private_key ( b"password" ) ;
54
+ assert_eq ! ( derived_x25519_private_key , hex!( "7b19769132648ff43ae60cbaa696d5be3f6d53e6645db72e2d37516f0729619f" ) ) ;
55
55
56
56
let derived_signing_private_key = x25519_derive_signing_private_key ( b"password" ) ;
57
57
assert_eq ! ( derived_signing_private_key, hex!( "05cc550daa75058e613e606d9898fedf029e395911c43273a208b7e0e88e271b" ) ) ;
@@ -60,10 +60,10 @@ mod tests {
60
60
#[ test]
61
61
fn test_key_agreement ( ) {
62
62
let mut rng = make_fake_random_number_generator ( ) ;
63
- let alice_private_key = x25519_new_agreement_private_key_using ( & mut rng) ;
64
- let alice_public_key = x25519_agreement_public_key_from_private_key ( & alice_private_key) ;
65
- let bob_private_key = x25519_new_agreement_private_key_using ( & mut rng) ;
66
- let bob_public_key = x25519_agreement_public_key_from_private_key ( & bob_private_key) ;
63
+ let alice_private_key = x25519_new_private_key_using ( & mut rng) ;
64
+ let alice_public_key = x25519_public_key_from_private_key ( & alice_private_key) ;
65
+ let bob_private_key = x25519_new_private_key_using ( & mut rng) ;
66
+ let bob_public_key = x25519_public_key_from_private_key ( & bob_private_key) ;
67
67
let alice_shared_key = x25519_shared_key ( & alice_private_key, & bob_public_key) ;
68
68
let bob_shared_key = x25519_shared_key ( & bob_private_key, & alice_public_key) ;
69
69
assert_eq ! ( alice_shared_key, bob_shared_key) ;
0 commit comments