/// <summary> /// Indicate that the open Set-Of with the specified tag is closed, /// returning the writer to the parent context. /// </summary> /// <param name="tag">The tag to write.</param> /// <remarks> /// In <see cref="AsnEncodingRules.CER"/> and <see cref="AsnEncodingRules.DER"/> modes /// the writer will sort the Set-Of elements when the tag is closed. /// </remarks> /// <exception cref="ArgumentException"> /// <paramref name="tag"/>.<see cref="Asn1Tag.TagClass"/> is /// <see cref="TagClass.Universal"/>, but /// <paramref name="tag"/>.<see cref="Asn1Tag.TagValue"/> is not correct for /// the method /// </exception> /// <exception cref="InvalidOperationException"> /// the writer is not currently positioned within a Set-Of with the specified tag /// </exception> /// <exception cref="ObjectDisposedException">The writer has been Disposed.</exception> /// <seealso cref="PushSetOf(Asn1Tag)"/> public void PopSetOf(Asn1Tag tag) { CheckUniversalTag(tag, UniversalTagNumber.SetOf); // Assert the constructed flag, in case it wasn't. this.PopSetOfCore(tag.AsConstructed()); }
/// <summary> /// Begin writing a Sequence with a specified tag. /// </summary> /// <param name="tag">The tag to write.</param> /// <exception cref="ArgumentException"> /// <paramref name="tag"/>.<see cref="Asn1Tag.TagClass"/> is /// <see cref="TagClass.Universal"/>, but /// <paramref name="tag"/>.<see cref="Asn1Tag.TagValue"/> is not correct for /// the method /// </exception> /// <exception cref="ObjectDisposedException">The writer has been Disposed.</exception> /// <seealso cref="PopSequence(Asn1Tag)"/> public void PushSequence(Asn1Tag tag) { CheckUniversalTag(tag, UniversalTagNumber.Sequence); // Assert the constructed flag, in case it wasn't. this.PushSequenceCore(tag.AsConstructed()); }
/// <summary> /// Indicate that the open Sequence with the specified tag is closed, /// returning the writer to the parent context. /// </summary> /// <param name="tag">The tag to write.</param> /// <exception cref="ArgumentException"> /// <paramref name="tag"/>.<see cref="Asn1Tag.TagClass"/> is /// <see cref="TagClass.Universal"/>, but /// <paramref name="tag"/>.<see cref="Asn1Tag.TagValue"/> is not correct for /// the method /// </exception> /// <exception cref="InvalidOperationException"> /// the writer is not currently positioned within a Sequence with the specified tag /// </exception> /// <exception cref="ObjectDisposedException">The writer has been Disposed.</exception> /// <seealso cref="PopSequence(System.Security.Cryptography.Asn1.Asn1Tag)"/> /// <seealso cref="PushSequence()"/> public void PopSequence(Asn1Tag tag) { // PopSequence shouldn't be used to pop a SetOf. CheckUniversalTag(tag, UniversalTagNumber.Sequence); // Assert the constructed flag, in case it wasn't. this.PopSequenceCore(tag.AsConstructed()); }
// T-REC-X.690-201508 sec 8.9, 8.10 private void PushSequenceCore(Asn1Tag tag) { this.PushTag(tag.AsConstructed(), UniversalTagNumber.Sequence); }