diff options
Diffstat (limited to 'crypto/src/asn1/cryptopro/GOST28147Parameters.cs')
-rw-r--r-- | crypto/src/asn1/cryptopro/GOST28147Parameters.cs | 52 |
1 files changed, 29 insertions, 23 deletions
diff --git a/crypto/src/asn1/cryptopro/GOST28147Parameters.cs b/crypto/src/asn1/cryptopro/GOST28147Parameters.cs index 9167cd4b5..ab9c58ef0 100644 --- a/crypto/src/asn1/cryptopro/GOST28147Parameters.cs +++ b/crypto/src/asn1/cryptopro/GOST28147Parameters.cs @@ -1,40 +1,49 @@ using System; -using Org.BouncyCastle.Utilities; - namespace Org.BouncyCastle.Asn1.CryptoPro { public class Gost28147Parameters : Asn1Encodable { - private readonly Asn1OctetString iv; - private readonly DerObjectIdentifier paramSet; - - public static Gost28147Parameters GetInstance(Asn1TaggedObject obj, bool explicitly) + public static Gost28147Parameters GetInstance(object obj) { - return GetInstance(Asn1Sequence.GetInstance(obj, explicitly)); + if (obj == null) + return null; + if (obj is Gost28147Parameters gost28147Parameters) + return gost28147Parameters; + return new Gost28147Parameters(Asn1Sequence.GetInstance(obj)); } - public static Gost28147Parameters GetInstance(object obj) - { - if (obj == null || obj is Gost28147Parameters) - return (Gost28147Parameters) obj; + public static Gost28147Parameters GetInstance(Asn1TaggedObject obj, bool explicitly) => + new Gost28147Parameters(Asn1Sequence.GetInstance(obj, explicitly)); - if (obj is Asn1Sequence seq) - return new Gost28147Parameters(seq); + public static Gost28147Parameters GetTagged(Asn1TaggedObject taggedObject, bool declaredExplicit) => + new Gost28147Parameters(Asn1Sequence.GetTagged(taggedObject, declaredExplicit)); - throw new ArgumentException("Invalid GOST3410Parameter: " + Platform.GetTypeName(obj)); - } + private readonly Asn1OctetString m_iv; + private readonly DerObjectIdentifier m_encryptionParamSet; private Gost28147Parameters(Asn1Sequence seq) { - if (seq.Count != 2) - throw new ArgumentException("Wrong number of elements in sequence", "seq"); + int count = seq.Count; + if (count != 2) + throw new ArgumentException("Bad sequence size: " + count, nameof(seq)); - this.iv = Asn1OctetString.GetInstance(seq[0]); - this.paramSet = DerObjectIdentifier.GetInstance(seq[1]); + // TODO Validate length of 8? + m_iv = Asn1OctetString.GetInstance(seq[0]); + m_encryptionParamSet = DerObjectIdentifier.GetInstance(seq[1]); } + public Gost28147Parameters(Asn1OctetString iv, DerObjectIdentifier encryptionParamSet) + { + m_iv = iv ?? throw new ArgumentNullException(nameof(iv)); + m_encryptionParamSet = encryptionParamSet ?? throw new ArgumentNullException(nameof(encryptionParamSet)); + } + + public Asn1OctetString IV => m_iv; + + public DerObjectIdentifier EncryptionParamSet => m_encryptionParamSet; + /** * <pre> * Gost28147-89-Parameters ::= @@ -46,9 +55,6 @@ namespace Org.BouncyCastle.Asn1.CryptoPro * Gost28147-89-IV ::= OCTET STRING (SIZE (8)) * </pre> */ - public override Asn1Object ToAsn1Object() - { - return new DerSequence(iv, paramSet); - } + public override Asn1Object ToAsn1Object() => new DerSequence(m_iv, m_encryptionParamSet); } } |