INFO: Simple Elliptic Curve Libraries
Simple Elliptic Curve LibrariesSuitable as external plugins for Rebex components based on Rebex SSH and Rebex TLS/SSL.
Elliptic Curve Cryptography (ECC) is an attractive alternative to classic public-key algorithms based on modular exponentiation. Compared to the algortihms such as RSA, DSA or Diffie-Hellman, elliptic curve cryptography offers equivalent security with smaller key sizes.
Unfortunately, built-in support for ECC algorithms in Microsoft Windows and .NET Framework used to be very limited, and although this got a bit better with Windows 10 and .NET Core 2.1, these libraries still come in handy.
These libraries build upon various open-source projects and are licensed under various open-source licenses. See the table below for details.
|Assembly||Supported platforms||Elliptic curve algorithms||Based on||License|
||ECDH and ECDSA with NIST P-256/P-384/P-521 or Brainpool P-256/P-384/P-512 R1||Bouncy Castle C# API by The Legion of the Bouncy Castle||Adaptation of MIT X11 License|
||ECDH with Curve25519||C# implementation of Curve25519 by Hans Wolff, Dmitry Skiba and Matthijs van Duin||Apache License 2.0|
||EdDSA with Ed25519||C# implementation of Ed25519 by by Christian Winnerlein, based on the SUPERCOP "ref10" implementation.||Public domain license|
Using elliptic curves in Rebex components
These plugins can be used with Rebex components. For details, see Elliptic Curve Cryptography support in Rebex SSH and Rebex TLS/SSL article from Rebex Knowledge Base.
To get started quickly, just reference suitable DLLs and register the desired ECC plugins:
using Rebex.Security.Cryptography; ... // register NIST and Brainpool curves AsymmetricKeyAlgorithm.Register(EllipticCurveAlgorithm.Create); // register Curve25519 AsymmetricKeyAlgorithm.Register(Curve25519.Create); // register Ed25519 AsymmetricKeyAlgorithm.Register(Ed25519.Create);
Imports Rebex.Security.Cryptography ... ' register NIST and Brainpool curves AsymmetricKeyAlgorithm.Register(AddressOf EllipticCurveAlgorithm.Create) ' register Curve25519 AsymmetricKeyAlgorithm.Register(AddressOf Curve25519.Create) ' register Ed25519 AsymmetricKeyAlgorithm.Register(AddressOf Ed25519.Create)
2020-05-29 - v1.2.1 - No longer using code signing for .NET Compact Framework binaries. 2020-01-21 - v1.2.0 - Unified platform support. Switched to C# Ed25519 implementation. 2019-03-12 - v1.0.0 - Added support for Xamarin platforms (iOS, Android) to Rebex.Ed25519 2017-03-29 - v0.9.2 - Added support for Xamarin platforms (iOS, Android, Mac 2016-12-19 - v0.9.0 - First version of Simple Elliptic Curve Libraries released.