aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMattias Andrée <m@maandree.se>2026-05-21 19:53:27 +0200
committerMattias Andrée <m@maandree.se>2026-05-21 19:53:27 +0200
commit90dc983cae70b17628dcf680c16a0093ce6102fe (patch)
treee955d436d60eaebd24d2567d7a3e5b3c7e524f8c
parentTest argon2 with pepper (diff)
downloadlibrecrypt-90dc983cae70b17628dcf680c16a0093ce6102fe.tar.gz
librecrypt-90dc983cae70b17628dcf680c16a0093ce6102fe.tar.bz2
librecrypt-90dc983cae70b17628dcf680c16a0093ce6102fe.tar.xz
Add more tests and fix a bug and and typo
Signed-off-by: Mattias Andrée <m@maandree.se>
-rw-r--r--librecrypt.h2
-rw-r--r--librecrypt_realise_salts.c101
-rw-r--r--librecrypt_set_custom_algorithms.c2
3 files changed, 86 insertions, 19 deletions
diff --git a/librecrypt.h b/librecrypt.h
index ebd2f10..fa01bb9 100644
--- a/librecrypt.h
+++ b/librecrypt.h
@@ -1331,7 +1331,7 @@ int librecrypt_set_pepper(LIBRECRYPT_CONTEXT *ctx, enum librecrypt_hash_algorith
* @param ctx The library configuration object
* @param algos The hash algorithms implementions to support
* in addition to those implemented by the library
- * @parma nalgos The number of elements in `algos`
+ * @param nalgos The number of elements in `algos`
*
* The caller is responsible for the lifetime of `algos`:
* deallocating it will deallocate it for `ctx` as it
diff --git a/librecrypt_realise_salts.c b/librecrypt_realise_salts.c
index b2580eb..e2853ca 100644
--- a/librecrypt_realise_salts.c
+++ b/librecrypt_realise_salts.c
@@ -128,7 +128,7 @@ librecrypt_realise_salts(char *restrict out_buffer, size_t size, const char *set
/* Write padding charaters */
right = MIN(right, size);
for (i = 0u; i < right; i++)
- out_buffer[right] = pad; /* TODO test with custom hash function */
+ out_buffer[i] = pad;
out_buffer = &out_buffer[right];
size -= right;
}
@@ -198,21 +198,48 @@ saltfail(void *out, size_t n, void *user)
}
+static unsigned
+dumdum_is_algorithm(const char *settings, size_t len)
+{
+ (void) settings;
+ (void) len;
+ return 1u;
+}
+
+
+static const char *const dumdum_elut =
+ "????????????????""????????????????""????????????????""????????????????"
+ "????????????????""????????????????""????????????????""????????????????"
+ "????????????????""????????????????""????????????????""????????????????"
+ "????????????????""????????????????""????????????????""????????????????";
+
+
+static struct librecrypt_algorithm dumdum = {
+ .is_algorithm = &dumdum_is_algorithm,
+ .encoding_lut = dumdum_elut,
+ .hash_size = 16,
+ .flexible_hash_size = 1
+};
+
+
int
main(void)
{
char buf[1024], buf2[1024], conf[128];
+ LIBRECRYPT_CONTEXT *ctx = NULL;
size_t i;
int r;
SET_UP_ALARM();
INIT_RESOURCE_TEST();
+start_over:
+
errno = 0;
- EXPECT(librecrypt_realise_salts(NULL, 0u, "$~no~such~algorithm~$", NULL, NULL, NULL) == -1);
+ EXPECT(librecrypt_realise_salts(NULL, 0u, "$~no~such~algorithm~$", NULL, NULL, ctx) == -1);
EXPECT(errno == ENOSYS);
- EXPECT(librecrypt_realise_salts(NULL, 0u, "", NULL, NULL, NULL) == 0);
+ EXPECT(librecrypt_realise_salts(NULL, 0u, "", NULL, NULL, ctx) == 0);
#if defined(SUPPORT_ARGON2ID)
# define ALGO "$argon2id$"
@@ -228,14 +255,14 @@ main(void)
# define CHECK(IN, OUT)\
do {\
- EXPECT(librecrypt_realise_salts(NULL, 0u, (IN), NULL, NULL, NULL) == (ssize_t)sizeof(OUT) - 1);\
- EXPECT(librecrypt_realise_salts(buf, 0u, (IN), NULL, NULL, NULL) == (ssize_t)sizeof(OUT) - 1);\
+ EXPECT(librecrypt_realise_salts(NULL, 0u, (IN), NULL, NULL, ctx) == (ssize_t)sizeof(OUT) - 1);\
+ EXPECT(librecrypt_realise_salts(buf, 0u, (IN), NULL, NULL, ctx) == (ssize_t)sizeof(OUT) - 1);\
memset(buf, 99, sizeof(buf));\
- EXPECT(librecrypt_realise_salts(buf, sizeof(buf), (IN), &saltgen, &saltbyte, NULL) == (ssize_t)sizeof(OUT) - 1);\
+ EXPECT(librecrypt_realise_salts(buf, sizeof(buf), (IN), &saltgen, &saltbyte, ctx) == (ssize_t)sizeof(OUT) - 1);\
EXPECT(!strcmp(buf, (OUT)));\
for (i = 0u; i < sizeof(OUT); i++) {\
memset(buf, 99, sizeof(buf));\
- EXPECT(librecrypt_realise_salts(buf, i + 1u, (IN), &saltgen, &saltbyte, NULL) == (ssize_t)sizeof(OUT) - 1);\
+ EXPECT(librecrypt_realise_salts(buf, i + 1u, (IN), &saltgen, &saltbyte, ctx) == (ssize_t)sizeof(OUT) - 1);\
EXPECT(!memcmp(buf, (OUT), i));\
EXPECT(!buf[i]);\
}\
@@ -266,44 +293,44 @@ main(void)
# undef CHECK
errno = 0;
- EXPECT(librecrypt_realise_salts(NULL, 0u, ALGO">$~no~such~algorithm~$", &saltgen, &saltbyte, NULL) == -1);
+ EXPECT(librecrypt_realise_salts(NULL, 0u, ALGO">$~no~such~algorithm~$", &saltgen, &saltbyte, ctx) == -1);
EXPECT(errno == ENOSYS);
errno = 0;
- EXPECT(librecrypt_realise_salts(NULL, 0u, "$~no~such~algorithm~$>"ALGO, &saltgen, &saltbyte, NULL) == -1);
+ EXPECT(librecrypt_realise_salts(NULL, 0u, "$~no~such~algorithm~$>"ALGO, &saltgen, &saltbyte, ctx) == -1);
EXPECT(errno == ENOSYS);
errno = 0;
- EXPECT(librecrypt_realise_salts(NULL, 0u, ALGO"*"LARGE"$", &saltgen, &saltbyte, NULL) == -1);
+ EXPECT(librecrypt_realise_salts(NULL, 0u, ALGO"*"LARGE"$", &saltgen, &saltbyte, ctx) == -1);
EXPECT(errno == ERANGE);
CANARY_FILL(buf);
- EXPECT(librecrypt_realise_salts(buf, sizeof(ALGO) - 1u, ALGO"*3$", &saltfail, NULL, NULL) == (ssize_t)sizeof(ALGO"$") - 1 + 4);
+ EXPECT(librecrypt_realise_salts(buf, sizeof(ALGO) - 1u, ALGO"*3$", &saltfail, NULL, ctx) == (ssize_t)sizeof(ALGO"$") - 1 + 4);
CANARY_CHECK(buf, sizeof(ALGO) - 1u);
errno = 0;
- EXPECT(librecrypt_realise_salts(buf, sizeof(buf), ALGO"*3$", &saltfail, NULL, NULL) == -1);
+ EXPECT(librecrypt_realise_salts(buf, sizeof(buf), ALGO"*3$", &saltfail, NULL, ctx) == -1);
EXPECT(errno == EDOM);
r = snprintf(conf, sizeof(conf), "%s*%zu$", ALGO, (size_t)SSIZE_MAX / 4u * 3u + 3u);
assert(r > 0 && (size_t)r < sizeof(conf));
errno = 0;
- EXPECT(librecrypt_realise_salts(NULL, 0u, conf, &saltgen, &saltbyte, NULL) == -1);
+ EXPECT(librecrypt_realise_salts(NULL, 0u, conf, &saltgen, &saltbyte, ctx) == -1);
EXPECT(errno == ERANGE);
r = snprintf(conf, sizeof(conf), "%s*%zu$", ALGO, (size_t)SSIZE_MAX / 4u * 3u);
assert(r > 0 && (size_t)r < sizeof(conf));
errno = 0;
- EXPECT(librecrypt_realise_salts(NULL, 0u, conf, &saltgen, &saltbyte, NULL) == -1);
+ EXPECT(librecrypt_realise_salts(NULL, 0u, conf, &saltgen, &saltbyte, ctx) == -1);
EXPECT(errno == ERANGE);
r = snprintf(conf, sizeof(conf), "%s*%zu$abcdef", ALGO, ((size_t)SSIZE_MAX - (sizeof(ALGO) - 1u)) / 4u * 3u);
assert(r > 0 && (size_t)r < sizeof(conf));
errno = 0;
- EXPECT(librecrypt_realise_salts(NULL, 0u, conf, &saltgen, &saltbyte, NULL) == -1);
+ EXPECT(librecrypt_realise_salts(NULL, 0u, conf, &saltgen, &saltbyte, ctx) == -1);
EXPECT(errno == ERANGE);
CANARY_FILL(buf);
CANARY_FILL(buf2);
- EXPECT(librecrypt_realise_salts(buf, sizeof(buf), ALGO"*30$", NULL, NULL, NULL) == (ssize_t)sizeof(ALGO"$") - 1 + 40);
- EXPECT(librecrypt_realise_salts(buf2, sizeof(buf2), ALGO"*30$", NULL, NULL, NULL) == (ssize_t)sizeof(ALGO"$") - 1 + 40);
+ EXPECT(librecrypt_realise_salts(buf, sizeof(buf), ALGO"*30$", NULL, NULL, ctx) == (ssize_t)sizeof(ALGO"$") - 1 + 40);
+ EXPECT(librecrypt_realise_salts(buf2, sizeof(buf2), ALGO"*30$", NULL, NULL, ctx) == (ssize_t)sizeof(ALGO"$") - 1 + 40);
EXPECT(!buf[sizeof(ALGO"$") - 1u + 40u]);
EXPECT(!buf2[sizeof(ALGO"$") - 1u + 40u]);
EXPECT(memcmp(buf, buf2, sizeof(ALGO"$") - 1u + 40u));
@@ -311,6 +338,46 @@ main(void)
CANARY_CHECK(buf2, sizeof(ALGO"$") + 40u);
#endif
+ if (!ctx) {
+ ctx = librecrypt_create_context();
+ assert(ctx != NULL);
+ goto start_over;
+ }
+
+ dumdum.strict_pad = 1;
+ dumdum.pad = '\0';
+ CANARY_FILL(buf);
+ librecrypt_set_custom_algorithms(ctx, &dumdum, 1u);
+ EXPECT(librecrypt_realise_salts(buf, sizeof(buf), "$dumdum$*10$*16", NULL, NULL, ctx) == (ssize_t)sizeof("$dumdum$$*16") - 1 + 14);
+ EXPECT(!memcmp(buf, "$dumdum$??????????????$*16", sizeof("$dumdum$$*16") + 14u));
+ CANARY_CHECK(buf, sizeof("$dumdum$$*16") + 14u);
+
+ dumdum.strict_pad = 0;
+ dumdum.pad = '\0';
+ CANARY_FILL(buf);
+ librecrypt_set_custom_algorithms(ctx, &dumdum, 1u);
+ EXPECT(librecrypt_realise_salts(buf, sizeof(buf), "$dumdum$*10$*16", NULL, NULL, ctx) == (ssize_t)sizeof("$dumdum$$*16") - 1 + 14);
+ EXPECT(!memcmp(buf, "$dumdum$??????????????$*16", sizeof("$dumdum$$*16") + 14u));
+ CANARY_CHECK(buf, sizeof("$dumdum$$*16") + 14u);
+
+ dumdum.strict_pad = 0;
+ dumdum.pad = '@';
+ CANARY_FILL(buf);
+ librecrypt_set_custom_algorithms(ctx, &dumdum, 1u);
+ EXPECT(librecrypt_realise_salts(buf, sizeof(buf), "$dumdum$*10$*16", NULL, NULL, ctx) == (ssize_t)sizeof("$dumdum$$*16") - 1 + 14);
+ EXPECT(!memcmp(buf, "$dumdum$??????????????$*16", sizeof("$dumdum$$*16") + 14u));
+ CANARY_CHECK(buf, sizeof("$dumdum$$*16") + 14u);
+
+ dumdum.strict_pad = 1;
+ dumdum.pad = '@';
+ CANARY_FILL(buf);
+ librecrypt_set_custom_algorithms(ctx, &dumdum, 1u);
+ EXPECT(librecrypt_realise_salts(buf, sizeof(buf), "$dumdum$*10$*16", NULL, NULL, ctx) == (ssize_t)sizeof("$dumdum$$*16") - 1 + 16);
+ EXPECT(!memcmp(buf, "$dumdum$??????????????@@$*16", sizeof("$dumdum$$*16") + 16u));
+ CANARY_CHECK(buf, sizeof("$dumdum$$*16") + 16u);
+
+ librecrypt_free_context(ctx);
+
STOP_RESOURCE_TEST();
return 0;
}
diff --git a/librecrypt_set_custom_algorithms.c b/librecrypt_set_custom_algorithms.c
index 2494490..dabdcdc 100644
--- a/librecrypt_set_custom_algorithms.c
+++ b/librecrypt_set_custom_algorithms.c
@@ -18,7 +18,7 @@ int
main(void)
{
LIBRECRYPT_CONTEXT *ctx;
- const struct librecrypt_algorithm algos[5];
+ struct librecrypt_algorithm algos[5];
SET_UP_ALARM();
INIT_RESOURCE_TEST();