Skip to content

Commit bae9c24

Browse files
committed
Gate zeroize behind crate feature
1 parent b17f994 commit bae9c24

3 files changed

Lines changed: 20 additions & 7 deletions

File tree

.github/workflows/balloon-hash.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,4 +61,8 @@ jobs:
6161
toolchain: ${{ matrix.rust }}
6262
override: true
6363
- run: cargo test --release
64+
- run: cargo test --release --no-default-features --features alloc
65+
- run: cargo test --release --no-default-features --features alloc,zeroize
66+
- run: cargo test --release --no-default-features --features parallel
67+
- run: cargo test --release --no-default-features --features parallel,zeroize
6468
- run: cargo test --release --all-features

balloon-hash/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,11 @@ rust-version = "1.57"
1515
[dependencies]
1616
digest = { version = "0.10.3", default-features = false }
1717
crypto-bigint = { version = "0.4", default-features = false, features = ["generic-array"] }
18-
zeroize = { version = "1", default-features = false }
1918

2019
# optional dependencies
2120
password-hash = { version = "0.4", default-features = false, optional = true }
2221
rayon = { version = "1.5", optional = true }
22+
zeroize = { version = "1", default-features = false, optional = true }
2323

2424
[dev-dependencies]
2525
hex-literal = "0.3"

balloon-hash/src/balloon.rs

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ use core::mem;
44
use crypto_bigint::{ArrayDecoding, ArrayEncoding, NonZero};
55
use digest::generic_array::GenericArray;
66
use digest::{Digest, FixedOutputReset};
7+
8+
#[cfg(feature = "zeroize")]
79
use zeroize::Zeroize;
810

911
pub fn balloon<D: Digest + FixedOutputReset>(
@@ -38,9 +40,11 @@ where
3840
let mut output = hash_internal::<D>(pwd, salt, secret, params, memory_blocks, Some(1))?;
3941

4042
for thread in 2..=u64::from(params.p_cost.get()) {
43+
#[cfg_attr(not(feature = "zeroize"), allow(unused_mut))]
4144
let mut hash =
4245
hash_internal::<D>(pwd, salt, secret, params, memory_blocks, Some(thread))?;
4346
output.iter_mut().zip(&hash).for_each(|(a, b)| *a ^= b);
47+
#[cfg(feature = "zeroize")]
4448
hash.zeroize();
4549
}
4650

@@ -65,12 +69,16 @@ where
6569
.map_with((params, secret), |(params, secret), (thread, memory)| {
6670
hash_internal::<D>(pwd, salt, *secret, *params, memory, Some(thread))
6771
})
68-
.try_reduce(GenericArray::default, |mut a, mut b| {
69-
a.iter_mut().zip(&b).for_each(|(a, b)| *a ^= b);
70-
b.zeroize();
71-
72-
Ok(a)
73-
})
72+
.try_reduce(
73+
GenericArray::default,
74+
|mut a, #[cfg_attr(not(feature = "zeroize"), allow(unused_mut))] mut b| {
75+
a.iter_mut().zip(&b).for_each(|(a, b)| *a ^= b);
76+
#[cfg(feature = "zeroize")]
77+
b.zeroize();
78+
79+
Ok(a)
80+
},
81+
)
7482
}?
7583
};
7684

@@ -206,6 +214,7 @@ where
206214
// Step 3. Extract output from buffer.
207215
// return buf[s_cost-1]
208216
let out = buf.last().unwrap().clone();
217+
#[cfg(feature = "zeroize")]
209218
buf.iter_mut().for_each(|block| block.zeroize());
210219

211220
Ok(out)

0 commit comments

Comments
 (0)