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

BikeKemExtractor

using Org.BouncyCastle.Crypto; using Org.BouncyCastle.Utilities; namespace Org.BouncyCastle.Pqc.Crypto.Bike { public sealed class BikeKemExtractor : IEncapsulatedSecretExtractor { private readonly BikeKeyParameters key; public int EncapsulationLength => key.Parameters.RByte + key.Parameters.LByte; public BikeKemExtractor(BikePrivateKeyParameters privParams) { key = privParams; } public byte[] ExtractSecret(byte[] encapsulation) { BikeParameters parameters = key.Parameters; BikeEngine bikeEngine = parameters.BikeEngine; int defaultKeySize = parameters.DefaultKeySize; byte[] array = new byte[bikeEngine.SessionKeySize]; BikePrivateKeyParameters bikePrivateKeyParameters = (BikePrivateKeyParameters)key; byte[] c = Arrays.CopyOfRange(encapsulation, 0, bikePrivateKeyParameters.Parameters.RByte); byte[] c2 = Arrays.CopyOfRange(encapsulation, bikePrivateKeyParameters.Parameters.RByte, encapsulation.Length); byte[] h = bikePrivateKeyParameters.m_h0; byte[] h2 = bikePrivateKeyParameters.m_h1; byte[] sigma = bikePrivateKeyParameters.m_sigma; bikeEngine.Decaps(array, h, h2, sigma, c, c2); return Arrays.CopyOfRange(array, 0, defaultKeySize / 8); } } }