diff options
author | Andreas Grois <andi@grois.info> | 2022-10-11 23:31:21 +0200 |
---|---|---|
committer | Andreas Grois <andi@grois.info> | 2022-10-11 23:31:21 +0200 |
commit | 3bfb55ece2f70fc9b1969a2ec9c55f7a00358b90 (patch) | |
tree | 52d952ef77eaaf23598f51d59bfbf1f1b559ca04 /tests | |
parent | e5e3f40059239cba68d0ed8dd3c958545c80fbea (diff) |
Refactor base_conversion. Fix hmac byte bug.
Moved the basis conversion into a submodule, to ease the upcoming
rewrite.
Add a couple of new integration tests.
Fix a bug caused by misreading the PasswordMaker Pro HMAC code.
Diffstat (limited to 'tests')
-rw-r--r-- | tests/password_generation.rs | 99 |
1 files changed, 98 insertions, 1 deletions
diff --git a/tests/password_generation.rs b/tests/password_generation.rs index 45c6afa..a8618a2 100644 --- a/tests/password_generation.rs +++ b/tests/password_generation.rs @@ -1,4 +1,4 @@ -use passwordmaker_rs::{PasswordMaker, Hasher, HasherList, HashAlgorithm}; +use passwordmaker_rs::{PasswordMaker, Hasher, HasherList, HashAlgorithm, LeetLevel}; use digest::Digest; use md4; use md5; @@ -73,4 +73,101 @@ fn default_settings() { ).unwrap(); let result = pwm.generate(".abcdefghij".to_owned(), "1".to_owned()).unwrap(); assert_eq!(result, "J3>'1F\"/"); +} + +#[test] +fn v06_compatibility_leading_zeros() { + let pwm = Pwm::new( + HashAlgorithm::Md5Version06, + passwordmaker_rs::UseLeetWhenGenerating::NotAtAll, + "whatevr", + "", + "", + 8, + "", + "" + ).unwrap(); + let result = pwm.generate("01".to_owned(), "a".to_owned()).unwrap(); + assert_eq!(result, "00d2a735"); +} + +#[test] +fn regular_md5_no_leading_zeros() { + let pwm = Pwm::new( + HashAlgorithm::Md5, + passwordmaker_rs::UseLeetWhenGenerating::NotAtAll, + "0123456789abcdef", + "", + "", + 8, + "", + "" + ).unwrap(); + let result = pwm.generate("01".to_owned(), "a".to_owned()).unwrap(); + assert_eq!(result, "d2a73551"); +} + +/// Tests compatibility with an edge case in the l33t generation of PasswordMaker Pro JavaScript Edition: Word-Final-Sigma. +#[test] +fn word_final_sigma_post_leet() { + let pwm = Pwm::new( + HashAlgorithm::Md4, + passwordmaker_rs::UseLeetWhenGenerating::After { level: LeetLevel::One }, + "ΣΔΠΖ", + "", + "", + 64, + "", + "" + ).unwrap(); + let result = pwm.generate("123456".to_owned(), "password".to_owned()).unwrap(); + assert_eq!(result, "ζδζσσπσζδδσδπζδδδπσπζπζδδζζππσζσσζδπδσζπζππδσπσζζπσζσδπζσζπδσςπδ"); //mind the lunate sigma at character position 61. +} + +#[test] +fn hmac_with_upper_bytes() { + let pwm = Pwm::new( + HashAlgorithm::HmacRipemd160, + passwordmaker_rs::UseLeetWhenGenerating::NotAtAll, + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789`~!@#$%^&*()_-+={}|[]\\:\";'<>?,./", + "", + "", + 41, + "", + "" + ).unwrap(); + let result = pwm.generate("€äß".to_owned(), "password".to_owned()).unwrap(); + assert_eq!(result, "CX'!aI7J+\\.x?:ua'vtaj~c_PBbfATer1tstX_n<}"); +} + +#[test] +fn v06_yeet_bytes() { + let pwm = Pwm::new( + HashAlgorithm::Md5Version06, + passwordmaker_rs::UseLeetWhenGenerating::NotAtAll, + "notused", + "", + "", + 47, + "", + "" + ).unwrap(); + let result = pwm.generate("€äß".to_owned(), "password".to_owned()).unwrap(); + assert_eq!(result, "ea552be82dc75c12e6e9d9f30e643e63eeba34536077ce3"); +} + +#[test] +fn v06_yeet_bytes_hmac() { + let pwm = Pwm::new( + HashAlgorithm::HmacMd5Version06, + passwordmaker_rs::UseLeetWhenGenerating::NotAtAll, + "notused", + "", + "", + 47, + "", + "" + ).unwrap(); + let result = pwm.generate("€äß".to_owned(), "password".to_owned()).unwrap(); + assert_eq!(result, "28e1392052364d34c7e42e2711ccdd62c67a0a30dbf568a"); }
\ No newline at end of file |