1111use alloc:: vec:: Vec ;
1212use core:: iter:: { self , Map , Repeat , Zip } ;
1313
14- use derive_where:: DeriveWhere ;
14+ use derive_where:: derive_where ;
1515use digest:: core_api:: BlockSizeUser ;
1616use digest:: { Digest , Output , OutputSizeUser } ;
1717use 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" ,
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 ) ]
717710pub struct PreparedTscalar < CS : CipherSuite > ( <CS :: Group as Group >:: Scalar )
718711where
719712 <CS :: Hash as OutputSizeUser >:: OutputSize :
@@ -1212,13 +1205,13 @@ where
12121205#[ cfg( test) ]
12131206mod 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