public void Decode_TagTooLargeToFitInLong_ShouldThrowNotSupportedException()
        {
            var data = new byte[] { 0xBF, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0x00 };
            var ex   = Assert.Throws <NotSupportedException>(() => DerAsnIdentifier.Decode(new Queue <byte>(data)));

            Assert.That(ex.Message, Is.EqualTo("Tag number too large (more than 9 octets)"));
        }
        public void Equals_EqualPropertyValues_ShouldReturnTrue()
        {
            var a = new DerAsnIdentifier(DerAsnTagClass.Private, DerAsnEncodingType.Constructed, 1234);
            var b = new DerAsnIdentifier(DerAsnTagClass.Private, DerAsnEncodingType.Constructed, 1234);

            Assert.That(a.Equals(b), Is.True);
        }
        public void Decode_NotEnoughBytes_ShouldThrowInvalidOperationException()
        {
            var data = new byte[] { 0xBF, 0xC3 };
            var ex   = Assert.Throws <InvalidOperationException>(() => DerAsnIdentifier.Decode(new Queue <byte>(data)));

            Assert.That(ex.Message, Is.EqualTo("Unexpected end of queue"));
        }
        public void Decode_LowTagNumberForm_ShouldDecodeCorrectly()
        {
            var data = new Queue <byte>();

            data.Enqueue(0x85);
            var identifier = DerAsnIdentifier.Decode(data);

            Assert.That(data, Is.Empty);
            Assert.That(identifier.TagClass, Is.EqualTo(DerAsnTagClass.ContextSpecific));
            Assert.That(identifier.EncodingType, Is.EqualTo(DerAsnEncodingType.Primitive));
            Assert.That(identifier.Tag, Is.EqualTo(5));

            data.Enqueue(0x27);
            identifier = DerAsnIdentifier.Decode(data);
            Assert.That(data, Is.Empty);
            Assert.That(identifier.TagClass, Is.EqualTo(DerAsnTagClass.Universal));
            Assert.That(identifier.EncodingType, Is.EqualTo(DerAsnEncodingType.Constructed));
            Assert.That(identifier.Tag, Is.EqualTo(7));

            data.Enqueue(0x7E);
            identifier = DerAsnIdentifier.Decode(data);
            Assert.That(data, Is.Empty);
            Assert.That(identifier.TagClass, Is.EqualTo(DerAsnTagClass.Application));
            Assert.That(identifier.EncodingType, Is.EqualTo(DerAsnEncodingType.Constructed));
            Assert.That(identifier.Tag, Is.EqualTo(30));
        }
        public void Encode_HighTagNumberForm_ShouldEncodeCorrectly()
        {
            var identifier = new DerAsnIdentifier(DerAsnTagClass.ContextSpecific, DerAsnEncodingType.Constructed, 1097914);

            Assert.That(identifier.Encode(), Is.EqualTo(new byte[] { 0xBF, 0xC3, 0x81, 0x3A }));

            identifier = new DerAsnIdentifier(DerAsnTagClass.ContextSpecific, DerAsnEncodingType.Constructed, 31);
            Assert.That(identifier.Encode(), Is.EqualTo(new byte[] { 0xBF, 0x1F }));
        }
        public void Encode_LowTagNumberForm_ShouldEncodeCorrectly()
        {
            var identifier = new DerAsnIdentifier(DerAsnTagClass.ContextSpecific, DerAsnEncodingType.Primitive, 5);

            Assert.That(identifier.Encode(), Is.EqualTo(new byte[] { 0x85 }));

            identifier = new DerAsnIdentifier(DerAsnTagClass.Universal, DerAsnEncodingType.Constructed, 7);
            Assert.That(identifier.Encode(), Is.EqualTo(new byte[] { 0x27 }));

            identifier = new DerAsnIdentifier(DerAsnTagClass.Application, DerAsnEncodingType.Constructed, 30);
            Assert.That(identifier.Encode(), Is.EqualTo(new byte[] { 0x7E }));
        }
        public void Decode_HighTagNumberForm_ShouldDecodeCorrectly()
        {
            // 0xBF => [10][1][1 1111]
            // 0xC3 0x81 0x3A => [1]100 0011 [1]000 0001 [0]011 1010
            var data       = new Queue <byte>(new byte[] { 0xBF, 0xC3, 0x81, 0x3A });
            var identifier = DerAsnIdentifier.Decode(data);

            Assert.That(data, Is.Empty);
            Assert.That(identifier.TagClass, Is.EqualTo(DerAsnTagClass.ContextSpecific));
            Assert.That(identifier.EncodingType, Is.EqualTo(DerAsnEncodingType.Constructed));
            Assert.That(identifier.Tag, Is.EqualTo(1097914));
        }
        public void Constructor_ShouldSetProperties()
        {
            var identifier = new DerAsnIdentifier(DerAsnTagClass.ContextSpecific, DerAsnEncodingType.Primitive, 1234);

            Assert.That(identifier.TagClass, Is.EqualTo(DerAsnTagClass.ContextSpecific));
            Assert.That(identifier.EncodingType, Is.EqualTo(DerAsnEncodingType.Primitive));
            Assert.That(identifier.Tag, Is.EqualTo(1234));

            identifier = new DerAsnIdentifier(DerAsnTagClass.Universal, DerAsnEncodingType.Constructed, 5432);
            Assert.That(identifier.TagClass, Is.EqualTo(DerAsnTagClass.Universal));
            Assert.That(identifier.EncodingType, Is.EqualTo(DerAsnEncodingType.Constructed));
            Assert.That(identifier.Tag, Is.EqualTo(5432));
        }
        public void Equals_DifferentPropertyValues_ShouldReturnFalse()
        {
            var a = new DerAsnIdentifier(DerAsnTagClass.Private, DerAsnEncodingType.Constructed, 1234);
            var b = new DerAsnIdentifier(DerAsnTagClass.ContextSpecific, DerAsnEncodingType.Constructed, 1234);

            Assert.That(a.Equals(b), Is.False);

            b = new DerAsnIdentifier(DerAsnTagClass.Private, DerAsnEncodingType.Primitive, 1234);
            Assert.That(a.Equals(b), Is.False);

            b = new DerAsnIdentifier(DerAsnTagClass.Private, DerAsnEncodingType.Constructed, 123);
            Assert.That(a.Equals(b), Is.False);
        }
示例#10
0
        protected Base(DerAsnIdentifier identifier)
        {
            Identifier  = identifier;
            DecoderMock = new Mock <IDerAsnDecoder>();
            EncoderMock = new Mock <IDerAsnEncoder>();

            _valueConstructor = typeof(TDerAsnType) == typeof(DerAsnNull)
                ? typeof(TDerAsnType).GetConstructor(Array.Empty <Type>())
                : typeof(TDerAsnType).GetConstructor(new[] { typeof(TValue) });

            _decodeConstructor = typeof(TDerAsnType).GetConstructor(
                types: new[] { typeof(IDerAsnDecoder), typeof(DerAsnIdentifier), typeof(Queue <byte>) },
                bindingAttr: BindingFlags.NonPublic | BindingFlags.Instance,
                modifiers: null,
                binder: null);
        }
示例#11
0
 internal DerAsnEnumerated(IDerAsnDecoder decoder, DerAsnIdentifier identifier, Queue <byte> rawData)
     : base(decoder, identifier, rawData)
 {
 }
 internal DerAsnObjectIdentifier(IDerAsnDecoder decoder, DerAsnIdentifier identifier, Queue <byte> rawData)
     : base(decoder, identifier, rawData)
 {
 }
 public DerAsnObjectIdentifier(DerAsnIdentifier identifier, int[] value)
     : base(identifier, value)
 {
 }
 public DerAsnPrintableString(DerAsnIdentifier identifier, string value)
     : base(identifier, value)
 {
 }
示例#15
0
 public DerAsnInteger(DerAsnIdentifier identifier, BigInteger value)
     : base(identifier, value)
 {
 }
示例#16
0
 public DerAsnBoolean(DerAsnIdentifier identifier, bool value)
     : base(identifier, value)
 {
 }
示例#17
0
 public DerAsnNull(DerAsnIdentifier identifier)
     : base(identifier, null)
 {
 }
示例#18
0
 public DerAsnIa5String(DerAsnIdentifier identifier, string value)
     : base(identifier, value)
 {
 }
示例#19
0
 public OctetStringSequence(IDerAsnDecoder decoder, DerAsnIdentifier identifier, Queue <byte> rawData)
     : base(decoder, identifier, rawData)
 {
 }
示例#20
0
 public DerAsnSequence(DerAsnIdentifier identifier, DerAsnType[] value)
     : base(identifier, value)
 {
 }
示例#21
0
 internal DerAsnSequence(IDerAsnDecoder decoder, DerAsnIdentifier identifier, Queue <byte> rawData)
     : base(decoder, identifier, rawData)
 {
 }
示例#22
0
 public ContextSpecificSequence(IDerAsnDecoder decoder, DerAsnIdentifier identifier, Queue <byte> rawData)
     : base(decoder, identifier, rawData)
 {
 }
示例#23
0
 public DerAsnUtcTime(DerAsnIdentifier identifier, DateTimeOffset value)
     : base(identifier, value)
 {
 }
 public DerAsnOctetString(DerAsnIdentifier identifier, byte[] value)
     : base(identifier, value)
 {
 }
示例#25
0
 internal DerAsnBoolean(IDerAsnDecoder decoder, DerAsnIdentifier identifier, Queue <byte> rawData)
     : base(decoder, identifier, rawData)
 {
 }
示例#26
0
 public DerAsnBitString(DerAsnIdentifier identifier, BitArray value)
     : base(identifier, value)
 {
 }
示例#27
0
 internal DerAsnIa5String(IDerAsnDecoder decoder, DerAsnIdentifier identifier, Queue <byte> rawData)
     : base(decoder, identifier, rawData)
 {
 }
示例#28
0
 internal ContextSpecificString(IDerAsnDecoder decoder, DerAsnIdentifier identifier, Queue <byte> rawData)
     : base(decoder, identifier, rawData)
 {
 }