argon2 1.1.1 → 1.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +7 -4
  3. data/Changelog.md +3 -0
  4. data/README.md +2 -0
  5. data/argon2.gemspec +1 -1
  6. data/ext/argon2_wrap/Makefile +6 -0
  7. data/ext/argon2_wrap/argon_wrap.c +1 -7
  8. data/ext/phc-winner-argon2/.gitignore +1 -0
  9. data/ext/phc-winner-argon2/Argon2.sln +64 -2
  10. data/ext/phc-winner-argon2/CHANGELOG.md +8 -1
  11. data/ext/phc-winner-argon2/LICENSE +301 -18
  12. data/ext/phc-winner-argon2/Makefile +85 -20
  13. data/ext/phc-winner-argon2/README.md +73 -30
  14. data/ext/phc-winner-argon2/argon2-specs.pdf +0 -0
  15. data/ext/phc-winner-argon2/include/argon2.h +73 -10
  16. data/ext/phc-winner-argon2/kats/argon2id +12304 -0
  17. data/ext/phc-winner-argon2/kats/argon2id.shasum +1 -0
  18. data/ext/phc-winner-argon2/kats/argon2id_v16 +12304 -0
  19. data/ext/phc-winner-argon2/kats/argon2id_v16.shasum +1 -0
  20. data/ext/phc-winner-argon2/kats/test.ps1 +1 -1
  21. data/ext/phc-winner-argon2/kats/test.sh +1 -1
  22. data/ext/phc-winner-argon2/latex/IEEEtran.cls +6347 -0
  23. data/ext/phc-winner-argon2/latex/argon2-spec.tex +920 -0
  24. data/ext/phc-winner-argon2/latex/pics/argon2-par.pdf +0 -0
  25. data/ext/phc-winner-argon2/latex/pics/compression.pdf +0 -0
  26. data/ext/phc-winner-argon2/latex/pics/generic.pdf +0 -0
  27. data/ext/phc-winner-argon2/latex/pics/power-distribution.jpg +0 -0
  28. data/ext/phc-winner-argon2/latex/tradeoff.bib +822 -0
  29. data/ext/phc-winner-argon2/libargon2.pc +16 -0
  30. data/ext/phc-winner-argon2/man/argon2.1 +13 -3
  31. data/ext/phc-winner-argon2/src/argon2.c +112 -68
  32. data/ext/phc-winner-argon2/src/bench.c +44 -27
  33. data/ext/phc-winner-argon2/src/blake2/blake2-impl.h +18 -5
  34. data/ext/phc-winner-argon2/src/blake2/blake2.h +17 -0
  35. data/ext/phc-winner-argon2/src/blake2/blake2b.c +25 -7
  36. data/ext/phc-winner-argon2/src/blake2/blamka-round-opt.h +17 -0
  37. data/ext/phc-winner-argon2/src/blake2/blamka-round-ref.h +17 -0
  38. data/ext/phc-winner-argon2/src/core.c +138 -110
  39. data/ext/phc-winner-argon2/src/core.h +41 -26
  40. data/ext/phc-winner-argon2/src/encoding.c +79 -55
  41. data/ext/phc-winner-argon2/src/encoding.h +25 -8
  42. data/ext/phc-winner-argon2/src/genkat.c +35 -39
  43. data/ext/phc-winner-argon2/src/genkat.h +11 -7
  44. data/ext/phc-winner-argon2/src/opt.c +65 -99
  45. data/ext/phc-winner-argon2/src/opt.h +15 -32
  46. data/ext/phc-winner-argon2/src/ref.c +50 -93
  47. data/ext/phc-winner-argon2/src/ref.h +15 -31
  48. data/ext/phc-winner-argon2/src/run.c +73 -30
  49. data/ext/phc-winner-argon2/src/test.c +33 -2
  50. data/ext/phc-winner-argon2/src/thread.c +21 -0
  51. data/ext/phc-winner-argon2/src/thread.h +21 -0
  52. data/ext/phc-winner-argon2/vs2015/Argon2Opt/Argon2Opt.vcxproj +69 -1
  53. data/ext/phc-winner-argon2/vs2015/Argon2OptBench/Argon2OptBench.vcxproj +69 -1
  54. data/ext/phc-winner-argon2/vs2015/Argon2OptDll/Argon2OptDll.vcxproj +225 -0
  55. data/ext/phc-winner-argon2/vs2015/Argon2OptDll/Argon2OptDll.vcxproj.filters +66 -0
  56. data/ext/phc-winner-argon2/vs2015/Argon2OptGenKAT/Argon2OptGenKAT.vcxproj +73 -1
  57. data/ext/phc-winner-argon2/vs2015/Argon2OptTestCI/Argon2OptTestCI.vcxproj +69 -1
  58. data/ext/phc-winner-argon2/vs2015/Argon2Ref/Argon2Ref.vcxproj +69 -1
  59. data/ext/phc-winner-argon2/vs2015/Argon2RefBench/Argon2RefBench.vcxproj +69 -1
  60. data/ext/phc-winner-argon2/vs2015/Argon2RefDll/Argon2RefDll.vcxproj +225 -0
  61. data/ext/phc-winner-argon2/vs2015/Argon2RefDll/Argon2RefDll.vcxproj.filters +66 -0
  62. data/ext/phc-winner-argon2/vs2015/Argon2RefGenKAT/Argon2RefGenKAT.vcxproj +69 -1
  63. data/ext/phc-winner-argon2/vs2015/Argon2RefTestCI/Argon2RefTestCI.vcxproj +69 -1
  64. data/lib/argon2.rb +3 -3
  65. data/lib/argon2/ffi_engine.rb +3 -3
  66. data/lib/argon2/version.rb +1 -1
  67. metadata +21 -5
@@ -1,14 +1,18 @@
1
1
  /*
2
- * Argon2 source code package
2
+ * Argon2 reference source code package - reference C implementations
3
3
  *
4
- * Written by Daniel Dinu and Dmitry Khovratovich, 2015
4
+ * Copyright 2015
5
+ * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves
5
6
  *
6
- * This work is licensed under a Creative Commons CC0 1.0 License/Waiver.
7
+ * You may use this work under the terms of a Creative Commons CC0 1.0
8
+ * License/Waiver or the Apache Public License 2.0, at your option. The terms of
9
+ * these licenses can be found at:
7
10
  *
8
- * You should have received a copy of the CC0 Public Domain Dedication along
9
- * with
10
- * this software. If not, see
11
- * <http://creativecommons.org/publicdomain/zero/1.0/>.
11
+ * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0
12
+ * - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0
13
+ *
14
+ * You should have received a copy of both of these licenses along with this
15
+ * software. If not, they may be obtained at the above URLs.
12
16
  */
13
17
 
14
18
  #ifndef ARGON2_REF_H
@@ -17,35 +21,15 @@
17
21
  #include "core.h"
18
22
 
19
23
  /*
20
- * Function fills a new memory block by XORing over @next_block. @next_block must be initialized
24
+ * Function fills a new memory block and optionally XORs the old block over the new one.
25
+ * @next_block must be initialized.
21
26
  * @param prev_block Pointer to the previous block
22
27
  * @param ref_block Pointer to the reference block
23
28
  * @param next_block Pointer to the block to be constructed
29
+ * @param with_xor Whether to XOR into the new block (1) or just overwrite (0)
24
30
  * @pre all block pointers must be valid
25
31
  */
26
- void fill_block_with_xor(const block *prev_block, const block *ref_block,
27
- block *next_block);
28
-
29
- /* LEGACY CODE: version 1.2.1 and earlier
30
- * Function fills a new memory block by overwriting @next_block.
31
- * @param prev_block Pointer to the previous block
32
- * @param ref_block Pointer to the reference block
33
- * @param next_block Pointer to the block to be constructed
34
- * @pre all block pointers must be valid
35
- */
36
32
  void fill_block(const block *prev_block, const block *ref_block,
37
- block *next_block);
38
-
39
- /*
40
- * Generate pseudo-random values to reference blocks in the segment and puts
41
- * them into the array
42
- * @param instance Pointer to the current instance
43
- * @param position Pointer to the current position
44
- * @param pseudo_rands Pointer to the array of 64-bit values
45
- * @pre pseudo_rands must point to @a instance->segment_length allocated values
46
- */
47
- void generate_addresses(const argon2_instance_t *instance,
48
- const argon2_position_t *position,
49
- uint64_t *pseudo_rands);
33
+ block *next_block, int with_xor);
50
34
 
51
35
  #endif /* ARGON2_REF_H */
@@ -1,14 +1,18 @@
1
1
  /*
2
- * Argon2 source code package
2
+ * Argon2 reference source code package - reference C implementations
3
3
  *
4
- * Written by Daniel Dinu and Dmitry Khovratovich, 2015
4
+ * Copyright 2015
5
+ * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves
5
6
  *
6
- * This work is licensed under a Creative Commons CC0 1.0 License/Waiver.
7
+ * You may use this work under the terms of a Creative Commons CC0 1.0
8
+ * License/Waiver or the Apache Public License 2.0, at your option. The terms of
9
+ * these licenses can be found at:
7
10
  *
8
- * You should have received a copy of the CC0 Public Domain Dedication along
9
- * with
10
- * this software. If not, see
11
- * <http://creativecommons.org/publicdomain/zero/1.0/>.
11
+ * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0
12
+ * - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0
13
+ *
14
+ * You should have received a copy of both of these licenses along with this
15
+ * software. If not, they may be obtained at the above URLs.
12
16
  */
13
17
 
14
18
  #define _GNU_SOURCE 1
@@ -33,23 +37,28 @@
33
37
  #define UNUSED_PARAMETER(x) (void)(x)
34
38
 
35
39
  static void usage(const char *cmd) {
36
- printf("Usage: %s salt [-d] [-t iterations] [-m memory] "
37
- "[-p parallelism] [-h hash length] [-e|-r]\n",
40
+ printf("Usage: %s [-h] salt [-i|-d|-id] [-t iterations] [-m memory] "
41
+ "[-p parallelism] [-l hash length] [-e|-r] [-v (10|13)]\n",
38
42
  cmd);
39
43
  printf("\tPassword is read from stdin\n");
40
44
  printf("Parameters:\n");
41
45
  printf("\tsalt\t\tThe salt to use, at least 8 characters\n");
42
- printf("\t-d\t\tUse Argon2d instead of Argon2i (which is the default)\n");
46
+ printf("\t-i\t\tUse Argon2i (this is the default)\n");
47
+ printf("\t-d\t\tUse Argon2d instead of Argon2i\n");
48
+ printf("\t-id\t\tUse Argon2id instead of Argon2i\n");
43
49
  printf("\t-t N\t\tSets the number of iterations to N (default = %d)\n",
44
50
  T_COST_DEF);
45
51
  printf("\t-m N\t\tSets the memory usage of 2^N KiB (default %d)\n",
46
52
  LOG_M_COST_DEF);
47
53
  printf("\t-p N\t\tSets parallelism to N threads (default %d)\n",
48
54
  THREADS_DEF);
49
- printf("\t-h N\t\tSets hash output length to N bytes (default %d)\n",
55
+ printf("\t-l N\t\tSets hash output length to N bytes (default %d)\n",
50
56
  OUTLEN_DEF);
51
57
  printf("\t-e\t\tOutput only encoded hash\n");
52
58
  printf("\t-r\t\tOutput only the raw bytes of the hash\n");
59
+ printf("\t-v (10|13)\tArgon2 version (defaults to the most recent version, currently %x)\n",
60
+ ARGON2_VERSION_NUMBER);
61
+ printf("\t-h\t\tPrint %s usage\n", cmd);
53
62
  }
54
63
 
55
64
  static void fatal(const char *error) {
@@ -75,16 +84,19 @@ Base64-encoded hash string
75
84
  @m_cost amount of requested memory in KB
76
85
  @lanes amount of requested parallelism
77
86
  @threads actual parallelism
78
- @type String, only "d" and "i" are acceptedi
87
+ @type Argon2 type we want to run
79
88
  @encoded_only display only the encoded hash
80
89
  @raw_only display only the hexadecimal of the hash
90
+ @version Argon2 version
81
91
  */
82
92
  static void run(uint32_t outlen, char *pwd, char *salt, uint32_t t_cost,
83
93
  uint32_t m_cost, uint32_t lanes, uint32_t threads,
84
- argon2_type type, int encoded_only, int raw_only) {
94
+ argon2_type type, int encoded_only, int raw_only, uint32_t version) {
85
95
  clock_t start_time, stop_time;
86
96
  size_t pwdlen, saltlen, encodedlen;
87
97
  int result;
98
+ unsigned char * out = NULL;
99
+ char * encoded = NULL;
88
100
 
89
101
  start_time = clock();
90
102
 
@@ -93,31 +105,34 @@ static void run(uint32_t outlen, char *pwd, char *salt, uint32_t t_cost,
93
105
  }
94
106
 
95
107
  if (!salt) {
96
- secure_wipe_memory(pwd, strlen(pwd));
108
+ clear_internal_memory(pwd, strlen(pwd));
97
109
  fatal("salt missing");
98
110
  }
99
111
 
100
112
  pwdlen = strlen(pwd);
101
113
  saltlen = strlen(salt);
114
+ if(UINT32_MAX < saltlen) {
115
+ fatal("salt is too long");
116
+ }
102
117
 
103
118
  UNUSED_PARAMETER(lanes);
104
119
 
105
- unsigned char* out = malloc(outlen + 1);
120
+ out = malloc(outlen + 1);
106
121
  if (!out) {
107
- secure_wipe_memory(pwd, strlen(pwd));
122
+ clear_internal_memory(pwd, strlen(pwd));
108
123
  fatal("could not allocate memory for output");
109
124
  }
110
125
 
111
- encodedlen = argon2_encodedlen(t_cost, m_cost, lanes, saltlen, outlen);
112
- char* encoded = malloc(encodedlen + 1);
126
+ encodedlen = argon2_encodedlen(t_cost, m_cost, lanes, (uint32_t)saltlen, outlen, type);
127
+ encoded = malloc(encodedlen + 1);
113
128
  if (!encoded) {
114
- secure_wipe_memory(pwd, strlen(pwd));
129
+ clear_internal_memory(pwd, strlen(pwd));
115
130
  fatal("could not allocate memory for hash");
116
131
  }
117
132
 
118
133
  result = argon2_hash(t_cost, m_cost, threads, pwd, pwdlen, salt, saltlen,
119
134
  out, outlen, encoded, encodedlen, type,
120
- ARGON2_VERSION_NUMBER);
135
+ version);
121
136
  if (result != ARGON2_OK)
122
137
  fatal(argon2_error_message(result));
123
138
 
@@ -157,9 +172,11 @@ int main(int argc, char *argv[]) {
157
172
  uint32_t t_cost = T_COST_DEF;
158
173
  uint32_t lanes = LANES_DEF;
159
174
  uint32_t threads = THREADS_DEF;
160
- argon2_type type = Argon2_i;
175
+ argon2_type type = Argon2_i; /* Argon2i is the default type */
176
+ int types_specified = 0;
161
177
  int encoded_only = 0;
162
178
  int raw_only = 0;
179
+ uint32_t version = ARGON2_VERSION_NUMBER;
163
180
  int i;
164
181
  size_t n;
165
182
  char pwd[MAX_PASS_LEN], *salt;
@@ -167,6 +184,9 @@ int main(int argc, char *argv[]) {
167
184
  if (argc < 2) {
168
185
  usage(argv[0]);
169
186
  return ARGON2_MISSING_ARGS;
187
+ } else if (argc >= 2 && strcmp(argv[1], "-h") == 0) {
188
+ usage(argv[0]);
189
+ return 1;
170
190
  }
171
191
 
172
192
  /* get password from stdin */
@@ -189,7 +209,10 @@ int main(int argc, char *argv[]) {
189
209
  for (i = 2; i < argc; i++) {
190
210
  const char *a = argv[i];
191
211
  unsigned long input = 0;
192
- if (!strcmp(a, "-m")) {
212
+ if (!strcmp(a, "-h")) {
213
+ usage(argv[0]);
214
+ return 1;
215
+ } else if (!strcmp(a, "-m")) {
193
216
  if (i < argc - 1) {
194
217
  i++;
195
218
  input = strtoul(argv[i], NULL, 10);
@@ -232,42 +255,62 @@ int main(int argc, char *argv[]) {
232
255
  } else {
233
256
  fatal("missing -p argument");
234
257
  }
235
- } else if (!strcmp(a, "-h")) {
258
+ } else if (!strcmp(a, "-l")) {
236
259
  if (i < argc - 1) {
237
260
  i++;
238
261
  input = strtoul(argv[i], NULL, 10);
239
262
  outlen = input;
240
263
  continue;
241
264
  } else {
242
- fatal("missing -h argument");
265
+ fatal("missing -l argument");
243
266
  }
267
+ } else if (!strcmp(a, "-i")) {
268
+ type = Argon2_i;
269
+ ++types_specified;
244
270
  } else if (!strcmp(a, "-d")) {
245
271
  type = Argon2_d;
272
+ ++types_specified;
273
+ } else if (!strcmp(a, "-id")) {
274
+ type = Argon2_id;
275
+ ++types_specified;
246
276
  } else if (!strcmp(a, "-e")) {
247
277
  encoded_only = 1;
248
278
  } else if (!strcmp(a, "-r")) {
249
279
  raw_only = 1;
280
+ } else if (!strcmp(a, "-v")) {
281
+ if (i < argc - 1) {
282
+ i++;
283
+ if (!strcmp(argv[i], "10")) {
284
+ version = ARGON2_VERSION_10;
285
+ } else if (!strcmp(argv[i], "13")) {
286
+ version = ARGON2_VERSION_13;
287
+ } else {
288
+ fatal("invalid Argon2 version");
289
+ }
290
+ } else {
291
+ fatal("missing -v argument");
292
+ }
250
293
  } else {
251
294
  fatal("unknown argument");
252
295
  }
253
296
  }
254
297
 
298
+ if (types_specified > 1) {
299
+ fatal("cannot specify multiple Argon2 types");
300
+ }
301
+
255
302
  if(encoded_only && raw_only)
256
303
  fatal("cannot provide both -e and -r");
257
304
 
258
305
  if(!encoded_only && !raw_only) {
259
- if (type == Argon2_i) {
260
- printf("Type:\t\tArgon2i\n");
261
- } else {
262
- printf("Type:\t\tArgon2d\n");
263
- }
306
+ printf("Type:\t\t%s\n", argon2_type2string(type, 1));
264
307
  printf("Iterations:\t%" PRIu32 " \n", t_cost);
265
308
  printf("Memory:\t\t%" PRIu32 " KiB\n", m_cost);
266
309
  printf("Parallelism:\t%" PRIu32 " \n", lanes);
267
310
  }
268
311
 
269
312
  run(outlen, pwd, salt, t_cost, m_cost, lanes, threads, type,
270
- encoded_only, raw_only);
313
+ encoded_only, raw_only, version);
271
314
 
272
315
  return ARGON2_OK;
273
316
  }
@@ -1,3 +1,20 @@
1
+ /*
2
+ * Argon2 reference source code package - reference C implementations
3
+ *
4
+ * Copyright 2015
5
+ * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves
6
+ *
7
+ * You may use this work under the terms of a Creative Commons CC0 1.0
8
+ * License/Waiver or the Apache Public License 2.0, at your option. The terms of
9
+ * these licenses can be found at:
10
+ *
11
+ * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0
12
+ * - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0
13
+ *
14
+ * You should have received a copy of both of these licenses along with this
15
+ * software. If not, they may be obtained at the above URLs.
16
+ */
17
+
1
18
  #include <stdio.h>
2
19
  #include <stdint.h>
3
20
  #include <inttypes.h>
@@ -111,9 +128,16 @@ int main() {
111
128
  ret = argon2_verify("$argon2i$m=65536,t=2,p=1$c29tZXNhbHQ"
112
129
  "9sTbSlTio3Biev89thdrlKKiCaYsjjYVJxGAL3swxpQ",
113
130
  "password", strlen("password"), Argon2_i);
114
- assert(ret == ARGON2_OUTPUT_TOO_SHORT);
131
+ assert(ret == ARGON2_DECODING_FAIL);
115
132
  printf("Recognise an invalid encoding: PASS\n");
116
133
 
134
+ /* Handle an invalid encoding correctly (salt is too short) */
135
+ ret = argon2_verify("$argon2i$m=65536,t=2,p=1$"
136
+ "$9sTbSlTio3Biev89thdrlKKiCaYsjjYVJxGAL3swxpQ",
137
+ "password", strlen("password"), Argon2_i);
138
+ assert(ret == ARGON2_SALT_TOO_SHORT);
139
+ printf("Recognise an invalid salt in encoding: PASS\n");
140
+
117
141
  /* Handle an mismatching hash (the encoded password is "passwore") */
118
142
  ret = argon2_verify("$argon2i$m=65536,t=2,p=1$c29tZXNhbHQ"
119
143
  "$b2G3seW+uPzerwQQC+/E1K50CLLO7YXy0JRcaTuswRo",
@@ -183,9 +207,16 @@ int main() {
183
207
  ret = argon2_verify("$argon2i$v=19$m=65536,t=2,p=1$c29tZXNhbHQ"
184
208
  "wWKIMhR9lyDFvRz9YTZweHKfbftvj+qf+YFY4NeBbtA",
185
209
  "password", strlen("password"), Argon2_i);
186
- assert(ret == ARGON2_OUTPUT_TOO_SHORT);
210
+ assert(ret == ARGON2_DECODING_FAIL);
187
211
  printf("Recognise an invalid encoding: PASS\n");
188
212
 
213
+ /* Handle an invalid encoding correctly (salt is too short) */
214
+ ret = argon2_verify("$argon2i$v=19$m=65536,t=2,p=1$"
215
+ "$9sTbSlTio3Biev89thdrlKKiCaYsjjYVJxGAL3swxpQ",
216
+ "password", strlen("password"), Argon2_i);
217
+ assert(ret == ARGON2_SALT_TOO_SHORT);
218
+ printf("Recognise an invalid salt in encoding: PASS\n");
219
+
189
220
  /* Handle an mismatching hash (the encoded password is "passwore") */
190
221
  ret = argon2_verify("$argon2i$v=19$m=65536,t=2,p=1$c29tZXNhbHQ"
191
222
  "$8iIuixkI73Js3G1uMbezQXD0b8LG4SXGsOwoQkdAQIM",
@@ -1,3 +1,22 @@
1
+ /*
2
+ * Argon2 reference source code package - reference C implementations
3
+ *
4
+ * Copyright 2015
5
+ * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves
6
+ *
7
+ * You may use this work under the terms of a Creative Commons CC0 1.0
8
+ * License/Waiver or the Apache Public License 2.0, at your option. The terms of
9
+ * these licenses can be found at:
10
+ *
11
+ * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0
12
+ * - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0
13
+ *
14
+ * You should have received a copy of both of these licenses along with this
15
+ * software. If not, they may be obtained at the above URLs.
16
+ */
17
+
18
+ #if !defined(ARGON2_NO_THREADS)
19
+
1
20
  #include "thread.h"
2
21
  #if defined(_WIN32)
3
22
  #include <windows.h>
@@ -34,3 +53,5 @@ void argon2_thread_exit(void) {
34
53
  pthread_exit(NULL);
35
54
  #endif
36
55
  }
56
+
57
+ #endif /* ARGON2_NO_THREADS */
@@ -1,5 +1,25 @@
1
+ /*
2
+ * Argon2 reference source code package - reference C implementations
3
+ *
4
+ * Copyright 2015
5
+ * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves
6
+ *
7
+ * You may use this work under the terms of a Creative Commons CC0 1.0
8
+ * License/Waiver or the Apache Public License 2.0, at your option. The terms of
9
+ * these licenses can be found at:
10
+ *
11
+ * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0
12
+ * - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0
13
+ *
14
+ * You should have received a copy of both of these licenses along with this
15
+ * software. If not, they may be obtained at the above URLs.
16
+ */
17
+
1
18
  #ifndef ARGON2_THREAD_H
2
19
  #define ARGON2_THREAD_H
20
+
21
+ #if !defined(ARGON2_NO_THREADS)
22
+
3
23
  /*
4
24
  Here we implement an abstraction layer for the simpĺe requirements
5
25
  of the Argon2 code. We only require 3 primitives---thread creation,
@@ -43,4 +63,5 @@ int argon2_thread_join(argon2_thread_handle_t handle);
43
63
  */
44
64
  void argon2_thread_exit(void);
45
65
 
66
+ #endif /* ARGON2_NO_THREADS */
46
67
  #endif
@@ -5,6 +5,14 @@
5
5
  <Configuration>Debug</Configuration>
6
6
  <Platform>Win32</Platform>
7
7
  </ProjectConfiguration>
8
+ <ProjectConfiguration Include="ReleaseStatic|Win32">
9
+ <Configuration>ReleaseStatic</Configuration>
10
+ <Platform>Win32</Platform>
11
+ </ProjectConfiguration>
12
+ <ProjectConfiguration Include="ReleaseStatic|x64">
13
+ <Configuration>ReleaseStatic</Configuration>
14
+ <Platform>x64</Platform>
15
+ </ProjectConfiguration>
8
16
  <ProjectConfiguration Include="Release|Win32">
9
17
  <Configuration>Release</Configuration>
10
18
  <Platform>Win32</Platform>
@@ -37,6 +45,13 @@
37
45
  <WholeProgramOptimization>true</WholeProgramOptimization>
38
46
  <CharacterSet>MultiByte</CharacterSet>
39
47
  </PropertyGroup>
48
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseStatic|Win32'" Label="Configuration">
49
+ <ConfigurationType>Application</ConfigurationType>
50
+ <UseDebugLibraries>false</UseDebugLibraries>
51
+ <PlatformToolset>v140</PlatformToolset>
52
+ <WholeProgramOptimization>true</WholeProgramOptimization>
53
+ <CharacterSet>MultiByte</CharacterSet>
54
+ </PropertyGroup>
40
55
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
41
56
  <ConfigurationType>Application</ConfigurationType>
42
57
  <UseDebugLibraries>true</UseDebugLibraries>
@@ -50,6 +65,13 @@
50
65
  <WholeProgramOptimization>true</WholeProgramOptimization>
51
66
  <CharacterSet>MultiByte</CharacterSet>
52
67
  </PropertyGroup>
68
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseStatic|x64'" Label="Configuration">
69
+ <ConfigurationType>Application</ConfigurationType>
70
+ <UseDebugLibraries>false</UseDebugLibraries>
71
+ <PlatformToolset>v140</PlatformToolset>
72
+ <WholeProgramOptimization>true</WholeProgramOptimization>
73
+ <CharacterSet>MultiByte</CharacterSet>
74
+ </PropertyGroup>
53
75
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
54
76
  <ImportGroup Label="ExtensionSettings">
55
77
  </ImportGroup>
@@ -61,12 +83,18 @@
61
83
  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
62
84
  <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
63
85
  </ImportGroup>
86
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseStatic|Win32'" Label="PropertySheets">
87
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
88
+ </ImportGroup>
64
89
  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
65
90
  <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
66
91
  </ImportGroup>
67
92
  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
68
93
  <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
69
94
  </ImportGroup>
95
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseStatic|x64'" Label="PropertySheets">
96
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
97
+ </ImportGroup>
70
98
  <PropertyGroup Label="UserMacros" />
71
99
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
72
100
  <OutDir>$(SolutionDir)vs2015\build\</OutDir>
@@ -78,6 +106,11 @@
78
106
  <IntDir>$(SolutionDir)vs2015\build\$(ProjectName)\</IntDir>
79
107
  <IncludePath>$(SolutionDir)include;$(IncludePath)</IncludePath>
80
108
  </PropertyGroup>
109
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseStatic|Win32'">
110
+ <OutDir>$(SolutionDir)vs2015\build\</OutDir>
111
+ <IntDir>$(SolutionDir)vs2015\build\$(ProjectName)\</IntDir>
112
+ <IncludePath>$(SolutionDir)include;$(IncludePath)</IncludePath>
113
+ </PropertyGroup>
81
114
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
82
115
  <OutDir>$(SolutionDir)vs2015\build\</OutDir>
83
116
  <IntDir>$(SolutionDir)vs2015\build\$(ProjectName)\</IntDir>
@@ -88,6 +121,11 @@
88
121
  <IntDir>$(SolutionDir)vs2015\build\$(ProjectName)\</IntDir>
89
122
  <IncludePath>$(SolutionDir)include;$(IncludePath)</IncludePath>
90
123
  </PropertyGroup>
124
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseStatic|x64'">
125
+ <OutDir>$(SolutionDir)vs2015\build\</OutDir>
126
+ <IntDir>$(SolutionDir)vs2015\build\$(ProjectName)\</IntDir>
127
+ <IncludePath>$(SolutionDir)include;$(IncludePath)</IncludePath>
128
+ </PropertyGroup>
91
129
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
92
130
  <ClCompile>
93
131
  <WarningLevel>Level3</WarningLevel>
@@ -118,6 +156,21 @@
118
156
  <OptimizeReferences>true</OptimizeReferences>
119
157
  </Link>
120
158
  </ItemDefinitionGroup>
159
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseStatic|Win32'">
160
+ <ClCompile>
161
+ <WarningLevel>Level3</WarningLevel>
162
+ <Optimization>MaxSpeed</Optimization>
163
+ <FunctionLevelLinking>true</FunctionLevelLinking>
164
+ <IntrinsicFunctions>true</IntrinsicFunctions>
165
+ <SDLCheck>true</SDLCheck>
166
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
167
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
168
+ </ClCompile>
169
+ <Link>
170
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
171
+ <OptimizeReferences>true</OptimizeReferences>
172
+ </Link>
173
+ </ItemDefinitionGroup>
121
174
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
122
175
  <ClCompile>
123
176
  <WarningLevel>Level3</WarningLevel>
@@ -132,6 +185,21 @@
132
185
  <OptimizeReferences>true</OptimizeReferences>
133
186
  </Link>
134
187
  </ItemDefinitionGroup>
188
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseStatic|x64'">
189
+ <ClCompile>
190
+ <WarningLevel>Level3</WarningLevel>
191
+ <Optimization>MaxSpeed</Optimization>
192
+ <FunctionLevelLinking>true</FunctionLevelLinking>
193
+ <IntrinsicFunctions>true</IntrinsicFunctions>
194
+ <SDLCheck>true</SDLCheck>
195
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
196
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
197
+ </ClCompile>
198
+ <Link>
199
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
200
+ <OptimizeReferences>true</OptimizeReferences>
201
+ </Link>
202
+ </ItemDefinitionGroup>
135
203
  <ItemGroup>
136
204
  <ClInclude Include="..\..\include\argon2.h" />
137
205
  <ClInclude Include="..\..\src\blake2\blake2-impl.h" />
@@ -155,4 +223,4 @@
155
223
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
156
224
  <ImportGroup Label="ExtensionTargets">
157
225
  </ImportGroup>
158
- </Project>
226
+ </Project>