serde_encrypt_core/key/
key_pair.rs1pub mod private_key;
4pub mod public_key;
5
6use core::ops::DerefMut;
7
8use self::{
9 private_key::{ReceiverPrivateKey, SenderPrivateKey},
10 public_key::{ReceiverPublicKey, SenderPublicKey},
11};
12use crate::random::RngSingleton;
13use crypto_box::{PublicKey, SecretKey};
14
15pub trait SenderKeyPairCore {
17 type R: RngSingleton;
19
20 fn new(sender_private_key: SenderPrivateKey, sender_public_key: SenderPublicKey) -> Self
22 where
23 Self: Sized;
24
25 fn generate() -> Self
27 where
28 Self: Sized,
29 {
30 let (private_key, public_key) = gen_key_pair::<Self::R>();
31 let sender_private_key = SenderPrivateKey::from(private_key);
32 let sender_public_key = SenderPublicKey::from(public_key);
33 Self::new(sender_private_key, sender_public_key)
34 }
35
36 fn private_key(&self) -> &SenderPrivateKey;
38
39 fn public_key(&self) -> &SenderPublicKey;
41}
42
43pub trait ReceiverKeyPairCore {
45 type R: RngSingleton;
47
48 fn new(
50 receiver_private_key: ReceiverPrivateKey,
51 receiver_public_key: ReceiverPublicKey,
52 ) -> Self
53 where
54 Self: Sized;
55
56 fn generate() -> Self
58 where
59 Self: Sized,
60 {
61 let (private_key, public_key) = gen_key_pair::<Self::R>();
62 let receiver_private_key = ReceiverPrivateKey::from(private_key);
63 let receiver_public_key = ReceiverPublicKey::from(public_key);
64 Self::new(receiver_private_key, receiver_public_key)
65 }
66
67 fn private_key(&self) -> &ReceiverPrivateKey;
69
70 fn public_key(&self) -> &ReceiverPublicKey;
72}
73
74fn gen_key_pair<R>() -> (SecretKey, PublicKey)
75where
76 R: RngSingleton,
77{
78 let mut rng = R::instance();
79
80 let secret_key = SecretKey::generate(rng.deref_mut());
81 let public_key = secret_key.public_key();
82
83 (secret_key, public_key)
84}