bothan_core/monitoring/
signer.rs

1//! Bothan core monitoring signer module.
2//!
3//! Provides signing key management and signing utilities.
4
5use 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
14/// Ed25519 signing key manager for monitoring.
15impl 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    // Get hex encoded public key
33    pub fn public_key(&self) -> String {
34        self.signing_key.verifying_key().to_bytes().encode_hex()
35    }
36
37    // Sign data
38    pub fn sign(&self, data: &[u8]) -> Vec<u8> {
39        self.signing_key.sign(data).to_vec()
40    }
41}