Skip to content

Commit c3d9388

Browse files
committed
Add Merlin, squeeze_bits does not work
1 parent adf245e commit c3d9388

File tree

3 files changed

+37
-0
lines changed

3 files changed

+37
-0
lines changed

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ ark-serialize = { version = "^0.4.0", default-features = false, features = [ "de
2525
blake2 = { version = "0.10", default-features = false }
2626
sha2 = { version = "0.10", default-features = false }
2727
digest = { version = "0.10", default-features = false }
28+
merlin = { version = "3.0.0", default-features = false }
2829

2930
ark-r1cs-std = { version = "^0.4.0", optional = true, default-features = false }
3031
ark-snark = { version = "^0.4.0", default-features = false }

src/sponge/merlin/mod.rs

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
use crate::sponge::{Absorb, CryptographicSponge};
2+
use merlin::Transcript;
3+
4+
impl CryptographicSponge for Transcript {
5+
type Config = &'static [u8];
6+
7+
fn new(params: &Self::Config) -> Self {
8+
Transcript::new(*params)
9+
}
10+
11+
fn absorb(&mut self, input: &impl Absorb) {
12+
self.append_message(b"", &input.to_sponge_bytes_as_vec());
13+
}
14+
15+
fn squeeze_bytes(&mut self, num_bytes: usize) -> Vec<u8> {
16+
let mut dest = Vec::with_capacity(num_bytes);
17+
self.challenge_bytes(b"", &mut dest);
18+
dest
19+
}
20+
21+
fn squeeze_bits(&mut self, num_bits: usize) -> Vec<bool> {
22+
let num_bytes = (num_bits + 7) / 8;
23+
let mut tmp = Vec::with_capacity(num_bytes);
24+
self.challenge_bytes(b"", &mut tmp);
25+
let dest = tmp
26+
.iter()
27+
.flat_map(|byte| (0..8u32).rev().map(move |i| (byte >> i) & 1 == 1))
28+
.collect::<Vec<_>>();
29+
dest[..num_bits].to_vec()
30+
}
31+
}

src/sponge/mod.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,11 @@ pub use absorb::*;
1717
/// [cos]: https://eprint.iacr.org/2019/1076
1818
pub mod poseidon;
1919

20+
/// The sponge for Merlin
21+
///
22+
///
23+
pub mod merlin;
24+
2025
#[cfg(test)]
2126
mod test;
2227

0 commit comments

Comments
 (0)