summaryrefslogtreecommitdiffstats
path: root/lib/crypto_backend/argon2_generic.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/crypto_backend/argon2_generic.c')
-rw-r--r--lib/crypto_backend/argon2_generic.c39
1 files changed, 34 insertions, 5 deletions
diff --git a/lib/crypto_backend/argon2_generic.c b/lib/crypto_backend/argon2_generic.c
index 0ce67da..eca575b 100644
--- a/lib/crypto_backend/argon2_generic.c
+++ b/lib/crypto_backend/argon2_generic.c
@@ -1,8 +1,8 @@
/*
* Argon2 PBKDF2 library wrapper
*
- * Copyright (C) 2016-2023 Red Hat, Inc. All rights reserved.
- * Copyright (C) 2016-2023 Milan Broz
+ * Copyright (C) 2016-2024 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2016-2024 Milan Broz
*
* This file is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -29,14 +29,12 @@
#define CONST_CAST(x) (x)(uintptr_t)
+#if USE_INTERNAL_ARGON2 || HAVE_ARGON2_H
int argon2(const char *type, const char *password, size_t password_length,
const char *salt, size_t salt_length,
char *key, size_t key_length,
uint32_t iterations, uint32_t memory, uint32_t parallel)
{
-#if !USE_INTERNAL_ARGON2 && !HAVE_ARGON2_H
- return -EINVAL;
-#else
argon2_type atype;
argon2_context context = {
.flags = ARGON2_DEFAULT_FLAGS,
@@ -54,6 +52,9 @@ int argon2(const char *type, const char *password, size_t password_length,
};
int r;
+ /* This code must not be run if crypt backend library natively supports Argon2 */
+ assert(!(crypt_backend_flags() & CRYPT_BACKEND_ARGON2));
+
if (!strcmp(type, "argon2i"))
atype = Argon2_i;
else if(!strcmp(type, "argon2id"))
@@ -75,5 +76,33 @@ int argon2(const char *type, const char *password, size_t password_length,
}
return r;
+}
+
+#else /* USE_INTERNAL_ARGON2 || HAVE_ARGON2_H */
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+
+int argon2(const char *type, const char *password, size_t password_length,
+ const char *salt, size_t salt_length,
+ char *key, size_t key_length,
+ uint32_t iterations, uint32_t memory, uint32_t parallel)
+{
+ return -EINVAL;
+}
+
+#endif
+
+/* Additional string for crypt backend version */
+const char *crypt_argon2_version(void)
+{
+ const char *version = "";
+
+ if (crypt_backend_flags() & CRYPT_BACKEND_ARGON2)
+ return version;
+
+#if HAVE_ARGON2_H /* this has priority over internal argon2 */
+ version = " [external libargon2]";
+#elif USE_INTERNAL_ARGON2
+ version = " [cryptsetup libargon2]";
#endif
+ return version;
}