Skip to content

Commit 4f780ba

Browse files
committed
Move from Zeroize to ZeroizeOnDrop
1 parent 16e072d commit 4f780ba

File tree

3 files changed

+26
-30
lines changed

3 files changed

+26
-30
lines changed

Cargo.toml

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ std = ["alloc"]
2626

2727
[dependencies]
2828
curve25519-dalek = { version = "3", default-features = false, optional = true }
29-
derive-where = { version = "1.0.0-rc.1", features = ["zeroize"] }
29+
derive-where = { version = "1.0.0-rc.2", features = ["zeroize-on-drop"] }
3030
digest = "0.10"
3131
displaydoc = { version = "0.2", default-features = false }
3232
elliptic-curve = { version = "0.12.0-pre.1", features = [
@@ -41,7 +41,7 @@ serde = { version = "1", default-features = false, features = [
4141
], optional = true }
4242
sha2 = { version = "0.10", default-features = false, optional = true }
4343
subtle = { version = "2.3", default-features = false }
44-
zeroize = { version = "1", default-features = false }
44+
zeroize = { version = "1.5", default-features = false }
4545

4646
[dev-dependencies]
4747
generic-array = { version = "0.14", features = ["more_lengths"] }
@@ -59,3 +59,6 @@ sha2 = "0.10"
5959
[package.metadata.docs.rs]
6060
features = ["danger", "std"]
6161
targets = []
62+
63+
[patch.crates-io]
64+
derive-where = { git = "https://github.com/ModProg/derive-where" }

src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -486,7 +486,7 @@
486486
//!
487487
//! [curve25519-dalek]: (https://doc.dalek.rs/curve25519_dalek/index.html#backends-and-features)
488488
489-
#![deny(unsafe_code)]
489+
#![cfg_attr(not(test), deny(unsafe_code))]
490490
#![no_std]
491491
#![warn(clippy::cargo, missing_docs)]
492492
#![allow(clippy::multiple_crate_versions)]

src/voprf.rs

Lines changed: 20 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
use alloc::vec::Vec;
1212
use core::iter::{self, Map, Repeat, Zip};
1313

14-
use derive_where::DeriveWhere;
14+
use derive_where::derive_where;
1515
use digest::core_api::BlockSizeUser;
1616
use digest::{Digest, Output, OutputSizeUser};
1717
use generic_array::sequence::Concat;
@@ -62,8 +62,7 @@ impl Mode {
6262

6363
/// A client which engages with a [NonVerifiableServer] in base mode, meaning
6464
/// that the OPRF outputs are not verifiable.
65-
#[derive(DeriveWhere)]
66-
#[derive_where(Clone, Zeroize(drop))]
65+
#[derive_where(Clone, ZeroizeOnDrop)]
6766
#[derive_where(Debug, Eq, Hash, Ord, PartialEq, PartialOrd; <CS::Group as Group>::Scalar)]
6867
#[cfg_attr(
6968
feature = "serde",
@@ -83,8 +82,7 @@ where
8382

8483
/// A client which engages with a [VerifiableServer] in verifiable mode, meaning
8584
/// that the OPRF outputs can be checked against a server public key.
86-
#[derive(DeriveWhere)]
87-
#[derive_where(Clone, Zeroize(drop))]
85+
#[derive_where(Clone, ZeroizeOnDrop)]
8886
#[derive_where(Debug, Eq, Hash, Ord, PartialEq, PartialOrd; <CS::Group as Group>::Scalar, <CS::Group as Group>::Elem)]
8987
#[cfg_attr(
9088
feature = "serde",
@@ -107,8 +105,7 @@ where
107105

108106
/// A server which engages with a [NonVerifiableClient] in base mode, meaning
109107
/// that the OPRF outputs are not verifiable.
110-
#[derive(DeriveWhere)]
111-
#[derive_where(Clone, Zeroize(drop))]
108+
#[derive_where(Clone, ZeroizeOnDrop)]
112109
#[derive_where(Debug, Eq, Hash, Ord, PartialEq, PartialOrd; <CS::Group as Group>::Scalar)]
113110
#[cfg_attr(
114111
feature = "serde",
@@ -128,8 +125,7 @@ where
128125

129126
/// A server which engages with a [VerifiableClient] in verifiable mode, meaning
130127
/// that the OPRF outputs can be checked against a server public key.
131-
#[derive(DeriveWhere)]
132-
#[derive_where(Clone, Zeroize(drop))]
128+
#[derive_where(Clone, ZeroizeOnDrop)]
133129
#[derive_where(Debug, Eq, Hash, Ord, PartialEq, PartialOrd; <CS::Group as Group>::Scalar, <CS::Group as Group>::Elem)]
134130
#[cfg_attr(
135131
feature = "serde",
@@ -152,8 +148,7 @@ where
152148

153149
/// A proof produced by a [VerifiableServer] that the OPRF output matches
154150
/// against a server public key.
155-
#[derive(DeriveWhere)]
156-
#[derive_where(Clone, Zeroize(drop))]
151+
#[derive_where(Clone, ZeroizeOnDrop)]
157152
#[derive_where(Debug, Eq, Hash, Ord, PartialEq, PartialOrd; <CS::Group as Group>::Scalar)]
158153
#[cfg_attr(
159154
feature = "serde",
@@ -174,8 +169,7 @@ where
174169

175170
/// The first client message sent from a client (either verifiable or not) to a
176171
/// server (either verifiable or not).
177-
#[derive(DeriveWhere)]
178-
#[derive_where(Clone, Zeroize(drop))]
172+
#[derive_where(Clone, ZeroizeOnDrop)]
179173
#[derive_where(Debug, Eq, Hash, Ord, PartialEq, PartialOrd; <CS::Group as Group>::Elem)]
180174
#[cfg_attr(
181175
feature = "serde",
@@ -192,8 +186,7 @@ where
192186

193187
/// The server's response to the [BlindedElement] message from a client (either
194188
/// verifiable or not) to a server (either verifiable or not).
195-
#[derive(DeriveWhere)]
196-
#[derive_where(Clone, Zeroize(drop))]
189+
#[derive_where(Clone, ZeroizeOnDrop)]
197190
#[derive_where(Debug, Eq, Hash, Ord, PartialEq, PartialOrd; <CS::Group as Group>::Elem)]
198191
#[cfg_attr(
199192
feature = "serde",
@@ -712,8 +705,8 @@ where
712705
IsLess<U256> + IsLessOrEqual<<CS::Hash as BlockSizeUser>::BlockSize>;
713706

714707
/// Contains the prepared `t` by a verifiable server batch evaluate preparation.
715-
#[derive(DeriveWhere)]
716-
#[derive_where(Zeroize(drop))]
708+
#[derive_where(Clone, ZeroizeOnDrop)]
709+
#[derive_where(Debug, Eq, Hash, Ord, PartialEq, PartialOrd; <CS::Group as Group>::Scalar)]
717710
pub struct PreparedTscalar<CS: CipherSuite>(<CS::Group as Group>::Scalar)
718711
where
719712
<CS::Hash as OutputSizeUser>::OutputSize:
@@ -1212,13 +1205,13 @@ where
12121205
#[cfg(test)]
12131206
mod tests {
12141207
use core::ops::Add;
1208+
use core::ptr;
12151209

12161210
use ::alloc::vec;
12171211
use ::alloc::vec::Vec;
12181212
use generic_array::typenum::Sum;
12191213
use generic_array::ArrayLength;
12201214
use rand::rngs::OsRng;
1221-
use zeroize::Zeroize;
12221215

12231216
use super::*;
12241217
use crate::Group;
@@ -1474,11 +1467,11 @@ mod tests {
14741467
let client_blind_result = NonVerifiableClient::<CS>::blind(input, &mut rng).unwrap();
14751468

14761469
let mut state = client_blind_result.state;
1477-
Zeroize::zeroize(&mut state);
1470+
unsafe { ptr::drop_in_place(&mut state) };
14781471
assert!(state.serialize().iter().all(|&x| x == 0));
14791472

14801473
let mut message = client_blind_result.message;
1481-
Zeroize::zeroize(&mut message);
1474+
unsafe { ptr::drop_in_place(&mut message) };
14821475
assert!(message.serialize().iter().all(|&x| x == 0));
14831476
}
14841477

@@ -1494,11 +1487,11 @@ mod tests {
14941487
let client_blind_result = VerifiableClient::<CS>::blind(input, &mut rng).unwrap();
14951488

14961489
let mut state = client_blind_result.state;
1497-
Zeroize::zeroize(&mut state);
1490+
unsafe { ptr::drop_in_place(&mut state) };
14981491
assert!(state.serialize().iter().all(|&x| x == 0));
14991492

15001493
let mut message = client_blind_result.message;
1501-
Zeroize::zeroize(&mut message);
1494+
unsafe { ptr::drop_in_place(&mut message) };
15021495
assert!(message.serialize().iter().all(|&x| x == 0));
15031496
}
15041497

@@ -1517,11 +1510,11 @@ mod tests {
15171510
.unwrap();
15181511

15191512
let mut state = server;
1520-
Zeroize::zeroize(&mut state);
1513+
unsafe { ptr::drop_in_place(&mut state) };
15211514
assert!(state.serialize().iter().all(|&x| x == 0));
15221515

15231516
let mut message = server_result.message;
1524-
Zeroize::zeroize(&mut message);
1517+
unsafe { ptr::drop_in_place(&mut message) };
15251518
assert!(message.serialize().iter().all(|&x| x == 0));
15261519
}
15271520

@@ -1544,15 +1537,15 @@ mod tests {
15441537
.unwrap();
15451538

15461539
let mut state = server;
1547-
Zeroize::zeroize(&mut state);
1540+
unsafe { ptr::drop_in_place(&mut state) };
15481541
assert!(state.serialize().iter().all(|&x| x == 0));
15491542

15501543
let mut message = server_result.message;
1551-
Zeroize::zeroize(&mut message);
1544+
unsafe { ptr::drop_in_place(&mut message) };
15521545
assert!(message.serialize().iter().all(|&x| x == 0));
15531546

15541547
let mut proof = server_result.proof;
1555-
Zeroize::zeroize(&mut proof);
1548+
unsafe { ptr::drop_in_place(&mut proof) };
15561549
assert!(proof.serialize().iter().all(|&x| x == 0));
15571550
}
15581551

0 commit comments

Comments
 (0)