MLKemPublicKeyParameters
using Org.BouncyCastle.Crypto.Kems.MLKem;
using Org.BouncyCastle.Utilities;
using System;
namespace Org.BouncyCastle.Crypto.Parameters
{
public sealed class MLKemPublicKeyParameters : MLKemKeyParameters
{
internal readonly byte[] m_t;
internal readonly byte[] m_rho;
public static MLKemPublicKeyParameters FromEncoding(MLKemParameters parameters, byte[] encoding)
{
if (parameters == null)
throw new ArgumentNullException("parameters");
if (encoding == null)
throw new ArgumentNullException("encoding");
int publicKeyLength = parameters.ParameterSet.PublicKeyLength;
if (encoding.Length != publicKeyLength)
throw new ArgumentException("invalid encoding", "encoding");
byte[] t = Arrays.CopyOfRange(encoding, 0, publicKeyLength - 32);
byte[] rho = Arrays.CopyOfRange(encoding, publicKeyLength - 32, publicKeyLength);
return new MLKemPublicKeyParameters(parameters, t, rho);
}
internal MLKemPublicKeyParameters(MLKemParameters parameters, byte[] t, byte[] rho)
: base(false, parameters)
{
m_t = t;
m_rho = rho;
}
public byte[] GetEncoded()
{
return Arrays.Concatenate(m_t, m_rho);
}
internal Tuple<byte[], byte[]> InternalEncapsulate(byte[] randBytes)
{
MLKemEngine engine = base.Parameters.ParameterSet.GetEngine(null);
byte[] array = new byte[engine.CryptoCipherTextBytes];
byte[] array2 = new byte[engine.CryptoBytes];
engine.KemEncryptInternal(array.AsSpan(), array2.AsSpan(), GetEncoded().AsSpan(), randBytes.AsSpan());
return Tuple.Create(array, array2);
}
}
}