1414// You should have received a copy of the GNU General Public License
1515// along with Parity. If not, see <http://www.gnu.org/licenses/>.
1616
17- use rcrypto :: scrypt:: { scrypt, ScryptParams } ;
17+ use scrypt:: { scrypt, ScryptParams } ;
1818
1919use crate :: error:: ScryptError ;
2020use 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
3232 }
3333
3434 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) ? ;
3737 let derived_right_bits = & derived_key[ 0 ..KEY_LENGTH_AES ] ;
3838 let derived_left_bits = & derived_key[ KEY_LENGTH_AES ..KEY_LENGTH ] ;
3939 Ok ( ( derived_right_bits. to_vec ( ) , derived_left_bits. to_vec ( ) ) )
4040}
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