diff options
Diffstat (limited to 'src/util')
-rw-r--r-- | src/util/Makefile.am | 1 | ||||
-rw-r--r-- | src/util/crypto_pow.c | 86 |
2 files changed, 12 insertions, 75 deletions
diff --git a/src/util/Makefile.am b/src/util/Makefile.am index ae72abb44..fed0dad79 100644 --- a/src/util/Makefile.am +++ b/src/util/Makefile.am | |||
@@ -133,6 +133,7 @@ libgnunetutil_la_LIBADD = \ | |||
133 | $(LIBIDN) $(LIBIDN2) \ | 133 | $(LIBIDN) $(LIBIDN2) \ |
134 | $(Z_LIBS) \ | 134 | $(Z_LIBS) \ |
135 | -lunistring \ | 135 | -lunistring \ |
136 | -largon2 \ | ||
136 | $(XLIB) \ | 137 | $(XLIB) \ |
137 | $(PTHREAD) | 138 | $(PTHREAD) |
138 | 139 | ||
diff --git a/src/util/crypto_pow.c b/src/util/crypto_pow.c index 9b20ab345..35511a130 100644 --- a/src/util/crypto_pow.c +++ b/src/util/crypto_pow.c | |||
@@ -25,7 +25,7 @@ | |||
25 | */ | 25 | */ |
26 | #include "platform.h" | 26 | #include "platform.h" |
27 | #include "gnunet_crypto_lib.h" | 27 | #include "gnunet_crypto_lib.h" |
28 | #include <gcrypt.h> | 28 | #include <argon2.h> |
29 | 29 | ||
30 | /** | 30 | /** |
31 | * Calculate the 'proof-of-work' hash (an expensive hash). | 31 | * Calculate the 'proof-of-work' hash (an expensive hash). |
@@ -43,81 +43,17 @@ GNUNET_CRYPTO_pow_hash (const char *salt, | |||
43 | size_t buf_len, | 43 | size_t buf_len, |
44 | struct GNUNET_HashCode *result) | 44 | struct GNUNET_HashCode *result) |
45 | { | 45 | { |
46 | #ifdef LSD001 | 46 | GNUNET_break (ARGON2_OK == argon2d_hash_raw (3, /* iterations */ |
47 | char twofish_iv[128 / 8]; //128 bit IV | 47 | 1024, /* memory (1 MiB) */ |
48 | char twofish_key[256 / 8]; //256 bit Key | 48 | 1, /* threads */ |
49 | char rbuf[buf_len]; | 49 | buf, |
50 | int rc; | 50 | buf_len, |
51 | gcry_cipher_hd_t handle; | 51 | salt, |
52 | strlen (salt), | ||
53 | result, | ||
54 | sizeof (struct | ||
55 | GNUNET_HashCode))); | ||
52 | 56 | ||
53 | GNUNET_break (0 == gcry_kdf_derive (buf, | ||
54 | buf_len, | ||
55 | GCRY_KDF_SCRYPT, | ||
56 | 1 /* subalgo */, | ||
57 | salt, | ||
58 | strlen (salt), | ||
59 | 2 /* iterations; keep cost of individual op small */, | ||
60 | sizeof(twofish_key), | ||
61 | &twofish_key)); | ||
62 | |||
63 | GNUNET_CRYPTO_kdf (twofish_iv, | ||
64 | sizeof (twofish_iv), | ||
65 | "gnunet-proof-of-work-iv", | ||
66 | strlen ("gnunet-proof-of-work-iv"), | ||
67 | twofish_key, | ||
68 | sizeof(twofish_key), | ||
69 | salt, | ||
70 | strlen (salt), | ||
71 | NULL, 0); | ||
72 | GNUNET_assert (0 == | ||
73 | gcry_cipher_open (&handle, GCRY_CIPHER_TWOFISH, | ||
74 | GCRY_CIPHER_MODE_CFB, 0)); | ||
75 | rc = gcry_cipher_setkey (handle, | ||
76 | twofish_key, | ||
77 | sizeof(twofish_key)); | ||
78 | GNUNET_assert ((0 == rc) || ((char) rc == GPG_ERR_WEAK_KEY)); | ||
79 | rc = gcry_cipher_setiv (handle, | ||
80 | twofish_iv, | ||
81 | sizeof(twofish_iv)); | ||
82 | GNUNET_assert ((0 == rc) || ((char) rc == GPG_ERR_WEAK_KEY)); | ||
83 | GNUNET_assert (0 == gcry_cipher_encrypt (handle, &rbuf, buf_len, buf, buf_len)); | ||
84 | gcry_cipher_close (handle); | ||
85 | #else | ||
86 | struct GNUNET_CRYPTO_SymmetricInitializationVector iv; | ||
87 | struct GNUNET_CRYPTO_SymmetricSessionKey skey; | ||
88 | char rbuf[buf_len]; | ||
89 | |||
90 | GNUNET_break (0 == gcry_kdf_derive (buf, | ||
91 | buf_len, | ||
92 | GCRY_KDF_SCRYPT, | ||
93 | 1 /* subalgo */, | ||
94 | salt, | ||
95 | strlen (salt), | ||
96 | 2 /* iterations; keep cost of individual op small */, | ||
97 | sizeof(skey), | ||
98 | &skey)); | ||
99 | GNUNET_CRYPTO_symmetric_derive_iv (&iv, | ||
100 | &skey, | ||
101 | "gnunet-proof-of-work-iv", | ||
102 | strlen ("gnunet-proof-of-work-iv"), | ||
103 | salt, | ||
104 | strlen (salt), | ||
105 | NULL, 0); | ||
106 | GNUNET_CRYPTO_symmetric_encrypt (buf, | ||
107 | buf_len, | ||
108 | &skey, | ||
109 | &iv, | ||
110 | &rbuf); | ||
111 | #endif | ||
112 | GNUNET_break (0 == gcry_kdf_derive (rbuf, | ||
113 | buf_len, | ||
114 | GCRY_KDF_SCRYPT, | ||
115 | 1 /* subalgo */, | ||
116 | salt, | ||
117 | strlen (salt), | ||
118 | 2 /* iterations; keep cost of individual op small */, | ||
119 | sizeof(struct GNUNET_HashCode), | ||
120 | result)); | ||
121 | } | 57 | } |
122 | 58 | ||
123 | 59 | ||