| File: System\Formats\Asn1\AsnDecoder.Null.cs | Web Access |
| Project: src\runtime\src\libraries\System.Formats.Asn1\src\System.Formats.Asn1.csproj (System.Formats.Asn1) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. namespace System.Formats.Asn1 { public static partial class AsnDecoder { /// <summary> /// Reads a Null value from <paramref name="source"/> with a specified tag under /// the specified encoding rules. /// </summary> /// <param name="source">The buffer containing encoded data.</param> /// <param name="ruleSet">The encoding constraints to use when interpreting the data.</param> /// <param name="bytesConsumed"> /// When this method returns, the total number of bytes for the encoded value. /// This parameter is treated as uninitialized. /// </param> /// <param name="expectedTag"> /// The tag to check for before reading, or <see langword="null"/> for the default tag (Universal 5). /// </param> /// <exception cref="ArgumentOutOfRangeException"> /// <paramref name="ruleSet"/> is not defined. /// </exception> /// <exception cref="AsnContentException"> /// The next value does not have the correct tag. /// /// -or- /// /// The length encoding is not valid under the current encoding rules. /// /// -or- /// /// The contents are not valid under the current encoding rules. /// </exception> /// <exception cref="ArgumentException"> /// <paramref name="expectedTag"/>.<see cref="Asn1Tag.TagClass"/> is /// <see cref="TagClass.Universal"/>, but /// <paramref name="expectedTag"/>.<see cref="Asn1Tag.TagValue"/> is not correct for /// the method. /// </exception> public static void ReadNull( ReadOnlySpan<byte> source, AsnEncodingRules ruleSet, out int bytesConsumed, Asn1Tag? expectedTag = null) { // T-REC-X.690-201508 sec 8.8.1 ReadOnlySpan<byte> contents = GetPrimitiveContentSpan( source, ruleSet, expectedTag ?? Asn1Tag.Null, UniversalTagNumber.Null, out int consumed); // T-REC-X.690-201508 sec 8.8.2 if (contents.Length != 0) { throw new AsnContentException(); } bytesConsumed = consumed; } } public partial class AsnReader { /// <summary> /// Reads the next value as a NULL with a specified tag. /// </summary> /// <param name="expectedTag"> /// The tag to check for before reading, or <see langword="null"/> for the default tag (Universal 5). /// </param> /// <exception cref="AsnContentException"> /// The next value does not have the correct tag. /// /// -or- /// /// The length encoding is not valid under the current encoding rules. /// /// -or- /// /// The contents are not valid under the current encoding rules. /// </exception> /// <exception cref="ArgumentException"> /// <paramref name="expectedTag"/>.<see cref="Asn1Tag.TagClass"/> is /// <see cref="TagClass.Universal"/>, but /// <paramref name="expectedTag"/>.<see cref="Asn1Tag.TagValue"/> is not correct for /// the method. /// </exception> public void ReadNull(Asn1Tag? expectedTag = null) { AsnDecoder.ReadNull(_data.Span, RuleSet, out int consumed, expectedTag); _data = _data.Slice(consumed); } } public ref partial struct ValueAsnReader { /// <summary> /// Reads the next value as a NULL with a specified tag. /// </summary> /// <param name="expectedTag"> /// The tag to check for before reading, or <see langword="null"/> for the default tag (Universal 5). /// </param> /// <exception cref="AsnContentException"> /// The next value does not have the correct tag. /// /// -or- /// /// The length encoding is not valid under the current encoding rules. /// /// -or- /// /// The contents are not valid under the current encoding rules. /// </exception> /// <exception cref="ArgumentException"> /// <paramref name="expectedTag"/>.<see cref="Asn1Tag.TagClass"/> is /// <see cref="TagClass.Universal"/>, but /// <paramref name="expectedTag"/>.<see cref="Asn1Tag.TagValue"/> is not correct for /// the method. /// </exception> public void ReadNull(Asn1Tag? expectedTag = null) { AsnDecoder.ReadNull(_data, RuleSet, out int consumed, expectedTag); _data = _data.Slice(consumed); } } }