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 implementationInitiativeMain implementation languageOpen-source softwareSoftware licenseLatest release
BotanJack LloydC++YesSimplified BSD3.11.0 (March 15, 2026; 32 days ago(2026-03-15)) [±]
Bouncy CastleLegion of the Bouncy Castle Inc.Java, C#YesMIT LicenseJava1.83 / November 27, 2025; 4 months ago(2025-11-27)Java LTSBC-LJA 2.73.9 / September 19, 2025; 6 months ago(2025-09-19)Java FIPSBC-FJA 2.0.0 / July 30, 2024; 20 months ago(2024-07-30)C#2.6.2 / July 15, 2025; 9 months ago(2025-07-15)C# FIPSBC-FNA 1.0.2 / March 11, 2024; 2 years ago(2024-03-11)
Java1.83 / November 27, 2025; 4 months ago(2025-11-27)
Java LTSBC-LJA 2.73.9 / September 19, 2025; 6 months ago(2025-09-19)
Java FIPSBC-FJA 2.0.0 / July 30, 2024; 20 months ago(2024-07-30)
C#2.6.2 / July 15, 2025; 9 months ago(2025-07-15)
C# FIPSBC-FNA 1.0.2 / March 11, 2024; 2 years ago(2024-03-11)
BSAFEDell, formerly RSA SecurityJava, C, AssemblyNoProprietaryCrypto-C Micro Edition: 4.1.5 (December 17, 2020; 5 years ago(2020-12-17)) [±] Micro Edition Suite: 5.0.3 (December 3, 2024; 16 months ago(2024-12-03)) [±] Crypto Module for C: 3.0.1 (December 9, 2024; 16 months ago(2024-12-09)) [±] Crypto-J: 7.1 (July 30, 2025; 8 months ago(2025-07-30)) [±]6.3.1 (May 15, 2025; 11 months ago(2025-05-15)) [±]
cryptlibPeter GutmannCYesSleepycat License or commercial license3.4.8 (April 30, 2025; 11 months ago(2025-04-30)) [±]
Crypto++The Crypto++ projectC++YesBoost (all individual files are public domain)Jan 10, 2023 (8.9.0)
GnuTLSNikos Mavrogiannopoulos, Simon JosefssonCYesLGPL-2.1-or-later3.8.12 2026-02-09
Intel Cryptography Primitives LibraryIntelC, ASMYesApache 2.0March 2025 (2025.1.0 / 1.1.0)
Java's default JCA/JCE providersOracleJavaYesGNU GPL v2 and commercial license25.0.2 LTS (January 20, 2026; 2 months ago(2026-01-20)) [±] 21.0.10 LTS (January 20, 2026; 2 months ago(2026-01-20)) [±] 17.0.18 LTS (January 20, 2026; 2 months ago(2026-01-20)) [±] 11.0.30 LTS (January 20, 2026; 2 months ago(2026-01-20)) [±] 8u481 LTS (January 20, 2026; 2 months ago(2026-01-20)) [±]
LibreSSLOpenBSD FoundationCYesApache 1.04.2.1 2025-10-31
LibgcryptGnuPG community and g10codeCYesGNU LGPL v2.1+stable1.12.0 / January 29, 2026; 2 months ago(2026-01-29)LTS1.8.11 / November 16, 2023; 2 years ago(2023-11-16)
stable1.12.0 / January 29, 2026; 2 months ago(2026-01-29)
LTS1.8.11 / November 16, 2023; 2 years ago(2023-11-16)
libsodiumFrank DenisCYesISCSep 13, 2023 (1.0.19)
Mbed TLSArm LimitedCYesApache 2.03.0.0 (July 7, 2021; 4 years ago(2021-07-07)) [±] 2.27.0 (July 7, 2021; 4 years ago(2021-07-07)) [±] 2.16.11 (July 7, 2021; 4 years ago(2021-07-07)) [±]
NaClDaniel J. Bernstein, Tanja Lange, Peter SchwabeCYesPublic domainFebruary 21, 2011
NettleCYesGNU GPL v2+ or GNU LGPL v34.0 2026-02-05
Network Security Services (NSS)MozillaCYesMPL 2.0Standard3.84 / October 12, 2022; 3 years ago(2022-10-12)Extended Support Release3.79.1 / August 18, 2022; 3 years ago(2022-08-18)
Standard3.84 / October 12, 2022; 3 years ago(2022-10-12)
Extended Support Release3.79.1 / August 18, 2022; 3 years ago(2022-08-18)
OpenSSLThe OpenSSL ProjectCYesApache 2.04.0.0 2026-04-14
wolfCryptwolfSSL, Inc.CYesGNU GPL v3 or commercial license5.8.4 (November 20, 2025; 4 months ago(2025-11-20)) [±]

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 modeFIPS 140-2 validatedFIPS 140-3 validated
BotanNoNoNo
Bouncy CastleYesYesYes
BSAFEYesYesYes
cryptlibYesNoNo
Crypto++NoNoNo
GnuTLSNoYesIn process
Intel Cryptography Primitives LibraryNoNoNo
Java's default JCA/JCE providersNoNoNo
LibgcryptYesYesIn process
libsodiumNoNoNo
Mbed TLSNoNoNo
NaClNoNoNo
NettleNoNoNo
Network Security Services (NSS)YesYesIn process
OpenSSLYesYesYes
wolfCryptYesYesYes

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-KEM
BotanYesYesYesYesYesYesYesYesYesNoNoYesYes
Bouncy CastleYesYesYesYesYesYesYesYesYesYesYesYesYes
BSAFEYesYesYesYesYesYesYesYesNoNoNoYesNo
cryptlibYesYesYesNoNoYesYesNoYesNoYes
Crypto++YesYesYesNoNoYesYesYesYesNoYes
GnuTLSYesNoNoNoNoNoNoNoNoNoNo
Intel Cryptography Primitives LibraryYesYesYesYesNoYesYesNoNoNoYes
Java's default JCA/JCE providersYesYesYesYesYesYesYesNoNoNoYes
LibgcryptYesYesYesYesYesYesYesNoYesNoYes
libsodiumNoNoNoYesNoNoNoNoNoNoNo
Mbed TLSYesYesYesNoNoYesYesNoNoNoNoNoNo
NettleYesYesNoYesNoNoNoNoNoNoNo
OpenSSLYesYesYesYesYesYesYesNoNoNoNoYesYes
wolfCryptYesYesYesYesYesYesYesYesNoYesYesYesYes

Elliptic-curve cryptography (ECC) support

ImplementationNISTSECGECC BrainpoolCurve25519Curve448GOST R 34.10
BotanYesYesYesYesYesYesYes
Bouncy CastleYesYesYesYesYesYesYes
BSAFEYesYesNoYesYesNoNo
cryptlibYesYesYesNoNoNoNo
Crypto++YesYesYesYesNoNoNo
GnuTLSYesNoNoNoNoNoNo
Intel Cryptography Primitives LibraryYesNoNoYesNoNoYes
Java's default JCA/JCE providersYesYesNoYesYesNoNo
LibgcryptYesYesYesYesYesYesYes
libsodiumYesNoNoYesYesNoNo
Mbed TLSYesYesYesYesNoNoNo
NettleYesPartialNoYesNoNoNo
OpenSSLYesYesYesYesYesYesYes
wolfCryptYesYesYesYesYesNoYes

Public key cryptography standards

ImplementationPKCS #1PKCS #5, PBKDF2PKCS #8PKCS #12IEEE P1363ASN.1
BotanYesYesYesNoYesYes
Bouncy CastleYesYesYesYesYesYes
BSAFEYesYesYesYesNoYes
cryptlibYesYesYesYesNoYes
Crypto++YesYesYesNoYesYes
GnuTLS
Intel Cryptography Primitives LibraryYesNoNoNoYesNo
Java's default JCA/JCE providersYesYesYesYesYesYes
LibgcryptYesYesYesYesYesYes
libsodiumNoNoNoNoNoNo
Mbed TLSYesNoYesYesNoYes
NettleYesYesNoNoNoNo
OpenSSLYesYesYesYesNoYes
wolfCryptYesYesYesYesNoYes

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)SM3
BotanYesYesYesYesYesYesYesYesYesYesYes
Bouncy CastleYesYesYesYesYesYesYesYesYesYesYes
BSAFEYesYesYesYesYesNoNoNoYesNoNo
cryptlibYesYesYesYesYesNoYesNoNoNoNo
Crypto++YesYesYesYesYesYesYesYesYesNoYes
GnuTLS
Intel Cryptography Primitives LibraryYesYesYesYesNoNoNoNoNoNoYes
Java's default JCA/JCE providersYesYesYesYesNoNoNoNoNoNoNo
LibgcryptYesYesYesYesYesYesYesYesYesYesYes
libsodiumNoNoYesNoNoNoNoYesNoNoNo
Mbed TLSYesYesYesYesYesNoNoNoNoNoNo
NettleYesYesYesYesYesNoNoNoYesNoNo
OpenSSLYesYesYesYesYesYesYesYesYesNoYes
wolfCryptYesYesYesYesYesNoNoYesNoNoYes

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-MAC
BotanYesYesYesYesYes
Bouncy CastleYesYesYesYesYes
BSAFEYesYesYesYesNo
cryptlibYesYesYesYesNo
Crypto++YesYesYesYesYes
GnuTLS
Intel Cryptography Primitives LibraryYesYesYesNoNo
Java's default JCA/JCE providersYesYesYesNoNo
LibgcryptYesYesYesYesYes
libsodiumNoNoYesYesYes
Mbed TLSYesYesYesNoNo
NettleYesYesYesYesNo
OpenSSLYesYesYesYesYes
wolfCryptYesYesYesYesYes

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)SM4
BotanYesYesYesYesYesYesYesYesYesYes
Bouncy CastleYesYesYesYesYesYesYesYesYesYes
BSAFEYesYesYesNoNoNoNoYesNoNo
cryptlibYesYesNoYesNoYesYesNoNoNo
Crypto++YesYesYesYesYesYesYesYesPartialYes
GnuTLSYesNoYesNoNoNoNoNoNoNo
Intel Cryptography Primitives LibraryYesYesNoNoNoNoNoNoNoYes
Java's default JCA/JCE providersYesYesNoYesNoNoNoNoNoNo
LibgcryptYesYesYesYesYesYesYesYesYesYes
libsodiumPartialNoNoNoNoNoNoNoNoNo
Mbed TLSYesYesYesYesNoNoNoNoNoNo
NettleYesYesYesYesNoNoNoNoNoNo
OpenSSLYesYesYesYesNoYesYesYesYesYes
wolfCryptYesYesYesNoNoYesNoYesNoYes

Cipher modes

ImplementationECBCBCOFBCFBCTRCCMGCMOCBXTSStreamEAX
BotanNoYesYesYesYesYesYesYesYesYesYesYes
Bouncy CastleYesYesYesYesYesYesYesYesNoYesYesYes
BSAFEYesYesYesYesYesYesYesNoYesYesYesNo
cryptlibYesYesYesYesYesNoYesNoNoNoNoNo
Crypto++YesYesYesYesYesYesYesNoYesNoYesYes
GnuTLS
Intel Cryptography Primitives LibraryYesYesYesYesYesYesYesNoYesNoYesNo
Java's default JCA/JCE providersYesYesYesYesYesNoYesNoNoYesYesNo
LibgcryptYesYesYesYesYesYesYesYesYesYesYesYes
libsodiumNoNoNoNoYesNoYesNoNoNoNoNo
Mbed TLSYesYesNoYesYesYesYesNoNoNoNoNo
NettleYesYesNoNoYesYesYesNoNoNoNoNo
OpenSSLYesYesYesYesYesYesYesYesYesYesYesNo
wolfCryptYesYesYesYesYesYesYesNoYesYesYesYes

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-256RabbitSalsa20ChaChaSEALPanamaWAKEGrainVMPCISAAC
BotanYesNoNoYesYesNoNoNoNoNoNo
Bouncy CastleYesYesNoYesYesNoNoNoYesYesYes
BSAFEYesNoNoNoYesNoNoNoNoNoNo
cryptlibYesNoNoNoYesNoNoNoNoNoNo
Crypto++YesYesYesYesYesYesYesYesNoNoNo
GnuTLS
Intel Cryptography Primitives LibraryNoNoNoNoNoNoNoNoNoNoNo
Java's default JCA/JCE providersYesNoNoNoYesNoNoNoNoNoNo
LibgcryptYesNoNoYesYesNoNoNoNoNoNo
libsodiumNoNoNoYesYesNoNoNoNoNoNo
Mbed TLSYesNoNoNoYesNoNoNoNoNoNo
NettleYesNoNoYesYesNoNoNoNoNoNo
OpenSSLYesNoNoNoYesNoNoNoNoNoNo
wolfCryptYesNoNoYesYesNoNoNoNoNoNo

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

ImplementationPKCS #11PC/SCCCID
BotanYesNoNo
Bouncy CastleYesNoNo
BSAFEYesNoNo
cryptlibYesNoNo
Crypto++NoNoNo
GnuTLSYesNoNo
Intel Cryptography Primitives LibraryNoNoNo
Java's default JCA/JCE providersYesNoNo
LibgcryptYesYesYes
libsodiumNoNoNo
Mbed TLSYesNoNo
OpenSSLYesNoNo
wolfCryptYesNoNo

General purpose CPU, platform acceleration support

ImplementationAES-NISSSE3, SSE4.1AVX, AVX2AVX-512RDRANDVIA PadLockARMv7-A NEONARMv8-A cryptography instructionsPower ISA v2.03 (AltiVec)Power ISA v2.07 (e.g., POWER8 and later)
BotanYesYesYesYesYesNoNoYesYesYesYes
BSAFEYesYesYesNoYesNoNoNoYesNoNo
cryptlibYesYesYesNoYesYesNoNoNoNoNo
Crypto++YesYesYesNoYesYesNoYesYesYesYes
GnuTLSYesNoNoNoNoYesNoNoNoNoNo
Intel Cryptography Primitives LibraryYesYesYesYesYesNoNoNoNoNoNo
Java's default JCA/JCE providersYesYesYesYesYesNoNoNoYesNoYes
LibgcryptYesYesYesYesYesYesNoYesYesNoYes
libsodiumYesYesYesNoNoNoNoNoNoNoNo
OpenSSLYesYesYesYesYesYesNoYesYesYesYes
wolfCryptYesYesYesNoYesNoYesYesYesNoNo

Code size and code to comment ratio

ImplementationSource code size (kSLOC = 1000 lines of source code)Code to comment lines ratio
Botan1334.55
Bouncy Castle13595.26
BSAFE Crypto-J2711.3
cryptlib2412.66
Crypto++1155.74
GnuTLS3637.30
Java's default JCA/JCE providers
Libgcrypt2166.27
libsodium4421.92
Mbed TLS10533.9
Nettle1114.08
OpenSSL4724.41
wolfCrypt395.69

Portability

ImplementationSupported operating systemThread safe
BotanLinux, Windows, macOS, Android, iOS, FreeBSD, NetBSD, OpenBSD, DragonflyBSD, Solaris, AIX, QNX, HaikuYes
Bouncy CastleGeneral 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).
BSAFESolaris, Linux, Android, FreeBSD, AIX, 32 and 64-bit Windows, macOS (Darwin)Yes
cryptlibAMX, 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, XMKYes
Crypto++Unix (AIX, OpenBSD, Linux, MacOS, Solaris, etc.), Win32, Win64, Android, iOS, ARMYes
GnuTLSRuns on most Unix platforms and Windows?
Intel Cryptography Primitives LibraryWindows 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 12Yes
LibgcryptAll 32- and 64-bit Unix Systems (Linux, FreeBSD, NetBSD, macOS etc.), Win32, Win64, WinCE, and moreYes
libsodiummacOS, Linux, OpenBSD, NetBSD, FreeBSD, DragonflyBSD, Android, iOS, 32 and 64-bit Windows (Visual Studio, MinGW, C++ Builder), NativeClient, QNX, JavaScript, AIX, MINIX, SolarisYes
Mbed TLSWin32/64, Unix Systems, embedded Linux, Micrium's μC/OS, FreeRTOS?
OpenSSLSolaris, 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), HaikuYes
wolfCryptWin32/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, ZephyrYes