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.TryReadPrimitiveCharacterStringBytes( new Asn1Tag((TagClass)tagClass, tagValue, true), UniversalTagNumber.UTF8String, out ReadOnlyMemory <byte> val1)); Assert.False(reader.HasData); reader = new AsnReader(inputData, (AsnEncodingRules)ruleSet); Assert.True( reader.TryReadPrimitiveCharacterStringBytes( new Asn1Tag((TagClass)tagClass, tagValue, false), UniversalTagNumber.UTF8String, out ReadOnlyMemory <byte> val2)); Assert.False(reader.HasData); Assert.Equal(val1.ByteArrayToHex(), val2.ByteArrayToHex()); }
public static void TryGetUTF8StringBytes( PublicEncodingRules ruleSet, string inputHex, bool expectSuccess) { byte[] inputData = inputHex.HexToByteArray(); AsnReader reader = new AsnReader(inputData, (AsnEncodingRules)ruleSet); bool got = reader.TryReadPrimitiveCharacterStringBytes( UniversalTagNumber.UTF8String, out ReadOnlyMemory <byte> contents); if (expectSuccess) { Assert.True(got, "reader.TryReadUTF8StringBytes"); Assert.True( Unsafe.AreSame( ref MemoryMarshal.GetReference(contents.Span), ref inputData[2])); } else { Assert.False(got, "reader.TryReadUTF8StringBytes"); Assert.True(contents.IsEmpty, "contents.IsEmpty"); } }
public static bool TryGetIA5StringBytes( this AsnReader reader, out ReadOnlyMemory <byte> contents) { return(reader.TryReadPrimitiveCharacterStringBytes( UniversalTagNumber.IA5String, out contents)); }
public static bool TryReadBMPStringBytes( this AsnReader reader, out ReadOnlyMemory <byte> contents) { return(reader.TryReadPrimitiveCharacterStringBytes( new Asn1Tag(UniversalTagNumber.BMPString), out contents)); }
public static bool TryReadBMPStringBytes( this AsnReader reader, Asn1Tag expectedTag, out ReadOnlyMemory <byte> contents) { return(reader.TryReadPrimitiveCharacterStringBytes( expectedTag, out contents)); }
public static void TryGetUTF8StringBytes_Throws( string description, PublicEncodingRules ruleSet, string inputHex) { byte[] inputData = inputHex.HexToByteArray(); AsnReader reader = new AsnReader(inputData, (AsnEncodingRules)ruleSet); Assert.Throws <CryptographicException>( () => reader.TryReadPrimitiveCharacterStringBytes(UniversalTagNumber.UTF8String, out _)); }
public static void TagMustBeCorrect_Universal(PublicEncodingRules ruleSet) { byte[] inputData = { 0x0C, 2, (byte)'e', (byte)'l' }; AsnReader reader = new AsnReader(inputData, (AsnEncodingRules)ruleSet); const UniversalTagNumber EncodingType = UniversalTagNumber.UTF8String; AssertExtensions.Throws <ArgumentException>( "expectedTag", () => reader.TryReadPrimitiveCharacterStringBytes(Asn1Tag.Null, EncodingType, out _)); Assert.True(reader.HasData, "HasData after bad universal tag"); Assert.Throws <CryptographicException>( () => reader.TryReadPrimitiveCharacterStringBytes(new Asn1Tag(TagClass.ContextSpecific, 0), EncodingType, out _)); Assert.True(reader.HasData, "HasData after wrong tag"); Assert.True(reader.TryReadPrimitiveCharacterStringBytes(EncodingType, out ReadOnlyMemory <byte> value)); Assert.Equal("656C", value.ByteArrayToHex()); Assert.False(reader.HasData, "HasData after read"); }
public static void TryGetUTF8StringBytes_Throws( string description, AsnEncodingRules ruleSet, string inputHex) { _ = description; byte[] inputData = inputHex.HexToByteArray(); AsnReader reader = new AsnReader(inputData, ruleSet); Assert.Throws <AsnContentException>( () => reader.TryReadPrimitiveCharacterStringBytes(new Asn1Tag(UniversalTagNumber.UTF8String), out _)); }
public static void TagMustBeCorrect_Custom(AsnEncodingRules ruleSet) { byte[] inputData = { 0x87, 2, (byte)'h', (byte)'i' }; AsnReader reader = new AsnReader(inputData, ruleSet); const UniversalTagNumber EncodingType = UniversalTagNumber.UTF8String; AssertExtensions.Throws <ArgumentException>( "expectedTag", () => reader.TryReadPrimitiveCharacterStringBytes(Asn1Tag.Null, out _)); Assert.True(reader.HasData, "HasData after bad universal tag"); Assert.Throws <AsnContentException>( () => reader.TryReadPrimitiveCharacterStringBytes(new Asn1Tag(EncodingType), out _)); Assert.True(reader.HasData, "HasData after default tag"); Assert.Throws <AsnContentException>( () => reader.TryReadPrimitiveCharacterStringBytes(new Asn1Tag(TagClass.Application, 0), out _)); Assert.True(reader.HasData, "HasData after wrong custom class"); Assert.Throws <AsnContentException>( () => reader.TryReadPrimitiveCharacterStringBytes(new Asn1Tag(TagClass.ContextSpecific, 1), out _)); Assert.True(reader.HasData, "HasData after wrong custom tag value"); Assert.True( reader.TryReadPrimitiveCharacterStringBytes( new Asn1Tag(TagClass.ContextSpecific, 7), out ReadOnlyMemory <byte> value)); Assert.Equal("6869", value.ByteArrayToHex()); Assert.False(reader.HasData, "HasData after reading value"); }