diff options
Diffstat (limited to '')
| -rw-r--r-- | argon2/is_algorithm.c | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/argon2/is_algorithm.c b/argon2/is_algorithm.c new file mode 100644 index 0000000..96a889a --- /dev/null +++ b/argon2/is_algorithm.c @@ -0,0 +1,81 @@ +/* See LICENSE file for copyright and license details. */ +#include "../common.h" +#ifndef TEST + + +#define DECLARE_IS_ALGORITHM(ALGO)\ + unsigned\ + librecrypt__##ALGO##__is_algorithm(const char *settings, size_t len)\ + {\ + return len >= sizeof("$"#ALGO"$") - 1u && !strncmp(settings, "$"#ALGO"$", sizeof("$"#ALGO"$") - 1u);\ + } + +IF__argon2i__SUPPORTED(DECLARE_IS_ALGORITHM(argon2i)) +IF__argon2d__SUPPORTED(DECLARE_IS_ALGORITHM(argon2d)) +IF__argon2id__SUPPORTED(DECLARE_IS_ALGORITHM(argon2id)) +IF__argon2ds__SUPPORTED(DECLARE_IS_ALGORITHM(argon2ds)) + + +#else + + +#define CHECK(ALGO, PREFIX, SUFFIX, RET)\ + EXPECT(librecrypt__##ALGO##__is_algorithm(PREFIX SUFFIX, sizeof(PREFIX) - 1u) == (RET)) + + +int +main(void) +{ +#if defined(SUPPORT_ARGON2I) + CHECK(argon2i, "", "", 0u); + CHECK(argon2i, "$argon2$", "", 0u); + CHECK(argon2i, "$argon2i", "$", 0u); + CHECK(argon2i, "$argon2i$", "", 1u); + CHECK(argon2i, "$ARGON2I$", "", 0u); + CHECK(argon2i, "$argon2i$x", "", 1u); + CHECK(argon2i, "$argon2d$", "", 0u); + CHECK(argon2i, "$argon2id$", "", 0u); + CHECK(argon2i, "$argon2ds$", "", 0u); +#endif + +#if defined(SUPPORT_ARGON2D) + CHECK(argon2d, "", "", 0u); + CHECK(argon2d, "$argon2$", "", 0u); + CHECK(argon2d, "$argon2d", "$", 0u); + CHECK(argon2d, "$argon2d$", "", 1u); + CHECK(argon2d, "$ARGON2D$", "", 0u); + CHECK(argon2d, "$argon2d$x", "", 1u); + CHECK(argon2d, "$argon2i$", "", 0u); + CHECK(argon2d, "$argon2id$", "", 0u); + CHECK(argon2d, "$argon2ds$", "", 0u); +#endif + +#if defined(SUPPORT_ARGON2ID) + CHECK(argon2id, "", "", 0u); + CHECK(argon2id, "$argon2$", "", 0u); + CHECK(argon2id, "$argon2id", "$", 0u); + CHECK(argon2id, "$argon2id$", "", 1u); + CHECK(argon2id, "$ARGON2ID$", "", 0u); + CHECK(argon2id, "$argon2id$x", "", 1u); + CHECK(argon2id, "$argon2i$", "", 0u); + CHECK(argon2id, "$argon2d$", "", 0u); + CHECK(argon2id, "$argon2ds$", "", 0u); +#endif + +#if defined(SUPPORT_ARGON2DS) + CHECK(argon2ds, "", "", 0u); + CHECK(argon2ds, "$argon2$", "", 0u); + CHECK(argon2ds, "$argon2ds", "$", 0u); + CHECK(argon2ds, "$argon2ds$", "", 1u); + CHECK(argon2ds, "$ARGON2DS$", "", 0u); + CHECK(argon2ds, "$argon2ds$x", "", 1u); + CHECK(argon2ds, "$argon2i$", "", 0u); + CHECK(argon2ds, "$argon2d$", "", 0u); + CHECK(argon2ds, "$argon2id$", "", 0u); +#endif + + return 0; +} + + +#endif |
