1 files changed, 25 insertions, 0 deletions
diff --git a/crypto/src/asn1/DerInteger.cs b/crypto/src/asn1/DerInteger.cs
index 3e19a07b6..4f7b68d35 100644
--- a/crypto/src/asn1/DerInteger.cs
+++ b/crypto/src/asn1/DerInteger.cs
@@ -145,6 +145,18 @@ namespace Org.BouncyCastle.Asn1
}
}
+ public long LongValueExact
+ {
+ get
+ {
+ int count = bytes.Length - start;
+ if (count > 8)
+ throw new ArithmeticException("ASN.1 Integer out of long range");
+
+ return LongValue(bytes, start, SignExtSigned);
+ }
+ }
+
internal override void Encode(DerOutputStream derOut)
{
derOut.WriteEncoded(Asn1Tags.Integer, bytes);
@@ -182,6 +194,19 @@ namespace Org.BouncyCastle.Asn1
return val;
}
+ internal static long LongValue(byte[] bytes, int start, int signExt)
+ {
+ int length = bytes.Length;
+ int pos = System.Math.Max(start, length - 8);
+
+ long val = (sbyte)bytes[pos] & signExt;
+ while (++pos < length)
+ {
+ val = (val << 8) | bytes[pos];
+ }
+ return val;
+ }
+
/**
* Apply the correct validation for an INTEGER primitive following the BER rules.
*
|