argon2 1.1.2 → 1.1.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 32024a89ef551d5e36ea1f33be4d8c9be3dd37bd
4
- data.tar.gz: f1ea4e67f60ad84df06ddd60662b25a594537bda
3
+ metadata.gz: 94502c59e36f3822c681b2fe0810810618b609ce
4
+ data.tar.gz: cacc9e8da502df18f4ec2e5f868a8bd49359d6f9
5
5
  SHA512:
6
- metadata.gz: 15e9b77c5fd46fa4dfe2a81c5bb5272971167f41ff6a2091e0a619606e63e0ba9d6a55ff39efc6e7ca5f6bb2ead09f7d1965a1095c88cb0b1d25c814b8cea582
7
- data.tar.gz: af39dbc7405bcaf1d9860a3f4b4cd111ecf27e39575c61de757cc668e1eb000d874a17d66d7fa361077676f1212908e6db11270f68c259012a03ce4000ec9bdd
6
+ metadata.gz: fd0db288ae3e11d110bc384982520d021b81d63e617bab5b952c4f112f0d6a384a299c358236dce001c05b45629871b1bfab79935c7ad5829c9a4a557cf9764f
7
+ data.tar.gz: 25ba334f4a68f15b594970416188e6cc52d713aadfa8663b895875ba6ce43720305aa270bf915f53505db0e70f43db1ab2baaa357df4dd361a0d5722b8b02a5c
@@ -33,9 +33,9 @@ static int wrap_compare(const uint8_t *b1, const uint8_t *b2, size_t len) {
33
33
  return (int)((1 & ((d - 1) >> 8)) - 1);
34
34
  }
35
35
 
36
- unsigned int argon2_wrap(char *out, const char *pwd, size_t pwd_length,
36
+ int argon2_wrap_version(char *out, const char *pwd, size_t pwd_length,
37
37
  uint8_t *salt, uint32_t saltlen, uint32_t t_cost, uint32_t m_cost,
38
- uint32_t lanes, uint8_t *secret, size_t secretlen)
38
+ uint32_t lanes, uint8_t *secret, size_t secretlen, uint32_t version)
39
39
  {
40
40
  uint8_t hash[OUT_LEN];
41
41
  argon2_context context;
@@ -65,7 +65,7 @@ unsigned int argon2_wrap(char *out, const char *pwd, size_t pwd_length,
65
65
  context.allocate_cbk = NULL;
66
66
  context.free_cbk = NULL;
67
67
  context.flags = 0;
68
- context.version = ARGON2_VERSION_13;
68
+ context.version = version;
69
69
 
70
70
  int result = argon2i_ctx(&context);
71
71
  if (result != ARGON2_OK)
@@ -75,6 +75,17 @@ unsigned int argon2_wrap(char *out, const char *pwd, size_t pwd_length,
75
75
  return ARGON2_OK;
76
76
  }
77
77
 
78
+ /* Since all new hashes will use latest version, this wraps the
79
+ * function including the version
80
+ */
81
+ int argon2_wrap(char *out, const char *pwd, size_t pwd_length,
82
+ uint8_t *salt, uint32_t saltlen, uint32_t t_cost, uint32_t m_cost,
83
+ uint32_t lanes, uint8_t *secret, size_t secretlen)
84
+ {
85
+ return argon2_wrap_version(out, pwd, pwd_length, salt, saltlen,
86
+ t_cost, m_cost, lanes, secret, secretlen, ARGON2_VERSION_13);
87
+ }
88
+
78
89
  int wrap_argon2_verify(const char *encoded, const char *pwd,
79
90
  const size_t pwdlen,
80
91
  uint8_t *secret, size_t secretlen)
@@ -111,8 +122,9 @@ int wrap_argon2_verify(const char *encoded, const char *pwd,
111
122
  return ARGON2_DECODING_FAIL;
112
123
  }
113
124
 
114
- ret = argon2_wrap(out, pwd, pwdlen, ctx.salt, ctx.saltlen, ctx.t_cost,
115
- ctx.m_cost, ctx.lanes, secret, secretlen);
125
+ ret = argon2_wrap_version(out, pwd, pwdlen, ctx.salt, ctx.saltlen,
126
+ ctx.t_cost, ctx.m_cost, ctx.lanes, secret, secretlen,
127
+ ctx.version);
116
128
 
117
129
  free(ctx.salt);
118
130
 
@@ -1,5 +1,10 @@
1
+ # Export ignore
1
2
  .gitattributes export-ignore
2
3
  .gitignore export-ignore
3
4
  .travis.yml export-ignore
4
5
  appveyor.yml export-ignore
5
6
  export.sh export-ignore
7
+ latex/* export-ignore
8
+
9
+ # Linguist documentation
10
+ latex/* linguist-documentation
@@ -0,0 +1,18 @@
1
+ TEX = pdflatex
2
+ BIB = bibtex
3
+
4
+ PROJECT = argon2-specs
5
+
6
+ .PHONY: all clean update
7
+
8
+ all:
9
+ $(TEX) $(PROJECT).tex
10
+ $(BIB) $(PROJECT).aux
11
+ $(TEX) $(PROJECT).tex
12
+ $(TEX) $(PROJECT).tex
13
+
14
+ clean:
15
+ rm -rf *.aux *.bbl *.blg *.log *.out *.pdf *.toc *~
16
+
17
+ update:
18
+ mv $(PROJECT).pdf ./../$(PROJECT).pdf
@@ -72,6 +72,10 @@ int argon2_ctx(argon2_context *context, argon2_type type) {
72
72
  instance.threads = context->threads;
73
73
  instance.type = type;
74
74
 
75
+ if (instance.threads > instance.lanes) {
76
+ instance.threads = instance.lanes;
77
+ }
78
+
75
79
  /* 3. Initialization: Hashing inputs, allocating memory, filling first
76
80
  * blocks
77
81
  */
@@ -104,6 +108,14 @@ int argon2_hash(const uint32_t t_cost, const uint32_t m_cost,
104
108
  int result;
105
109
  uint8_t *out;
106
110
 
111
+ if (pwdlen > ARGON2_MAX_PWD_LENGTH) {
112
+ return ARGON2_PWD_TOO_LONG;
113
+ }
114
+
115
+ if (saltlen > ARGON2_MAX_SALT_LENGTH) {
116
+ return ARGON2_SALT_TOO_LONG;
117
+ }
118
+
107
119
  if (hashlen > ARGON2_MAX_OUTLEN) {
108
120
  return ARGON2_OUTPUT_TOO_LONG;
109
121
  }
@@ -245,6 +257,10 @@ int argon2_verify(const char *encoded, const void *pwd, const size_t pwdlen,
245
257
  size_t encoded_len;
246
258
  uint32_t max_field_len;
247
259
 
260
+ if (pwdlen > ARGON2_MAX_PWD_LENGTH) {
261
+ return ARGON2_PWD_TOO_LONG;
262
+ }
263
+
248
264
  if (encoded == NULL) {
249
265
  return ARGON2_DECODING_FAIL;
250
266
  }
@@ -268,7 +284,7 @@ int argon2_verify(const char *encoded, const void *pwd, const size_t pwdlen,
268
284
  }
269
285
 
270
286
  ctx.pwd = (uint8_t *)pwd;
271
- ctx.pwdlen = pwdlen;
287
+ ctx.pwdlen = (uint32_t)pwdlen;
272
288
 
273
289
  ret = decode_string(&ctx, encoded, type);
274
290
  if (ret != ARGON2_OK) {
@@ -288,6 +288,19 @@ int decode_string(argon2_context *ctx, const char *str, argon2_type type) {
288
288
  (x) = dec_x; \
289
289
  } while ((void)0, 0)
290
290
 
291
+
292
+ /* Decoding prefix into uint32_t decimal */
293
+ #define DECIMAL_U32(x) \
294
+ do { \
295
+ unsigned long dec_x; \
296
+ str = decode_decimal(str, &dec_x); \
297
+ if (str == NULL || dec_x > UINT32_MAX) { \
298
+ return ARGON2_DECODING_FAIL; \
299
+ } \
300
+ (x) = (uint32_t)dec_x; \
301
+ } while ((void)0, 0)
302
+
303
+
291
304
  /* Decoding base64 into a binary buffer */
292
305
  #define BIN(buf, max_len, len) \
293
306
  do { \
@@ -315,14 +328,14 @@ int decode_string(argon2_context *ctx, const char *str, argon2_type type) {
315
328
 
316
329
  /* Reading the version number if the default is suppressed */
317
330
  ctx->version = ARGON2_VERSION_10;
318
- CC_opt("$v=", DECIMAL(ctx->version));
331
+ CC_opt("$v=", DECIMAL_U32(ctx->version));
319
332
 
320
333
  CC("$m=");
321
- DECIMAL(ctx->m_cost);
334
+ DECIMAL_U32(ctx->m_cost);
322
335
  CC(",t=");
323
- DECIMAL(ctx->t_cost);
336
+ DECIMAL_U32(ctx->t_cost);
324
337
  CC(",p=");
325
- DECIMAL(ctx->lanes);
338
+ DECIMAL_U32(ctx->lanes);
326
339
  ctx->threads = ctx->lanes;
327
340
 
328
341
  CC("$");
@@ -20,13 +20,22 @@
20
20
  #include <stdlib.h>
21
21
 
22
22
  #include "argon2.h"
23
- #include "opt.h"
23
+ #include "core.h"
24
24
 
25
25
  #include "blake2/blake2.h"
26
26
  #include "blake2/blamka-round-opt.h"
27
27
 
28
- void fill_block(__m128i *state, const block *ref_block, block *next_block,
29
- int with_xor) {
28
+ /*
29
+ * Function fills a new memory block and optionally XORs the old block over the new one.
30
+ * Memory must be initialized.
31
+ * @param state Pointer to the just produced block. Content will be updated(!)
32
+ * @param ref_block Pointer to the reference block
33
+ * @param next_block Pointer to the block to be XORed over. May coincide with @ref_block
34
+ * @param with_xor Whether to XOR into the new block (1) or just overwrite (0)
35
+ * @pre all block pointers must be valid
36
+ */
37
+ static void fill_block(__m128i *state, const block *ref_block,
38
+ block *next_block, int with_xor) {
30
39
  __m128i block_XY[ARGON2_OWORDS_IN_BLOCK];
31
40
  unsigned int i;
32
41
 
@@ -20,15 +20,24 @@
20
20
  #include <stdlib.h>
21
21
 
22
22
  #include "argon2.h"
23
- #include "ref.h"
23
+ #include "core.h"
24
24
 
25
25
  #include "blake2/blamka-round-ref.h"
26
26
  #include "blake2/blake2-impl.h"
27
27
  #include "blake2/blake2.h"
28
28
 
29
29
 
30
- void fill_block(const block *prev_block, const block *ref_block,
31
- block *next_block, int with_xor) {
30
+ /*
31
+ * Function fills a new memory block and optionally XORs the old block over the new one.
32
+ * @next_block must be initialized.
33
+ * @param prev_block Pointer to the previous block
34
+ * @param ref_block Pointer to the reference block
35
+ * @param next_block Pointer to the block to be constructed
36
+ * @param with_xor Whether to XOR into the new block (1) or just overwrite (0)
37
+ * @pre all block pointers must be valid
38
+ */
39
+ static void fill_block(const block *prev_block, const block *ref_block,
40
+ block *next_block, int with_xor) {
32
41
  block blockR, block_tmp;
33
42
  unsigned i;
34
43
 
@@ -22,7 +22,7 @@ module Argon2
22
22
  # uint8_t *secret, uint32_t secretlen)
23
23
  attach_function :argon2_wrap, [
24
24
  :pointer, :pointer, :size_t, :pointer, :uint, :uint,
25
- :uint, :uint, :pointer, :size_t], :uint, :blocking => true
25
+ :uint, :uint, :pointer, :size_t], :int, :blocking => true
26
26
 
27
27
  # int argon2i_verify(const char *encoded, const void *pwd,
28
28
  # const size_t pwdlen);
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
  # Standard Gem version constant.
3
3
  module Argon2
4
- VERSION = "1.1.2".freeze
4
+ VERSION = "1.1.3".freeze
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: argon2
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.2
4
+ version: 1.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Technion
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-02-25 00:00:00.000000000 Z
11
+ date: 2017-04-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ffi
@@ -144,7 +144,6 @@ files:
144
144
  - ext/argon2_wrap/Makefile
145
145
  - ext/argon2_wrap/argon_wrap.c
146
146
  - ext/argon2_wrap/extconf.rb
147
- - ext/argon2_wrap/libargon2_wrap.so
148
147
  - ext/argon2_wrap/test.c
149
148
  - ext/argon2_wrap/tests
150
149
  - ext/phc-winner-argon2/.git
@@ -177,7 +176,8 @@ files:
177
176
  - ext/phc-winner-argon2/kats/test.ps1
178
177
  - ext/phc-winner-argon2/kats/test.sh
179
178
  - ext/phc-winner-argon2/latex/IEEEtran.cls
180
- - ext/phc-winner-argon2/latex/argon2-spec.tex
179
+ - ext/phc-winner-argon2/latex/Makefile
180
+ - ext/phc-winner-argon2/latex/argon2-specs.tex
181
181
  - ext/phc-winner-argon2/latex/pics/argon2-par.pdf
182
182
  - ext/phc-winner-argon2/latex/pics/compression.pdf
183
183
  - ext/phc-winner-argon2/latex/pics/generic.pdf
@@ -200,9 +200,7 @@ files:
200
200
  - ext/phc-winner-argon2/src/genkat.c
201
201
  - ext/phc-winner-argon2/src/genkat.h
202
202
  - ext/phc-winner-argon2/src/opt.c
203
- - ext/phc-winner-argon2/src/opt.h
204
203
  - ext/phc-winner-argon2/src/ref.c
205
- - ext/phc-winner-argon2/src/ref.h
206
204
  - ext/phc-winner-argon2/src/run.c
207
205
  - ext/phc-winner-argon2/src/test.c
208
206
  - ext/phc-winner-argon2/src/thread.c
@@ -1,35 +0,0 @@
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
- #ifndef ARGON2_OPT_H
19
- #define ARGON2_OPT_H
20
-
21
- #include "core.h"
22
- #include <emmintrin.h>
23
-
24
- /*
25
- * Function fills a new memory block and optionally XORs the old block over the new one.
26
- * Memory must be initialized.
27
- * @param state Pointer to the just produced block. Content will be updated(!)
28
- * @param ref_block Pointer to the reference block
29
- * @param next_block Pointer to the block to be XORed over. May coincide with @ref_block
30
- * @param with_xor Whether to XOR into the new block (1) or just overwrite (0)
31
- * @pre all block pointers must be valid
32
- */
33
- void fill_block(__m128i *s, const block *ref_block, block *next_block, int with_xor);
34
-
35
- #endif /* ARGON2_OPT_H */
@@ -1,35 +0,0 @@
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
- #ifndef ARGON2_REF_H
19
- #define ARGON2_REF_H
20
-
21
- #include "core.h"
22
-
23
- /*
24
- * Function fills a new memory block and optionally XORs the old block over the new one.
25
- * @next_block must be initialized.
26
- * @param prev_block Pointer to the previous block
27
- * @param ref_block Pointer to the reference block
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)
30
- * @pre all block pointers must be valid
31
- */
32
- void fill_block(const block *prev_block, const block *ref_block,
33
- block *next_block, int with_xor);
34
-
35
- #endif /* ARGON2_REF_H */