You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
107 lines
2.9 KiB
107 lines
2.9 KiB
1 year ago
|
#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR)
|
||
|
#pragma warning disable
|
||
|
using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities;
|
||
|
using System;
|
||
|
|
||
|
namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Nist
|
||
|
{
|
||
|
/// <summary>
|
||
|
/// KMACwithSHAKE256-params ::= SEQUENCE {
|
||
|
/// kMACOutputLength INTEGER DEFAULT 512, -- Output length in bits
|
||
|
/// customizationString OCTET STRING DEFAULT ''H
|
||
|
/// }
|
||
|
/// </summary>
|
||
|
public class KMacWithShake256Params : Asn1Encodable
|
||
|
{
|
||
|
private static readonly byte[] EMPTY_STRING = new byte[0];
|
||
|
private static readonly int DEF_LENGTH = 512;
|
||
|
|
||
|
private readonly int outputLength;
|
||
|
private readonly byte[] customizationString;
|
||
|
|
||
|
public KMacWithShake256Params(int outputLength)
|
||
|
{
|
||
|
this.outputLength = outputLength;
|
||
|
this.customizationString = EMPTY_STRING;
|
||
|
}
|
||
|
|
||
|
public KMacWithShake256Params(int outputLength, byte[] customizationString)
|
||
|
{
|
||
|
this.outputLength = outputLength;
|
||
|
this.customizationString = Arrays.Clone(customizationString);
|
||
|
}
|
||
|
|
||
|
public static KMacWithShake256Params GetInstance(Object o)
|
||
|
{
|
||
|
if (o is KMacWithShake256Params)
|
||
|
{
|
||
|
return (KMacWithShake256Params)o;
|
||
|
}
|
||
|
else if (o != null)
|
||
|
{
|
||
|
return new KMacWithShake256Params(Asn1Sequence.GetInstance(o));
|
||
|
}
|
||
|
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
private KMacWithShake256Params(Asn1Sequence seq)
|
||
|
{
|
||
|
if (seq.Count > 2)
|
||
|
throw new InvalidOperationException("sequence size greater than 2");
|
||
|
|
||
|
if (seq.Count == 2)
|
||
|
{
|
||
|
this.outputLength = DerInteger.GetInstance(seq[0]).IntValueExact;
|
||
|
this.customizationString = Arrays.Clone(Asn1OctetString.GetInstance(seq[1]).GetOctets());
|
||
|
}
|
||
|
else if (seq.Count == 1)
|
||
|
{
|
||
|
if (seq[0] is DerInteger)
|
||
|
{
|
||
|
this.outputLength = DerInteger.GetInstance(seq[0]).IntValueExact;
|
||
|
this.customizationString = EMPTY_STRING;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
this.outputLength = DEF_LENGTH;
|
||
|
this.customizationString = Arrays.Clone(Asn1OctetString.GetInstance(seq[0]).GetOctets());
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
this.outputLength = DEF_LENGTH;
|
||
|
this.customizationString = EMPTY_STRING;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public int OutputLength
|
||
|
{
|
||
|
get { return outputLength; }
|
||
|
}
|
||
|
|
||
|
public byte[] CustomizationString
|
||
|
{
|
||
|
get { return Arrays.Clone(customizationString); }
|
||
|
}
|
||
|
|
||
|
public override Asn1Object ToAsn1Object()
|
||
|
{
|
||
|
Asn1EncodableVector v = new Asn1EncodableVector();
|
||
|
if (outputLength != DEF_LENGTH)
|
||
|
{
|
||
|
v.Add(new DerInteger(outputLength));
|
||
|
}
|
||
|
|
||
|
if (customizationString.Length != 0)
|
||
|
{
|
||
|
v.Add(new DerOctetString(CustomizationString));
|
||
|
}
|
||
|
|
||
|
return new DerSequence(v);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
#pragma warning restore
|
||
|
#endif
|