securedrop_protocol_minimal/keys/
newsroom.rs1use rand_core::{CryptoRng, RngCore};
2
3use crate::sign::{DomainTag, Signature, SigningKey, VerifyingKey};
4
5pub struct NewsroomKeyPair {
7 vk: VerifyingKey,
8 sk: SigningKey,
9}
10
11impl core::fmt::Debug for NewsroomKeyPair {
12 fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
13 f.debug_struct("NewsroomKeyPair")
15 .field("vk", &self.vk)
16 .finish_non_exhaustive()
17 }
18}
19
20impl NewsroomKeyPair {
21 pub fn new<R: RngCore + CryptoRng>(mut rng: R) -> Result<Self, anyhow::Error> {
22 let sk = SigningKey::new(&mut rng)?;
23 let vk = sk.vk;
24 Ok(Self { sk, vk })
25 }
26
27 pub fn verifying_key(&self) -> VerifyingKey {
29 self.vk
30 }
31
32 pub fn sign<D: DomainTag>(&self, msg: &[u8]) -> Signature<D> {
34 self.sk.sign(msg)
35 }
36}