Skip to content

Commit 7730690

Browse files
SeungMin Leesgkim126
authored andcommitted
Replace crates related to scrypt to other crates
1 parent fc5b5dd commit 7730690

File tree

4 files changed

+57
-5
lines changed

4 files changed

+57
-5
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ edition = "2018"
77
[dependencies]
88
ring = "0.14.6"
99
quick-error = "1.2"
10-
rust-crypto = "0.2.36"
1110
primitives = { git = "https://github.com/CodeChain-io/rust-codechain-primitives.git", version = "0.4" }
1211
sha-1 = "0.8.2"
1312
sha2 = "0.8.1"
@@ -19,6 +18,7 @@ block-modes = "0.3.3"
1918
aes = "0.3.2"
2019
ctr = "0.3.2"
2120
hex = "0.4.0"
21+
scrypt = { version = "0.2", default-features = false }
2222

2323
[dev-dependencies]
2424
rand = "0.6.1"

src/error.rs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,18 @@ quick_error! {
4242
InvalidP {
4343
display("Invalid p argument of the scrypt encryption")
4444
}
45+
InvalidOutputLen {
46+
display("Invalid length of output")
47+
}
48+
InvalidParams {
49+
display("Invalid parameters")
50+
}
4551
}
4652
}
4753

4854
#[allow(deprecated)]
4955
mod errors {
56+
use crate::error::ScryptError;
5057
use ring;
5158

5259
quick_error! {
@@ -78,5 +85,17 @@ mod errors {
7885
SymmError(PrivSymmErr::RustCrypto(e))
7986
}
8087
}
88+
89+
impl From<scrypt::errors::InvalidOutputLen> for ScryptError {
90+
fn from(_e: scrypt::errors::InvalidOutputLen) -> ScryptError {
91+
ScryptError::InvalidOutputLen
92+
}
93+
}
94+
95+
impl From<scrypt::errors::InvalidParams> for ScryptError {
96+
fn from(_e: scrypt::errors::InvalidParams) -> ScryptError {
97+
ScryptError::InvalidParams
98+
}
99+
}
81100
}
82101
pub use self::errors::SymmError;

src/lib.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
3232

3333

34-
extern crate crypto as rcrypto;
3534
extern crate primitives;
3635
#[macro_use]
3736
extern crate quick_error;

src/scrypt.rs

Lines changed: 37 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
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

1919
use crate::error::ScryptError;
2020
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
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

Comments
 (0)