diff options
Diffstat (limited to 'crypto/src/asn1/ess/SigningCertificateV2.cs')
-rw-r--r-- | crypto/src/asn1/ess/SigningCertificateV2.cs | 82 |
1 files changed, 33 insertions, 49 deletions
diff --git a/crypto/src/asn1/ess/SigningCertificateV2.cs b/crypto/src/asn1/ess/SigningCertificateV2.cs index 557bede9c..c53a7c990 100644 --- a/crypto/src/asn1/ess/SigningCertificateV2.cs +++ b/crypto/src/asn1/ess/SigningCertificateV2.cs @@ -1,77 +1,61 @@ using System; using Org.BouncyCastle.Asn1.X509; -using Org.BouncyCastle.Utilities; namespace Org.BouncyCastle.Asn1.Ess { public class SigningCertificateV2 : Asn1Encodable { - private readonly Asn1Sequence certs; - private readonly Asn1Sequence policies; - - public static SigningCertificateV2 GetInstance( - object o) + public static SigningCertificateV2 GetInstance(object o) { - if (o == null || o is SigningCertificateV2) - return (SigningCertificateV2) o; - - if (o is Asn1Sequence) - return new SigningCertificateV2((Asn1Sequence) o); + if (o == null) + return null; + if (o is SigningCertificateV2 signingCertificateV2) + return signingCertificateV2; + return new SigningCertificateV2(Asn1Sequence.GetInstance(o)); + } - throw new ArgumentException( - "unknown object in 'SigningCertificateV2' factory : " - + Platform.GetTypeName(o) + "."); + public static SigningCertificateV2 GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit) + { + return new SigningCertificateV2(Asn1Sequence.GetInstance(taggedObject, declaredExplicit)); } - private SigningCertificateV2( - Asn1Sequence seq) + private readonly Asn1Sequence m_certs; + private readonly Asn1Sequence m_policies; + + private SigningCertificateV2(Asn1Sequence seq) { - if (seq.Count < 1 || seq.Count > 2) - throw new ArgumentException("Bad sequence size: " + seq.Count, "seq"); + 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].ToAsn1Object()); + 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].ToAsn1Object()); - } + if (pos != count) + throw new ArgumentException("Unexpected elements in sequence", nameof(seq)); } - public SigningCertificateV2( - EssCertIDv2 cert) + public SigningCertificateV2(EssCertIDv2 cert) { - this.certs = new DerSequence(cert); + m_certs = new DerSequence(cert); } - public SigningCertificateV2( - EssCertIDv2[] certs) + public SigningCertificateV2(EssCertIDv2[] certs) { - this.certs = new DerSequence(certs); + m_certs = DerSequence.FromElements(certs); } - public SigningCertificateV2( - EssCertIDv2[] certs, - PolicyInformation[] policies) + public SigningCertificateV2(EssCertIDv2[] certs, PolicyInformation[] policies) { - this.certs = new DerSequence(certs); - - if (policies != null) - { - this.policies = new DerSequence(policies); - } + m_certs = new DerSequence(certs); + m_policies = policies == null ? null : DerSequence.FromElements(policies); } - public EssCertIDv2[] GetCerts() - { - return certs.MapElements(EssCertIDv2.GetInstance); - } + public EssCertIDv2[] GetCerts() => m_certs.MapElements(EssCertIDv2.GetInstance); - public PolicyInformation[] GetPolicies() - { - return policies?.MapElements(PolicyInformation.GetInstance); - } + public PolicyInformation[] GetPolicies() => m_policies?.MapElements(PolicyInformation.GetInstance); /** * The definition of SigningCertificateV2 is @@ -87,9 +71,9 @@ namespace Org.BouncyCastle.Asn1.Ess */ 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); } } } |