diff options
Diffstat (limited to 'crypto/src/asn1/cms/RecipientKeyIdentifier.cs')
-rw-r--r-- | crypto/src/asn1/cms/RecipientKeyIdentifier.cs | 85 |
1 files changed, 29 insertions, 56 deletions
diff --git a/crypto/src/asn1/cms/RecipientKeyIdentifier.cs b/crypto/src/asn1/cms/RecipientKeyIdentifier.cs index daae426d2..8bb82f924 100644 --- a/crypto/src/asn1/cms/RecipientKeyIdentifier.cs +++ b/crypto/src/asn1/cms/RecipientKeyIdentifier.cs @@ -25,78 +25,50 @@ namespace Org.BouncyCastle.Asn1.Cms #pragma warning restore CS0618 // Type or member is obsolete } - private Asn1OctetString subjectKeyIdentifier; - private Asn1GeneralizedTime date; - private OtherKeyAttribute other; + private readonly Asn1OctetString m_subjectKeyIdentifier; + private readonly Asn1GeneralizedTime m_date; + private readonly OtherKeyAttribute m_other; - public RecipientKeyIdentifier( - Asn1OctetString subjectKeyIdentifier, - Asn1GeneralizedTime date, - OtherKeyAttribute other) + public RecipientKeyIdentifier(Asn1OctetString subjectKeyIdentifier, Asn1GeneralizedTime date, + OtherKeyAttribute other) { - this.subjectKeyIdentifier = subjectKeyIdentifier; - this.date = date; - this.other = other; + m_subjectKeyIdentifier = subjectKeyIdentifier ?? throw new ArgumentNullException(nameof(subjectKeyIdentifier)); + m_date = date; + m_other = other; } - - public RecipientKeyIdentifier( - byte[] subjectKeyIdentifier) + + public RecipientKeyIdentifier(byte[] subjectKeyIdentifier) : this(subjectKeyIdentifier, null, null) { } - public RecipientKeyIdentifier( - byte[] subjectKeyIdentifier, - Asn1GeneralizedTime date, - OtherKeyAttribute other) + public RecipientKeyIdentifier(byte[] subjectKeyIdentifier, Asn1GeneralizedTime date, OtherKeyAttribute other) { - this.subjectKeyIdentifier = new DerOctetString(subjectKeyIdentifier); - this.date = date; - this.other = other; + m_subjectKeyIdentifier = new DerOctetString(subjectKeyIdentifier); + m_date = date; + m_other = other; } [Obsolete("Use 'GetInstance' instead")] public RecipientKeyIdentifier(Asn1Sequence seq) { - subjectKeyIdentifier = Asn1OctetString.GetInstance(seq[0]); + int count = seq.Count, pos = 0; + if (count < 1 || count > 3) + throw new ArgumentException("Bad sequence size: " + count, nameof(seq)); + + m_subjectKeyIdentifier = Asn1OctetString.GetInstance(seq[pos++]); + m_date = Asn1Utilities.ReadOptional(seq, ref pos, Asn1GeneralizedTime.GetOptional); + m_other = Asn1Utilities.ReadOptional(seq, ref pos, OtherKeyAttribute.GetOptional); - switch(seq.Count) - { - case 1: - break; - case 2: - if (seq[1] is Asn1GeneralizedTime asn1GeneralizedTime) - { - date = asn1GeneralizedTime; - } - else - { - other = OtherKeyAttribute.GetInstance(seq[2]); - } - break; - case 3: - date = (Asn1GeneralizedTime)seq[1]; - other = OtherKeyAttribute.GetInstance(seq[2]); - break; - default: - throw new ArgumentException("Invalid RecipientKeyIdentifier"); - } + if (pos != count) + throw new ArgumentException("Unexpected elements in sequence", nameof(seq)); } - public Asn1OctetString SubjectKeyIdentifier - { - get { return subjectKeyIdentifier; } - } + public Asn1OctetString SubjectKeyIdentifier => m_subjectKeyIdentifier; - public Asn1GeneralizedTime Date - { - get { return date; } - } + public Asn1GeneralizedTime Date => m_date; - public OtherKeyAttribute OtherKeyAttribute - { - get { return other; } - } + public OtherKeyAttribute OtherKeyAttribute => m_other; /** * Produce an object suitable for an Asn1OutputStream. @@ -112,8 +84,9 @@ namespace Org.BouncyCastle.Asn1.Cms */ public override Asn1Object ToAsn1Object() { - Asn1EncodableVector v = new Asn1EncodableVector(subjectKeyIdentifier); - v.AddOptional(date, other); + Asn1EncodableVector v = new Asn1EncodableVector(3); + v.Add(m_subjectKeyIdentifier); + v.AddOptional(m_date, m_other); return new DerSequence(v); } } |