<PackageReference Include="BouncyCastle.Cryptography" Version="2.7.0-beta.98" />

CmcePrivateKeyParameters

using Org.BouncyCastle.Utilities; using System; namespace Org.BouncyCastle.Pqc.Crypto.Cmce { public sealed class CmcePrivateKeyParameters : CmceKeyParameters { internal readonly byte[] privateKey; internal byte[] Delta => Arrays.CopyOfRange(privateKey, 0, 32); internal byte[] C => Arrays.CopyOfRange(privateKey, 32, 40); internal byte[] G => Arrays.CopyOfRange(privateKey, 40, 40 + base.Parameters.T * 2); internal byte[] Alpha => Arrays.CopyOfRange(privateKey, 40 + base.Parameters.T * 2, privateKey.Length - 32); internal byte[] S => Arrays.CopyOfRange(privateKey, privateKey.Length - 32, privateKey.Length); public byte[] GetPrivateKey() { return Arrays.Clone(privateKey); } public CmcePrivateKeyParameters(CmceParameters parameters, byte[] privateKey) : base(true, parameters) { this.privateKey = Arrays.Clone(privateKey); } public CmcePrivateKeyParameters(CmceParameters parameters, byte[] delta, byte[] C, byte[] g, byte[] alpha, byte[] s) : base(true, parameters) { int num = delta.Length + C.Length + g.Length + alpha.Length + s.Length; privateKey = new byte[num]; int num2 = 0; Array.Copy(delta, 0, privateKey, num2, delta.Length); num2 += delta.Length; Array.Copy(C, 0, privateKey, num2, C.Length); num2 += C.Length; Array.Copy(g, 0, privateKey, num2, g.Length); num2 += g.Length; Array.Copy(alpha, 0, privateKey, num2, alpha.Length); num2 += alpha.Length; Array.Copy(s, 0, privateKey, num2, s.Length); } public byte[] ReconstructPublicKey() { ICmceEngine engine = base.Parameters.Engine; byte[] result = new byte[engine.PublicKeySize]; engine.GeneratePublicKeyFromPrivateKey(privateKey); return result; } public byte[] GetEncoded() { return Arrays.Clone(privateKey); } } }