aboutsummaryrefslogtreecommitdiffstats
path: root/librecrypt_hash.c
diff options
context:
space:
mode:
Diffstat (limited to 'librecrypt_hash.c')
-rw-r--r--librecrypt_hash.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/librecrypt_hash.c b/librecrypt_hash.c
index 18627d1..f62b03b 100644
--- a/librecrypt_hash.c
+++ b/librecrypt_hash.c
@@ -201,6 +201,9 @@ static const struct librecrypt_algorithm trunc_algo = {
#define TEST_HASH_ROT4_TRUNC "8j93l0@@"
#define TEST_HASH_ROT4_TRUNC6 "8j93l6lS"
#define TEST_HASH_TRUNC_TRUNC6 "4ycQhg00"
+#define WRONG_HASH_ROT4 "AAAAAAAAAAA#"
+#define WRONG_HASH_TRUNC "000000@@"
+#define WRONG_HASH_TRUNC6 "00000000"
#define SP4 " "
#define SP20 SP4 SP4 SP4 SP4 SP4
@@ -286,6 +289,16 @@ check(const char *phrase, const char *settings, const char *chain,
} while (0)
+#define CHECK_DIFF(PHRASE, CONF, HASHLEN, IS_DEFAULT_HASHLEN /* -1 if fixed */, HASH, DIFFHASH)\
+ do {\
+ size_t scratchsize = GET_SCRATCH_SIZE(HASHLEN);\
+ if (IS_DEFAULT_HASHLEN >= 0)\
+ check(PHRASE, CONF DIFFHASH, CONF "*" #HASHLEN ">" CONF DIFFHASH, HASH, scratchsize, ctx);\
+ if (IS_DEFAULT_HASHLEN)\
+ check(PHRASE, CONF DIFFHASH, CONF ">" CONF DIFFHASH, HASH, scratchsize, ctx);\
+ } while (0)
+
+
#define CHECK_BAD(ALGO)\
do {\
errno = 0;\
@@ -423,6 +436,18 @@ main(void)
CHECK(TEST_PHRASE, "$trunc$*6>$trunc$", 4, 1, TEST_HASH_TRUNC);
CHECK(TEST_PHRASE, "$trunc$*6>$trunc$", 6, 0, TEST_HASH_TRUNC6);
CHECK(TEST_PHRASE, "$rot4$>$rot4$", 8, -1, TEST_PHRASE64_ROT4);
+ CHECK_DIFF(TEST_PHRASE, "$trunc$", 4, 1, TEST_HASH_TRUNC, WRONG_HASH_TRUNC);
+ CHECK_DIFF(TEST_PHRASE, "$trunc$", 6, 0, TEST_HASH_TRUNC6, WRONG_HASH_TRUNC6);
+ CHECK_DIFF(TEST_PHRASE, "$rot4$", 8, -1, TEST_HASH_ROT4, WRONG_HASH_ROT4);
+ CHECK_DIFF(TEST_PHRASE, "$rot4$>$trunc$", 4, 1, TEST_HASH_ROT4_TRUNC, WRONG_HASH_TRUNC);
+ CHECK_DIFF(TEST_PHRASE, "$rot4$>$trunc$", 6, 0, TEST_HASH_ROT4_TRUNC6, WRONG_HASH_TRUNC6);
+ CHECK_DIFF(TEST_PHRASE, "$trunc$>$rot4$", 8, -1, TEST_HASH_TRUNC_ROT4, WRONG_HASH_ROT4);
+ CHECK_DIFF(TEST_PHRASE, "$trunc$*6>$rot4$", 8, -1, TEST_HASH_TRUNC6_ROT4, WRONG_HASH_ROT4);
+ CHECK_DIFF(TEST_PHRASE, "$trunc$>$trunc$", 4, 1, TEST_HASH_TRUNC, WRONG_HASH_TRUNC);
+ CHECK_DIFF(TEST_PHRASE, "$trunc$>$trunc$", 6, 0, TEST_HASH_TRUNC_TRUNC6, WRONG_HASH_TRUNC6);
+ CHECK_DIFF(TEST_PHRASE, "$trunc$*6>$trunc$", 4, 1, TEST_HASH_TRUNC, WRONG_HASH_TRUNC);
+ CHECK_DIFF(TEST_PHRASE, "$trunc$*6>$trunc$", 6, 0, TEST_HASH_TRUNC6, WRONG_HASH_TRUNC6);
+ CHECK_DIFF(TEST_PHRASE, "$rot4$>$rot4$", 8, -1, TEST_PHRASE64_ROT4, WRONG_HASH_ROT4);
#undef GET_SCRATCH_SIZE
librecrypt_free_context(ctx);