@@ -3,7 +3,6 @@ use rand_core::OsRng;
33pub use libsecp256k1:: { Error , PublicKey , SecretKey } ;
44
55use crate :: compat:: Vec ;
6- use crate :: config:: is_hkdf_key_compressed;
76use crate :: consts:: SharedSecret ;
87use crate :: symmetric:: hkdf_derive;
98
@@ -15,20 +14,18 @@ pub fn generate_keypair() -> (SecretKey, PublicKey) {
1514}
1615
1716/// Calculate a shared symmetric key of our secret key and peer's public key by hkdf
18- pub fn encapsulate ( sk : & SecretKey , peer_pk : & PublicKey ) -> Result < SharedSecret , Error > {
17+ pub fn encapsulate ( sk : & SecretKey , peer_pk : & PublicKey , compressed : bool ) -> Result < SharedSecret , Error > {
1918 let mut shared_point = * peer_pk;
2019 shared_point. tweak_mul_assign ( sk) ?;
2120 let sender_point = & PublicKey :: from_secret_key ( sk) ;
22- // TODO: move compressed: bool to arg
23- Ok ( get_shared_secret ( sender_point, & shared_point, is_hkdf_key_compressed ( ) ) )
21+ Ok ( get_shared_secret ( sender_point, & shared_point, compressed) )
2422}
2523
2624/// Calculate a shared symmetric key of our public key and peer's secret key by hkdf
27- pub fn decapsulate ( pk : & PublicKey , peer_sk : & SecretKey ) -> Result < SharedSecret , Error > {
25+ pub fn decapsulate ( pk : & PublicKey , peer_sk : & SecretKey , compressed : bool ) -> Result < SharedSecret , Error > {
2826 let mut shared_point = * pk;
2927 shared_point. tweak_mul_assign ( peer_sk) ?;
30- // TODO: move compressed: bool to arg
31- Ok ( get_shared_secret ( pk, & shared_point, is_hkdf_key_compressed ( ) ) )
28+ Ok ( get_shared_secret ( pk, & shared_point, compressed) )
3229}
3330
3431/// Parse secret key bytes
@@ -105,9 +102,14 @@ mod known_tests {
105102 let pk3 = PublicKey :: from_secret_key ( & sk3) ;
106103
107104 assert_eq ! (
108- encapsulate( & sk2, & pk3) . unwrap( ) . to_vec( ) ,
105+ encapsulate( & sk2, & pk3, false ) . unwrap( ) . to_vec( ) ,
109106 decode_hex( "6f982d63e8590c9d9b5b4c1959ff80315d772edd8f60287c9361d548d5200f82" )
110107 ) ;
108+
109+ assert_eq ! (
110+ encapsulate( & sk2, & pk3, true ) . unwrap( ) . to_vec( ) ,
111+ decode_hex( "b192b226edb3f02da11ef9c6ce4afe1c7e40be304e05ae3b988f4834b1cb6c69" )
112+ ) ;
111113 }
112114
113115 #[ cfg( all( not( feature = "xchacha20" ) , not( feature = "aes-short-nonce" ) ) ) ]
@@ -212,32 +214,28 @@ mod error_tests {
212214
213215#[ cfg( test) ]
214216mod config_tests {
215- use super :: known_tests:: get_sk;
216- use super :: { encapsulate, generate_keypair, PublicKey } ;
217+ use super :: generate_keypair;
217218
218219 use crate :: config:: { reset_config, update_config, Config } ;
219- use crate :: utils:: tests:: decode_hex;
220- use crate :: { decrypt, encrypt} ;
220+ use crate :: { decrypt, encrypt, Error } ;
221221
222222 const MSG : & str = "helloworld🌍" ;
223223
224224 #[ test]
225- pub fn test_known_hkdf_config ( ) {
226- let sk2 = get_sk ( 2 ) ;
227- let sk3 = get_sk ( 3 ) ;
228- let pk3 = PublicKey :: from_secret_key ( & sk3) ;
225+ pub fn test_hkdf_key_config ( ) {
226+ let ( sk, pk) = generate_keypair ( ) ;
227+ let ( sk, pk) = ( & sk. serialize ( ) , & pk. serialize_compressed ( ) ) ;
229228
230229 update_config ( Config {
231230 is_hkdf_key_compressed : true ,
232231 ..Config :: default ( )
233232 } ) ;
234233
235- assert_eq ! (
236- encapsulate( & sk2, & pk3) . unwrap( ) . to_vec( ) ,
237- decode_hex( "b192b226edb3f02da11ef9c6ce4afe1c7e40be304e05ae3b988f4834b1cb6c69" )
238- ) ;
234+ let encrypted = encrypt ( pk, MSG . as_bytes ( ) ) . unwrap ( ) ;
235+ assert_eq ! ( MSG . as_bytes( ) , & decrypt( sk, & encrypted) . unwrap( ) ) ;
239236
240237 reset_config ( ) ;
238+ assert_eq ! ( decrypt( sk, & encrypted) . unwrap_err( ) , Error :: InvalidMessage ) ;
241239 }
242240
243241 #[ test]
@@ -277,8 +275,8 @@ mod wasm_tests {
277275
278276 #[ wasm_bindgen_test]
279277 fn test_config ( ) {
278+ super :: config_tests:: test_hkdf_key_config ( ) ;
280279 super :: config_tests:: test_ephemeral_key_config ( ) ;
281- super :: config_tests:: test_known_hkdf_config ( ) ;
282280 }
283281
284282 #[ wasm_bindgen_test]
0 commit comments