<PackageReference Include="BouncyCastle.Cryptography" Version="2.4.0" />

SikeKemGenerator

using Org.BouncyCastle.Crypto; using Org.BouncyCastle.Pqc.Crypto.Utilities; using Org.BouncyCastle.Security; using System; namespace Org.BouncyCastle.Pqc.Crypto.Sike { [Obsolete("Will be removed")] public sealed class SikeKemGenerator : IEncapsulatedSecretGenerator { private readonly SecureRandom sr; public SikeKemGenerator(SecureRandom random) { sr = CryptoServicesRegistrar.GetSecureRandom(random); } public ISecretWithEncapsulation GenerateEncapsulated(AsymmetricKeyParameter recipientKey) { SikeEngine engine = ((SikePublicKeyParameters)recipientKey).Parameters.GetEngine(); return GenerateEncapsulated(recipientKey, (int)engine.GetDefaultSessionKeySize()); } public ISecretWithEncapsulation GenerateEncapsulated(AsymmetricKeyParameter recipientKey, int sessionKeySizeInBits) { Console.Error.WriteLine("WARNING: the SIKE algorithm is only for research purposes, insecure"); SikePublicKeyParameters sikePublicKeyParameters = (SikePublicKeyParameters)recipientKey; SikeEngine engine = sikePublicKeyParameters.Parameters.GetEngine(); byte[] array = new byte[engine.GetCipherTextSize()]; byte[] array2 = new byte[sessionKeySizeInBits / 8]; engine.crypto_kem_enc(array, array2, sikePublicKeyParameters.GetPublicKey(), sr); return new SecretWithEncapsulationImpl(array2, array); } } }