summary refs log tree commit diff
path: root/crypto/src/asn1/cryptopro/GOST28147Parameters.cs
diff options
context:
space:
mode:
Diffstat (limited to 'crypto/src/asn1/cryptopro/GOST28147Parameters.cs')
-rw-r--r--crypto/src/asn1/cryptopro/GOST28147Parameters.cs52
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);
     }
 }