serval-dna/libsodium/ChangeLog

464 lines
22 KiB
Plaintext
Raw Normal View History

Squashed 'libsodium/' changes from 7d5d9204e..18609cffa 4c37368f9 Nits 94550cefd Remove dev #warning 3e0b4dec6 Add sodium_base64_encoded_len() 4ce2856a5 Avoid negations on unsigned values 7e06a6a99 Annotate 18f0fff89 More tests: verify that they key gets updated after the counter wraps e061abc2b The documentation is not a work in progress any more 91233a014 Tag salsa208 as deprecated ee1d5c96d Move the codecs tests to their own test file 558355e56 Check if SIGABRT can be trapped multiple times in a row 8ee67b1dd More tests 1f72dec89 More tests 3db75fc64 No need for ge_scalarmult_vartime() in minimal mode 41dc93322 More tests aec433cec Additional check 87af832ae Do not trigger Travis+Coverity in the master branch 7423408cd Make the behavior of hex2bin() consistent with base642bin() 00660d79b secretstream test: don't pull twice if we don't test with AD 3c8a7f17f Add tests for short, invalid unpadded base64 strings c7fe84cfb Skip trailing ignored characters in base64 decoding 70e5ff5e1 Add a helper macro to compute the length of a base64 string 9209e89d9 More tests 31e9a5541 More tests 61214ba6b Remove redundant test 525c21ed1 Tests 77f3b7135 Indent 1875980d3 More tests 5b9680ead More tests 4828c5923 ~ 80 columns please 66c621f41 Faster; doesn't require to wipe the output stream 5da8f4fbc Add a global xor_buf() private helper function 7d756fab9 xor the key and the nonce on rekey for better separation bb1b27fa3 Improve readability 10bb28b27 One more COMPILER_ASSERT() 2ce41de29 Define macros instead of repeated offsets e878bc141 More keygen tests f244f658d int -> size_t 9c53da4a6 metamorphic tests for HMAC bd69a3083 metamorphic tests for onetimeauth a7b75a2d7 + simple metamorphic tests for crypto_generichash() a029b352a Don't generate SSE2 code if that instruction set hasn't been enabled 09fd953fc Revert "__SSE2__ may need to be explicitly enabled" 35d8aa5d3 __SSE2__ may need to be explicitly enabled a161dd9fa On 32-bit systems, the limit is SIZE_MAX 251751e69 Update ChangeLog d8a8201bb Avoid "in" and "out". Use "c" to represent the ciphertext. 1181a47cb Proper xchacha20poly1305_MESSAGEBYTES_MAX definition bfab44aa4 initbytes -> headerbytes for clarity e8f1c0be6 secretstream: use "header" instead of "in" and "out" for clarity 9e0ff55eb Add the ability to use only strong symbols, even on ELF targets b0420b32d Define SODIUM_EXPORT_WEAK instead of adding __attribute__((weak)) tags ae515a16a Bring back -fno-asynchronous-unwind-tables on MingW 3df3fabb8 No default clause needed 1f8056ab1 Use #error in autoconf tests 147d8b620 Disable AVX512 on MingW even harder ffce4334e Disable AVX512 on MingW for now 07de00bc9 Revert -fno-asynchronous-unwind-tables addition 9aa116531 up eb8c283dd Add -fno-asynchronous-unwind-tables to optimized builds 186b398a2 -fno-asynchronous-unwind-tables is now required on MingW 7de597f05 Update m4 deps ; remove pkg.m4 383705ffc The AVX512 optimized BLAKE2B implementation hasn't been imported yet f86f021ac Travis CI : Move the tcc check to the install step 19496bcc0 Don't try to access /usr/local on Travis CI ca43a1268 Old tcc versions miscompile `while (++in[x])` 10edd16b4 Modernize the core3 test dcde773e5 Travis CI: don't run multiple jobs in parallel due to memory requirements 150c6930e Travis CI: avoid duplicate addons section cdfb0aaa3 tcc + travis... 9f4011197 tcc doesn't seem to work on Travis CI 7e8cdd827 Travis: start with a quick compilation using tcc c6aa04108 Move #ifdef up b31a3f247 Disable AVX512 optimizations on clang < 4 4aba976d5 Explicit casts 15ee95c64 Remove unused var dcd60ba66 Force inline 5cc334b33 Add AVX512F optimized Argon2 implementation 70f66c9a6 Check for avx/avx2/avx512f linkage 6866b3d55 Use macros instead of magic numbers 1c0677b09 Check for AVX512F support 80095105b Missing pieces of a version bump 390f865e3 Add tests for scrypt rehash 2a2b85eee Add tests for crypto_pwhash_str_needs_rehash() 979b21d67 Remove extra semicolumns 62c41c703 Avoid untagged unions 5cf1de94a Remove trailing coma 3aa1c71de Don't return void d0a418a86 + _crypto_pwhash_scryptsalsa208sha256_str_needs_rehash() 6dcba550c Confirm that emcc is actually being used if EMSCRIPTEN is defined 0ae678b0f Avoid multiple declarations in an EN_ASM({}) block b26de68a6 Use single quotes inside EM_ASM 1aae564da Avoid duplicate initializations; reorder for consistency w/ decl 81cf1ff6d Use unsigned for loop counters e2efa6d7e Remove unused variable e06c70afe Use the dedicated type for the argon2 type id 378304f81 Export crypto_pwhash_str_needs_rehash() to Javascript/WebAssembly e8828eef7 Don't bother verifying hashes whose length is >= crypto_pwhash_STRBYTES 7cc482523 Add crypto_pwhash_str_needs_rehash() c65189a0c Explicit casts 7b687bb45 + Jonathan Stowe for Natrium (Perl 6 bindings) c72ef48f0 Static-ify what we currently don't need in crypto_core/curve25519_ref10 5c8b8ea01 Simplify 0af31aeb2 Fill the max output buffer size in sodium_bin2base64() 6b43c1ddb Javascript: don't define crypto_pwhash constants in non-sumo builds e236df63e Trim empty lines 75cfcf208 Merge branch 'master' of github.com:jedisct1/libsodium e40e0f6dd Adjust secretstream_..._rekey() after e84336ac 514150d8b Merge branch 'master' of github.com:jedisct1/libsodium 394e21884 Do not clear the padding (for alignment) section of a blake2b state a0fea6965 Remove RUNNING_JS_OPTS for WebAssembly d863c9665 chmod +x *.sh 957c251f8 chmod +x *.sh ce2ecc596 One more compiler assertion e84336ac4 secretstream: assume the internal nonce is little endian fd4478288 Test sodium_pad() with a NULL pointer f61a121b8 Regen emscripten symbols f8e535a44 messagesbytes -> messagebytes cd721cfc1 Have generate-emscripten-symbols.sh automatically update the js/wasm build script aa20d2e86 Add secretstream constants 49f1d87cf salsa208: messagebyte -> messagebytes a0b9bc46e constcheck: grab a few more constants 0ccdfd0c8 Update emscripten symbols list 242045cb4 Update emscripten symbols list 30a25dbb2 Bump be58b2e66 Accept a NULL pointer for the padded length in sodium_pad() b503d75e4 Add crypto_secretstream_*() to MSVC solutions a55e13246 Update packaging for .NET Core (#583) 4c93d0391 C++ compat 0850e5580 Check that a zero blocksize returns -1 a27c18d0e No need for two buffers in the padding test d5574a69f Complete sodium_pad/unpad() and add a couple tests b9ed93fcb Change the sodium_pad() API to accept a maximum buffer length 4fd66e3ad Name similar things the same way in sodium_pad() and sodium_unpad() fb4dc083e Update ChangeLog 50c7632cc + sodium_pad() / sodium_unpad() 55a578d62 Merge branch 'master' of github.com:jedisct1/libsodium b27714898 Reorder crypto_secretstream_*() prototypes in a more intuitive sequence c3b315ec7 + Firefox 80296be94 Some notes about RtlGenRandom 914ff8757 Format paragraphs c65426147 Explain that sodium_misuse() still aborts by default 901c49203 + crypto_secretstream_*() a335fc2da Merge branch 'master' of github.com:jedisct1/libsodium 5f1f6f747 THANKS += PIA 6e8e0a93f Add a couple tests for crypto_secretstream_*() 88c0b6538 Trigger sodium_misuse() if mlen > secretstream_MESSAGESBYTES_MAX 72d5d506d Sort df7ad2632 Introduce a new crypto_secretstream_*() API 45f2759d8 Update packaging scripts to .NET Core 2.0 (#582) c39ecb245 Update packaging for .NET Core (#581) 100a055a5 Indent e6e3f7dd8 ChangeLog 76995c52f Argon2: use sodium_{bin2base64,base642bin} instead of a private implementation 265bdcfe0 bin2hex & bin2base64: return a null size on error a6480aec4 b64 test: intentionally overestimate sizes 74fd8fd1c C++ compat ad5a5232a Make that a size_t f42390a55 Update Visual Studio solutions cdbb43f44 base64 tests eb84b00b7 glibc requires <stdint.h> for SIZE_MAX 3f272cbbf Add a base64 codec, due to popular request 308684790 Move the codecs from sodium/utils.c to a dedicated file b49054ff8 Merge branch 'master' of github.com:jedisct1/libsodium ef7c9f44c Sort c87e6f5e1 Add -Wold-style-declaration dd9416fd5 Doc 1c573d4cb Update 5b141eb9e Add some blank lines for readability 7e91aa3f8 s/the// 4baea3575 Merge branch 'master' of github.com:jedisct1/libsodium 9b7db7c3f Document crypto_aead_aes256gcm_*() limitations 8f0953b31 Merge branch 'master' of github.com:jedisct1/libsodium 9e0e77a3f Update ChangeLog a894ec93f Add crypto_pwhash_str_alg() cde31281d Bench: don't tie the printed result to the number of iterations 6d59a5897 Make the number of iterations configurable; reduce the default 28a1e6886 Add an interesting test case for a custom randombytes_uniform implementation 5b4db091d Add a benchmark mode 8813c36ff randombytes test: restore the salsa20-based rng at the end, for benchmarks a8cc1634f Indent 9d03fbb38 Merge branch 'master' of github.com:jedisct1/libsodium 196e03299 Preliminary ChangeLog 19f76d7cb Simplify 544ce6400 Just a simple script to match constants with functions f711c6d04 + emscripten-wasm.sh 1a3b474f7 Update the exported list of JS symbols e1fa9cc90 Add *_messagebytes_max() wrappers 53280aa28 Revert "wasm tests: skip over *.asm.js files" ac8111c31 wasm tests: skip over *.asm.js files 29914ec82 [Findsodium.cmake] DON'T OVERWRITE LIBRARY SUFFIXES (#576) f02770b2a Revert "+ sodium_alloc_overhead()" c5b61d812 + sodium_alloc_overhead() 23c36615c Remove TOTAL_MEMORY from wasm builds c56fa3ccf Include private/common.h for COMPILER_ASSERT 56eb70f8b Sort 3c3214fbd Node need for --expose-wasm any more with recent nodejs versions b5b67d074 Add -fembed-bitcode to the iOS 64 target, for WatchOS and TVOS 580bf7a19 emscripten-wasm.sh: generate HTML files even if we don't use them ae8cd7208 emscript-wasm: don't use --enable-minimal on sumo builds f2a7b6123 Update symbols 774ec67e2 Repair sodium_core test 8a14f5c16 Don't call sodium_misuse() in the sodium_core test for Javascript/wasm targets 0ce03b6ce misuse test: just return from main() on unsupported platforms 6ac18dae4 The MESSAGEBYTES_MAX constants are to be used with the libsodium API 180a89cb2 More tests for signatures 90bd94e4e Coverage exclusion b34b89ab3 secrebox: add a test with in/out buffers next to each other 3dd56fa91 Coverage exclusions ff8bb6705 More tests for scrypt a3f90d602 Indent 63d8a896f Test KX with a weak PK 7ad9a46cb More tests a9a21a7df Test Ed->X conversion with x not being a square root 982cde1a7 Test crypto_box_open_detached() with a weak PK 52bfc0325 Initialize the base&aligned addresses in argon2's allocate_memory fc9088792 Add missing include "core.h" c15173de1 Turn a few calls with an insane message length into a sodium_misuse() f28fe0ae2 Cap argon2*_BYTES_MAX to SODIUM_SIZE_MAX bac61ebf5 BYTES_MAX -> MESSAGEBYTES_MAX 16179b87f Introduce *_BYTES_MAX constants 568adb570 Trim crypto_pwhash_scryptsalsa208sha256_BYTES_MAX down to ~127 GB 3525f032d Inline 3ee2151f1 memzero(): with weak symbols, just call memset() 105f7108d Argon2: wipe all blocks if the ARGON2_FLAG_CLEAR_MEMORY flag is set dc2c68067 C++ compat fb739acd7 fill_memory_blocks() cannot possibly fail c3908f87d Argon2: deallocate memory if fill_memory_blocks() ever fails 8d91a3275 Add more tests for crypto_sign_ed25519_pk_to_curve25519() 214fe473f Add an invalid key to the signature tests e1b044820 Test crypto_secretbox_open_detached() with a NULL message pointer c90ddae75 Use the right state type for the auth256 test 51a0b96f1 Test crypto_hmac_sha256_update() with empty chunks 2a2ed3df3 Volatilify the accumulator, at least for consistency with sodium_is_zero() cd51ff29e Coverage exclusions 33d6908f9 Test crypto_auth_hmacsha256_*() f92c82537 More tests 67a7df73b Add all the Visual Studio files in the tarball 56efb47ab .13 -> .14 334738cf2 Add resource.rc to the Visual Studio filters files 47796a5b8 Indent d7ecf04d6 Comment randombytes_uniform() eaab51278 Add specialized ge_mul_l() to multiply by the order of the main subgroup 6de26b59d ed25519_pk_to_curve25519: check that the input is in the right subgroup 571915ea2 ed25519: un-static the check for low-order points b57f9668f More tests cc5191607 Tag sodium_runtime_has_*() symbols as weak 8b9b6a54b Remove error string from sodium_misuse() 9361070f9 Merge branch 'master' of github.com:jedisct1/libsodium * 'master' of github.com:jedisct1/libsodium: Tweak emscripten-wasm.sh Clear the BLAKE2B state only once, on finalization memzero() the state if we call generichash_final() twice 63cbad750 Visual Studio doesn't like abort() chains 21fd252ac Tweak emscripten-wasm.sh 97486f7d4 Clear the BLAKE2B state only once, on finalization 1090fcfd4 memzero() the state if we call generichash_final() twice 6768d82ea Add missing return value in set_misuse_handler() 9df008a78 Add some invalid base64 strings to pwhash_str_verify() tests 5d56821d3 More tests, and start testing misuse cases 0238cbcf6 Bump NuGet package 0e8d7c926 Implement sodium_set_misuse_handler() 9def4d9a8 Add tests for crypto_kx_*() when a single key is required 8a70f258f No more abort() calls! c3b24c1d2 Explain why some abort() calls are still around 74703c63a More abort() -> sodium_misuse() a0e997b8a More abort() -> sodium_misuse() ea9281cb0 More abort() -> sodium_misuse() c7459c125 Remove the useless donations button a61dddd49 Back to dev mode. If you want a stable version, use the stable branch. bcf98b554 Start replacing abort() with an internal sodium_misuse() function c86080e7b Fix funky indentation 608e103e4 Finish the Argon2id tests 8b99f44ff Abort on misuse in crypto_kx_server_session_keys() too 765ba55cd crypto_kx(): abort if the function is called without any non-NULL pointer 90658321d Only include sodium/crypto_pwhash_scryptsalsa208sha256.h on !minimal 1f826df2d is_zero(): volatilize the accumulator 3d400363b sodium_compare: x1, x2 don't have to be volatile 99f8c19a1 memzero(): call the weak function after zeroing 30e8a2b23 The time has come to use memset_s() if available f0c15da02 We don't need these extra loads bcdb042ad Revert "Explicitly include <limits.h>" 7dbbd266b Simple SSE2 implementation of crypto_verify*() 94a8b3327 Simplify crypto_verify_*() 37e99aa4f Make it more difficult for the compiler to optimize crypto_verify_*() c746eb277 Revert "Bail out if SIZE_MAX < crypto_pwhash_MEMLIMIT_MAX" 0fd9aae17 Explicitly include <limits.h> c2ef7d088 Bail out if SIZE_MAX < crypto_pwhash_MEMLIMIT_MAX git-subtree-dir: libsodium git-subtree-split: 18609cffafed6ccfcac77088d402074e1d74f02c
2017-09-27 05:22:05 +00:00
* Version 1.0.14
- iOS binaries should now be compatible with WatchOS and TVOS.
- WebAssembly is now officially supported. Special thanks to
@facekapow and @pepyakin who helped to make it happen.
- Internal consistency checks failing and primitives used with
dangerous/out-of-bounds/invalid parameters used to call abort(3).
Now, a custom handler *that doesn't return* can be set with the
`set_sodium_misuse()` function. It still aborts by default or if the
handler ever returns. This is not a replacement for non-fatal,
expected runtime errors. This handler will be only called in
unexpected situations due to potential bugs in the library or in
language bindings.
- `*_MESSAGEBYTES_MAX` macros (and the corresponding
`_messagebytes_max()` symbols) have been added to represent the
maximum message size that can be safely handled by a primitive.
Language bindings are encouraged to check user inputs against these
maximum lengths.
- The test suite has been extended to cover more edge cases.
- crypto_sign_ed25519_pk_to_curve25519() now rejects points that are
not on the curve, or not in the main subgroup.
- Further changes have been made to ensure that smart compilers will
not optimize out code that we don't want to be optimized.
- Visual Studio solutions are now included in distribution tarballs.
- The `sodium_runtime_has_*` symbols for CPU features detection are
now defined as weak symbols, i.e. they can be replaced with an
application-defined implementation. This can be useful to disable
AVX* when temperature/power consumption is a concern.
- `crypto_kx_*()` now aborts if called with no non-NULL pointers to
store keys to.
- SSE2 implementations of `crypto_verify_*()` have been added.
- Passwords can be hashed using a specific algorithm with the new
`crypto_pwhash_str_alg()` function.
- Due to popular demand, base64 encoding (`sodium_bin2base64()`) and
decoding (`sodium_base642bin()`) have been implemented.
- A new `crypto_secretstream_*()` API was added to safely encrypt files
and multi-part messages.
- The `sodium_pad()` and `sodium_unpad()` helper functions have been
added in order to add & remove padding.
- An AVX512 optimized implementation of Argon2 has been added (written
by Ondrej Mosnáček, thanks!)
- The `crypto_pwhash_str_needs_rehash()` function was added to check if
a password hash string matches the given parameters, or if it needs an
update.
- The library can now be compiled with recent versions of
emscripten/binaryen that don't allow multiple variables declarations
using a single `var` statement.
* Version 1.0.13
- Javascript: the sumo builds now include all symbols. They were
previously limited to symbols defined in minimal builds.
- The public `crypto_pwhash_argon2i_MEMLIMIT_MAX` constant was
incorrectly defined on 32-bit platforms. This has been fixed.
- Version 1.0.12 didn't compile on OpenBSD/i386 using the base gcc
compiler. This has been fixed.
- The Android compilation scripts have been updated for NDK r14b.
- armv7s-optimized code was re-added to iOS builds.
- An AVX2 optimized implementation of the Argon2 round function was
added.
- The Argon2id variant of Argon2 has been implemented. The
high-level `crypto_pwhash_str_verify()` function automatically detects
the algorithm and can verify both Argon2i and Argon2id hashed passwords.
The default algorithm for newly hashed passwords remains Argon2i in
this version to avoid breaking compatibility with verifiers running
libsodium <= 1.0.12.
- A `crypto_box_curve25519xchacha20poly1305_seal*()` function set was
implemented.
- scrypt was removed from minimal builds.
- libsodium is now available on NuGet.
* Version 1.0.12
- Ed25519ph was implemented, adding a multi-part signature API
(`crypto_sign_init()`, `crypto_sign_update()`, `crypto_sign_final_*()`).
- New constants and related accessors have been added for Scrypt and
Argon2.
- XChaCha20 has been implemented. Like XSalsa20, this construction
extends the ChaCha20 cipher to accept a 192-bit nonce. This makes it safe
to use ChaCha20 with random nonces.
- `crypto_secretbox`, `crypto_box` and `crypto_aead` now offer
variants leveraging XChaCha20.
- SHA-2 is about 20% faster, which also gives a speed boost to
signature and signature verification.
- AVX2 implementations of Salsa20 and ChaCha20 have been added. They
are twice as fast as the SSE2 implementations. The speed gain is
even more significant on Windows, that previously didn't use
vectorized implementations.
- New high-level API: `crypto_kdf`, to easily derive one or more
subkeys from a master key.
- Siphash with a 128-bit output has been implemented, and is
available as `crypto_shorthash_siphashx_*`.
- New `*_keygen()` helpers functions have been added to create secret
keys for all constructions. This improves code clarity and can prevent keys
from being partially initialized.
- A new `randombytes_buf_deterministic()` function was added to
deterministically fill a memory region with pseudorandom data. This
function can especially be useful to write reproducible tests.
- A preliminary `crypto_kx_*()` API was added to compute shared session
keys.
- AVX2 detection is more reliable.
- The pthreads library is not required any more when using MingW.
- `contrib/Findsodium.cmake` was added as an example to include
libsodium in a project using cmake.
- Compatibility with gcc 2.x has been restored.
- Minimal builds can be checked using `sodium_library_minimal()`.
- The `--enable-opt` compilation switch has become compatible with more
platforms.
- Android builds are now using clang on platforms where it is
available.
* Version 1.0.11
- `sodium_init()` is now thread-safe, and can be safely called multiple
times.
- Android binaries now properly support 64-bit Android, targeting
platform 24, but without breaking compatibility with platforms 16 and
21.
- Better support for old gcc versions.
- On FreeBSD, core dumps are disabled on regions allocated with
sodium allocation functions.
- AVX2 detection was fixed, resulting in faster Blake2b hashing on
platforms where it was not properly detected.
- The Sandy2x Curve25519 implementation was not as fast as expected
on some platforms. This has been fixed.
- The NativeClient target was improved. Most notably, it now supports
optimized implementations, and uses pepper_49 by default.
- The library can be compiled with recent Emscripten versions.
Changes have been made to produce smaller code, and the default heap
size was reduced in the standard version.
- The code can now be compiled on SLES11 service pack 4.
- Decryption functions can now accept a NULL pointer for the output.
This checks the MAC without writing the decrypted message.
- crypto_generichash_final() now returns -1 if called twice.
- Support for Visual Studio 2008 was improved.
* Version 1.0.10
- This release only fixes a compilation issue reported with some older
gcc versions. There are no functional changes over the previous release.
* Version 1.0.9
- The Javascript target now includes a `--sumo` option to include all
the symbols of the original C library.
- A detached API was added to the ChaCha20-Poly1305 and AES256-GCM
implementations.
- The Argon2i password hashing function was added, and is accessible
directly and through a new, high-level `crypto_pwhash` API. The scrypt
function remains available as well.
- A speed-record AVX2 implementation of BLAKE2b was added (thanks to
Samuel Neves).
- The library can now be compiled using C++Builder (thanks to @jcolli44)
- Countermeasures for Ed25519 signatures malleability have been added
to match the irtf-cfrg-eddsa draft (note that malleability is irrelevant to
the standard definition of signature security). Signatures with a small-order
`R` point are now also rejected.
- Some implementations are now slightly faster when using the Clang
compiler.
- The HChaCha20 core function was implemented (`crypto_core_hchacha20()`).
- No-op stubs were added for all AES256-GCM public functions even when
compiled on non-Intel platforms.
- `crypt_generichash_blake2b_statebytes()` was added.
- New macros were added for the IETF variant of the ChaCha20-Poly1305
construction.
- The library can now be compiled on Minix.
- HEASLR is now enabled on MinGW builds.
* Version 1.0.8
- Handle the case where the CPU supports AVX, but we are running
on an hypervisor with AVX disabled/not supported.
- Faster (2x) scalarmult_base() when using the ref10 implementation.
* Version 1.0.7
- More functions whose return value should be checked have been
tagged with `__attribute__ ((warn_unused_result))`: `crypto_box_easy()`,
`crypto_box_detached()`, `crypto_box_beforenm()`, `crypto_box()`, and
`crypto_scalarmult()`.
- Sandy2x, the fastest Curve25519 implementation ever, has been
merged in, and is automatically used on CPUs supporting the AVX
instructions set.
- An SSE2 optimized implementation of Poly1305 was added, and is
twice as fast as the portable one.
- An SSSE3 optimized implementation of ChaCha20 was added, and is
twice as fast as the portable one.
- Faster `sodium_increment()` for common nonce sizes.
- New helper functions have been added: `sodium_is_zero()` and
`sodium_add()`.
- `sodium_runtime_has_aesni()` now properly detects the CPU flag when
compiled using Visual Studio.
* Version 1.0.6
- Optimized implementations of Blake2 have been added for modern
Intel platforms. `crypto_generichash()` is now faster than MD5 and SHA1
implementations while being far more secure.
- Functions for which the return value should be checked have been
tagged with `__attribute__ ((warn_unused_result))`. This will
intentionally break code compiled with `-Werror` that didn't bother
checking critical return values.
- The `crypto_sign_edwards25519sha512batch_*()` functions have been
tagged as deprecated.
- Undocumented symbols that were exported, but were only useful for
internal purposes have been removed or made private:
`sodium_runtime_get_cpu_features()`, the implementation-specific
`crypto_onetimeauth_poly1305_donna()` symbols,
`crypto_onetimeauth_poly1305_set_implementation()`,
`crypto_onetimeauth_poly1305_implementation_name()` and
`crypto_onetimeauth_pick_best_implementation()`.
- `sodium_compare()` now works as documented, and compares numbers
in little-endian format instead of behaving like `memcmp()`.
- The previous changes should not break actual applications, but to be
safe, the library version major was incremented.
- `sodium_runtime_has_ssse3()` and `sodium_runtime_has_sse41()` have
been added.
- The library can now be compiled with the CompCert compiler.
* Version 1.0.5
- Compilation issues on some platforms were fixed: missing alignment
directives were added (required at least on RHEL-6/i386), a workaround
for a VRP bug on gcc/armv7 was added, and the library can now be compiled
with the SunPro compiler.
- Javascript target: io.js is not supported any more. Use nodejs.
* Version 1.0.4
- Support for AES256-GCM has been added. This requires
a CPU with the aesni and pclmul extensions, and is accessible via the
crypto_aead_aes256gcm_*() functions.
- The Javascript target doesn't use eval() any more, so that the
library can be used in Chrome packaged applications.
- QNX and CloudABI are now supported.
- Support for NaCl has finally been added.
- ChaCha20 with an extended (96 bit) nonce and a 32-bit counter has
been implemented as crypto_stream_chacha20_ietf(),
crypto_stream_chacha20_ietf_xor() and crypto_stream_chacha20_ietf_xor_ic().
An IETF-compatible version of ChaCha20Poly1305 is available as
crypto_aead_chacha20poly1305_ietf_npubbytes(),
crypto_aead_chacha20poly1305_ietf_encrypt() and
crypto_aead_chacha20poly1305_ietf_decrypt().
- The sodium_increment() helper function has been added, to increment
an arbitrary large number (such as a nonce).
- The sodium_compare() helper function has been added, to compare
arbitrary large numbers (such as nonces, in order to prevent replay
attacks).
* Version 1.0.3
- In addition to sodium_bin2hex(), sodium_hex2bin() is now a
constant-time function.
- crypto_stream_xsalsa20_ic() has been added.
- crypto_generichash_statebytes(), crypto_auth_*_statebytes() and
crypto_hash_*_statebytes() have been added in order to retrieve the
size of structures keeping states from foreign languages.
- The JavaScript target doesn't require /dev/urandom or an external
randombytes() implementation any more. Other minor Emscripten-related
improvements have been made in order to support libsodium.js
- Custom randombytes implementations do not need to provide their own
implementation of randombytes_uniform() any more. randombytes_stir()
and randombytes_close() can also be NULL pointers if they are not
required.
- On Linux, getrandom(2) is being used instead of directly accessing
/dev/urandom, if the kernel supports this system call.
- crypto_box_seal() and crypto_box_seal_open() have been added.
- Visual Studio 2015 is now supported.
* Version 1.0.2
- The _easy and _detached APIs now support precalculated keys;
crypto_box_easy_afternm(), crypto_box_open_easy_afternm(),
crypto_box_detached_afternm() and crypto_box_open_detached_afternm()
have been added as an alternative to the NaCl interface.
- Memory allocation functions can now be used on operating systems with
no memory protection.
- crypto_sign_open() and crypto_sign_edwards25519sha512batch_open()
now accept a NULL pointer instead of a pointer to the message size, if
storing this information is not required.
- The close-on-exec flag is now set on the descriptor returned when
opening /dev/urandom.
- A libsodium-uninstalled.pc file to use pkg-config even when
libsodium is not installed, has been added.
- The iOS target now includes armv7s and arm64 optimized code, as well
as i386 and x86_64 code for the iOS simulator.
- sodium_free() can now be called on regions with PROT_NONE protection.
- The Javascript tests can run on Ubuntu, where the node binary was
renamed nodejs. io.js can also be used instead of node.
* Version 1.0.1
- DLL_EXPORT was renamed SODIUM_DLL_EXPORT in order to avoid
collisions with similar macros defined by other libraries.
- sodium_bin2hex() is now constant-time.
- crypto_secretbox_detached() now supports overlapping input and output
regions.
- NaCl's donna_c64 implementation of curve25519 was reading an extra byte
past the end of the buffer containing the base point. This has been
fixed.
* Version 1.0.0
- The API and ABI are now stable. New features will be added, but
backward-compatibility is guaranteed through all the 1.x.y releases.
- crypto_sign() properly works with overlapping regions again. Thanks
to @pysiak for reporting this regression introduced in version 0.6.1.
- The test suite has been extended.
* Version 0.7.1 (1.0 RC2)
- This is the second release candidate of Sodium 1.0. Minor
compilation, readability and portability changes have been made and the
test suite was improved, but the API is the same as the previous release
candidate.
* Version 0.7.0 (1.0 RC1)
- Allocating memory to store sensitive data can now be done using
sodium_malloc() and sodium_allocarray(). These functions add guard
pages around the protected data to make it less likely to be
accessible in a heartbleed-like scenario. In addition, the protection
for memory regions allocated that way can be changed using
sodium_mprotect_noaccess(), sodium_mprotect_readonly() and
sodium_mprotect_readwrite().
- ed25519 keys can be converted to curve25519 keys with
crypto_sign_ed25519_pk_to_curve25519() and
crypto_sign_ed25519_sk_to_curve25519(). This allows using the same
keys for signature and encryption.
- The seed and the public key can be extracted from an ed25519 key
using crypto_sign_ed25519_sk_to_seed() and crypto_sign_ed25519_sk_to_pk().
- aes256 was removed. A timing-attack resistant implementation might
be added later, but not before version 1.0 is tagged.
- The crypto_pwhash_scryptxsalsa208sha256_* compatibility layer was
removed. Use crypto_pwhash_scryptsalsa208sha256_*.
- The compatibility layer for implementation-specific functions was
removed.
- Compilation issues with Mingw64 on MSYS (not MSYS2) were fixed.
- crypto_pwhash_scryptsalsa208sha256_STRPREFIX was added: it contains
the prefix produced by crypto_pwhash_scryptsalsa208sha256_str()
* Version 0.6.1
- Important bug fix: when crypto_sign_open() was given a signed
message too short to even contain a signature, it was putting an
unlimited amount of zeros into the target buffer instead of
immediately returning -1. The bug was introduced in version 0.5.0.
- New API: crypto_sign_detached() and crypto_sign_verify_detached()
to produce and verify ed25519 signatures without having to duplicate
the message.
- New ./configure switch: --enable-minimal, to create a smaller
library, with only the functions required for the high-level API.
Mainly useful for the JavaScript target and embedded systems.
- All the symbols are now exported by the Emscripten build script.
- The pkg-config .pc file is now always installed even if the
pkg-config tool is not available during the installation.
* Version 0.6.0
- The ChaCha20 stream cipher has been added, as crypto_stream_chacha20_*
- The ChaCha20Poly1305 AEAD construction has been implemented, as
crypto_aead_chacha20poly1305_*
- The _easy API does not require any heap allocations any more and
does not have any overhead over the NaCl API. With the password
hashing function being an obvious exception, the library doesn't
allocate and will not allocate heap memory ever.
- crypto_box and crypto_secretbox have a new _detached API to store
the authentication tag and the encrypted message separately.
- crypto_pwhash_scryptxsalsa208sha256*() functions have been renamed
crypto_pwhash_scryptsalsa208sha256*().
- The low-level crypto_pwhash_scryptsalsa208sha256_ll() function
allows setting individual parameters of the scrypt function.
- New macros and functions for recommended crypto_pwhash_* parameters
have been added.
- Similarly to crypto_sign_seed_keypair(), crypto_box_seed_keypair()
has been introduced to deterministically generate a key pair from a seed.
- crypto_onetimeauth() now provides a streaming interface.
- crypto_stream_chacha20_xor_ic() and crypto_stream_salsa20_xor_ic()
have been added to use a non-zero initial block counter.
- On Windows, CryptGenRandom() was replaced by RtlGenRandom(), which
doesn't require the Crypt API.
- The high bit in curve25519 is masked instead of processing the key as
a 256-bit value.
- The curve25519 ref implementation was replaced by the latest ref10
implementation from Supercop.
- sodium_mlock() now prevents memory from being included in coredumps
on Linux 3.4+
* Version 0.5.0
- sodium_mlock()/sodium_munlock() have been introduced to lock pages
in memory before storing sensitive data, and to zero them before
unlocking them.
- High-level wrappers for crypto_box and crypto_secretbox
(crypto_box_easy and crypto_secretbox_easy) can be used to avoid
dealing with the specific memory layout regular functions depend on.
- crypto_pwhash_scryptsalsa208sha256* functions have been added
to derive a key from a password, and for password storage.
- Salsa20 and ed25519 implementations now support overlapping
inputs/keys/outputs (changes imported from supercop-20140505).
- New build scripts for Visual Studio, Emscripten, different Android
architectures and msys2 are available.
- The poly1305-53 implementation has been replaced with Floodyberry's
poly1305-donna32 and poly1305-donna64 implementations.
- sodium_hex2bin() has been added to complement sodium_bin2hex().
- On OpenBSD and Bitrig, arc4random() is used instead of reading
/dev/urandom.
- crypto_auth_hmac_sha512() has been implemented.
- sha256 and sha512 now have a streaming interface.
- hmacsha256, hmacsha512 and hmacsha512256 now support keys of
arbitrary length, and have a streaming interface.
- crypto_verify_64() has been implemented.
- first-class Visual Studio build system, thanks to @evoskuil
- CPU features are now detected at runtime.
* Version 0.4.5
- Restore compatibility with OSX <= 10.6
* Version 0.4.4
- Visual Studio is officially supported (VC 2010 & VC 2013)
- mingw64 is now supported
- big-endian architectures are now supported as well
- The donna_c64 implementation of curve25519_donna_c64 now handles
non-canonical points like the ref implementation
- Missing scalarmult_curve25519 and stream_salsa20 constants are now exported
- A crypto_onetimeauth_poly1305_ref() wrapper has been added
* Version 0.4.3
- crypto_sign_seedbytes() and crypto_sign_SEEDBYTES were added.
- crypto_onetimeauth_poly1305_implementation_name() was added.
- poly1305-ref has been replaced by a faster implementation,
Floodyberry's poly1305-donna-unrolled.
- Stackmarkings have been added to assembly code, for Hardened Gentoo.
- pkg-config can now be used in order to retrieve compilations flags for
using libsodium.
- crypto_stream_aes256estream_*() can now deal with unaligned input
on platforms that require word alignment.
- portability improvements.
* Version 0.4.2
- All NaCl constants are now also exposed as functions.
- The Android and iOS cross-compilation script have been improved.
- libsodium can now be cross-compiled to Windows from Linux.
- libsodium can now be compiled with emscripten.
- New convenience function (prototyped in utils.h): sodium_bin2hex().
* Version 0.4.1
- sodium_version_*() functions were not exported in version 0.4. They
are now visible as intended.
- sodium_init() now calls randombytes_stir().
- optimized assembly version of salsa20 is now used on amd64.
- further cleanups and enhanced compatibility with non-C99 compilers.
* Version 0.4
- Most constants and operations are now available as actual functions
instead of macros, making it easier to use from other languages.
- New operation: crypto_generichash, featuring a variable key size, a
variable output size, and a streaming API. Currently implemented using
Blake2b.
- The package can be compiled in a separate directory.
- aes128ctr functions are exported.
- Optimized versions of curve25519 (curve25519_donna_c64), poly1305
(poly1305_53) and ed25519 (ed25519_ref10) are available. Optionally calling
sodium_init() once before using the library makes it pick the fastest
implementation.
- New convenience function: sodium_memzero() in order to securely
wipe a memory area.
- A whole bunch of cleanups and portability enhancements.
- On Windows, a .REF file is generated along with the shared library,
for use with Visual Studio. The installation path for these has become
$prefix/bin as expected by MingW.
* Version 0.3
- The crypto_shorthash operation has been added, implemented using
SipHash-2-4.
* Version 0.2
- crypto_sign_seed_keypair() has been added
* Version 0.1
- Initial release.