sorcery-argon2 1.0.0 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/ruby.yml +0 -2
- data/.rubocop.yml +34 -2
- data/CHANGELOG.md +4 -0
- data/MAINTAINING.md +8 -3
- data/bin/setup +3 -0
- data/ext/phc-winner-argon2/.gitattributes +10 -0
- data/ext/phc-winner-argon2/.gitignore +22 -0
- data/ext/phc-winner-argon2/.travis.yml +25 -0
- data/ext/phc-winner-argon2/Argon2.sln +158 -0
- data/ext/phc-winner-argon2/CHANGELOG.md +32 -0
- data/ext/phc-winner-argon2/LICENSE +314 -0
- data/ext/phc-winner-argon2/Makefile +255 -0
- data/ext/phc-winner-argon2/Package.swift +46 -0
- data/ext/phc-winner-argon2/README.md +303 -0
- data/ext/phc-winner-argon2/appveyor.yml +25 -0
- data/ext/phc-winner-argon2/argon2-specs.pdf +0 -0
- data/ext/phc-winner-argon2/export.sh +7 -0
- data/ext/phc-winner-argon2/include/argon2.h +437 -0
- data/ext/phc-winner-argon2/kats/argon2d +12304 -0
- data/ext/phc-winner-argon2/kats/argon2d.shasum +1 -0
- data/ext/phc-winner-argon2/kats/argon2d_v16 +12304 -0
- data/ext/phc-winner-argon2/kats/argon2d_v16.shasum +1 -0
- data/ext/phc-winner-argon2/kats/argon2i +12304 -0
- data/ext/phc-winner-argon2/kats/argon2i.shasum +1 -0
- data/ext/phc-winner-argon2/kats/argon2i_v16 +12304 -0
- data/ext/phc-winner-argon2/kats/argon2i_v16.shasum +1 -0
- data/ext/phc-winner-argon2/kats/argon2id +12304 -0
- data/ext/phc-winner-argon2/kats/argon2id.shasum +1 -0
- data/ext/phc-winner-argon2/kats/argon2id_v16 +12304 -0
- data/ext/phc-winner-argon2/kats/argon2id_v16.shasum +1 -0
- data/ext/phc-winner-argon2/kats/check-sums.ps1 +42 -0
- data/ext/phc-winner-argon2/kats/check-sums.sh +13 -0
- data/ext/phc-winner-argon2/kats/test.ps1 +50 -0
- data/ext/phc-winner-argon2/kats/test.sh +49 -0
- data/ext/phc-winner-argon2/latex/IEEEtran.cls +6347 -0
- data/ext/phc-winner-argon2/latex/Makefile +18 -0
- data/ext/phc-winner-argon2/latex/argon2-specs.tex +920 -0
- data/ext/phc-winner-argon2/latex/pics/argon2-par.pdf +0 -0
- data/ext/phc-winner-argon2/latex/pics/compression.pdf +0 -0
- data/ext/phc-winner-argon2/latex/pics/generic.pdf +0 -0
- data/ext/phc-winner-argon2/latex/pics/power-distribution.jpg +0 -0
- data/ext/phc-winner-argon2/latex/tradeoff.bib +822 -0
- data/ext/phc-winner-argon2/libargon2.pc.in +18 -0
- data/ext/phc-winner-argon2/man/argon2.1 +57 -0
- data/ext/phc-winner-argon2/src/argon2.c +452 -0
- data/ext/phc-winner-argon2/src/bench.c +111 -0
- data/ext/phc-winner-argon2/src/blake2/blake2-impl.h +156 -0
- data/ext/phc-winner-argon2/src/blake2/blake2.h +89 -0
- data/ext/phc-winner-argon2/src/blake2/blake2b.c +390 -0
- data/ext/phc-winner-argon2/src/blake2/blamka-round-opt.h +471 -0
- data/ext/phc-winner-argon2/src/blake2/blamka-round-ref.h +56 -0
- data/ext/phc-winner-argon2/src/core.c +648 -0
- data/ext/phc-winner-argon2/src/core.h +228 -0
- data/ext/phc-winner-argon2/src/encoding.c +463 -0
- data/ext/phc-winner-argon2/src/encoding.h +57 -0
- data/ext/phc-winner-argon2/src/genkat.c +213 -0
- data/ext/phc-winner-argon2/src/genkat.h +51 -0
- data/ext/phc-winner-argon2/src/opt.c +283 -0
- data/ext/phc-winner-argon2/src/ref.c +194 -0
- data/ext/phc-winner-argon2/src/run.c +337 -0
- data/ext/phc-winner-argon2/src/test.c +289 -0
- data/ext/phc-winner-argon2/src/thread.c +57 -0
- data/ext/phc-winner-argon2/src/thread.h +67 -0
- data/ext/phc-winner-argon2/vs2015/Argon2Opt/Argon2Opt.vcxproj +231 -0
- data/ext/phc-winner-argon2/vs2015/Argon2Opt/Argon2Opt.vcxproj.filters +69 -0
- data/ext/phc-winner-argon2/vs2015/Argon2OptBench/Argon2OptBench.vcxproj +231 -0
- data/ext/phc-winner-argon2/vs2015/Argon2OptBench/Argon2OptBench.vcxproj.filters +69 -0
- data/ext/phc-winner-argon2/vs2015/Argon2OptDll/Argon2OptDll.vcxproj +230 -0
- data/ext/phc-winner-argon2/vs2015/Argon2OptDll/Argon2OptDll.vcxproj.filters +66 -0
- data/ext/phc-winner-argon2/vs2015/Argon2OptGenKAT/Argon2OptGenKAT.vcxproj +244 -0
- data/ext/phc-winner-argon2/vs2015/Argon2OptGenKAT/Argon2OptGenKAT.vcxproj.filters +72 -0
- data/ext/phc-winner-argon2/vs2015/Argon2OptTestCI/Argon2OptTestCI.vcxproj +235 -0
- data/ext/phc-winner-argon2/vs2015/Argon2OptTestCI/Argon2OptTestCI.vcxproj.filters +69 -0
- data/ext/phc-winner-argon2/vs2015/Argon2Ref/Argon2Ref.vcxproj +243 -0
- data/ext/phc-winner-argon2/vs2015/Argon2Ref/Argon2Ref.vcxproj.filters +69 -0
- data/ext/phc-winner-argon2/vs2015/Argon2RefBench/Argon2RefBench.vcxproj +231 -0
- data/ext/phc-winner-argon2/vs2015/Argon2RefBench/Argon2RefBench.vcxproj.filters +69 -0
- data/ext/phc-winner-argon2/vs2015/Argon2RefDll/Argon2RefDll.vcxproj +230 -0
- data/ext/phc-winner-argon2/vs2015/Argon2RefDll/Argon2RefDll.vcxproj.filters +66 -0
- data/ext/phc-winner-argon2/vs2015/Argon2RefGenKAT/Argon2RefGenKAT.vcxproj +232 -0
- data/ext/phc-winner-argon2/vs2015/Argon2RefGenKAT/Argon2RefGenKAT.vcxproj.filters +72 -0
- data/ext/phc-winner-argon2/vs2015/Argon2RefTestCI/Argon2RefTestCI.vcxproj +231 -0
- data/ext/phc-winner-argon2/vs2015/Argon2RefTestCI/Argon2RefTestCI.vcxproj.filters +69 -0
- data/lib/argon2/ffi_engine.rb +4 -4
- data/lib/argon2/password.rb +11 -3
- data/lib/argon2/version.rb +1 -1
- metadata +84 -3
@@ -0,0 +1,289 @@
|
|
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 : https://creativecommons.org/publicdomain/zero/1.0
|
12
|
+
* - Apache 2.0 : https://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
|
+
#include <stdio.h>
|
19
|
+
#include <stdint.h>
|
20
|
+
#include <stdlib.h>
|
21
|
+
#include <string.h>
|
22
|
+
#include <time.h>
|
23
|
+
#include <assert.h>
|
24
|
+
|
25
|
+
#include "argon2.h"
|
26
|
+
|
27
|
+
#define OUT_LEN 32
|
28
|
+
#define ENCODED_LEN 108
|
29
|
+
|
30
|
+
/* Test harness will assert:
|
31
|
+
* argon2_hash() returns ARGON2_OK
|
32
|
+
* HEX output matches expected
|
33
|
+
* encoded output matches expected
|
34
|
+
* argon2_verify() correctly verifies value
|
35
|
+
*/
|
36
|
+
|
37
|
+
void hashtest(uint32_t version, uint32_t t, uint32_t m, uint32_t p, char *pwd,
|
38
|
+
char *salt, char *hexref, char *mcfref, argon2_type type) {
|
39
|
+
unsigned char out[OUT_LEN];
|
40
|
+
unsigned char hex_out[OUT_LEN * 2 + 4];
|
41
|
+
char encoded[ENCODED_LEN];
|
42
|
+
int ret, i;
|
43
|
+
|
44
|
+
printf("Hash test: $v=%d t=%d, m=%d, p=%d, pass=%s, salt=%s: ", version,
|
45
|
+
t, m, p, pwd, salt);
|
46
|
+
|
47
|
+
ret = argon2_hash(t, 1 << m, p, pwd, strlen(pwd), salt, strlen(salt), out,
|
48
|
+
OUT_LEN, encoded, ENCODED_LEN, type, version);
|
49
|
+
assert(ret == ARGON2_OK);
|
50
|
+
|
51
|
+
for (i = 0; i < OUT_LEN; ++i)
|
52
|
+
sprintf((char *)(hex_out + i * 2), "%02x", out[i]);
|
53
|
+
assert(memcmp(hex_out, hexref, OUT_LEN * 2) == 0);
|
54
|
+
|
55
|
+
if (ARGON2_VERSION_NUMBER == version) {
|
56
|
+
assert(memcmp(encoded, mcfref, strlen(mcfref)) == 0);
|
57
|
+
}
|
58
|
+
|
59
|
+
ret = argon2_verify(encoded, pwd, strlen(pwd), type);
|
60
|
+
assert(ret == ARGON2_OK);
|
61
|
+
ret = argon2_verify(mcfref, pwd, strlen(pwd), type);
|
62
|
+
assert(ret == ARGON2_OK);
|
63
|
+
|
64
|
+
printf("PASS\n");
|
65
|
+
}
|
66
|
+
|
67
|
+
int main() {
|
68
|
+
int ret;
|
69
|
+
unsigned char out[OUT_LEN];
|
70
|
+
char const *msg;
|
71
|
+
int version;
|
72
|
+
|
73
|
+
version = ARGON2_VERSION_10;
|
74
|
+
printf("Test Argon2i version number: %02x\n", version);
|
75
|
+
|
76
|
+
/* Multiple test cases for various input values */
|
77
|
+
hashtest(version, 2, 16, 1, "password", "somesalt",
|
78
|
+
"f6c4db4a54e2a370627aff3db6176b94a2a209a62c8e36152711802f7b30c694",
|
79
|
+
"$argon2i$m=65536,t=2,p=1$c29tZXNhbHQ"
|
80
|
+
"$9sTbSlTio3Biev89thdrlKKiCaYsjjYVJxGAL3swxpQ", Argon2_i);
|
81
|
+
#ifdef TEST_LARGE_RAM
|
82
|
+
hashtest(version, 2, 20, 1, "password", "somesalt",
|
83
|
+
"9690ec55d28d3ed32562f2e73ea62b02b018757643a2ae6e79528459de8106e9",
|
84
|
+
"$argon2i$m=1048576,t=2,p=1$c29tZXNhbHQ"
|
85
|
+
"$lpDsVdKNPtMlYvLnPqYrArAYdXZDoq5ueVKEWd6BBuk", Argon2_i);
|
86
|
+
#endif
|
87
|
+
hashtest(version, 2, 18, 1, "password", "somesalt",
|
88
|
+
"3e689aaa3d28a77cf2bc72a51ac53166761751182f1ee292e3f677a7da4c2467",
|
89
|
+
"$argon2i$m=262144,t=2,p=1$c29tZXNhbHQ"
|
90
|
+
"$Pmiaqj0op3zyvHKlGsUxZnYXURgvHuKS4/Z3p9pMJGc", Argon2_i);
|
91
|
+
hashtest(version, 2, 8, 1, "password", "somesalt",
|
92
|
+
"fd4dd83d762c49bdeaf57c47bdcd0c2f1babf863fdeb490df63ede9975fccf06",
|
93
|
+
"$argon2i$m=256,t=2,p=1$c29tZXNhbHQ"
|
94
|
+
"$/U3YPXYsSb3q9XxHvc0MLxur+GP960kN9j7emXX8zwY", Argon2_i);
|
95
|
+
hashtest(version, 2, 8, 2, "password", "somesalt",
|
96
|
+
"b6c11560a6a9d61eac706b79a2f97d68b4463aa3ad87e00c07e2b01e90c564fb",
|
97
|
+
"$argon2i$m=256,t=2,p=2$c29tZXNhbHQ"
|
98
|
+
"$tsEVYKap1h6scGt5ovl9aLRGOqOth+AMB+KwHpDFZPs", Argon2_i);
|
99
|
+
hashtest(version, 1, 16, 1, "password", "somesalt",
|
100
|
+
"81630552b8f3b1f48cdb1992c4c678643d490b2b5eb4ff6c4b3438b5621724b2",
|
101
|
+
"$argon2i$m=65536,t=1,p=1$c29tZXNhbHQ"
|
102
|
+
"$gWMFUrjzsfSM2xmSxMZ4ZD1JCytetP9sSzQ4tWIXJLI", Argon2_i);
|
103
|
+
hashtest(version, 4, 16, 1, "password", "somesalt",
|
104
|
+
"f212f01615e6eb5d74734dc3ef40ade2d51d052468d8c69440a3a1f2c1c2847b",
|
105
|
+
"$argon2i$m=65536,t=4,p=1$c29tZXNhbHQ"
|
106
|
+
"$8hLwFhXm6110c03D70Ct4tUdBSRo2MaUQKOh8sHChHs", Argon2_i);
|
107
|
+
hashtest(version, 2, 16, 1, "differentpassword", "somesalt",
|
108
|
+
"e9c902074b6754531a3a0be519e5baf404b30ce69b3f01ac3bf21229960109a3",
|
109
|
+
"$argon2i$m=65536,t=2,p=1$c29tZXNhbHQ"
|
110
|
+
"$6ckCB0tnVFMaOgvlGeW69ASzDOabPwGsO/ISKZYBCaM", Argon2_i);
|
111
|
+
hashtest(version, 2, 16, 1, "password", "diffsalt",
|
112
|
+
"79a103b90fe8aef8570cb31fc8b22259778916f8336b7bdac3892569d4f1c497",
|
113
|
+
"$argon2i$m=65536,t=2,p=1$ZGlmZnNhbHQ"
|
114
|
+
"$eaEDuQ/orvhXDLMfyLIiWXeJFvgza3vaw4kladTxxJc", Argon2_i);
|
115
|
+
|
116
|
+
/* Error state tests */
|
117
|
+
|
118
|
+
/* Handle an invalid encoding correctly (it is missing a $) */
|
119
|
+
ret = argon2_verify("$argon2i$m=65536,t=2,p=1c29tZXNhbHQ"
|
120
|
+
"$9sTbSlTio3Biev89thdrlKKiCaYsjjYVJxGAL3swxpQ",
|
121
|
+
"password", strlen("password"), Argon2_i);
|
122
|
+
assert(ret == ARGON2_DECODING_FAIL);
|
123
|
+
printf("Recognise an invalid encoding: PASS\n");
|
124
|
+
|
125
|
+
/* Handle an invalid encoding correctly (it is missing a $) */
|
126
|
+
ret = argon2_verify("$argon2i$m=65536,t=2,p=1$c29tZXNhbHQ"
|
127
|
+
"9sTbSlTio3Biev89thdrlKKiCaYsjjYVJxGAL3swxpQ",
|
128
|
+
"password", strlen("password"), Argon2_i);
|
129
|
+
assert(ret == ARGON2_DECODING_FAIL);
|
130
|
+
printf("Recognise an invalid encoding: PASS\n");
|
131
|
+
|
132
|
+
/* Handle an invalid encoding correctly (salt is too short) */
|
133
|
+
ret = argon2_verify("$argon2i$m=65536,t=2,p=1$"
|
134
|
+
"$9sTbSlTio3Biev89thdrlKKiCaYsjjYVJxGAL3swxpQ",
|
135
|
+
"password", strlen("password"), Argon2_i);
|
136
|
+
assert(ret == ARGON2_SALT_TOO_SHORT);
|
137
|
+
printf("Recognise an invalid salt in encoding: PASS\n");
|
138
|
+
|
139
|
+
/* Handle an mismatching hash (the encoded password is "passwore") */
|
140
|
+
ret = argon2_verify("$argon2i$m=65536,t=2,p=1$c29tZXNhbHQ"
|
141
|
+
"$b2G3seW+uPzerwQQC+/E1K50CLLO7YXy0JRcaTuswRo",
|
142
|
+
"password", strlen("password"), Argon2_i);
|
143
|
+
assert(ret == ARGON2_VERIFY_MISMATCH);
|
144
|
+
printf("Verify with mismatched password: PASS\n");
|
145
|
+
|
146
|
+
msg = argon2_error_message(ARGON2_DECODING_FAIL);
|
147
|
+
assert(strcmp(msg, "Decoding failed") == 0);
|
148
|
+
printf("Decode an error message: PASS\n");
|
149
|
+
|
150
|
+
printf("\n");
|
151
|
+
|
152
|
+
version = ARGON2_VERSION_NUMBER;
|
153
|
+
printf("Test Argon2i version number: %02x\n", version);
|
154
|
+
|
155
|
+
/* Multiple test cases for various input values */
|
156
|
+
hashtest(version, 2, 16, 1, "password", "somesalt",
|
157
|
+
"c1628832147d9720c5bd1cfd61367078729f6dfb6f8fea9ff98158e0d7816ed0",
|
158
|
+
"$argon2i$v=19$m=65536,t=2,p=1$c29tZXNhbHQ"
|
159
|
+
"$wWKIMhR9lyDFvRz9YTZweHKfbftvj+qf+YFY4NeBbtA", Argon2_i);
|
160
|
+
#ifdef TEST_LARGE_RAM
|
161
|
+
hashtest(version, 2, 20, 1, "password", "somesalt",
|
162
|
+
"d1587aca0922c3b5d6a83edab31bee3c4ebaef342ed6127a55d19b2351ad1f41",
|
163
|
+
"$argon2i$v=19$m=1048576,t=2,p=1$c29tZXNhbHQ"
|
164
|
+
"$0Vh6ygkiw7XWqD7asxvuPE667zQu1hJ6VdGbI1GtH0E", Argon2_i);
|
165
|
+
#endif
|
166
|
+
hashtest(version, 2, 18, 1, "password", "somesalt",
|
167
|
+
"296dbae80b807cdceaad44ae741b506f14db0959267b183b118f9b24229bc7cb",
|
168
|
+
"$argon2i$v=19$m=262144,t=2,p=1$c29tZXNhbHQ"
|
169
|
+
"$KW266AuAfNzqrUSudBtQbxTbCVkmexg7EY+bJCKbx8s", Argon2_i);
|
170
|
+
hashtest(version, 2, 8, 1, "password", "somesalt",
|
171
|
+
"89e9029f4637b295beb027056a7336c414fadd43f6b208645281cb214a56452f",
|
172
|
+
"$argon2i$v=19$m=256,t=2,p=1$c29tZXNhbHQ"
|
173
|
+
"$iekCn0Y3spW+sCcFanM2xBT63UP2sghkUoHLIUpWRS8", Argon2_i);
|
174
|
+
hashtest(version, 2, 8, 2, "password", "somesalt",
|
175
|
+
"4ff5ce2769a1d7f4c8a491df09d41a9fbe90e5eb02155a13e4c01e20cd4eab61",
|
176
|
+
"$argon2i$v=19$m=256,t=2,p=2$c29tZXNhbHQ"
|
177
|
+
"$T/XOJ2mh1/TIpJHfCdQan76Q5esCFVoT5MAeIM1Oq2E", Argon2_i);
|
178
|
+
hashtest(version, 1, 16, 1, "password", "somesalt",
|
179
|
+
"d168075c4d985e13ebeae560cf8b94c3b5d8a16c51916b6f4ac2da3ac11bbecf",
|
180
|
+
"$argon2i$v=19$m=65536,t=1,p=1$c29tZXNhbHQ"
|
181
|
+
"$0WgHXE2YXhPr6uVgz4uUw7XYoWxRkWtvSsLaOsEbvs8", Argon2_i);
|
182
|
+
hashtest(version, 4, 16, 1, "password", "somesalt",
|
183
|
+
"aaa953d58af3706ce3df1aefd4a64a84e31d7f54175231f1285259f88174ce5b",
|
184
|
+
"$argon2i$v=19$m=65536,t=4,p=1$c29tZXNhbHQ"
|
185
|
+
"$qqlT1YrzcGzj3xrv1KZKhOMdf1QXUjHxKFJZ+IF0zls", Argon2_i);
|
186
|
+
hashtest(version, 2, 16, 1, "differentpassword", "somesalt",
|
187
|
+
"14ae8da01afea8700c2358dcef7c5358d9021282bd88663a4562f59fb74d22ee",
|
188
|
+
"$argon2i$v=19$m=65536,t=2,p=1$c29tZXNhbHQ"
|
189
|
+
"$FK6NoBr+qHAMI1jc73xTWNkCEoK9iGY6RWL1n7dNIu4", Argon2_i);
|
190
|
+
hashtest(version, 2, 16, 1, "password", "diffsalt",
|
191
|
+
"b0357cccfbef91f3860b0dba447b2348cbefecadaf990abfe9cc40726c521271",
|
192
|
+
"$argon2i$v=19$m=65536,t=2,p=1$ZGlmZnNhbHQ"
|
193
|
+
"$sDV8zPvvkfOGCw26RHsjSMvv7K2vmQq/6cxAcmxSEnE", Argon2_i);
|
194
|
+
|
195
|
+
|
196
|
+
/* Error state tests */
|
197
|
+
|
198
|
+
/* Handle an invalid encoding correctly (it is missing a $) */
|
199
|
+
ret = argon2_verify("$argon2i$v=19$m=65536,t=2,p=1c29tZXNhbHQ"
|
200
|
+
"$wWKIMhR9lyDFvRz9YTZweHKfbftvj+qf+YFY4NeBbtA",
|
201
|
+
"password", strlen("password"), Argon2_i);
|
202
|
+
assert(ret == ARGON2_DECODING_FAIL);
|
203
|
+
printf("Recognise an invalid encoding: PASS\n");
|
204
|
+
|
205
|
+
/* Handle an invalid encoding correctly (it is missing a $) */
|
206
|
+
ret = argon2_verify("$argon2i$v=19$m=65536,t=2,p=1$c29tZXNhbHQ"
|
207
|
+
"wWKIMhR9lyDFvRz9YTZweHKfbftvj+qf+YFY4NeBbtA",
|
208
|
+
"password", strlen("password"), Argon2_i);
|
209
|
+
assert(ret == ARGON2_DECODING_FAIL);
|
210
|
+
printf("Recognise an invalid encoding: PASS\n");
|
211
|
+
|
212
|
+
/* Handle an invalid encoding correctly (salt is too short) */
|
213
|
+
ret = argon2_verify("$argon2i$v=19$m=65536,t=2,p=1$"
|
214
|
+
"$9sTbSlTio3Biev89thdrlKKiCaYsjjYVJxGAL3swxpQ",
|
215
|
+
"password", strlen("password"), Argon2_i);
|
216
|
+
assert(ret == ARGON2_SALT_TOO_SHORT);
|
217
|
+
printf("Recognise an invalid salt in encoding: PASS\n");
|
218
|
+
|
219
|
+
/* Handle an mismatching hash (the encoded password is "passwore") */
|
220
|
+
ret = argon2_verify("$argon2i$v=19$m=65536,t=2,p=1$c29tZXNhbHQ"
|
221
|
+
"$8iIuixkI73Js3G1uMbezQXD0b8LG4SXGsOwoQkdAQIM",
|
222
|
+
"password", strlen("password"), Argon2_i);
|
223
|
+
assert(ret == ARGON2_VERIFY_MISMATCH);
|
224
|
+
printf("Verify with mismatched password: PASS\n");
|
225
|
+
|
226
|
+
msg = argon2_error_message(ARGON2_DECODING_FAIL);
|
227
|
+
assert(strcmp(msg, "Decoding failed") == 0);
|
228
|
+
printf("Decode an error message: PASS\n\n");
|
229
|
+
|
230
|
+
printf("Test Argon2id version number: %02x\n", version);
|
231
|
+
|
232
|
+
/* Multiple test cases for various input values */
|
233
|
+
hashtest(version, 2, 16, 1, "password", "somesalt",
|
234
|
+
"09316115d5cf24ed5a15a31a3ba326e5cf32edc24702987c02b6566f61913cf7",
|
235
|
+
"$argon2id$v=19$m=65536,t=2,p=1$c29tZXNhbHQ"
|
236
|
+
"$CTFhFdXPJO1aFaMaO6Mm5c8y7cJHAph8ArZWb2GRPPc", Argon2_id);
|
237
|
+
hashtest(version, 2, 18, 1, "password", "somesalt",
|
238
|
+
"78fe1ec91fb3aa5657d72e710854e4c3d9b9198c742f9616c2f085bed95b2e8c",
|
239
|
+
"$argon2id$v=19$m=262144,t=2,p=1$c29tZXNhbHQ"
|
240
|
+
"$eP4eyR+zqlZX1y5xCFTkw9m5GYx0L5YWwvCFvtlbLow", Argon2_id);
|
241
|
+
hashtest(version, 2, 8, 1, "password", "somesalt",
|
242
|
+
"9dfeb910e80bad0311fee20f9c0e2b12c17987b4cac90c2ef54d5b3021c68bfe",
|
243
|
+
"$argon2id$v=19$m=256,t=2,p=1$c29tZXNhbHQ"
|
244
|
+
"$nf65EOgLrQMR/uIPnA4rEsF5h7TKyQwu9U1bMCHGi/4", Argon2_id);
|
245
|
+
hashtest(version, 2, 8, 2, "password", "somesalt",
|
246
|
+
"6d093c501fd5999645e0ea3bf620d7b8be7fd2db59c20d9fff9539da2bf57037",
|
247
|
+
"$argon2id$v=19$m=256,t=2,p=2$c29tZXNhbHQ"
|
248
|
+
"$bQk8UB/VmZZF4Oo79iDXuL5/0ttZwg2f/5U52iv1cDc", Argon2_id);
|
249
|
+
hashtest(version, 1, 16, 1, "password", "somesalt",
|
250
|
+
"f6a5adc1ba723dddef9b5ac1d464e180fcd9dffc9d1cbf76cca2fed795d9ca98",
|
251
|
+
"$argon2id$v=19$m=65536,t=1,p=1$c29tZXNhbHQ"
|
252
|
+
"$9qWtwbpyPd3vm1rB1GThgPzZ3/ydHL92zKL+15XZypg", Argon2_id);
|
253
|
+
hashtest(version, 4, 16, 1, "password", "somesalt",
|
254
|
+
"9025d48e68ef7395cca9079da4c4ec3affb3c8911fe4f86d1a2520856f63172c",
|
255
|
+
"$argon2id$v=19$m=65536,t=4,p=1$c29tZXNhbHQ"
|
256
|
+
"$kCXUjmjvc5XMqQedpMTsOv+zyJEf5PhtGiUghW9jFyw", Argon2_id);
|
257
|
+
hashtest(version, 2, 16, 1, "differentpassword", "somesalt",
|
258
|
+
"0b84d652cf6b0c4beaef0dfe278ba6a80df6696281d7e0d2891b817d8c458fde",
|
259
|
+
"$argon2id$v=19$m=65536,t=2,p=1$c29tZXNhbHQ"
|
260
|
+
"$C4TWUs9rDEvq7w3+J4umqA32aWKB1+DSiRuBfYxFj94", Argon2_id);
|
261
|
+
hashtest(version, 2, 16, 1, "password", "diffsalt",
|
262
|
+
"bdf32b05ccc42eb15d58fd19b1f856b113da1e9a5874fdcc544308565aa8141c",
|
263
|
+
"$argon2id$v=19$m=65536,t=2,p=1$ZGlmZnNhbHQ"
|
264
|
+
"$vfMrBczELrFdWP0ZsfhWsRPaHppYdP3MVEMIVlqoFBw", Argon2_id);
|
265
|
+
|
266
|
+
/* Common error state tests */
|
267
|
+
|
268
|
+
printf("\n");
|
269
|
+
printf("Common error state tests\n");
|
270
|
+
|
271
|
+
ret = argon2_hash(2, 1, 1, "password", strlen("password"),
|
272
|
+
"diffsalt", strlen("diffsalt"),
|
273
|
+
out, OUT_LEN, NULL, 0, Argon2_id, version);
|
274
|
+
assert(ret == ARGON2_MEMORY_TOO_LITTLE);
|
275
|
+
printf("Fail on invalid memory: PASS\n");
|
276
|
+
|
277
|
+
ret = argon2_hash(2, 1 << 12, 1, NULL, strlen("password"),
|
278
|
+
"diffsalt", strlen("diffsalt"),
|
279
|
+
out, OUT_LEN, NULL, 0, Argon2_id, version);
|
280
|
+
assert(ret == ARGON2_PWD_PTR_MISMATCH);
|
281
|
+
printf("Fail on invalid null pointer: PASS\n");
|
282
|
+
|
283
|
+
ret = argon2_hash(2, 1 << 12, 1, "password", strlen("password"), "s", 1,
|
284
|
+
out, OUT_LEN, NULL, 0, Argon2_id, version);
|
285
|
+
assert(ret == ARGON2_SALT_TOO_SHORT);
|
286
|
+
printf("Fail on salt too short: PASS\n");
|
287
|
+
|
288
|
+
return 0;
|
289
|
+
}
|
@@ -0,0 +1,57 @@
|
|
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 : https://creativecommons.org/publicdomain/zero/1.0
|
12
|
+
* - Apache 2.0 : https://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
|
+
|
20
|
+
#include "thread.h"
|
21
|
+
#if defined(_WIN32)
|
22
|
+
#include <windows.h>
|
23
|
+
#endif
|
24
|
+
|
25
|
+
int argon2_thread_create(argon2_thread_handle_t *handle,
|
26
|
+
argon2_thread_func_t func, void *args) {
|
27
|
+
if (NULL == handle || func == NULL) {
|
28
|
+
return -1;
|
29
|
+
}
|
30
|
+
#if defined(_WIN32)
|
31
|
+
*handle = _beginthreadex(NULL, 0, func, args, 0, NULL);
|
32
|
+
return *handle != 0 ? 0 : -1;
|
33
|
+
#else
|
34
|
+
return pthread_create(handle, NULL, func, args);
|
35
|
+
#endif
|
36
|
+
}
|
37
|
+
|
38
|
+
int argon2_thread_join(argon2_thread_handle_t handle) {
|
39
|
+
#if defined(_WIN32)
|
40
|
+
if (WaitForSingleObject((HANDLE)handle, INFINITE) == WAIT_OBJECT_0) {
|
41
|
+
return CloseHandle((HANDLE)handle) != 0 ? 0 : -1;
|
42
|
+
}
|
43
|
+
return -1;
|
44
|
+
#else
|
45
|
+
return pthread_join(handle, NULL);
|
46
|
+
#endif
|
47
|
+
}
|
48
|
+
|
49
|
+
void argon2_thread_exit(void) {
|
50
|
+
#if defined(_WIN32)
|
51
|
+
_endthreadex(0);
|
52
|
+
#else
|
53
|
+
pthread_exit(NULL);
|
54
|
+
#endif
|
55
|
+
}
|
56
|
+
|
57
|
+
#endif /* ARGON2_NO_THREADS */
|
@@ -0,0 +1,67 @@
|
|
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 : https://creativecommons.org/publicdomain/zero/1.0
|
12
|
+
* - Apache 2.0 : https://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_THREAD_H
|
19
|
+
#define ARGON2_THREAD_H
|
20
|
+
|
21
|
+
#if !defined(ARGON2_NO_THREADS)
|
22
|
+
|
23
|
+
/*
|
24
|
+
Here we implement an abstraction layer for the simpĺe requirements
|
25
|
+
of the Argon2 code. We only require 3 primitives---thread creation,
|
26
|
+
joining, and termination---so full emulation of the pthreads API
|
27
|
+
is unwarranted. Currently we wrap pthreads and Win32 threads.
|
28
|
+
|
29
|
+
The API defines 2 types: the function pointer type,
|
30
|
+
argon2_thread_func_t,
|
31
|
+
and the type of the thread handle---argon2_thread_handle_t.
|
32
|
+
*/
|
33
|
+
#if defined(_WIN32)
|
34
|
+
#include <process.h>
|
35
|
+
typedef unsigned(__stdcall *argon2_thread_func_t)(void *);
|
36
|
+
typedef uintptr_t argon2_thread_handle_t;
|
37
|
+
#else
|
38
|
+
#include <pthread.h>
|
39
|
+
typedef void *(*argon2_thread_func_t)(void *);
|
40
|
+
typedef pthread_t argon2_thread_handle_t;
|
41
|
+
#endif
|
42
|
+
|
43
|
+
/* Creates a thread
|
44
|
+
* @param handle pointer to a thread handle, which is the output of this
|
45
|
+
* function. Must not be NULL.
|
46
|
+
* @param func A function pointer for the thread's entry point. Must not be
|
47
|
+
* NULL.
|
48
|
+
* @param args Pointer that is passed as an argument to @func. May be NULL.
|
49
|
+
* @return 0 if @handle and @func are valid pointers and a thread is successfully
|
50
|
+
* created.
|
51
|
+
*/
|
52
|
+
int argon2_thread_create(argon2_thread_handle_t *handle,
|
53
|
+
argon2_thread_func_t func, void *args);
|
54
|
+
|
55
|
+
/* Waits for a thread to terminate
|
56
|
+
* @param handle Handle to a thread created with argon2_thread_create.
|
57
|
+
* @return 0 if @handle is a valid handle, and joining completed successfully.
|
58
|
+
*/
|
59
|
+
int argon2_thread_join(argon2_thread_handle_t handle);
|
60
|
+
|
61
|
+
/* Terminate the current thread. Must be run inside a thread created by
|
62
|
+
* argon2_thread_create.
|
63
|
+
*/
|
64
|
+
void argon2_thread_exit(void);
|
65
|
+
|
66
|
+
#endif /* ARGON2_NO_THREADS */
|
67
|
+
#endif
|
@@ -0,0 +1,231 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
2
|
+
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
3
|
+
<ItemGroup Label="ProjectConfigurations">
|
4
|
+
<ProjectConfiguration Include="Debug|Win32">
|
5
|
+
<Configuration>Debug</Configuration>
|
6
|
+
<Platform>Win32</Platform>
|
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>
|
16
|
+
<ProjectConfiguration Include="Release|Win32">
|
17
|
+
<Configuration>Release</Configuration>
|
18
|
+
<Platform>Win32</Platform>
|
19
|
+
</ProjectConfiguration>
|
20
|
+
<ProjectConfiguration Include="Debug|x64">
|
21
|
+
<Configuration>Debug</Configuration>
|
22
|
+
<Platform>x64</Platform>
|
23
|
+
</ProjectConfiguration>
|
24
|
+
<ProjectConfiguration Include="Release|x64">
|
25
|
+
<Configuration>Release</Configuration>
|
26
|
+
<Platform>x64</Platform>
|
27
|
+
</ProjectConfiguration>
|
28
|
+
</ItemGroup>
|
29
|
+
<PropertyGroup Label="Globals">
|
30
|
+
<ProjectGuid>{CAA75C57-998C-494E-B8A5-5894EF0FC528}</ProjectGuid>
|
31
|
+
<RootNamespace>Argon2Opt</RootNamespace>
|
32
|
+
<WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
|
33
|
+
</PropertyGroup>
|
34
|
+
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
35
|
+
<!-- Set DefaultPlatformToolset to v100 (VS2010) if not defined -->
|
36
|
+
<PropertyGroup Label="EmptyDefaultPlatformToolset">
|
37
|
+
<DefaultPlatformToolset Condition=" '$(DefaultPlatformToolset)' == '' ">v100</DefaultPlatformToolset>
|
38
|
+
</PropertyGroup>
|
39
|
+
<PropertyGroup Label="PlatformToolset">
|
40
|
+
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
|
41
|
+
</PropertyGroup>
|
42
|
+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
43
|
+
<ConfigurationType>Application</ConfigurationType>
|
44
|
+
<UseDebugLibraries>true</UseDebugLibraries>
|
45
|
+
<CharacterSet>MultiByte</CharacterSet>
|
46
|
+
</PropertyGroup>
|
47
|
+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
48
|
+
<ConfigurationType>Application</ConfigurationType>
|
49
|
+
<UseDebugLibraries>false</UseDebugLibraries>
|
50
|
+
<WholeProgramOptimization>true</WholeProgramOptimization>
|
51
|
+
<CharacterSet>MultiByte</CharacterSet>
|
52
|
+
</PropertyGroup>
|
53
|
+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseStatic|Win32'" Label="Configuration">
|
54
|
+
<ConfigurationType>Application</ConfigurationType>
|
55
|
+
<UseDebugLibraries>false</UseDebugLibraries>
|
56
|
+
<WholeProgramOptimization>true</WholeProgramOptimization>
|
57
|
+
<CharacterSet>MultiByte</CharacterSet>
|
58
|
+
</PropertyGroup>
|
59
|
+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
60
|
+
<ConfigurationType>Application</ConfigurationType>
|
61
|
+
<UseDebugLibraries>true</UseDebugLibraries>
|
62
|
+
<CharacterSet>MultiByte</CharacterSet>
|
63
|
+
</PropertyGroup>
|
64
|
+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
65
|
+
<ConfigurationType>Application</ConfigurationType>
|
66
|
+
<UseDebugLibraries>false</UseDebugLibraries>
|
67
|
+
<WholeProgramOptimization>true</WholeProgramOptimization>
|
68
|
+
<CharacterSet>MultiByte</CharacterSet>
|
69
|
+
</PropertyGroup>
|
70
|
+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseStatic|x64'" Label="Configuration">
|
71
|
+
<ConfigurationType>Application</ConfigurationType>
|
72
|
+
<UseDebugLibraries>false</UseDebugLibraries>
|
73
|
+
<WholeProgramOptimization>true</WholeProgramOptimization>
|
74
|
+
<CharacterSet>MultiByte</CharacterSet>
|
75
|
+
</PropertyGroup>
|
76
|
+
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
77
|
+
<ImportGroup Label="ExtensionSettings">
|
78
|
+
</ImportGroup>
|
79
|
+
<ImportGroup Label="Shared">
|
80
|
+
</ImportGroup>
|
81
|
+
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
82
|
+
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
83
|
+
</ImportGroup>
|
84
|
+
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
85
|
+
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
86
|
+
</ImportGroup>
|
87
|
+
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseStatic|Win32'" Label="PropertySheets">
|
88
|
+
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
89
|
+
</ImportGroup>
|
90
|
+
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
91
|
+
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
92
|
+
</ImportGroup>
|
93
|
+
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
94
|
+
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
95
|
+
</ImportGroup>
|
96
|
+
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseStatic|x64'" Label="PropertySheets">
|
97
|
+
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
98
|
+
</ImportGroup>
|
99
|
+
<PropertyGroup Label="UserMacros" />
|
100
|
+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
101
|
+
<OutDir>$(SolutionDir)vs2015\build\</OutDir>
|
102
|
+
<IntDir>$(SolutionDir)vs2015\build\$(ProjectName)\</IntDir>
|
103
|
+
<IncludePath>$(SolutionDir)include;$(IncludePath)</IncludePath>
|
104
|
+
</PropertyGroup>
|
105
|
+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
106
|
+
<OutDir>$(SolutionDir)vs2015\build\</OutDir>
|
107
|
+
<IntDir>$(SolutionDir)vs2015\build\$(ProjectName)\</IntDir>
|
108
|
+
<IncludePath>$(SolutionDir)include;$(IncludePath)</IncludePath>
|
109
|
+
</PropertyGroup>
|
110
|
+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseStatic|Win32'">
|
111
|
+
<OutDir>$(SolutionDir)vs2015\build\</OutDir>
|
112
|
+
<IntDir>$(SolutionDir)vs2015\build\$(ProjectName)\</IntDir>
|
113
|
+
<IncludePath>$(SolutionDir)include;$(IncludePath)</IncludePath>
|
114
|
+
</PropertyGroup>
|
115
|
+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
116
|
+
<OutDir>$(SolutionDir)vs2015\build\</OutDir>
|
117
|
+
<IntDir>$(SolutionDir)vs2015\build\$(ProjectName)\</IntDir>
|
118
|
+
<IncludePath>$(SolutionDir)include;$(IncludePath)</IncludePath>
|
119
|
+
</PropertyGroup>
|
120
|
+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
121
|
+
<OutDir>$(SolutionDir)vs2015\build\</OutDir>
|
122
|
+
<IntDir>$(SolutionDir)vs2015\build\$(ProjectName)\</IntDir>
|
123
|
+
<IncludePath>$(SolutionDir)include;$(IncludePath)</IncludePath>
|
124
|
+
</PropertyGroup>
|
125
|
+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseStatic|x64'">
|
126
|
+
<OutDir>$(SolutionDir)vs2015\build\</OutDir>
|
127
|
+
<IntDir>$(SolutionDir)vs2015\build\$(ProjectName)\</IntDir>
|
128
|
+
<IncludePath>$(SolutionDir)include;$(IncludePath)</IncludePath>
|
129
|
+
</PropertyGroup>
|
130
|
+
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
131
|
+
<ClCompile>
|
132
|
+
<WarningLevel>Level3</WarningLevel>
|
133
|
+
<Optimization>Disabled</Optimization>
|
134
|
+
<SDLCheck>true</SDLCheck>
|
135
|
+
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
136
|
+
</ClCompile>
|
137
|
+
</ItemDefinitionGroup>
|
138
|
+
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
139
|
+
<ClCompile>
|
140
|
+
<WarningLevel>Level3</WarningLevel>
|
141
|
+
<Optimization>Disabled</Optimization>
|
142
|
+
<SDLCheck>true</SDLCheck>
|
143
|
+
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
144
|
+
</ClCompile>
|
145
|
+
</ItemDefinitionGroup>
|
146
|
+
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
147
|
+
<ClCompile>
|
148
|
+
<WarningLevel>Level3</WarningLevel>
|
149
|
+
<Optimization>MaxSpeed</Optimization>
|
150
|
+
<FunctionLevelLinking>true</FunctionLevelLinking>
|
151
|
+
<IntrinsicFunctions>true</IntrinsicFunctions>
|
152
|
+
<SDLCheck>true</SDLCheck>
|
153
|
+
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
154
|
+
</ClCompile>
|
155
|
+
<Link>
|
156
|
+
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
157
|
+
<OptimizeReferences>true</OptimizeReferences>
|
158
|
+
<GenerateDebugInformation>true</GenerateDebugInformation>
|
159
|
+
</Link>
|
160
|
+
</ItemDefinitionGroup>
|
161
|
+
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseStatic|Win32'">
|
162
|
+
<ClCompile>
|
163
|
+
<WarningLevel>Level3</WarningLevel>
|
164
|
+
<Optimization>MaxSpeed</Optimization>
|
165
|
+
<FunctionLevelLinking>true</FunctionLevelLinking>
|
166
|
+
<IntrinsicFunctions>true</IntrinsicFunctions>
|
167
|
+
<SDLCheck>true</SDLCheck>
|
168
|
+
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
169
|
+
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
170
|
+
</ClCompile>
|
171
|
+
<Link>
|
172
|
+
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
173
|
+
<OptimizeReferences>true</OptimizeReferences>
|
174
|
+
<GenerateDebugInformation>true</GenerateDebugInformation>
|
175
|
+
</Link>
|
176
|
+
</ItemDefinitionGroup>
|
177
|
+
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
178
|
+
<ClCompile>
|
179
|
+
<WarningLevel>Level3</WarningLevel>
|
180
|
+
<Optimization>MaxSpeed</Optimization>
|
181
|
+
<FunctionLevelLinking>true</FunctionLevelLinking>
|
182
|
+
<IntrinsicFunctions>true</IntrinsicFunctions>
|
183
|
+
<SDLCheck>true</SDLCheck>
|
184
|
+
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
185
|
+
</ClCompile>
|
186
|
+
<Link>
|
187
|
+
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
188
|
+
<OptimizeReferences>true</OptimizeReferences>
|
189
|
+
<GenerateDebugInformation>true</GenerateDebugInformation>
|
190
|
+
</Link>
|
191
|
+
</ItemDefinitionGroup>
|
192
|
+
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseStatic|x64'">
|
193
|
+
<ClCompile>
|
194
|
+
<WarningLevel>Level3</WarningLevel>
|
195
|
+
<Optimization>MaxSpeed</Optimization>
|
196
|
+
<FunctionLevelLinking>true</FunctionLevelLinking>
|
197
|
+
<IntrinsicFunctions>true</IntrinsicFunctions>
|
198
|
+
<SDLCheck>true</SDLCheck>
|
199
|
+
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
200
|
+
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
201
|
+
</ClCompile>
|
202
|
+
<Link>
|
203
|
+
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
204
|
+
<OptimizeReferences>true</OptimizeReferences>
|
205
|
+
<GenerateDebugInformation>true</GenerateDebugInformation>
|
206
|
+
</Link>
|
207
|
+
</ItemDefinitionGroup>
|
208
|
+
<ItemGroup>
|
209
|
+
<ClInclude Include="..\..\include\argon2.h" />
|
210
|
+
<ClInclude Include="..\..\src\blake2\blake2-impl.h" />
|
211
|
+
<ClInclude Include="..\..\src\blake2\blake2.h" />
|
212
|
+
<ClInclude Include="..\..\src\blake2\blamka-round-opt.h" />
|
213
|
+
<ClInclude Include="..\..\src\blake2\blamka-round-ref.h" />
|
214
|
+
<ClInclude Include="..\..\src\core.h" />
|
215
|
+
<ClInclude Include="..\..\src\encoding.h" />
|
216
|
+
<ClInclude Include="..\..\src\opt.h" />
|
217
|
+
<ClInclude Include="..\..\src\thread.h" />
|
218
|
+
</ItemGroup>
|
219
|
+
<ItemGroup>
|
220
|
+
<ClCompile Include="..\..\src\argon2.c" />
|
221
|
+
<ClCompile Include="..\..\src\blake2\blake2b.c" />
|
222
|
+
<ClCompile Include="..\..\src\core.c" />
|
223
|
+
<ClCompile Include="..\..\src\encoding.c" />
|
224
|
+
<ClCompile Include="..\..\src\opt.c" />
|
225
|
+
<ClCompile Include="..\..\src\run.c" />
|
226
|
+
<ClCompile Include="..\..\src\thread.c" />
|
227
|
+
</ItemGroup>
|
228
|
+
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
229
|
+
<ImportGroup Label="ExtensionTargets">
|
230
|
+
</ImportGroup>
|
231
|
+
</Project>
|