-
Notifications
You must be signed in to change notification settings - Fork 8
/
fuzzy_tests.rs
105 lines (90 loc) · 3.04 KB
/
fuzzy_tests.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#[cfg(feature = "fuzzy_tests")]
mod fuzzy_tests {
use djangohashers::*;
use quickcheck::{quickcheck, TestResult};
#[cfg(feature = "with_argon2")]
use base64::engine::general_purpose;
#[cfg(feature = "with_argon2")]
use base64::engine::Engine as _;
fn check_algorithm(pwd: String, salt: String, algorithm: Algorithm) -> TestResult {
if !VALID_SALT_RE.is_match(&salt) {
return TestResult::discard();
}
TestResult::from_bool(check_password_tolerant(
&pwd,
&make_password_with_settings(&pwd, &salt, algorithm),
))
}
#[cfg(feature = "with_pbkdf2")]
quickcheck! {
fn test_fuzzy_pbkdf2(pwd: String, salt: String) -> TestResult {
check_algorithm(pwd, salt, Algorithm::PBKDF2)
}
}
#[cfg(feature = "with_pbkdf2")]
quickcheck! {
fn test_fuzzy_pbkdf2sha1(pwd: String, salt: String) -> TestResult {
check_algorithm(pwd, salt, Algorithm::PBKDF2SHA1)
}
}
#[cfg(feature = "with_argon2")]
quickcheck! {
fn test_fuzzy_argon2(pwd: String, salt: String) -> TestResult {
if salt.len() < 8 {
return TestResult::discard();
}
check_algorithm(pwd, general_purpose::URL_SAFE_NO_PAD.encode(salt.as_bytes()), Algorithm::Argon2)
}
}
#[cfg(feature = "with_bcrypt")]
quickcheck! {
fn test_fuzzy_bcryptsha256(pwd: String, salt: String) -> TestResult {
check_algorithm(pwd, salt, Algorithm::BCryptSHA256)
}
}
#[cfg(feature = "with_bcrypt")]
quickcheck! {
fn test_fuzzy_bcrypt(pwd: String, salt: String) -> TestResult {
if pwd.contains('\0') || pwd.len() >= 72 {
return TestResult::discard();
}
check_algorithm(pwd, salt, Algorithm::BCrypt)
}
}
#[cfg(feature = "with_legacy")]
quickcheck! {
fn test_fuzzy_sha1(pwd: String, salt: String) -> TestResult {
check_algorithm(pwd, salt, Algorithm::SHA1)
}
}
#[cfg(feature = "with_legacy")]
quickcheck! {
fn test_fuzzy_md5(pwd: String, salt: String) -> TestResult {
check_algorithm(pwd, salt, Algorithm::MD5)
}
}
#[cfg(feature = "with_legacy")]
quickcheck! {
fn test_fuzzy_unsaltedsha1(pwd: String, salt: String) -> TestResult {
check_algorithm(pwd, salt, Algorithm::UnsaltedSHA1)
}
}
#[cfg(feature = "with_legacy")]
quickcheck! {
fn test_fuzzy_unsaltedmd5(pwd: String, salt: String) -> TestResult {
check_algorithm(pwd, salt, Algorithm::UnsaltedMD5)
}
}
#[cfg(feature = "with_legacy")]
quickcheck! {
fn test_fuzzy_crypt(pwd: String, salt: String) -> TestResult {
check_algorithm(pwd, salt, Algorithm::Crypt)
}
}
#[cfg(feature = "with_scrypt")]
quickcheck! {
fn test_fuzzy_scrypt(pwd: String, salt: String) -> TestResult {
check_algorithm(pwd, salt, Algorithm::Scrypt)
}
}
}