Comparison of cryptography libraries
The tables below compare cryptography libraries that deal with cryptography algorithms and have application programming interface 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 | Jan 10, 2023 | |
| GnuTLS | Nikos Mavrogiannopoulos, Simon Josefsson | C | LGPL-2.1-or-later | ||
| Intel Cryptography Primitives Library | Intel | C, ASM | Apache 2.0 | March 2025 | |
| 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 | Sep 13, 2023 | |
| Mbed TLS | Arm Limited | C | Apache 2.0 | ||
| NaCl | Daniel J. Bernstein, Tanja Lange, Peter Schwabe | C | Public domain | February 21, 2011 | |
| Nettle | C | GNU GPL v2+ or GNU LGPL v3 | |||
| Network Security Services | 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.| Implementation | FIPS 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 | |||
| OpenSSL | |||
| wolfCrypt |
Key operations
Key operations include key generation algorithms, key exchange agreements, and public key cryptography standards.Public key algorithms
| Implementation | RSA | DSA | ECDSA | EdDSA | Ed448 | DH | ECDH | ECIES | ElGamal | NTRU | DSS | ML-DSA | ML-KEM |
| Botan | |||||||||||||
| Bouncy Castle | |||||||||||||
| BSAFE | |||||||||||||
| cryptlib | |||||||||||||
| Crypto++ | |||||||||||||
| GnuTLS | |||||||||||||
| Intel Cryptography Primitives Library | |||||||||||||
| Java's default JCA/JCE providers | |||||||||||||
| Libgcrypt | |||||||||||||
| libsodium | |||||||||||||
| Mbed TLS | |||||||||||||
| Nettle | |||||||||||||
| OpenSSL | |||||||||||||
| wolfCrypt |
Elliptic-curve cryptography (ECC) support
| Implementation | NIST | SECG | ECC Brainpool | Curve25519 | Curve448 | GOST R 34.10 | |
| Botan | |||||||
| Bouncy Castle | |||||||
| BSAFE | |||||||
| cryptlib | |||||||
| Crypto++ | |||||||
| GnuTLS | |||||||
| Intel Cryptography Primitives Library | |||||||
| Java's default JCA/JCE providers | |||||||
| Libgcrypt | |||||||
| libsodium | |||||||
| Mbed TLS | |||||||
| Nettle | |||||||
| OpenSSL | |||||||
| wolfCrypt |
Public key cryptography standards
| Implementation | PKCS #1 | PKCS #5, PBKDF2 | PKCS #8 | PKCS #12 | IEEE P1363 | ASN.1 |
| Botan | ||||||
| Bouncy Castle | ||||||
| BSAFE | ||||||
| cryptlib | ||||||
| Crypto++ | ||||||
| GnuTLS | ||||||
| Intel Cryptography Primitives Library | ||||||
| Java's default JCA/JCE providers | ||||||
| Libgcrypt | ||||||
| libsodium | ||||||
| Mbed TLS | ||||||
| Nettle | ||||||
| OpenSSL | ||||||
| wolfCrypt |
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.| Implementation | MD5 | SHA-1 | SHA-2 | SHA-3 | RIPEMD-160 | Tiger | Whirlpool | BLAKE2 | GOST R 34.11-94 | GOST R 34.11-2012 (Stribog) | SM3 |
| Botan | |||||||||||
| Bouncy Castle | |||||||||||
| BSAFE | |||||||||||
| cryptlib | |||||||||||
| Crypto++ | |||||||||||
| GnuTLS | |||||||||||
| Intel Cryptography Primitives Library | |||||||||||
| Java's default JCA/JCE providers | |||||||||||
| Libgcrypt | |||||||||||
| libsodium | |||||||||||
| Mbed TLS | |||||||||||
| Nettle | |||||||||||
| OpenSSL | |||||||||||
| wolfCrypt |
MAC algorithms
Comparison of implementations of message authentication code 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 and has not been changed in transit.| Implementation | HMAC-MD5 | HMAC-SHA1 | HMAC-SHA2 | Poly1305 | BLAKE2-MAC |
| Botan | |||||
| Bouncy Castle | |||||
| BSAFE | |||||
| cryptlib | |||||
| Crypto++ | |||||
| GnuTLS | |||||
| Intel Cryptography Primitives Library | |||||
| Java's default JCA/JCE providers | |||||
| Libgcrypt | |||||
| libsodium | |||||
| Mbed TLS | |||||
| Nettle | |||||
| OpenSSL | |||||
| wolfCrypt |
Block ciphers
Table compares implementations of block ciphers. Block ciphers are defined as being deterministic and operating on a set number of bits 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
| Implementation | AES | 3DES | Camellia | Blowfish | Twofish | IDEA | CAST5 | ARIA | GOST 28147-89 / GOST R 34.12-2015 | SM4 |
| Botan | ||||||||||
| Bouncy Castle | ||||||||||
| BSAFE | ||||||||||
| cryptlib | ||||||||||
| Crypto++ | ||||||||||
| GnuTLS | ||||||||||
| Intel Cryptography Primitives Library | ||||||||||
| Java's default JCA/JCE providers | ||||||||||
| Libgcrypt | ||||||||||
| libsodium | ||||||||||
| Mbed TLS | ||||||||||
| Nettle | ||||||||||
| OpenSSL | ||||||||||
| wolfCrypt |
Cipher modes
| Implementation | ECB | CBC | OFB | CFB | CTR | CCM | GCM | OCB | XTS | Stream | EAX | |
| Botan | ||||||||||||
| Bouncy Castle | ||||||||||||
| BSAFE | ||||||||||||
| cryptlib | ||||||||||||
| Crypto++ | ||||||||||||
| GnuTLS | ||||||||||||
| Intel Cryptography Primitives Library | ||||||||||||
| Java's default JCA/JCE providers | ||||||||||||
| Libgcrypt | ||||||||||||
| libsodium | ||||||||||||
| Mbed TLS | ||||||||||||
| Nettle | ||||||||||||
| OpenSSL | ||||||||||||
| wolfCrypt |
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.| Implementation | RC4 | HC-256 | Rabbit | Salsa20 | ChaCha | SEAL | Panama | WAKE | Grain | VMPC | ISAAC |
| Botan | |||||||||||
| Bouncy Castle | |||||||||||
| BSAFE | |||||||||||
| cryptlib | |||||||||||
| Crypto++ | |||||||||||
| GnuTLS | |||||||||||
| Intel Cryptography Primitives Library | |||||||||||
| Java's default JCA/JCE providers | |||||||||||
| Libgcrypt | |||||||||||
| libsodium | |||||||||||
| Mbed TLS | |||||||||||
| Nettle | |||||||||||
| OpenSSL | |||||||||||
| wolfCrypt |
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 | |||
| libsodium | |||
| Mbed TLS | |||
| OpenSSL | |||
| wolfCrypt |
General purpose CPU, platform acceleration support
| Implementation | AES-NI | SSSE3, SSE4.1 | AVX, AVX2 | AVX-512 | RDRAND | VIA PadLock | ARMv7-A NEON | ARMv8-A cryptography instructions | Power ISA v2.03 | Power ISA v2.07 | |
| Botan | |||||||||||
| BSAFE | |||||||||||
| cryptlib | |||||||||||
| Crypto++ | |||||||||||
| GnuTLS | |||||||||||
| Intel Cryptography Primitives Library | |||||||||||
| Java's default JCA/JCE providers | |||||||||||
| Libgcrypt | |||||||||||
| libsodium | |||||||||||
| OpenSSL | |||||||||||
| wolfCrypt |
Portability
| Implementation | Supported operating system | Thread safe |
| Botan | 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 : CLR 4. Kotlin API. | |
| BSAFE | Solaris, Linux, Android, FreeBSD, AIX, 32 and 64-bit Windows, macOS | |
| 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, VDK, VM/CMS, VxWorks, Win16, Win32, Win64, WinCE/PocketPC/etc, XMK | |
| Crypto++ | Unix, Win32, Win64, Android, iOS, ARM | |
| GnuTLS | Runs on most Unix platforms and Windows | ? |
| Intel Cryptography Primitives Library | Windows 10/11, Windows Server 2019/2022, Red Hat Enterprise Linux 8/9, SUSE Linux Enterprise Server 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, Win32, Win64, WinCE, and more | |
| libsodium | macOS, Linux, OpenBSD, NetBSD, FreeBSD, DragonflyBSD, Android, iOS, 32 and 64-bit Windows, 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, NextSTEP, QNX, UnixWare, SCO, AIX, 32 and 64-bit Windows, UEFI, macOS, iOS, HURD, VxWorks, uClinux, VMS, DJGPP, Haiku | |
| wolfCrypt | Win32/64, Linux, macOS, Solaris, ThreadX, VxWorks, FreeBSD, NetBSD, OpenBSD, embedded Linux, Yocto Linux, OpenEmbedded, WinCE, Haiku, OpenWRT, iPhone, 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 |