diff --git a/.gitignore b/.gitignore
index 00d84d795e..5ae1451092 100644
--- a/.gitignore
+++ b/.gitignore
@@ -117,6 +117,7 @@ test/default/generichash3
test/default/hash
test/default/hash3
test/default/kdf
+test/default/kdf_hkdf
test/default/keygen
test/default/kx
test/default/metamorphic
@@ -143,7 +144,7 @@ test/default/secretbox7
test/default/secretbox8
test/default/secretbox_easy
test/default/secretbox_easy2
-test/default/secretstream
+test/default/secretstream_xchacha20poly1305
test/default/shorthash
test/default/sign
test/default/siphashx24
diff --git a/builds/msvc/vs2010/libsodium/libsodium.vcxproj b/builds/msvc/vs2010/libsodium/libsodium.vcxproj
index 315ec434da..6384115d14 100644
--- a/builds/msvc/vs2010/libsodium/libsodium.vcxproj
+++ b/builds/msvc/vs2010/libsodium/libsodium.vcxproj
@@ -120,6 +120,8 @@
+
+
@@ -240,6 +242,7 @@
+
@@ -248,6 +251,7 @@
+
diff --git a/builds/msvc/vs2010/libsodium/libsodium.vcxproj.filters b/builds/msvc/vs2010/libsodium/libsodium.vcxproj.filters
index 7a57951f4d..fd6e84ef09 100644
--- a/builds/msvc/vs2010/libsodium/libsodium.vcxproj.filters
+++ b/builds/msvc/vs2010/libsodium/libsodium.vcxproj.filters
@@ -153,6 +153,12 @@
crypto_kdf\blake2b
+
+ crypto_kdf\hkdf
+
+
+ crypto_kdf\hkdf
+
crypto_shorthash
@@ -509,6 +515,9 @@
include\sodium
+
+ include\sodium
+
include\sodium
@@ -533,6 +542,9 @@
include\sodium
+
+ include\sodium
+
include\sodium
@@ -838,6 +850,9 @@
{3d42d2a2-b192-33dd-9162-508916414707}
+
+ {baf7d894-9298-391d-8dc2-e4c3010f5ddc}
+
{898b6bd5-1360-3a34-adcd-0fade7561685}
diff --git a/builds/msvc/vs2012/libsodium/libsodium.vcxproj b/builds/msvc/vs2012/libsodium/libsodium.vcxproj
index be58192d87..30a017eea0 100644
--- a/builds/msvc/vs2012/libsodium/libsodium.vcxproj
+++ b/builds/msvc/vs2012/libsodium/libsodium.vcxproj
@@ -120,6 +120,8 @@
+
+
@@ -240,6 +242,7 @@
+
@@ -248,6 +251,7 @@
+
diff --git a/builds/msvc/vs2012/libsodium/libsodium.vcxproj.filters b/builds/msvc/vs2012/libsodium/libsodium.vcxproj.filters
index 7a57951f4d..fd6e84ef09 100644
--- a/builds/msvc/vs2012/libsodium/libsodium.vcxproj.filters
+++ b/builds/msvc/vs2012/libsodium/libsodium.vcxproj.filters
@@ -153,6 +153,12 @@
crypto_kdf\blake2b
+
+ crypto_kdf\hkdf
+
+
+ crypto_kdf\hkdf
+
crypto_shorthash
@@ -509,6 +515,9 @@
include\sodium
+
+ include\sodium
+
include\sodium
@@ -533,6 +542,9 @@
include\sodium
+
+ include\sodium
+
include\sodium
@@ -838,6 +850,9 @@
{3d42d2a2-b192-33dd-9162-508916414707}
+
+ {baf7d894-9298-391d-8dc2-e4c3010f5ddc}
+
{898b6bd5-1360-3a34-adcd-0fade7561685}
diff --git a/builds/msvc/vs2013/libsodium/libsodium.vcxproj b/builds/msvc/vs2013/libsodium/libsodium.vcxproj
index 59bd9d7ebf..ceea669af5 100644
--- a/builds/msvc/vs2013/libsodium/libsodium.vcxproj
+++ b/builds/msvc/vs2013/libsodium/libsodium.vcxproj
@@ -120,6 +120,8 @@
+
+
@@ -240,6 +242,7 @@
+
@@ -248,6 +251,7 @@
+
diff --git a/builds/msvc/vs2013/libsodium/libsodium.vcxproj.filters b/builds/msvc/vs2013/libsodium/libsodium.vcxproj.filters
index 7a57951f4d..fd6e84ef09 100644
--- a/builds/msvc/vs2013/libsodium/libsodium.vcxproj.filters
+++ b/builds/msvc/vs2013/libsodium/libsodium.vcxproj.filters
@@ -153,6 +153,12 @@
crypto_kdf\blake2b
+
+ crypto_kdf\hkdf
+
+
+ crypto_kdf\hkdf
+
crypto_shorthash
@@ -509,6 +515,9 @@
include\sodium
+
+ include\sodium
+
include\sodium
@@ -533,6 +542,9 @@
include\sodium
+
+ include\sodium
+
include\sodium
@@ -838,6 +850,9 @@
{3d42d2a2-b192-33dd-9162-508916414707}
+
+ {baf7d894-9298-391d-8dc2-e4c3010f5ddc}
+
{898b6bd5-1360-3a34-adcd-0fade7561685}
diff --git a/builds/msvc/vs2015/libsodium/libsodium.vcxproj b/builds/msvc/vs2015/libsodium/libsodium.vcxproj
index a7c11dfbcb..6763d7930b 100644
--- a/builds/msvc/vs2015/libsodium/libsodium.vcxproj
+++ b/builds/msvc/vs2015/libsodium/libsodium.vcxproj
@@ -120,6 +120,8 @@
+
+
@@ -240,6 +242,7 @@
+
@@ -248,6 +251,7 @@
+
diff --git a/builds/msvc/vs2015/libsodium/libsodium.vcxproj.filters b/builds/msvc/vs2015/libsodium/libsodium.vcxproj.filters
index 7a57951f4d..fd6e84ef09 100644
--- a/builds/msvc/vs2015/libsodium/libsodium.vcxproj.filters
+++ b/builds/msvc/vs2015/libsodium/libsodium.vcxproj.filters
@@ -153,6 +153,12 @@
crypto_kdf\blake2b
+
+ crypto_kdf\hkdf
+
+
+ crypto_kdf\hkdf
+
crypto_shorthash
@@ -509,6 +515,9 @@
include\sodium
+
+ include\sodium
+
include\sodium
@@ -533,6 +542,9 @@
include\sodium
+
+ include\sodium
+
include\sodium
@@ -838,6 +850,9 @@
{3d42d2a2-b192-33dd-9162-508916414707}
+
+ {baf7d894-9298-391d-8dc2-e4c3010f5ddc}
+
{898b6bd5-1360-3a34-adcd-0fade7561685}
diff --git a/builds/msvc/vs2017/libsodium/libsodium.vcxproj b/builds/msvc/vs2017/libsodium/libsodium.vcxproj
index d6421632c1..a562ed5bd2 100644
--- a/builds/msvc/vs2017/libsodium/libsodium.vcxproj
+++ b/builds/msvc/vs2017/libsodium/libsodium.vcxproj
@@ -120,6 +120,8 @@
+
+
@@ -240,6 +242,7 @@
+
@@ -248,6 +251,7 @@
+
diff --git a/builds/msvc/vs2017/libsodium/libsodium.vcxproj.filters b/builds/msvc/vs2017/libsodium/libsodium.vcxproj.filters
index 7a57951f4d..fd6e84ef09 100644
--- a/builds/msvc/vs2017/libsodium/libsodium.vcxproj.filters
+++ b/builds/msvc/vs2017/libsodium/libsodium.vcxproj.filters
@@ -153,6 +153,12 @@
crypto_kdf\blake2b
+
+ crypto_kdf\hkdf
+
+
+ crypto_kdf\hkdf
+
crypto_shorthash
@@ -509,6 +515,9 @@
include\sodium
+
+ include\sodium
+
include\sodium
@@ -533,6 +542,9 @@
include\sodium
+
+ include\sodium
+
include\sodium
@@ -838,6 +850,9 @@
{3d42d2a2-b192-33dd-9162-508916414707}
+
+ {baf7d894-9298-391d-8dc2-e4c3010f5ddc}
+
{898b6bd5-1360-3a34-adcd-0fade7561685}
diff --git a/builds/msvc/vs2019/libsodium/libsodium.vcxproj b/builds/msvc/vs2019/libsodium/libsodium.vcxproj
index 4aa625c542..da1965a6ad 100644
--- a/builds/msvc/vs2019/libsodium/libsodium.vcxproj
+++ b/builds/msvc/vs2019/libsodium/libsodium.vcxproj
@@ -120,6 +120,8 @@
+
+
@@ -240,6 +242,7 @@
+
@@ -248,6 +251,7 @@
+
diff --git a/builds/msvc/vs2019/libsodium/libsodium.vcxproj.filters b/builds/msvc/vs2019/libsodium/libsodium.vcxproj.filters
index 7a57951f4d..fd6e84ef09 100644
--- a/builds/msvc/vs2019/libsodium/libsodium.vcxproj.filters
+++ b/builds/msvc/vs2019/libsodium/libsodium.vcxproj.filters
@@ -153,6 +153,12 @@
crypto_kdf\blake2b
+
+ crypto_kdf\hkdf
+
+
+ crypto_kdf\hkdf
+
crypto_shorthash
@@ -509,6 +515,9 @@
include\sodium
+
+ include\sodium
+
include\sodium
@@ -533,6 +542,9 @@
include\sodium
+
+ include\sodium
+
include\sodium
@@ -838,6 +850,9 @@
{3d42d2a2-b192-33dd-9162-508916414707}
+
+ {baf7d894-9298-391d-8dc2-e4c3010f5ddc}
+
{898b6bd5-1360-3a34-adcd-0fade7561685}
diff --git a/builds/msvc/vs2022/libsodium/libsodium.vcxproj b/builds/msvc/vs2022/libsodium/libsodium.vcxproj
index 657fbec313..6be75de684 100644
--- a/builds/msvc/vs2022/libsodium/libsodium.vcxproj
+++ b/builds/msvc/vs2022/libsodium/libsodium.vcxproj
@@ -120,6 +120,8 @@
+
+
@@ -240,6 +242,7 @@
+
@@ -248,6 +251,7 @@
+
diff --git a/builds/msvc/vs2022/libsodium/libsodium.vcxproj.filters b/builds/msvc/vs2022/libsodium/libsodium.vcxproj.filters
index 7a57951f4d..fd6e84ef09 100644
--- a/builds/msvc/vs2022/libsodium/libsodium.vcxproj.filters
+++ b/builds/msvc/vs2022/libsodium/libsodium.vcxproj.filters
@@ -153,6 +153,12 @@
crypto_kdf\blake2b
+
+ crypto_kdf\hkdf
+
+
+ crypto_kdf\hkdf
+
crypto_shorthash
@@ -509,6 +515,9 @@
include\sodium
+
+ include\sodium
+
include\sodium
@@ -533,6 +542,9 @@
include\sodium
+
+ include\sodium
+
include\sodium
@@ -838,6 +850,9 @@
{3d42d2a2-b192-33dd-9162-508916414707}
+
+ {baf7d894-9298-391d-8dc2-e4c3010f5ddc}
+
{898b6bd5-1360-3a34-adcd-0fade7561685}
diff --git a/libsodium.vcxproj b/libsodium.vcxproj
index 1429a1e78d..04bd3f0952 100644
--- a/libsodium.vcxproj
+++ b/libsodium.vcxproj
@@ -358,6 +358,8 @@
+
+
@@ -478,6 +480,7 @@
+
@@ -486,6 +489,7 @@
+
diff --git a/libsodium.vcxproj.filters b/libsodium.vcxproj.filters
index 64c097f503..ccbe9757b0 100644
--- a/libsodium.vcxproj.filters
+++ b/libsodium.vcxproj.filters
@@ -144,6 +144,12 @@
Source Files
+
+ Source Files
+
+
+ Source Files
+
Source Files
@@ -500,6 +506,9 @@
Header Files
+
+ Header Files
+
Header Files
@@ -524,6 +533,9 @@
Header Files
+
+ Header Files
+
Header Files
diff --git a/src/libsodium/Makefile.am b/src/libsodium/Makefile.am
index 03d62d4726..fa2b77c33c 100644
--- a/src/libsodium/Makefile.am
+++ b/src/libsodium/Makefile.am
@@ -152,6 +152,8 @@ libsodium_la_SOURCES += \
crypto_box/curve25519xchacha20poly1305/box_seal_curve25519xchacha20poly1305.c \
crypto_core/ed25519/core_ed25519.c \
crypto_core/ed25519/core_ristretto255.c \
+ crypto_kdf/hkdf/kdf_hkdf_sha256.c \
+ crypto_kdf/hkdf/kdf_hkdf_sha512.c \
crypto_pwhash/scryptsalsa208sha256/crypto_scrypt-common.c \
crypto_pwhash/scryptsalsa208sha256/crypto_scrypt.h \
crypto_pwhash/scryptsalsa208sha256/scrypt_platform.c \
diff --git a/src/libsodium/Makefile.in b/src/libsodium/Makefile.in
index 53bc64a50c..ff905ee07e 100644
--- a/src/libsodium/Makefile.in
+++ b/src/libsodium/Makefile.in
@@ -132,6 +132,8 @@ target_triplet = @target@
@MINIMAL_FALSE@ crypto_box/curve25519xchacha20poly1305/box_seal_curve25519xchacha20poly1305.c \
@MINIMAL_FALSE@ crypto_core/ed25519/core_ed25519.c \
@MINIMAL_FALSE@ crypto_core/ed25519/core_ristretto255.c \
+@MINIMAL_FALSE@ crypto_kdf/hkdf/kdf_hkdf_sha256.c \
+@MINIMAL_FALSE@ crypto_kdf/hkdf/kdf_hkdf_sha512.c \
@MINIMAL_FALSE@ crypto_pwhash/scryptsalsa208sha256/crypto_scrypt-common.c \
@MINIMAL_FALSE@ crypto_pwhash/scryptsalsa208sha256/crypto_scrypt.h \
@MINIMAL_FALSE@ crypto_pwhash/scryptsalsa208sha256/scrypt_platform.c \
@@ -373,6 +375,8 @@ am__libsodium_la_SOURCES_DIST = \
crypto_box/curve25519xchacha20poly1305/box_seal_curve25519xchacha20poly1305.c \
crypto_core/ed25519/core_ed25519.c \
crypto_core/ed25519/core_ristretto255.c \
+ crypto_kdf/hkdf/kdf_hkdf_sha256.c \
+ crypto_kdf/hkdf/kdf_hkdf_sha512.c \
crypto_pwhash/scryptsalsa208sha256/crypto_scrypt-common.c \
crypto_pwhash/scryptsalsa208sha256/crypto_scrypt.h \
crypto_pwhash/scryptsalsa208sha256/scrypt_platform.c \
@@ -404,6 +408,8 @@ am__objects_1 =
@MINIMAL_FALSE@ crypto_box/curve25519xchacha20poly1305/libsodium_la-box_seal_curve25519xchacha20poly1305.lo \
@MINIMAL_FALSE@ crypto_core/ed25519/libsodium_la-core_ed25519.lo \
@MINIMAL_FALSE@ crypto_core/ed25519/libsodium_la-core_ristretto255.lo \
+@MINIMAL_FALSE@ crypto_kdf/hkdf/libsodium_la-kdf_hkdf_sha256.lo \
+@MINIMAL_FALSE@ crypto_kdf/hkdf/libsodium_la-kdf_hkdf_sha512.lo \
@MINIMAL_FALSE@ crypto_pwhash/scryptsalsa208sha256/libsodium_la-crypto_scrypt-common.lo \
@MINIMAL_FALSE@ crypto_pwhash/scryptsalsa208sha256/libsodium_la-scrypt_platform.lo \
@MINIMAL_FALSE@ crypto_pwhash/scryptsalsa208sha256/libsodium_la-pbkdf2-sha256.lo \
@@ -578,6 +584,8 @@ am__depfiles_remade = crypto_aead/aes256gcm/$(DEPDIR)/libsodium_la-aead_aes256gc
crypto_hash/sha512/cp/$(DEPDIR)/libsodium_la-hash_sha512_cp.Plo \
crypto_kdf/$(DEPDIR)/libsodium_la-crypto_kdf.Plo \
crypto_kdf/blake2b/$(DEPDIR)/libsodium_la-kdf_blake2b.Plo \
+ crypto_kdf/hkdf/$(DEPDIR)/libsodium_la-kdf_hkdf_sha256.Plo \
+ crypto_kdf/hkdf/$(DEPDIR)/libsodium_la-kdf_hkdf_sha512.Plo \
crypto_kx/$(DEPDIR)/libsodium_la-crypto_kx.Plo \
crypto_onetimeauth/$(DEPDIR)/libsodium_la-crypto_onetimeauth.Plo \
crypto_onetimeauth/poly1305/$(DEPDIR)/libsodium_la-onetimeauth_poly1305.Plo \
@@ -1824,6 +1832,18 @@ crypto_core/ed25519/libsodium_la-core_ed25519.lo: \
crypto_core/ed25519/libsodium_la-core_ristretto255.lo: \
crypto_core/ed25519/$(am__dirstamp) \
crypto_core/ed25519/$(DEPDIR)/$(am__dirstamp)
+crypto_kdf/hkdf/$(am__dirstamp):
+ @$(MKDIR_P) crypto_kdf/hkdf
+ @: > crypto_kdf/hkdf/$(am__dirstamp)
+crypto_kdf/hkdf/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) crypto_kdf/hkdf/$(DEPDIR)
+ @: > crypto_kdf/hkdf/$(DEPDIR)/$(am__dirstamp)
+crypto_kdf/hkdf/libsodium_la-kdf_hkdf_sha256.lo: \
+ crypto_kdf/hkdf/$(am__dirstamp) \
+ crypto_kdf/hkdf/$(DEPDIR)/$(am__dirstamp)
+crypto_kdf/hkdf/libsodium_la-kdf_hkdf_sha512.lo: \
+ crypto_kdf/hkdf/$(am__dirstamp) \
+ crypto_kdf/hkdf/$(DEPDIR)/$(am__dirstamp)
crypto_pwhash/scryptsalsa208sha256/$(am__dirstamp):
@$(MKDIR_P) crypto_pwhash/scryptsalsa208sha256
@: > crypto_pwhash/scryptsalsa208sha256/$(am__dirstamp)
@@ -2045,6 +2065,8 @@ mostlyclean-compile:
-rm -f crypto_kdf/*.lo
-rm -f crypto_kdf/blake2b/*.$(OBJEXT)
-rm -f crypto_kdf/blake2b/*.lo
+ -rm -f crypto_kdf/hkdf/*.$(OBJEXT)
+ -rm -f crypto_kdf/hkdf/*.lo
-rm -f crypto_kx/*.$(OBJEXT)
-rm -f crypto_kx/*.lo
-rm -f crypto_onetimeauth/*.$(OBJEXT)
@@ -2176,6 +2198,8 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@crypto_hash/sha512/cp/$(DEPDIR)/libsodium_la-hash_sha512_cp.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@crypto_kdf/$(DEPDIR)/libsodium_la-crypto_kdf.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@crypto_kdf/blake2b/$(DEPDIR)/libsodium_la-kdf_blake2b.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@crypto_kdf/hkdf/$(DEPDIR)/libsodium_la-kdf_hkdf_sha256.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@crypto_kdf/hkdf/$(DEPDIR)/libsodium_la-kdf_hkdf_sha512.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@crypto_kx/$(DEPDIR)/libsodium_la-crypto_kx.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@crypto_onetimeauth/$(DEPDIR)/libsodium_la-crypto_onetimeauth.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@crypto_onetimeauth/poly1305/$(DEPDIR)/libsodium_la-onetimeauth_poly1305.Plo@am__quote@ # am--include-marker
@@ -2906,6 +2930,20 @@ crypto_core/ed25519/libsodium_la-core_ristretto255.lo: crypto_core/ed25519/core_
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_core/ed25519/libsodium_la-core_ristretto255.lo `test -f 'crypto_core/ed25519/core_ristretto255.c' || echo '$(srcdir)/'`crypto_core/ed25519/core_ristretto255.c
+crypto_kdf/hkdf/libsodium_la-kdf_hkdf_sha256.lo: crypto_kdf/hkdf/kdf_hkdf_sha256.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_kdf/hkdf/libsodium_la-kdf_hkdf_sha256.lo -MD -MP -MF crypto_kdf/hkdf/$(DEPDIR)/libsodium_la-kdf_hkdf_sha256.Tpo -c -o crypto_kdf/hkdf/libsodium_la-kdf_hkdf_sha256.lo `test -f 'crypto_kdf/hkdf/kdf_hkdf_sha256.c' || echo '$(srcdir)/'`crypto_kdf/hkdf/kdf_hkdf_sha256.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) crypto_kdf/hkdf/$(DEPDIR)/libsodium_la-kdf_hkdf_sha256.Tpo crypto_kdf/hkdf/$(DEPDIR)/libsodium_la-kdf_hkdf_sha256.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='crypto_kdf/hkdf/kdf_hkdf_sha256.c' object='crypto_kdf/hkdf/libsodium_la-kdf_hkdf_sha256.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_kdf/hkdf/libsodium_la-kdf_hkdf_sha256.lo `test -f 'crypto_kdf/hkdf/kdf_hkdf_sha256.c' || echo '$(srcdir)/'`crypto_kdf/hkdf/kdf_hkdf_sha256.c
+
+crypto_kdf/hkdf/libsodium_la-kdf_hkdf_sha512.lo: crypto_kdf/hkdf/kdf_hkdf_sha512.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_kdf/hkdf/libsodium_la-kdf_hkdf_sha512.lo -MD -MP -MF crypto_kdf/hkdf/$(DEPDIR)/libsodium_la-kdf_hkdf_sha512.Tpo -c -o crypto_kdf/hkdf/libsodium_la-kdf_hkdf_sha512.lo `test -f 'crypto_kdf/hkdf/kdf_hkdf_sha512.c' || echo '$(srcdir)/'`crypto_kdf/hkdf/kdf_hkdf_sha512.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) crypto_kdf/hkdf/$(DEPDIR)/libsodium_la-kdf_hkdf_sha512.Tpo crypto_kdf/hkdf/$(DEPDIR)/libsodium_la-kdf_hkdf_sha512.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='crypto_kdf/hkdf/kdf_hkdf_sha512.c' object='crypto_kdf/hkdf/libsodium_la-kdf_hkdf_sha512.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_kdf/hkdf/libsodium_la-kdf_hkdf_sha512.lo `test -f 'crypto_kdf/hkdf/kdf_hkdf_sha512.c' || echo '$(srcdir)/'`crypto_kdf/hkdf/kdf_hkdf_sha512.c
+
crypto_pwhash/scryptsalsa208sha256/libsodium_la-crypto_scrypt-common.lo: crypto_pwhash/scryptsalsa208sha256/crypto_scrypt-common.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_pwhash/scryptsalsa208sha256/libsodium_la-crypto_scrypt-common.lo -MD -MP -MF crypto_pwhash/scryptsalsa208sha256/$(DEPDIR)/libsodium_la-crypto_scrypt-common.Tpo -c -o crypto_pwhash/scryptsalsa208sha256/libsodium_la-crypto_scrypt-common.lo `test -f 'crypto_pwhash/scryptsalsa208sha256/crypto_scrypt-common.c' || echo '$(srcdir)/'`crypto_pwhash/scryptsalsa208sha256/crypto_scrypt-common.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) crypto_pwhash/scryptsalsa208sha256/$(DEPDIR)/libsodium_la-crypto_scrypt-common.Tpo crypto_pwhash/scryptsalsa208sha256/$(DEPDIR)/libsodium_la-crypto_scrypt-common.Plo
@@ -3107,6 +3145,7 @@ clean-libtool:
-rm -rf crypto_hash/sha512/cp/.libs crypto_hash/sha512/cp/_libs
-rm -rf crypto_kdf/.libs crypto_kdf/_libs
-rm -rf crypto_kdf/blake2b/.libs crypto_kdf/blake2b/_libs
+ -rm -rf crypto_kdf/hkdf/.libs crypto_kdf/hkdf/_libs
-rm -rf crypto_kx/.libs crypto_kx/_libs
-rm -rf crypto_onetimeauth/.libs crypto_onetimeauth/_libs
-rm -rf crypto_onetimeauth/poly1305/.libs crypto_onetimeauth/poly1305/_libs
@@ -3426,6 +3465,8 @@ distclean-generic:
-rm -f crypto_kdf/$(am__dirstamp)
-rm -f crypto_kdf/blake2b/$(DEPDIR)/$(am__dirstamp)
-rm -f crypto_kdf/blake2b/$(am__dirstamp)
+ -rm -f crypto_kdf/hkdf/$(DEPDIR)/$(am__dirstamp)
+ -rm -f crypto_kdf/hkdf/$(am__dirstamp)
-rm -f crypto_kx/$(DEPDIR)/$(am__dirstamp)
-rm -f crypto_kx/$(am__dirstamp)
-rm -f crypto_onetimeauth/$(DEPDIR)/$(am__dirstamp)
@@ -3583,6 +3624,8 @@ distclean: distclean-recursive
-rm -f crypto_hash/sha512/cp/$(DEPDIR)/libsodium_la-hash_sha512_cp.Plo
-rm -f crypto_kdf/$(DEPDIR)/libsodium_la-crypto_kdf.Plo
-rm -f crypto_kdf/blake2b/$(DEPDIR)/libsodium_la-kdf_blake2b.Plo
+ -rm -f crypto_kdf/hkdf/$(DEPDIR)/libsodium_la-kdf_hkdf_sha256.Plo
+ -rm -f crypto_kdf/hkdf/$(DEPDIR)/libsodium_la-kdf_hkdf_sha512.Plo
-rm -f crypto_kx/$(DEPDIR)/libsodium_la-crypto_kx.Plo
-rm -f crypto_onetimeauth/$(DEPDIR)/libsodium_la-crypto_onetimeauth.Plo
-rm -f crypto_onetimeauth/poly1305/$(DEPDIR)/libsodium_la-onetimeauth_poly1305.Plo
@@ -3738,6 +3781,8 @@ maintainer-clean: maintainer-clean-recursive
-rm -f crypto_hash/sha512/cp/$(DEPDIR)/libsodium_la-hash_sha512_cp.Plo
-rm -f crypto_kdf/$(DEPDIR)/libsodium_la-crypto_kdf.Plo
-rm -f crypto_kdf/blake2b/$(DEPDIR)/libsodium_la-kdf_blake2b.Plo
+ -rm -f crypto_kdf/hkdf/$(DEPDIR)/libsodium_la-kdf_hkdf_sha256.Plo
+ -rm -f crypto_kdf/hkdf/$(DEPDIR)/libsodium_la-kdf_hkdf_sha512.Plo
-rm -f crypto_kx/$(DEPDIR)/libsodium_la-crypto_kx.Plo
-rm -f crypto_onetimeauth/$(DEPDIR)/libsodium_la-crypto_onetimeauth.Plo
-rm -f crypto_onetimeauth/poly1305/$(DEPDIR)/libsodium_la-onetimeauth_poly1305.Plo
diff --git a/src/libsodium/crypto_kdf/hkdf/kdf_hkdf_sha256.c b/src/libsodium/crypto_kdf/hkdf/kdf_hkdf_sha256.c
new file mode 100644
index 0000000000..8eb7c878a6
--- /dev/null
+++ b/src/libsodium/crypto_kdf/hkdf/kdf_hkdf_sha256.c
@@ -0,0 +1,123 @@
+#include
+#include
+
+#include "crypto_auth_hmacsha256.h"
+#include "crypto_kdf.h"
+#include "crypto_kdf_hkdf_sha256.h"
+#include "randombytes.h"
+#include "utils.h"
+
+int
+crypto_kdf_hkdf_sha256_extract_init(crypto_kdf_hkdf_sha256_state *state,
+ const unsigned char *salt, size_t salt_len)
+{
+ return crypto_auth_hmacsha256_init(&state->st, salt, salt_len);
+}
+
+int
+crypto_kdf_hkdf_sha256_extract_update(crypto_kdf_hkdf_sha256_state *state,
+ const unsigned char *ikm, size_t ikm_len)
+{
+ return crypto_auth_hmacsha256_update(&state->st, ikm, ikm_len);
+}
+
+int
+crypto_kdf_hkdf_sha256_extract_final(crypto_kdf_hkdf_sha256_state *state,
+ unsigned char prk[crypto_kdf_hkdf_sha256_KEYBYTES])
+{
+ crypto_auth_hmacsha256_final(&state->st, prk);
+ sodium_memzero(state, sizeof state);
+
+ return 0;
+}
+
+int
+crypto_kdf_hkdf_sha256_extract(
+ unsigned char prk[crypto_kdf_hkdf_sha256_KEYBYTES],
+ const unsigned char *salt, size_t salt_len, const unsigned char *ikm,
+ size_t ikm_len)
+{
+ crypto_kdf_hkdf_sha256_state state;
+
+ crypto_kdf_hkdf_sha256_extract_init(&state, salt, salt_len);
+ crypto_kdf_hkdf_sha256_extract_update(&state, ikm, ikm_len);
+
+ return crypto_kdf_hkdf_sha256_extract_final(&state, prk);
+}
+
+void
+crypto_kdf_hkdf_sha256_keygen(unsigned char prk[crypto_kdf_hkdf_sha256_KEYBYTES])
+{
+ randombytes_buf(prk, crypto_kdf_hkdf_sha256_KEYBYTES);
+}
+
+int
+crypto_kdf_hkdf_sha256_expand(unsigned char *out, size_t out_len,
+ const char *ctx, size_t ctx_len,
+ const unsigned char prk[crypto_kdf_hkdf_sha256_KEYBYTES])
+{
+ crypto_auth_hmacsha256_state st;
+ unsigned char tmp[crypto_auth_hmacsha256_BYTES];
+ size_t i;
+ size_t left;
+ unsigned char counter = 1U;
+
+ if (out_len > crypto_kdf_hkdf_sha256_BYTES_MAX) {
+ errno = EINVAL;
+ return -1;
+ }
+ for (i = (size_t) 0U; i + crypto_auth_hmacsha256_BYTES <= out_len;
+ i += crypto_auth_hmacsha256_BYTES) {
+ crypto_auth_hmacsha256_init(&st, prk, crypto_kdf_hkdf_sha256_KEYBYTES);
+ if (i != (size_t) 0U) {
+ crypto_auth_hmacsha256_update(&st,
+ &out[i - crypto_auth_hmacsha256_BYTES],
+ crypto_auth_hmacsha256_BYTES);
+ }
+ crypto_auth_hmacsha256_update(&st,
+ (const unsigned char *) ctx, ctx_len);
+ crypto_auth_hmacsha256_update(&st, &counter, (size_t) 1U);
+ crypto_auth_hmacsha256_final(&st, &out[i]);
+ counter++;
+ }
+ if ((left = out_len & (crypto_auth_hmacsha256_BYTES - 1U)) != (size_t) 0U) {
+ crypto_auth_hmacsha256_init(&st, prk, crypto_kdf_hkdf_sha256_KEYBYTES);
+ if (i != (size_t) 0U) {
+ crypto_auth_hmacsha256_update(&st,
+ &out[i - crypto_auth_hmacsha256_BYTES],
+ crypto_auth_hmacsha256_BYTES);
+ }
+ crypto_auth_hmacsha256_update(&st,
+ (const unsigned char *) ctx, ctx_len);
+ crypto_auth_hmacsha256_update(&st, &counter, (size_t) 1U);
+ crypto_auth_hmacsha256_final(&st, tmp);
+ memcpy(&out[i], tmp, left);
+ sodium_memzero(tmp, sizeof tmp);
+ }
+ sodium_memzero(&st, sizeof st);
+
+ return 0;
+}
+
+size_t
+crypto_kdf_hkdf_sha256_keybytes(void)
+{
+ return crypto_kdf_hkdf_sha256_KEYBYTES;
+}
+
+size_t
+crypto_kdf_hkdf_sha256_bytes_min(void)
+{
+ return crypto_kdf_hkdf_sha256_BYTES_MIN;
+}
+
+size_t
+crypto_kdf_hkdf_sha256_bytes_max(void)
+{
+ return crypto_kdf_hkdf_sha256_BYTES_MAX;
+}
+
+size_t crypto_kdf_hkdf_sha256_statebytes(void)
+{
+ return sizeof(crypto_kdf_hkdf_sha256_state);
+}
diff --git a/src/libsodium/crypto_kdf/hkdf/kdf_hkdf_sha512.c b/src/libsodium/crypto_kdf/hkdf/kdf_hkdf_sha512.c
new file mode 100644
index 0000000000..51d916197e
--- /dev/null
+++ b/src/libsodium/crypto_kdf/hkdf/kdf_hkdf_sha512.c
@@ -0,0 +1,118 @@
+#include
+#include
+
+#include "crypto_auth_hmacsha512.h"
+#include "crypto_kdf.h"
+#include "crypto_kdf_hkdf_sha512.h"
+#include "randombytes.h"
+#include "utils.h"
+
+int
+crypto_kdf_hkdf_sha512_extract_init(crypto_kdf_hkdf_sha512_state *state,
+ const unsigned char *salt, size_t salt_len)
+{
+ return crypto_auth_hmacsha512_init(&state->st, salt, salt_len);
+}
+
+int
+crypto_kdf_hkdf_sha512_extract_update(crypto_kdf_hkdf_sha512_state *state,
+ const unsigned char *ikm, size_t ikm_len)
+{
+ return crypto_auth_hmacsha512_update(&state->st, ikm, ikm_len);
+}
+
+int
+crypto_kdf_hkdf_sha512_extract_final(crypto_kdf_hkdf_sha512_state *state,
+ unsigned char prk[crypto_kdf_hkdf_sha512_KEYBYTES])
+{
+ crypto_auth_hmacsha512_final(&state->st, prk);
+ sodium_memzero(state, sizeof state);
+
+ return 0;
+}
+
+int
+crypto_kdf_hkdf_sha512_extract(
+ unsigned char prk[crypto_kdf_hkdf_sha512_KEYBYTES],
+ const unsigned char *salt, size_t salt_len, const unsigned char *ikm,
+ size_t ikm_len)
+{
+ crypto_kdf_hkdf_sha512_state state;
+
+ crypto_kdf_hkdf_sha512_extract_init(&state, salt, salt_len);
+ crypto_kdf_hkdf_sha512_extract_update(&state, ikm, ikm_len);
+
+ return crypto_kdf_hkdf_sha512_extract_final(&state, prk);
+}
+
+void
+crypto_kdf_hkdf_sha512_keygen(unsigned char prk[crypto_kdf_hkdf_sha512_KEYBYTES])
+{
+ randombytes_buf(prk, crypto_kdf_hkdf_sha512_KEYBYTES);
+}
+
+int
+crypto_kdf_hkdf_sha512_expand(unsigned char *out, size_t out_len,
+ const char *ctx, size_t ctx_len,
+ const unsigned char prk[crypto_kdf_hkdf_sha512_KEYBYTES])
+{
+ crypto_auth_hmacsha512_state st;
+ unsigned char tmp[crypto_auth_hmacsha512_BYTES];
+ size_t i;
+ size_t left;
+ unsigned char counter = 1U;
+
+ if (out_len > crypto_kdf_hkdf_sha512_BYTES_MAX) {
+ errno = EINVAL;
+ return -1;
+ }
+ for (i = (size_t) 0U; i + crypto_auth_hmacsha512_BYTES <= out_len;
+ i += crypto_auth_hmacsha512_BYTES) {
+ crypto_auth_hmacsha512_init(&st, prk, crypto_kdf_hkdf_sha512_KEYBYTES);
+ if (i != (size_t) 0U) {
+ crypto_auth_hmacsha512_update(&st,
+ &out[i - crypto_auth_hmacsha512_BYTES],
+ crypto_auth_hmacsha512_BYTES);
+ }
+ crypto_auth_hmacsha512_update(&st,
+ (const unsigned char *) ctx, ctx_len);
+ crypto_auth_hmacsha512_update(&st, &counter, (size_t) 1U);
+ crypto_auth_hmacsha512_final(&st, &out[i]);
+ counter++;
+ }
+ if ((left = out_len & (crypto_auth_hmacsha512_BYTES - 1U)) != (size_t) 0U) {
+ crypto_auth_hmacsha512_init(&st, prk, crypto_kdf_hkdf_sha512_KEYBYTES);
+ if (i != (size_t) 0U) {
+ crypto_auth_hmacsha512_update(&st,
+ &out[i - crypto_auth_hmacsha512_BYTES],
+ crypto_auth_hmacsha512_BYTES);
+ }
+ crypto_auth_hmacsha512_update(&st,
+ (const unsigned char *) ctx, ctx_len);
+ crypto_auth_hmacsha512_update(&st, &counter, (size_t) 1U);
+ crypto_auth_hmacsha512_final(&st, tmp);
+ memcpy(&out[i], tmp, left);
+ sodium_memzero(tmp, sizeof tmp);
+ }
+ sodium_memzero(&st, sizeof st);
+
+ return 0;
+}
+
+size_t
+crypto_kdf_hkdf_sha512_keybytes(void)
+{
+ return crypto_kdf_hkdf_sha512_KEYBYTES;
+}
+
+size_t
+crypto_kdf_hkdf_sha512_bytes_min(void)
+{
+ return crypto_kdf_hkdf_sha512_BYTES_MIN;
+}
+
+size_t
+crypto_kdf_hkdf_sha512_bytes_max(void)
+{
+ return crypto_kdf_hkdf_sha512_BYTES_MAX;
+}
diff --git a/src/libsodium/include/sodium.h b/src/libsodium/include/sodium.h
index 295f911cff..18659e1b21 100644
--- a/src/libsodium/include/sodium.h
+++ b/src/libsodium/include/sodium.h
@@ -26,6 +26,8 @@
#include "sodium/crypto_hash_sha512.h"
#include "sodium/crypto_kdf.h"
#include "sodium/crypto_kdf_blake2b.h"
+#include "sodium/crypto_kdf_hkdf_sha256.h"
+#include "sodium/crypto_kdf_hkdf_sha512.h"
#include "sodium/crypto_kx.h"
#include "sodium/crypto_onetimeauth.h"
#include "sodium/crypto_onetimeauth_poly1305.h"
diff --git a/src/libsodium/include/sodium/crypto_kdf_hkdf_sha256.h b/src/libsodium/include/sodium/crypto_kdf_hkdf_sha256.h
new file mode 100644
index 0000000000..e7e7f4db6d
--- /dev/null
+++ b/src/libsodium/include/sodium/crypto_kdf_hkdf_sha256.h
@@ -0,0 +1,74 @@
+#ifndef crypto_kdf_hkdf_sha256_H
+#define crypto_kdf_hkdf_sha256_H
+
+#include
+#include
+#include
+
+#include "crypto_kdf.h"
+#include "crypto_auth_hmacsha256.h"
+#include "export.h"
+
+#ifdef __cplusplus
+# ifdef __GNUC__
+# pragma GCC diagnostic ignored "-Wlong-long"
+# endif
+extern "C" {
+#endif
+
+#define crypto_kdf_hkdf_sha256_KEYBYTES crypto_auth_hmacsha256_BYTES
+SODIUM_EXPORT
+size_t crypto_kdf_hkdf_sha256_keybytes(void);
+
+#define crypto_kdf_hkdf_sha256_BYTES_MIN 0U
+SODIUM_EXPORT
+size_t crypto_kdf_hkdf_sha256_bytes_min(void);
+
+#define crypto_kdf_hkdf_sha256_BYTES_MAX (0xff * crypto_auth_hmacsha256_BYTES)
+SODIUM_EXPORT
+size_t crypto_kdf_hkdf_sha256_bytes_max(void);
+
+SODIUM_EXPORT
+int crypto_kdf_hkdf_sha256_extract(unsigned char prk[crypto_kdf_hkdf_sha256_KEYBYTES],
+ const unsigned char *salt, size_t salt_len,
+ const unsigned char *ikm, size_t ikm_len)
+ __attribute__ ((nonnull(4)));
+
+SODIUM_EXPORT
+void crypto_kdf_hkdf_sha256_keygen(unsigned char prk[crypto_kdf_hkdf_sha256_KEYBYTES]);
+
+SODIUM_EXPORT
+int crypto_kdf_hkdf_sha256_expand(unsigned char *out, size_t out_len,
+ const char *ctx, size_t ctx_len,
+ const unsigned char prk[crypto_kdf_hkdf_sha256_KEYBYTES])
+ __attribute__ ((nonnull(1)));
+
+/* ------------------------------------------------------------------------- */
+
+typedef struct crypto_kdf_hkdf_sha256_state {
+ crypto_auth_hmacsha256_state st;
+} crypto_kdf_hkdf_sha256_state;
+
+SODIUM_EXPORT
+size_t crypto_kdf_hkdf_sha256_statebytes(void);
+
+SODIUM_EXPORT
+int crypto_kdf_hkdf_sha256_extract_init(crypto_kdf_hkdf_sha256_state *state,
+ const unsigned char *salt, size_t salt_len)
+ __attribute__ ((nonnull(1)));
+
+SODIUM_EXPORT
+int crypto_kdf_hkdf_sha256_extract_update(crypto_kdf_hkdf_sha256_state *state,
+ const unsigned char *ikm, size_t ikm_len)
+ __attribute__ ((nonnull));
+
+SODIUM_EXPORT
+int crypto_kdf_hkdf_sha256_extract_final(crypto_kdf_hkdf_sha256_state *state,
+ unsigned char prk[crypto_kdf_hkdf_sha256_KEYBYTES])
+ __attribute__ ((nonnull));
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/libsodium/include/sodium/crypto_kdf_hkdf_sha512.h b/src/libsodium/include/sodium/crypto_kdf_hkdf_sha512.h
new file mode 100644
index 0000000000..0ed205dfb8
--- /dev/null
+++ b/src/libsodium/include/sodium/crypto_kdf_hkdf_sha512.h
@@ -0,0 +1,75 @@
+#ifndef crypto_kdf_hkdf_sha512_H
+#define crypto_kdf_hkdf_sha512_H
+
+#include
+#include
+#include
+
+#include "crypto_kdf.h"
+#include "crypto_auth_hmacsha512.h"
+#include "export.h"
+
+#ifdef __cplusplus
+# ifdef __GNUC__
+# pragma GCC diagnostic ignored "-Wlong-long"
+# endif
+extern "C" {
+#endif
+
+#define crypto_kdf_hkdf_sha512_KEYBYTES crypto_auth_hmacsha512_BYTES
+SODIUM_EXPORT
+size_t crypto_kdf_hkdf_sha512_keybytes(void);
+
+#define crypto_kdf_hkdf_sha512_BYTES_MIN 0U
+SODIUM_EXPORT
+size_t crypto_kdf_hkdf_sha512_bytes_min(void);
+
+#define crypto_kdf_hkdf_sha512_BYTES_MAX (0xff * crypto_auth_hmacsha512_BYTES)
+SODIUM_EXPORT
+size_t crypto_kdf_hkdf_sha512_bytes_max(void);
+
+SODIUM_EXPORT
+int crypto_kdf_hkdf_sha512_extract(unsigned char prk[crypto_kdf_hkdf_sha512_KEYBYTES],
+ const unsigned char *salt, size_t salt_len,
+ const unsigned char *ikm, size_t ikm_len)
+ __attribute__ ((nonnull(1)));
+
+SODIUM_EXPORT
+void crypto_kdf_hkdf_sha512_keygen(unsigned char prk[crypto_kdf_hkdf_sha512_KEYBYTES])
+ __attribute__ ((nonnull));
+
+SODIUM_EXPORT
+int crypto_kdf_hkdf_sha512_expand(unsigned char *out, size_t out_len,
+ const char *ctx, size_t ctx_len,
+ const unsigned char prk[crypto_kdf_hkdf_sha512_KEYBYTES])
+ __attribute__ ((nonnull(1)));
+
+/* ------------------------------------------------------------------------- */
+
+typedef struct crypto_kdf_hkdf_sha512_state {
+ crypto_auth_hmacsha512_state st;
+} crypto_kdf_hkdf_sha512_state;
+
+SODIUM_EXPORT
+size_t crypto_kdf_hkdf_sha512_statebytes(void);
+
+SODIUM_EXPORT
+int crypto_kdf_hkdf_sha512_extract_init(crypto_kdf_hkdf_sha512_state *state,
+ const unsigned char *salt, size_t salt_len)
+ __attribute__ ((nonnull(1)));
+
+SODIUM_EXPORT
+int crypto_kdf_hkdf_sha512_extract_update(crypto_kdf_hkdf_sha512_state *state,
+ const unsigned char *ikm, size_t ikm_len)
+ __attribute__ ((nonnull));
+
+SODIUM_EXPORT
+int crypto_kdf_hkdf_sha512_extract_final(crypto_kdf_hkdf_sha512_state *state,
+ unsigned char prk[crypto_kdf_hkdf_sha512_KEYBYTES])
+ __attribute__ ((nonnull));
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/test/default/Makefile.am b/test/default/Makefile.am
index d319160dbe..ed852c91b4 100644
--- a/test/default/Makefile.am
+++ b/test/default/Makefile.am
@@ -41,6 +41,7 @@ EXTRA_DIST = \
hash.exp \
hash3.exp \
kdf.exp \
+ kdf_hkdf.exp \
keygen.exp \
kx.exp \
metamorphic.exp \
@@ -67,7 +68,7 @@ EXTRA_DIST = \
secretbox8.exp \
secretbox_easy.exp \
secretbox_easy2.exp \
- secretstream.exp \
+ secretstream_xchacha20poly1305.exp \
shorthash.exp \
sign.exp \
siphashx24.exp \
@@ -121,6 +122,7 @@ DISTCLEANFILES = \
hash2.res \
hash3.res \
kdf.res \
+ kdf_hkdf.res \
keygen.res \
kx.res \
metamorphic.res \
@@ -147,7 +149,7 @@ DISTCLEANFILES = \
secretbox8.res \
secretbox_easy.res \
secretbox_easy2.res \
- secretstream.res \
+ secretstream_xchacha20poly1305.res \
shorthash.res \
sign.res \
siphashx24.res \
@@ -230,7 +232,7 @@ TESTS_TARGETS = \
secretbox8 \
secretbox_easy \
secretbox_easy2 \
- secretstream \
+ secretstream_xchacha20poly1305 \
shorthash \
sign \
sodium_core \
@@ -363,6 +365,9 @@ hash3_LDADD = $(TESTS_LDADD)
kdf_SOURCE = cmptest.h kdf.c
kdf_LDADD = $(TESTS_LDADD)
+kdf_hkdf_SOURCE = cmptest.h kdf_hkdf.c
+kdf_hkdf_LDADD = $(TESTS_LDADD)
+
keygen_SOURCE = cmptest.h keygen.c
keygen_LDADD = $(TESTS_LDADD)
@@ -441,8 +446,8 @@ secretbox_easy_LDADD = $(TESTS_LDADD)
secretbox_easy2_SOURCE = cmptest.h secretbox_easy2.c
secretbox_easy2_LDADD = $(TESTS_LDADD)
-secretstream_SOURCE = cmptest.h secretstream.c
-secretstream_LDADD = $(TESTS_LDADD)
+secretstream_xchacha20poly1305_SOURCE = cmptest.h secretstream_xchacha20poly1305.c
+secretstream_xchacha20poly1305_LDADD = $(TESTS_LDADD)
shorthash_SOURCE = cmptest.h shorthash.c
shorthash_LDADD = $(TESTS_LDADD)
@@ -490,6 +495,7 @@ if !MINIMAL
TESTS_TARGETS += \
core_ed25519 \
core_ristretto255 \
+ kdf_hkdf \
pwhash_scrypt \
pwhash_scrypt_ll \
scalarmult_ed25519 \
diff --git a/test/default/Makefile.in b/test/default/Makefile.in
index 259edeb4e7..d048ff039d 100644
--- a/test/default/Makefile.in
+++ b/test/default/Makefile.in
@@ -97,6 +97,7 @@ TESTS = $(am__EXEEXT_3)
@MINIMAL_FALSE@am__append_2 = \
@MINIMAL_FALSE@ core_ed25519 \
@MINIMAL_FALSE@ core_ristretto255 \
+@MINIMAL_FALSE@ kdf_hkdf \
@MINIMAL_FALSE@ pwhash_scrypt \
@MINIMAL_FALSE@ pwhash_scrypt_ll \
@MINIMAL_FALSE@ scalarmult_ed25519 \
@@ -127,7 +128,7 @@ CONFIG_CLEAN_VPATH_FILES =
@EMSCRIPTEN_FALSE@am__EXEEXT_1 = sodium_utils2$(EXEEXT) \
@EMSCRIPTEN_FALSE@ sodium_utils3$(EXEEXT)
@MINIMAL_FALSE@am__EXEEXT_2 = core_ed25519$(EXEEXT) \
-@MINIMAL_FALSE@ core_ristretto255$(EXEEXT) \
+@MINIMAL_FALSE@ core_ristretto255$(EXEEXT) kdf_hkdf$(EXEEXT) \
@MINIMAL_FALSE@ pwhash_scrypt$(EXEEXT) \
@MINIMAL_FALSE@ pwhash_scrypt_ll$(EXEEXT) \
@MINIMAL_FALSE@ scalarmult_ed25519$(EXEEXT) \
@@ -152,11 +153,12 @@ am__EXEEXT_3 = aead_aes256gcm$(EXEEXT) aead_aes256gcm2$(EXEEXT) \
scalarmult6$(EXEEXT) scalarmult7$(EXEEXT) scalarmult8$(EXEEXT) \
secretbox$(EXEEXT) secretbox2$(EXEEXT) secretbox7$(EXEEXT) \
secretbox8$(EXEEXT) secretbox_easy$(EXEEXT) \
- secretbox_easy2$(EXEEXT) secretstream$(EXEEXT) \
- shorthash$(EXEEXT) sign$(EXEEXT) sodium_core$(EXEEXT) \
- sodium_utils$(EXEEXT) sodium_version$(EXEEXT) stream$(EXEEXT) \
- stream2$(EXEEXT) stream3$(EXEEXT) stream4$(EXEEXT) \
- verify1$(EXEEXT) $(am__EXEEXT_1) $(am__EXEEXT_2)
+ secretbox_easy2$(EXEEXT) \
+ secretstream_xchacha20poly1305$(EXEEXT) shorthash$(EXEEXT) \
+ sign$(EXEEXT) sodium_core$(EXEEXT) sodium_utils$(EXEEXT) \
+ sodium_version$(EXEEXT) stream$(EXEEXT) stream2$(EXEEXT) \
+ stream3$(EXEEXT) stream4$(EXEEXT) verify1$(EXEEXT) \
+ $(am__EXEEXT_1) $(am__EXEEXT_2)
aead_aes256gcm_SOURCES = aead_aes256gcm.c
aead_aes256gcm_OBJECTS = aead_aes256gcm.$(OBJEXT)
aead_aes256gcm_DEPENDENCIES = $(TESTS_LDADD)
@@ -269,6 +271,9 @@ hash3_DEPENDENCIES = $(TESTS_LDADD)
kdf_SOURCES = kdf.c
kdf_OBJECTS = kdf.$(OBJEXT)
kdf_DEPENDENCIES = $(TESTS_LDADD)
+kdf_hkdf_SOURCES = kdf_hkdf.c
+kdf_hkdf_OBJECTS = kdf_hkdf.$(OBJEXT)
+kdf_hkdf_DEPENDENCIES = $(TESTS_LDADD)
keygen_SOURCES = keygen.c
keygen_OBJECTS = keygen.$(OBJEXT)
keygen_DEPENDENCIES = $(TESTS_LDADD)
@@ -347,9 +352,11 @@ secretbox_easy_DEPENDENCIES = $(TESTS_LDADD)
secretbox_easy2_SOURCES = secretbox_easy2.c
secretbox_easy2_OBJECTS = secretbox_easy2.$(OBJEXT)
secretbox_easy2_DEPENDENCIES = $(TESTS_LDADD)
-secretstream_SOURCES = secretstream.c
-secretstream_OBJECTS = secretstream.$(OBJEXT)
-secretstream_DEPENDENCIES = $(TESTS_LDADD)
+secretstream_xchacha20poly1305_SOURCES = \
+ secretstream_xchacha20poly1305.c
+secretstream_xchacha20poly1305_OBJECTS = \
+ secretstream_xchacha20poly1305.$(OBJEXT)
+secretstream_xchacha20poly1305_DEPENDENCIES = $(TESTS_LDADD)
shorthash_SOURCES = shorthash.c
shorthash_OBJECTS = shorthash.$(OBJEXT)
shorthash_DEPENDENCIES = $(TESTS_LDADD)
@@ -424,28 +431,28 @@ am__depfiles_remade = ./$(DEPDIR)/aead_aes256gcm.Po \
./$(DEPDIR)/ed25519_convert.Po ./$(DEPDIR)/generichash.Po \
./$(DEPDIR)/generichash2.Po ./$(DEPDIR)/generichash3.Po \
./$(DEPDIR)/hash.Po ./$(DEPDIR)/hash3.Po ./$(DEPDIR)/kdf.Po \
- ./$(DEPDIR)/keygen.Po ./$(DEPDIR)/kx.Po \
- ./$(DEPDIR)/metamorphic.Po ./$(DEPDIR)/misuse.Po \
- ./$(DEPDIR)/onetimeauth.Po ./$(DEPDIR)/onetimeauth2.Po \
- ./$(DEPDIR)/onetimeauth7.Po ./$(DEPDIR)/pwhash_argon2i.Po \
- ./$(DEPDIR)/pwhash_argon2id.Po ./$(DEPDIR)/pwhash_scrypt.Po \
- ./$(DEPDIR)/pwhash_scrypt_ll.Po ./$(DEPDIR)/randombytes.Po \
- ./$(DEPDIR)/scalarmult.Po ./$(DEPDIR)/scalarmult2.Po \
- ./$(DEPDIR)/scalarmult5.Po ./$(DEPDIR)/scalarmult6.Po \
- ./$(DEPDIR)/scalarmult7.Po ./$(DEPDIR)/scalarmult8.Po \
- ./$(DEPDIR)/scalarmult_ed25519.Po \
+ ./$(DEPDIR)/kdf_hkdf.Po ./$(DEPDIR)/keygen.Po \
+ ./$(DEPDIR)/kx.Po ./$(DEPDIR)/metamorphic.Po \
+ ./$(DEPDIR)/misuse.Po ./$(DEPDIR)/onetimeauth.Po \
+ ./$(DEPDIR)/onetimeauth2.Po ./$(DEPDIR)/onetimeauth7.Po \
+ ./$(DEPDIR)/pwhash_argon2i.Po ./$(DEPDIR)/pwhash_argon2id.Po \
+ ./$(DEPDIR)/pwhash_scrypt.Po ./$(DEPDIR)/pwhash_scrypt_ll.Po \
+ ./$(DEPDIR)/randombytes.Po ./$(DEPDIR)/scalarmult.Po \
+ ./$(DEPDIR)/scalarmult2.Po ./$(DEPDIR)/scalarmult5.Po \
+ ./$(DEPDIR)/scalarmult6.Po ./$(DEPDIR)/scalarmult7.Po \
+ ./$(DEPDIR)/scalarmult8.Po ./$(DEPDIR)/scalarmult_ed25519.Po \
./$(DEPDIR)/scalarmult_ristretto255.Po \
./$(DEPDIR)/secretbox.Po ./$(DEPDIR)/secretbox2.Po \
./$(DEPDIR)/secretbox7.Po ./$(DEPDIR)/secretbox8.Po \
./$(DEPDIR)/secretbox_easy.Po ./$(DEPDIR)/secretbox_easy2.Po \
- ./$(DEPDIR)/secretstream.Po ./$(DEPDIR)/shorthash.Po \
- ./$(DEPDIR)/sign.Po ./$(DEPDIR)/siphashx24.Po \
- ./$(DEPDIR)/sodium_core.Po ./$(DEPDIR)/sodium_utils.Po \
- ./$(DEPDIR)/sodium_utils2.Po ./$(DEPDIR)/sodium_utils3.Po \
- ./$(DEPDIR)/sodium_version.Po ./$(DEPDIR)/stream.Po \
- ./$(DEPDIR)/stream2.Po ./$(DEPDIR)/stream3.Po \
- ./$(DEPDIR)/stream4.Po ./$(DEPDIR)/verify1.Po \
- ./$(DEPDIR)/xchacha20.Po
+ ./$(DEPDIR)/secretstream_xchacha20poly1305.Po \
+ ./$(DEPDIR)/shorthash.Po ./$(DEPDIR)/sign.Po \
+ ./$(DEPDIR)/siphashx24.Po ./$(DEPDIR)/sodium_core.Po \
+ ./$(DEPDIR)/sodium_utils.Po ./$(DEPDIR)/sodium_utils2.Po \
+ ./$(DEPDIR)/sodium_utils3.Po ./$(DEPDIR)/sodium_version.Po \
+ ./$(DEPDIR)/stream.Po ./$(DEPDIR)/stream2.Po \
+ ./$(DEPDIR)/stream3.Po ./$(DEPDIR)/stream4.Po \
+ ./$(DEPDIR)/verify1.Po ./$(DEPDIR)/xchacha20.Po
am__mv = mv -f
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
@@ -472,17 +479,17 @@ SOURCES = aead_aes256gcm.c aead_aes256gcm2.c aead_chacha20poly1305.c \
codecs.c core1.c core2.c core3.c core4.c core5.c core6.c \
core_ed25519.c core_ristretto255.c ed25519_convert.c \
generichash.c generichash2.c generichash3.c hash.c hash3.c \
- kdf.c keygen.c kx.c metamorphic.c misuse.c onetimeauth.c \
- onetimeauth2.c onetimeauth7.c pwhash_argon2i.c \
+ kdf.c kdf_hkdf.c keygen.c kx.c metamorphic.c misuse.c \
+ onetimeauth.c onetimeauth2.c onetimeauth7.c pwhash_argon2i.c \
pwhash_argon2id.c pwhash_scrypt.c pwhash_scrypt_ll.c \
randombytes.c scalarmult.c scalarmult2.c scalarmult5.c \
scalarmult6.c scalarmult7.c scalarmult8.c scalarmult_ed25519.c \
scalarmult_ristretto255.c secretbox.c secretbox2.c \
secretbox7.c secretbox8.c secretbox_easy.c secretbox_easy2.c \
- secretstream.c shorthash.c sign.c siphashx24.c sodium_core.c \
- sodium_utils.c sodium_utils2.c sodium_utils3.c \
- sodium_version.c stream.c stream2.c stream3.c stream4.c \
- verify1.c xchacha20.c
+ secretstream_xchacha20poly1305.c shorthash.c sign.c \
+ siphashx24.c sodium_core.c sodium_utils.c sodium_utils2.c \
+ sodium_utils3.c sodium_version.c stream.c stream2.c stream3.c \
+ stream4.c verify1.c xchacha20.c
DIST_SOURCES = aead_aes256gcm.c aead_aes256gcm2.c \
aead_chacha20poly1305.c aead_chacha20poly13052.c \
aead_xchacha20poly1305.c auth.c auth2.c auth3.c auth5.c \
@@ -490,17 +497,18 @@ DIST_SOURCES = aead_aes256gcm.c aead_aes256gcm2.c \
box_easy2.c box_seal.c box_seed.c chacha20.c codecs.c core1.c \
core2.c core3.c core4.c core5.c core6.c core_ed25519.c \
core_ristretto255.c ed25519_convert.c generichash.c \
- generichash2.c generichash3.c hash.c hash3.c kdf.c keygen.c \
- kx.c metamorphic.c misuse.c onetimeauth.c onetimeauth2.c \
- onetimeauth7.c pwhash_argon2i.c pwhash_argon2id.c \
- pwhash_scrypt.c pwhash_scrypt_ll.c randombytes.c scalarmult.c \
- scalarmult2.c scalarmult5.c scalarmult6.c scalarmult7.c \
- scalarmult8.c scalarmult_ed25519.c scalarmult_ristretto255.c \
- secretbox.c secretbox2.c secretbox7.c secretbox8.c \
- secretbox_easy.c secretbox_easy2.c secretstream.c shorthash.c \
- sign.c siphashx24.c sodium_core.c sodium_utils.c \
- sodium_utils2.c sodium_utils3.c sodium_version.c stream.c \
- stream2.c stream3.c stream4.c verify1.c xchacha20.c
+ generichash2.c generichash3.c hash.c hash3.c kdf.c kdf_hkdf.c \
+ keygen.c kx.c metamorphic.c misuse.c onetimeauth.c \
+ onetimeauth2.c onetimeauth7.c pwhash_argon2i.c \
+ pwhash_argon2id.c pwhash_scrypt.c pwhash_scrypt_ll.c \
+ randombytes.c scalarmult.c scalarmult2.c scalarmult5.c \
+ scalarmult6.c scalarmult7.c scalarmult8.c scalarmult_ed25519.c \
+ scalarmult_ristretto255.c secretbox.c secretbox2.c \
+ secretbox7.c secretbox8.c secretbox_easy.c secretbox_easy2.c \
+ secretstream_xchacha20poly1305.c shorthash.c sign.c \
+ siphashx24.c sodium_core.c sodium_utils.c sodium_utils2.c \
+ sodium_utils3.c sodium_version.c stream.c stream2.c stream3.c \
+ stream4.c verify1.c xchacha20.c
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
@@ -947,6 +955,7 @@ EXTRA_DIST = \
hash.exp \
hash3.exp \
kdf.exp \
+ kdf_hkdf.exp \
keygen.exp \
kx.exp \
metamorphic.exp \
@@ -973,7 +982,7 @@ EXTRA_DIST = \
secretbox8.exp \
secretbox_easy.exp \
secretbox_easy2.exp \
- secretstream.exp \
+ secretstream_xchacha20poly1305.exp \
shorthash.exp \
sign.exp \
siphashx24.exp \
@@ -1027,6 +1036,7 @@ DISTCLEANFILES = \
hash2.res \
hash3.res \
kdf.res \
+ kdf_hkdf.res \
keygen.res \
kx.res \
metamorphic.res \
@@ -1053,7 +1063,7 @@ DISTCLEANFILES = \
secretbox8.res \
secretbox_easy.res \
secretbox_easy2.res \
- secretstream.res \
+ secretstream_xchacha20poly1305.res \
shorthash.res \
sign.res \
siphashx24.res \
@@ -1088,9 +1098,9 @@ TESTS_TARGETS = aead_aes256gcm aead_aes256gcm2 aead_chacha20poly1305 \
pwhash_argon2id randombytes scalarmult scalarmult2 scalarmult5 \
scalarmult6 scalarmult7 scalarmult8 secretbox secretbox2 \
secretbox7 secretbox8 secretbox_easy secretbox_easy2 \
- secretstream shorthash sign sodium_core sodium_utils \
- sodium_version stream stream2 stream3 stream4 verify1 \
- $(am__append_1) $(am__append_2)
+ secretstream_xchacha20poly1305 shorthash sign sodium_core \
+ sodium_utils sodium_version stream stream2 stream3 stream4 \
+ verify1 $(am__append_1) $(am__append_2)
TESTS_LDADD = \
${top_builddir}/src/libsodium/libsodium.la
@@ -1166,6 +1176,8 @@ hash3_SOURCE = cmptest.h hash3.c
hash3_LDADD = $(TESTS_LDADD)
kdf_SOURCE = cmptest.h kdf.c
kdf_LDADD = $(TESTS_LDADD)
+kdf_hkdf_SOURCE = cmptest.h kdf_hkdf.c
+kdf_hkdf_LDADD = $(TESTS_LDADD)
keygen_SOURCE = cmptest.h keygen.c
keygen_LDADD = $(TESTS_LDADD)
kx_SOURCE = cmptest.h kx.c
@@ -1218,8 +1230,8 @@ secretbox_easy_SOURCE = cmptest.h secretbox_easy.c
secretbox_easy_LDADD = $(TESTS_LDADD)
secretbox_easy2_SOURCE = cmptest.h secretbox_easy2.c
secretbox_easy2_LDADD = $(TESTS_LDADD)
-secretstream_SOURCE = cmptest.h secretstream.c
-secretstream_LDADD = $(TESTS_LDADD)
+secretstream_xchacha20poly1305_SOURCE = cmptest.h secretstream_xchacha20poly1305.c
+secretstream_xchacha20poly1305_LDADD = $(TESTS_LDADD)
shorthash_SOURCE = cmptest.h shorthash.c
shorthash_LDADD = $(TESTS_LDADD)
sign_SOURCE = cmptest.h sign.c
@@ -1436,6 +1448,10 @@ kdf$(EXEEXT): $(kdf_OBJECTS) $(kdf_DEPENDENCIES) $(EXTRA_kdf_DEPENDENCIES)
@rm -f kdf$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(kdf_OBJECTS) $(kdf_LDADD) $(LIBS)
+kdf_hkdf$(EXEEXT): $(kdf_hkdf_OBJECTS) $(kdf_hkdf_DEPENDENCIES) $(EXTRA_kdf_hkdf_DEPENDENCIES)
+ @rm -f kdf_hkdf$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(kdf_hkdf_OBJECTS) $(kdf_hkdf_LDADD) $(LIBS)
+
keygen$(EXEEXT): $(keygen_OBJECTS) $(keygen_DEPENDENCIES) $(EXTRA_keygen_DEPENDENCIES)
@rm -f keygen$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(keygen_OBJECTS) $(keygen_LDADD) $(LIBS)
@@ -1540,9 +1556,9 @@ secretbox_easy2$(EXEEXT): $(secretbox_easy2_OBJECTS) $(secretbox_easy2_DEPENDENC
@rm -f secretbox_easy2$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(secretbox_easy2_OBJECTS) $(secretbox_easy2_LDADD) $(LIBS)
-secretstream$(EXEEXT): $(secretstream_OBJECTS) $(secretstream_DEPENDENCIES) $(EXTRA_secretstream_DEPENDENCIES)
- @rm -f secretstream$(EXEEXT)
- $(AM_V_CCLD)$(LINK) $(secretstream_OBJECTS) $(secretstream_LDADD) $(LIBS)
+secretstream_xchacha20poly1305$(EXEEXT): $(secretstream_xchacha20poly1305_OBJECTS) $(secretstream_xchacha20poly1305_DEPENDENCIES) $(EXTRA_secretstream_xchacha20poly1305_DEPENDENCIES)
+ @rm -f secretstream_xchacha20poly1305$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(secretstream_xchacha20poly1305_OBJECTS) $(secretstream_xchacha20poly1305_LDADD) $(LIBS)
shorthash$(EXEEXT): $(shorthash_OBJECTS) $(shorthash_DEPENDENCIES) $(EXTRA_shorthash_DEPENDENCIES)
@rm -f shorthash$(EXEEXT)
@@ -1642,6 +1658,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hash.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hash3.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kdf.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kdf_hkdf.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keygen.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kx.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/metamorphic.Po@am__quote@ # am--include-marker
@@ -1668,7 +1685,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/secretbox8.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/secretbox_easy.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/secretbox_easy2.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/secretstream.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/secretstream_xchacha20poly1305.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/shorthash.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sign.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/siphashx24.Po@am__quote@ # am--include-marker
@@ -2310,9 +2327,9 @@ secretbox_easy2.log: secretbox_easy2$(EXEEXT)
--log-file $$b.log --trs-file $$b.trs \
$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
"$$tst" $(AM_TESTS_FD_REDIRECT)
-secretstream.log: secretstream$(EXEEXT)
- @p='secretstream$(EXEEXT)'; \
- b='secretstream'; \
+secretstream_xchacha20poly1305.log: secretstream_xchacha20poly1305$(EXEEXT)
+ @p='secretstream_xchacha20poly1305$(EXEEXT)'; \
+ b='secretstream_xchacha20poly1305'; \
$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
--log-file $$b.log --trs-file $$b.trs \
$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
@@ -2415,6 +2432,13 @@ core_ristretto255.log: core_ristretto255$(EXEEXT)
--log-file $$b.log --trs-file $$b.trs \
$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
"$$tst" $(AM_TESTS_FD_REDIRECT)
+kdf_hkdf.log: kdf_hkdf$(EXEEXT)
+ @p='kdf_hkdf$(EXEEXT)'; \
+ b='kdf_hkdf'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
pwhash_scrypt.log: pwhash_scrypt$(EXEEXT)
@p='pwhash_scrypt$(EXEEXT)'; \
b='pwhash_scrypt'; \
@@ -2606,6 +2630,7 @@ distclean: distclean-am
-rm -f ./$(DEPDIR)/hash.Po
-rm -f ./$(DEPDIR)/hash3.Po
-rm -f ./$(DEPDIR)/kdf.Po
+ -rm -f ./$(DEPDIR)/kdf_hkdf.Po
-rm -f ./$(DEPDIR)/keygen.Po
-rm -f ./$(DEPDIR)/kx.Po
-rm -f ./$(DEPDIR)/metamorphic.Po
@@ -2632,7 +2657,7 @@ distclean: distclean-am
-rm -f ./$(DEPDIR)/secretbox8.Po
-rm -f ./$(DEPDIR)/secretbox_easy.Po
-rm -f ./$(DEPDIR)/secretbox_easy2.Po
- -rm -f ./$(DEPDIR)/secretstream.Po
+ -rm -f ./$(DEPDIR)/secretstream_xchacha20poly1305.Po
-rm -f ./$(DEPDIR)/shorthash.Po
-rm -f ./$(DEPDIR)/sign.Po
-rm -f ./$(DEPDIR)/siphashx24.Po
@@ -2728,6 +2753,7 @@ maintainer-clean: maintainer-clean-am
-rm -f ./$(DEPDIR)/hash.Po
-rm -f ./$(DEPDIR)/hash3.Po
-rm -f ./$(DEPDIR)/kdf.Po
+ -rm -f ./$(DEPDIR)/kdf_hkdf.Po
-rm -f ./$(DEPDIR)/keygen.Po
-rm -f ./$(DEPDIR)/kx.Po
-rm -f ./$(DEPDIR)/metamorphic.Po
@@ -2754,7 +2780,7 @@ maintainer-clean: maintainer-clean-am
-rm -f ./$(DEPDIR)/secretbox8.Po
-rm -f ./$(DEPDIR)/secretbox_easy.Po
-rm -f ./$(DEPDIR)/secretbox_easy2.Po
- -rm -f ./$(DEPDIR)/secretstream.Po
+ -rm -f ./$(DEPDIR)/secretstream_xchacha20poly1305.Po
-rm -f ./$(DEPDIR)/shorthash.Po
-rm -f ./$(DEPDIR)/sign.Po
-rm -f ./$(DEPDIR)/siphashx24.Po
diff --git a/test/default/aead_aes256gcm.c b/test/default/aead_aes256gcm.c
index 8165d531de..9c1e43d60a 100644
--- a/test/default/aead_aes256gcm.c
+++ b/test/default/aead_aes256gcm.c
@@ -3098,6 +3098,7 @@ tv(void)
size_t detached_ciphertext_len;
size_t i = 0U;
size_t message_len;
+ int res;
key = (unsigned char *) sodium_malloc(crypto_aead_aes256gcm_KEYBYTES);
nonce = (unsigned char *) sodium_malloc(crypto_aead_aes256gcm_NPUBBYTES);
@@ -3136,34 +3137,48 @@ tv(void)
ciphertext = (unsigned char *) sodium_malloc(ciphertext_len);
detached_ciphertext = (unsigned char *) sodium_malloc(detached_ciphertext_len);
- crypto_aead_aes256gcm_encrypt_detached(detached_ciphertext, mac,
- &found_mac_len,
- message, message_len,
- ad, ad_len, NULL, nonce, key);
+ res = crypto_aead_aes256gcm_encrypt_detached(detached_ciphertext, mac,
+ &found_mac_len,
+ message, message_len,
+ ad, ad_len, NULL, nonce, key);
assert(found_mac_len == crypto_aead_aes256gcm_ABYTES);
if (memcmp(detached_ciphertext, expected_ciphertext,
detached_ciphertext_len) != 0 ||
memcmp(mac, expected_ciphertext + message_len,
crypto_aead_aes256gcm_ABYTES) != 0) {
- printf("Detached encryption of test vector #%u failed\n", (unsigned int) i);
+ printf("Detached encryption of test vector #%u failed (res=%d)\n",
+ (unsigned int) i, res);
hex = (char *) sodium_malloc((size_t) ciphertext_len * 2 + 1);
- sodium_bin2hex(hex, (size_t) ciphertext_len * 2 + 1,
- ciphertext, ciphertext_len);
+ sodium_bin2hex(hex, (size_t) detached_ciphertext_len * 2 + 1,
+ detached_ciphertext, detached_ciphertext_len);
printf("Computed: [%s]\n", hex);
+ sodium_bin2hex(hex, (size_t) detached_ciphertext_len * 2 + 1,
+ expected_ciphertext, detached_ciphertext_len);
+ printf("Expected: [%s]\n", hex);
+ sodium_bin2hex(hex, (size_t) found_mac_len * 2 + 1,
+ mac, found_mac_len);
+ printf("Computed mac: [%s]\n", hex);
+ sodium_bin2hex(hex, (size_t) found_mac_len * 2 + 1,
+ expected_ciphertext + message_len, found_mac_len);
+ printf("Expected mac: [%s]\n", hex);
sodium_free(hex);
}
- crypto_aead_aes256gcm_encrypt(ciphertext, &found_ciphertext_len,
- message, message_len,
- ad, ad_len, NULL, nonce, key);
+ res = crypto_aead_aes256gcm_encrypt(ciphertext, &found_ciphertext_len,
+ message, message_len,
+ ad, ad_len, NULL, nonce, key);
assert((size_t) found_ciphertext_len == ciphertext_len);
if (memcmp(ciphertext, expected_ciphertext, ciphertext_len) != 0) {
- printf("Encryption of test vector #%u failed\n", (unsigned int) i);
+ printf("Encryption of test vector #%u failed (res=%d)\n",
+ (unsigned int) i, res);
hex = (char *) sodium_malloc((size_t) found_ciphertext_len * 2 + 1);
sodium_bin2hex(hex, (size_t) found_ciphertext_len * 2 + 1,
ciphertext, ciphertext_len);
printf("Computed: [%s]\n", hex);
+ sodium_bin2hex(hex, (size_t) ciphertext_len * 2 + 1,
+ expected_ciphertext, ciphertext_len);
+ printf("Expected: [%s]\n", hex);
sodium_free(hex);
}
diff --git a/test/default/core_ed25519.c b/test/default/core_ed25519.c
index 5340f9e82c..b246126096 100644
--- a/test/default/core_ed25519.c
+++ b/test/default/core_ed25519.c
@@ -64,13 +64,15 @@ add_l64(unsigned char * const S)
int
main(void)
{
- unsigned char *r;
+ unsigned char *h, *r;
unsigned char *p, *p2, *p3;
unsigned char *sc, *sc2, *sc3;
unsigned char *sc64;
+ unsigned char *seed;
char *hex;
unsigned int i, j;
+ h = (unsigned char *) sodium_malloc(crypto_core_ed25519_HASHBYTES);
r = (unsigned char *) sodium_malloc(crypto_core_ed25519_UNIFORMBYTES);
p = (unsigned char *) sodium_malloc(crypto_core_ed25519_BYTES);
for (i = 0; i < 500; i++) {
@@ -81,7 +83,6 @@ main(void)
if (crypto_core_ed25519_is_valid_point(p) == 0) {
printf("crypto_core_ed25519_from_uniform() returned an invalid point\n");
}
-
crypto_core_ed25519_random(p);
if (crypto_core_ed25519_is_valid_point(p) == 0) {
printf("crypto_core_ed25519_random() returned an invalid point\n");
@@ -399,6 +400,17 @@ main(void)
assert(memcmp(sc3, sc, crypto_core_ed25519_SCALARBYTES) != 0);
}
+ seed = (unsigned char *) sodium_malloc(randombytes_SEEDBYTES);
+ for (i = 0; i < 15; i++) {
+ randombytes_buf_deterministic(r, crypto_core_ed25519_UNIFORMBYTES, seed);
+ if (crypto_core_ed25519_from_uniform(p, r) != 0) {
+ printf("crypto_core_ed25519_from_uniform() failed\n");
+ }
+ sodium_bin2hex(hex, crypto_core_ed25519_SCALARBYTES * 2 + 1,
+ p, crypto_core_ed25519_BYTES);
+ printf("from_uniform_deterministic (%u): %s\n", i, hex);
+ sodium_increment(seed, randombytes_SEEDBYTES);
+ }
crypto_core_ed25519_scalar_mul(sc, L_1, sc_8);
sodium_bin2hex(hex, crypto_core_ed25519_SCALARBYTES * 2 + 1,
sc, crypto_core_ed25519_SCALARBYTES);
@@ -506,6 +518,7 @@ main(void)
sc, crypto_core_ed25519_SCALARBYTES);
printf("h*2: %s\n", hex);
+ sodium_free(seed);
sodium_free(hex);
sodium_free(sc64);
sodium_free(sc3);
@@ -515,6 +528,7 @@ main(void)
sodium_free(p2);
sodium_free(p);
sodium_free(r);
+ sodium_free(h);
assert(crypto_core_ed25519_BYTES == crypto_core_ed25519_bytes());
assert(crypto_core_ed25519_SCALARBYTES == crypto_core_ed25519_scalarbytes());
@@ -522,6 +536,8 @@ main(void)
assert(crypto_core_ed25519_NONREDUCEDSCALARBYTES >= crypto_core_ed25519_SCALARBYTES);
assert(crypto_core_ed25519_UNIFORMBYTES == crypto_core_ed25519_uniformbytes());
assert(crypto_core_ed25519_UNIFORMBYTES >= crypto_core_ed25519_BYTES);
+ assert(crypto_core_ed25519_HASHBYTES == crypto_core_ed25519_hashbytes());
+ assert(crypto_core_ed25519_HASHBYTES >= 2 * crypto_core_ed25519_BYTES);
printf("OK\n");
diff --git a/test/default/core_ed25519.exp b/test/default/core_ed25519.exp
index 0fea102009..2865979bd5 100644
--- a/test/default/core_ed25519.exp
+++ b/test/default/core_ed25519.exp
@@ -15,6 +15,21 @@ sub1: f67c79849de0253ba142949e1db6224b13121212121212121212121212121202
add2: b02e8581ce62f69922427c23f970f7e951525252525252525252525252525202
sub2: 3da570db4b001cbeb35a7b7fe588e72aaeadadadadadadadadadadadadadad0d
mul: 4453ef38408c06677c1b810e4bf8b1991f01c88716fbfa2f075a518b77da400b
+from_uniform_deterministic (0): b18e62cf804b022fec392b0e2d6539d0f059732616c11913f510f73ae2544ebc
+from_uniform_deterministic (1): b9d23004e78c58e22da72e109550133e3d3bb9e46afcc066b82326319653d62c
+from_uniform_deterministic (2): 14063782c8b8a677dce09c4e51719b1cf942bf71bc765c1ec9832a8b4446983c
+from_uniform_deterministic (3): 02d6dbac70f6a14de72f4e17386016b08d6506336a086f10e719fbad8831d550
+from_uniform_deterministic (4): 11c851408e7892c2eae37584423a8f9c797e3649d45946b53e64319318a750b0
+from_uniform_deterministic (5): d4b9eaf70ffdc238c88725e294bdd02a6ce85577c5e7add7ca07041873019842
+from_uniform_deterministic (6): 740a6141079285c1b9e84ed463dcce5d3d40a167fa13129463eaf97d2a7bf654
+from_uniform_deterministic (7): e504a3e00bbf506cbe388784d85e85b10c428c37eba04ebd19a60948b71ad2cf
+from_uniform_deterministic (8): 67cd50902c40c943f22c479c587fb3e5da2f8f1ad402049ac49ddc45ec20884c
+from_uniform_deterministic (9): 658bffa23b425a91268ee17559073c4b1548209054ed7cf00ffe582696dda8dc
+from_uniform_deterministic (10): b55b93e7a0fe554f86f1f4c991871a27756fee359a8c6bb7554ec91d5d552c49
+from_uniform_deterministic (11): fbc2bb45df1d806489a5a6415898c719c45c932d3467b6ce948ee80c0e8122c9
+from_uniform_deterministic (12): 93164e57b5e3ae6826ac9e0c31ddecf94e21a39a29ba9d1d24e9e588fe065d95
+from_uniform_deterministic (13): 16824d74c9482890dc57b0ec843a0a5231b581d2ce3909934d7658389f169093
+from_uniform_deterministic (14): 2f5b0336c7f0af520badeae99450f92835c27224ab4cd117f55b176afb6f0001
(L-1)*8: e5d3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010
8(L-1): e5d3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010
(L-1)^2: 0100000000000000000000000000000000000000000000000000000000000000
diff --git a/test/default/kdf.c b/test/default/kdf.c
index f10f034e24..dc9a247594 100644
--- a/test/default/kdf.c
+++ b/test/default/kdf.c
@@ -15,7 +15,7 @@ tv_kdf(void)
context = (char *) sodium_malloc(crypto_kdf_CONTEXTBYTES);
master_key = (unsigned char *) sodium_malloc(crypto_kdf_KEYBYTES);
- memcpy(context, "KDF test", sizeof "KDF test" -1U);
+ memcpy(context, "KDF test", sizeof "KDF test" - 1U);
for (i = 0; i < crypto_kdf_KEYBYTES; i++) {
master_key[i] = i;
}
diff --git a/test/default/kdf_hkdf.c b/test/default/kdf_hkdf.c
new file mode 100644
index 0000000000..8fb07fe58f
--- /dev/null
+++ b/test/default/kdf_hkdf.c
@@ -0,0 +1,100 @@
+
+#define TEST_NAME "kdf_hkdf"
+#include "cmptest.h"
+
+static void
+tv_kdf_hkdf(void)
+{
+ unsigned char *master_key;
+ size_t master_key_len = 66;
+ unsigned char *prk256;
+ size_t prk256_len = crypto_kdf_hkdf_sha256_KEYBYTES;
+ unsigned char *prk512;
+ size_t prk512_len = crypto_kdf_hkdf_sha512_KEYBYTES;
+ unsigned char *salt;
+ size_t salt_len = 77;
+ char *context;
+ size_t context_len = 88;
+ unsigned char *out;
+ size_t out_len = 99;
+ char hex[99 * 2 + 1];
+ size_t i;
+ int ret;
+
+ master_key = (unsigned char *) sodium_malloc(master_key_len);
+ prk256 = (unsigned char *) sodium_malloc(prk256_len);
+ prk512 = (unsigned char *) sodium_malloc(prk512_len);
+ salt = (unsigned char *) sodium_malloc(salt_len);
+ context = (char *) sodium_malloc(context_len);
+ out = (unsigned char *) sodium_malloc(out_len);
+ for (i = 0; i < master_key_len; i++) {
+ master_key[i] = i;
+ }
+ for (i = 0; i < salt_len; i++) {
+ salt[i] = (unsigned char) ~i;
+ }
+ for (i = 0; i < context_len; i++) {
+ context[i] = (unsigned char) (i + 111);
+ }
+
+ printf("\nHKDF/SHA-256:\n");
+ crypto_kdf_hkdf_sha256_keygen(prk256);
+ if (crypto_kdf_hkdf_sha256_extract(prk256, salt, salt_len,
+ master_key, master_key_len) != 0) {
+ printf("hkdf_sha256_extract() failed\n");
+ }
+ printf("PRK: %s\n", sodium_bin2hex(hex, sizeof hex, prk256, prk256_len));
+
+ for (i = 0; i < out_len; i++) {
+ context[0] = i;
+ if (crypto_kdf_hkdf_sha256_expand(out, i,
+ context, context_len, prk256) != 0) {
+ printf("hkdf_sha256_expand() failed\n");
+ }
+ printf("%s\n", sodium_bin2hex(hex, sizeof hex, out, i));
+ }
+
+ printf("\nHKDF/SHA-512:\n");
+ crypto_kdf_hkdf_sha256_keygen(prk512);
+ if (crypto_kdf_hkdf_sha512_extract(prk512, salt, salt_len,
+ master_key, master_key_len) != 0) {
+ printf("hkdf_sha512_extract() failed\n");
+ }
+ printf("PRK: %s\n", sodium_bin2hex(hex, sizeof hex, prk512, prk512_len));
+
+ for (i = 0; i < out_len; i++) {
+ context[0] = i;
+ if (crypto_kdf_hkdf_sha512_expand(out, i,
+ context, context_len, prk512) != 0) {
+ printf("hkdf_sha512_expand() failed\n");
+ }
+ printf("%s\n", sodium_bin2hex(hex, sizeof hex, out, i));
+ }
+
+ sodium_free(out);
+ sodium_free(context);
+ sodium_free(salt);
+ sodium_free(master_key);
+ sodium_free(prk512);
+ sodium_free(prk256);
+
+ assert(crypto_kdf_hkdf_sha512_bytes_min() == crypto_kdf_hkdf_sha512_BYTES_MIN);
+ assert(crypto_kdf_hkdf_sha512_bytes_max() == crypto_kdf_hkdf_sha512_BYTES_MAX);
+ assert(crypto_kdf_hkdf_sha512_keybytes() == crypto_kdf_hkdf_sha512_KEYBYTES);
+
+ assert(crypto_kdf_hkdf_sha256_bytes_min() == crypto_kdf_hkdf_sha256_BYTES_MIN);
+ assert(crypto_kdf_hkdf_sha256_bytes_max() == crypto_kdf_hkdf_sha256_BYTES_MAX);
+ assert(crypto_kdf_hkdf_sha256_keybytes() == crypto_kdf_hkdf_sha256_KEYBYTES);
+
+ assert(crypto_kdf_hkdf_sha256_KEYBYTES < crypto_kdf_hkdf_sha512_KEYBYTES);
+
+ printf("tv_kdf_hkdf: ok\n");
+}
+
+int
+main(void)
+{
+ tv_kdf_hkdf();
+
+ return 0;
+}
diff --git a/test/default/kdf_hkdf.exp b/test/default/kdf_hkdf.exp
new file mode 100644
index 0000000000..57bd5713c3
--- /dev/null
+++ b/test/default/kdf_hkdf.exp
@@ -0,0 +1,205 @@
+
+HKDF/SHA-256:
+PRK: 8c3725c0ea8e14106d8c342887ccd1218cc205acecd8095ae1efc099ec195e7e
+
+92
+2ebf
+e29531
+8e563a1b
+1fa58d77ee
+50f1a4e15ba2
+4fb3724b7d4174
+d10853ceb46b11db
+0fdf31228221242833
+98acb29e0993ec45f8cc
+f4481a5e6d263d7bdc59ed
+e620eb399337a9aace16765c
+dbe8924351577475584731979f
+371a112305dfd4264feb29c28a2f
+d0a4b022f748c96141ec6b4aac6dcb
+d2b38fe15e0f95bcff87822ff4df3d90
+e4bf8fde7d77899a5f85d68b039ee7119b
+6766b092971ec2e616286925708c7ed6c9e9
+c4f9d36cddfe89b3194282a084881e6c429099
+49be5bc10c278f39b5be391a55e765560deca0ad
+6e7d3031d08c5658a19a7d647dad0250418435febc
+07cb6356aa7f978cbab87e7814fa90af9ce729aa2b3f
+2ea1c08eb04c75806f80ccf0fca683a8998bb663e99993
+bb111699f6c32263474dc5569a6950c767e3b8201f838345
+e81e9086d3e035cc1a288fa521ce8b43b7f93d3d9bbac5085b
+29c398bfafa672bc315e192110575691607118759f9e7669f3c5
+60840e8bc6d86733752787232a0321257c82d691722bfba07af839
+b0ec22e547dae3f04fc6ef146203604f0d604a8ce8a20fce229a688f
+81ae6add3344b25d14115a38bc10553a75ce0a4be3aa8f3579299227f7
+242c65f95ee0bce1c5e1b01b1ff68e8634fac096edb18997dfd3baf3817d
+14b5afe2cc0d8fe10e5359667b2b310365fba93d62f7fd3df2dddfc34c1de5
+24a79d4c0c69e0a524ca91f356e64ab40345973ba82ce68992dbdd16bf161cbe
+3edbfc22f9a1e3a5c774cfec8fff3cc4febdfc61d98aecedf6a16eca0546316b56
+b8bad2b04b9b382f9ad2559afc33b8dece4a7fe9b8ac9d74557dfc51ed8949b78ee8
+1d01316d7767f068171f08a8c2f05d2cd571f623fd5fc9916b3476115aac9d7f635cb4
+a7c5763a3b678ee2fa05a57dab377b67e448a38f94531ce83bab9eff8035e105e8889b91
+ab6721825aefb2cb9f9d0ce5123882573abebe94404e0e3a923a7aac84efc084f84ee5b2ed
+4815da740c872a9816850c8757be64cb3096dca7994f3af7bd8c10e83a2d3bbb14b40da93d40
+abb141fbb64faec34c09e9c784b1e8aba15b6e916f70996ad803b963d2de676669ebff3ed4b711
+231a7a47a81c21dd6a0969c67b6ff446a73a145fb1d4f0a2d268af8fd56ac6d67b6ef55d13194440
+74e40130ca102c22acc109cc6b8b66d840b984fe729c156edd05eb4f44d1869e6ae6260b41931179ff
+3817d2cf7b7c7c7bfe4ab51e9178343f31fa8eea20899ec96d21eebdbf55f44327e7dc23cf669e215c02
+d5ab755f5631d08b70718d2ba3e2775fbc3cdfe69b7ac74afcc73ffbd7b91b9d3a7fef364cda9816c8c367
+93c15afc2cf1baec84b8e3c89f50a3e4cc3a2c1b72aeaa894a45bf09f22aac0711994f0873ac69b099e47d02
+7b359dd2abb995a8bb0d1a01a986bfcf28d47b9215f000b240f5080dc78a84cc65e34ff098074ae237a0238b6f
+182ec78776f5ba3818c2ccc7b84aa7bb1a54386134b3215e8f8f709757f3c8e4f9bef3800e3a9eda8b9794e95f8a
+0cf1874215b38ab1900ce7137d9b8817fbe99d3196eab5b845971a46a38c479d81fc8033a641533e2c39dd550e672a
+3f5a283ca862e6a5f79c5ab39f8d4984b54a86e132d40adcca249f6419caf5b61fbbf61d54d80e78af3e613adfea5f9e
+ce6bceffd4ae50e8465c3d5179c661da2f18dcb37f95f9cc66808d2f848b55dd0c1d2201bb37a2e339e9385233e687a711
+7ce3f4575d3edab2f989b0a975b279ac21af117184130911dba4e7c70e19f96b5595ec8910e737c019f3392390f8b9af6439
+9c1b37296ed2ad9b556938d30814c47f822807be8cf9bfb26a05651061015493d4ed551f8a6f1a5cef7df88dd7426f03681935
+0d1f6f49c38c4d6fbc57103193b544ec1a73f40ed8aaac53da2b1a28a4a35838036ec9d50d719af22f3f89ebb7f340f50ce8c180
+fe6786d7d7728a1ed057c329f68cf698b163ae1e6c1b48290e6ba2c325740155f0f90f216111f3bc16d61b8338d910d429241899c4
+c729c63757fa5a421704ba88f8c13f23606e59cb1e7d2396a130742c31b98dc9461cc1fa9d8d24f79f7303dd416bf66adbb08562f832
+44cf07d63adc85de7c0aa524962c29dfad1b37b253fc9559fd1f5b8237d8bd6e6449e5f3997d6b0571ae50da1e164be845523c8630b1df
+c1040513a53f652e0ba7bc30f84deaaec13a15919855dd76148ae1fc86cd147ba686ff0ee025f9a00cbf7b6e190c7b87ea458974cf147ae3
+0a67afc69f00ddbdd6794ed7b06285c00d70fd86fb8b959bd8c686e96c72032f2726c4f0fb607a7f4d4f66b410eff17354b6db803c9c910a72
+faad9414932446902309147f8f2c1d2d48c95a7ddb8856219aa36ed30f971e160542ed8272ef9bdf72551cd059ca6c81ea76b5a3b49cbfb07738
+14ee2fc3899650164beb828a557afc7253e4b89cba8a1908d3641d47eb23d50ef34a0dafaa1388328fc33b1db37f2f74db6934d398bacbec785f03
+2333128e004f61ba45c524dbf72a9973fdcc288d76236402f63b0f4a39867b18e73135f35945f1791ae537b215c69941194258103419558c0a477fa9
+70f1a4c027d950573c5ea8f9b34069d1b85ac0b6daabc9de5c4cd1844d6781c0b15ca7b01c2a33dd06272e7c8729b74ea71a0f35486252461a3d83bc62
+8b9199ebc5ae61365d6cc78c9d1b1a466565639c50c317cddcdc13db96b4f6ec612bbc1c6e5d2479147040f313a168e4471b9093f47548899265d8472aab
+5f420864258d597766beb7c55ef0dc9c85aab5e296677e1fd9201a8c8a0c7b74b573276b0ce11f797a5816e5ed7ea3a02ca5c338f78c0c6a41322e0cdbb5d6
+13029325fb0fbbe2221caaa6c3797a967335c4a857fafe23b4fb221433afc84da6876cbd74ac631d18f2478aae8def5a85a227b3bb496a81e9d29171a5b501fc
+44ef825de340dbcb1b2ce9325eb78650d574d1c9fc13ed3b4517ee3f2f95bd97c8ab62988455a1639d0e4b2e404d661c3881dbdb52d86b7bd5593713b10e8d1086
+2c67d0e2fbdb55cf649c97e1053c717636c526ee4f58f86e9671a1086e5ef6ef7ae109eca2cd482affb1add956aad7225debca3420c4cae6cf590e8e8c1a0398a9cd
+6900b97c5783d5856e4eda7816e27326cb71f8c9cda3bfdc88c4a5aa49b580aa4341cd100fd3084b447a24c9d521c8ddb7a55af52c998c4a9b53bae6c86caa02424df6
+c63f43dd3d29e0e92fc2adf18a50e33f11dbe9746f16bfc518397e0df3bd4eff491963cd2a0d25022c535a425fe3cfcea4ffd7dfbe98e2ae9fb40a007012acc31460ef25
+dd61268207f4452ce4a1f212aa4f4ffff1d0cd4df9ac1730b0f4acc07f75e86afb02c0d99aeb512bf3bb138183364a4b800af446b403add2b30d73eca024fb5e3eeebf10dc
+4eb2c6dc6159bb82eba32aa839bc4b3d46be87cd358f47aeb7b488d91230414a40fe35a2c0bcde81de243b6974c49ac0af113904a8995928931e867f5b7d131c2c9caf4adde5
+22cef8bbb9f6874c1be53adc6687e3b28d0b9b8574d22212e4d60074585d17751fdcb80a1ed6143a7471fd3b1a0dddbce5b8b1ae859441413d99b069252f39c3a0b7eafc65ab34
+6f0a07f43c6d00649b516cc986fce770aed949875a17164beed5305ceaf74131574eb2cf489dc13fad53e2b10cb757b69eecb481a76a8d99a7cfb2e0aee40dde6f7d44c2be5a5e63
+bf701b835481d47ee85d390caa8f63bd3e7dfa48f4307d51989b4660e465de31329589bd5e3293f75b63d320b8f53211cf1209e426869c3c3b506dde3f819cae07672af9ef74f36de6
+92cc25c67b65fc9c57381457e7752441782dc4d2d62828c13992a7c2eda57811fe7c2de66b725e08f361fee4d8370d3dff2cdba6c603cd03ae54d813e44793387ded1add2c006b320058
+e3ec7f8ccf313fac832d3ef5c3b8b10f1faf5ae8ec32bce0f5f98b9f4464624a58b0f74ffdb827d52d94fa77a8456ca550017f3c31d8e8e6827b6a9ac9664355bc57e9b46cc66b6e396a50
+636ffbeb1cb2e834ae37213247ca8e615fc52f00e79c13f37874edc549f4b629901312b685f3e1ae3394a6beebc5e0c1364c562b3579f34cbbe9ed80c5cc045b9ab7a749950d005e785832e0
+3ae686a5e1abf936d472963d6272226f920c8df4eed5c4b26d9afc910f509c205ffb56a0289fb62d38790dca4f85028f76b4339e9eee32c1c2690abd02c74ef9a7cc822f901ae596ef1b2f2f42
+e542066a18aed627ea3feea7a962b9c69a9a2f00bc0f22c7186c389701283807801d2cd79d678010d91379cfc6d72cf30830a34fd9983a0c011e775be61eb0d093a1432493abb703c8b5bf99ad63
+1392b4676365c1ee01f75811cabe0fa989faa6a222b65e72bf4016f7767c0e9f822de2ad0034098dd9867a787abe9b97adb1a345e96b345aea898682d71fc3febc0e2ef579874da073285d0ba4edc4
+2ddd472dd4090528036d7bf01cacfca7c71ce3d89bab2299b3d6f1b987c51e5f884cfed55ca25008811fa4f44d9bb8563d83cfeccc580865978972cec981f431e4b74857e2a565e5d6e0bc9f0a3c45ec
+d2a855d0e2a912ce3ff5ffa99c464c215d9ae1195e92b022d4518dde9fa5ecbdbac4f1877c1a94df35421a122a04073dbe7fce959c87497cb30774bac3441140089b4b714e025509fa3cd41d683ab46edf
+00bcf365897640b9268fad068977a11b7eb3006482b51c97543ba4359db31adcd18497d174844c9ec47a0f6132b16d14aa5a02c42583aabd033e520a8a9c5c430cc6708e8b9cdd4fd56c1023a744af67fd14
+0e20beb1a84e9c252b54c4db895324e85436f29e4855cdfa5bf4bbe7868bdbc51b7f0ac428ce54750e2cd16829051e95cd97f2f40c5a1a3db17f90b68570a05ac55a9eaa7c8bf377c7a752666de779ef46764f
+20ddf3ccd89c8bf4c084324858c0f0c7d4dcfd4a76a7526183a5bf4344f62320f29e7c0650d3c55ad587128e667d5d4e69689850fa741b49d3ceef45b134327ac89186248d1157aa4b16263731138777811e508b
+2a8fadda7001128cf59e3fcc93dc5c98e75ac92d66d536330eb90a558920e4416c210658b3bf44a451db23c62caac1a79fad1437a81d66ab98e4423d8a1ce9ed9a0586a160c4819a019a93781775c6510c6ed09cb9
+9049524d223052ee507450e65112e1f4331c4d7fd71e8237b8f79feb2fa30504c856d6907cc4eb814694e9a7b8a8b10d85f956df72062c5f4752dc42d37f164eae1a3155a11ecb413f92a0e49e0a89d398c21d76e100
+86a92236b4e0dc16e0a17e92825e31b66a417784b7f6c0a53c274ca5100847a929c0a30430ff67e6c8913a41c3437d8313fd11b2c0eebc75e5bdffeb95a4d100c7eb36216494f3c7a8f19403080941e3d1c9e319ede000
+4b15b094db5789ff78fafabdd0f0aa06d3f4ded903c89e8ae22982d152017295de63ad0b43d3d303243de1bbf2637e8e0c042024e307739ab3b02a5b7d299167909edd51f82229c0093a68768d56c2e774285ed95bdc24d9
+9bbca463a5142ea7dad0522f073eabc7eed63e4baea13efec9d7c198b75a9c4db88623c406edc5bf61ec61e047357358541aa66e44a364b779b6a8842c1b1e8131c594ac8298755ba532937b5bdbcbbd1f2c2152d03af55120
+edc5fe50b3f3a7de5ddc14b467e41ec0ce68a44f734c4cd46b5ee1d98337d8a917cf1dd13e09946d22918eaf31f83de1e035209a6f2de32bb7caf119d0db73e4075cb9a714adb84b4d0a6163aac56bb4299a71e8979a97e363f4
+e2770541945a0395fbf597fb58cc4e6f6a2883b707aa79df9c2da5a7165a8838b1e7f4736b5418bd2f99d3eb8020f9b4cb7ff3a620f8bef276f22f3e98ffe20adeac2f62a9e5758136d222a9c562f81f151d3980bdad54f52dbf55
+248474ddc86ce5e07be50fdd3a6a113ab7f2319e3fb86f1d2d361372fa1d89926ef501c5a62b9d2efeb409d0be8fb67f12c1624d04bcf9d555dad09dffdba76948b0eecba430110ab9e738db70e51c4e2f27350a49aecf1282410ab8
+37d75ee27cc14c95c9d930bb1324d8aa6cc77ba833504253d91002fb622d9e578a3f3b1439dad7d9d7af8ea17cebee86fe13c59f316434d46208c019c2e673168b5aaa397525cbce3a0b2f1c59c853600711e719218311e15d1ab9a0cf
+981461afd5756cc5d6a953c188b0a537fbcd18b41034cc4f40870cc2c97bcc48e3e4d563c2ee1d60d8c9f714996fc32e2977aaf7c3544e437f40f61d7281548efc22d7c298853304444c4184605b7b55148c24e88f362e41a8c919bf0288
+d65ac485824f9490c5f70fe674fe1da39b4583b25f3580b636a06135761eb0fb5e36a59dcb070dd9bfd5b2d69503a5c3ef295eb9cb3a9346578556d56fdd0c81cbdd960d292f8410681643af154b2550e2d586119b82cb17a79c1447cb26f6
+cdd5bd495ed8c2c41dc511577051ffa30ee02eddb95b3650337e8aeae161d2b81a9ebc1514524c52dbe2c4d0739706dbdcea1a7ba21d9cab36ca10f753fc82b218c01094e288bbcd96d6678e06e1a03f55c3bc6aea67b9637e87a4ce8e2aa0e8
+1d07389dad745981eb7ae03162bf249996cb836316872a4de4241d1fea49044541b9ababc2a10f7d5455ad3c0519997698a52039fd5517c53f7963aea8917e1b8ce3c63c5a2b23331cc473c1ff0986b08e8dd1257847256ded17e6d0409855f8e5
+a1245e0117a0e7c3cfbcd3d3eeb21a5aa7f2a73aea4465f4d83c8d0c6237c5c093ada99ada6ad75dcf18d1eb58982c7316d5c366ce5128a832d433c960e6bf7be42e4dce2747e3cc78101ed44aebcdbbf6bcd42f5160ca40784ea3ee3dd6be537475
+
+HKDF/SHA-512:
+PRK: 2502bc897dc1b23f9f2d8c35d519c5280ea960bf9154ebb07d377a12a81a4794ea8bdc0cb6ec59ab3303f5cbd713027825715f8af2ac0203e560fd2e55f4ff2b
+
+4c
+abec
+6d7647
+a3397e73
+15b3f69cec
+fb5c266f8785
+7147d8a6bff246
+1dd7f9b2ab2583ab
+725aee4e2d8d7f1f90
+046f63a1e2d606d7893e
+fc2026603b032dc6c862de
+03127d298ea441e3ae1d3781
+a8f163b5b9476eb50dcb304bc2
+9430c3aa31857951320feaa65e4e
+14e4918f7b7eaa9c6d39dc08e9abc1
+3480c9854b8f0bb4a97920338dce7573
+42714ad1af787467b0388cb6663864ba89
+700cd7f28075fc3a28d98672207b45df5b20
+528c93053c63c5fa5ff1f0a6e7cde8d4aec5a8
+d225940fcd325eecf827666ebcb9ea3881dbfc3f
+0341475a114b87cdae767a4a68432889145748b0aa
+bbbf499a74a2c22dc4a2295bc904fdcd7d4e91b32060
+deb06fe0b094b65da9febfed81f990ae77fd3f458a1bf3
+f64b7ac1473232a727ff461af2f650cc8a8419d7c97b7298
+3ca9c302e1096302185e2288beb6d91124c6abc9f9f97d5a4f
+81dfa7213143feb429dae2c641d25bf913aca03feead6ab7df10
+5d428190aad0539c0c2e6037e7745218dbf4e5c5aa0102996ceead
+7e76c9dcd614d730eaab145be60584c7bbe925bddc64d9dccde16142
+4b2be1c3dd5cd41d53ead2ce0aa220823ec4f3cf8656b14449e50cb48b
+4ceb80935422dba37af63ba59a460204dcd6639741d478185fd1a1e48de6
+633e555556c5288d808b2483d7e99bcc9876b42b61cbcc4d3e9ed42bcaee33
+0d28411da5a660b2eb063af0ed7e031c463a64eddd6c48882add6fad4cc9da92
+30b734f5768d26c4f8d641037b3e425c3d75c5c0c97cf8a3e684d1d2f1ba4f37b6
+970db4152321c2bac15898927aa25db90246c494017765b01ff21ae9a6aef7b89b88
+f168959f62696ea32a46ee67cdd3375684533f799e346fd1d26ad29aecd51de7c2c473
+76a81fa4b90ee1d1b05986c837f10f098cf1ac8f7d6be8097caec980b125185e8f9ee56d
+ed95ff4a9919f45c08151fb7f610f5155dac10c92e84bebf2a6bf0fc653585158c19ef59fe
+16ff87fb87760dfbaa53a2820c9ef365ee3b539b4a7fd1a4e626d313f24db495319f98c247d3
+f514b605b74bb3a35b86f8c96fb08e751d916b3ecd8b5e84b364e57f1fb6e5928a3a46f4cf7b1a
+ecef871f30ca56fbd6b242b9d095a33b9d60472da4914af80dbb8672a84d8ba4640ff1b459cb9b1d
+9220ed520c628b7e7e249c334573ff2402d573e34b27c25c4ba22e2b472ccdd2ef4d060eeef5387dc6
+b431fd9eaba69bc20967d1d02014913637df29c855faa6e93a8571ea3c27ad2c542700c77f9f3d19e5bb
+7ebd91db579ec5879f81a922c58ee82a91b8cb648294f63b97f728a53411438f54157cb6459ae762b5ef3f
+c28a1322e46a89f7a2b6b3dd6d39cbcaa84368bca33a53c04bb7bc90c3f51065143d8e93a279a403aea8ca8a
+089ca5fb6e4de86c77cac49f92c8d3356697a1fa51c8e4a207ec44428c4da0b82aadad5f196510d0ae7abc25ab
+31b08873dafc0d8c11afacb5efd3fcabbb7cc5ff7aab6e1d40a7451ec715de4a4a6e7e15f9d1f9f832a0e1bc39d7
+984f57235036e6d44777a7bf41fa4333f3077d3f2d92b46bc36c29b123de8580d81e22b2969d9a5abf3bb5fb7b422d
+2730edbf85f4e35152af0f22fbc4f23f7968cb430fde9685cf4e1bb64611ba6459acedad777fe1a6d70c88733d83661f
+0eb2a97a6d6a5901535399caa5ccb7192e1f1488f9a06d3150ccafe1eeaa8d6e50e039a9344f68d1783973fcb34719c2fa
+24d7e154d4b7382daa4d1fb47a8badf0d1020e97f75efe74f302b983584e26bc1865d44c3761b65c4d745766da0bfce5682a
+cb7503ad874932bfc2c7b18176d3e03f3e66666613e3e8e2ac83a29965b56afb0aa74d1080ac2ffeb1c43ee160c9f120cc4c61
+0ad5086f6cf363dfbf14c13e82faf14dde185b7142bd0ae44da8692339ed31f47f10773578af23cd7a632352087d07a7f4133474
+72873f68ad5874e1146a70e96c98360ccf0e5e9a5e31e4e38c7829241a531b0712eee8f22729e244da3d94d92703d975e54d84c36c
+b05200d914edd05309a7aaafcde50cfbc201d988387d2b7fb7b7315b56d58ecaebc2f7c7b5d2607d041dfd3486e849cf2535c8ef76f4
+6324ea52a00274312457f451953302d02e3e9107aed0a4007c04d26f4b5ce37f31fbc5a2606575a464f64b507691646e2d773c62aac387
+e0c68ed5571a90bc8db36c948b5ffd9179cd80218ae47b86cc7bf4aa4adccc438ddf670ea817d324ca709b612522d510913eb64012462acb
+61d3ec6537c084df5981a79545847cbf204c3a267080e2cba06a29b4fa591bc43668f701cc0d9e33e123b774b066e212fd1989d253120bfdf6
+7b74db37484227d237eb7d4039ddade342827d0075322c14de32985d616ffe38c4786e2e0df89de856051796e1f922b6b47578c3428fade6b372
+feea8d891c65fb37dc20095946b9f5db5aa936a2331fc9609ea45ee146107bf561710edceef2cea29e7c25032cb6764bc361eac0c148553e62ca5d
+a95341f8f7536d95f14181e4aa01c540a345bd172b67279f5b6dfebe2c8fb7b366edb8ad7e4545eed29903eeb6f486fa9f9d825185a0333eeddd2b45
+5b7fd7b9d6623c25d508712d585fd541089c8b4721b9dc219baa9cfe14022b5ffb0ded9a546ddf183c543d1f26f9c4183f4c7ff012d61de8cb822bccb4
+fa0fc08f49144cf85dcefd25717f37de8469a943fdeaa8c764bbf483af7a37b0dcf1f50451b20e693635e94976c44ead0ef83ac632eec781e9d50efb2f9d
+6ec1e621af3a878ad836aeb322e67752de29a310d7e6fbe6d164bb79e8f939d7a8f9f77a72733482d323c50ae7dc2170b90a48c59da782865eb7a9e254aba3
+10d13645bc853dcac6b71dadf4327ea0c7497822a6e0691d93a5e9d32cbafb883f9ff0c245126e391666fed31747e92c81ab886d5e75bb057faac5b3b0f1afa8
+dfb3872da01656cddd9abcb389e75a4a01d89d0d49f571e77655ad1ae0c14c87d4146accaf59f3e402767e6666228ef8e52aa32cd18306f69666769159423d8141
+d3a86236f119fa35c480d5b4b71d3aec93e226db5d2173c04e5d1d88c696594f51ec36470487fb72044a039cc081607be2a99e5d8f1c653848176f97cd2e9d50a742
+0d1f5a47c4917f6158b039e68fdeda5fa3889bbac6dff571f6353f83ada55c26bb99dac4416b2dea7d0fec2b585877aed2709f2b25516551004fee20b68e21efded761
+79a910c7f74b303d5844b609148a5a723e31c6b00d16a773547fb6d97fd35bf4a452eefd7ac3466ea520d61be4b75493156c9ae39ce6698e7120e92ebb366adeafb21d09
+a893878e100dc628ec674c4b48556c067419a3c317be94ed37cfd8ed8cae2ff035985579238f4dc13576677d527f21cde829a54466a911ab81888016c2094fda50e6dab622
+6faefe6e6bad59fab2a801aefd26d05ea3ac3ce546b0abfff524ec2ea80f3cc5c8c7015d18ae766cc84a2de75bc4c8a44cafb3743c6147e934d5de803d74ff8ca507d505065b
+ef32b102fb18681c02cee796ba8bb602d927d3428c4387150a5c342532380d3234d69e58a607396af5802cfeece1554de5722931f4e09fe51ae4b74dcd7e851e9a95cf4218f96e
+efe653c021ff38cabba1a76f8df2b0737ccffe6dba0506074143c88f6547afb06bcf1a36ba8e48bad9e7ee76c70717e089e1c31f052ee8859f65d6cc0d4bdccf845c8a8955d316bb
+8bf54ff6ef8b0f73a569d908ef432227d7fff0e1300503c1d41f3b2618b089ba76873cc5abd22039f3bffd2bb88b4a169e1f55b8280ba8b474aee9a19a93710cdc05a51062ea5970a2
+126a003e4194b577fbf4070e8ecd47f3807afc7d9e733760a23b350649e924ebe702eaefedb70490b77fc8dbccd068baab02bcd64517aee6005d37a496f8dd92093ec34f5ec6af703836
+3b025057a1a889389b105956cffae970b21e3a1179382bb626856c793727ba9ca14706741b94b4704ce0089a378c1efadb7961fbbfd146d657b6ee605231d9ffc60eadcc6af32c43ec7e75
+0c2eadac7883bb59c278aa115b10b8d1459066b9e0061b7e4e2e1ec4caca02c6fc443e5f78c80779360f260507bc2d49beae6bf7470da5c8dca5ee51d251ed1db892db23a43c62fe088d07fc
+2f40a09aea1a9b7c32e7b68845de40452c9b753c31c46118d14d3b34c8c7f3eae0f3c0018300ce4d583715debeb9bac31de392080fe2630225a0f0e0d4c5b6e19ff1fa5bf5a0cb8840fed794fc
+155e5eef1e32ec06bd7a51741fbeafcbd82bddbb18fc34a984e9018f4b62d1b7ed4fc0b0d7843d4e8983ccdba6bb30d28f964994650e692a5b0b746171563be70a0c622f6a022ac4c655f216bb68
+142e1d62a31895b3a916453a0c01ca2a096d9b0747b3a2c9584822819cbffdab6c6461d4e4374e4d9363f8cc52861e2be1f4ad4edbdf4a72f1fc3667903df83a32a8810398e156ea8dd3385d416e9a
+08a01d87455bfb057d64a6374f8da7ae52f4575af5085e7aa3c390de0fe528c14767525b9af87e7e5ef053bf03b2390c98f7eef36161ae1c0d9eba83c4a78d9ae5d4322cbd0b3f7aaed183f18616e49d
+1c8ccae6d387f360c2fca138f1c65410918ca0cb47c15cbdee931ed03cbcec6e871f11f2692a9b9136f82b274a338805e863f87c5c0f99604c03484b1a2020732e5473bec84ced8ba05cd9490e75563628
+ac3916dc874442f05ca2409bd5c63957bca4c5363dda23846a5901010818c57874aff1787bd7c554c95aae8e354ec55beb1b79966bae64197d4383c894485c8a509064957abe7f3fa4154dc0f0e958121fcc
+f0b7a82a962c7faa238acb98ebe4b904e8d5998e1856dbf68aea0933dfb3d80a44f0eaad678dacf31ee5c985fe6f9844f9490319745e89bf790d3e0cf2a788a177de8401119ebc9f7e48f58c279ef723fda7cc
+6d87c3942bc4ebbc224fac383f1b22af13a4ccdfae5ee66ab8f954ebbb874f583ef07152872ce03de5c3584574b91d91d2f6fc4b14625e3e2bdfd04fc7b9441d73f9c09411f08938429c9f12e31caea17e094d9d
+2e0d7c7f1c03ce9d4479fa800645abda4aade87bca0bbe547e889f8d32af7530d212171baae32831ecbd84cc27bb3da8496982a183e2785a0731220677341bcf75ae345ddb8bcdb7dccd2c4e1094d33ca53b0768cf
+9bec3f01c35ba5436e44b01a96077f41aa61516dff5cef6185818e7f57d2dd0b9d9ebfeb35a0cff1ae8d98975a0cdcf2b626dd7b1f8fa2534ffc058abc1b81e1c68aaeaf8e9b255c3eabe1d675399220d4b6d967fc5f
+b0d54ba8f86b01d511acb7ddb567198dabe835512d0033991a221b2bdf815d8063d073d1bbf5704f954df8f73a4ecec48417c2fec643f9e15d1d41b51f955f2422a69a2a8f73b6154881e6f6721f8e73a80efa5bfb1717
+cd41ad000e15e9b261e52b459bf79c7f7ffeb281629fba3c986c08b90a058abf76799dc72e430a1df8b64641cc2e03339ebb37fe7eabced490f77b58b3dcf492f981687036dcb94328cd9ad9f4e489de5d06bbd3671a9bf1
+21233d332c3fa9b056520c06fe55aa388773ee12ae893395df1d75c4932b54a5d679637d33930f2f8afa22be2fb4b1fd36a6c83b51057611c8119bd8cdb1efd8ee7063d5f13c09d2f8e5f8888eda3ece738e34f667aee451b9
+86418350d07d8f9d8b7e1190eb13634dc0a59f267730afe9409cecab0ac4f57feacaee8dec7321b8512991d51d4fe3b7cc2cbb5e6728ba115f022087606d15b39810032b3945e052574c7464c2b2434b2a54a801991d093f9390
+5501bfd8c7b1784515a192c0db6516b1fda893702ed45db7a5c07b32b3d9d41f396f9ed61cc4f9a143d4b4ab16c9f6975ee0a8851c62f80ddd4fdfef6c9f6f27c130a13109cd20779e4bab78200129900ecedae564c790153d2227
+7d45d142bdeff8e1b941537dab8685697988e60cd0ca0926dacc9a227de9f33e0dca5c7c17bcb3f3d3a1f39c4999313786933cb931c725b6359a1b10e31b77cd30f28e3bd4ebe898ef0ae1ee5e3a28a911fdc3759d04929c74321a9d
+36f11d276af5958a737c5f457ae997455025cde0503ecf1431ea68b6567530cf3abeee2391c1c549fd3bb274120b0613828839ae74b6a071ee9d29b6247ca6a8a1cd2195d24c6215f58be04e197b541828b99e3a71d0991be8245303ad
+efe64e5b4341239a2e60d342b89a302c2b8cbd45a33a5301936a051f69dd1644164bf7e24d269d341285a2c22aaa93517b1e9ae6a3d6b18961d4b1f58b357a113a12e9c6519ce7533f602b026dbd885c0584f21e099e74516d5db197dec0
+e5d90cf622738f73973fc448b7be40b044fac3dfc65d36db47f3fa9d01d41fb9808ad83e51729c0c2c35cc08226fbcd20a988ea24bb8373991e702c911d1764b309eda4d1500592ce0fee42fe111e9f9e346734b9e2758194ff9f0713613d1
+1444dfb0694d36937eb77a0b1f04c2e29e9904d1dcf03cf8d420315c5cb38463f8f3327df5cd34485b0e6db3eefedcd9015f4953a99c125f3ee803c4727c10e0ca943408d82a0c6c1b797a7a3a9e6446df53b8de29894309e81d09a321564b40
+171e9fb9e3867ac3ae4cbe09884cccb7561c2c0773ea8200c492ac338512f2017bc843b1ae5fb998c7d1f155b01b707f70dcbf68dab56d74a561b5fe7759788b5651a9ab0fe7006d0c096cacbc9ba93736bda0b967b7f1ebfb4c7a032e73f40392
+db14a6d9c6311aadd73d9fb5b38b654bf306e0ea3880d22a12032971115d22dc38f9bf03ac83a177a0e36be7f710d4a903934601d15911942f11364692d77958be02be75eb6c697e3d963f6ca2c26449272bd05cd3ec41b884a6a97381f57f19d70c
+tv_kdf_hkdf: ok
diff --git a/test/default/secretstream.c b/test/default/secretstream_xchacha20poly1305.c
similarity index 99%
rename from test/default/secretstream.c
rename to test/default/secretstream_xchacha20poly1305.c
index 63c64438da..6955f82fb5 100644
--- a/test/default/secretstream.c
+++ b/test/default/secretstream_xchacha20poly1305.c
@@ -1,5 +1,5 @@
-#define TEST_NAME "secretstream"
+#define TEST_NAME "secretstream_xchacha20poly1305"
#include "cmptest.h"
int
diff --git a/test/default/secretstream.exp b/test/default/secretstream_xchacha20poly1305.exp
similarity index 100%
rename from test/default/secretstream.exp
rename to test/default/secretstream_xchacha20poly1305.exp
diff --git a/test/default/sodium_core.c b/test/default/sodium_core.c
index c8eeb2ba34..4bcdb33e3f 100644
--- a/test/default/sodium_core.c
+++ b/test/default/sodium_core.c
@@ -19,6 +19,7 @@ main(void)
assert(sodium_init() == 1);
(void) sodium_runtime_has_neon();
+ (void) sodium_runtime_has_armcrypto();
(void) sodium_runtime_has_sse2();
(void) sodium_runtime_has_sse3();
(void) sodium_runtime_has_ssse3();
diff --git a/test/default/sodium_utils2.c b/test/default/sodium_utils2.c
index 22648da954..4f8451c540 100644
--- a/test/default/sodium_utils2.c
+++ b/test/default/sodium_utils2.c
@@ -45,9 +45,9 @@ segv_handler(int sig)
int
main(void)
{
- void * buf;
- size_t size;
- unsigned int i;
+ void *buf;
+ size_t size;
+ unsigned int i;
#ifdef BENCHMARKS
return 0;