Example #1
0
        internal static unsafe string Stringify(Asn1Tag tag)
        {
            byte *      stackspace = stackalloc byte[10];
            Span <byte> dest       = new Span <byte>(stackspace, 10);

            Assert.True(tag.TryEncode(dest, out int size));
            return(dest.Slice(0, size).ByteArrayToHex());
        }
Example #2
0
        public static void VerifyEncode(TagClass tagClass, int tagValue, bool constructed, string expectedHex)
        {
            Asn1Tag     tag = new Asn1Tag(tagClass, tagValue, constructed);
            Span <byte> buf = stackalloc byte[10];

            Assert.False(tag.TryEncode(Span <byte> .Empty, out int written));
            Assert.Equal(0, written);

            int expectedSize = expectedHex.Length / 2;

            Assert.Equal(expectedSize, tag.CalculateEncodedSize());

            Assert.False(tag.TryEncode(buf.Slice(0, expectedSize - 1), out written));
            Assert.Equal(0, written);

            AssertExtensions.Throws <ArgumentException>(
                "destination",
                () =>
            {
                Span <byte> tmp = stackalloc byte[expectedSize - 1];
                return(tag.Encode(tmp));
            });

            Assert.True(tag.TryEncode(buf, out written));
            Assert.Equal(expectedSize, written);
            Assert.Equal(expectedHex, buf.Slice(0, written).ByteArrayToHex());

            written = tag.Encode(buf.Slice(1));
            Assert.Equal(expectedSize, written);
            Assert.Equal(expectedHex, buf.Slice(1, written).ByteArrayToHex());

            Assert.True(tag.TryEncode(buf.Slice(0, expectedSize), out written));
            Assert.Equal(expectedSize, written);
            Assert.Equal(expectedHex, buf.Slice(0, written).ByteArrayToHex());

            written = tag.Encode(buf.Slice(1, expectedSize));
            Assert.Equal(expectedSize, written);
            Assert.Equal(expectedHex, buf.Slice(1, written).ByteArrayToHex());
        }