summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2019-11-30 23:08:49 +0100
committerChristian Grothoff <christian@grothoff.org>2019-11-30 23:08:49 +0100
commit7cde88367991dcd1deca2485970c353fec5aff3e (patch)
treec2db008b530ac935a3375d562f80e67e85ba32b0
parentf536489f831c5fd243c22545be12a2cd0f88a84d (diff)
use new POW function consistently, also in revocation
-rw-r--r--src/include/gnunet_crypto_lib.h4
-rw-r--r--src/nse/gnunet-service-nse.c10
-rw-r--r--src/nse/perf_kdf.c31
-rw-r--r--src/revocation/revocation_api.c28
-rw-r--r--src/util/crypto_pow.c21
-rw-r--r--src/util/gnunet-scrypt.c5
6 files changed, 37 insertions, 62 deletions
diff --git a/src/include/gnunet_crypto_lib.h b/src/include/gnunet_crypto_lib.h
index 4a42c5c74..00fe3fbef 100644
--- a/src/include/gnunet_crypto_lib.h
+++ b/src/include/gnunet_crypto_lib.h
@@ -657,12 +657,14 @@ GNUNET_CRYPTO_hash (const void *block,
/**
* Calculate the 'proof-of-work' hash (an expensive hash).
*
+ * @param salt salt to use in pow calculation
* @param buf data to hash
* @param buf_len number of bytes in @a buf
* @param result where to write the resulting hash
*/
void
-GNUNET_CRYPTO_pow_hash (const void *buf,
+GNUNET_CRYPTO_pow_hash (const char *salt,
+ const void *buf,
size_t buf_len,
struct GNUNET_HashCode *result);
diff --git a/src/nse/gnunet-service-nse.c b/src/nse/gnunet-service-nse.c
index 3f04314a6..f4d4e3e2f 100644
--- a/src/nse/gnunet-service-nse.c
+++ b/src/nse/gnunet-service-nse.c
@@ -805,7 +805,10 @@ check_proof_of_work (const struct GNUNET_CRYPTO_EddsaPublicKey *pkey,
GNUNET_memcpy (&buf[sizeof(val)],
pkey,
sizeof(struct GNUNET_CRYPTO_EddsaPublicKey));
- GNUNET_CRYPTO_pow_hash (buf, sizeof(buf), &result);
+ GNUNET_CRYPTO_pow_hash ("gnunet-nse-proof-of-work",
+ buf,
+ sizeof(buf),
+ &result);
return (count_leading_zeroes (&result) >= nse_work_required) ? GNUNET_YES
: GNUNET_NO;
}
@@ -857,7 +860,10 @@ find_proof (void *cls)
while ((counter != UINT64_MAX) && (i < ROUND_SIZE))
{
GNUNET_memcpy (buf, &counter, sizeof(uint64_t));
- GNUNET_CRYPTO_pow_hash (buf, sizeof(buf), &result);
+ GNUNET_CRYPTO_pow_hash ("gnunet-nse-proof-of-work",
+ buf,
+ sizeof(buf),
+ &result);
if (nse_work_required <= count_leading_zeroes (&result))
{
my_proof = counter;
diff --git a/src/nse/perf_kdf.c b/src/nse/perf_kdf.c
index ec6dc7ff3..c5975aaf2 100644
--- a/src/nse/perf_kdf.c
+++ b/src/nse/perf_kdf.c
@@ -29,39 +29,18 @@
#include <gauger.h>
-/**
- * Calculate the 'proof-of-work' hash (an expensive hash).
- *
- * @param buf data to hash
- * @param buf_len number of bytes in 'buf'
- * @param result where to write the resulting hash
- */
-static void
-pow_hash (const void *buf,
- size_t buf_len,
- struct GNUNET_HashCode *result)
-{
- GNUNET_break (0 ==
- gcry_kdf_derive (buf, buf_len,
- GCRY_KDF_SCRYPT,
- 1 /* subalgo */,
- "gnunet-proof-of-work", strlen (
- "gnunet-proof-of-work"),
- 2 /* iterations; keep cost of individual op small */,
- sizeof(struct GNUNET_HashCode), result));
-}
-
-
static void
perfHash ()
{
struct GNUNET_HashCode hc;
- unsigned int i;
char buf[64];
memset (buf, 1, sizeof(buf));
- for (i = 0; i < 1024; i++)
- pow_hash (buf, sizeof(buf), &hc);
+ for (unsigned int i = 0; i < 1024; i++)
+ GNUNET_CRYPTO_pow_hash ("gnunet-proof-of-work",
+ buf,
+ sizeof(buf),
+ &hc);
}
diff --git a/src/revocation/revocation_api.c b/src/revocation/revocation_api.c
index fd25050e2..ea8db835f 100644
--- a/src/revocation/revocation_api.c
+++ b/src/revocation/revocation_api.c
@@ -324,29 +324,6 @@ GNUNET_REVOCATION_revoke_cancel (struct GNUNET_REVOCATION_Handle *h)
/**
- * Calculate the 'proof-of-work' hash (an expensive hash).
- *
- * @param buf data to hash
- * @param buf_len number of bytes in @a buf
- * @param result where to write the resulting hash
- */
-static void
-pow_hash (const void *buf,
- size_t buf_len,
- struct GNUNET_HashCode *result)
-{
- GNUNET_break (0 ==
- gcry_kdf_derive (buf, buf_len,
- GCRY_KDF_SCRYPT,
- 1 /* subalgo */,
- "gnunet-revocation-proof-of-work",
- strlen ("gnunet-revocation-proof-of-work"),
- 2 /* iterations; keep cost of individual op small */,
- sizeof(struct GNUNET_HashCode), result));
-}
-
-
-/**
* Count the leading zeroes in hash.
*
* @param hash to count leading zeros in
@@ -385,7 +362,10 @@ GNUNET_REVOCATION_check_pow (const struct GNUNET_CRYPTO_EcdsaPublicKey *key,
GNUNET_memcpy (buf, &pow, sizeof(pow));
GNUNET_memcpy (&buf[sizeof(pow)], key,
sizeof(struct GNUNET_CRYPTO_EcdsaPublicKey));
- pow_hash (buf, sizeof(buf), &result);
+ GNUNET_CRYPTO_pow_hash ("gnunet-revocation-proof-of-work",
+ buf,
+ sizeof(buf),
+ &result);
return (count_leading_zeroes (&result) >=
matching_bits) ? GNUNET_YES : GNUNET_NO;
}
diff --git a/src/util/crypto_pow.c b/src/util/crypto_pow.c
index 584665e9a..af6837e03 100644
--- a/src/util/crypto_pow.c
+++ b/src/util/crypto_pow.c
@@ -35,13 +35,16 @@
* We're using a non-standard formula to avoid issues with
* ASICs appearing (see #3795).
*
+ * @param salt salt for the hash
* @param buf data to hash
* @param buf_len number of bytes in @a buf
* @param result where to write the resulting hash
*/
void
-GNUNET_CRYPTO_pow_hash (const void *buf, size_t buf_len, struct
- GNUNET_HashCode *result)
+GNUNET_CRYPTO_pow_hash (const char *salt,
+ const void *buf,
+ size_t buf_len,
+ struct GNUNET_HashCode *result)
{
#if NEW_CRYPTO
struct GNUNET_CRYPTO_SymmetricInitializationVector iv;
@@ -52,8 +55,8 @@ GNUNET_CRYPTO_pow_hash (const void *buf, size_t buf_len, struct
buf_len,
GCRY_KDF_SCRYPT,
1 /* subalgo */,
- "gnunet-proof-of-work-1",
- strlen ("gnunet-proof-of-work-1"),
+ salt,
+ strlen (salt),
2 /* iterations; keep cost of individual op small */,
sizeof(skey),
&skey));
@@ -61,6 +64,8 @@ GNUNET_CRYPTO_pow_hash (const void *buf, size_t buf_len, struct
&skey,
"gnunet-proof-of-work-iv",
strlen ("gnunet-proof-of-work-iv"),
+ salt,
+ strlen (salt),
NULL, 0);
GNUNET_CRYPTO_symmetric_encrypt (buf,
buf_len,
@@ -71,8 +76,8 @@ GNUNET_CRYPTO_pow_hash (const void *buf, size_t buf_len, struct
buf_len,
GCRY_KDF_SCRYPT,
1 /* subalgo */,
- "gnunet-proof-of-work-2",
- strlen ("gnunet-proof-of-work-2"),
+ salt,
+ strlen (salt),
2 /* iterations; keep cost of individual op small */,
sizeof(struct GNUNET_HashCode),
result));
@@ -81,8 +86,8 @@ GNUNET_CRYPTO_pow_hash (const void *buf, size_t buf_len, struct
buf_len,
GCRY_KDF_SCRYPT,
1 /* subalgo */,
- "gnunet-proof-of-work",
- strlen ("gnunet-proof-of-work"),
+ salt,
+ strlen (salt),
2 /* iterations; keep cost of individual op small */,
sizeof(struct GNUNET_HashCode),
result));
diff --git a/src/util/gnunet-scrypt.c b/src/util/gnunet-scrypt.c
index d84f486a7..bc8ce83c0 100644
--- a/src/util/gnunet-scrypt.c
+++ b/src/util/gnunet-scrypt.c
@@ -117,7 +117,10 @@ find_proof (void *cls)
while ((counter != UINT64_MAX) && (i < ROUND_SIZE))
{
GNUNET_memcpy (buf, &counter, sizeof(uint64_t));
- GNUNET_CRYPTO_pow_hash (buf, sizeof(buf), &result);
+ GNUNET_CRYPTO_pow_hash ("gnunet-nse-proof-of-work",
+ buf,
+ sizeof(buf),
+ &result);
if (nse_work_required <= count_leading_zeroes (&result))
{
proof = counter;