summary refs log tree commit diff
path: root/crypto/src/asn1/pkcs/RSAESOAEPparams.cs
diff options
context:
space:
mode:
Diffstat (limited to 'crypto/src/asn1/pkcs/RSAESOAEPparams.cs')
-rw-r--r--crypto/src/asn1/pkcs/RSAESOAEPparams.cs161
1 files changed, 72 insertions, 89 deletions
diff --git a/crypto/src/asn1/pkcs/RSAESOAEPparams.cs b/crypto/src/asn1/pkcs/RSAESOAEPparams.cs
index 988b230c8..3490509e7 100644
--- a/crypto/src/asn1/pkcs/RSAESOAEPparams.cs
+++ b/crypto/src/asn1/pkcs/RSAESOAEPparams.cs
@@ -2,103 +2,86 @@ using System;
 
 using Org.BouncyCastle.Asn1.Oiw;
 using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Utilities;
 
 namespace Org.BouncyCastle.Asn1.Pkcs
 {
-	public class RsaesOaepParameters
+    public class RsaesOaepParameters
 		: Asn1Encodable
 	{
-		private AlgorithmIdentifier hashAlgorithm;
-		private AlgorithmIdentifier maskGenAlgorithm;
-		private AlgorithmIdentifier pSourceAlgorithm;
-
-		public readonly static AlgorithmIdentifier DefaultHashAlgorithm = new AlgorithmIdentifier(OiwObjectIdentifiers.IdSha1, DerNull.Instance);
-		public readonly static AlgorithmIdentifier DefaultMaskGenFunction = new AlgorithmIdentifier(PkcsObjectIdentifiers.IdMgf1, DefaultHashAlgorithm);
-		public readonly static AlgorithmIdentifier DefaultPSourceAlgorithm = new AlgorithmIdentifier(PkcsObjectIdentifiers.IdPSpecified, new DerOctetString(new byte[0]));
-
-		public static RsaesOaepParameters GetInstance(
-			object obj)
-		{
-			if (obj is RsaesOaepParameters)
-			{
-				return (RsaesOaepParameters)obj;
-			}
-			else if (obj is Asn1Sequence)
-			{
-				return new RsaesOaepParameters((Asn1Sequence)obj);
-			}
-
-			throw new ArgumentException("Unknown object in factory: " + Platform.GetTypeName(obj), "obj");
-		}
-
-		/**
+		public static readonly AlgorithmIdentifier DefaultHashAlgorithm = new AlgorithmIdentifier(OiwObjectIdentifiers.IdSha1, DerNull.Instance);
+		public static readonly AlgorithmIdentifier DefaultMaskGenAlgorithm = new AlgorithmIdentifier(PkcsObjectIdentifiers.IdMgf1, DefaultHashAlgorithm);
+        [Obsolete("Use 'DefaultMaskGenAlgorithm' instead")]
+        public static readonly AlgorithmIdentifier DefaultMaskGenFunction = DefaultMaskGenAlgorithm;
+        public static readonly AlgorithmIdentifier DefaultPSourceAlgorithm = new AlgorithmIdentifier(PkcsObjectIdentifiers.IdPSpecified, new DerOctetString(new byte[0]));
+
+        public static RsaesOaepParameters GetInstance(object obj)
+        {
+            if (obj == null)
+                return null;
+            if (obj is RsaesOaepParameters rsaesOaepParameters)
+                return rsaesOaepParameters;
+#pragma warning disable CS0618 // Type or member is obsolete
+            return new RsaesOaepParameters(Asn1Sequence.GetInstance(obj));
+#pragma warning restore CS0618 // Type or member is obsolete
+        }
+
+        public static RsaesOaepParameters GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit)
+        {
+#pragma warning disable CS0618 // Type or member is obsolete
+            return new RsaesOaepParameters(Asn1Sequence.GetInstance(taggedObject, declaredExplicit));
+#pragma warning restore CS0618 // Type or member is obsolete
+        }
+
+        private readonly AlgorithmIdentifier m_hashAlgorithm;
+        private readonly AlgorithmIdentifier m_maskGenAlgorithm;
+        private readonly AlgorithmIdentifier m_pSourceAlgorithm;
+
+        [Obsolete("Use 'GetInstance' instead")]
+        public RsaesOaepParameters(Asn1Sequence seq)
+        {
+            int count = seq.Count, pos = 0;
+            if (count < 0 || count > 3)
+                throw new ArgumentException("Bad sequence size: " + count, nameof(seq));
+
+			m_hashAlgorithm = Asn1Utilities.ReadOptionalContextTagged(seq, ref pos, 0, true, AlgorithmIdentifier.GetInstance)
+				?? DefaultHashAlgorithm;
+
+            m_maskGenAlgorithm = Asn1Utilities.ReadOptionalContextTagged(seq, ref pos, 1, true, AlgorithmIdentifier.GetInstance)
+                ?? DefaultMaskGenAlgorithm;
+
+            m_pSourceAlgorithm = Asn1Utilities.ReadOptionalContextTagged(seq, ref pos, 2, true, AlgorithmIdentifier.GetInstance)
+                ?? DefaultPSourceAlgorithm;
+
+            if (pos != count)
+                throw new ArgumentException("Unexpected elements in sequence", nameof(seq));
+        }
+
+        /**
 		 * The default version
 		 */
-		public RsaesOaepParameters()
-		    : this(DefaultHashAlgorithm, DefaultMaskGenFunction, DefaultPSourceAlgorithm)
+        public RsaesOaepParameters()
+		    : this(DefaultHashAlgorithm, DefaultMaskGenAlgorithm, DefaultPSourceAlgorithm)
 		{ 
 		}
 
-		public RsaesOaepParameters(
-			AlgorithmIdentifier hashAlgorithm,
-			AlgorithmIdentifier maskGenAlgorithm)
-		    : this(hashAlgorithm, maskGenAlgorithm, DefaultPSourceAlgorithm)
-		{
-		}
+        public RsaesOaepParameters(AlgorithmIdentifier hashAlgorithm, AlgorithmIdentifier maskGenAlgorithm)
+            : this(hashAlgorithm, maskGenAlgorithm, DefaultPSourceAlgorithm)
+        {
+        }
 
-		public RsaesOaepParameters(
-			AlgorithmIdentifier hashAlgorithm,
-			AlgorithmIdentifier maskGenAlgorithm,
-			AlgorithmIdentifier pSourceAlgorithm)
-		{
-			this.hashAlgorithm = hashAlgorithm;
-			this.maskGenAlgorithm = maskGenAlgorithm;
-			this.pSourceAlgorithm = pSourceAlgorithm;
-		}
+        public RsaesOaepParameters(AlgorithmIdentifier hashAlgorithm, AlgorithmIdentifier maskGenAlgorithm,
+            AlgorithmIdentifier pSourceAlgorithm)
+        {
+            m_hashAlgorithm = hashAlgorithm;
+            m_maskGenAlgorithm = maskGenAlgorithm;
+            m_pSourceAlgorithm = pSourceAlgorithm;
+        }
 
-		public RsaesOaepParameters(
-			Asn1Sequence seq)
-		{
-			hashAlgorithm = DefaultHashAlgorithm;
-			maskGenAlgorithm = DefaultMaskGenFunction;
-			pSourceAlgorithm = DefaultPSourceAlgorithm;
+		public AlgorithmIdentifier HashAlgorithm => m_hashAlgorithm;
 
-			for (int i = 0; i != seq.Count; i++)
-			{
-				Asn1TaggedObject o = (Asn1TaggedObject)seq[i];
-
-				switch (o.TagNo)
-				{
-					case 0:
-						hashAlgorithm = AlgorithmIdentifier.GetInstance(o, true);
-						break;
-					case 1:
-						maskGenAlgorithm = AlgorithmIdentifier.GetInstance(o, true);
-						break;
-					case 2:
-						pSourceAlgorithm = AlgorithmIdentifier.GetInstance(o, true);
-						break;
-					default:
-						throw new ArgumentException("unknown tag");
-				}
-			}
-		}
+		public AlgorithmIdentifier MaskGenAlgorithm => m_maskGenAlgorithm;
 
-		public AlgorithmIdentifier HashAlgorithm
-		{
-			get { return hashAlgorithm; }
-		}
-
-		public AlgorithmIdentifier MaskGenAlgorithm
-		{
-			get { return maskGenAlgorithm; }
-		}
-
-		public AlgorithmIdentifier PSourceAlgorithm
-		{
-			get { return pSourceAlgorithm; }
-		}
+		public AlgorithmIdentifier PSourceAlgorithm => m_pSourceAlgorithm;
 
 		/**
 		 * <pre>
@@ -130,19 +113,19 @@ namespace Org.BouncyCastle.Asn1.Pkcs
 		{
 			Asn1EncodableVector v = new Asn1EncodableVector(3);
 
-			if (!hashAlgorithm.Equals(DefaultHashAlgorithm))
+			if (!DefaultHashAlgorithm.Equals(m_hashAlgorithm))
 			{
-				v.Add(new DerTaggedObject(true, 0, hashAlgorithm));
+				v.Add(new DerTaggedObject(true, 0, m_hashAlgorithm));
 			}
 
-			if (!maskGenAlgorithm.Equals(DefaultMaskGenFunction))
+			if (!DefaultMaskGenAlgorithm.Equals(m_maskGenAlgorithm))
 			{
-				v.Add(new DerTaggedObject(true, 1, maskGenAlgorithm));
+				v.Add(new DerTaggedObject(true, 1, m_maskGenAlgorithm));
 			}
 
-			if (!pSourceAlgorithm.Equals(DefaultPSourceAlgorithm))
+			if (!DefaultPSourceAlgorithm.Equals(m_pSourceAlgorithm))
 			{
-				v.Add(new DerTaggedObject(true, 2, pSourceAlgorithm));
+				v.Add(new DerTaggedObject(true, 2, m_pSourceAlgorithm));
 			}
 
 			return new DerSequence(v);