- which (contrib/apparmor(?), gnunet-bugreport,
and possibly more)
- zlib
-- argon2 >= 20190702 (for proof-of-work calculations in
- revocation)
- libsodium >= 1.0.11 (for elliptic curve cryptography)
These are the dependencies for GNUnet's testsuite:
AC_CHECK_LIB([kvm],[kvm_open])
AC_CHECK_LIB([kstat],[kstat_open])
-argon=0
-# test for argon2 (for POW)
-AC_CHECK_LIB([argon2],[argon2d_hash_raw], argon=1, argon=0)
-AS_IF([test x$argon = x1],
-[
- AC_MSG_RESULT([argon2 found])
-],[
- AC_MSG_ERROR([GNUnet requires argon2.])
-])
-
libsodium=0
# test for libsodium
AC_CHECK_HEADER([sodium.h],
- [AC_CHECK_LIB([sodium], [sodium_init],
+ [AC_CHECK_LIB([sodium], [crypto_pwhash_argon2id],
[libsodium=1])])
AS_IF([test x$libsodium = x0],
/**
* Calculate the 'proof-of-work' hash (an expensive hash).
*
- * @param salt salt to use in pow calculation
+ * @param salt salt for the hash. Must be crypto_pwhash_argon2id_SALTBYTES long.
* @param buf data to hash
* @param buf_len number of bytes in @a buf
* @param result where to write the resulting hash
GNUNET_memcpy (&buf[sizeof(val)],
pkey,
sizeof(struct GNUNET_CRYPTO_EddsaPublicKey));
- GNUNET_CRYPTO_pow_hash ("gnunet-nse-proof-of-work",
+ GNUNET_CRYPTO_pow_hash ("gnunet-nse-proof",
buf,
sizeof(buf),
&result);
while ((counter != UINT64_MAX) && (i < ROUND_SIZE))
{
GNUNET_memcpy (buf, &counter, sizeof(uint64_t));
- GNUNET_CRYPTO_pow_hash ("gnunet-nse-proof-of-work",
+ GNUNET_CRYPTO_pow_hash ("gnunet-nse-proof",
buf,
sizeof(buf),
&result);
memset (buf, 1, sizeof(buf));
for (unsigned int i = 0; i < 1024; i++)
- GNUNET_CRYPTO_pow_hash ("gnunet-proof-of-work",
+ GNUNET_CRYPTO_pow_hash ("gnunet-nse-proof",
buf,
sizeof(buf),
&hc);
{
pow_val = GNUNET_ntohll (pow->pow[i]);
GNUNET_memcpy (buf, &pow->pow[i], sizeof(uint64_t));
- GNUNET_CRYPTO_pow_hash ("gnunet-revocation-proof-of-work",
+ GNUNET_CRYPTO_pow_hash ("GnsRevocationPow",
buf,
sizeof(buf),
&result);
GNUNET_memcpy (&buf[sizeof(uint64_t) * 2],
&pc->pow->key,
sizeof(struct GNUNET_CRYPTO_EcdsaPublicKey));
- GNUNET_CRYPTO_pow_hash ("gnunet-revocation-proof-of-work",
+ GNUNET_CRYPTO_pow_hash ("GnsRevocationPow",
buf,
sizeof(buf),
&result);
$(LIBIDN) $(LIBIDN2) \
$(Z_LIBS) \
-lunistring \
- -largon2 \
-lsodium \
$(XLIB) \
$(PTHREAD)
*/
#include "platform.h"
#include "gnunet_crypto_lib.h"
-#include <argon2.h>
+#include <sodium.h>
/**
* Calculate the 'proof-of-work' hash (an expensive hash).
* We're using a non-standard formula to avoid issues with
* ASICs appearing (see #3795).
*
- * @param salt salt for the hash
+ * @param salt salt for the hash. Must be crypto_pwhash_argon2id_SALTBYTES long.
* @param buf data to hash
* @param buf_len number of bytes in @a buf
* @param result where to write the resulting hash
size_t buf_len,
struct GNUNET_HashCode *result)
{
- GNUNET_break (ARGON2_OK ==
- argon2id_hash_raw (3, /* iterations */
- 1024, /* memory (1 MiB) */
- 1, /* threads */
- buf,
- buf_len,
- salt,
- strlen (salt),
- result,
- sizeof (struct GNUNET_HashCode)));
+ GNUNET_assert (strlen (salt) == crypto_pwhash_argon2id_SALTBYTES);
+ /* Threads hardcoded at 1 in libsodium */
+ GNUNET_break (0 ==
+ crypto_pwhash_argon2id ((unsigned char *) result,
+ sizeof (struct GNUNET_HashCode),
+ buf,
+ buf_len,
+ (unsigned char*) salt,
+ 3, /* iterations */
+ 1024 * 1024, /* memory (1 MiB) */
+ crypto_pwhash_argon2id_ALG_ARGON2ID13));
}
while ((counter != UINT64_MAX) && (i < ROUND_SIZE))
{
GNUNET_memcpy (buf, &counter, sizeof(uint64_t));
- GNUNET_CRYPTO_pow_hash ("gnunet-nse-proof-of-work",
+ GNUNET_CRYPTO_pow_hash ("gnunet-nse-proof",
buf,
sizeof(buf),
&result);