embedded_td/crypto/
secp256k1.rs1use k256::ecdsa;
2use rand_core::{CryptoRng, RngCore};
3
4use super::define_as_ref_u8_array;
5
6#[derive(Debug, Clone)]
7pub struct SecretKey(pub [u8; 32], ecdsa::SigningKey);
8define_as_ref_u8_array!(SecretKey);
9
10#[derive(Debug, Clone)]
11pub struct PublicKey(pub [u8; 33], ecdsa::VerifyingKey);
12define_as_ref_u8_array!(PublicKey);
13
14impl SecretKey {
15 pub fn generate(rng: impl RngCore + CryptoRng) -> Self {
16 let secret_key = ecdsa::SigningKey::random(rng);
17 let bytes = secret_key.to_bytes().into();
18
19 Self(bytes, secret_key)
20 }
21
22 pub fn public_key(&self) -> PublicKey {
23 let public_key = self.1.verifying_key();
24 let bytes = public_key.to_bytes().into();
25
26 PublicKey(bytes, public_key)
27 }
28}