Skip to content

Crypto++ 5.6.4 release

Compare
Choose a tag to compare
@noloader noloader released this 08 Apr 21:12
· 4550 commits to master since this release

Crypto++ 5.6.4

Crypto++ 5.6.4 was released on September 11, 2016. The 5.6.4 release was mostly a maintenance release. The release included a few new classes, like BLAKE2b, BLAKE2s, ChaCha8/12/20, HMQV and FHMQV.

Release Notes

The release notes for Crypto++ 5.6.4 follows.

  • maintenance release, honored API/ABI/Versioning requirements
  • expanded community input and support
    • 22 unique contributors for this release
  • fixed CVE-2016-3995
  • changed SHA3 to FIPS 202 (F1600, XOF d=0x06)
  • added Keccak (F1600, XOF d=0x01)
  • added ChaCha (ChaCha8/12/20)
  • added HMQV and FHMQV
    • Hashed and Fully Hashed MQV
  • added BLAKE2 (BLAKE2s and BLAKE2b)
    • C++, SSE2, SSE4, ARM NEON and ARMv8 ASIMD
  • added CRC32-C
    • C/C++, Amd64 CRC, and ARMv8 CRC
  • improved Rabin-William signatures
    • Tweaked roots e and f
  • improved C++11 support
    • atomics, threads and fences
    • alginof, alignas
    • constexpr
    • noexcept
  • improved GCM mode
    • ARM NEON and ARMv8 ASIMD
    • ARMv8 carry-less multiply
  • improved Windows 8 and 10 support
    • Windows Phone, Universal Windows Platform, Windows Store
  • improved MIPS, ARMv7 and ARMv8 support
    • added scripts setenv-{android | embedded | ios}.sh for GNUmakefile-cross
    • aggressive use of -march= and -mfpu= in cryptest.sh
  • improved build systems
    • Visual Studio 2010 default
    • added CMake support (lacks FindCryptopp.cmake)
    • archived VC++ 5.0/6.0 project files (vc60.zip)
    • archived VS2005 project files (vs2005.zip)
    • archived Borland project files (bds10.zip)
  • improved Testing and QA
    • expanded platforms and compilers
    • added code generation tests based on CPU features
    • added C++03, C++11, C++14, C++17 testing
    • added -O3, -O5, -Ofast and -Os testing
  • ported to MSVC 2015 SP3, Xcode 7.3, Sun Studio 12.5, GCC 7.0, MacPorts GCC 7.0, Clang 3.8, Intel C++ 17.00

Bug Fixes and Minor Issues

The bug fix and minor issue list for Crypto++ 5.6.4 follows. Most non-trivial issues are tracked for auditing and C&A purposes, but the list may not be complete. A number in parenthesis is the GitHub Issue number, if it was tracked. Sometimes a Git commit is referenced, but many trivial GitHub commits are omitted. Missing Issue numbers or lack of consecutiveness usually indicates feature requests and "won't fix/can't fix" type reports.

The list below has about 70 issues. 10 of the 70 are roughly feature requests that required tracking due to non-trivial code changes. For the remaining 60 issues, the project's test scripts, cryptest.sh and cryptest.nmake, uncovered about 47 (78.3%) of them.

  • Timing Attack Counter Measure AES (146) and Camellia (203) (AES was CVE'd; Camellia was pre-emptive)
  • Implementing GCM on ARMv8 (177)
  • Apple Clang 6.3 and undeclared identifier '_rdseed64_step' (183)
  • Apple Clang 6.0 (LLVM Clang 3.5) and alignment on __m128i variable (256)
  • Apple Clang 5.0 (LLVM Clang 3.4) and undeclared identifier '_mm_clmulepi64_si128' (184)
  • Apple Clang 5.0 compiler crash when using pclmulqdq ASM insn (182)
  • Apple Clang 6.0 (LLVM Clang 3.5), ARM and "error: no matching function for call to vcombine_u64" (234)
  • Apple Clang 6.0 (LLVM Clang 3.5), ARM and "compiler does not support '-mfpu=neon-vfpv4'" (246)
  • LLVM Clang and undeclared identifiers '_tzcnt_u32' and '_blsr_u32' (205)
  • LLVM Clang 3.5 and "SSE instruction set not enabled" (196)
  • LLVM Clang 3.5 and "error: SSSE3 instruction set not enabled" (245)
  • Missing symbols for FixedKeyLength::KEYLENGTH under C++11 and C++14 with constexpr (255)
  • StaticGetValidKeyLength returns incorrect values due to incorrect preprocessor macro (252)
  • GCC, ARMv8 and "fatal error: arm_acle.h: No such file or directory" (238)
  • Mingw-w64 and 'sigset_t' does not name a type (237)
  • word64 compile problems due to SSE2 and NEON interfaces (236)
  • GCC 4.9, Aarch32 and internal compiler error: in expand_shift_1, at expmed.c:2318 (233)
  • GCC 4.9, Raspberry Pi 3 and Bus Error (231)
  • Sun GCC 4.8 and missing 64-bit BMI/BMI2 instructions (230)
  • Sun Studio 12.1-12.3 and "Error: cannot use vector unsigned long long[2] to initialize vector unsigned long long[2]" (229)
  • Sun Studio 12.2 and failed compile using PLATFORM_CXXFLAGS (228, Commit 199c00f)
  • Sun Studio 12.2-12.5 and failed compile for gcm.cpp (228, Commit 199c00f)
  • Sun Studio 12.4 and failed compile for rijndael.cpp (224, Commit 199c00f)
  • Sun Studio 12.4 and "Error: The operand ___LKDB cannot be assigned to..." (188)
  • Sun Studio 12.3 and 12.4 builds broken (179)
  • Sun Studio 12.5 and BLAKE2b runtime failure (247)
  • Sun Studio 12.5 and "assertion failed in function pr_post_process_node() @ preopt.c:3868" (220, Commit 199c00f)
  • OS X and Valgrind findings for uninitialized variables when using -Ofast (223)
  • OS X and incorrect install_name for dynamic library (80)
  • Android cross-compile autoconf header check (222)
  • ld.gold and i686 without PIC: "/usr/bin/ld: -f may not be used without -shared" (219)
  • VS2015 and multiple C4589 warnings, "Constructor of abstract class X ignores initializer for virtual base class Y" (214)
  • Blake2s fails under VS2008/Win32/Release for Validation Suite (209)
  • CMake and "No rule to make target 'static'. Stop" (192)
  • CMake and "MACOSX_RPATH is not specified for the following targets..." (191)
  • CMake and "unknown target_include_directories" (181)
  • CMake and "include_directories given empty-string as include directory" (199)
  • CMake and "write_basic_package_version_file" (198)
  • CMake path variable should use CURRENT_SOURCE_DIR (135)
  • cpu.h and error: expected unqualified-id before 'int' (193)
  • MacPorts GCC should use Clang integrated assembler via -Wa,-q (190)
  • MacPorts GCC engages -DCRYPTOPP_DISABLE_ASM (189)
  • Cygwin i686/GCC 5.3 and error: 'u_short' was not declared in this scope (187)
  • Cygwin x86_64 and failed compile when using std=c++03 (148)
  • Cygwin x86_64 and 'fd_set' does not name a type (137)
  • Cygwin x86_64 crash with -DDEBUG -Os (100)
  • cryptest.exe reports wrong CPU features (176)
  • Use std::call for singleton implementation (173)
  • Performance based counter for TimerBase on Windows Phone and Windows Store apps (168)
  • Deactivate FIPS code paths for Windows Store apps (167)
  • NO_SOCKET macro (or similar) to remove sockets only for Windows Store apps (165)
  • NonblockingRng using BCryptGenRandom for Windows 10 and above (165)
  • VS2015 with Update2 and broken build using /MD (163)
  • blake2.cpp and crc.cpp compile issues under [Visual Studio] ARM Developer Prompt (162)
  • Failed build on Debian 8 and m68k processor (153)
  • validat1.cpp compile issue with NO_OS_DEPENDENCE defined (141)
  • Assert when running CMAC example on the wiki (138)
  • StringNarrow may violate ODR and lead to UB (127)
  • GCC and Clang warnings when compiling with -Wcast-align (122)
  • VS2008 C4996 warning due to std::reverse_copy (123)
  • Android NDK and failed compile due to g_pAssignIntToInteger (119)
  • Inflator throws end of compressed block on complete compressed data (112)
  • Crash when setting alternate alphabet for Base32 decoder (108)
  • Valgrind reports unintialized reads under 32-bit ARM (105)
  • Borland failed compile due to size_t/unsigned int mismatch in PKCS_DigestDecoration::length (102)
  • SecBlock and incorrect result during self assignment (Issue 92, Commit 605744d)
  • SecBlock and incorrect result during append when T is not a byte (Issue 92, Commit 81482d8)
  • secblock.h failed compile and typo inside assert (92)
  • Assert during ZDeflate operation (83)
  • Assert in misc.h due to NULL pointers in memcpy_s and memmove_s (79)
  • PolynomialMod2::operator<<= incorrect result (64)

File Changes

Below is a list of source files that were added or deleted at Crypto++ 5.6.4.

$ git diff-tree -r --summary CRYPTOPP_5_6_3 CRYPTOPP_5_6_4 | grep -v "change" | awk '{$2=$3=""; print $0}' | egrep '(.h|.cpp|.txt|.dat)'
create CMakeLists.txt
create TestData/fhmqv160.dat
create TestData/fhmqv256.dat
create TestData/fhmqv384.dat
create TestData/fhmqv512.dat
create TestData/hmqv160.dat
create TestData/hmqv256.dat
create TestData/hmqv384.dat
create TestData/hmqv512.dat
create TestVectors/blake2.txt
create TestVectors/blake2b.txt
create TestVectors/blake2s.txt
create TestVectors/chacha.txt
create TestVectors/dsa_rfc6979.txt
create TestVectors/keccak.txt
delete TestVectors/sha3.txt
create TestVectors/sha3_224_fips_202.txt
create TestVectors/sha3_256_fips_202.txt
create TestVectors/sha3_384_fips_202.txt
create TestVectors/sha3_512_fips_202.txt
create TestVectors/sha3_fips_202.txt
delete bench.cpp
create bench1.cpp
create blake2.cpp
create blake2.h
create chacha.cpp
create chacha.h
delete cryptlib_bds.cpp
create fhmqv.h
create hmqv.h
create keccak.cpp
create keccak.h

Below is a list of all files that were added or deleted at Crypto++ 5.6.4. The list includes Windows IDE project files and archives.

$ git diff-tree -r --summary CRYPTOPP_5_6_3 CRYPTOPP_5_6_4 | grep -v "change" | awk '{$2=$3=""; print $0}'
create CMakeLists.txt
create TestData/fhmqv160.dat
create TestData/fhmqv256.dat
create TestData/fhmqv384.dat
create TestData/fhmqv512.dat
create TestData/hmqv160.dat
create TestData/hmqv256.dat
create TestData/hmqv384.dat
create TestData/hmqv512.dat
create TestVectors/blake2.txt
create TestVectors/blake2b.txt
create TestVectors/blake2s.txt
create TestVectors/chacha.txt
create TestVectors/dsa_rfc6979.txt
create TestVectors/keccak.txt
delete TestVectors/sha3.txt
create TestVectors/sha3_224_fips_202.txt
create TestVectors/sha3_256_fips_202.txt
create TestVectors/sha3_384_fips_202.txt
create TestVectors/sha3_512_fips_202.txt
create TestVectors/sha3_fips_202.txt
create bds10.zip
delete bench.cpp
create bench1.cpp
create blake2.cpp
create blake2.h
create chacha.cpp
create chacha.h
delete cryptdll.dsp
delete cryptdll.vcproj
create cryptdll.vcxproj
create cryptdll.vcxproj.filters
create cryptest-ios.sh
delete cryptest.dsp
delete cryptest.dsw
create cryptest.nmake
delete cryptest.vcproj
create cryptest.vcxproj
create cryptest.vcxproj.filters
create cryptest.vcxproj.user
delete cryptest_bds.bdsgroup
delete cryptest_bds.bdsproj
delete cryptest_bds.bpf
delete cryptlib.dsp
delete cryptlib.vcproj
create cryptlib.vcxproj
create cryptlib.vcxproj.filters
delete cryptlib_bds.bdsproj
delete cryptlib_bds.cpp
create cryptopp-config.cmake
delete dlltest.dsp
delete dlltest.vcproj
create dlltest.vcxproj
create fhmqv.h
create hmqv.h
create keccak.cpp
create keccak.h
delete make-rdrand.cmd
create setenv-android.sh
create setenv-embedded.sh
create setenv-ios.sh
create vc60.zip
create vs2005.zip
delete vs2010.zip