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 ;
@@ -64,8 +64,7 @@ impl Mode {
6464
6565/// A client which engages with a [NonVerifiableServer] in base mode, meaning
6666/// that the OPRF outputs are not verifiable.
67- #[ derive( DeriveWhere ) ]
68- #[ derive_where( Clone , Zeroize ( drop) ) ]
67+ #[ derive_where( Clone , ZeroizeOnDrop ) ]
6968#[ derive_where( Debug , Eq , Hash , Ord , PartialEq , PartialOrd ; <CS :: Group as Group >:: Scalar ) ]
7069#[ cfg_attr(
7170 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" ,
@@ -104,8 +102,7 @@ where
104102
105103/// A server which engages with a [NonVerifiableClient] in base mode, meaning
106104/// that the OPRF outputs are not verifiable.
107- #[ derive( DeriveWhere ) ]
108- #[ derive_where( Clone , Zeroize ( drop) ) ]
105+ #[ derive_where( Clone , ZeroizeOnDrop ) ]
109106#[ derive_where( Debug , Eq , Hash , Ord , PartialEq , PartialOrd ; <CS :: Group as Group >:: Scalar ) ]
110107#[ cfg_attr(
111108 feature = "serde" ,
@@ -123,8 +120,7 @@ where
123120
124121/// A server which engages with a [VerifiableClient] in verifiable mode, meaning
125122/// that the OPRF outputs can be checked against a server public key.
126- #[ derive( DeriveWhere ) ]
127- #[ derive_where( Clone , Zeroize ( drop) ) ]
123+ #[ derive_where( Clone , ZeroizeOnDrop ) ]
128124#[ derive_where( Debug , Eq , Hash , Ord , PartialEq , PartialOrd ; <CS :: Group as Group >:: Scalar , <CS :: Group as Group >:: Elem ) ]
129125#[ cfg_attr(
130126 feature = "serde" ,
@@ -144,8 +140,7 @@ where
144140
145141/// A proof produced by a [VerifiableServer] that the OPRF output matches
146142/// against a server public key.
147- #[ derive( DeriveWhere ) ]
148- #[ derive_where( Clone , Zeroize ( drop) ) ]
143+ #[ derive_where( Clone , ZeroizeOnDrop ) ]
149144#[ derive_where( Debug , Eq , Hash , Ord , PartialEq , PartialOrd ; <CS :: Group as Group >:: Scalar ) ]
150145#[ cfg_attr(
151146 feature = "serde" ,
@@ -165,8 +160,7 @@ where
165160
166161/// The first client message sent from a client (either verifiable or not) to a
167162/// server (either verifiable or not).
168- #[ derive( DeriveWhere ) ]
169- #[ derive_where( Clone , Zeroize ( drop) ) ]
163+ #[ derive_where( Clone , ZeroizeOnDrop ) ]
170164#[ derive_where( Debug , Eq , Hash , Ord , PartialEq , PartialOrd ; <CS :: Group as Group >:: Elem ) ]
171165#[ cfg_attr(
172166 feature = "serde" ,
@@ -183,8 +177,7 @@ where
183177
184178/// The server's response to the [BlindedElement] message from a client (either
185179/// verifiable or not) to a server (either verifiable or not).
186- #[ derive( DeriveWhere ) ]
187- #[ derive_where( Clone , Zeroize ( drop) ) ]
180+ #[ derive_where( Clone , ZeroizeOnDrop ) ]
188181#[ derive_where( Debug , Eq , Hash , Ord , PartialEq , PartialOrd ; <CS :: Group as Group >:: Elem ) ]
189182#[ cfg_attr(
190183 feature = "serde" ,
@@ -768,7 +761,6 @@ where
768761/////////////////////////
769762
770763/// Contains the fields that are returned by a non-verifiable client blind
771- #[ derive( DeriveWhere ) ]
772764#[ derive_where( Debug ; <CS :: Group as Group >:: Scalar , <CS :: Group as Group >:: Elem ) ]
773765pub struct NonVerifiableClientBlindResult < CS : CipherSuite >
774766where
@@ -782,7 +774,6 @@ where
782774}
783775
784776/// Contains the fields that are returned by a verifiable client blind
785- #[ derive( DeriveWhere ) ]
786777#[ derive_where( Debug ; <CS :: Group as Group >:: Scalar , <CS :: Group as Group >:: Elem ) ]
787778pub struct VerifiableClientBlindResult < CS : CipherSuite >
788779where
@@ -804,7 +795,6 @@ pub type VerifiableClientBatchFinalizeResult<'a, C, I, II, IC, IM> = FinalizeAft
804795> ;
805796
806797/// Contains the fields that are returned by a verifiable server evaluate
807- #[ derive( DeriveWhere ) ]
808798#[ derive_where( Debug ; <CS :: Group as Group >:: Scalar , <CS :: Group as Group >:: Elem ) ]
809799pub struct VerifiableServerEvaluateResult < CS : CipherSuite >
810800where
@@ -819,8 +809,7 @@ where
819809
820810/// Contains prepared [`EvaluationElement`]s by a verifiable server batch
821811/// evaluate preparation.
822- #[ derive( DeriveWhere ) ]
823- #[ derive_where( Clone , Zeroize ( drop) ) ]
812+ #[ derive_where( Clone , ZeroizeOnDrop ) ]
824813#[ derive_where( Debug , Eq , Hash , Ord , PartialEq , PartialOrd ; <CS :: Group as Group >:: Elem ) ]
825814#[ cfg_attr(
826815 feature = "serde" ,
@@ -833,8 +822,7 @@ where
833822 IsLess < U256 > + IsLessOrEqual < <CS :: Hash as BlockSizeUser >:: BlockSize > ;
834823
835824/// Contains the prepared `t` by a verifiable server batch evaluate preparation.
836- #[ derive( DeriveWhere ) ]
837- #[ derive_where( Clone , Zeroize ( drop) ) ]
825+ #[ derive_where( Clone , ZeroizeOnDrop ) ]
838826#[ derive_where( Debug , Eq , Hash , Ord , PartialEq , PartialOrd ; <CS :: Group as Group >:: Scalar ) ]
839827#[ cfg_attr(
840828 feature = "serde" ,
@@ -863,7 +851,6 @@ pub type VerifiableServerBatchEvaluatePreparedEvaluationElements<CS, I> = Map<
863851
864852/// Contains the fields that are returned by a verifiable server batch evaluate
865853/// preparation.
866- #[ derive( DeriveWhere ) ]
867854#[ derive_where( Debug ; I , <CS :: Group as Group >:: Scalar ) ]
868855pub struct VerifiableServerBatchEvaluatePrepareResult <
869856 ' a ,
@@ -889,7 +876,6 @@ pub type VerifiableServerBatchEvaluateFinishedMessages<'a, CS, I> = Map<
889876
890877/// Contains the fields that are returned by a verifiable server batch evaluate
891878/// finish.
892- #[ derive( DeriveWhere ) ]
893879#[ derive_where( Debug ; <& ' a I as core:: iter:: IntoIterator >:: IntoIter , <CS :: Group as Group >:: Scalar ) ]
894880pub struct VerifiableServerBatchEvaluateFinishResult < ' a , CS : ' a + CipherSuite , I >
895881where
@@ -904,7 +890,6 @@ where
904890}
905891
906892/// Contains the fields that are returned by a verifiable server batch evaluate
907- #[ derive( DeriveWhere ) ]
908893#[ derive_where( Debug ; <CS :: Group as Group >:: Scalar , <CS :: Group as Group >:: Elem ) ]
909894#[ cfg( feature = "alloc" ) ]
910895pub struct VerifiableServerBatchEvaluateResult < CS : CipherSuite >
@@ -1319,13 +1304,13 @@ where
13191304#[ cfg( test) ]
13201305mod tests {
13211306 use core:: ops:: Add ;
1307+ use core:: ptr;
13221308
13231309 use :: alloc:: vec;
13241310 use :: alloc:: vec:: Vec ;
13251311 use generic_array:: typenum:: Sum ;
13261312 use generic_array:: ArrayLength ;
13271313 use rand:: rngs:: OsRng ;
1328- use zeroize:: Zeroize ;
13291314
13301315 use super :: * ;
13311316 use crate :: Group ;
@@ -1579,11 +1564,11 @@ mod tests {
15791564 let client_blind_result = NonVerifiableClient :: < CS > :: blind ( input, & mut rng) . unwrap ( ) ;
15801565
15811566 let mut state = client_blind_result. state ;
1582- Zeroize :: zeroize ( & mut state) ;
1567+ unsafe { ptr :: drop_in_place ( & mut state) } ;
15831568 assert ! ( state. serialize( ) . iter( ) . all( |& x| x == 0 ) ) ;
15841569
15851570 let mut message = client_blind_result. message ;
1586- Zeroize :: zeroize ( & mut message) ;
1571+ unsafe { ptr :: drop_in_place ( & mut message) } ;
15871572 assert ! ( message. serialize( ) . iter( ) . all( |& x| x == 0 ) ) ;
15881573 }
15891574
@@ -1599,11 +1584,11 @@ mod tests {
15991584 let client_blind_result = VerifiableClient :: < CS > :: blind ( input, & mut rng) . unwrap ( ) ;
16001585
16011586 let mut state = client_blind_result. state ;
1602- Zeroize :: zeroize ( & mut state) ;
1587+ unsafe { ptr :: drop_in_place ( & mut state) } ;
16031588 assert ! ( state. serialize( ) . iter( ) . all( |& x| x == 0 ) ) ;
16041589
16051590 let mut message = client_blind_result. message ;
1606- Zeroize :: zeroize ( & mut message) ;
1591+ unsafe { ptr :: drop_in_place ( & mut message) } ;
16071592 assert ! ( message. serialize( ) . iter( ) . all( |& x| x == 0 ) ) ;
16081593 }
16091594
@@ -1617,16 +1602,15 @@ mod tests {
16171602 let mut rng = OsRng ;
16181603 let client_blind_result = NonVerifiableClient :: < CS > :: blind ( input, & mut rng) . unwrap ( ) ;
16191604 let server = NonVerifiableServer :: < CS > :: new ( & mut rng) ;
1620- let message = server
1605+ let mut message = server
16211606 . evaluate ( & client_blind_result. message , Some ( info) )
16221607 . unwrap ( ) ;
16231608
16241609 let mut state = server;
1625- Zeroize :: zeroize ( & mut state) ;
1610+ unsafe { ptr :: drop_in_place ( & mut state) } ;
16261611 assert ! ( state. serialize( ) . iter( ) . all( |& x| x == 0 ) ) ;
16271612
1628- let mut message = message;
1629- Zeroize :: zeroize ( & mut message) ;
1613+ unsafe { ptr:: drop_in_place ( & mut message) } ;
16301614 assert ! ( message. serialize( ) . iter( ) . all( |& x| x == 0 ) ) ;
16311615 }
16321616
@@ -1649,15 +1633,15 @@ mod tests {
16491633 . unwrap ( ) ;
16501634
16511635 let mut state = server;
1652- Zeroize :: zeroize ( & mut state) ;
1636+ unsafe { ptr :: drop_in_place ( & mut state) } ;
16531637 assert ! ( state. serialize( ) . iter( ) . all( |& x| x == 0 ) ) ;
16541638
16551639 let mut message = server_result. message ;
1656- Zeroize :: zeroize ( & mut message) ;
1640+ unsafe { ptr :: drop_in_place ( & mut message) } ;
16571641 assert ! ( message. serialize( ) . iter( ) . all( |& x| x == 0 ) ) ;
16581642
16591643 let mut proof = server_result. proof ;
1660- Zeroize :: zeroize ( & mut proof) ;
1644+ unsafe { ptr :: drop_in_place ( & mut proof) } ;
16611645 assert ! ( proof. serialize( ) . iter( ) . all( |& x| x == 0 ) ) ;
16621646 }
16631647
0 commit comments