Add migrated to .NET 8.0 variant of Hcs.Client
This commit is contained in:
72
Hcs.ClientNet/GostCryptography/Asn1/Gost/GostAsn1Choice.cs
Normal file
72
Hcs.ClientNet/GostCryptography/Asn1/Gost/GostAsn1Choice.cs
Normal file
@ -0,0 +1,72 @@
|
||||
using GostCryptography.Asn1.Ber;
|
||||
using GostCryptography.Properties;
|
||||
|
||||
namespace GostCryptography.Asn1.Gost
|
||||
{
|
||||
public abstract class GostAsn1Choice : Asn1Choice
|
||||
{
|
||||
private const byte Null = 1;
|
||||
private const byte Params = 2;
|
||||
|
||||
protected abstract short TagForm { get; }
|
||||
protected abstract int TagIdCode { get; }
|
||||
protected abstract Asn1Type CreateParams();
|
||||
|
||||
public override string ElemName
|
||||
{
|
||||
get
|
||||
{
|
||||
switch (ChoiceId)
|
||||
{
|
||||
case Null:
|
||||
return "null_";
|
||||
case Params:
|
||||
return "params_";
|
||||
}
|
||||
|
||||
return "UNDEFINED";
|
||||
}
|
||||
}
|
||||
|
||||
public override void Decode(Asn1BerDecodeBuffer buffer, bool explicitTagging, int implicitLength)
|
||||
{
|
||||
var tag = new Asn1Tag();
|
||||
buffer.Mark();
|
||||
|
||||
var num = buffer.DecodeTagAndLength(tag);
|
||||
|
||||
if (tag.Equals(0, 0, NullTypeCode))
|
||||
{
|
||||
buffer.Reset();
|
||||
|
||||
SetElement(Null, new NullParams());
|
||||
Element.Decode(buffer, true, num);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!tag.Equals(0, TagForm, TagIdCode))
|
||||
{
|
||||
throw ExceptionUtility.CryptographicException(Resources.Asn1InvalidChoiceOptionTagException, tag, buffer.ByteCount);
|
||||
}
|
||||
|
||||
buffer.Reset();
|
||||
|
||||
SetElement(Params, CreateParams());
|
||||
Element.Decode(buffer, true, num);
|
||||
}
|
||||
}
|
||||
|
||||
public override int Encode(Asn1BerEncodeBuffer buffer, bool explicitTagging)
|
||||
{
|
||||
switch (ChoiceId)
|
||||
{
|
||||
case Null:
|
||||
return GetElement().Encode(buffer, true);
|
||||
case Params:
|
||||
return GetElement().Encode(buffer, true);
|
||||
}
|
||||
|
||||
throw ExceptionUtility.CryptographicException(Resources.Asn1InvalidChoiceOptionException);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user