mirror of
https://github.com/serai-dex/serai.git
synced 2025-12-08 20:29:23 +00:00
This commit is contained in:
@@ -10,6 +10,9 @@ use digest::{typenum::type_operators::IsGreaterOrEqual, consts::U256, Digest, Ou
|
||||
pub trait Transcript {
|
||||
type Challenge: Clone + Send + Sync + AsRef<[u8]>;
|
||||
|
||||
/// Create a new transcript with the specified name
|
||||
fn new(name: &'static [u8]) -> Self;
|
||||
|
||||
/// Apply a domain separator to the transcript
|
||||
fn domain_separate(&mut self, label: &'static [u8]);
|
||||
|
||||
@@ -62,17 +65,17 @@ impl<D: SecureDigest> DigestTranscript<D> {
|
||||
self.0.update(u64::try_from(value.len()).unwrap().to_le_bytes());
|
||||
self.0.update(value);
|
||||
}
|
||||
|
||||
pub fn new(name: &'static [u8]) -> Self {
|
||||
let mut res = DigestTranscript(D::new());
|
||||
res.append(DigestTranscriptMember::Name, name);
|
||||
res
|
||||
}
|
||||
}
|
||||
|
||||
impl<D: SecureDigest> Transcript for DigestTranscript<D> {
|
||||
type Challenge = Output<D>;
|
||||
|
||||
fn new(name: &'static [u8]) -> Self {
|
||||
let mut res = DigestTranscript(D::new());
|
||||
res.append(DigestTranscriptMember::Name, name);
|
||||
res
|
||||
}
|
||||
|
||||
fn domain_separate(&mut self, label: &[u8]) {
|
||||
self.append(DigestTranscriptMember::Domain, label);
|
||||
}
|
||||
|
||||
@@ -17,6 +17,10 @@ impl Transcript for MerlinTranscript {
|
||||
// this wrapper should be secure with this setting
|
||||
type Challenge = [u8; 64];
|
||||
|
||||
fn new(name: &'static [u8]) -> Self {
|
||||
MerlinTranscript(merlin::Transcript::new(name))
|
||||
}
|
||||
|
||||
fn domain_separate(&mut self, label: &'static [u8]) {
|
||||
self.append_message(b"dom-sep", label);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user