@@ -8,6 +8,7 @@ use core::cell::OnceCell;
8
8
use core:: cmp;
9
9
use core:: hash:: Hash ;
10
10
use core:: hash:: Hasher ;
11
+ use ed25519_dalek:: SecretKey ;
11
12
use ed25519_dalek:: Signer ;
12
13
use ed25519_dalek:: SigningKey ;
13
14
use ed25519_dalek:: Verifier ;
@@ -80,6 +81,15 @@ impl Secret {
80
81
}
81
82
}
82
83
84
+ #[ must_use]
85
+ pub fn from_secret_keys ( secret_key_1 : & SecretKey , secret_key_2 : & SecretKey ) -> Self {
86
+ Self {
87
+ signing_key : SigningKey :: from_bytes ( secret_key_1) ,
88
+ decryption_key : StaticSecret :: from ( * secret_key_2) ,
89
+ identity : OnceCell :: new ( ) ,
90
+ }
91
+ }
92
+
83
93
#[ inline]
84
94
#[ must_use]
85
95
pub fn signing_key ( & self ) -> & SigningKey {
@@ -330,6 +340,18 @@ mod tests {
330
340
id. verify ( ) . expect ( "verification failed" ) ;
331
341
}
332
342
343
+ #[ test]
344
+ fn from_secret_keys ( ) {
345
+ let secret_key_1 = Secret :: random ( thread_rng ( ) ) ;
346
+ let secret_key_2 = Secret :: random ( thread_rng ( ) ) ;
347
+ let id = Secret :: from_secret_keys (
348
+ secret_key_1. signing_key ( ) . as_bytes ( ) ,
349
+ secret_key_2. signing_key ( ) . as_bytes ( ) ,
350
+ )
351
+ . to_identity ( ) ;
352
+ id. verify ( ) . expect ( "verification failed" ) ;
353
+ }
354
+
333
355
#[ test]
334
356
fn secret_deserialization ( ) {
335
357
let secret = Secret :: random ( thread_rng ( ) ) ;
0 commit comments