@@ -15,9 +15,9 @@ use alloc::boxed::Box;
15
15
use core:: convert:: TryInto ;
16
16
17
17
use core:: ops:: { Deref , DerefMut } ;
18
- use digest:: { core_api:: BlockSizeUser , typenum:: U64 , Digest } ;
18
+ use digest:: { Digest , core_api:: BlockSizeUser , typenum:: U64 } ;
19
19
use hmac:: { Mac , SimpleHmac } ;
20
- use zeroize:: { Zeroize , Zeroizing } ;
20
+ use zeroize:: { Zeroize , ZeroizeOnDrop , Zeroizing } ;
21
21
22
22
use curve25519_dalek:: {
23
23
edwards:: { CompressedEdwardsY , EdwardsPoint } ,
@@ -115,8 +115,7 @@ impl<D: Digest<OutputSize = U64> + BlockSizeUser> Xpub<D> {
115
115
}
116
116
}
117
117
118
- #[ derive( Zeroize , Clone , Debug , PartialEq ) ]
119
- #[ zeroize( drop) ]
118
+ #[ derive( Zeroize , ZeroizeOnDrop , Clone , Debug , PartialEq ) ]
120
119
struct XprvData {
121
120
// An xprv consists of an expanded Ed25519 secret key and a chain
122
121
// code.
@@ -134,7 +133,7 @@ struct XprvData {
134
133
}
135
134
136
135
/// The `D` digest type param must implement SHA512. Use `sha2::Sha512` if in doubt.
137
- #[ derive( Clone , Debug ) ]
136
+ #[ derive( Zeroize , ZeroizeOnDrop , Clone , Debug ) ]
138
137
pub struct Xprv < D : Digest < OutputSize = U64 > + BlockSizeUser + Clone > (
139
138
// The data is boxed so that moving an `Xprv` does not accidentally
140
139
// leave copies of the data on the stack.
@@ -371,18 +370,24 @@ mod tests {
371
370
372
371
#[ test]
373
372
fn xpub_hard_derivation_fails ( ) {
374
- assert ! ( Xprv :: <Sha512 >:: from_normalize( KEY , CHAIN_CODE )
375
- . public( )
376
- . derive( HARDENED_OFFSET - 1 )
377
- . is_ok( ) ) ;
378
- assert ! ( Xprv :: <Sha512 >:: from_normalize( KEY , CHAIN_CODE )
379
- . public( )
380
- . derive( HARDENED_OFFSET )
381
- . is_err( ) ) ;
382
- assert ! ( Xprv :: <Sha512 >:: from_normalize( KEY , CHAIN_CODE )
383
- . public( )
384
- . derive( u32 :: MAX )
385
- . is_err( ) ) ;
373
+ assert ! (
374
+ Xprv :: <Sha512 >:: from_normalize( KEY , CHAIN_CODE )
375
+ . public( )
376
+ . derive( HARDENED_OFFSET - 1 )
377
+ . is_ok( )
378
+ ) ;
379
+ assert ! (
380
+ Xprv :: <Sha512 >:: from_normalize( KEY , CHAIN_CODE )
381
+ . public( )
382
+ . derive( HARDENED_OFFSET )
383
+ . is_err( )
384
+ ) ;
385
+ assert ! (
386
+ Xprv :: <Sha512 >:: from_normalize( KEY , CHAIN_CODE )
387
+ . public( )
388
+ . derive( u32 :: MAX )
389
+ . is_err( )
390
+ ) ;
386
391
}
387
392
388
393
#[ test]
0 commit comments