bothan_core/monitoring/
signer.rs1use ed25519::signature::Signer as _;
6use ed25519_dalek::{SecretKey, SigningKey};
7use hex::{FromHex, FromHexError, ToHex};
8use rand::rngs::OsRng;
9
10pub struct Signer {
11 pub signing_key: SigningKey,
12}
13
14impl Signer {
16 pub fn random() -> Self {
17 Self {
18 signing_key: SigningKey::generate(&mut OsRng),
19 }
20 }
21
22 pub fn to_hex(&self) -> String {
23 self.signing_key.to_bytes().encode_hex()
24 }
25
26 pub fn from_hex(hex: &str) -> Result<Self, FromHexError> {
27 Ok(Self {
28 signing_key: SigningKey::from_bytes(&SecretKey::from_hex(hex)?),
29 })
30 }
31
32 pub fn public_key(&self) -> String {
34 self.signing_key.verifying_key().to_bytes().encode_hex()
35 }
36
37 pub fn sign(&self, data: &[u8]) -> Vec<u8> {
39 self.signing_key.sign(data).to_vec()
40 }
41}