aboutsummaryrefslogtreecommitdiff
path: root/docs/LIBS.md
diff options
context:
space:
mode:
Diffstat (limited to 'docs/LIBS.md')
-rw-r--r--docs/LIBS.md84
1 files changed, 71 insertions, 13 deletions
diff --git a/docs/LIBS.md b/docs/LIBS.md
index 4fac57b..d1a68d0 100644
--- a/docs/LIBS.md
+++ b/docs/LIBS.md
@@ -1,31 +1,89 @@
-# Libraries with ECC
+# Libraries with ECC support
-Libraries with at least some ECC support:
+Popular libraries with at least some ECC support:
- - [Crypto++](https://cryptopp.com/)
- [libgcrypt](https://www.gnupg.org/related_software/libgcrypt/)
-
- [mbedTLS](https://tls.mbed.org/)
- [Nettle](http://www.lysator.liu.se/~nisse/nettle/)
- - [OpenSSL](https://www.openssl.org/)
- [OpenSSL (FIPS mode)](https://www.openssl.org/docs/fipsnotes.html)
-
- - [Microsoft CNG](https://msdn.microsoft.com/en-us/library/windows/desktop/aa376210(v=vs.85).aspx)
+ - BoringSSL
- [Microsoft .NET crypto](https://docs.microsoft.com/en-us/dotnet/standard/security/cryptography-model)
-
+
# Supported libraries
- [BouncyCastle](https://bouncycastle.org/java.html)
- Java
+ - Works with the short Weierstrass curve model.
+ - Works with coordinates:
+ - Affine
+ - Projective(Homogenous)
+ - Jacobian
+ - Jacobian-Chudnovsky
+ - Jacobian-Modified
+ - Lambda-Affine?
+ - Lambda-Projective?
+ - Skewed?
+ - Multiple scalar multiplication algorithms implemented and used:
+ - Double-and-add always (DoubleAddMultiplier)
+ - Fixed point comb (FixedPointCombMultiplier)
+ - GLV (Gallant-Lambert-Vanstone) using endomorphisms (GLVMultiplier): Faster point multiplication on elliptic curves with efficient endomorphisms. <-- default, if available
+ - Binary NAF right-to-left multiplication(mixed coordinates) (MixedNafR2LMultiplier)
+ - Montgomery ladder (MontgomeryLadderMultiplier)
+ - Binary NAF right-to-left multiplication (NafR2LMultiplier)
+ - Binary NAF left-to-right multiplication (NafL2RMultiplier)
+ - Double-and-add reference implementation (ReferenceMultiplier)
+ - Window NAF left-to-right multiplication (WNafL2RMultiplier) <-- default
+ - Window Tau-NAF multiplication (WTauNafMultiplier): Improved Algorithms for Arithmetic on Anomalous Binary Curves
+ - Zeroless signed digit binary right-to-left multiplication (ZSignedDigitR2LMultiplier)
+ - Zeroless signed digit binary left-to-right multiplication (ZSignedDigitL2RMultiplier)
+ - Has custom field and point arithmetic for:
+ - Curve25519 (transformed into short Weierstrass model)
+ - SMP2 curves
+ - SECG curves
- [Sun EC](https://docs.oracle.com/javase/7/docs/technotes/guides/security/SunProviders.html#SunEC)
- Java + C
- - [Botan](https://botan.randombit.net/), since 2.4.0 (unreleased)
+ - Uses the short Weierstrass curve model.
+ - For prime field curves:
+ - Uses 5-bit window NAF, Uses mixed Modified-Jacobian coordinates
+ for doubling and Chudnovsky Jacobian coordinates for additions (ecp_jm.c). From:
+ Brown, Hankerson, Lopez, Menezes: Software Implementation of the NIST Elliptic Curves Over Prime Fields.
+ - Contains an implementation of scalar multiplication with 4-bit sliding window, using Jacobian coordinates (ecp_jac.c)
+ - Contains an implementation of IEEE P1363 algorithm A.10.3 using affine coordinates (ecp_aff.c)
+ - For binary field curves:
+ - Uses Lopez-Dahab (Montgomery) ladder, XZ coordinates (ec2_mont.c): Fast multiplication on elliptic curves over GF(2^m) without precomputation (Algorithm 2P)
+ - Contains an implementation of IEEE P1363 algorithm A.10.3 using affine coordinates (ec2_aff.c)
+ - Has some custom arithmetic for some of the NIST primes.
+ - [OpenSSL](https://www.openssl.org/)
+ - C
+ - For prime field curves:
+ - Uses Jacobian coordinates, and Montgomery ladder, also uses wNAF-based interleaving multi-exponentiation method(ec_mult.c): http://www.bmoeller.de/pdf/TI-01-08.multiexp.pdf
+ - Also uses multiplication with precomputation by wNAF splitting(ec_mult.c)
+ - For binary field curves:
+ - Uses Jacobian coordinates, and Lopez-Dahab ladder, also uses wNAF-based interleaving multi-exponentiation method(ec2_smpl.c)
+ - [Botan](https://botan.randombit.net/)
- C++
- Uses blinded(randomized) Montgomery ladder.
- - https://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#addition-add-1998-cmo-2
- - https://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-1986-cc
- - https://eprint.iacr.org/2015/657
+ - <https://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#addition-add-1998-cmo-2>
+ - <https://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-1986-cc>
+ - <https://eprint.iacr.org/2015/657>
+ - ECTester supports v2.4.0 and up.
- [libtomcrypt](http://www.libtom.net/LibTomCrypt/)
- C
- Uses Jacobian coordinates.
- - Sliding window scalar multiplication algorithm. \ No newline at end of file
+ - Sliding window scalar multiplication algorithm.
+ - [Crypto++](https://cryptopp.com/)
+ - C++
+ - For prime field curves:
+ - Uses projective coordinates and sliding window scalar multiplication algorithm.
+ - For binary field curves:
+ - Uses affine coordinates and sliding window scalar multiplication algorithm.
+ - [Microsoft CNG](https://msdn.microsoft.com/en-us/library/windows/desktop/aa376210(v=vs.85).aspx)
+ - C API.
+ - Closed source.
+ - For prime field curves(only supports):
+ - Uses Short Weierstrass model.
+ - Uses Twisted Edwards model.
+ - Uses Montgomery model.
+ - Uses fixed window scalar multiplication.
+ - Uses Wnaf multi-scalar multiplication with interleaving.
+ - Uses Montgomery ladder. \ No newline at end of file