diff options
Diffstat (limited to 'crypto/src/asn1/pkcs/RSAESOAEPparams.cs')
-rw-r--r-- | crypto/src/asn1/pkcs/RSAESOAEPparams.cs | 161 |
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); |