Merge branch 'release/1.18.1'

This commit is contained in:
Steffen Jaeckel 2018-01-22 11:02:57 +01:00
commit e08fd8630f
42 changed files with 1116 additions and 1286 deletions

14
changes
View File

@ -1,4 +1,16 @@
XXX, 2017 January 22nd, 2018
v1.18.1
-- Fix wrong SHA3 blocksizes, thanks to Claus Fischer for reporting this via Mail (PR #329)
-- Fix NULL-pointer dereference in `ccm_memory()` with LTC_CLEAN_STACK enabled (PR #327)
-- Fix `ccm_process()` being unable to process input buffers longer than 256 bytes (PR #326)
-- Fix the `register_all_{ciphers,hashes,prngs}()` return values (PR #316)
-- Fix some typos, warnings and duplicate prototypes in code & doc (PR's #310 #320 #321 #335)
-- Fix possible undefined behavior with LTC_PTHREAD (PR #337)
-- Fix some DER bugs (PR #339)
-- Fix CTR-mode when accelerator is used (OP-TEE/optee_os #2086)
-- Fix installation procedure (Issue #340)
October 10th, 2017
v1.18.0 v1.18.0
-- Bugfix multi2 -- Bugfix multi2
-- Bugfix Noekeon -- Bugfix Noekeon

View File

@ -8,7 +8,7 @@
*/ */
#include "tomcrypt.h" #include "tomcrypt.h"
#if _POSIX_C_SOURCE >= 200112L #if defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE >= 200112L
#include <libgen.h> #include <libgen.h>
#else #else
#define basename(x) x #define basename(x) x

View File

@ -18,7 +18,7 @@
#include <tomcrypt.h> #include <tomcrypt.h>
#if _POSIX_C_SOURCE >= 200112L #if defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE >= 200112L
#include <libgen.h> #include <libgen.h>
#else #else
#define basename(x) x #define basename(x) x

View File

@ -9,7 +9,7 @@
#include "tomcrypt.h" #include "tomcrypt.h"
#if _POSIX_C_SOURCE >= 200112L #if defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE >= 200112L
#include <libgen.h> #include <libgen.h>
#else #else
#define basename(x) x #define basename(x) x

View File

@ -38,7 +38,7 @@ PROJECT_NAME = LibTomCrypt
# could be handy for archiving the generated documentation or if some version # could be handy for archiving the generated documentation or if some version
# control system is used. # control system is used.
PROJECT_NUMBER=1.18.0 PROJECT_NUMBER=1.18.1
# Using the PROJECT_BRIEF tag one can provide an optional one line description # Using the PROJECT_BRIEF tag one can provide an optional one line description
# for a project that appears at the top of each page and should give viewer a # for a project that appears at the top of each page and should give viewer a

View File

@ -2281,8 +2281,8 @@ int chacha20poly1305_memory(const unsigned char *key,
int direction); int direction);
\end{verbatim} \end{verbatim}
This will initialize the ChaCha20--Poly1305 state with the given key, IV and AAD value then proceed to This will initialize the ChaCha20--Poly1305 state with the given key, IV and AAD value then proceed to
encrypt (\textit{direction} equals \textbf{CHCHA20POLY1305\_ENCRYPT}) or decrypt (\textit{direction} equals encrypt (\textit{direction} equals \textbf{CHACHA20POLY1305\_ENCRYPT}) or decrypt (\textit{direction} equals
\textbf{CHCHA20POLY1305\_DECRYPT}) the message text and store the final message tag. The definition of the \textbf{CHACHA20POLY1305\_DECRYPT}) the message text and store the final message tag. The definition of the
variables is the same as it is for all the manual functions. variables is the same as it is for all the manual functions.
\chapter{One-Way Cryptographic Hash Functions} \chapter{One-Way Cryptographic Hash Functions}
@ -5407,7 +5407,7 @@ in the same manner as the other data types except they use list of objects known
\index{ltc\_asn1\_list structure} \index{ltc\_asn1\_list structure}
\begin{verbatim} \begin{verbatim}
typedef struct { typedef struct {
int type; ltc_asn1_type type;
void *data; void *data;
unsigned long size; unsigned long size;
int used; int used;
@ -5479,6 +5479,7 @@ LTC_SET_ASN1(sequence, x++, LTC_ASN1_NULL, NULL, 0);
\hline \hline
\end{tabular} \end{tabular}
\caption{List of ASN.1 Supported Types} \caption{List of ASN.1 Supported Types}
\index{ltc\_asn1\_type}
\end{small} \end{small}
\end{center} \end{center}
\end{figure} \end{figure}

View File

@ -55,13 +55,14 @@ sub check_source {
push @{$troubles->{unwanted_strcmp}}, $lineno if $file =~ /^src\/.*\.c$/ && $l =~ /\bstrcmp\s*\(/; push @{$troubles->{unwanted_strcmp}}, $lineno if $file =~ /^src\/.*\.c$/ && $l =~ /\bstrcmp\s*\(/;
push @{$troubles->{unwanted_clock}}, $lineno if $file =~ /^src\/.*\.c$/ && $l =~ /\bclock\s*\(/; push @{$troubles->{unwanted_clock}}, $lineno if $file =~ /^src\/.*\.c$/ && $l =~ /\bclock\s*\(/;
push @{$troubles->{unwanted_qsort}}, $lineno if $file =~ /^src\/.*\.c$/ && $l =~ /\bqsort\s*\(/; push @{$troubles->{unwanted_qsort}}, $lineno if $file =~ /^src\/.*\.c$/ && $l =~ /\bqsort\s*\(/;
push @{$troubles->{sizeof_no_brackets}}, $lineno if $file =~ /^src\/.*\.c$/ && $l =~ /\bsizeof\s*[^\(]/;
if ($file =~ m|src/.*\.c$| && if ($file =~ m|src/.*\.c$| &&
$file !~ m|src/ciphers/.*\.c$| && $file !~ m|src/ciphers/.*\.c$| &&
$file !~ m|src/hashes/.*\.c$| && $file !~ m|src/hashes/.*\.c$| &&
$file !~ m|src/math/.+_desc.c$| && $file !~ m|src/math/.+_desc.c$| &&
$file !~ m|src/stream/sober128/sober128_stream.c$| && $file !~ m|src/stream/sober128/sober128_stream.c$| &&
$l =~ /^static\s+\S+\s+([^_][a-zA-Z0-9_]+)\s*\(/) { $l =~ /^static(\s+[a-zA-Z0-9_]+)+\s+([^_][a-zA-Z0-9_]+)\s*\(/) {
push @{$troubles->{staticfunc_name}}, "$lineno($1)"; push @{$troubles->{staticfunc_name}}, "$lineno($2)";
} }
$lineno++; $lineno++;
} }
@ -277,7 +278,7 @@ sub patch_file {
sub version_from_tomcrypt_h { sub version_from_tomcrypt_h {
my $h = read_file(shift); my $h = read_file(shift);
if ($h =~ /\n#define\s*SCRYPT\s*"([0-9]+)\.([0-9]+)\.([0-9]+)(.*)"/s) { if ($h =~ /\n#define\s*SCRYPT\s*"([0-9]+)\.([0-9]+)\.([0-9]+)(.*)"/s) {
return "VERSION_PC=$1.$2.$3", "VERSION_LT=1:0", "VERSION=$1.$2.$3$4", "PROJECT_NUMBER=$1.$2.$3$4"; return "VERSION_PC=$1.$2.$3", "VERSION_LT=1:1", "VERSION=$1.$2.$3$4", "PROJECT_NUMBER=$1.$2.$3$4";
} }
else { else {
die "#define SCRYPT not found in tomcrypt.h"; die "#define SCRYPT not found in tomcrypt.h";

View File

@ -27,7 +27,7 @@ EXTRALIBS = -L../libtommath -ltommath
#Compilation flags #Compilation flags
LTC_CFLAGS = -Isrc/headers -Itests -DLTC_SOURCE $(CFLAGS) LTC_CFLAGS = -Isrc/headers -Itests -DLTC_SOURCE $(CFLAGS)
LTC_LDFLAGS = $(LDFLAGS) $(EXTRALIBS) LTC_LDFLAGS = $(LDFLAGS) $(EXTRALIBS)
VERSION=1.18.0 VERSION=1.18.1
#Libraries to be created #Libraries to be created
LIBMAIN_S =libtomcrypt.a LIBMAIN_S =libtomcrypt.a

View File

@ -22,7 +22,7 @@ EXTRALIBS = ../libtommath/tommath.lib
#Compilation flags #Compilation flags
LTC_CFLAGS = /nologo /Isrc/headers/ /Itests/ /D_CRT_SECURE_NO_WARNINGS /D_CRT_NONSTDC_NO_DEPRECATE /DLTC_SOURCE /W3 $(CFLAGS) LTC_CFLAGS = /nologo /Isrc/headers/ /Itests/ /D_CRT_SECURE_NO_WARNINGS /D_CRT_NONSTDC_NO_DEPRECATE /DLTC_SOURCE /W3 $(CFLAGS)
LTC_LDFLAGS = advapi32.lib $(EXTRALIBS) LTC_LDFLAGS = advapi32.lib $(EXTRALIBS)
VERSION=1.18.0 VERSION=1.18.1
#Libraries to be created (this makefile builds only static libraries) #Libraries to be created (this makefile builds only static libraries)
LIBMAIN_S =tomcrypt.lib LIBMAIN_S =tomcrypt.lib

View File

@ -64,8 +64,8 @@ $(foreach demo, $(strip $(DEMOS)), $(eval $(call DEMO_template,$(demo))))
install: $(call print-help,install,Installs the library + headers + pkg-config file) .common_install install: $(call print-help,install,Installs the library + headers + pkg-config file) .common_install
sed -e 's,^prefix=.*,prefix=$(PREFIX),' -e 's,^Version:.*,Version: $(VERSION_PC),' libtomcrypt.pc.in > libtomcrypt.pc sed -e 's,^prefix=.*,prefix=$(PREFIX),' -e 's,^Version:.*,Version: $(VERSION_PC),' libtomcrypt.pc.in > libtomcrypt.pc
install -d $(DESTDIR)$(LIBPATH)/pkgconfig install -p -d $(DESTDIR)$(LIBPATH)/pkgconfig
install -m 644 libtomcrypt.pc $(DESTDIR)$(LIBPATH)/pkgconfig/ install -p -m 644 libtomcrypt.pc $(DESTDIR)$(LIBPATH)/pkgconfig/
install_bins: $(call print-help,install_bins,Installs the useful demos ($(USEFUL_DEMOS))) .common_install_bins install_bins: $(call print-help,install_bins,Installs the useful demos ($(USEFUL_DEMOS))) .common_install_bins

View File

@ -39,7 +39,7 @@ EXTRALIBS = ../libtommath/libtommath.a
#Compilation flags #Compilation flags
LTC_CFLAGS = -Isrc/headers -Itests -DLTC_SOURCE $(CFLAGS) LTC_CFLAGS = -Isrc/headers -Itests -DLTC_SOURCE $(CFLAGS)
LTC_LDFLAGS = $(LDFLAGS) $(EXTRALIBS) LTC_LDFLAGS = $(LDFLAGS) $(EXTRALIBS)
VERSION=1.18.0 VERSION=1.18.1
#Libraries to be created (this makefile builds only static libraries) #Libraries to be created (this makefile builds only static libraries)
LIBMAIN_S =libtomcrypt.a LIBMAIN_S =libtomcrypt.a

View File

@ -3,10 +3,10 @@
# (GNU make only) # (GNU make only)
# The version - BEWARE: VERSION, VERSION_PC and VERSION_LT are updated via ./updatemakes.sh # The version - BEWARE: VERSION, VERSION_PC and VERSION_LT are updated via ./updatemakes.sh
VERSION=1.18.0 VERSION=1.18.1
VERSION_PC=1.18.0 VERSION_PC=1.18.1
# http://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html # http://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html
VERSION_LT=1:0 VERSION_LT=1:1
# Compiler and Linker Names # Compiler and Linker Names
ifndef CROSS_COMPILE ifndef CROSS_COMPILE
@ -394,23 +394,23 @@ install_all: $(call print-help,install_all,Install everything - library bins doc
INSTALL_OPTS ?= -m 644 INSTALL_OPTS ?= -m 644
.common_install: $(LIBNAME) .common_install: $(LIBNAME)
install -d $(DESTDIR)$(INCPATH) install -p -d $(DESTDIR)$(INCPATH)
install -d $(DESTDIR)$(LIBPATH) install -p -d $(DESTDIR)$(LIBPATH)
$(INSTALL_CMD) $(INSTALL_OPTS) $(LIBNAME) $(DESTDIR)$(LIBPATH)/$(LIBNAME) $(INSTALL_CMD) -p $(INSTALL_OPTS) $(LIBNAME) $(DESTDIR)$(LIBPATH)/$(LIBNAME)
install -m 644 $(HEADERS) $(DESTDIR)$(INCPATH) install -p -m 644 $(HEADERS) $(DESTDIR)$(INCPATH)
$(DESTDIR)$(BINPATH): $(DESTDIR)$(BINPATH):
install -d $(DESTDIR)$(BINPATH) install -p -d $(DESTDIR)$(BINPATH)
.common_install_bins: $(USEFUL_DEMOS) $(DESTDIR)$(BINPATH) .common_install_bins: $(USEFUL_DEMOS) $(DESTDIR)$(BINPATH)
$(INSTALL_CMD) -m 775 $(USEFUL_DEMOS) $(DESTDIR)$(BINPATH) $(INSTALL_CMD) -p -m 775 $(USEFUL_DEMOS) $(DESTDIR)$(BINPATH)
install_docs: $(call print-help,install_docs,Installs the Developer Manual) doc/crypt.pdf install_docs: $(call print-help,install_docs,Installs the Developer Manual) doc/crypt.pdf
install -d $(DESTDIR)$(DATAPATH) install -p -d $(DESTDIR)$(DATAPATH)
install -m 644 doc/crypt.pdf $(DESTDIR)$(DATAPATH) install -p -m 644 doc/crypt.pdf $(DESTDIR)$(DATAPATH)
install_test: $(call print-help,install_test,Installs the self-test binary) test $(DESTDIR)$(BINPATH) install_test: $(call print-help,install_test,Installs the self-test binary) test $(DESTDIR)$(BINPATH)
$(INSTALL_CMD) -m 775 $< $(DESTDIR)$(BINPATH) $(INSTALL_CMD) -p -m 775 $< $(DESTDIR)$(BINPATH)
install_hooks: $(call print-help,install_hooks,Installs the git hooks) install_hooks: $(call print-help,install_hooks,Installs the git hooks)
for s in `ls hooks/`; do ln -s ../../hooks/$$s .git/hooks/$$s; done for s in `ls hooks/`; do ln -s ../../hooks/$$s .git/hooks/$$s; done
@ -454,6 +454,8 @@ zipup: $(call print-help,zipup,Prepare the archives for a release) doc/crypt.pdf
rm -rf libtomcrypt-$(VERSION) crypt-$(VERSION).* rm -rf libtomcrypt-$(VERSION) crypt-$(VERSION).*
@# files/dirs excluded from "git archive" are defined in .gitattributes @# files/dirs excluded from "git archive" are defined in .gitattributes
git archive --format=tar --prefix=libtomcrypt-$(VERSION)/ HEAD | tar x git archive --format=tar --prefix=libtomcrypt-$(VERSION)/ HEAD | tar x
@echo 'fixme check'
-@(find libtomcrypt-$(VERSION)/ -type f | xargs grep 'FIXM[E]') && echo '############## BEWARE: the "fixme" marker was found !!! ##############' || true
mkdir -p libtomcrypt-$(VERSION)/doc mkdir -p libtomcrypt-$(VERSION)/doc
cp doc/crypt.pdf libtomcrypt-$(VERSION)/doc/crypt.pdf cp doc/crypt.pdf libtomcrypt-$(VERSION)/doc/crypt.pdf
tar -c libtomcrypt-$(VERSION)/ | xz -6e -c - > crypt-$(VERSION).tar.xz tar -c libtomcrypt-$(VERSION)/ | xz -6e -c - > crypt-$(VERSION).tar.xz

View File

@ -2117,6 +2117,38 @@ Hash: sha3-224
254: A525CA4BAD5D45931E9D86F95F152C7BA6685BBA7EEDDDE6A0E5E4AA 254: A525CA4BAD5D45931E9D86F95F152C7BA6685BBA7EEDDDE6A0E5E4AA
255: D95C168E8F666375A1C7D574686D36293FCFD3717D79B212D47D97B7 255: D95C168E8F666375A1C7D574686D36293FCFD3717D79B212D47D97B7
256: BD34C1FAA03A01DB5E0C3A3D5E0440D6E5E361060F3DC9D149A26812 256: BD34C1FAA03A01DB5E0C3A3D5E0440D6E5E361060F3DC9D149A26812
257: 03E10A11A8BDF2EC14AFB011C5C9BB2EE3680025DEC0424DFE5DC2DF
258: 33194743142F4F5474D0C838F810B118896FE27BBC5F2DF131B0AFF2
259: 662DC8FC31A54BE1B24EAB02A31DCED04A9F91732BC8FC1E15019FAC
260: 4DF0C8D3C0E78064FFF39A81B9425CF27143B1B8F5FEB7196F1F2D83
261: B75B4229C34125D73A2CBB3121F52E21D0BAB18C26325D737F059E5B
262: DE5D530F306AECC6FB3E28BA257F880021DFDC1587CB6B1F4CE46EFC
263: 5A7B8217581080C5BE7D170616F2CC83515E2FBA5C65E5F34A467DA9
264: 903BC1827EEBC44603C6B928980CB3DF28F263C4156513022A45F475
265: 9908F48AA078D1D6597AE7C218CEE0EEB12A2C41231B51B988373353
266: 8AB0C41518972B3C57C089A8C0EBC60A8E9C43E301C43421A37D74B7
267: 54420E517AED65DB6EBBC277F4FAFC724B8B7C696A1C71D3AB3ADB55
268: F5D60C41755C454A9ADEF57FDE9DA16DC5AA415BAAA78903ED9C64DE
269: AEE77DC85E4C31A8941220612457825E043F80CBA918C2E70A470788
270: 4237D2216D0BB493CF29E7CE17172C01401E19F6D31E868532ACB470
271: BC7C26D8C4AF880BE8506E12B4D4091949D8B8E67A1812304E6195C2
272: FD7441603B909F3CA97425B835DE0B90F81D6245D54D835AE8601EBE
273: 6807B8CD0195E6BF20B4A9A6A549F06DC7BA4BD6E9F618949E79FC5C
274: E29F1EE90A3C617AA28137B4A4569ADC5DC70EFA6575F32168908C28
275: 494ED666F699AE72248EA95192E97715DE29968B02782693659B73E1
276: B2AAC103619549F1A2666EEC5A75C54EB0DF8CEDEBA0ACF8866D555A
277: BB442BC168D2DBBE1FFFA41E1C0075320998A319D8B2E52512D120D6
278: F7A055F7B30C4AC467092B4370799F885A93C622C6EEAE4694F1A374
279: A15A08CA715FE318CA88404B5BCB19C5D97CDF440F84FDE03ED60A70
280: 20A02956C34845DA985D75CF6DC80C3F53BC1F1C7826126994D71F74
281: 2E3F7DFB7B58AAA8F01B11F46B7BFD5E27063E73D3BA32666D933284
282: 395B9F7BB41D7FB37C4C33FAEB604AB91AC82139B8DDB10B91235F58
283: 444AFF7A34FBF38911AA5329E4A673D5A41AFBC8DC1E4C67090E4924
284: B622574B90BF83A82B3E664E1C834EB9A8051F942300B32367FF5851
285: 3392C851D4D61FF0F15178E7AEBF176E640271E25D1617F647CFDD5D
286: 1D6060A07BE28B210DAB552576FBA7CAFF2C25BF75C8F0BAF5B47793
287: D0A87B49E62BC8D7A2BCC3C8104836C5E712F2A4B5FE52D67A23BAB6
288: E0AE33F2DD63C31EF87F219C9B80C897669974B73D8A9FE64500887B
Hash: sha3-256 Hash: sha3-256
0: A7FFC6F8BF1ED76651C14756A061D662F580FF4DE43B49FA82D80A4B80F8434A 0: A7FFC6F8BF1ED76651C14756A061D662F580FF4DE43B49FA82D80A4B80F8434A
@ -2376,6 +2408,22 @@ Hash: sha3-256
254: 6EBBC54EAC2E9506E5A6B35E09C899A6878ACBD3F7F9CEE602982F479F7BCE66 254: 6EBBC54EAC2E9506E5A6B35E09C899A6878ACBD3F7F9CEE602982F479F7BCE66
255: CEB94E2E8BD45BBB4AF2A3AAA05CC3F7BC010A6C68E242923CE3731A108DF8E1 255: CEB94E2E8BD45BBB4AF2A3AAA05CC3F7BC010A6C68E242923CE3731A108DF8E1
256: 9B04C091DA96B997AFB8F2585D608AEBE9C4A904F7D52C8F28C7E4D2DD9FBA5F 256: 9B04C091DA96B997AFB8F2585D608AEBE9C4A904F7D52C8F28C7E4D2DD9FBA5F
257: 0E4ABD998FB067CF059475BFA57585C94C3786DEC4FC2B600663F59631DBE2BE
258: 4440FB3956DCD5D186F72436E23D20903C21A1A2A1BC351EDA8502509C30FEB4
259: 08E19DBCA3C0735EE75F47131CECF6EE8922162C0E84D25C3A6BF132DB7069ED
260: 809D398F5984D455A403A77FDFE8A9E86DD18149337D891B719B4D7D7D2A1692
261: 30FF0B8556DDB6425AC9FA62BA25F67E12DD8536EA4CB1861B02C36D54E3F9A2
262: 90CFB8A5C3F9F243DBC96EF9703AC75E480DE00E435E80772FC57CF38E3EC7CD
263: EDE7A68F2D8F80F1C6AFEACE7F6C2F1A27F12656CCF8BD84C417CBAC9032C0CE
264: AE27F6201401C3006905D09C2B62CD74E60BFC5B23079AC41D8097A1829CFEE6
265: 43566E4DE1A37555E272BB63D1113B6061E4A9320FB88E4B435CBA67794A1AF2
266: 59EC88A4E06C3C0AC3739C834AF7F533BB1BB8E0FD92ECF8554F048CF0B23CD8
267: 6F4AA17FAC4770676532195A7941EF9A34577A6493019CA0ADFAE099CAB4A443
268: EDC9456FD6FE931C317139713DCAB3ED10CCBDE3255CD2ACBC5DA2BAF4C49626
269: 8B6F715B06995BB2DA6A6EE96958BFDCCC873A28AC0DB5C8351DE1D67C29886B
270: D77009956124FB8FC30EE79B44B213D6C94C684BF24A02E87D8544C9C5C23D91
271: D409BCBB54825556454A757A1F629135BA49C0467DCF6B4E0AA69E9718DD31E6
272: 0B21EC4A8EFF6D179E09BA9FE0AB08515B24E0923FBF419F5C30A38E64577DB5
Hash: sha3-384 Hash: sha3-384
0: 0C63A75B845E4F7D01107D852E4C2485C51A50AAAA94FC61995E71BBEE983A2AC3713831264ADB47FB6BD1E058D5F004 0: 0C63A75B845E4F7D01107D852E4C2485C51A50AAAA94FC61995E71BBEE983A2AC3713831264ADB47FB6BD1E058D5F004
@ -2587,54 +2635,6 @@ Hash: sha3-384
206: 2DA46ECD91373DEB9675C75901D3BE59ADA8580BC8F71DF2A3FF1AE02310F23681B6C6FC840B492E59E017686EBAC7DD 206: 2DA46ECD91373DEB9675C75901D3BE59ADA8580BC8F71DF2A3FF1AE02310F23681B6C6FC840B492E59E017686EBAC7DD
207: 05C54EBCCE483360359D63BF0AAFD97E2B15B00EA40C6152B3BBAC80285711CD0B00FC234CDC214251E0AA13E38A0008 207: 05C54EBCCE483360359D63BF0AAFD97E2B15B00EA40C6152B3BBAC80285711CD0B00FC234CDC214251E0AA13E38A0008
208: 13A929EB9E4AC18A07DE84B17E79BB420A86924B9DC4CD80038DD61F17770FC42460F2A0A717DD26FB6B6B4DE357AE02 208: 13A929EB9E4AC18A07DE84B17E79BB420A86924B9DC4CD80038DD61F17770FC42460F2A0A717DD26FB6B6B4DE357AE02
209: 4A40DD56C8A2EFB2E3DE6F05FC8FE00DF8AF8869A66AFF4FE734F9A6CB0DB930D547FC0F3F213F6B8A172DB13B15EC5C
210: B34FB3B13D1EBB9D330E6E3FA5EDDCB8BB3119502B1216A28D39CDC265638703B4C163F6D9FD063CD42741251D8BBD86
211: 6E6001A3A9CC8A306C3AAB6D6D233D1158B95282B7E39B512E6BFBD5F2B08F1E7A0D77F97325BE4372A184CD7D0FC826
212: DF6879C1388A1F05DDF772F3AC998FFDF74C88B56CDD359F0A597C66D64848E972AC5B4DF7AB4242B90941CE36AC5F69
213: 77268B4535A9333ABE05E59C82086F89F0A712F4BE2A1BBE12F54CDB1FD62A27D952E7EE05B73998167E03CFEC1D61AD
214: 58CC7C573FED2FBC55BE05E8ADCBEAD1DDF510307D2F268EC7D0D33167C782BA494FDD6E3AD7FCF4DBADAA3B99955655
215: 52AA81CE8BDA97989DC2759F7EBDFDFA2AAC37C130C0173846B15C17B9FA4257EC13AF3FC2A9B4B7F9C93812871203AD
216: 90C856EFF09CA0F5BAE42412D1D85FE717784FD065F185D85CB3A7DD2C2390860989E21E9BF4F978B75293682473D76A
217: 2FD4E398CE75C93218B139AA3D9AA526ACBCF8F0CD9E158A2207743DA9CDD5CB0E8F198C7F58395391EACE180D3BDEE3
218: 57BACBA8E5F281DE6239901F674AC8DBFAAD70EDD47B0954920826C65170183189144A3FBE9BC9C1E019D4F50FCE9D85
219: A53EC67CDD6BB96AC0D170F2C3D00864BA299A5378620891A8EEF134E5EEBA57387C80DF4EC7688BFFFD02B1886F868B
220: 800B15DDFBDEAA51EA113F50F5BD908D94C817B9135A753FCB863B1BEBCEC83B7B6501D448B2028927EE0DB39739934A
221: D9152BC50B4B65E6C839071D1BA8E4C6F7BA36F0CFF4EB312F25D193273C7DE56D49D491271BAF8A1966FF825D708499
222: C6713760D2C7882B4A4AE56016A9CEDA8E79181DDBB56D71DB51D5F0D3549B3864DD7A9C5A1E116E3AA44899D219291C
223: F83D07855D1CE216BD5EB9DBA928A7199EED848EE558BC1B37B1B9FFE58AD92639C3BEA792CC0F5DD13F53E5A7B6327F
224: FBCBE362486F498A664400D2A384D1FA441D17BC6FD67CD8C058E1EB4FE9EFE5CD7DB9AD5EC72B2AB3C68F4C89BF0936
225: 2C1D8DA9529FBBCEBF9E90142FB60D31D89B0C12A0E7671139DB2FBAF20C660085160127BA552DFC86D4D5A49312434C
226: 10877E052C3BD934695E0AC5B7AB3C9F98C315D230AFA68033D8C148401E9EE1F227480A66A04AFB971F57A18AE1D901
227: D9638758043DE836FE6422FBB320CAB640CA59E184411DE5251A57D9ED10E3EF7F905F45468B5107329BD9447E3B77AD
228: 5A2D786E50EC7123028F0F7C0AF353F53C388A38AAE924A2AEFA8434E9248C7D3DFBE1F64FBB441FDE8E5CAC8BD3D946
229: 62CB74247A5D9FBBC44B80F84B1C101255FC0DEDFEA35F67E58294BB40419715E0BD46DF3F678D1B0F927227F34F018B
230: ED75860E2E54F435C2DBEC981DF9BA0C85854364116CAEB16EDD3AA2DA7F5DE6B59A6A514CD4924922E0E49D05D645C7
231: 9227286B1D157927BDE9B7F1D0EC282D4FEE5616AC69C795D87AF5ECC636ADB551A1D6EE998AA450EE036F9F996B5D62
232: 3154CA9AF38CA7FEA5AA150A789E3B6DBE5453B8A9965972B7DD868972D26328D1F8FCAC89F02E88C24610FFBBE309DA
233: 9896F65C76FD486749F4645EA59DB2A110BF563C90A08A557481C7B88224AF5A55687B9DECB5D421836B8689F6C24B4D
234: ACA8E1C888B06AA00BA77F99AD584131414199AF483438E5914D33BE53929563911392D330187DA3062B382AA2275F2B
235: 90586C742D2CD88BF21CD78FA33A20702F7C92C7F151E69B0D1354E94242F8D1698EB94B95455DE8287EBAE36ECAFD3A
236: B30A1C6479ED2A9BCB9C6F4B96708E4A3DA2AABC32B70AC66ADD8C1EC7EF8902140B8AAB4131CE0DC12B444654492279
237: 52004ACCA2FCC007F28E62AFE5EC878CA73DA8A2D5AE0322C3A33427EEAD0EFABC29DA9DA638CC9840DE43B481E3F95A
238: E5BC6D54DBA698C8E0048B096B8BB6A6F2C726939344C0148BD9578DCF17AF17A8179CC8437D0A6314B7E01976440FCD
239: 8E6657E3957E757DCEC0B9E895D1CBD1E9D51F72E3ABFBE09342D029BF89EF03B6D2CFE84BF36DE29F224C7C148B63B1
240: 3293CD451F851B8A796E59B4A984E7135DA9D71C4ACCAF883CF637A11418D891617C1D90D5B77574B453CDCD76164BA7
241: 1E7A7CDB8BFC2755806A3A49D75E4336214CCEE5321311C66BE7DB906C0434D4C2B300B83FFCF17F6CA67E28123C998D
242: 9D65F66674459F0AFFDD582C7100E54FB255E16B3C8A237B5F5D025E0478982983C146C0E3D0C57BED0FBCB336B97765
243: 79D76C8BBABCC33429C5768A17C50FB8CC79178A204110E0721D1F244B752E87869D8A7BC9BB635B7D9A01B7351D2B14
244: FC2068814A0CD0E8D67D82F6332F9F7C1840F79B998E8F413B3580F8C3897F25CFD7DA579C4E4B34BE9D1BCA7B40C633
245: C3E654D188E54C4E177EE284E3BD54693C744E82FC0096F2DEAF245BF27AE587F0303B6F2BCD74F908272FDEFE6BBDA1
246: 2D24B99C1E072C27B52FC8CFC4C1200777BE28EB50423F40B99BFD99A86C03D4D1509A2A9A870584555C9B731BF24E48
247: 1861A6A2F336A5C2C8242B62437DDA687BFF1A45C7CB2A3B3367C27D6DF5B508079B076D106BC8CC8B6BEB0AEE13E907
248: 7154735277744484C4CC0DE816744C9AF4A206760D9C68B016E6291E31AEBB120026F97D1F5E698CB33DDCD3690F9D60
249: ADD47723704F546991DED4E9C46B13E8F768A214A1045A8EB94E9BF914416A04FB214DB8AD321CC036065424C7135C4A
250: 0E6650FD76A99E9E9C6A1CC23BE7D53C2B3AD7819E9447ABC11B80B167DE169433C530602904486DCDA00F18CBF69ABB
251: 45B27C1ABE0D787D3DB33E183E8699CF5A2CEA99B058648285D129A8D6574ECFFF8E66EBE05579FDA8BB4C088FB8E1B2
252: BEAE990C7DB7B18DDFE21D7962C4656994F4C5299A3731AABDE2EE244B69D221FDB622D5BAA0DD4F85AA672F4A7BE8F1
253: 5FA02AE2D4A47B7DF5C661318DE49E99CE807CF9C1EE00238B08CD45C982A20CC9DD0EDE10D97BEFD2E5B4E07821D10B
254: CB9794934F56A155BE01B7B0E41EE00AC3A081438F3A66B7BDD7FF123F54D93705C630224F4D76B51F4D30D70D108904
255: F5CC4DE5026A9359382B096635EA02874262DC3E657FD8EB10E297DF8A77326EF8F73220F4564AB23C092F24E68FDA76
256: E834031D7BAB82AC00905187335595E020C5BD3220924F4F551D7485931D2CB9EFE90B6574FC46B63265314781DE017A
Hash: sha3-512 Hash: sha3-512
0: A69F73CCA23A9AC5C8B567DC185A756E97C982164FE25859E0D1DCC1475C80A615B2123AF1F5F94C11E3E9402C3AC558F500199D95B6D3E301758586281DCD26 0: A69F73CCA23A9AC5C8B567DC185A756E97C982164FE25859E0D1DCC1475C80A615B2123AF1F5F94C11E3E9402C3AC558F500199D95B6D3E301758586281DCD26
@ -2782,118 +2782,6 @@ Hash: sha3-512
142: 64E5A4E32097CF9EEB8170B582503AF020076F2856D7E67C0ACB4C53C5F7FCB6BED9E330BCAAC7C9229D7875EFBE233877D5D3A43A25376EAF7804320599676E 142: 64E5A4E32097CF9EEB8170B582503AF020076F2856D7E67C0ACB4C53C5F7FCB6BED9E330BCAAC7C9229D7875EFBE233877D5D3A43A25376EAF7804320599676E
143: EB9748309C6B70FFE82820052AD26EA99F43968D2AF359ADC804B2A76741A62EA8D710F018EA113C2259D0BD6687E3838602AE6C1DFF727AE985F059141C7217 143: EB9748309C6B70FFE82820052AD26EA99F43968D2AF359ADC804B2A76741A62EA8D710F018EA113C2259D0BD6687E3838602AE6C1DFF727AE985F059141C7217
144: E1951B8BCB58CA75A34AF80A7A2B765CAD4257FE383A79B55BF21F180B75F6E5B08F09598851EEEA7D13486387618D6C6BF88CF23C0088A3F783F59A06D60493 144: E1951B8BCB58CA75A34AF80A7A2B765CAD4257FE383A79B55BF21F180B75F6E5B08F09598851EEEA7D13486387618D6C6BF88CF23C0088A3F783F59A06D60493
145: 1ABEC62DCE93A6775CD2EC0098D7264676A21E644C7C1B80580C305CFDE31B7D5848C63AF4D0E7CFEDA2E5076A32DBD632665FBB1E7F06651B2ED4D7341AC844
146: CA5091C6725FE00F228E6BA2AA0315ACFA6EEA06960ADB4DC05458238FB06CCE22445295D8F2B05A84BF6EB40B4EF868D8E15F2CF768CAF909DD477A4658DD1B
147: A683424798949251FB8625E2A52ACF592AB6800292E3A98B5006038647ED54A9E4D6E6479E7A55646FEB509739286DC8A7966F745D73C3D3EA579AF32E52890A
148: DDD146DC9D10D91342125E8058427333F1D09EA09D6A4FE602937294B0CEB22B217762E2712508E8E04E70D63BEE64D4AAAE32E78B73BD815AC9E2840FCA571D
149: F77ABCD2C2D511BDBAEE36C2DE35A642E51FECD812F3A032A7380C8B338AACF10E17B5E95D7AD5867EF24238A671646C9B500317EA39CD71CB201A8C092455F8
150: C1A65C8F589E6B6448A1FCF0B08542516D7E0FA6BF2577403C1F41E61936BA49AA267B08E4F3D5D0F432EB0F4F540CC1DD498EFBA236499AAC9C506A6801D327
151: A352EB1537BCF28197CED8583C4DBA109F0D841B62EAD5A48E3CE37AA2F5EFE36E3D27687599724109A1880780BE9AA29EC894617FC8AFE3FC8D66F62105E3EC
152: 26172B6E190BF17CDE4C2EBE670A2EAB2A7469CA6CDCBA5B6446EA0EBE108730292B9E3BB40CAF26E6451B94A45A5EE264B467F4D8D879CBA3AF8095E859B722
153: C924F57D066418F055B2CBD1333FBE033545FDD0BFEC31FF668043C3C131785A820037B78EE69EC653596AD820B4DC949F9E737EA10E57B5975EA53B4E1DF6E3
154: A9DD4632B539F80A8CEEADA0FA3661F16C0718B3E506896B71560F0345220533F5EEF5F1ECE12815B488FCDE1D28E419EC602DD3796ED393953CF68BF18C00A2
155: 3EC4C4E48C74DA575E50CDCC2FBF8DBD06BDC15DBE21CB74EF3A9DE029366D7FC11513B1D879AB289551BC4D551ACC0444210BF5C8E3FB775E84FE27FD95FD6E
156: E6EDBC0C351FB5067DE0421359423289D1EBFAECA872D8F583428893AA42096EF6579D51D80582D92993B5BD4DF39342E786B612FCC685CD6DD028BFB686F419
157: 87E035C7043B81150392EE06314E7FC8692BBB1A545763E7990C67B7F6E9AFC9655E6C203F3E33E5528CB742E8E788639193A7A6A734745076481ACF0C59EA4D
158: 2321ECA247118312D0DFE8A90081E48B370BE7BC68CF287AE88FDB7509B0839B5DA0005488E157470B80E9805C9713BCB76AB4081869B7F15E35823B631459F3
159: 3E6ED52D078CA9CD5F0725B22CB64F11A7C717F82BC6BCCF6E00698B39C03DD2D597C931181AC88C3983EAF693CCABF25E06CDE5110D34108ED8748EE9B5C976
160: F03A59A37E516F64A6F7FE28B9670D039E6376085735777876EA55E97BF2102F61438D66242CE0C84C1F39AED71DE9AA9416CB373F4C102BAC11DB994C708696
161: 31896A7717BFDA2DDF0428241BE9941B654338715E30AEAAC6B1EE3DD6A806764AD01BEEE75D31FA0B8FC99DD6669043C7FE2BC94CE835C8A90DFC5B4B63A739
162: 66DCC6F0224D7E88CC24E38E3FF5C4CFA751B85B1CF048BF98D099F57D2E643C24EB88C43470C73A77E3E3554C7CD9B8C5B0EB7E56E05D34A6FAE618F2C16122
163: EA57F647CC4FAF53895D5B81B7952CD79D6460E1402B39644389BB23ACB96DA9B77FD01AED5D90D76A104EABAD3BBA41B59D6529E6E50629BA72C1CB6EDAB390
164: 674F3F150CBCCC59720B9405247E5892B3963CF872C8DC80EA8F6A35AC1E01292FD00E8ED428DF84D4170A353772638F2E6F164100D5F9946A099E7018989DF2
165: A9E10FFE76BEB4D30A38CB0BE36BF635F3F42B1D32A471EEB78305B5B95E2E1CF6772025B52D0F660222F2F660C2553CC794B32B35287B43021687869930B0B5
166: 6370B696770B12D5E0F48E2D8D065F9D9305AD1863E4899CF72DA6FB67EC1CB5BB860850D7B605A43D056251EDCE89A4CAFC3B751412F61B1EAEC9512FAEF142
167: 77AEB7615194D38076E9CD4C4F7361D76E96D7856FF6CC8C0D88E198CB62445D4A2DBA863DC5ABBAEFE09715C8A69A0A0B382FEBE29E64AC773A0A3D0ED05624
168: 9567F47A24E5C3B934777516554D4875DE4B1D8A59E18B6983827DD9BF394414EEFDCCF8F6B10ACD3C08AFA951BE34A31D11065CCD486E71B530F33B7EF263E0
169: 90334A76F71E06E0BE572822109E7595F5EBCEDBC668A863E50667AA79F372EC108F2ECF760E9439F2F212FA2BDA28DBE4F1C69750D7DDCAE9DF2CD8AA813CD9
170: 1C52F3B96180CF3B0135B2A7F434454D7A199D7E3A29D2D6A146FDF95E7B35FE4A23F18E29D88E93AA55BCADD4E3F4146593144E5558CBB7E74B29EDBC6B0052
171: 3C7C90062468A78D6CBA0AB4D0590231C97A1B0366189354FEB0AE6364CE7872046F812C84EC0692D7E6A6D9D3262C5CB0DEDBF57677B85461AD8CEF823ECE2D
172: F0E571152DEE3D52793983A014F87FFB1B29B35DA5BC192E1536BDBBD4D07DEED3D98B78DC8919359CE005AC5DA2A431E348F0B402322B5E81C38E1589F88210
173: B4DFB79C8B64487A6C3C69DD474CE8568CF78D3193CEE229AE886754AFDB749D0A0AD054F3724543A5FF49500C9C5D8FDCD6ACBB65B1183E54745DFF2E068A06
174: 3F692D86221CFF8537FEE95F933CA79CD608B182C528876BC93AD594E5A161A2D24C43ED8860F6C24B5EA4BDB3092B693CAA999661F059C3E9E2C31A9DC57177
175: 4989728989349551515A27051B2A1BF9A7718F0F6386F08FB1A2A83CFB50D0361C0BC8345228FF4075410A08619FBAA45D9E89C452B6113F5C1876099AC9C9EB
176: A4AC9D88193B4625FDB8C9B04A724EF9BD870FAD5FF50AFE3BF52387FBB5F10821CC6EC1B3E59BBFC7F5EB27DE0C685B920F02507AF8F358B01874099B52610D
177: 8D59DB0152AA38B13EA9CDC76A1261D071C3FABA387FEC8753057425CAABCF9A676140E830A80BEAD0AA32ADDB2668DE185D080D56002B050AA3BA5B48D4A9D0
178: D4929078B980F0694EB69D4850989F0C2C263D62C4BE2AB25C124F059B8CEA785D43DED46EEF3F1EF68C04938D2D0E97EB485D483D6487F1A0181D696B00301F
179: D7D9850E918A3FA9AA82A8BC51743BF751A1C2AEF157EDA61655B194E15EFF6A61DA2FF4D094DC2B07E668750723AF47BC584F1A113E2A259ECDDCCCB684EC03
180: 463270F7735C96783A61A924F7D71871DFB4A74C942B6766F8A1F24EDC631287A38E6FC906212E41D4422392422CEB9ED067D8E57CBB3842C6A2E06926157AC6
181: DD31BA6314F84199C5C08CA7FE5E5F3BECD2379635CEB509F26BDB939F17F7E52035F644CE4DCA267C84985B4B3F6A8A4439764E2E49199746FCE25A968351DE
182: 528DE42A978E262EF32E744E54F07AD799FA6CE46965F745FC5430C3C08804A5A97AAF4AE7ABB235B223740FB1C9B216A0681A5D9E34C407756B71DA2C3E5E8C
183: AF73CCBC4F1C6013E90752C407550696C8A63E4B063540D23069DBA4ABBF4350F90432CAE20ACF209981CA3FEA97B9954DEA6CD322B8C304D4CE0904F7A5BA12
184: 2293FAF74636614F2903F0D9D2F7419A67813D5CB7D5329C7076C427C40AAD6CE5CC8968037A9D1F0C2E3FD7B6E8A13C86D07C59CFBE7E0DCBA3988B715C97B2
185: C0A8653314E2C8AFC45EB374A194D295A725E3BB0C90F315A37F63FE4BE62C92D790552C56BDBD282B5D0B7A44F7F26C3A555C3040C1C9BFEB4033E789A9BD8B
186: 1B13A32EA35F8DD3722D086ACB2D490C6C0CF559644B59851799F7D0FDDA736E6CA516E8C252D59348B62AA97ED9B9D16684B6A7795235424FBA23AB5EE1EAA8
187: A7EEA4D613F53A93F39CB45B7FD34F9D5E746DC24C686F83B1A3ED32A7968E89EF5EB263723783F32FDA29ED685F236A531D27314A5A3AB470BBF0DEBA2F5582
188: CD909EEEE155267F298E31CD5DF0F178EE3F9B919350914336F31EF2FA89FFCF330D308BCEAD8FE13C5C7D0E86CEF4099907E409AD67800D9F2C457DA816A053
189: B9C95E3A4C932D18C47D800B27BCA8A4883C7CAF1B1156218611DC29BFE4A8A9BC5986ACD1FD57953739C90E0399F386291FB173C16F16B60D715D5BF2380FB5
190: 7F4C4A05AB2F19B2658F4C39A2FF128CF11A9431695C2F7F9928F8ED1209F35F4A7C158E64246EC3CE4C2CEBB40E6192EE8EEFD29FEDD36E894FBDB0FC180897
191: 53AD1DB32F4627C15E1B2704EB4FDCA319E6161C3E118C9CC2F2749F060BF45A9DF2FD8F097864B7E5424167DD23C8C25C15B3B39647FE3CEC8F07F1E0F31FBA
192: DAC3C1A8A682D2B017F7AF5BDE43CD4BE3D0E68551DF08AEF1317B4D03141F154141E76FEE1548A63C6E04659B6F0EEE8F28E8DF40588442657C4F8976B6E2ED
193: 37A945C369CCE2B05B5070BC3BC18005711AA4AFC282CF88358C689863E0019218F7B2CA1CB37CD18F1B254FED35E35EB0DCEAF5762C5B7ABC02195FA024FE52
194: A35487A60B6426CA8545D660EA1F689BA2634DA3F8BFAEB3932BC7D9E6BB869A963B88B0C18798A3295709B58A26C31818EE07133CA69C7E349B93F9315AEF9A
195: F83654A1E0173053213D61586F7ED1F955824C556047AE0C2432E2134A2119AB96E1CEEC98E882582DBD268C995FEAD1DB68341466AEC7123E3558A3FADAF629
196: 57FF950EF2FE81D4E715C2C60F7A2520333D44C8C65C6ADF7657A69490DB90DCD54DF16D53AAFAD388B91A41BA08C9A5C461919447BDC23B3C81BB14618DA20C
197: 58907BBABB3CB98F9F4DF82FB904144EB3C08A6973C3A9FD5EB893B0D41529C2DEB804540468B85A17DE22C0B9F378E7F403F20083D94E851ED58A8D2366B3EF
198: E24BB11AC9FD54381708FEC20110C59CC12107452F95C9A91FB847737B17E127FE6F8129B79CFE134AE1188E0CF124D96D815587C291F87454731B5FED94C9C3
199: 504B1AC969480C6813875F22A726EA1A0F21A7759EDDF8E2D4F4A3B5D730219666741C629B9C10D822DB0CE9176A4B9D8B2B5B0B5C5A44F457109D98CCA7E0B7
200: EA5D05F19348DD589793354793A15F37A73B4C0BB4E750B9A00757DFCE2F8B65A64191BB9B137DE00FEEF6474CFD47ABF7880EFBC51614A5715DF12CFE0CAEE3
201: C978AFA528241389A962E41BCA2F962058DBB22FDB0ADED61BD8586CB7F856451CB502FDFB2C11EA641FAA57B6CAAA3ED5043A7D47FB1492D073BF9EAEDD4427
202: C065EE248FD6391E9EDA280CA11CF1A1B6FDFC097C8E4898FAF0B95E938D7CB96B4EA3F0DE893892A72290EC342D8F389581168B8FECC93B0372D1BA572EEB5A
203: 897C46763249C5403EE207B6D7DD5D4F2F34784A52BFBE171476B0D73C56CC3DE14F1AB45FCA8560E012D0B62DE723CCE8F0838A0E6F48F38C71DB2B16E2373D
204: 8BE61D1B4B85EAC0D82A43188D12604E57F817592AEFF697CFF69C4047227035B20393ED3CB0E9A4B3968C5F8F985341444865D7EB1D067DCC550EA30BD9BE37
205: C77D8929543D7423956CFF582865D2E75FE2386F69C3D0873CE7C041C1BD8D6C05F34FA0C8007000279A5C4E0ABE2147D699EC19C23EDBC8CF3914FDA12ABE6E
206: 147586AC3A20E8068D38CFB4567FFD4E2F8A721F6529AC22F98C57099E8994478C0F06D609C19442305B7EBF37EADFF9434EF05984C1A5FC0D7DAD746FED3EAB
207: 35DE1D7A685CF18085AFECA7033846672B5865A5BC907B3EB1535B57659C4945EC87D68B22B19EAA557A531A7652728BEB689236E18F7D90C357138741EBAD26
208: 09D66AB1F275A2345F77BCCF568DE8A6DD22A3C427A5DCE792CDA87A11E976694BA5640CF3960C9E20249548872F310125AA7EDEB1AA1023C5A3C96182054572
209: D27554B33BC79C9388819752B26805A60ACDE0519C23602A48B21563F4672D70CDE0F319911D3937EA2B386262BD4E17C0DA59D98273D24D2522F311FB423158
210: A28A725FCB3798B5EB342DE186FB0435171AE345605B6D47FD81507B5E14F114B7D01330ED8FB7F105324EE031404FE5A3016B13BD254CFC8C3303273D6AA629
211: 46BCB65BFE5766247E0F3A6B3F8467B29D6ACE2D252E7F05874C0CEA59B81843F07DC790640B449DC469D3BED7697AF7AB5EB2CA4F1210144121F764E5504AB0
212: ABBC7A55AC334E9BB0C9A9BD8D83618F11197EDD6D12AA48D9F38662BB90756A7B68C073FF7393A4417C43B48676F5F3DAD4B5F1E1FD94E125EB366F3BEE12EA
213: 9F2354E4296C58E4B99200EC32489E032A4A1E1B48ECFEC897B8BEF2C963901450282EB7E99B44EF82AEF2C011F6ECC4B471F581E369A78698A48C128D203D75
214: 643749B9CDE3D8D3D6411FD82E5C13C8C540340088ADE75F228B66CBA8B9CB870D60CC62C96F42D5BFA15A18B475C9C55AFEBCD916F60D2570D1A27B5974A67B
215: 5C68EDCEC7F61F64470C42086F2D6107FAB421BFEE6EB17FFB6339F9E02C4A0EEB0D39FFD0E5A3CD35456D61DE22BB64C2BA87CAC564AE49472D541558662E3F
216: 84B0D25E746127686FB471B0F42CE1DA910292114757CAFB8D3F820804D2DFEE9222AE807844405B72ED167BBEEA667C8818BE96B4A9D78F65F1771ED31CEE24
217: DE1DCF3CC8444E9C5F67C26599565F91CC1BD8C0C33B42EDA2B6F99AA0960C8A447C5FDB5009AE89228B32AD7654D99934B768BEEF4019590AFF0AF2B7F5FC66
218: 497525C9BD087C5CEB38EB7E47F0888F9594269892B065A481F5B04FB7B1A2A5A5BDD79EFC4B072E7885E9F332233F12DC14364B41FF1202E88FA1D1B806BC93
219: 512FFFAB6D01263A49452F6D81CBCEDE231716D7EB9FC7749AC995A57692576CF8FB82908D8139B98880186913D9DF95690A25CD315DCF34A9B19A6A6A283B3E
220: A8D8F5B99C2434C8CDDB886B7916EA512AEBEFAD868A7BB07717C1FAC5B0B2CAA260403769A1A0C69768F534414AD9FA7F12B3D02D1F442A65E5556F3EFE777F
221: 732A6F8A8CF3067E35869DD05E63AEC915F8497BB3F61A1D2A9098BB77CE9F9DE7FAC952470DC6FE2862D0E5C5C976D2E33F27C07BFC6E9F1C283CBFA31511FC
222: 18F0D205E3C2DBF2D48D5602A5FABB089A4B9D9A564578E68E5F41768B123E4755DC5B12F1B103AF2D8EDCE6BBD7BE6C333480C82B9AC24D731084FE85A71FDC
223: 7D9389AFD77FABC28A3C3E2C06ADC63EA861F86AD9B68E491BDCA03481CB3E954A37B9C1C7AEE7DC4B8DC72853DBA80F4B7A837334A3A7495A845406F4E5C099
224: F1106BADD214947E9FC8953FC85A0F0F84B796C391F155E1EC2C17C0612BEE5F229BFBD2C107700A1BB0321B8677B1AEBAE65D50BDAB57839A637E859DC05DD0
225: 3745B81A669451501190E3C2C5F03B3E25DA4B41BD022D523F878A886EE1E301B34A6BA336A2D78DABCF6A2D6A94C3CA8FB131901804C3784FF0FC9E873D61C2
226: 891D7C0855B78E182AC4746D1DCC71D6F5D1F836ED7CC142C8FD1CC1E4702FDEDA515636747C4CB13C0E0B469FA2A2983265F5E62AC400E06D95D6ABDCF0804C
227: 4DFB981DAE289FD7FBE4DE0B3FFFA3B7C4861EE30C9A0600D7CB87F5E7DAD039AA9332921CA8765F0043588CA77B38EDE12A1C4C222F52611D35DC764890F5DD
228: D647059297820F21ECC2E9759DE4BF5D025E72DF5D29E4EDA4916152E8E4D300CDF249A40CF7B97BB5BC187708CDA3B86DC7F6EFC5D60D3446A90245BA7D9735
229: 2C358B7BB7D0C6EB3D708D1DC7010395D3D52576A267BCB6B7163B0ADC751A540646F8CDD337C2F530EA8B3B81E259E0916B706271CD37B451BBD9C6C2928E45
230: A5D6022A341485D5B404348A4D29090DE38DFAB64A3DFB0C3D966213B898DF63F17E6B818D05EE761815306DC3A5116A459158119F817B2C1D368FB7D37711C5
231: C267F3F3DB07132E5D6D272A510F70C753F460F26E6D2AC777FDC7EBAC6E3BE24C45E5C28FCB1FFDD83652577CB7AEE722FFC41ED02D1157448DF8C5BDDCA656
232: EE90F712311A783539DEE6D6F2D231565D04A5BF3E3B6E351DDFF8BBDD3DAD0CF5F9C360897EBD83E8C285D63530FA5059AC1FFC0E2BFC9DA73ABE87F2942678
233: 45AE7BE8B9E827DD4C36F7B77B0E19A915C0A12F5FC22E9F8A6C3625BB06C312D026B2CBC7DA82DAB5157D8661935A028BF8ABB00F8C3926F14B6CD7BD0E5C2E
234: 98DE68402510A98F17EC7122E2D7AFBC7C27566B48B3A2A8AB22376B301C887DA7051073383485B5A43A39405F0A6269AA09F7A7DD91C303802A5AA3BA54E0F4
235: 9BA9CFEAEBA63417100B96C725C0631523CD2BECC74438BC80F9A1022D828954F93E6EE5002D35B8575DD592156F43BCEA4A71C9646E03075D2F0092F1C9B863
236: 6A6C866AAF1ADE8F6F5A2630E44918055D18D1103BBCAF3E51446B7B51398581927C7DB21601079620AC8AF652C454DDDCC1F277E14C1244B37E5B35FE9D812D
237: 2801DE5A07ED78C19B00A56F3DA9881499BD2EE9F9BB7DF9191CBD34F9B4C47D2E05A23864923E30205A8110D2EDAA85A29964F1AE1EE1AE05727CDACB191396
238: F20D1FF110142C73F057F5FE12A039A2E60B6DF59331CC81DF335779280BBEF21FC7C0A5B3464B7B06C553E6A28838D36AA92FA21B25B1C1DF22B2990E033EF4
239: E954FAAC6E3E1A067351A7D19506A35E65F32692BF59021E99C6E04680EF36CE0226C4995ADE20354E800B2C2EEC617C6A436DC53B6C176B3A8AB93D0A0C4FED
240: D6918491B2ADAF571B1F93DEAA2B19BD71A65A25E787ACE57B488B796499BA25B410ADE9218575836E99F295DDE2EEF5843C29B361F886B1826C31D6BFDABF6A
241: 8522B040EB01F398950D028A7FA9BD74FD3C41562B3106E9AA68FE322FC6D11078CCE7286C4FC8AE25C95780B6D8177DF1EE20E1C22BF6DC6169F9D12A62ABCD
242: EFB7240E4E3003968A5243570E684B97DE987EFB4C9BB1955A92F46E3804D68C3272111002C5A741B6E0F79C72436DED03149B78484041E8ED547DD22DDC82BE
243: DCB85DB22E13D9CD9AAD37139A9FB9FEEBA58075E77551FC02BEB7828D6837EAD98ACC97EF1947C9B2990C7E8028D31B8DF1067DB4ED4D92EDF49AF51AB9DB69
244: 868B3A08CE08B282CDDEFB6BA266346BB73454ED5A060F5AF9EB404B6C0AFBCF58AFD81FDF8E2B9B5C6A1E1F6760051C88A19197D46D8C46986FF7FB2FA82E8D
245: F61CD4D4463E786D159B9773264DB6D9FDACAA0C43920F09279C39CB42E3DEFF8DFA4FA8B26357F942CE048C5DB8926F799E9E64D64192B44FA17B6245B673B5
246: DAA2E68B83561B224327ED460F484E7027C0F860E4C8D33E05215883875F6311F6E7636253B08BEBD6B729F00523634277B13A3DED45C4DE2900E249DCE133F7
247: 8506BB692ABECB87A4D5D8456D06A27BEDD06A3F3539BC1BFBD59E8E7A7ACAC5082A6DA639C589FA495FA4ADF3B2598CF14F8691FFD00037D52441867E5A6F84
248: 8FF91F48A82AF183695AB70B599C10E5806B09447A67FB2B1AC025A406473B8349845A47652D082028129502370E43E09BD551DDBC8A89C850F17B6DCFBCFBB8
249: 1102294CDC5A09FEA025DC364DBF0599A229F717A80A7AE1DCDE00D2DEAFA7CBB2773D251D3F6D9FC7D80DE1450466348A46ED6B150E8856373C3EACBB06009D
250: 49E0C6F0F7BEB7F287C401F67035DEE84B0FA65FDCFB27CDB3E7B502B32674E6119E8339074BF82318F78F5309E3E8B82FE4DEA51E5148B28434F58837620899
251: 0FFC5485EAB086ED2DD466A82E7447A3670CE693C39ED199FF672C4E25F4ABE7BBD99D703E3F9260D424D7F16D666A2FD1C29890BF0EA34B9452CFC16948FF5D
252: 50922E82E11E9D1B5E31DD76C91189F6D342BE64C6EDDABA089CE6E08E1BA35EE28AD09BFDF0543DA5865540F9ED8377978CE7BFB74145D3598D360E960E6B88
253: 057E7A8047AAF98EDE5497557542FA974FF0A68B0881CF2D6DE7FF9C31060604002C63328175EA3FC8F942B4E5D703C75B6658CC58668EA5C8AB26C1A5E88C0F
254: 56D893ABA2CBC9D8FF3108F43E1A9F903EF30DECC9B8D53333AC0CF282D42BD1F2B8425E7F44A8D361C2E7BB601C7318A908CC065DD0471ECC898FAF24656AF9
255: 800D31CEC315A30CF647DF7736BC2A57DF5B82CAE0FCE83EDFED4B5F3C34A44DFEBE79D35D89439D8208D26B69A0A9D050F7D3966A03D77A7B1111772DBB9B69
256: 3A843AF1F872928F0BBBB513207A1A8E14E3D911269FFF521292D07DBD5E2E520D6C2634292801184FFA54FD5F1E992CCFDAFF8162F5C5F6D1EA79DBCAE97E1D
Hash: rmd128 Hash: rmd128
0: CDF26213A150DC3ECB610F18F6B38B46 0: CDF26213A150DC3ECB610F18F6B38B46

File diff suppressed because it is too large Load Diff

View File

@ -1383,7 +1383,7 @@ static void cookey(const ulong32 *raw1, ulong32 *keyout)
*cook++ |= (*raw1 & 0x0000003fL); *cook++ |= (*raw1 & 0x0000003fL);
} }
XMEMCPY(keyout, dough, sizeof dough); XMEMCPY(keyout, dough, sizeof(dough));
} }
#ifdef LTC_CLEAN_STACK #ifdef LTC_CLEAN_STACK

View File

@ -333,6 +333,9 @@ int ccm_memory(int cipher,
if (skey != uskey) { if (skey != uskey) {
cipher_descriptor[cipher].done(skey); cipher_descriptor[cipher].done(skey);
#ifdef LTC_CLEAN_STACK
zeromem(skey, sizeof(*skey));
#endif
} }
if (direction == CCM_ENCRYPT) { if (direction == CCM_ENCRYPT) {
@ -380,7 +383,6 @@ int ccm_memory(int cipher,
fastMask = 0; fastMask = 0;
#endif #endif
mask = 0; mask = 0;
zeromem(skey, sizeof(*skey));
zeromem(PAD, sizeof(PAD)); zeromem(PAD, sizeof(PAD));
zeromem(CTRPAD, sizeof(CTRPAD)); zeromem(CTRPAD, sizeof(CTRPAD));
if (pt_work != NULL) { if (pt_work != NULL) {

View File

@ -24,7 +24,8 @@ int ccm_process(ccm_state *ccm,
unsigned char *ct, unsigned char *ct,
int direction) int direction)
{ {
unsigned char y, z, b; unsigned char z, b;
unsigned long y;
int err; int err;
LTC_ARGCHK(ccm != NULL); LTC_ARGCHK(ccm != NULL);
@ -44,9 +45,8 @@ int ccm_process(ccm_state *ccm,
if (ptlen > 0) { if (ptlen > 0) {
LTC_ARGCHK(pt != NULL); LTC_ARGCHK(pt != NULL);
LTC_ARGCHK(ct != NULL); LTC_ARGCHK(ct != NULL);
y = 0;
for (; y < ptlen; y++) { for (y = 0; y < ptlen; y++) {
/* increment the ctr? */ /* increment the ctr? */
if (ccm->CTRlen == 16) { if (ccm->CTRlen == 16) {
for (z = 15; z > 15-ccm->L; z--) { for (z = 15; z > 15-ccm->L; z--) {

View File

@ -145,6 +145,17 @@ int ccm_test(void)
tag, &taglen, 0)) != CRYPT_OK) { tag, &taglen, 0)) != CRYPT_OK) {
return err; return err;
} }
/* run a second time to make sure skey is not touched */
if ((err = ccm_memory(idx,
tests[x].key, 16,
&skey,
tests[x].nonce, tests[x].noncelen,
tests[x].header, tests[x].headerlen,
(unsigned char*)tests[x].pt, tests[x].ptlen,
buf,
tag, &taglen, 0)) != CRYPT_OK) {
return err;
}
} else { } else {
if ((err = ccm_init(&ccm, idx, tests[x].key, 16, tests[x].ptlen, tests[x].taglen, tests[x].headerlen)) != CRYPT_OK) { if ((err = ccm_init(&ccm, idx, tests[x].key, 16, tests[x].ptlen, tests[x].taglen, tests[x].headerlen)) != CRYPT_OK) {
return err; return err;

View File

@ -24,7 +24,7 @@
@param out The ciphertext @param out The ciphertext
@param tag [out] The MAC tag @param tag [out] The MAC tag
@param taglen [in/out] The MAC tag length @param taglen [in/out] The MAC tag length
@param direction Encrypt or Decrypt mode (CHCHA20POLY1305_ENCRYPT or CHCHA20POLY1305_DECRYPT) @param direction Encrypt or Decrypt mode (CHACHA20POLY1305_ENCRYPT or CHACHA20POLY1305_DECRYPT)
@return CRYPT_OK on success @return CRYPT_OK on success
*/ */
int chacha20poly1305_memory(const unsigned char *key, unsigned long keylen, int chacha20poly1305_memory(const unsigned char *key, unsigned long keylen,
@ -49,10 +49,10 @@ int chacha20poly1305_memory(const unsigned char *key, unsigned long keylen,
if (aad && aadlen > 0) { if (aad && aadlen > 0) {
if ((err = chacha20poly1305_add_aad(&st, aad, aadlen)) != CRYPT_OK) { goto LBL_ERR; } if ((err = chacha20poly1305_add_aad(&st, aad, aadlen)) != CRYPT_OK) { goto LBL_ERR; }
} }
if (direction == CHCHA20POLY1305_ENCRYPT) { if (direction == CHACHA20POLY1305_ENCRYPT) {
if ((err = chacha20poly1305_encrypt(&st, in, inlen, out)) != CRYPT_OK) { goto LBL_ERR; } if ((err = chacha20poly1305_encrypt(&st, in, inlen, out)) != CRYPT_OK) { goto LBL_ERR; }
} }
else if (direction == CHCHA20POLY1305_DECRYPT) { else if (direction == CHACHA20POLY1305_DECRYPT) {
if ((err = chacha20poly1305_decrypt(&st, in, inlen, out)) != CRYPT_OK) { goto LBL_ERR; } if ((err = chacha20poly1305_decrypt(&st, in, inlen, out)) != CRYPT_OK) { goto LBL_ERR; }
} }
else { else {

View File

@ -71,14 +71,14 @@ int chacha20poly1305_test(void)
/* chacha20poly1305_memory - encrypt */ /* chacha20poly1305_memory - encrypt */
len = sizeof(emac); len = sizeof(emac);
if ((err = chacha20poly1305_memory(k, sizeof(k), i12, sizeof(i12), aad, sizeof(aad), (unsigned char *)m, if ((err = chacha20poly1305_memory(k, sizeof(k), i12, sizeof(i12), aad, sizeof(aad), (unsigned char *)m,
mlen, ct, emac, &len, CHCHA20POLY1305_ENCRYPT)) != CRYPT_OK) return err; mlen, ct, emac, &len, CHACHA20POLY1305_ENCRYPT)) != CRYPT_OK) return err;
if (compare_testvector(ct, mlen, enc, sizeof(enc), "ENC-CT2", 1) != 0) return CRYPT_FAIL_TESTVECTOR; if (compare_testvector(ct, mlen, enc, sizeof(enc), "ENC-CT2", 1) != 0) return CRYPT_FAIL_TESTVECTOR;
if (compare_testvector(emac, len, tag, sizeof(tag), "ENC-TAG2", 2) != 0) return CRYPT_FAIL_TESTVECTOR; if (compare_testvector(emac, len, tag, sizeof(tag), "ENC-TAG2", 2) != 0) return CRYPT_FAIL_TESTVECTOR;
/* chacha20poly1305_memory - decrypt */ /* chacha20poly1305_memory - decrypt */
len = sizeof(dmac); len = sizeof(dmac);
if ((err = chacha20poly1305_memory(k, sizeof(k), i12, sizeof(i12), aad, sizeof(aad), if ((err = chacha20poly1305_memory(k, sizeof(k), i12, sizeof(i12), aad, sizeof(aad),
ct, mlen, pt, dmac, &len, CHCHA20POLY1305_DECRYPT)) != CRYPT_OK) return err; ct, mlen, pt, dmac, &len, CHACHA20POLY1305_DECRYPT)) != CRYPT_OK) return err;
if (compare_testvector(pt, mlen, m, mlen, "DEC-PT2", 3) != 0) return CRYPT_FAIL_TESTVECTOR; if (compare_testvector(pt, mlen, m, mlen, "DEC-PT2", 3) != 0) return CRYPT_FAIL_TESTVECTOR;
if (compare_testvector(dmac, len, tag, sizeof(tag), "DEC-TAG2", 4) != 0) return CRYPT_FAIL_TESTVECTOR; if (compare_testvector(dmac, len, tag, sizeof(tag), "DEC-TAG2", 4) != 0) return CRYPT_FAIL_TESTVECTOR;

View File

@ -18,7 +18,7 @@ const struct ltc_hash_descriptor sha3_224_desc =
"sha3-224", /* name of hash */ "sha3-224", /* name of hash */
17, /* internal ID */ 17, /* internal ID */
28, /* Size of digest in octets */ 28, /* Size of digest in octets */
128, /* Input block size in octets */ 144, /* Input block size in octets */
{ 2,16,840,1,101,3,4,2,7 }, /* ASN.1 OID */ { 2,16,840,1,101,3,4,2,7 }, /* ASN.1 OID */
9, /* Length OID */ 9, /* Length OID */
&sha3_224_init, &sha3_224_init,
@ -33,7 +33,7 @@ const struct ltc_hash_descriptor sha3_256_desc =
"sha3-256", /* name of hash */ "sha3-256", /* name of hash */
18, /* internal ID */ 18, /* internal ID */
32, /* Size of digest in octets */ 32, /* Size of digest in octets */
128, /* Input block size in octets */ 136, /* Input block size in octets */
{ 2,16,840,1,101,3,4,2,8 }, /* ASN.1 OID */ { 2,16,840,1,101,3,4,2,8 }, /* ASN.1 OID */
9, /* Length OID */ 9, /* Length OID */
&sha3_256_init, &sha3_256_init,
@ -48,7 +48,7 @@ const struct ltc_hash_descriptor sha3_384_desc =
"sha3-384", /* name of hash */ "sha3-384", /* name of hash */
19, /* internal ID */ 19, /* internal ID */
48, /* Size of digest in octets */ 48, /* Size of digest in octets */
128, /* Input block size in octets */ 104, /* Input block size in octets */
{ 2,16,840,1,101,3,4,2,9 }, /* ASN.1 OID */ { 2,16,840,1,101,3,4,2,9 }, /* ASN.1 OID */
9, /* Length OID */ 9, /* Length OID */
&sha3_384_init, &sha3_384_init,
@ -63,7 +63,7 @@ const struct ltc_hash_descriptor sha3_512_desc =
"sha3-512", /* name of hash */ "sha3-512", /* name of hash */
20, /* internal ID */ 20, /* internal ID */
64, /* Size of digest in octets */ 64, /* Size of digest in octets */
128, /* Input block size in octets */ 72, /* Input block size in octets */
{ 2,16,840,1,101,3,4,2,10 }, /* ASN.1 OID */ { 2,16,840,1,101,3,4,2,10 }, /* ASN.1 OID */
9, /* Length OID */ 9, /* Length OID */
&sha3_512_init, &sha3_512_init,

View File

@ -27,7 +27,7 @@ extern "C" {
/* version */ /* version */
#define CRYPT 0x0118 #define CRYPT 0x0118
#define SCRYPT "1.18.0" #define SCRYPT "1.18.1"
/* max size of either a cipher/hash block or symmetric key [largest of the two] */ /* max size of either a cipher/hash block or symmetric key [largest of the two] */
#define MAXBLOCKSIZE 128 #define MAXBLOCKSIZE 128

View File

@ -549,6 +549,7 @@
#define LTC_MUTEX_INIT(x) LTC_ARGCHK(pthread_mutex_init(x, NULL) == 0); #define LTC_MUTEX_INIT(x) LTC_ARGCHK(pthread_mutex_init(x, NULL) == 0);
#define LTC_MUTEX_LOCK(x) LTC_ARGCHK(pthread_mutex_lock(x) == 0); #define LTC_MUTEX_LOCK(x) LTC_ARGCHK(pthread_mutex_lock(x) == 0);
#define LTC_MUTEX_UNLOCK(x) LTC_ARGCHK(pthread_mutex_unlock(x) == 0); #define LTC_MUTEX_UNLOCK(x) LTC_ARGCHK(pthread_mutex_unlock(x) == 0);
#define LTC_MUTEX_DESTROY(x) LTC_ARGCHK(pthread_mutex_destroy(x) == 0);
#else #else
@ -559,6 +560,7 @@
#define LTC_MUTEX_INIT(x) #define LTC_MUTEX_INIT(x)
#define LTC_MUTEX_LOCK(x) #define LTC_MUTEX_LOCK(x)
#define LTC_MUTEX_UNLOCK(x) #define LTC_MUTEX_UNLOCK(x)
#define LTC_MUTEX_DESTROY(x)
#endif #endif

View File

@ -118,7 +118,6 @@ typedef struct {
int poly1305_init(poly1305_state *st, const unsigned char *key, unsigned long keylen); int poly1305_init(poly1305_state *st, const unsigned char *key, unsigned long keylen);
int poly1305_process(poly1305_state *st, const unsigned char *in, unsigned long inlen); int poly1305_process(poly1305_state *st, const unsigned char *in, unsigned long inlen);
int poly1305_done(poly1305_state *st, unsigned char *mac, unsigned long *maclen); int poly1305_done(poly1305_state *st, unsigned char *mac, unsigned long *maclen);
int poly1305_test(void);
int poly1305_memory(const unsigned char *key, unsigned long keylen, const unsigned char *in, unsigned long inlen, unsigned char *mac, unsigned long *maclen); int poly1305_memory(const unsigned char *key, unsigned long keylen, const unsigned char *in, unsigned long inlen, unsigned char *mac, unsigned long *maclen);
int poly1305_memory_multi(const unsigned char *key, unsigned long keylen, unsigned char *mac, unsigned long *maclen, const unsigned char *in, unsigned long inlen, ...); int poly1305_memory_multi(const unsigned char *key, unsigned long keylen, unsigned char *mac, unsigned long *maclen, const unsigned char *in, unsigned long inlen, ...);
int poly1305_file(const char *fname, const unsigned char *key, unsigned long keylen, unsigned char *mac, unsigned long *maclen); int poly1305_file(const char *fname, const unsigned char *key, unsigned long keylen, unsigned char *mac, unsigned long *maclen);
@ -130,7 +129,6 @@ typedef hash_state blake2smac_state;
int blake2smac_init(blake2smac_state *st, unsigned long outlen, const unsigned char *key, unsigned long keylen); int blake2smac_init(blake2smac_state *st, unsigned long outlen, const unsigned char *key, unsigned long keylen);
int blake2smac_process(blake2smac_state *st, const unsigned char *in, unsigned long inlen); int blake2smac_process(blake2smac_state *st, const unsigned char *in, unsigned long inlen);
int blake2smac_done(blake2smac_state *st, unsigned char *mac, unsigned long *maclen); int blake2smac_done(blake2smac_state *st, unsigned char *mac, unsigned long *maclen);
int blake2smac_test(void);
int blake2smac_memory(const unsigned char *key, unsigned long keylen, const unsigned char *in, unsigned long inlen, unsigned char *mac, unsigned long *maclen); int blake2smac_memory(const unsigned char *key, unsigned long keylen, const unsigned char *in, unsigned long inlen, unsigned char *mac, unsigned long *maclen);
int blake2smac_memory_multi(const unsigned char *key, unsigned long keylen, unsigned char *mac, unsigned long *maclen, const unsigned char *in, unsigned long inlen, ...); int blake2smac_memory_multi(const unsigned char *key, unsigned long keylen, unsigned char *mac, unsigned long *maclen, const unsigned char *in, unsigned long inlen, ...);
int blake2smac_file(const char *fname, const unsigned char *key, unsigned long keylen, unsigned char *mac, unsigned long *maclen); int blake2smac_file(const char *fname, const unsigned char *key, unsigned long keylen, unsigned char *mac, unsigned long *maclen);
@ -142,7 +140,6 @@ typedef hash_state blake2bmac_state;
int blake2bmac_init(blake2bmac_state *st, unsigned long outlen, const unsigned char *key, unsigned long keylen); int blake2bmac_init(blake2bmac_state *st, unsigned long outlen, const unsigned char *key, unsigned long keylen);
int blake2bmac_process(blake2bmac_state *st, const unsigned char *in, unsigned long inlen); int blake2bmac_process(blake2bmac_state *st, const unsigned char *in, unsigned long inlen);
int blake2bmac_done(blake2bmac_state *st, unsigned char *mac, unsigned long *maclen); int blake2bmac_done(blake2bmac_state *st, unsigned char *mac, unsigned long *maclen);
int blake2bmac_test(void);
int blake2bmac_memory(const unsigned char *key, unsigned long keylen, const unsigned char *in, unsigned long inlen, unsigned char *mac, unsigned long *maclen); int blake2bmac_memory(const unsigned char *key, unsigned long keylen, const unsigned char *in, unsigned long inlen, unsigned char *mac, unsigned long *maclen);
int blake2bmac_memory_multi(const unsigned char *key, unsigned long keylen, unsigned char *mac, unsigned long *maclen, const unsigned char *in, unsigned long inlen, ...); int blake2bmac_memory_multi(const unsigned char *key, unsigned long keylen, unsigned char *mac, unsigned long *maclen, const unsigned char *in, unsigned long inlen, ...);
int blake2bmac_file(const char *fname, const unsigned char *key, unsigned long keylen, unsigned char *mac, unsigned long *maclen); int blake2bmac_file(const char *fname, const unsigned char *key, unsigned long keylen, unsigned char *mac, unsigned long *maclen);
@ -542,8 +539,8 @@ typedef struct {
int aadflg; int aadflg;
} chacha20poly1305_state; } chacha20poly1305_state;
#define CHCHA20POLY1305_ENCRYPT LTC_ENCRYPT #define CHACHA20POLY1305_ENCRYPT LTC_ENCRYPT
#define CHCHA20POLY1305_DECRYPT LTC_DECRYPT #define CHACHA20POLY1305_DECRYPT LTC_DECRYPT
int chacha20poly1305_init(chacha20poly1305_state *st, const unsigned char *key, unsigned long keylen); int chacha20poly1305_init(chacha20poly1305_state *st, const unsigned char *key, unsigned long keylen);
int chacha20poly1305_setiv(chacha20poly1305_state *st, const unsigned char *iv, unsigned long ivlen); int chacha20poly1305_setiv(chacha20poly1305_state *st, const unsigned char *iv, unsigned long ivlen);

View File

@ -31,7 +31,7 @@ enum public_key_algorithms {
typedef struct Oid { typedef struct Oid {
unsigned long OID[16]; unsigned long OID[16];
/** Length of DER encoding */ /** Number of OID digits in use */
unsigned long OIDlen; unsigned long OIDlen;
} oid_st; } oid_st;

View File

@ -16,13 +16,11 @@
*/ */
#define REGISTER_CIPHER(h) do {\ #define REGISTER_CIPHER(h) do {\
LTC_ARGCHK((err = register_cipher(h)) != -1); \ LTC_ARGCHK(register_cipher(h) != -1); \
} while(0) } while(0)
int register_all_ciphers(void) int register_all_ciphers(void)
{ {
int err = CRYPT_NOP;
#ifdef LTC_RIJNDAEL #ifdef LTC_RIJNDAEL
#ifdef ENCRYPT_ONLY #ifdef ENCRYPT_ONLY
/* alternative would be /* alternative would be
@ -94,7 +92,7 @@ int register_all_ciphers(void)
#ifdef LTC_CAMELLIA #ifdef LTC_CAMELLIA
REGISTER_CIPHER(&camellia_desc); REGISTER_CIPHER(&camellia_desc);
#endif #endif
return err; return CRYPT_OK;
} }
/* ref: $Format:%D$ */ /* ref: $Format:%D$ */

View File

@ -16,12 +16,11 @@
*/ */
#define REGISTER_HASH(h) do {\ #define REGISTER_HASH(h) do {\
LTC_ARGCHK((err = register_hash(h)) != -1); \ LTC_ARGCHK(register_hash(h) != -1); \
} while(0) } while(0)
int register_all_hashes(void) int register_all_hashes(void)
{ {
int err = CRYPT_NOP;
#ifdef LTC_TIGER #ifdef LTC_TIGER
REGISTER_HASH(&tiger_desc); REGISTER_HASH(&tiger_desc);
#endif #endif
@ -90,9 +89,9 @@ int register_all_hashes(void)
#endif #endif
#ifdef LTC_CHC_HASH #ifdef LTC_CHC_HASH
REGISTER_HASH(&chc_desc); REGISTER_HASH(&chc_desc);
LTC_ARGCHK((err = chc_register(find_cipher_any("aes", 8, 16))) == CRYPT_OK); LTC_ARGCHK(chc_register(find_cipher_any("aes", 8, 16)) == CRYPT_OK);
#endif #endif
return err; return CRYPT_OK;
} }
/* ref: $Format:%D$ */ /* ref: $Format:%D$ */

View File

@ -16,12 +16,11 @@
*/ */
#define REGISTER_PRNG(h) do {\ #define REGISTER_PRNG(h) do {\
LTC_ARGCHK((err = register_prng(h)) != -1); \ LTC_ARGCHK(register_prng(h) != -1); \
} while(0) } while(0)
int register_all_prngs(void) int register_all_prngs(void)
{ {
int err = CRYPT_NOP;
#ifdef LTC_YARROW #ifdef LTC_YARROW
REGISTER_PRNG(&yarrow_desc); REGISTER_PRNG(&yarrow_desc);
#endif #endif
@ -41,7 +40,7 @@ int register_all_prngs(void)
REGISTER_PRNG(&sprng_desc); REGISTER_PRNG(&sprng_desc);
#endif #endif
return err; return CRYPT_OK;
} }
/* ref: $Format:%D$ */ /* ref: $Format:%D$ */

View File

@ -265,7 +265,7 @@ int hkdf_test(void)
cases[i].info, cases[i].info_l, cases[i].info, cases[i].info_l,
cases[i].IKM, cases[i].IKM_l, cases[i].IKM, cases[i].IKM_l,
OKM, cases[i].OKM_l)) != CRYPT_OK) { OKM, cases[i].OKM_l)) != CRYPT_OK) {
#if LTC_TEST_DBG > 1 #if defined(LTC_TEST_DBG) && (LTC_TEST_DBG > 1)
printf("LTC_HKDF-%s test #%d, %s\n", cases[i].Hash, i, error_to_string(err)); printf("LTC_HKDF-%s test #%d, %s\n", cases[i].Hash, i, error_to_string(err));
#endif #endif
return err; return err;

View File

@ -53,6 +53,8 @@ int ctr_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, s
if ((err = cipher_descriptor[ctr->cipher].accel_ctr_encrypt(pt, ct, len/ctr->blocklen, ctr->ctr, ctr->mode, &ctr->key)) != CRYPT_OK) { if ((err = cipher_descriptor[ctr->cipher].accel_ctr_encrypt(pt, ct, len/ctr->blocklen, ctr->ctr, ctr->mode, &ctr->key)) != CRYPT_OK) {
return err; return err;
} }
pt += (len / ctr->blocklen) * ctr->blocklen;
ct += (len / ctr->blocklen) * ctr->blocklen;
len %= ctr->blocklen; len %= ctr->blocklen;
} }

View File

@ -26,6 +26,7 @@ int der_decode_object_identifier(const unsigned char *in, unsigned long inle
unsigned long *words, unsigned long *outlen) unsigned long *words, unsigned long *outlen)
{ {
unsigned long x, y, t, len; unsigned long x, y, t, len;
int err;
LTC_ARGCHK(in != NULL); LTC_ARGCHK(in != NULL);
LTC_ARGCHK(words != NULL); LTC_ARGCHK(words != NULL);
@ -38,6 +39,7 @@ int der_decode_object_identifier(const unsigned char *in, unsigned long inle
/* must be room for at least two words */ /* must be room for at least two words */
if (*outlen < 2) { if (*outlen < 2) {
*outlen = 2;
return CRYPT_BUFFER_OVERFLOW; return CRYPT_BUFFER_OVERFLOW;
} }
@ -73,8 +75,8 @@ int der_decode_object_identifier(const unsigned char *in, unsigned long inle
if (!(in[x++] & 0x80)) { if (!(in[x++] & 0x80)) {
/* store t */ /* store t */
if (y >= *outlen) { if (y >= *outlen) {
return CRYPT_BUFFER_OVERFLOW; y++;
} } else {
if (y == 0) { if (y == 0) {
words[0] = t / 40; words[0] = t / 40;
words[1] = t % 40; words[1] = t % 40;
@ -82,12 +84,19 @@ int der_decode_object_identifier(const unsigned char *in, unsigned long inle
} else { } else {
words[y++] = t; words[y++] = t;
} }
}
t = 0; t = 0;
} }
} }
if (y > *outlen) {
err = CRYPT_BUFFER_OVERFLOW;
} else {
err = CRYPT_OK;
}
*outlen = y; *outlen = y;
return CRYPT_OK; return err;
} }
#endif #endif

View File

@ -29,6 +29,7 @@ int der_decode_utf8_string(const unsigned char *in, unsigned long inlen,
{ {
wchar_t tmp; wchar_t tmp;
unsigned long x, y, z, len; unsigned long x, y, z, len;
int err;
LTC_ARGCHK(in != NULL); LTC_ARGCHK(in != NULL);
LTC_ARGCHK(out != NULL); LTC_ARGCHK(out != NULL);
@ -91,15 +92,19 @@ int der_decode_utf8_string(const unsigned char *in, unsigned long inlen,
tmp = (tmp << 6) | ((wchar_t)in[x++] & 0x3F); tmp = (tmp << 6) | ((wchar_t)in[x++] & 0x3F);
} }
if (y > *outlen) { if (y < *outlen) {
*outlen = y; out[y] = tmp;
return CRYPT_BUFFER_OVERFLOW;
} }
out[y++] = tmp; y++;
}
if (y > *outlen) {
err = CRYPT_BUFFER_OVERFLOW;
} else {
err = CRYPT_OK;
} }
*outlen = y; *outlen = y;
return CRYPT_OK; return err;
} }
#endif #endif

View File

@ -53,7 +53,7 @@ int der_encode_utf8_string(const wchar_t *in, unsigned long inlen,
/* too big? */ /* too big? */
if (y > *outlen) { if (y > *outlen) {
*outlen = len; *outlen = y;
return CRYPT_BUFFER_OVERFLOW; return CRYPT_BUFFER_OVERFLOW;
} }

View File

@ -139,6 +139,7 @@ int chacha20_prng_done(prng_state *prng)
prng->ready = 0; prng->ready = 0;
err = chacha_done(&prng->chacha.s); err = chacha_done(&prng->chacha.s);
LTC_MUTEX_UNLOCK(&prng->lock); LTC_MUTEX_UNLOCK(&prng->lock);
LTC_MUTEX_DESTROY(&prng->lock);
return err; return err;
} }

View File

@ -318,6 +318,7 @@ LBL_UNLOCK:
zeromem(tmp, sizeof(tmp)); zeromem(tmp, sizeof(tmp));
#endif #endif
LTC_MUTEX_UNLOCK(&prng->lock); LTC_MUTEX_UNLOCK(&prng->lock);
LTC_MUTEX_DESTROY(&prng->lock);
return err; return err;
} }

View File

@ -142,6 +142,7 @@ int rc4_done(prng_state *prng)
prng->ready = 0; prng->ready = 0;
err = rc4_stream_done(&prng->rc4.s); err = rc4_stream_done(&prng->rc4.s);
LTC_MUTEX_UNLOCK(&prng->lock); LTC_MUTEX_UNLOCK(&prng->lock);
LTC_MUTEX_DESTROY(&prng->lock);
return err; return err;
} }

View File

@ -16,7 +16,7 @@
#if defined(LTC_DEVRANDOM) && !defined(_WIN32) #if defined(LTC_DEVRANDOM) && !defined(_WIN32)
/* on *NIX read /dev/random */ /* on *NIX read /dev/random */
static unsigned long rng_nix(unsigned char *buf, unsigned long len, static unsigned long _rng_nix(unsigned char *buf, unsigned long len,
void (*callback)(void)) void (*callback)(void))
{ {
#ifdef LTC_NO_FILE #ifdef LTC_NO_FILE
@ -56,7 +56,7 @@ static unsigned long rng_nix(unsigned char *buf, unsigned long len,
#define ANSI_RNG #define ANSI_RNG
static unsigned long rng_ansic(unsigned char *buf, unsigned long len, static unsigned long _rng_ansic(unsigned char *buf, unsigned long len,
void (*callback)(void)) void (*callback)(void))
{ {
clock_t t1; clock_t t1;
@ -97,7 +97,7 @@ static unsigned long rng_ansic(unsigned char *buf, unsigned long len,
#include <windows.h> #include <windows.h>
#include <wincrypt.h> #include <wincrypt.h>
static unsigned long rng_win32(unsigned char *buf, unsigned long len, static unsigned long _rng_win32(unsigned char *buf, unsigned long len,
void (*callback)(void)) void (*callback)(void))
{ {
HCRYPTPROV hProv = 0; HCRYPTPROV hProv = 0;
@ -143,12 +143,12 @@ unsigned long rng_get_bytes(unsigned char *out, unsigned long outlen,
#endif #endif
#if defined(_WIN32) || defined(_WIN32_WCE) #if defined(_WIN32) || defined(_WIN32_WCE)
x = rng_win32(out, outlen, callback); if (x != 0) { return x; } x = _rng_win32(out, outlen, callback); if (x != 0) { return x; }
#elif defined(LTC_DEVRANDOM) #elif defined(LTC_DEVRANDOM)
x = rng_nix(out, outlen, callback); if (x != 0) { return x; } x = _rng_nix(out, outlen, callback); if (x != 0) { return x; }
#endif #endif
#ifdef ANSI_RNG #ifdef ANSI_RNG
x = rng_ansic(out, outlen, callback); if (x != 0) { return x; } x = _rng_ansic(out, outlen, callback); if (x != 0) { return x; }
#endif #endif
return 0; return 0;
} }

View File

@ -141,6 +141,7 @@ int sober128_done(prng_state *prng)
prng->ready = 0; prng->ready = 0;
err = sober128_stream_done(&prng->sober128.s); err = sober128_stream_done(&prng->sober128.s);
LTC_MUTEX_UNLOCK(&prng->lock); LTC_MUTEX_UNLOCK(&prng->lock);
LTC_MUTEX_DESTROY(&prng->lock);
return err; return err;
} }

View File

@ -262,6 +262,7 @@ int yarrow_done(prng_state *prng)
err = ctr_done(&prng->yarrow.ctr); err = ctr_done(&prng->yarrow.ctr);
LTC_MUTEX_UNLOCK(&prng->lock); LTC_MUTEX_UNLOCK(&prng->lock);
LTC_MUTEX_DESTROY(&prng->lock);
return err; return err;
} }

View File

@ -286,7 +286,7 @@ static void _der_tests_print_flexi(ltc_asn1_list* l, unsigned int level)
for (n = 0; n < l->size; ++n) { for (n = 0; n < l->size; ++n) {
r = snprintf(s, sz, "%02X", ((unsigned char*)l->data)[n]); r = snprintf(s, sz, "%02X", ((unsigned char*)l->data)[n]);
if (r < 0 || r >= sz) { if (r < 0 || r >= sz) {
printf("Octet string boom"); fprintf(stderr, "%s boom\n", name);
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
s += r; s += r;
@ -310,7 +310,7 @@ static void _der_tests_print_flexi(ltc_asn1_list* l, unsigned int level)
for (i = 0; i < l->size; ++i) { for (i = 0; i < l->size; ++i) {
r = snprintf(s, sz, "%lu.", ((unsigned long*)l->data)[i]); r = snprintf(s, sz, "%lu.", ((unsigned long*)l->data)[i]);
if (r < 0 || r >= sz) { if (r < 0 || r >= sz) {
printf("OID boom"); fprintf(stderr, "%s boom\n", name);
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
s += r; s += r;
@ -413,16 +413,16 @@ static void _der_tests_print_flexi(ltc_asn1_list* l, unsigned int level)
} }
for (n = 0; n < level; ++n) { for (n = 0; n < level; ++n) {
printf(" "); fprintf(stderr, " ");
} }
if (name) { if (name) {
if (text) if (text)
printf("%s %s\n", name, text); fprintf(stderr, "%s %s\n", name, text);
else else
printf("%s <missing decoding>\n", name); fprintf(stderr, "%s <missing decoding>\n", name);
} }
else else
printf("WTF type=%i\n", l->type); fprintf(stderr, "WTF type=%i\n", l->type);
if (ostring) { if (ostring) {
_der_tests_print_flexi(ostring, level + 1); _der_tests_print_flexi(ostring, level + 1);

View File

@ -143,14 +143,14 @@ static int _dsa_compat_test(void)
x = sizeof(tmp); x = sizeof(tmp);
DO(dsa_export(tmp, &x, PK_PRIVATE | PK_STD, &key)); DO(dsa_export(tmp, &x, PK_PRIVATE | PK_STD, &key));
if (compare_testvector(tmp, x, openssl_priv_dsa, sizeof(openssl_priv_dsa), if (compare_testvector(tmp, x, openssl_priv_dsa, sizeof(openssl_priv_dsa),
"DSA private export failed from dsa_import(priv_key)\n", 0)) { "DSA private export failed from dsa_import(priv_key)\n", __LINE__)) {
return CRYPT_FAIL_TESTVECTOR; return CRYPT_FAIL_TESTVECTOR;
} }
x = sizeof(tmp); x = sizeof(tmp);
DO(dsa_export(tmp, &x, PK_PUBLIC | PK_STD, &key)); DO(dsa_export(tmp, &x, PK_PUBLIC | PK_STD, &key));
if (compare_testvector(tmp, x, openssl_pub_dsa, sizeof(openssl_pub_dsa), if (compare_testvector(tmp, x, openssl_pub_dsa, sizeof(openssl_pub_dsa),
"DSA public export failed from dsa_import(priv_key)\n", 0)) { "DSA public export failed from dsa_import(priv_key)\n", __LINE__)) {
return CRYPT_FAIL_TESTVECTOR; return CRYPT_FAIL_TESTVECTOR;
} }
dsa_free(&key); dsa_free(&key);
@ -160,7 +160,7 @@ static int _dsa_compat_test(void)
x = sizeof(tmp); x = sizeof(tmp);
DO(dsa_export(tmp, &x, PK_PUBLIC | PK_STD, &key)); DO(dsa_export(tmp, &x, PK_PUBLIC | PK_STD, &key));
if (compare_testvector(tmp, x, openssl_pub_dsa, sizeof(openssl_pub_dsa), if (compare_testvector(tmp, x, openssl_pub_dsa, sizeof(openssl_pub_dsa),
"DSA public export failed from dsa_import(pub_key)\n", 0)) { "DSA public export failed from dsa_import(pub_key)\n", __LINE__)) {
return CRYPT_FAIL_TESTVECTOR; return CRYPT_FAIL_TESTVECTOR;
} }
dsa_free(&key); dsa_free(&key);
@ -185,7 +185,7 @@ static int _dsa_compat_test(void)
len = sizeof(buf); len = sizeof(buf);
DO(dsa_export(buf, &len, PK_PRIVATE | PK_STD, &key)); DO(dsa_export(buf, &len, PK_PRIVATE | PK_STD, &key));
if (compare_testvector(buf, len, openssl_priv_dsa, sizeof(openssl_priv_dsa), if (compare_testvector(buf, len, openssl_priv_dsa, sizeof(openssl_priv_dsa),
"DSA private export failed from dsa_set_pqg() & dsa_set_key()\n", 0)) { "DSA private export failed from dsa_set_pqg() & dsa_set_key()\n", __LINE__)) {
return CRYPT_FAIL_TESTVECTOR; return CRYPT_FAIL_TESTVECTOR;
} }
dsa_free(&key); dsa_free(&key);
@ -201,7 +201,7 @@ static int _dsa_compat_test(void)
len = sizeof(buf); len = sizeof(buf);
DO(dsa_export(buf, &len, PK_PUBLIC | PK_STD, &key)); DO(dsa_export(buf, &len, PK_PUBLIC | PK_STD, &key));
if (compare_testvector(buf, len, openssl_pub_dsa, sizeof(openssl_pub_dsa), if (compare_testvector(buf, len, openssl_pub_dsa, sizeof(openssl_pub_dsa),
"DSA public export failed from dsa_set_pqg() & dsa_set_key()\n", 0)) { "DSA public export failed from dsa_set_pqg() & dsa_set_key()\n", __LINE__)) {
return CRYPT_FAIL_TESTVECTOR; return CRYPT_FAIL_TESTVECTOR;
} }
dsa_free(&key); dsa_free(&key);
@ -225,7 +225,7 @@ static int _dsa_compat_test(void)
len = sizeof(buf); len = sizeof(buf);
DO(dsa_export(buf, &len, PK_PUBLIC | PK_STD, &key)); DO(dsa_export(buf, &len, PK_PUBLIC | PK_STD, &key));
if (compare_testvector(buf, len, openssl_pub_dsa, sizeof(openssl_pub_dsa), if (compare_testvector(buf, len, openssl_pub_dsa, sizeof(openssl_pub_dsa),
"DSA public export failed from dsa_set_pqg_dsaparam()\n", 0)) { "DSA public export failed from dsa_set_pqg_dsaparam()\n", __LINE__)) {
return CRYPT_FAIL_TESTVECTOR; return CRYPT_FAIL_TESTVECTOR;
} }
dsa_free(&key); dsa_free(&key);
@ -238,7 +238,7 @@ static int _dsa_compat_test(void)
len = sizeof(buf); len = sizeof(buf);
DO(dsa_export(buf, &len, PK_PRIVATE | PK_STD, &key)); DO(dsa_export(buf, &len, PK_PRIVATE | PK_STD, &key));
if (compare_testvector(buf, len, openssl_priv_dsa, sizeof(openssl_priv_dsa), if (compare_testvector(buf, len, openssl_priv_dsa, sizeof(openssl_priv_dsa),
"DSA private export failed from dsa_set_pqg_dsaparam()\n", 0)) { "DSA private export failed from dsa_set_pqg_dsaparam()\n", __LINE__)) {
return CRYPT_FAIL_TESTVECTOR; return CRYPT_FAIL_TESTVECTOR;
} }
dsa_free(&key); dsa_free(&key);

View File

@ -275,9 +275,18 @@ static void register_algs(void)
#ifndef LTC_YARROW #ifndef LTC_YARROW
#error This demo requires Yarrow. #error This demo requires Yarrow.
#endif #endif
register_all_ciphers(); if ((err = register_all_ciphers()) != CRYPT_OK) {
register_all_hashes(); fprintf(stderr, "register_all_ciphers err=%s\n", error_to_string(err));
register_all_prngs(); exit(EXIT_FAILURE);
}
if ((err = register_all_hashes()) != CRYPT_OK) {
fprintf(stderr, "register_all_hashes err=%s\n", error_to_string(err));
exit(EXIT_FAILURE);
}
if ((err = register_all_prngs()) != CRYPT_OK) {
fprintf(stderr, "register_all_prngs err=%s\n", error_to_string(err));
exit(EXIT_FAILURE);
}
if ((err = rng_make_prng(128, find_prng("yarrow"), &yarrow_prng, NULL)) != CRYPT_OK) { if ((err = rng_make_prng(128, find_prng("yarrow"), &yarrow_prng, NULL)) != CRYPT_OK) {
fprintf(stderr, "rng_make_prng failed: %s\n", error_to_string(err)); fprintf(stderr, "rng_make_prng failed: %s\n", error_to_string(err));