Add project
Basic formatting applied. Unnecessary comments have been removed. Suspicious code is covered by TODO.
This commit is contained in:
151
Hcs.Client/GostCryptography/Asn1/Ber/Asn1RunTime.cs
Normal file
151
Hcs.Client/GostCryptography/Asn1/Ber/Asn1RunTime.cs
Normal file
@ -0,0 +1,151 @@
|
||||
using GostCryptography.Properties;
|
||||
|
||||
namespace GostCryptography.Asn1.Ber
|
||||
{
|
||||
public static class Asn1RunTime
|
||||
{
|
||||
public const int LicBer = 1;
|
||||
public const int LicPer = 2;
|
||||
public const int LicXer = 4;
|
||||
public const long Bit0Mask = -9223372036854775808L;
|
||||
|
||||
public static long DecodeIntValue(Asn1DecodeBuffer buffer, int length, bool signExtend)
|
||||
{
|
||||
var num = 0L;
|
||||
|
||||
if (length > 8)
|
||||
{
|
||||
throw ExceptionUtility.CryptographicException(Resources.Asn1IntegerValueIsTooLarge);
|
||||
}
|
||||
|
||||
for (var i = 0; i < length; i++)
|
||||
{
|
||||
var num2 = buffer.ReadByte();
|
||||
|
||||
if (num2 < 0)
|
||||
{
|
||||
throw ExceptionUtility.CryptographicException(Resources.Asn1EndOfBufferException, buffer.ByteCount);
|
||||
}
|
||||
|
||||
if ((i == 0) && signExtend)
|
||||
{
|
||||
num = (num2 > 0x7f) ? -1 : 0;
|
||||
}
|
||||
|
||||
num = (num * 0x100L) + num2;
|
||||
}
|
||||
|
||||
return num;
|
||||
}
|
||||
|
||||
public static int GetIdentBytesCount(long ident)
|
||||
{
|
||||
if (ident < 0x80L)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (ident < 0x4000L)
|
||||
{
|
||||
return 2;
|
||||
}
|
||||
|
||||
if (ident < 0x200000L)
|
||||
{
|
||||
return 3;
|
||||
}
|
||||
|
||||
if (ident < 0x10000000L)
|
||||
{
|
||||
return 4;
|
||||
}
|
||||
|
||||
if (ident < 0x800000000L)
|
||||
{
|
||||
return 5;
|
||||
}
|
||||
|
||||
if (ident < 0x40000000000L)
|
||||
{
|
||||
return 6;
|
||||
}
|
||||
|
||||
if (ident < 0x2000000000000L)
|
||||
{
|
||||
return 7;
|
||||
}
|
||||
|
||||
if (ident < 0x100000000000000L)
|
||||
{
|
||||
return 8;
|
||||
}
|
||||
|
||||
return 9;
|
||||
}
|
||||
|
||||
public static int GetLongBitCount(long ivalue)
|
||||
{
|
||||
var num = ivalue & Bit0Mask;
|
||||
var num2 = 0;
|
||||
|
||||
if (ivalue != 0L)
|
||||
{
|
||||
while ((ivalue & Bit0Mask) == num)
|
||||
{
|
||||
num2++;
|
||||
ivalue = ivalue << 1;
|
||||
}
|
||||
|
||||
if (num == Bit0Mask)
|
||||
{
|
||||
num2--;
|
||||
}
|
||||
|
||||
return (0x40 - num2);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
public static int GetLongBytesCount(long value)
|
||||
{
|
||||
var num = 0x7f80000000000000L;
|
||||
var num2 = 8;
|
||||
|
||||
if (value < 0L)
|
||||
{
|
||||
value ^= -1L;
|
||||
}
|
||||
|
||||
while ((num2 > 1) && ((value & num) == 0L))
|
||||
{
|
||||
num = num >> 8;
|
||||
num2--;
|
||||
}
|
||||
|
||||
return num2;
|
||||
}
|
||||
|
||||
public static int GetUlongBytesCount(long value)
|
||||
{
|
||||
var number = -72057594037927936L;
|
||||
var num2 = 8;
|
||||
|
||||
while ((num2 > 1) && ((value & number) == 0L))
|
||||
{
|
||||
number = Asn1Util.UrShift(number, 8);
|
||||
num2--;
|
||||
}
|
||||
|
||||
return num2;
|
||||
}
|
||||
|
||||
public static int IntTrailingZerosCnt(int w)
|
||||
{
|
||||
return (0x20 -
|
||||
(((w & 0xffff) != 0)
|
||||
? (((w & 0xff) != 0) ? ((((w & 15) != 0) ? (((w & 3) != 0) ? (((w & 1) != 0) ? 8 : 7) : (((w & 4) != 0) ? 6 : 5)) : (((w & 0x30) != 0) ? (((w & 0x10) != 0) ? 4 : 3) : (((w & 0x40) != 0) ? 2 : (((w & 0x80) != 0) ? 1 : 0)))) + 0x18) : (((((w = Asn1Util.UrShift(w, 8)) & 15) != 0) ? (((w & 3) != 0) ? (((w & 1) != 0) ? 8 : 7) : (((w & 4) != 0) ? 6 : 5)) : (((w & 0x30) != 0) ? (((w & 0x10) != 0) ? 4 : 3) : (((w & 0x40) != 0) ? 2 : (((w & 0x80) != 0) ? 1 : 0)))) + 0x10))
|
||||
: ((((w = Asn1Util.UrShift(w, 0x10)) & 0xff) != 0) ? ((((w & 15) != 0) ? (((w & 3) != 0) ? (((w & 1) != 0) ? 8 : 7) : (((w & 4) != 0) ? 6 : 5)) : (((w & 0x30) != 0) ? (((w & 0x10) != 0) ? 4 : 3) : (((w & 0x40) != 0) ? 2 : (((w & 0x80) != 0) ? 1 : 0)))) + 8) : ((((w = Asn1Util.UrShift(w, 8)) & 15) != 0) ? (((w & 3) != 0) ? (((w & 1) != 0) ? 8 : 7) : (((w & 4) != 0) ? 6 : 5)) : (((w & 0x30) != 0) ? (((w & 0x10) != 0) ? 4 : 3) : (((w & 0x40) != 0) ? 2 : (((w & 0x80) != 0) ? 1 : 0)))))));
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user