Comparison of cryptography libraries
{{Short description|None}}
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
{{sort-under}}
class="wikitable sortable sort-under" style="text-align: left" | |||||
Name of implementation || Initiative || Main implementation language || Open-source software || Software license || Latest release | |||||
---|---|---|---|---|---|
Botan | Jack Lloyd | C++ | {{Yes}} | Simplified BSD | {{Latest stable software release/Botan}} |
Bouncy Castle | Legion of the Bouncy Castle Inc. | Java, C# | {{Yes}} | MIT License | {{Latest stable software release/Bouncy Castle}} |
BSAFE | Dell, formerly RSA Security | Java, C, Assembly | {{No}} | Proprietary | Crypto-C Micro Edition: {{Latest stable software release/BSAFE Crypto-C Micro Edition}} Micro Edition Suite: {{Latest stable software release/BSAFE Micro Edition Suite}} Crypto-J: {{Latest stable software release/RSA BSAFE Crypto-J}} |
cryptlib | Peter Gutmann | C | {{Yes}} | Sleepycat License or commercial license | {{Latest stable software release/cryptlib}} |
Crypto++ | The Crypto++ project | C++ | {{Yes}} | Boost (all individual files are public domain) | Jan 10, 2023 (8.9.0) |
GnuTLS | Nikos Mavrogiannopoulos, Simon Josefsson | C | {{Yes}} | LGPL-2.1-or-later | {{wikidata|property|preferred|references|edit|Q1533305|P348|P548=Q2804309}} {{wikidata|qualifier|raw|preferred|single|Q1533305|P348|P548=Q2804309|P577}} |
Intel Cryptography Primitives Library | Intel | C, ASM | {{Yes}} | Apache 2.0 | March 2025 (2025.1.0 / 1.1.0) |
Java's default JCA/JCE providers | Oracle | Java | {{Yes}} | GNU GPL v2 and commercial license | {{Latest stable software release/Java (software platform)}} |
LibreSSL | OpenBSD Foundation | C | {{Yes}} | Apache 1.0 | {{wikidata|property|preferred|references|edit|Q16590706|P348|P548=Q2804309}} {{wikidata|qualifier|raw|preferred|single|Q16590706|P348|P548=Q2804309|P577}} |
Libgcrypt | GnuPG community and g10code | C | {{Yes}} | GNU LGPL v2.1+ | {{Latest stable software release/Libgcrypt}} |
|libsodium | Frank Denis | C | {{Yes}} | ISC | Sep 13, 2023 (1.0.19) |
Mbed TLS | Arm Limited | C | {{Yes}} | Apache 2.0 | {{Latest stable software release/mbed TLS}} |
NaCl | Daniel J. Bernstein, Tanja Lange, Peter Schwabe | C | {{Yes}} | Public domain | February 21, 2011[https://nacl.cr.yp.to/install.html Downloading and installing NaCl], Bernstein, Lange, Schwabe, retrieved 2017-05-22 |
Nettle | C | {{Yes}} | GNU GPL v2+ or GNU LGPL v3 | {{wikidata|property|preferred|references|edit|Q7000521|P348|P548=Q2804309}} {{wikidata|qualifier|raw|preferred|single|Q7000521|P348|P548=Q2804309|P577}} | |
Network Security Services (NSS) | Mozilla | C | {{Yes}} | MPL 2.0 | {{Latest stable software release/Network Security Services}} |
OpenSSL | The OpenSSL Project | C | {{Yes}} | Apache 2.0 | {{wikidata|property|preferred|references|edit|Q1052790|P348|P548=Q2804309}} {{wikidata|qualifier|raw|preferred|single|Q1052790|P348|P548=Q2804309|P577}} |
wolfCrypt | wolfSSL, Inc. | C | {{Yes}} | GNU GPL v2 or commercial license | {{Latest stable software release/wolfSSL}} |
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,{{Cite web |last=Computer Security Division |first=Information Technology Laboratory |date=2016-10-11 |title=Search - Cryptographic Module Validation Program {{!}} CSRC {{!}} CSRC |url=https://csrc.nist.gov/projects/cryptographic-module-validation-program/validated-modules/search |access-date=2024-11-22 |website=CSRC {{!}} NIST |language=EN-US}} modules in process list{{Cite web |last=Computer Security Division |first=Information Technology Laboratory |date=2016-10-11 |title=Modules In Process List - Cryptographic Module Validation Program {{!}} CSRC {{!}} CSRC |url=https://csrc.nist.gov/Projects/cryptographic-module-validation-program/modules-in-process/Modules-In-Process-List |access-date=2024-11-22 |website=CSRC {{!}} NIST |language=EN-US}} and implementation under test list).{{Cite web |title=Cryptographic Module Validation Program CMVP |url=https://csrc.nist.gov/Projects/cryptographic-module-validation-program/modules-in-process/IUT-List |website=csrc.nist.gov|date=11 October 2016 }}
{{Reflist|group=lower-alpha|refs=
Intel Cryptography Primitives Library is not FIPS 140-3 validated but FIPS 140-3 compliant.
}}
Key operations
Key operations include key generation algorithms, key exchange agreements, and public key cryptography standards.
= Public key algorithms =
{{Further|Public-key cryptography}}
class="wikitable sortable sort-under" style="text-align: left" |
Implementation
!RSA !DSA !DH !ECDH !DSS |
---|
Botan
|{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{No}} |{{Yes}} |
Bouncy Castle
|{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |
BSAFE
|{{Yes}} |{{Yes}} |{{Yes}} |{{No}} |{{No}} |{{Yes}} |{{Yes}} |{{Yes}} |{{No}} |{{No}} |{{No}} |
cryptlib
|{{Yes}} |{{Yes}} |{{Yes}} |{{No}} |{{No}} |{{Yes}} |{{Yes}} |{{No}} |{{Yes}} |{{No}} |{{Yes}} |
Crypto++
|{{Yes}} |{{Yes}} |{{Yes}} |{{No}} |{{No}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{No}} |{{Yes}} |
GnuTLS
|{{Yes}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |
Intel Cryptography Primitives Library
|{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{No}} |{{Yes}} |{{Yes}} |{{No}} |{{No}} |{{No}} |{{Yes}} |
Java's default JCA/JCE providers
|{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{No}} |{{No}} |{{No}} |{{Yes}} |
Libgcrypt
|{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{No}} |{{Yes}} |{{No}} |{{Yes}} |
libsodium
|{{No}} |{{No}} |{{No}} |{{Yes}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |
Mbed TLS
|{{Yes}} |{{Yes}} |{{Yes}} |{{No}} |{{No}} |{{Yes}} |{{Yes}} |{{No}} |{{No}} |{{No}} |{{No}} |
Nettle
|{{Yes}} |{{Yes}} |{{No}} |{{Yes}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |
OpenSSL
|{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{No}} |{{No}} |{{No}} |{{No}} |
wolfCrypt
|{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{No}} |{{Yes}} |{{Yes}} |
{{Reflist|group=lower-alpha|refs=
By using the lower level interface.
}}
= Elliptic-curve cryptography (ECC) support =
{{Further|Elliptic-curve cryptography}}
class="wikitable sortable sort-under" style="text-align: left" |
Implementation
!NIST !SECG !GOST R 34.10{{IETF RFC|7091}} ![https://tools.ietf.org/html/draft-shen-sm2-ecdsa-02 SM2] |
---|
Botan
|{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |
Bouncy Castle
|{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |
BSAFE
|{{Yes}} |{{Yes}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |
cryptlib
|{{Yes}} |{{Yes}} |{{Yes}} |{{No}} |{{No}} |{{No}} |{{No}} |
Crypto++
|{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{No}} |{{No}} |{{No}} |
GnuTLS
|{{Yes}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |
Intel Cryptography Primitives Library
|{{Yes}} |{{No}} |{{No}} |{{No}} |{{No}} |{{Yes}} |
Java's default JCA/JCE providers
|{{Yes}} |{{Yes}} |{{No}} |{{Yes}} |{{Yes}} |{{No}} |{{No}} |
Libgcrypt
|{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |
libsodium
|{{Yes}} |{{No}} |{{No}} |{{Yes}} |{{Yes}} |{{No}} |{{No}} |
Mbed TLS
|{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{No}} |{{No}} |{{No}} |
Nettle
|{{Yes}} |{{Partial}} |{{No}} |{{Yes}} |{{No}} |{{No}} |{{No}} |
OpenSSL
|{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |
wolfCrypt
|{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{No}} |{{Yes}} |
{{Reflist|group=lower-alpha|refs=
}}
= Public key cryptography standards =
{{Further|PKCS}}
class="wikitable sortable sort-under" style="text-align: left" |
Implementation |
---|
Botan
|{{Yes}} |{{Yes}} |{{Yes}} |{{No}} |{{Yes}} |{{Yes}} |
Bouncy Castle
|{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |
BSAFE Crypto-J
|{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{No}} |{{Yes}} |
cryptlib
|{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{No}} |{{Yes}} |
Crypto++
|{{Yes}} |{{Yes}} |{{No}} |{{Yes}} |{{Yes}} |
GnuTLS
| | | | | | |
Intel Cryptography Primitives Library
|{{Yes}} |{{No}} |{{No}} |{{No}} |{{Yes}} |{{No}} |
Java's default JCA/JCE providers
|{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |
Libgcrypt
|{{Yes}} |
libsodium
|{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |
Mbed TLS
|{{Yes}} |{{No}} |{{Yes}} |{{Yes}} |{{No}} |{{Yes}} |
Nettle
|{{Yes}} |{{Yes}} |{{No}} |{{No}} |{{No}} |{{No}} |
OpenSSL
|{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{No}} |{{Yes}} |
wolfCrypt
|{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{No}} |{{Yes}} |
{{Reflist|group=lower-alpha|refs=
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.
class="wikitable sortable sort-under" style="text-align: left" |
Implementation
!MD5 !GOST R 34.11-94{{IETF RFC|5831}} !GOST R 34.11-2012 !SM3 |
---|
Botan
|{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |
Bouncy Castle
|{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |
BSAFE Crypto-J
|{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |
cryptlib
|{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{No}} |{{Yes}} |{{No}} |{{No}} |{{No}} |{{No}} |
Crypto++
|{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{No}} |{{Yes}} |
GnuTLS
| | | | | | | | | | | |
Intel Cryptography Primitives Library
|{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |{{Yes}} |
Java's default JCA/JCE providers
|{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |
Libgcrypt
|{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |
libsodium
|{{No}} |{{No}} |{{Yes}} |{{No}} |{{No}} |{{No}} |{{No}} |{{Yes}} |{{No}} |{{No}} |{{No}} |
Mbed TLS
|{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |
Nettle
|{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{No}} |{{No}} |{{No}} |{{Yes}} |{{No}} |{{No}} |
OpenSSL
|{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{No}} |{{Yes}} |
wolfCrypt
|{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{No}} |{{No}} |{{Yes}} |{{No}} |{{No}} |{{Yes}} |
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).
class="wikitable sortable sort-under" style="text-align: left" |
Implementation
!HMAC-SHA1 !HMAC-SHA2 |
---|
Botan
|{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |
Bouncy Castle
|{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |
BSAFE Crypto-J
|{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{No}} |
cryptlib
|{{Yes}} |{{Yes}} |{{Yes}} |{{No}} |{{No}} |
Crypto++
|{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |
GnuTLS
| | | | | |
Intel Cryptography Primitives Library
|{{Yes}} |{{Yes}} |{{Yes}} |{{No}} |{{No}} |
Java's default JCA/JCE providers
|{{Yes}} |{{Yes}} |{{Yes}} |{{No}} |{{No}} |
Libgcrypt
|{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |
libsodium
|{{No}} |{{No}} |{{Yes}} |{{Yes}} |{{Yes}} |
Mbed TLS
|{{Yes}} |{{Yes}} |{{Yes}} |{{No}} |{{No}} |
Nettle
|{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{No}} |
OpenSSL
|{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |
wolfCrypt
|{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |
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 =
{{Further|Block cipher}}
class="wikitable sortable sort-under" style="text-align: left; font-size: smaller" |
Implementation
!AES !3DES !IDEA !ARIA !GOST 28147-89{{IETF RFC|5830}} !SM4 |
---|
Botan
|{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |
Bouncy Castle[https://www.bouncycastle.org/specifications.html Bouncy Castle Specifications], bouncycastle.org, retrieved 2018-04-10
|{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |
BSAFE Crypto-J
|{{Yes}} |{{Yes}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |
cryptlib[https://www.cs.auckland.ac.nz/~pgut001/cryptlib/ cryptlib Encryption Toolkit], Peter Gutmann, retrieved 2015-11-28
|{{Yes}} |{{Yes}} |{{No}} |{{Yes}} |{{No}} |{{Yes}} |{{Yes}} |{{No}} |{{No}} |{{No}} |
Crypto++
|{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |
GnuTLS
|{{Yes}} |{{No}} |{{Yes}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |
Intel Cryptography Primitives Library
|{{Yes}} |{{Yes}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |{{Yes}} |
Java's default JCA/JCE providers
|{{Yes}} |{{Yes}} |{{No}} |{{Yes}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |
Libgcrypt
|{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |
libsodium
|{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |
Mbed TLS
|{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |
Nettle
|{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |
OpenSSL
|{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{No}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |
wolfCrypt
|{{Yes}} |{{Yes}} |{{Yes}} |{{No}} |{{No}} |{{Yes}} |{{No}} |{{Yes}} |{{No}} |{{Yes}} |
{{Reflist|group=lower-alpha|refs=
Crypto++ only supports GOST 28147-89, but not GOST R 34.12-2015.
libsodium only supports AES-256, but not AES-128 or AES-192.
}}
= Cipher modes =
{{Further|Block cipher mode of operation}}
class="wikitable sortable sort-under" style="text-align: left" |
Implementation
!ECB !CBC !OFB !CFB !CTR !CCM !GCM !OCB !XTS ![https://tools.ietf.org/html/rfc3394 AES-Wrap] !EAX |
---|
Botan
|{{No}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |
Bouncy Castle
|{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{No}} |{{Yes}} |{{Yes}} |{{Yes}} |
BSAFE
|{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{No}} |{{Yes}} |{{Yes}} |{{Yes}} |{{No}} |
cryptlib
|{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{No}} |{{No}} |{{Yes}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |
Crypto++
|{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{No}} |{{Yes}} |{{No}} |{{Yes}} |{{Yes}} |
GnuTLS
| | | | | | | | | | | | |
Intel Cryptography Primitives Library
|{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{No}} |{{Yes}} |{{No}} |{{Yes}} |{{No}} |
Java's default JCA/JCE providers
|{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{No}} |{{Yes}} |{{No}} |{{No}} |{{Yes}} |{{Yes}} |{{No}} |
Libgcrypt
|{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |
libsodium
|{{No}} |{{No}} |{{No}} |{{No}} |{{Yes}} |{{No}} |{{Yes}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |
Mbed TLS
|{{Yes}} |{{Yes}} |{{No}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |
Nettle
|{{Yes}} |{{Yes}} |{{No}} |{{No}} |{{Yes}} |{{Yes}} |{{Yes}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |
OpenSSL
|{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{No}} |
wolfCrypt
|{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{No}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |
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.
class="wikitable sortable sort-under" style="text-align: left; font-size: smaller" |
Implementation
!RC4 !SEAL !WAKE !VMPC |
---|
Botan
|{{Yes}} |{{No}} |{{No}} |{{Yes}} |{{Yes}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |
Bouncy Castle
|{{Yes}} |{{Yes}} |{{No}} |{{Yes}} |{{Yes}} |{{No}} |{{No}} |{{No}} |{{Yes}} |{{Yes}} |{{Yes}} |
BSAFE Crypto-J
|{{Yes}} |{{No}} |{{No}} |{{No}} |{{Yes}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |
cryptlib
|{{Yes}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |
Crypto++
|{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{Yes}} |{{No}} |{{No}} |{{No}} |
GnuTLS
| | | | | | | | | | | |
Intel Cryptography Primitives Library
|{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |
Java's default JCA/JCE providers
|{{Yes}} |{{No}} |{{No}} |{{No}} |{{Yes}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |
Libgcrypt
|{{Yes}} |{{No}} |{{No}} |{{Yes}} |{{Yes}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |
libsodium
|{{No}} |{{No}} |{{No}} |{{Yes}} |{{Yes}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |
Mbed TLS
|{{Yes}} |{{No}} |{{No}} |{{No}} |{{Yes}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |
Nettle
|{{Yes}} |{{No}} |{{No}} |{{Yes}} |{{Yes}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |
OpenSSL
|{{Yes}} |{{No}} |{{No}} |{{No}} |{{Yes}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |
wolfCrypt
|{{Yes}} |{{No}} |{{No}} |{{Yes}} |{{Yes}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |{{No}} |
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 =
{{Further|Smart card|SIM card|Hardware security module}}
class="wikitable sortable sort-under" style="text-align: left" |
Implementation
! PKCS #11 ! PC/SC ! CCID |
---|
Botan
| {{Yes}} | {{No}} | {{No}} |
Bouncy Castle
| {{No}} | {{No}} |
BSAFE
| {{No}} | {{No}} |
cryptlib
| {{Yes}} | {{No}} | {{No}} |
Crypto++
| {{No}} | {{No}} | {{No}} |
GnuTLS
| {{Yes}} | {{No}} | {{No}} |
Intel Cryptography Primitives Library
| {{No}} | {{No}} | {{No}} |
Java's default JCA/JCE providers
| {{Yes}} |
Libgcrypt
| {{Yes}}With [http://www.scute.org/scute.html/Overview.html Scute], scute.org |
libsodium
| {{No}} | {{No}} | {{No}} |
Mbed TLS
| {{No}} | {{No}} |
OpenSSL
| {{Yes}}With an [https://github.com/OpenSC/libp11 libp11] engine | {{No}} | {{No}} |
wolfCrypt
| {{Yes}} | {{No}} | {{No}} |
{{Reflist|group=lower-alpha|refs=
When using BSAFE Crypto-J in native mode using BSAFE Crypto-C Micro Edition.
Support is available through javax.smartcardio package of JDK.}}
= General purpose CPU, platform acceleration support =
{{Further|CPU}}
class="wikitable sortable sort-under" style="text-align: left; font-size: smaller" |
Implementation
! AES-NI ! AVX-512 ! RDRAND ! [http://www.intel.com/content/www/us/en/embedded/technology/quickassist/overview.html Intel QuickAssist] ! ARMv8-A cryptography instructions ! Power ISA v2.07 (e.g., POWER8 and later) |
---|
Botan
| {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{No}} | {{No}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} |
BSAFE
| {{No}} | {{No}} | {{No}} | {{No}} | {{No}} | {{No}} |
cryptlib
| {{Yes}} | {{Yes}} | {{Yes}} | {{No}} | {{Yes}} | {{Yes}} | {{No}} | {{No}} | {{No}} | {{No}} | {{No}} |
Crypto++
| {{Yes}} | {{Yes}} | {{Yes}} | {{No}} | {{Yes}} | {{No}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} |
GnuTLS
| {{Yes}} | {{No}} | {{No}} | {{No}} | {{No}} | {{Yes}} | {{No}} | {{No}} | {{No}} | {{No}} | {{No}} |
Intel Cryptography Primitives Library
| {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{No}} | {{No}} | {{No}} | {{No}} | {{No}} | {{No}} |
Java's default JCA/JCE providers
| {{No}} | {{No}} | {{No}} | {{No}} |
Libgcrypt[https://dev.gnupg.org/source/libgcrypt/browse/master/src/hwfeatures.c hwfeatures.c], dev.gnupg.org
| {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{No}} | {{Yes}} | {{Yes}} | {{No}} | {{Yes}} |
libsodium
| {{Yes}} | {{Yes}} | {{Yes}} | {{No}} | {{No}} | {{No}} | {{No}} | {{No}} | {{No}} | {{No}} | {{No}} |
OpenSSL
| {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{No}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} |
wolfCrypt
| {{Yes}} | {{Yes}} | {{Yes}} | {{No}} | {{Yes}} | {{No}} | {{Yes}} | {{No}} | {{No}} |
{{Reflist|group=lower-alpha|refs=
AltiVec includes POWER4 through POWER8 SIMD processing. POWER8 added in-core crypto, which provides accelerated AES, SHA and PMUL similar to ARMv8.1.
When using RSA BSAFE Crypto-J in native mode using BSAFE Crypto-C Micro Edition
}}
Code size and code to comment ratio
class="wikitable sortable sort-under" style="text-align: left" |
Implementation
! Source code size (kSLOC = 1000 lines of source code) ! Code to comment lines ratio |
---|
Botan |
Bouncy Castle |
BSAFE Crypto-J |
cryptlib
|241 |2.66 |
Crypto++ |
GnuTLS |
Java's default JCA/JCE providers
|{{-}} |{{-}} |
Libgcrypt |
libsodium |
Mbed TLS |
Nettle |
OpenSSL |
wolfCrypt
|39 |5.69 |
{{Reflist|group=lower-alpha|refs=
Based on Crypto-J 6.2.5, excluding tests source. Generated using https://github.com/XAMPPRocky/tokei}}
Portability
class="wikitable sortable sort-under" style="text-align: left" |
Implementation
! Supported operating system ! Thread safe |
---|
Botan
| Linux, Windows, macOS, Android, iOS, FreeBSD, NetBSD, OpenBSD, DragonflyBSD, Solaris, AIX, QNX, Haiku | {{Yes}} |
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. | |
BSAFE Crypto-J
| Solaris, Linux, Android, FreeBSD, AIX, 32 and 64-bit Windows, macOS (Darwin) | {{Yes}} |
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 | {{Yes}} |
Crypto++
| Unix (AIX, OpenBSD, Linux, MacOS, Solaris, etc.), Win32, Win64, Android, iOS, ARM |
GnuTLS
| Runs on most Unix platforms and Windows[https://www.gnutls.org/#features GnuTLS - 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 | {{Yes}} |
Libgcrypt
| All 32- and 64-bit Unix Systems (Linux, FreeBSD, NetBSD, macOS etc.), Win32, Win64, WinCE, and more |
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 | {{Yes}} |
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 | {{Yes}} |
wolfCrypt
| Win32/64, Linux, macOS, Solaris, ThreadX, VxWorks, FreeBSD, NetBSD, OpenBSD, embedded Linux, 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 | {{Yes}} |
{{Reflist|group=lower-alpha|refs=
References
{{Reflist}}
{{DEFAULTSORT:Cryptography library comparison}}