diff options
author | Peter Dettman <peter.dettman@bouncycastle.org> | 2024-06-20 20:39:59 +0700 |
---|---|---|
committer | Peter Dettman <peter.dettman@bouncycastle.org> | 2024-06-20 20:39:59 +0700 |
commit | 37a36810c786707b204108095c8f23214c73df70 (patch) | |
tree | 98a6346c291cde2638cf222bc551174ef245f609 /crypto/src/asn1/DerInteger.cs | |
parent | Fix tag for unprotectedAttrs field of Asn1.Cms.EncryptedData (diff) | |
download | BouncyCastle.NET-ed25519-37a36810c786707b204108095c8f23214c73df70.tar.xz |
Add Try... methods to DerInteger for small value accessors
Diffstat (limited to '')
-rw-r--r-- | crypto/src/asn1/DerInteger.cs | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/crypto/src/asn1/DerInteger.cs b/crypto/src/asn1/DerInteger.cs index d68a71e9d..666723527 100644 --- a/crypto/src/asn1/DerInteger.cs +++ b/crypto/src/asn1/DerInteger.cs @@ -209,6 +209,45 @@ namespace Org.BouncyCastle.Asn1 } } + public bool TryGetIntPositiveValueExact(out int value) + { + int count = bytes.Length - start; + if (count > 4 || (count == 4 && 0 != (bytes[start] & 0x80))) + { + value = default; + return false; + } + + value = IntValue(bytes, start, SignExtUnsigned); + return true; + } + + public bool TryGetIntValueExact(out int value) + { + int count = bytes.Length - start; + if (count > 4) + { + value = default; + return false; + } + + value = IntValue(bytes, start, SignExtSigned); + return true; + } + + public bool TryGetLongValueExact(out long value) + { + int count = bytes.Length - start; + if (count > 8) + { + value = default; + return false; + } + + value = LongValue(bytes, start, SignExtSigned); + return true; + } + internal override IAsn1Encoding GetEncoding(int encoding) { return new PrimitiveEncoding(Asn1Tags.Universal, Asn1Tags.Integer, bytes); |