wan24-Crypto-BC
1.4.0
See the version list below for details.
dotnet add package wan24-Crypto-BC --version 1.4.0
NuGet\Install-Package wan24-Crypto-BC -Version 1.4.0
<PackageReference Include="wan24-Crypto-BC" Version="1.4.0" />
paket add wan24-Crypto-BC --version 1.4.0
#r "nuget: wan24-Crypto-BC, 1.4.0"
// Install wan24-Crypto-BC as a Cake Addin #addin nuget:?package=wan24-Crypto-BC&version=1.4.0 // Install wan24-Crypto-BC as a Cake Tool #tool nuget:?package=wan24-Crypto-BC&version=1.4.0
wan24-Crypto-BC
This library adopts
The Bouncy Castle Cryptography Library For .NET
to wan24-Crypto and extends
the wan24-Crypto
library with these algorithms:
Algorithm | ID | Name |
---|---|---|
Asymmetric | ||
CRYSTALS-Kyber | 2 | CRYSTALSKYBER |
CRYSTALS-Dilithium | 3 | CRYSTALSDILITHIUM |
FALCON | 4 | FALCON |
SPHINCS+ | 5 | SPHINCSPLUS |
FrodoKEM | 6 | FRODOKEM |
Symmetric | ||
ChaCha20 | 1 | CHACHA20 |
XSalsa20 | 2 | XSALSA20 |
CAUTION: The underlaying Bouncy Castle library is forked from its original GitHub repository, and it's using the main branch. The main branch is not yet released! So this library should be seen as experimental and not being used in a productive environment! The Bouncy Castle build will be updated from time to time. As soon as the official NuGet package has PQC support, this library will switch to the NuGet package.
NOTE: FrodoKEM is currently disabled, 'cause there seems to be a bug (missing code) in the Bouncy Castle library for FrodoKEM.
How to get it
This library is available as NuGet package.
Usage
In case you don't use the wan24-Core
bootstrapper logic, you need to
initialize the Bouncy Castle extension first, before you can use it:
wan24.Crypo.BC.Bootstrapper.Boot();
This will register the algorithms to the wan24-Crypto
library.
Post quantum safety
These algorithms are designed for post quantum cryptography:
- CRYSTALS-Kyber (key exchange)
- CRYSTALS-Dilithium (signature)
- FALCON (signature)
- SPHINCS+ (signature)
- FrodoKEM (key exchange)
Normally you want to use them in hybrid mode as counter algorithm for
extending a default algorithm of the wan24-Crypto
package. To do this per
default:
// Enable the post quantum algorithms as counter-defaults
CryptoHelper.ForcePostQuantumSafety();
This will use these algorithms as counter algorithms for asymmetric cryptography, in case you didn't define other post quantum algorithms already:
- CRYSTALS-Kyber (key exchange)
- CRYSTALS-Dilithium (signature)
For using other algorithms instead:
// FALCON
HybridAlgorithmHelper.SignatureAlgorithm =
AsymmetricHelper.GetAlgorithm(AsymmetricFalconAlgorithm.ALGORITHM_NAME);
// SPHINCS+
HybridAlgorithmHelper.SignatureAlgorithm =
AsymmetricHelper.GetAlgorithm(AsymmetricSphincsPlusAlgorithm.ALGORITHM_NAME);
// FrodoKEM
HybridAlgorithmHelper.KeyExchangeAlgorithm =
AsymmetricHelper.GetAlgorithm(AsymmetricFrodoKemAlgorithm.ALGORITHM_NAME);
The counter algorithm will come in effect, if you use asymmetric keys for encryption:
// Create options having a counter private key
CryptoOptions options = EncryptionHelper.GetDefaultOptions();
options.SetCounterPrivateKey(yourKyberPrivateKey);
// Encrypt using the options and your normal private key
byte[] cipherData = rawData.Encrypt(yourNormalPrivateKey, options);
rawData = cipherData.Decrypt(yourNormalPrivateKey, options);
And for signature:
// Create options having a counter private key
CryptoOptions options = AsymmetricHelper.GetDefaultSignatureOptions();
options.SetCounterPrivateKey(yourDilithiumPrivateKey);
// Sign using the options and your normal private key
SignatureContainer signature = dataToSign.Sign(yourNormalPrivateKey, options: options);
Algorithm parameters used
For CRYSTALS-Kyber and CRYSTALS-Dilithium the AES parameters are being used. When using SPHINCS+, the Haraka F hashing parameters will be used. For FrodoKEM the AES parameters will be used.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
-
net6.0
- wan24-Core (>= 1.7.0)
- wan24-Crypto (>= 1.7.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated | |
---|---|---|---|
3.14.0 | 84 | 10/27/2024 | |
3.13.0 | 86 | 9/21/2024 | |
3.12.0 | 82 | 9/9/2024 | |
3.11.0 | 113 | 8/16/2024 | |
3.10.1 | 97 | 7/13/2024 | |
3.10.0 | 117 | 7/6/2024 | |
3.9.0 | 101 | 6/29/2024 | |
3.8.0 | 109 | 6/22/2024 | |
3.7.0 | 90 | 6/16/2024 | |
3.6.0 | 100 | 5/26/2024 | |
3.5.1 | 131 | 4/13/2024 | |
3.5.0 | 117 | 4/13/2024 | |
3.4.0 | 134 | 3/9/2024 | |
3.3.0 | 137 | 3/2/2024 | |
3.2.0 | 116 | 2/24/2024 | |
3.1.0 | 100 | 2/17/2024 | |
3.0.0 | 124 | 2/11/2024 | |
2.0.0 | 107 | 1/21/2024 | |
1.19.3 | 170 | 11/11/2023 | |
1.19.2 | 105 | 11/1/2023 | |
1.19.1 | 138 | 10/29/2023 | |
1.19.0 | 156 | 10/21/2023 | |
1.18.0 | 153 | 10/15/2023 | |
1.17.0 | 129 | 10/8/2023 | |
1.16.0 | 147 | 10/1/2023 | |
1.15.0 | 141 | 9/19/2023 | |
1.14.0 | 113 | 9/16/2023 | |
1.13.0 | 165 | 9/10/2023 | |
1.12.0 | 161 | 9/3/2023 | |
1.11.1 | 165 | 7/30/2023 | |
1.11.0 | 149 | 7/30/2023 | |
1.10.0 | 158 | 7/22/2023 | |
1.9.0 | 154 | 6/8/2023 | |
1.8.0 | 148 | 6/3/2023 | |
1.7.0 | 141 | 5/29/2023 | |
1.6.0 | 151 | 5/27/2023 | |
1.5.0 | 162 | 5/20/2023 | |
1.4.1 | 151 | 5/13/2023 | |
1.4.0 | 176 | 5/11/2023 | |
1.3.0 | 188 | 5/7/2023 | |
1.2.0 | 190 | 5/1/2023 | |
1.1.0 | 188 | 4/30/2023 | |
1.0.1 | 190 | 4/28/2023 | |
1.0.0 | 208 | 4/28/2023 |