public static void TagMustBeCorrect_Custom(PublicEncodingRules ruleSet) { byte[] inputData = { 0x87, 2, 0x20, 0x10 }; AsnReader reader = new AsnReader(inputData, (AsnEncodingRules)ruleSet); AssertExtensions.Throws <ArgumentException>( "expectedTag", () => reader.TryReadBMPStringBytes(Asn1Tag.Null, out _)); Assert.True(reader.HasData, "HasData after bad universal tag"); Assert.Throws <CryptographicException>(() => reader.TryReadBMPStringBytes(out _)); Assert.True(reader.HasData, "HasData after default tag"); Assert.Throws <CryptographicException>( () => reader.TryReadBMPStringBytes(new Asn1Tag(TagClass.Application, 0), out _)); Assert.True(reader.HasData, "HasData after wrong custom class"); Assert.Throws <CryptographicException>( () => reader.TryReadBMPStringBytes(new Asn1Tag(TagClass.ContextSpecific, 1), out _)); Assert.True(reader.HasData, "HasData after wrong custom tag value"); Assert.True( reader.TryReadBMPStringBytes( new Asn1Tag(TagClass.ContextSpecific, 7), out ReadOnlyMemory <byte> value)); Assert.Equal("2010", value.ByteArrayToHex()); Assert.False(reader.HasData, "HasData after reading value"); }
public static void ExpectedTag_IgnoresConstructed( PublicEncodingRules ruleSet, string inputHex, PublicTagClass tagClass, int tagValue) { byte[] inputData = inputHex.HexToByteArray(); AsnReader reader = new AsnReader(inputData, (AsnEncodingRules)ruleSet); Assert.True( reader.TryReadBMPStringBytes( new Asn1Tag((TagClass)tagClass, tagValue, true), out ReadOnlyMemory <byte> val1)); Assert.False(reader.HasData); reader = new AsnReader(inputData, (AsnEncodingRules)ruleSet); Assert.True( reader.TryReadBMPStringBytes( new Asn1Tag((TagClass)tagClass, tagValue, false), out ReadOnlyMemory <byte> val2)); Assert.False(reader.HasData); Assert.Equal(val1.ByteArrayToHex(), val2.ByteArrayToHex()); }
public static void TryReadBMPStringBytes( PublicEncodingRules ruleSet, string inputHex, bool expectSuccess) { byte[] inputData = inputHex.HexToByteArray(); AsnReader reader = new AsnReader(inputData, (AsnEncodingRules)ruleSet); bool got = reader.TryReadBMPStringBytes(out ReadOnlyMemory <byte> contents); if (expectSuccess) { Assert.True(got, "reader.TryReadBMPStringBytes"); Assert.True( Unsafe.AreSame( ref MemoryMarshal.GetReference(contents.Span), ref inputData[2])); } else { Assert.False(got, "reader.TryReadBMPStringBytes"); Assert.True(contents.IsEmpty, "contents.IsEmpty"); } }
public static void TagMustBeCorrect_Universal(PublicEncodingRules ruleSet) { byte[] inputData = { 0x1E, 4, 0, (byte)'h', 0, (byte)'i' }; AsnReader reader = new AsnReader(inputData, (AsnEncodingRules)ruleSet); AssertExtensions.Throws <ArgumentException>( "expectedTag", () => reader.TryReadBMPStringBytes(Asn1Tag.Null, out _)); Assert.True(reader.HasData, "HasData after bad universal tag"); Assert.Throws <CryptographicException>( () => reader.TryReadBMPStringBytes(new Asn1Tag(TagClass.ContextSpecific, 0), out _)); Assert.True(reader.HasData, "HasData after wrong tag"); Assert.True(reader.TryReadBMPStringBytes(out ReadOnlyMemory <byte> value)); Assert.Equal("00680069", value.ByteArrayToHex()); Assert.False(reader.HasData, "HasData after read"); }
public static void TryReadBMPStringBytes_Throws( string description, PublicEncodingRules ruleSet, string inputHex) { byte[] inputData = inputHex.HexToByteArray(); AsnReader reader = new AsnReader(inputData, (AsnEncodingRules)ruleSet); Assert.Throws <CryptographicException>( () => { reader.TryReadBMPStringBytes(out ReadOnlyMemory <byte> contents); }); }