diff options
| author | Mattias Andrée <m@maandree.se> | 2026-05-15 20:53:25 +0200 |
|---|---|---|
| committer | Mattias Andrée <m@maandree.se> | 2026-05-15 20:53:25 +0200 |
| commit | 193d39d9b78a9e3c0c257b2e1e9f9dd4a7a13349 (patch) | |
| tree | c3b4eaf8df53babc7e37df4384d1be3be1cd9186 /librecrypt_crypt.c | |
| parent | Fix some minor issues (diff) | |
| download | librecrypt-193d39d9b78a9e3c0c257b2e1e9f9dd4a7a13349.tar.gz librecrypt-193d39d9b78a9e3c0c257b2e1e9f9dd4a7a13349.tar.bz2 librecrypt-193d39d9b78a9e3c0c257b2e1e9f9dd4a7a13349.tar.xz | |
Misc
Signed-off-by: Mattias Andrée <m@maandree.se>
Diffstat (limited to 'librecrypt_crypt.c')
| -rw-r--r-- | librecrypt_crypt.c | 35 |
1 files changed, 34 insertions, 1 deletions
diff --git a/librecrypt_crypt.c b/librecrypt_crypt.c index d116f87..893c96f 100644 --- a/librecrypt_crypt.c +++ b/librecrypt_crypt.c @@ -98,7 +98,7 @@ check(const char *phrase, const char *settings, const char *chain, size_t chain_ int main(void) { - char buf[1024], buf2[1024]; + char buf[1024], buf2[1024], conf[256]; ssize_t r; SET_UP_ALARM(); @@ -111,6 +111,39 @@ main(void) #define GET_SCRATCH_SIZE(HASHLEN) ((HASHLEN) > 64u ? ((HASHLEN) + 63u) & ~31u : (HASHLEN)) #if defined(SUPPORT_ARGON2I) + r = snprintf(conf, sizeof(conf), "$argon2i$m=256,t=8,p=1$AAAABBBBCCCC$*%zu", SIZE_MAX / 4u * 3u + 3u); + assert(r > 0 && (size_t)r < sizeof(conf)); + errno = 0; + EXPECT(librecrypt_crypt(NULL, 0u, NULL, 0u, conf, NULL) == -1); +# if SIZE_MAX > UINT32_MAX + EXPECT(errno == EINVAL); +# else + EXPECT(errno == EOVERFLOW); + if (libtest_have_custom_malloc()) { + libtest_pretend_allocation_successful = 1; + errno = 0; + EXPECT(librecrypt_crypt(buf, sizeof(buf), NULL, 0u, conf, NULL) == -1); + libtest_pretend_allocation_successful = 0; + EXPECT(errno == EOVERFLOW); + } +# endif + +# if SIZE_MAX == UINT32_MAX + r = snprintf(conf, sizeof(conf), "$argon2i$m=256,t=8,p=1$AAAABBBBCCCC$*%zu", (SIZE_MAX / 4u * 3u) / 2u); + assert(r > 0 && (size_t)r < sizeof(conf)); + errno = 0; + EXPECT(librecrypt_crypt(NULL, 0u, NULL, 0u, conf, NULL) == -1); + EXPECT(errno == EOVERFLOW); +# endif + +# if SIZE_MAX == UINT32_MAX + r = snprintf(conf, sizeof(conf), "$argon2i$m=256,t=8,p=1$AAAABBBBCCCC$*%zu", SIZE_MAX / 4u * 3u); + assert(r > 0 && (size_t)r < sizeof(conf)); + errno = 0; + EXPECT(librecrypt_crypt(NULL, 0u, NULL, 0u, conf, NULL) == -1); + EXPECT(errno == EOVERFLOW); +# endif + CHECK("password", "$argon2i$" "m=256,t=2,p=1$c29tZXNhbHQ$", 32, 1, "/U3YPXYsSb3q9XxHvc0MLxur+GP960kN9j7emXX8zwY"); CHECK("password", "$argon2i$v=19$m=256,t=2,p=1$c29tZXNhbHQ$", 32, 1, "iekCn0Y3spW+sCcFanM2xBT63UP2sghkUoHLIUpWRS8"); CHECK_BAD("$argon2i$"); |
