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

KMacWithShake128Params

KMACwithSHAKE128-params ::= SEQUENCE { kMACOutputLength INTEGER DEFAULT 256, -- Output length in bits customizationString OCTET STRING DEFAULT ''H }
using Org.BouncyCastle.Utilities; using System; namespace Org.BouncyCastle.Asn1.Nist { public class KMacWithShake128Params : Asn1Encodable { private const int _DefaultOutputLength = 256; public static readonly DerInteger DefaultOutputLength = new DerInteger(256); public static readonly Asn1OctetString DefaultCustomizationString = DerOctetString.Empty; private readonly DerInteger m_outputLength; private readonly Asn1OctetString m_customizationString; public int OutputLength => m_outputLength.IntValueExact; public byte[] CustomizationString => Arrays.Clone(m_customizationString.GetOctets()); public static KMacWithShake128Params GetInstance(object o) { if (o == null) return null; KMacWithShake128Params kMacWithShake128Params = o as KMacWithShake128Params; if (kMacWithShake128Params != null) return kMacWithShake128Params; return new KMacWithShake128Params(Asn1Sequence.GetInstance(o)); } public static KMacWithShake128Params GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit) { return new KMacWithShake128Params(Asn1Sequence.GetInstance(taggedObject, declaredExplicit)); } public static KMacWithShake128Params GetTagged(Asn1TaggedObject taggedObject, bool declaredExplicit) { return new KMacWithShake128Params(Asn1Sequence.GetTagged(taggedObject, declaredExplicit)); } private KMacWithShake128Params(Asn1Sequence seq) { int count = seq.Count; int sequencePosition = 0; if (count < 0 || count > 2) throw new ArgumentException("Bad sequence size: " + count.ToString(), "seq"); m_outputLength = (Asn1Utilities.ReadOptional(seq, ref sequencePosition, DerInteger.GetOptional) ?? DefaultOutputLength); m_customizationString = (Asn1Utilities.ReadOptional(seq, ref sequencePosition, Asn1OctetString.GetOptional) ?? DefaultCustomizationString); if (sequencePosition != count) throw new ArgumentException("Unexpected elements in sequence", "seq"); } public KMacWithShake128Params(int outputLength) { m_outputLength = new DerInteger(outputLength); m_customizationString = DefaultCustomizationString; } public KMacWithShake128Params(int outputLength, byte[] customizationString) { m_outputLength = new DerInteger(outputLength); m_customizationString = DerOctetString.FromContents(customizationString); } public override Asn1Object ToAsn1Object() { Asn1EncodableVector asn1EncodableVector = new Asn1EncodableVector(2); if (!m_outputLength.HasValue(256)) asn1EncodableVector.Add(m_outputLength); if (m_customizationString.GetOctetsLength() != 0) asn1EncodableVector.Add(m_customizationString); return new DerSequence(asn1EncodableVector); } } }