14
14
// You should have received a copy of the GNU General Public License
15
15
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
16
16
17
- use rcrypto :: scrypt:: { scrypt, ScryptParams } ;
17
+ use scrypt:: { scrypt, ScryptParams } ;
18
18
19
19
use crate :: error:: ScryptError ;
20
20
use crate :: { Password , KEY_LENGTH , KEY_LENGTH_AES } ;
@@ -32,9 +32,43 @@ pub fn derive_key(pass: &Password, salt: &[u8; 32], n: u32, p: u32, r: u32) -> R
32
32
}
33
33
34
34
let mut derived_key = vec ! [ 0u8 ; KEY_LENGTH ] ;
35
- let scrypt_params = ScryptParams :: new ( log_n, r, p) ;
36
- scrypt ( pass. as_bytes ( ) , salt, & scrypt_params, & mut derived_key) ;
35
+ let scrypt_params = ScryptParams :: new ( log_n, r, p) ? ;
36
+ scrypt ( pass. as_bytes ( ) , salt, & scrypt_params, & mut derived_key) ? ;
37
37
let derived_right_bits = & derived_key[ 0 ..KEY_LENGTH_AES ] ;
38
38
let derived_left_bits = & derived_key[ KEY_LENGTH_AES ..KEY_LENGTH ] ;
39
39
Ok ( ( derived_right_bits. to_vec ( ) , derived_left_bits. to_vec ( ) ) )
40
40
}
41
+
42
+ #[ cfg( test) ]
43
+ mod tests {
44
+ use super :: * ;
45
+ use crate :: password:: Password ;
46
+
47
+ #[ test]
48
+ fn scrypt_test ( ) {
49
+ let mut password = Password ( "rust-crypto-codechain" ) ;
50
+ let mut salt = [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ] ;
51
+ let mut n: u32 = 8 ;
52
+ let mut p: u32 = 16 ;
53
+ let mut r: u32 = 8 ;
54
+
55
+ let mut result = derive_key ( & password, & salt, n, p, r) . unwrap ( ) ;
56
+ let mut right_bits = [ 229 , 222 , 150 , 129 , 167 , 152 , 151 , 149 , 110 , 135 , 118 , 252 , 139 , 12 , 227 , 29 ] ;
57
+ let mut left_bits = [ 111 , 69 , 216 , 187 , 101 , 33 , 114 , 185 , 126 , 184 , 57 , 98 , 243 , 60 , 174 , 249 ] ;
58
+ assert_eq ! ( & result. 0 [ ..] , right_bits) ;
59
+ assert_eq ! ( & result. 1 [ ..] , left_bits) ;
60
+
61
+
62
+ password = Password ( "Codechain and Foundry" ) ;
63
+ salt = [ 0 ; 32 ] ;
64
+ n = 16 ;
65
+ p = 1 ;
66
+ r = 1 ;
67
+
68
+ result = derive_key ( & password, & salt, n, p, r) . unwrap ( ) ;
69
+ right_bits = [ 144 , 79 , 151 , 99 , 185 , 187 , 191 , 74 , 135 , 222 , 178 , 102 , 32 , 179 , 194 , 170 ] ;
70
+ left_bits = [ 179 , 96 , 63 , 181 , 115 , 192 , 159 , 237 , 20 , 181 , 18 , 253 , 164 , 77 , 199 , 136 ] ;
71
+ assert_eq ! ( & result. 0 [ ..] , right_bits) ;
72
+ assert_eq ! ( & result. 1 [ ..] , left_bits) ;
73
+ }
74
+ }
0 commit comments