The tables below compare cryptography libraries that deal with cryptography algorithms and have application programming interface (API) function calls to each of the supported features.
Cryptography libraries
Name of implementation Initiative Main implementation language Open-source software Software license Latest release Botan Jack Lloyd C++ Simplified BSD Bouncy Castle Legion of the Bouncy Castle Inc. Java, C# MIT License BSAFE Dell, formerly RSA Security Java, C, Assembly Crypto-C Micro Edition: Micro Edition Suite: Crypto Module for C: Crypto-J: cryptlib Peter Gutmann C Sleepycat License or commercial license Crypto++ The Crypto++ project C++ Boost (all individual files are public domain) Jan 10, 2023 (8.9.0) GnuTLS Nikos Mavrogiannopoulos, Simon Josefsson C LGPL-2.1-or-later Intel Cryptography Primitives Library Intel C, ASM Apache 2.0 April 2026 (2.0.0) Java's default JCA/JCE providers Oracle Java GNU GPL v2 and commercial license LibreSSL OpenBSD Foundation C Apache 1.0 Libgcrypt GnuPG community and g10code C GNU LGPL v2.1+ libsodium Frank Denis C ISC Apr 9, 2026 (1.0.22) Mbed TLS Arm Limited C Apache 2.0 NaCl Daniel J. Bernstein, Tanja Lange, Peter Schwabe C Public domain February 21, 2011Downloading and installing NaCl, Bernstein, Lange, Schwabe, retrieved 2017-05-22 Nettle C GNU GPL v2+ or GNU LGPL v3 Network Security Services (NSS) Mozilla C MPL 2.0 OpenSSL The OpenSSL Project C Apache 2.0 wolfCrypt wolfSSL, Inc. C GNU GPL v3 or commercial license
FIPS 140 This table denotes, if a cryptography library provides the technical requisites for FIPS 140, and the status of their FIPS 140 certification (according to NIST's CMVP search, modules in process list and implementation under test list). ImplementationFIPS 140-2 mode FIPS 140-2 validated FIPS 140-3 validated Botan Bouncy Castle BSAFE cryptlib Crypto++ GnuTLS Intel Cryptography Primitives Library Java's default JCA/JCE providers Libgcrypt libsodium Mbed TLS NaCl Nettle Network Security Services (NSS) OpenSSL wolfCrypt
Key operations Key operations include key generation algorithms, key exchange agreements, and public key cryptography standards.
Public key algorithms
ImplementationRSADSAECDSAEdDSAEd448DHECDHECIESElGamalNTRU(IEEE P1363.1)DSSML-DSAML-KEMBotanBouncy CastleBSAFEcryptlibCrypto++GnuTLSIntel Cryptography Primitives LibraryJava's default JCA/JCE providersLibgcryptlibsodiumMbed TLSNettleOpenSSLwolfCrypt
Elliptic-curve cryptography (ECC) support
ImplementationNISTSECGECC BrainpoolCurve25519Curve448GOST R 34.10SM2BotanBouncy CastleBSAFEcryptlibCrypto++GnuTLSIntel Cryptography Primitives Library Java's default JCA/JCE providersLibgcryptlibsodiumMbed TLSNettleOpenSSLwolfCrypt
Public key cryptography standards
ImplementationPKCS #1PKCS #5, PBKDF2PKCS #8PKCS #12IEEE P1363ASN.1BotanBouncy CastleBSAFEcryptlibCrypto++GnuTLSIntel Cryptography Primitives LibraryJava's default JCA/JCE providersLibgcryptlibsodiumMbed TLSNettleOpenSSLwolfCrypt
Hash functions Comparison of supported cryptographic hash functions. Here hash functions are defined as taking an arbitrary length message and producing a fixed size output that is virtually impossible to use for recreating the original message.
ImplementationMD5SHA-1SHA-2SHA-3RIPEMD-160TigerWhirlpoolBLAKE2GOST R 34.11-94(aka GOST 34.311-95)GOST R 34.11-2012(Stribog)SM3BotanBouncy CastleBSAFEcryptlibCrypto++GnuTLSIntel Cryptography Primitives LibraryJava's default JCA/JCE providersLibgcryptlibsodiumMbed TLSNettleOpenSSLwolfCrypt
MAC algorithms Comparison of implementations of message authentication code (MAC) algorithms. A MAC is a short piece of information used to authenticate a message—in other words, to confirm that the message came from the stated sender (its authenticity) and has not been changed in transit (its integrity).
ImplementationHMAC-MD5HMAC-SHA1HMAC-SHA2Poly1305BLAKE2-MACBotanBouncy CastleBSAFEcryptlibCrypto++GnuTLSIntel Cryptography Primitives LibraryJava's default JCA/JCE providersLibgcryptlibsodiumMbed TLSNettleOpenSSLwolfCrypt
Block ciphers Table compares implementations of block ciphers. Block ciphers are defined as being deterministic and operating on a set number of bits (termed a block) using a symmetric key. Each block cipher can be broken up into the possible key sizes and block cipher modes it can be run with.
Block cipher algorithms
ImplementationAES3DESCamelliaBlowfishTwofishIDEACAST5ARIAGOST 28147-89/ GOST R 34.12-2015(Magma & Kuznyechik)SM4BotanBouncy CastleBouncy Castle Specifications, bouncycastle.org, retrieved 2018-04-10BSAFEcryptlibcryptlib Encryption Toolkit, Peter Gutmann, retrieved 2015-11-28Crypto++GnuTLSIntel Cryptography Primitives LibraryJava's default JCA/JCE providersLibgcryptlibsodiumMbed TLSNettleOpenSSLwolfCrypt
Cipher modes
ImplementationECBCBCOFBCFBCTRCCMGCMOCBXTSAES-WrapStreamEAXBotanBouncy CastleBSAFEcryptlibCrypto++GnuTLSIntel Cryptography Primitives LibraryJava's default JCA/JCE providersLibgcryptlibsodiumMbed TLSNettleOpenSSLwolfCrypt
Stream ciphers The table below shows the support of various stream ciphers. Stream ciphers are defined as using plain text digits that are combined with a pseudorandom cipher digit stream. Stream ciphers are typically faster than block ciphers and may have lower hardware complexity, but may be more susceptible to attacks.
ImplementationRC4HC-256RabbitSalsa20ChaChaSEALPanamaWAKEGrainVMPCISAACBotanBouncy CastleBSAFEcryptlibCrypto++GnuTLSIntel Cryptography Primitives LibraryJava's default JCA/JCE providersLibgcryptlibsodiumMbed TLSNettleOpenSSLwolfCrypt
Hardware-assisted support These tables compare the ability to use hardware enhanced cryptography. By using the assistance of specific hardware, the library can achieve greater speeds and/or improved security than otherwise.
Smart card, SIM, HSM protocol support
Implementation PKCS #11 PC/SC CCID Botan Bouncy Castle BSAFE cryptlib Crypto++ GnuTLS Intel Cryptography Primitives Library Java's default JCA/JCE providers Libgcrypt With Scute, scute.org With GnuPG's SCdaemon & gpg-agent, gnupg.org libsodium Mbed TLS OpenSSL With an libp11 engine wolfCrypt
General purpose CPU, platform acceleration support
Implementation AES-NI SSSE3, SSE4.1 AVX, AVX2 AVX-512 RDRAND VIA PadLock Intel QuickAssist ARMv7-A NEON ARMv8-A cryptography instructions Power ISA v2.03 (AltiVec) Power ISA v2.07 (e.g., POWER8 and later) Botan BSAFE cryptlib Crypto++ GnuTLS Intel Cryptography Primitives Library Java's default JCA/JCE providers Libgcrypthwfeatures.c, dev.gnupg.org libsodium OpenSSL wolfCrypt
Code size and code to comment ratio Implementation Source code size (kSLOC = 1000 lines of source code) Code to comment lines ratioBotan133Language Analysis of Botan, OpenHub.net, retrieved 2018-07-184.55Bouncy Castle1359Language Analysis of Bouncy Castle, OpenHub.net, retrieved 2015-12-235.26BSAFE Crypto-J2711.3cryptlib2412.66Crypto++115Language Analysis of Crypto++, OpenHub.net, retrieved 2018-07-185.74GnuTLS363Language Analysis of GnuTLS, OpenHub.net, retrieved 2020-09-157.30Java's default JCA/JCE providersLibgcrypt216Language Analysis of Libgcrypt, OpenHub.net, retrieved 2015-12-236.27libsodium44Language Analysis of libsodium, OpenHub.net, retrieved 2017-05-0721.92Mbed TLS105Language Analysis of mbed-tls, OpenHub.net, retrieved 2019-09-1533.9Nettle111Language Analysis of Nettle, OpenHub.net, retrieved 2015-12-234.08OpenSSL472Language Analysis of OpenSSL, OpenHub.net, retrieved 2017-05-074.41wolfCrypt395.69
Portability
Implementation Supported operating system Thread safeBotan Linux, Windows, macOS, Android, iOS, FreeBSD, NetBSD, OpenBSD, DragonflyBSD, Solaris, AIX, QNX, Haiku Bouncy Castle General Java API: J2ME, Java Runtime Environment 1.1+, Android. Java FIPS API: Java Runtime 1.5+, Android. C# API (General & FIPS): CLR 4. Kotlin API (JVM Based). BSAFE Solaris, Linux, Android, FreeBSD, AIX, 32 and 64-bit Windows, macOS (Darwin) cryptlib AMX, ARINC 653, BeOS, ChorusOS, CMSIS-RTOS/mbed-rtos, DOS, DOS32, eCOS, embOS, FreeRTOS/OpenRTOS, uItron, MQX, MVS, Nucleus, OS/2, Palm OS, QNX Neutrino, RTEMS, SMX, Tandem NonStop, Telit, ThreadX, uC/OS II, Unix (AIX, FreeBSD, HP-UX, Linux, macOS, Solaris, etc.), VDK, VM/CMS, VxWorks, Win16, Win32, Win64, WinCE/PocketPC/etc, XMK Crypto++ Unix (AIX, OpenBSD, Linux, MacOS, Solaris, etc.), Win32, Win64, Android, iOS, ARM GnuTLS Runs on most Unix platforms and WindowsGnuTLS - features, GnuTLS.org, retrieved 2022-09-15 ? Intel Cryptography Primitives Library Windows 10/11, Windows Server 2019/2022, Red Hat Enterprise Linux (RHEL) 8/9, SUSE Linux Enterprise Server (SLES) 15 SP4 / SP5 / SP6, Ubuntu 22.04 LTS / 24.04 LTS, Rocky Linux 9, Fedora 39 / 40, Debian 12 Libgcrypt All 32- and 64-bit Unix Systems (Linux, FreeBSD, NetBSD, macOS etc.), Win32, Win64, WinCE, and more GnuPG documentation: Libgcrypt overview - thread safety, GnuPG.org, retrieved 2016-04-16 libsodium macOS, Linux, OpenBSD, NetBSD, FreeBSD, DragonflyBSD, Android, iOS, 32 and 64-bit Windows (Visual Studio, MinGW, C++ Builder), NativeClient, QNX, JavaScript, AIX, MINIX, Solaris Mbed TLS Win32/64, Unix Systems, embedded Linux, Micrium's μC/OS, FreeRTOS ? OpenSSL Solaris, IRIX, HP-UX, MPE/iX, Tru64, Linux, Android, BSD (OpenBSD, NetBSD, FreeBSD, DragonflyBSD), NextSTEP, QNX, UnixWare, SCO, AIX, 32 and 64-bit Windows (Visual Studio, MinGW, UWIN, CygWin), UEFI, macOS (Darwin), iOS, HURD, VxWorks, uClinux, VMS, DJGPP (DOS), Haiku wolfCrypt Win32/64, Linux, macOS, Solaris, ThreadX, VxWorks, FreeBSD, NetBSD, OpenBSD, embedded Linux, Yocto Linux, OpenEmbedded, WinCE, Haiku, OpenWRT, iPhone (iOS), Android, Nintendo Wii and GameCube through DevKitPro, QNX, MontaVista, NonStop, TRON/ITRON/μITRON, Micrium's μC/OS, FreeRTOS, SafeRTOS, Freescale MQX, Nucleus, TinyOS, HP-UX, AIX, ARC MQX, TI-RTOS, uTasker, embOS, INtime, Mbed, uT-Kernel, RIOT, CMSIS-RTOS, FROSTED, Green Hills INTEGRITY, Keil RTX, TOPPERS, PetaLinux, Apache Mynewt, PikeOS, Deos, Azure Sphere OS, Zephyr
References