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

SIG

class SIG
using System; namespace Org.BouncyCastle.Pqc.Crypto.SphincsPlus { internal class SIG { private byte[] r; private SIG_FORS[] sig_fors; private SIG_XMSS[] sig_ht; public byte[] R => r; public SIG_FORS[] SIG_FORS => sig_fors; public SIG_XMSS[] SIG_HT => sig_ht; public SIG(int n, int k, int a, uint d, uint hPrime, int wots_len, byte[] signature) { r = new byte[n]; Array.Copy(signature, 0, r, 0, n); sig_fors = new SIG_FORS[k]; int num = n; for (int i = 0; i != k; i++) { byte[] array = new byte[n]; Array.Copy(signature, num, array, 0, n); num += n; byte[][] array2 = new byte[a][]; for (int j = 0; j != a; j++) { array2[j] = new byte[n]; Array.Copy(signature, num, array2[j], 0, n); num += n; } sig_fors[i] = new SIG_FORS(array, array2); } sig_ht = new SIG_XMSS[d]; for (int l = 0; l != d; l++) { byte[] array3 = new byte[wots_len * n]; Array.Copy(signature, num, array3, 0, array3.Length); num += array3.Length; byte[][] array4 = new byte[hPrime][]; for (int m = 0; m != hPrime; m++) { array4[m] = new byte[n]; Array.Copy(signature, num, array4[m], 0, n); num += n; } sig_ht[l] = new SIG_XMSS(array3, array4); } if (num != signature.Length) throw new ArgumentException("signature wrong length"); } } }