aboutsummaryrefslogtreecommitdiffstats
path: root/librecrypt_crypt.c
diff options
context:
space:
mode:
authorMattias Andrée <m@maandree.se>2026-09-23 20:16:23 +0200
committerMattias Andrée <m@maandree.se>2026-09-23 20:16:23 +0200
commita89353a992abfcf12606f065a9f6bec798c21bee (patch)
treedc244fb1a06a912a8158ecbd7826796b0266141a /librecrypt_crypt.c
parentm header file organisation improvement (diff)
downloadlibrecrypt-a89353a992abfcf12606f065a9f6bec798c21bee.tar.gz
librecrypt-a89353a992abfcf12606f065a9f6bec798c21bee.tar.bz2
librecrypt-a89353a992abfcf12606f065a9f6bec798c21bee.tar.xz
More testing
Signed-off-by: Mattias Andrée <m@maandree.se>
Diffstat (limited to '')
-rw-r--r--librecrypt_crypt.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/librecrypt_crypt.c b/librecrypt_crypt.c
index d837724..1879a54 100644
--- a/librecrypt_crypt.c
+++ b/librecrypt_crypt.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
@@ -290,6 +293,21 @@ check(const char *phrase, const char *settings, const char *chain, size_t 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,\
+ sizeof(CONF "*" #HASHLEN ">" CONF) - 1u, CONF HASH,\
+ sizeof(CONF) - 1u, scratchsize, ctx);\
+ }\
+ if (IS_DEFAULT_HASHLEN) {\
+ check(PHRASE, CONF DIFFHASH, CONF ">" CONF DIFFHASH, sizeof(CONF ">" CONF) - 1u,\
+ CONF HASH, sizeof(CONF) - 1u, scratchsize, ctx);\
+ }\
+ } while (0)
+
+
#define CHECK_BAD(ALGO)\
do {\
errno = 0;\
@@ -482,6 +500,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);