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

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); } } }