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.Equal( X509KeyUsageCSharpStyle.DecipherOnly, reader.GetNamedBitListValue <X509KeyUsageCSharpStyle>( new Asn1Tag((TagClass)tagClass, tagValue, true))); Assert.False(reader.HasData); reader = new AsnReader(inputData, (AsnEncodingRules)ruleSet); Assert.Equal( X509KeyUsageCSharpStyle.DecipherOnly, reader.GetNamedBitListValue <X509KeyUsageCSharpStyle>( new Asn1Tag((TagClass)tagClass, tagValue, false))); Assert.False(reader.HasData); }
public static void ParseValidTag( PublicTagClass tagClass, bool isConstructed, int tagValue, string inputHex) { byte[] inputBytes = inputHex.HexToByteArray(); bool parsed = Asn1Tag.TryDecode(inputBytes, out Asn1Tag tag, out int bytesRead); Assert.True(parsed, "Asn1Tag.TryParse"); Assert.Equal(inputBytes.Length, bytesRead); Assert.Equal((TagClass)tagClass, tag.TagClass); Assert.Equal(tagValue, tag.TagValue); if (isConstructed) { Assert.True(tag.IsConstructed, "tag.IsConstructed"); } else { Assert.False(tag.IsConstructed, "tag.IsConstructed"); } byte[] secondBytes = new byte[inputBytes.Length]; int written; Assert.False(tag.TryEncode(secondBytes.AsSpan(0, inputBytes.Length - 1), out written)); Assert.Equal(0, written); Assert.True(tag.TryEncode(secondBytes, out written)); Assert.Equal(inputBytes.Length, written); Assert.Equal(inputHex, secondBytes.ByteArrayToHex()); }
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.TryGetIA5StringBytes( new Asn1Tag((TagClass)tagClass, tagValue, true), out ReadOnlyMemory <byte> val1)); Assert.False(reader.HasData); reader = new AsnReader(inputData, (AsnEncodingRules)ruleSet); Assert.True( reader.TryGetIA5StringBytes( new Asn1Tag((TagClass)tagClass, tagValue, false), out ReadOnlyMemory <byte> val2)); Assert.False(reader.HasData); Assert.Equal(val1.ByteArrayToHex(), val2.ByteArrayToHex()); }
public static void ParseTagWithMoreData( PublicTagClass tagClass, bool isConstructed, int tagValue, string inputHex) { byte[] inputBytes = inputHex.HexToByteArray(); Array.Resize(ref inputBytes, inputBytes.Length + 3); bool parsed = Asn1Tag.TryDecode(inputBytes, out Asn1Tag tag, out int bytesRead); Assert.True(parsed, "Asn1Tag.TryParse"); Assert.Equal(inputHex.Length / 2, bytesRead); Assert.Equal((TagClass)tagClass, tag.TagClass); Assert.Equal(tagValue, tag.TagValue); if (isConstructed) { Assert.True(tag.IsConstructed, "tag.IsConstructed"); } else { Assert.False(tag.IsConstructed, "tag.IsConstructed"); } }
public static void ExpectedTag_IgnoresConstructed( PublicEncodingRules ruleSet, string inputHex, PublicTagClass tagClass, int tagValue) { byte[] inputData = inputHex.HexToByteArray(); AsnReader reader = new AsnReader(inputData, (AsnEncodingRules)ruleSet); reader.ReadNull(new Asn1Tag((TagClass)tagClass, tagValue, true)); Assert.False(reader.HasData); reader = new AsnReader(inputData, (AsnEncodingRules)ruleSet); reader.ReadNull(new Asn1Tag((TagClass)tagClass, tagValue, false)); Assert.False(reader.HasData); }
public static void ExpectedTag_IgnoresConstructed( PublicEncodingRules ruleSet, string inputHex, PublicTagClass tagClass, int tagValue) { byte[] inputData = inputHex.HexToByteArray(); AsnReader reader = new AsnReader(inputData, (AsnEncodingRules)ruleSet); ShortBacked val1 = reader.ReadEnumeratedValue <ShortBacked>(new Asn1Tag((TagClass)tagClass, tagValue, true)); Assert.False(reader.HasData); reader = new AsnReader(inputData, (AsnEncodingRules)ruleSet); ShortBacked val2 = reader.ReadEnumeratedValue <ShortBacked>(new Asn1Tag((TagClass)tagClass, tagValue, false)); Assert.False(reader.HasData); Assert.Equal(val1, val2); }
public static void EmptyData_Allows0UnusedBits( PublicEncodingRules ruleSet, PublicTagClass tagClass, int tagValue, string expectedHex) { AsnWriter writer = new AsnWriter((AsnEncodingRules)ruleSet); if (tagClass == PublicTagClass.Universal) { Debug.Assert(tagValue == (int)UniversalTagNumber.BitString); writer.WriteBitString(ReadOnlySpan<byte>.Empty, 0); } else { writer.WriteBitString(new Asn1Tag((TagClass)tagClass, tagValue), ReadOnlySpan<byte>.Empty, 0); } Verify(writer, expectedHex); }
public static void ExpectedTag_IgnoresConstructed( PublicEncodingRules ruleSet, string inputHex, PublicTagClass tagClass, int tagValue) { byte[] inputData = inputHex.HexToByteArray(); AsnReader reader = new AsnReader(inputData, (AsnEncodingRules)ruleSet); AsnReader val1 = reader.ReadSequence(new Asn1Tag((TagClass)tagClass, tagValue, true)); Assert.False(reader.HasData); reader = new AsnReader(inputData, (AsnEncodingRules)ruleSet); AsnReader val2 = reader.ReadSequence(new Asn1Tag((TagClass)tagClass, tagValue, false)); Assert.False(reader.HasData); Assert.Equal(val1.ReadEncodedValue().ByteArrayToHex(), val2.ReadEncodedValue().ByteArrayToHex()); }
public static void ExpectedTag_IgnoresConstructed( PublicEncodingRules ruleSet, string inputHex, PublicTagClass tagClass, int tagValue) { byte[] inputData = inputHex.HexToByteArray(); AsnReader reader = new AsnReader(inputData, (AsnEncodingRules)ruleSet); DateTimeOffset val1 = reader.GetGeneralizedTime(new Asn1Tag((TagClass)tagClass, tagValue, true)); Assert.False(reader.HasData); reader = new AsnReader(inputData, (AsnEncodingRules)ruleSet); DateTimeOffset val2 = reader.GetGeneralizedTime(new Asn1Tag((TagClass)tagClass, tagValue, false)); Assert.False(reader.HasData); Assert.Equal(val1, val2); }
public static void ExpectedTag_IgnoresConstructed( PublicEncodingRules ruleSet, string inputHex, PublicTagClass tagClass, int tagValue) { byte[] inputData = inputHex.HexToByteArray(); Asn1Tag constructedTag = new Asn1Tag((TagClass)tagClass, tagValue, true); Asn1Tag primitiveTag = new Asn1Tag((TagClass)tagClass, tagValue, false); AsnReader reader = new AsnReader(inputData, (AsnEncodingRules)ruleSet); string val1 = reader.ReadObjectIdentifierAsString(constructedTag); Assert.False(reader.HasData); reader = new AsnReader(inputData, (AsnEncodingRules)ruleSet); Oid oid1 = reader.ReadObjectIdentifier(constructedTag); Assert.False(reader.HasData); reader = new AsnReader(inputData, (AsnEncodingRules)ruleSet); string val2 = reader.ReadObjectIdentifierAsString(primitiveTag); Assert.False(reader.HasData); reader = new AsnReader(inputData, (AsnEncodingRules)ruleSet); Oid oid2 = reader.ReadObjectIdentifier(primitiveTag); Assert.False(reader.HasData); Assert.Equal(val1, val2); Assert.Equal(oid1.Value, oid2.Value); Assert.Equal(oid1.Value, val1); }