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

Adrs

class Adrs
using Org.BouncyCastle.Crypto.Utilities; using Org.BouncyCastle.Utilities; using System; namespace Org.BouncyCastle.Pqc.Crypto.SphincsPlus { internal class Adrs { internal const uint WOTS_HASH = 0; internal const uint WOTS_PK = 1; internal const uint TREE = 2; internal const uint FORS_TREE = 3; internal const uint FORS_PK = 4; internal const uint WOTS_PRF = 5; internal const uint FORS_PRF = 6; internal const int OFFSET_LAYER = 0; internal const int OFFSET_TREE = 4; internal const int OFFSET_TREE_HGT = 24; internal const int OFFSET_TREE_INDEX = 28; internal const int OFFSET_TYPE = 16; internal const int OFFSET_KP_ADDR = 20; internal const int OFFSET_CHAIN_ADDR = 24; internal const int OFFSET_HASH_ADDR = 28; internal readonly byte[] value = new byte[32]; internal Adrs() { } internal Adrs(Adrs adrs) { Array.Copy(adrs.value, 0, value, 0, adrs.value.Length); } internal void SetLayerAddress(uint layer) { Pack.UInt32_To_BE(layer, value, 0); } internal uint GetLayerAddress() { return Pack.BE_To_UInt32(value, 0); } internal void SetTreeAddress(ulong tree) { Pack.UInt64_To_BE(tree, value, 8); } internal ulong GetTreeAddress() { return Pack.BE_To_UInt64(value, 8); } internal void SetTreeHeight(uint height) { Pack.UInt32_To_BE(height, value, 24); } internal void SetTreeIndex(uint index) { Pack.UInt32_To_BE(index, value, 28); } internal uint GetTreeIndex() { return Pack.BE_To_UInt32(value, 28); } internal void SetTypeAndClear(uint adrsType) { Pack.UInt32_To_BE(adrsType, value, 16); Arrays.Fill(value, 20, value.Length, 0); } internal void ChangeAdrsType(uint adrsType) { Pack.UInt32_To_BE(adrsType, value, 16); } internal void SetKeyPairAddress(uint keyPairAddr) { Pack.UInt32_To_BE(keyPairAddr, value, 20); } internal uint GetKeyPairAddress() { return Pack.BE_To_UInt32(value, 20); } internal void SetHashAddress(uint hashAddr) { Pack.UInt32_To_BE(hashAddr, value, 28); } public void SetChainAddress(uint chainAddr) { Pack.UInt32_To_BE(chainAddr, value, 24); } } }