diff options
Diffstat (limited to 'crypto/src/asn1/ess/SigningCertificate.cs')
-rw-r--r-- | crypto/src/asn1/ess/SigningCertificate.cs | 88 |
1 files changed, 38 insertions, 50 deletions
diff --git a/crypto/src/asn1/ess/SigningCertificate.cs b/crypto/src/asn1/ess/SigningCertificate.cs index ae263428e..1d7fb1d67 100644 --- a/crypto/src/asn1/ess/SigningCertificate.cs +++ b/crypto/src/asn1/ess/SigningCertificate.cs @@ -1,67 +1,55 @@ using System; using Org.BouncyCastle.Asn1.X509; -using Org.BouncyCastle.Utilities; namespace Org.BouncyCastle.Asn1.Ess { - public class SigningCertificate + public class SigningCertificate : Asn1Encodable { - private Asn1Sequence certs, policies; - - public static SigningCertificate GetInstance( - object o) - { - if (o == null || o is SigningCertificate) - { - return (SigningCertificate) o; - } + public static SigningCertificate GetInstance(object o) + { + if (o == null) + return null; + if (o is SigningCertificate signingCertificate) + return signingCertificate; +#pragma warning disable CS0618 // Type or member is obsolete + return new SigningCertificate(Asn1Sequence.GetInstance(o)); +#pragma warning restore CS0618 // Type or member is obsolete + } - if (o is Asn1Sequence) - { - return new SigningCertificate((Asn1Sequence) o); - } + public static SigningCertificate GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit) + { +#pragma warning disable CS0618 // Type or member is obsolete + return new SigningCertificate(Asn1Sequence.GetInstance(taggedObject, declaredExplicit)); +#pragma warning restore CS0618 // Type or member is obsolete + } - throw new ArgumentException( - "unknown object in 'SigningCertificate' factory : " - + Platform.GetTypeName(o) + "."); - } + private readonly Asn1Sequence m_certs; + private readonly Asn1Sequence m_policies; - /** - * constructors - */ - public SigningCertificate( - Asn1Sequence seq) + [Obsolete("Use 'GetInstance' instead")] + public SigningCertificate(Asn1Sequence seq) { - if (seq.Count < 1 || seq.Count > 2) - { - throw new ArgumentException("Bad sequence size: " + seq.Count); - } + int count = seq.Count, pos = 0; + if (count < 1 || count > 2) + throw new ArgumentException("Bad sequence size: " + count, nameof(seq)); - this.certs = Asn1Sequence.GetInstance(seq[0]); + m_certs = Asn1Sequence.GetInstance(seq[pos++]); + m_policies = Asn1Utilities.ReadOptional(seq, ref pos, Asn1Sequence.GetOptional); - if (seq.Count > 1) - { - this.policies = Asn1Sequence.GetInstance(seq[1]); - } + if (pos != count) + throw new ArgumentException("Unexpected elements in sequence", nameof(seq)); } - public SigningCertificate( - EssCertID essCertID) + public SigningCertificate(EssCertID essCertID) { - certs = new DerSequence(essCertID); + m_certs = new DerSequence(essCertID); } - public EssCertID[] GetCerts() - { - return certs.MapElements(EssCertID.GetInstance); - } + public EssCertID[] GetCerts() => m_certs.MapElements(EssCertID.GetInstance); - public PolicyInformation[] GetPolicies() - { - return policies?.MapElements(PolicyInformation.GetInstance); - } + public PolicyInformation[] GetPolicies() => m_policies?.MapElements(PolicyInformation.GetInstance); /** * The definition of SigningCertificate is @@ -76,10 +64,10 @@ namespace Org.BouncyCastle.Asn1.Ess * smime(16) id-aa(2) 12 } */ public override Asn1Object ToAsn1Object() - { - Asn1EncodableVector v = new Asn1EncodableVector(certs); - v.AddOptional(policies); - return new DerSequence(v); - } - } + { + return m_policies == null + ? new DerSequence(m_certs) + : new DerSequence(m_certs, m_policies); + } + } } |