Skip to content

Commit 1cdb4d7

Browse files
authored
Bump password-hash dependency to v0.3.0-pre.1 (#209)
1 parent 73353a5 commit 1cdb4d7

File tree

9 files changed

+58
-37
lines changed

9 files changed

+58
-37
lines changed

Cargo.lock

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

argon2/Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,13 @@ readme = "README.md"
1616

1717
[dependencies]
1818
blake2 = { version = "0.9", default-features = false }
19-
password-hash = { version = "0.2", optional = true }
19+
password-hash = { version = "=0.3.0-pre.1", optional = true }
2020
rayon = { version = "1", optional = true }
2121
zeroize = { version = ">=1, <1.4", optional = true }
2222

2323
[dev-dependencies]
2424
hex-literal = "0.3"
25-
password-hash = { version = "0.2", features = ["rand_core"] }
25+
password-hash = { version = "=0.3.0-pre.1", features = ["rand_core"] }
2626
rand_core = { version = "0.6", features = ["std"] }
2727

2828
[features]

argon2/src/error.rs

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22
33
use core::fmt;
44

5+
#[cfg(feature = "password-hash")]
6+
use password_hash::errors::InvalidValue;
7+
58
/// Result with argon2's [`Error`] type.
69
pub type Result<T> = core::result::Result<T, Error>;
710

@@ -86,21 +89,23 @@ impl fmt::Display for Error {
8689
impl From<Error> for password_hash::Error {
8790
fn from(err: Error) -> password_hash::Error {
8891
match err {
89-
Error::AdTooLong => password_hash::Error::ParamValueInvalid,
92+
Error::AdTooLong => password_hash::Error::ParamValueInvalid(InvalidValue::TooLong),
9093
Error::AlgorithmInvalid => password_hash::Error::Algorithm,
91-
Error::LanesTooFew => password_hash::Error::ParamValueInvalid,
92-
Error::LanesTooMany => password_hash::Error::ParamValueInvalid,
93-
Error::MemoryTooLittle => password_hash::Error::ParamValueInvalid,
94-
Error::MemoryTooMuch => password_hash::Error::ParamValueInvalid,
94+
Error::LanesTooFew => password_hash::Error::ParamValueInvalid(InvalidValue::TooShort),
95+
Error::LanesTooMany => password_hash::Error::ParamValueInvalid(InvalidValue::TooLong),
96+
Error::MemoryTooLittle => {
97+
password_hash::Error::ParamValueInvalid(InvalidValue::TooShort)
98+
}
99+
Error::MemoryTooMuch => password_hash::Error::ParamValueInvalid(InvalidValue::TooLong),
95100
Error::PwdTooLong => password_hash::Error::Password,
96101
Error::OutputTooShort => password_hash::Error::OutputTooShort,
97102
Error::OutputTooLong => password_hash::Error::OutputTooLong,
98-
Error::SaltTooShort => password_hash::Error::SaltTooShort,
99-
Error::SaltTooLong => password_hash::Error::SaltTooLong,
100-
Error::SecretTooLong => password_hash::Error::ParamValueInvalid,
101-
Error::ThreadsTooFew => password_hash::Error::ParamValueInvalid,
102-
Error::ThreadsTooMany => password_hash::Error::ParamValueInvalid,
103-
Error::TimeTooSmall => password_hash::Error::ParamValueInvalid,
103+
Error::SaltTooShort => password_hash::Error::SaltInvalid(InvalidValue::TooShort),
104+
Error::SaltTooLong => password_hash::Error::SaltInvalid(InvalidValue::TooLong),
105+
Error::SecretTooLong => password_hash::Error::ParamValueInvalid(InvalidValue::TooLong),
106+
Error::ThreadsTooFew => password_hash::Error::ParamValueInvalid(InvalidValue::TooShort),
107+
Error::ThreadsTooMany => password_hash::Error::ParamValueInvalid(InvalidValue::TooLong),
108+
Error::TimeTooSmall => password_hash::Error::ParamValueInvalid(InvalidValue::TooShort),
104109
Error::VersionInvalid => password_hash::Error::Version,
105110
}
106111
}

argon2/src/lib.rs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -446,8 +446,7 @@ impl PasswordHasher for Argon2<'_> {
446446
params.m_cost,
447447
params.p_cost,
448448
params.version,
449-
)
450-
.map_err(|_| password_hash::Error::ParamValueInvalid)?;
449+
)?;
451450

452451
// TODO(tarcieri): pass these via `Params` when `Argon::new` accepts `Params`
453452
hasher.algorithm = Some(algorithm);
@@ -500,7 +499,12 @@ mod tests {
500499
let salt = Salt::new("somesalt").unwrap();
501500

502501
let res = argon2.hash_password(EXAMPLE_PASSWORD, None, Params::default(), salt);
503-
assert_eq!(res, Err(password_hash::Error::SaltTooShort));
502+
assert_eq!(
503+
res,
504+
Err(password_hash::Error::SaltInvalid(
505+
password_hash::errors::InvalidValue::TooShort
506+
))
507+
);
504508
}
505509

506510
#[test]

pbkdf2/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ crypto-mac = "0.11"
1717
rayon = { version = "1", optional = true }
1818
base64ct = { version = "1", default-features = false, optional = true }
1919
hmac = { version = "0.11", default-features = false, optional = true }
20-
password-hash = { version = "0.2", default-features = false, optional = true, features = ["rand_core"] }
20+
password-hash = { version = "=0.3.0-pre.1", default-features = false, optional = true, features = ["rand_core"] }
2121
sha1 = { version = "0.9", package = "sha-1", default-features = false, optional = true }
2222
sha2 = { version = "0.9", default-features = false, optional = true }
2323

pbkdf2/src/simple.rs

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,16 @@
22
33
use crate::pbkdf2;
44
use base64ct::{Base64, Encoding};
5+
use core::cmp::Ordering;
56
use core::{
67
convert::{TryFrom, TryInto},
78
fmt::{self, Display},
89
str::FromStr,
910
};
1011
use hmac::Hmac;
1112
use password_hash::{
12-
Error, Ident, McfHasher, Output, ParamsString, PasswordHash, PasswordHasher, Result, Salt,
13+
errors::InvalidValue, Error, Ident, McfHasher, Output, ParamsString, PasswordHash,
14+
PasswordHasher, Result, Salt,
1315
};
1416
use sha2::{Sha256, Sha512};
1517

@@ -188,7 +190,7 @@ impl<'a> TryFrom<&'a PasswordHash<'a>> for Params {
188190
value
189191
.decimal()?
190192
.try_into()
191-
.map_err(|_| Error::ParamValueInvalid)?,
193+
.map_err(|_| Error::ParamValueInvalid(InvalidValue::Malformed))?,
192194
)
193195
}
194196
_ => return Err(Error::ParamNameInvalid),
@@ -197,8 +199,12 @@ impl<'a> TryFrom<&'a PasswordHash<'a>> for Params {
197199

198200
if let Some(len) = output_length {
199201
if let Some(hash) = &hash.hash {
200-
if hash.len() != len {
201-
return Err(Error::ParamValueInvalid);
202+
match hash.len().cmp(&len) {
203+
Ordering::Less => return Err(Error::ParamValueInvalid(InvalidValue::TooShort)),
204+
Ordering::Greater => {
205+
return Err(Error::ParamValueInvalid(InvalidValue::TooLong))
206+
}
207+
Ordering::Equal => (),
202208
}
203209
}
204210

@@ -244,13 +250,13 @@ impl McfHasher for Pbkdf2 {
244250
let mut count_arr = [0u8; 4];
245251

246252
if Base64::decode(count, &mut count_arr)?.len() != 4 {
247-
return Err(Error::ParamValueInvalid);
253+
return Err(Error::ParamValueInvalid(InvalidValue::Malformed));
248254
}
249255

250256
let count = u32::from_be_bytes(count_arr);
251257
(count, salt, hash)
252258
}
253-
_ => return Err(Error::ParamValueInvalid),
259+
_ => return Err(Error::ParamValueInvalid(InvalidValue::Malformed)),
254260
};
255261

256262
let salt = Salt::new(b64_strip(salt))?;

scrypt/Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,13 @@ readme = "README.md"
1414
[dependencies]
1515
base64ct = { version = "1", default-features = false, features = ["alloc"], optional = true }
1616
hmac = "0.11"
17-
password-hash = { version = "0.2", default-features = false, features = ["rand_core"], optional = true }
17+
password-hash = { version = "=0.3.0-pre.1", default-features = false, features = ["rand_core"], optional = true }
1818
pbkdf2 = { version = "0.8", default-features = false, path = "../pbkdf2" }
1919
salsa20 = { version = "0.8", default-features = false, features = ["expose-core"] }
2020
sha2 = { version = "0.9", default-features = false }
2121

2222
[dev-dependencies]
23-
password-hash = { version = "0.2", features = ["rand_core"] }
23+
password-hash = { version = "=0.3.0-pre.1", features = ["rand_core"] }
2424
rand_core = { version = "0.6", features = ["std"] }
2525

2626
[features]

scrypt/src/params.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use crate::errors::InvalidParams;
55
#[cfg(feature = "simple")]
66
use {
77
core::convert::{TryFrom, TryInto},
8-
password_hash::{Error, ParamsString, PasswordHash},
8+
password_hash::{errors::InvalidValue, Error, ParamsString, PasswordHash},
99
};
1010

1111
const RECOMMENDED_LOG_N: u8 = 15;
@@ -138,15 +138,16 @@ impl<'a> TryFrom<&'a PasswordHash<'a>> for Params {
138138
log_n = value
139139
.decimal()?
140140
.try_into()
141-
.map_err(|_| Error::ParamValueInvalid)?
141+
.map_err(|_| Error::ParamValueInvalid(InvalidValue::Malformed))?
142142
}
143143
"r" => r = value.decimal()?,
144144
"p" => p = value.decimal()?,
145145
_ => return Err(password_hash::Error::ParamNameInvalid),
146146
}
147147
}
148148

149-
Params::new(log_n, r, p).map_err(|_| password_hash::Error::ParamValueInvalid)
149+
Params::new(log_n, r, p)
150+
.map_err(|_| password_hash::Error::ParamValueInvalid(InvalidValue::Malformed))
150151
}
151152
}
152153

scrypt/src/simple.rs

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,10 @@
33
use crate::{scrypt, Params};
44
use base64ct::{Base64, Encoding};
55
use core::convert::TryInto;
6-
use password_hash::{Error, Ident, McfHasher, Output, PasswordHash, PasswordHasher, Result, Salt};
6+
use password_hash::{
7+
errors::InvalidValue, Error, Ident, McfHasher, Output, PasswordHash, PasswordHasher, Result,
8+
Salt,
9+
};
710

811
/// Algorithm identifier
912
pub const ALG_ID: Ident = Ident::new("scrypt");
@@ -68,24 +71,26 @@ impl McfHasher for Scrypt {
6871
[Some(""), Some("rscrypt"), Some("0"), Some(p), Some(s), Some(h), Some(""), None] => {
6972
let pvec = Base64::decode_vec(p)?;
7073
if pvec.len() != 3 {
71-
return Err(Error::ParamValueInvalid);
74+
return Err(Error::ParamValueInvalid(InvalidValue::Malformed));
7275
}
7376
(pvec[0], pvec[1] as u32, pvec[2] as u32, s, h)
7477
}
7578
[Some(""), Some("rscrypt"), Some("1"), Some(p), Some(s), Some(h), Some(""), None] => {
7679
let pvec = Base64::decode_vec(p)?;
7780
if pvec.len() != 9 {
78-
return Err(Error::ParamValueInvalid);
81+
return Err(Error::ParamValueInvalid(InvalidValue::Malformed));
7982
}
8083
let log_n = pvec[0];
8184
let r = u32::from_le_bytes(pvec[1..5].try_into().unwrap());
8285
let p = u32::from_le_bytes(pvec[5..9].try_into().unwrap());
8386
(log_n, r, p, s, h)
8487
}
85-
_ => return Err(Error::ParamValueInvalid),
88+
_ => return Err(Error::ParamValueInvalid(InvalidValue::Malformed)),
8689
};
8790

88-
let params = Params::new(log_n, r, p).map_err(|_| Error::ParamValueInvalid)?;
91+
let params = Params::new(log_n, r, p)
92+
.map_err(|_| Error::ParamValueInvalid(InvalidValue::Malformed))?;
93+
8994
let salt = Salt::new(b64_strip(salt))?;
9095
let hash = Output::b64_decode(b64_strip(hash))?;
9196

0 commit comments

Comments
 (0)