CmceKemGenerator
using Org.BouncyCastle.Crypto;
using Org.BouncyCastle.Pqc.Crypto.Utilities;
using Org.BouncyCastle.Security;
namespace Org.BouncyCastle.Pqc.Crypto.Cmce
{
public sealed class CmceKemGenerator : IEncapsulatedSecretGenerator
{
private readonly SecureRandom sr;
public CmceKemGenerator(SecureRandom random)
{
sr = random;
}
public ISecretWithEncapsulation GenerateEncapsulated(AsymmetricKeyParameter recipientKey)
{
ICmceEngine engine = ((CmcePublicKeyParameters)recipientKey).Parameters.Engine;
return GenerateEncapsulated(recipientKey, engine.DefaultSessionKeySize);
}
private ISecretWithEncapsulation GenerateEncapsulated(AsymmetricKeyParameter recipientKey, int sessionKeySizeInBits)
{
CmcePublicKeyParameters cmcePublicKeyParameters = (CmcePublicKeyParameters)recipientKey;
ICmceEngine engine = cmcePublicKeyParameters.Parameters.Engine;
byte[] cipher_text = new byte[engine.CipherTextSize];
byte[] array = new byte[sessionKeySizeInBits / 8];
engine.KemEnc(cipher_text, array, cmcePublicKeyParameters.publicKey, sr);
return new SecretWithEncapsulationImpl(array, cipher_text);
}
}
}