Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ features = ["nightly"]
[dependencies]
keccak = { version = "0.1.0", default-features = false }
byteorder = { version = "1.2.4", default-features = false }
zeroize = { version = "1", default-features = false, features = ["zeroize_derive"] }
zeroize = { version = "1", optional = true, default-features = false, features = ["zeroize_derive"] }
rand_core = { version = "0.5", default-features = false }
hex = {version = "0.3", default-features = false, optional = true}

Expand All @@ -30,7 +30,8 @@ curve25519-dalek = "2"
rand_chacha = "0.2"

[features]
default = ["std"]
default = ["std", "zeroize"]
nightly = []
debug-transcript = ["hex"]
std = ["rand_core/std", "byteorder/std"]
zeroize = ["dep:zeroize"]
11 changes: 7 additions & 4 deletions src/strobe.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@
use core::ops::{Deref, DerefMut};

use keccak;
use zeroize::Zeroize;

#[cfg(feature = "zeroize")]
use zeroize::{Zeroize, ZeroizeOnDrop};

/// Strobe R value; security level 128 is hardcoded
const STROBE_R: u8 = 166;
Expand All @@ -22,15 +24,16 @@ fn transmute_state(st: &mut AlignedKeccakState) -> &mut [u64; 25] {
/// This is a wrapper around 200-byte buffer that's always 8-byte aligned
/// to make pointers to it safely convertible to pointers to [u64; 25]
/// (since u64 words must be 8-byte aligned)
#[derive(Clone, Zeroize)]
#[zeroize(drop)]
#[derive(Clone)]
#[cfg_attr(feature = "zeroize", derive(Zeroize, ZeroizeOnDrop))]
#[repr(align(8))]
struct AlignedKeccakState([u8; 200]);

/// A Strobe context for the 128-bit security level.
///
/// Only `meta-AD`, `AD`, `KEY`, and `PRF` operations are supported.
#[derive(Clone, Zeroize)]
#[derive(Clone)]
#[cfg_attr(feature = "zeroize", derive(Zeroize, ZeroizeOnDrop))]
pub struct Strobe128 {
state: AlignedKeccakState,
pos: u8,
Expand Down
6 changes: 4 additions & 2 deletions src/transcript.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
use rand_core;
use zeroize::Zeroize;
#[cfg(feature = "zeroize")]
use zeroize::{Zeroize, ZeroizeOnDrop};

use crate::strobe::Strobe128;

Expand Down Expand Up @@ -50,7 +51,8 @@ fn encode_usize_as_u32(x: usize) -> [u8; 4] {
/// implement a proof system, see the documentation at
/// [merlin.cool](https://merlin.cool), particularly the [Using
/// Merlin](https://merlin.cool/use/index.html) section.
#[derive(Clone, Zeroize)]
#[derive(Clone)]
#[cfg_attr(feature = "zeroize", derive(Zeroize, ZeroizeOnDrop))]
pub struct Transcript {
strobe: Strobe128,
}
Expand Down