argon2 2.0.0 → 2.1.0
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.
- checksums.yaml +4 -4
- data/.github/workflows/ruby.yml +70 -0
- data/.rubocop.yml +178 -5
- data/Changelog.md +10 -0
- data/Gemfile +2 -0
- data/README.md +29 -17
- data/Rakefile +2 -0
- data/Steepfile +16 -0
- data/argon2.gemspec +13 -7
- data/bin/console +5 -4
- data/bin/setup +6 -2
- data/bin/test +10 -0
- data/ext/argon2_wrap/argon_wrap.c +6 -0
- data/ext/argon2_wrap/extconf.rb +1 -0
- data/ext/argon2_wrap/libargon2_wrap.so +0 -0
- data/ext/argon2_wrap/test.c +0 -1
- data/ext/phc-winner-argon2/.gitignore +1 -0
- data/ext/phc-winner-argon2/Argon2.sln +2 -4
- data/ext/phc-winner-argon2/LICENSE +2 -2
- data/ext/phc-winner-argon2/Makefile +86 -18
- data/ext/phc-winner-argon2/README.md +3 -1
- data/ext/phc-winner-argon2/include/argon2.h +3 -3
- data/ext/phc-winner-argon2/libargon2.pc.in +18 -0
- data/ext/phc-winner-argon2/src/argon2.c +2 -2
- data/ext/phc-winner-argon2/src/bench.c +4 -4
- data/ext/phc-winner-argon2/src/blake2/blake2-impl.h +3 -3
- data/ext/phc-winner-argon2/src/blake2/blake2.h +2 -2
- data/ext/phc-winner-argon2/src/blake2/blake2b.c +2 -2
- data/ext/phc-winner-argon2/src/blake2/blamka-round-opt.h +2 -2
- data/ext/phc-winner-argon2/src/blake2/blamka-round-ref.h +2 -2
- data/ext/phc-winner-argon2/src/core.c +20 -6
- data/ext/phc-winner-argon2/src/core.h +2 -2
- data/ext/phc-winner-argon2/src/encoding.c +2 -2
- data/ext/phc-winner-argon2/src/encoding.h +2 -2
- data/ext/phc-winner-argon2/src/genkat.c +9 -3
- data/ext/phc-winner-argon2/src/genkat.h +2 -2
- data/ext/phc-winner-argon2/src/opt.c +2 -2
- data/ext/phc-winner-argon2/src/ref.c +2 -2
- data/ext/phc-winner-argon2/src/run.c +2 -2
- data/ext/phc-winner-argon2/src/test.c +2 -2
- data/ext/phc-winner-argon2/src/thread.c +2 -2
- data/ext/phc-winner-argon2/src/thread.h +2 -2
- data/ext/phc-winner-argon2/vs2015/Argon2Opt/Argon2Opt.vcxproj +11 -6
- data/ext/phc-winner-argon2/vs2015/Argon2OptBench/Argon2OptBench.vcxproj +11 -6
- data/ext/phc-winner-argon2/vs2015/Argon2OptDll/Argon2OptDll.vcxproj +11 -6
- data/ext/phc-winner-argon2/vs2015/Argon2OptGenKAT/Argon2OptGenKAT.vcxproj +11 -6
- data/ext/phc-winner-argon2/vs2015/Argon2OptTestCI/Argon2OptTestCI.vcxproj +16 -8
- data/ext/phc-winner-argon2/vs2015/Argon2Ref/Argon2Ref.vcxproj +25 -8
- data/ext/phc-winner-argon2/vs2015/Argon2RefBench/Argon2RefBench.vcxproj +11 -6
- data/ext/phc-winner-argon2/vs2015/Argon2RefDll/Argon2RefDll.vcxproj +11 -6
- data/ext/phc-winner-argon2/vs2015/Argon2RefGenKAT/Argon2RefGenKAT.vcxproj +11 -6
- data/ext/phc-winner-argon2/vs2015/Argon2RefTestCI/Argon2RefTestCI.vcxproj +11 -6
- data/lib/argon2/ffi_engine.rb +49 -17
- data/lib/argon2/hash_format.rb +49 -0
- data/lib/argon2/version.rb +1 -1
- data/lib/argon2.rb +19 -8
- data/sig/argon2.rbs +16 -0
- data/sig/constants.rbs +8 -0
- data/sig/version.rbs +4 -0
- metadata +59 -39
- data/.travis.yml +0 -14
- data/ext/argon2_wrap/tests +0 -0
- data/ext/phc-winner-argon2/libargon2.pc +0 -16
@@ -8,8 +8,8 @@
|
|
8
8
|
# License/Waiver or the Apache Public License 2.0, at your option. The terms of
|
9
9
|
# these licenses can be found at:
|
10
10
|
#
|
11
|
-
# - CC0 1.0 Universal :
|
12
|
-
# - Apache 2.0 :
|
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
13
|
#
|
14
14
|
# You should have received a copy of both of these licenses along with this
|
15
15
|
# software. If not, they may be obtained at the above URLs.
|
@@ -18,6 +18,13 @@
|
|
18
18
|
RUN = argon2
|
19
19
|
BENCH = bench
|
20
20
|
GENKAT = genkat
|
21
|
+
ARGON2_VERSION ?= ZERO
|
22
|
+
|
23
|
+
# installation parameters for staging area and final installation path
|
24
|
+
# Note; if Linux and not Debian/Ubuntu version also add lib override to make command-line
|
25
|
+
# for RedHat/Fedora, add: LIBRARY_REL=lib64
|
26
|
+
DESTDIR ?=
|
27
|
+
PREFIX ?= /usr
|
21
28
|
|
22
29
|
# Increment on an ABI breaking change
|
23
30
|
ABI_VERSION = 1
|
@@ -56,40 +63,51 @@ endif
|
|
56
63
|
|
57
64
|
BUILD_PATH := $(shell pwd)
|
58
65
|
KERNEL_NAME := $(shell uname -s)
|
66
|
+
MACHINE_NAME := $(shell uname -m)
|
67
|
+
|
68
|
+
LIB_NAME = argon2
|
69
|
+
PC_NAME = lib$(LIB_NAME).pc
|
70
|
+
PC_SRC = $(PC_NAME).in
|
59
71
|
|
60
|
-
LIB_NAME=argon2
|
61
72
|
ifeq ($(KERNEL_NAME), Linux)
|
62
73
|
LIB_EXT := so.$(ABI_VERSION)
|
63
74
|
LIB_CFLAGS := -shared -fPIC -fvisibility=hidden -DA2_VISCTL=1
|
64
75
|
SO_LDFLAGS := -Wl,-soname,lib$(LIB_NAME).$(LIB_EXT)
|
65
76
|
LINKED_LIB_EXT := so
|
77
|
+
PC_EXTRA_LIBS ?= -lrt -ldl
|
66
78
|
endif
|
67
|
-
ifeq ($(KERNEL_NAME), $(filter $(KERNEL_NAME),FreeBSD NetBSD OpenBSD))
|
79
|
+
ifeq ($(KERNEL_NAME), $(filter $(KERNEL_NAME),DragonFly FreeBSD NetBSD OpenBSD))
|
68
80
|
LIB_EXT := so
|
69
81
|
LIB_CFLAGS := -shared -fPIC
|
82
|
+
PC_EXTRA_LIBS ?=
|
70
83
|
endif
|
71
84
|
ifeq ($(KERNEL_NAME), Darwin)
|
72
85
|
LIB_EXT := $(ABI_VERSION).dylib
|
73
86
|
LIB_CFLAGS := -dynamiclib -install_name @rpath/lib$(LIB_NAME).$(LIB_EXT)
|
74
87
|
LINKED_LIB_EXT := dylib
|
88
|
+
PC_EXTRA_LIBS ?=
|
75
89
|
endif
|
76
90
|
ifeq ($(findstring CYGWIN, $(KERNEL_NAME)), CYGWIN)
|
77
91
|
LIB_EXT := dll
|
78
92
|
LIB_CFLAGS := -shared -Wl,--out-implib,lib$(LIB_NAME).$(LIB_EXT).a
|
93
|
+
PC_EXTRA_LIBS ?=
|
79
94
|
endif
|
80
95
|
ifeq ($(findstring MINGW, $(KERNEL_NAME)), MINGW)
|
81
96
|
LIB_EXT := dll
|
82
97
|
LIB_CFLAGS := -shared -Wl,--out-implib,lib$(LIB_NAME).$(LIB_EXT).a
|
98
|
+
PC_EXTRA_LIBS ?=
|
83
99
|
endif
|
84
100
|
ifeq ($(findstring MSYS, $(KERNEL_NAME)), MSYS)
|
85
101
|
LIB_EXT := dll
|
86
102
|
LIB_CFLAGS := -shared -Wl,--out-implib,lib$(LIB_NAME).$(LIB_EXT).a
|
103
|
+
PC_EXTRA_LIBS ?=
|
87
104
|
endif
|
88
105
|
ifeq ($(KERNEL_NAME), SunOS)
|
89
106
|
CC := gcc
|
90
107
|
CFLAGS += -D_REENTRANT
|
91
108
|
LIB_EXT := so
|
92
109
|
LIB_CFLAGS := -shared -fPIC
|
110
|
+
PC_EXTRA_LIBS ?=
|
93
111
|
endif
|
94
112
|
|
95
113
|
ifeq ($(KERNEL_NAME), Linux)
|
@@ -105,26 +123,53 @@ ifdef LINKED_LIB_EXT
|
|
105
123
|
LINKED_LIB_SH := lib$(LIB_NAME).$(LINKED_LIB_EXT)
|
106
124
|
endif
|
107
125
|
|
126
|
+
# Some systems don't provide an unprefixed ar when cross-compiling.
|
127
|
+
AR=ar
|
108
128
|
|
109
129
|
LIBRARIES = $(LIB_SH) $(LIB_ST)
|
110
130
|
HEADERS = include/argon2.h
|
111
131
|
|
112
132
|
INSTALL = install
|
113
133
|
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
BINARY_REL
|
134
|
+
# relative paths for different OS
|
135
|
+
ifeq ($(KERNEL_NAME), $(filter $(KERNEL_NAME),DragonFly FreeBSD))
|
136
|
+
|
137
|
+
# default for FreeBSD
|
138
|
+
BINARY_REL ?= bin
|
139
|
+
INCLUDE_REL ?= include
|
140
|
+
LIBRARY_REL ?= lib
|
141
|
+
PKGCONFIG_REL ?= libdata
|
142
|
+
|
143
|
+
else ifeq ($(KERNEL_NAME)-$(MACHINE_NAME), Linux-x86_64)
|
144
|
+
|
145
|
+
# default for Debian/Ubuntu x86_64
|
146
|
+
BINARY_REL ?= bin
|
147
|
+
INCLUDE_REL ?= include
|
148
|
+
LIBRARY_REL ?= lib/x86_64-linux-gnu
|
149
|
+
PKGCONFIG_REL ?= $(LIBRARY_REL)
|
150
|
+
|
151
|
+
else
|
152
|
+
|
153
|
+
# NetBSD, ... and Linux64/Linux32 variants that use plain lib directory
|
154
|
+
BINARY_REL ?= bin
|
155
|
+
INCLUDE_REL ?= include
|
156
|
+
LIBRARY_REL ?= lib
|
157
|
+
PKGCONFIG_REL ?= $(LIBRARY_REL)
|
158
|
+
|
159
|
+
endif
|
119
160
|
|
161
|
+
# absolute paths to staging area
|
120
162
|
INST_INCLUDE = $(DESTDIR)$(PREFIX)/$(INCLUDE_REL)
|
121
163
|
INST_LIBRARY = $(DESTDIR)$(PREFIX)/$(LIBRARY_REL)
|
122
164
|
INST_BINARY = $(DESTDIR)$(PREFIX)/$(BINARY_REL)
|
165
|
+
INST_PKGCONFIG = $(DESTDIR)$(PREFIX)/$(PKGCONFIG_REL)/pkgconfig
|
123
166
|
|
124
|
-
|
125
|
-
|
167
|
+
# main target
|
168
|
+
.PHONY: all
|
126
169
|
all: $(RUN) libs
|
127
|
-
|
170
|
+
|
171
|
+
.PHONY: libs
|
172
|
+
libs: $(LIBRARIES) $(PC_NAME)
|
128
173
|
|
129
174
|
$(RUN): $(SRC) $(SRC_RUN)
|
130
175
|
$(CC) $(CFLAGS) $(LDFLAGS) $^ -o $@
|
@@ -139,49 +184,72 @@ $(LIB_SH): $(SRC)
|
|
139
184
|
$(CC) $(CFLAGS) $(LIB_CFLAGS) $(LDFLAGS) $(SO_LDFLAGS) $^ -o $@
|
140
185
|
|
141
186
|
$(LIB_ST): $(OBJ)
|
142
|
-
|
187
|
+
$(AR) rcs $@ $^
|
143
188
|
|
189
|
+
.PHONY: clean
|
144
190
|
clean:
|
145
|
-
rm -f $(RUN) $(BENCH) $(GENKAT)
|
146
|
-
rm -f $(LIB_SH) $(LIB_ST) kat-argon2*
|
191
|
+
rm -f '$(RUN)' '$(BENCH)' '$(GENKAT)'
|
192
|
+
rm -f '$(LIB_SH)' '$(LIB_ST)' kat-argon2* '$(PC_NAME)'
|
147
193
|
rm -f testcase
|
148
194
|
rm -rf *.dSYM
|
149
195
|
cd src/ && rm -f *.o
|
150
196
|
cd src/blake2/ && rm -f *.o
|
151
197
|
cd kats/ && rm -f kat-* diff* run_* make_*
|
152
198
|
|
199
|
+
|
200
|
+
# all substitutions to pc template
|
201
|
+
SED_COMMANDS = /^\#\#.*$$/d;
|
202
|
+
SED_COMMANDS += s\#@PREFIX@\#$(PREFIX)\#g;
|
203
|
+
SED_COMMANDS += s\#@EXTRA_LIBS@\#$(PC_EXTRA_LIBS)\#g;
|
204
|
+
SED_COMMANDS += s\#@UPSTREAM_VER@\#$(ARGON2_VERSION)\#g;
|
205
|
+
SED_COMMANDS += s\#@HOST_MULTIARCH@\#$(LIBRARY_REL)\#g;
|
206
|
+
SED_COMMANDS += s\#@INCLUDE@\#$(INCLUDE_REL)\#g;
|
207
|
+
|
208
|
+
# substitute PREFIX and PC_EXTRA_LIBS into pkgconfig pc file
|
209
|
+
$(PC_NAME): $(PC_SRC)
|
210
|
+
sed '$(SED_COMMANDS)' < '$(PC_SRC)' > '$@'
|
211
|
+
|
212
|
+
|
213
|
+
.PHONY: dist
|
153
214
|
dist:
|
154
215
|
cd ..; \
|
155
216
|
tar -c --exclude='.??*' -z -f $(DIST)-`date "+%Y%m%d"`.tgz $(DIST)/*
|
156
217
|
|
218
|
+
.PHONY: test
|
157
219
|
test: $(SRC) src/test.c
|
158
220
|
$(CC) $(CFLAGS) -Wextra -Wno-type-limits $^ -o testcase
|
159
221
|
@sh kats/test.sh
|
160
222
|
./testcase
|
161
223
|
|
224
|
+
.PHONY: testci
|
162
225
|
testci: $(SRC) src/test.c
|
163
226
|
$(CC) $(CI_CFLAGS) $^ -o testcase
|
164
227
|
@sh kats/test.sh
|
165
228
|
./testcase
|
166
229
|
|
167
|
-
.PHONY: test
|
168
230
|
|
231
|
+
.PHONY: format
|
169
232
|
format:
|
170
233
|
clang-format -style="{BasedOnStyle: llvm, IndentWidth: 4}" \
|
171
234
|
-i include/*.h src/*.c src/*.h src/blake2/*.c src/blake2/*.h
|
172
235
|
|
236
|
+
.PHONY: install
|
173
237
|
install: $(RUN) libs
|
174
238
|
$(INSTALL) -d $(INST_INCLUDE)
|
175
239
|
$(INSTALL) -m 0644 $(HEADERS) $(INST_INCLUDE)
|
176
240
|
$(INSTALL) -d $(INST_LIBRARY)
|
177
|
-
$(INSTALL) $(LIBRARIES) $(INST_LIBRARY)
|
241
|
+
$(INSTALL) -m 0644 $(LIBRARIES) $(INST_LIBRARY)
|
178
242
|
ifdef LINKED_LIB_SH
|
179
|
-
cd $(INST_LIBRARY) && ln -
|
243
|
+
cd $(INST_LIBRARY) && ln -sf $(notdir $(LIB_SH) $(LINKED_LIB_SH))
|
180
244
|
endif
|
181
245
|
$(INSTALL) -d $(INST_BINARY)
|
182
246
|
$(INSTALL) $(RUN) $(INST_BINARY)
|
247
|
+
$(INSTALL) -d $(INST_PKGCONFIG)
|
248
|
+
$(INSTALL) -m 0644 $(PC_NAME) $(INST_PKGCONFIG)
|
183
249
|
|
250
|
+
.PHONY: uninstall
|
184
251
|
uninstall:
|
185
252
|
cd $(INST_INCLUDE) && rm -f $(notdir $(HEADERS))
|
186
253
|
cd $(INST_LIBRARY) && rm -f $(notdir $(LIBRARIES) $(LINKED_LIB_SH))
|
187
254
|
cd $(INST_BINARY) && rm -f $(notdir $(RUN))
|
255
|
+
cd $(INST_PKG_CONFIG) && rm -f $(notdir $(PC_NAME))
|
@@ -243,6 +243,7 @@ Argon2i 1 iterations 4096 MiB 4 threads: 2.72 cpb 11124.86 Mcycles
|
|
243
243
|
Bindings are available for the following languages (make sure to read
|
244
244
|
their documentation):
|
245
245
|
|
246
|
+
* [Android (Java/Kotlin)](https://github.com/lambdapioneer/argon2kt) by [@lambdapioneer](https://github.com/lambdapioneer)
|
246
247
|
* [Elixir](https://github.com/riverrun/argon2_elixir) by [@riverrun](https://github.com/riverrun)
|
247
248
|
* [Erlang](https://github.com/ergenius/eargon2) by [@ergenius](https://github.com/ergenius)
|
248
249
|
* [Go](https://github.com/tvdburgt/go-argon2) by [@tvdburgt](https://github.com/tvdburgt)
|
@@ -259,6 +260,7 @@ their documentation):
|
|
259
260
|
* [Python (native)](https://pypi.python.org/pypi/argon2), by [@flamewow](https://github.com/flamewow)
|
260
261
|
* [Python (ffi)](https://pypi.python.org/pypi/argon2_cffi), by [@hynek](https://github.com/hynek)
|
261
262
|
* [Python (ffi, with keyed hashing)](https://github.com/thusoy/porridge), by [@thusoy](https://github.com/thusoy)
|
263
|
+
* [Python (ffi, with keyed hashing)](https://github.com/ultrahorizon/pyargon2), by [@ultrahorizon](https://github.com/ultrahorizon)
|
262
264
|
* [R](https://cran.r-project.org/package=argon2) by [@wrathematics](https://github.com/wrathematics)
|
263
265
|
* [Ruby](https://github.com/technion/ruby-argon2) by [@technion](https://github.com/technion)
|
264
266
|
* [Rust](https://github.com/quininer/argon2-rs) by [@quininer](https://github.com/quininer)
|
@@ -283,7 +285,7 @@ Except for the components listed below, the Argon2 code in this
|
|
283
285
|
repository is copyright (c) 2015 Daniel Dinu, Dmitry Khovratovich (main
|
284
286
|
authors), Jean-Philippe Aumasson and Samuel Neves, and dual licensed under the
|
285
287
|
[CC0 License](https://creativecommons.org/about/cc0) and the
|
286
|
-
[Apache 2.0 License](
|
288
|
+
[Apache 2.0 License](https://www.apache.org/licenses/LICENSE-2.0). For more info
|
287
289
|
see the LICENSE file.
|
288
290
|
|
289
291
|
The string encoding routines in [`src/encoding.c`](src/encoding.c) are
|
@@ -8,8 +8,8 @@
|
|
8
8
|
* License/Waiver or the Apache Public License 2.0, at your option. The terms of
|
9
9
|
* these licenses can be found at:
|
10
10
|
*
|
11
|
-
* - CC0 1.0 Universal :
|
12
|
-
* - Apache 2.0 :
|
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
13
|
*
|
14
14
|
* You should have received a copy of both of these licenses along with this
|
15
15
|
* software. If not, they may be obtained at the above URLs.
|
@@ -30,7 +30,7 @@ extern "C" {
|
|
30
30
|
#ifdef A2_VISCTL
|
31
31
|
#define ARGON2_PUBLIC __attribute__((visibility("default")))
|
32
32
|
#define ARGON2_LOCAL __attribute__ ((visibility ("hidden")))
|
33
|
-
#elif _MSC_VER
|
33
|
+
#elif defined(_MSC_VER)
|
34
34
|
#define ARGON2_PUBLIC __declspec(dllexport)
|
35
35
|
#define ARGON2_LOCAL
|
36
36
|
#else
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# libargon2 info for pkg-config
|
2
|
+
## Template for downstream installers:
|
3
|
+
## - replace @UPSTREAM_VER@ with current version, e.g. '20160406'
|
4
|
+
## - replace @HOST_MULTIARCH@ with target arch lib, e.g. 'lib', 'lib/x86_64-linux-gnu' or 'lib64'
|
5
|
+
## - replace @PREFIX@ with install path, e.g. '/usr', '/usr/local', '/usr/pkg'
|
6
|
+
## - replace @INCLUDE@ with incluse path, e.g. 'include' or 'include/argon2'
|
7
|
+
|
8
|
+
prefix=@PREFIX@
|
9
|
+
exec_prefix=${prefix}
|
10
|
+
libdir=${prefix}/@HOST_MULTIARCH@
|
11
|
+
includedir=${prefix}/@INCLUDE@
|
12
|
+
|
13
|
+
Name: libargon2
|
14
|
+
Description: Development libraries for libargon2
|
15
|
+
Version: @UPSTREAM_VER@
|
16
|
+
Libs: -L${libdir} -largon2 @EXTRA_LIBS@
|
17
|
+
Cflags: -I${includedir}
|
18
|
+
URL: https://github.com/P-H-C/phc-winner-argon2
|
@@ -8,8 +8,8 @@
|
|
8
8
|
* License/Waiver or the Apache Public License 2.0, at your option. The terms of
|
9
9
|
* these licenses can be found at:
|
10
10
|
*
|
11
|
-
* - CC0 1.0 Universal :
|
12
|
-
* - Apache 2.0 :
|
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
13
|
*
|
14
14
|
* You should have received a copy of both of these licenses along with this
|
15
15
|
* software. If not, they may be obtained at the above URLs.
|
@@ -8,8 +8,8 @@
|
|
8
8
|
* License/Waiver or the Apache Public License 2.0, at your option. The terms of
|
9
9
|
* these licenses can be found at:
|
10
10
|
*
|
11
|
-
* - CC0 1.0 Universal :
|
12
|
-
* - Apache 2.0 :
|
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
13
|
*
|
14
14
|
* You should have received a copy of both of these licenses along with this
|
15
15
|
* software. If not, they may be obtained at the above URLs.
|
@@ -20,14 +20,14 @@
|
|
20
20
|
#include <stdlib.h>
|
21
21
|
#include <string.h>
|
22
22
|
#include <time.h>
|
23
|
-
#ifdef
|
23
|
+
#ifdef _WIN32
|
24
24
|
#include <intrin.h>
|
25
25
|
#endif
|
26
26
|
|
27
27
|
#include "argon2.h"
|
28
28
|
|
29
29
|
static uint64_t rdtsc(void) {
|
30
|
-
#ifdef
|
30
|
+
#ifdef _WIN32
|
31
31
|
return __rdtsc();
|
32
32
|
#else
|
33
33
|
#if defined(__amd64__) || defined(__x86_64__)
|
@@ -8,8 +8,8 @@
|
|
8
8
|
* License/Waiver or the Apache Public License 2.0, at your option. The terms of
|
9
9
|
* these licenses can be found at:
|
10
10
|
*
|
11
|
-
* - CC0 1.0 Universal :
|
12
|
-
* - Apache 2.0 :
|
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
13
|
*
|
14
14
|
* You should have received a copy of both of these licenses along with this
|
15
15
|
* software. If not, they may be obtained at the above URLs.
|
@@ -21,7 +21,7 @@
|
|
21
21
|
#include <stdint.h>
|
22
22
|
#include <string.h>
|
23
23
|
|
24
|
-
#
|
24
|
+
#ifdef _WIN32
|
25
25
|
#define BLAKE2_INLINE __inline
|
26
26
|
#elif defined(__GNUC__) || defined(__clang__)
|
27
27
|
#define BLAKE2_INLINE __inline__
|
@@ -8,8 +8,8 @@
|
|
8
8
|
* License/Waiver or the Apache Public License 2.0, at your option. The terms of
|
9
9
|
* these licenses can be found at:
|
10
10
|
*
|
11
|
-
* - CC0 1.0 Universal :
|
12
|
-
* - Apache 2.0 :
|
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
13
|
*
|
14
14
|
* You should have received a copy of both of these licenses along with this
|
15
15
|
* software. If not, they may be obtained at the above URLs.
|
@@ -8,8 +8,8 @@
|
|
8
8
|
* License/Waiver or the Apache Public License 2.0, at your option. The terms of
|
9
9
|
* these licenses can be found at:
|
10
10
|
*
|
11
|
-
* - CC0 1.0 Universal :
|
12
|
-
* - Apache 2.0 :
|
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
13
|
*
|
14
14
|
* You should have received a copy of both of these licenses along with this
|
15
15
|
* software. If not, they may be obtained at the above URLs.
|
@@ -8,8 +8,8 @@
|
|
8
8
|
* License/Waiver or the Apache Public License 2.0, at your option. The terms of
|
9
9
|
* these licenses can be found at:
|
10
10
|
*
|
11
|
-
* - CC0 1.0 Universal :
|
12
|
-
* - Apache 2.0 :
|
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
13
|
*
|
14
14
|
* You should have received a copy of both of these licenses along with this
|
15
15
|
* software. If not, they may be obtained at the above URLs.
|
@@ -8,8 +8,8 @@
|
|
8
8
|
* License/Waiver or the Apache Public License 2.0, at your option. The terms of
|
9
9
|
* these licenses can be found at:
|
10
10
|
*
|
11
|
-
* - CC0 1.0 Universal :
|
12
|
-
* - Apache 2.0 :
|
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
13
|
*
|
14
14
|
* You should have received a copy of both of these licenses along with this
|
15
15
|
* software. If not, they may be obtained at the above URLs.
|
@@ -8,15 +8,15 @@
|
|
8
8
|
* License/Waiver or the Apache Public License 2.0, at your option. The terms of
|
9
9
|
* these licenses can be found at:
|
10
10
|
*
|
11
|
-
* - CC0 1.0 Universal :
|
12
|
-
* - Apache 2.0 :
|
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
13
|
*
|
14
14
|
* You should have received a copy of both of these licenses along with this
|
15
15
|
* software. If not, they may be obtained at the above URLs.
|
16
16
|
*/
|
17
17
|
|
18
18
|
/*For memory wiping*/
|
19
|
-
#ifdef
|
19
|
+
#ifdef _WIN32
|
20
20
|
#include <windows.h>
|
21
21
|
#include <winbase.h> /* For SecureZeroMemory */
|
22
22
|
#endif
|
@@ -25,6 +25,9 @@
|
|
25
25
|
#endif
|
26
26
|
#define VC_GE_2005(version) (version >= 1400)
|
27
27
|
|
28
|
+
/* for explicit_bzero() on glibc */
|
29
|
+
#define _DEFAULT_SOURCE
|
30
|
+
|
28
31
|
#include <stdio.h>
|
29
32
|
#include <stdlib.h>
|
30
33
|
#include <string.h>
|
@@ -120,12 +123,20 @@ void free_memory(const argon2_context *context, uint8_t *memory,
|
|
120
123
|
}
|
121
124
|
}
|
122
125
|
|
126
|
+
#if defined(__OpenBSD__)
|
127
|
+
#define HAVE_EXPLICIT_BZERO 1
|
128
|
+
#elif defined(__GLIBC__) && defined(__GLIBC_PREREQ)
|
129
|
+
#if __GLIBC_PREREQ(2,25)
|
130
|
+
#define HAVE_EXPLICIT_BZERO 1
|
131
|
+
#endif
|
132
|
+
#endif
|
133
|
+
|
123
134
|
void NOT_OPTIMIZED secure_wipe_memory(void *v, size_t n) {
|
124
|
-
#if defined(_MSC_VER) && VC_GE_2005(_MSC_VER)
|
135
|
+
#if defined(_MSC_VER) && VC_GE_2005(_MSC_VER) || defined(__MINGW32__)
|
125
136
|
SecureZeroMemory(v, n);
|
126
137
|
#elif defined memset_s
|
127
138
|
memset_s(v, n, 0, n);
|
128
|
-
#elif defined(
|
139
|
+
#elif defined(HAVE_EXPLICIT_BZERO)
|
129
140
|
explicit_bzero(v, n);
|
130
141
|
#else
|
131
142
|
static void *(*const volatile memset_sec)(void *, int, size_t) = &memset;
|
@@ -299,7 +310,7 @@ static int fill_memory_blocks_mt(argon2_instance_t *instance) {
|
|
299
310
|
|
300
311
|
for (r = 0; r < instance->passes; ++r) {
|
301
312
|
for (s = 0; s < ARGON2_SYNC_POINTS; ++s) {
|
302
|
-
uint32_t l;
|
313
|
+
uint32_t l, ll;
|
303
314
|
|
304
315
|
/* 2. Calling threads */
|
305
316
|
for (l = 0; l < instance->lanes; ++l) {
|
@@ -324,6 +335,9 @@ static int fill_memory_blocks_mt(argon2_instance_t *instance) {
|
|
324
335
|
sizeof(argon2_position_t));
|
325
336
|
if (argon2_thread_create(&thread[l], &fill_segment_thr,
|
326
337
|
(void *)&thr_data[l])) {
|
338
|
+
/* Wait for already running threads */
|
339
|
+
for (ll = 0; ll < l; ++ll)
|
340
|
+
argon2_thread_join(thread[ll]);
|
327
341
|
rc = ARGON2_THREAD_FAIL;
|
328
342
|
goto fail;
|
329
343
|
}
|
@@ -8,8 +8,8 @@
|
|
8
8
|
* License/Waiver or the Apache Public License 2.0, at your option. The terms of
|
9
9
|
* these licenses can be found at:
|
10
10
|
*
|
11
|
-
* - CC0 1.0 Universal :
|
12
|
-
* - Apache 2.0 :
|
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
13
|
*
|
14
14
|
* You should have received a copy of both of these licenses along with this
|
15
15
|
* software. If not, they may be obtained at the above URLs.
|
@@ -8,8 +8,8 @@
|
|
8
8
|
* License/Waiver or the Apache Public License 2.0, at your option. The terms of
|
9
9
|
* these licenses can be found at:
|
10
10
|
*
|
11
|
-
* - CC0 1.0 Universal :
|
12
|
-
* - Apache 2.0 :
|
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
13
|
*
|
14
14
|
* You should have received a copy of both of these licenses along with this
|
15
15
|
* software. If not, they may be obtained at the above URLs.
|
@@ -8,8 +8,8 @@
|
|
8
8
|
* License/Waiver or the Apache Public License 2.0, at your option. The terms of
|
9
9
|
* these licenses can be found at:
|
10
10
|
*
|
11
|
-
* - CC0 1.0 Universal :
|
12
|
-
* - Apache 2.0 :
|
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
13
|
*
|
14
14
|
* You should have received a copy of both of these licenses along with this
|
15
15
|
* software. If not, they may be obtained at the above URLs.
|
@@ -8,8 +8,8 @@
|
|
8
8
|
* License/Waiver or the Apache Public License 2.0, at your option. The terms of
|
9
9
|
* these licenses can be found at:
|
10
10
|
*
|
11
|
-
* - CC0 1.0 Universal :
|
12
|
-
* - Apache 2.0 :
|
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
13
|
*
|
14
14
|
* You should have received a copy of both of these licenses along with this
|
15
15
|
* software. If not, they may be obtained at the above URLs.
|
@@ -20,6 +20,12 @@
|
|
20
20
|
#include <string.h>
|
21
21
|
#include "argon2.h"
|
22
22
|
#include "core.h"
|
23
|
+
#ifdef __MINGW32__
|
24
|
+
#include <inttypes.h>
|
25
|
+
#else
|
26
|
+
/* Don't use <inttypes.h> (it's not C89) */
|
27
|
+
#define PRIx64 "llx"
|
28
|
+
#endif
|
23
29
|
|
24
30
|
void initial_kat(const uint8_t *blockhash, const argon2_context *context,
|
25
31
|
argon2_type type) {
|
@@ -115,7 +121,7 @@ void internal_kat(const argon2_instance_t *instance, uint32_t pass) {
|
|
115
121
|
: ARGON2_QWORDS_IN_BLOCK;
|
116
122
|
|
117
123
|
for (j = 0; j < how_many_words; ++j)
|
118
|
-
printf("Block %.4u [%3u]: %
|
124
|
+
printf("Block %.4u [%3u]: %016" PRIx64 "\n", i, j,
|
119
125
|
(unsigned long long)instance->memory[i].v[j]);
|
120
126
|
}
|
121
127
|
}
|
@@ -8,8 +8,8 @@
|
|
8
8
|
* License/Waiver or the Apache Public License 2.0, at your option. The terms of
|
9
9
|
* these licenses can be found at:
|
10
10
|
*
|
11
|
-
* - CC0 1.0 Universal :
|
12
|
-
* - Apache 2.0 :
|
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
13
|
*
|
14
14
|
* You should have received a copy of both of these licenses along with this
|
15
15
|
* software. If not, they may be obtained at the above URLs.
|
@@ -8,8 +8,8 @@
|
|
8
8
|
* License/Waiver or the Apache Public License 2.0, at your option. The terms of
|
9
9
|
* these licenses can be found at:
|
10
10
|
*
|
11
|
-
* - CC0 1.0 Universal :
|
12
|
-
* - Apache 2.0 :
|
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
13
|
*
|
14
14
|
* You should have received a copy of both of these licenses along with this
|
15
15
|
* software. If not, they may be obtained at the above URLs.
|
@@ -8,8 +8,8 @@
|
|
8
8
|
* License/Waiver or the Apache Public License 2.0, at your option. The terms of
|
9
9
|
* these licenses can be found at:
|
10
10
|
*
|
11
|
-
* - CC0 1.0 Universal :
|
12
|
-
* - Apache 2.0 :
|
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
13
|
*
|
14
14
|
* You should have received a copy of both of these licenses along with this
|
15
15
|
* software. If not, they may be obtained at the above URLs.
|
@@ -8,8 +8,8 @@
|
|
8
8
|
* License/Waiver or the Apache Public License 2.0, at your option. The terms of
|
9
9
|
* these licenses can be found at:
|
10
10
|
*
|
11
|
-
* - CC0 1.0 Universal :
|
12
|
-
* - Apache 2.0 :
|
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
13
|
*
|
14
14
|
* You should have received a copy of both of these licenses along with this
|
15
15
|
* software. If not, they may be obtained at the above URLs.
|
@@ -8,8 +8,8 @@
|
|
8
8
|
* License/Waiver or the Apache Public License 2.0, at your option. The terms of
|
9
9
|
* these licenses can be found at:
|
10
10
|
*
|
11
|
-
* - CC0 1.0 Universal :
|
12
|
-
* - Apache 2.0 :
|
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
13
|
*
|
14
14
|
* You should have received a copy of both of these licenses along with this
|
15
15
|
* software. If not, they may be obtained at the above URLs.
|
@@ -8,8 +8,8 @@
|
|
8
8
|
* License/Waiver or the Apache Public License 2.0, at your option. The terms of
|
9
9
|
* these licenses can be found at:
|
10
10
|
*
|
11
|
-
* - CC0 1.0 Universal :
|
12
|
-
* - Apache 2.0 :
|
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
13
|
*
|
14
14
|
* You should have received a copy of both of these licenses along with this
|
15
15
|
* software. If not, they may be obtained at the above URLs.
|
@@ -8,8 +8,8 @@
|
|
8
8
|
* License/Waiver or the Apache Public License 2.0, at your option. The terms of
|
9
9
|
* these licenses can be found at:
|
10
10
|
*
|
11
|
-
* - CC0 1.0 Universal :
|
12
|
-
* - Apache 2.0 :
|
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
13
|
*
|
14
14
|
* You should have received a copy of both of these licenses along with this
|
15
15
|
* software. If not, they may be obtained at the above URLs.
|