ex3_crypto/secp256k1/
generator.rs1use k256::ecdsa::SigningKey;
2
3use super::privkey::Privkey;
4use super::pubkey::Pubkey;
5use rand_core::OsRng;
6
7pub struct Generator {
9 rng: OsRng,
10}
11
12impl Default for Generator {
13 fn default() -> Self {
14 Self::new()
15 }
16}
17
18impl Generator {
19 pub fn new() -> Self {
21 let rng: OsRng = OsRng;
22 Generator { rng }
23 }
24
25 fn gen_secret_key(&mut self) -> SigningKey {
27 SigningKey::random(&mut self.rng)
28 }
29
30 pub fn gen_privkey(&mut self) -> Privkey {
32 self.gen_secret_key().into()
33 }
34
35 pub fn gen_keypair(&mut self) -> (Privkey, Pubkey) {
37 let secret_key = self.gen_secret_key();
38 let pubkey = secret_key.verifying_key().clone();
39
40 (secret_key.into(), pubkey.into())
41 }
42
43 pub fn random_privkey() -> Privkey {
45 Generator::new().gen_privkey()
46 }
47
48 pub fn random_keypair() -> (Privkey, Pubkey) {
50 Generator::new().gen_keypair()
51 }
52
53 pub fn random_secret_key() -> SigningKey {
55 Generator::new().gen_secret_key()
56 }
57}