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