/// <summary> /// Decodes ASN.1-encoded byte array that represents a collection of <see cref="X509Extension"/> objects. /// </summary> /// <param name="extensions">Destination collection where decoded extensions will be added.</param> /// <param name="rawData">ASN.1-encoded byte array that represents extension collection.</param> /// <exception cref="Asn1InvalidTagException">Decoder encountered an unexpected ASN.1 type identifier.</exception> /// <exception cref="ArgumentNullException"> /// <strong>extensions</strong> and/or <strong>rawData</strong> parameter is null. /// </exception> /// <remarks>If current collection contains items, decoded items will be appended to existing items.</remarks> public static void Decode(this X509ExtensionCollection extensions, Byte[] rawData) { if (extensions == null) { throw new ArgumentNullException(nameof(extensions)); } if (rawData == null) { throw new ArgumentNullException(nameof(rawData)); } Asn1Reader asn = new Asn1Reader(rawData); if (asn.Tag != 48) { throw new Asn1InvalidTagException(); } if (!asn.MoveNext() || asn.NextOffset == 0) { return; } do { extensions.Add(X509ExtensionExtensions.Decode(asn.GetTagRawData())); } while (asn.MoveNextCurrentLevel()); }
/// <summary> /// Decodes ASN.1-encoded byte array that represents a collection of <see cref="X509Extension"/> objects. /// </summary> /// <param name="extensions">Destination collection where decoded extensions will be added.</param> /// <param name="asn">ASN.1 reader which points to the beginning of the extenstion collection structure.</param> /// <exception cref="Asn1InvalidTagException">Decoder encountered an unexpected ASN.1 type identifier.</exception> /// <exception cref="ArgumentNullException"> /// <strong>extensions</strong> and/or <strong>asn</strong> parameter is null. /// </exception> /// <remarks> If current collection contains items, decoded items will be appended to existing items.</remarks> public static void Decode(this X509ExtensionCollection extensions, Asn1Reader asn) { if (extensions == null) { throw new ArgumentNullException(nameof(extensions)); } if (asn == null) { throw new ArgumentNullException(nameof(asn)); } Int32 offset = asn.Offset; if (!asn.MoveNext() || asn.PayloadLength == 0) { return; } do { extensions.Add(X509ExtensionExtensions.Decode(asn)); } while (asn.MoveNextSibling()); asn.Seek(offset); }