Пример #1
0
 def test_skip_constructed(self):
     buf = '\x30\x06\x02\x01\x01\x02\x01\x02\x02\x01\x03'
     dec = asn1.Decoder()
     dec.start(buf)
     dec.read()
     tag, val = dec.read()
     assert val == 3
     assert dec.eof()
Пример #2
0
 def test_error_missing_tag_bytes(self):
     buf = '\x3f'
     dec = asn1.Decoder()
     dec.start(buf)
     assert_raises(asn1.Error, dec.peek)
     buf = '\x3f\x83'
     dec.start(buf)
     assert_raises(asn1.Error, dec.peek)
Пример #3
0
 def test_error_stack(self):
     buf = '\x30\x08\x02\x01\x01\x04\x03foo'
     dec = asn1.Decoder()
     dec.start(buf)
     assert_raises(asn1.Error, dec.leave)
     dec.enter()
     dec.leave()
     assert_raises(asn1.Error, dec.leave)
Пример #4
0
 def test_null(self):
     buf = '\x05\x00'
     dec = asn1.Decoder()
     dec.start(buf)
     tag = dec.peek()
     assert tag == (asn1.Null, asn1.TypePrimitive, asn1.ClassUniversal)
     tag, val = dec.read()
     assert val is None
Пример #5
0
 def test_skip_primitive(self):
     buf = '\x02\x01\x01\x02\x01\x02'
     dec = asn1.Decoder()
     dec.start(buf)
     dec.read()
     tag, val = dec.read()
     assert val == 2
     assert dec.eof()
Пример #6
0
 def test_long_tag_id(self):
     buf = '\x3f\x83\xff\x7f\x03\x02\x01\x01'
     dec = asn1.Decoder()
     dec.start(buf)
     tag = dec.peek()
     assert tag == (0xffff, asn1.TypeConstructed, asn1.ClassUniversal)
     dec.enter()
     tag, val = dec.read()
     assert val == 1
Пример #7
0
 def test_private(self):
     buf = '\xe1\x03\x02\x01\x01'
     dec = asn1.Decoder()
     dec.start(buf)
     tag = dec.peek()
     assert tag == (1, asn1.TypeConstructed, asn1.ClassPrivate)
     dec.enter()
     tag, val = dec.read()
     assert val == 1
Пример #8
0
 def test_application(self):
     buf = '\x61\x03\x02\x01\x01'
     dec = asn1.Decoder()
     dec.start(buf)
     tag = dec.peek()
     assert tag == (1, asn1.TypeConstructed, asn1.ClassApplication)
     dec.enter()
     tag, val = dec.read()
     assert val == 1
Пример #9
0
 def test_enumerated(self):
     buf = '\x0a\x01\x01'
     dec = asn1.Decoder()
     dec.start(buf)
     tag = dec.peek()
     assert tag == (asn1.Enumerated, asn1.TypePrimitive, asn1.ClassUniversal)
     tag, val = dec.read()
     assert isinstance(val, int)
     assert val == 1
Пример #10
0
 def test_object_identifier(self):
     dec = asn1.Decoder()
     buf = '\x06\x02\x2a\x03'
     dec.start(buf)
     tag = dec.peek()
     assert tag == (asn1.ObjectIdentifier, asn1.TypePrimitive,
                    asn1.ClassUniversal)
     tag, val = dec.read()
     assert val == '1.2.3'
Пример #11
0
 def test_octet_string(self):
     buf = '\x04\x03foo'
     dec = asn1.Decoder()
     dec.start(buf)
     tag = dec.peek()
     assert tag == (asn1.OctetString, asn1.TypePrimitive, asn1.ClassUniversal)
     tag, val = dec.read()
     assert isinstance(val, str)
     assert val == 'foo'
Пример #12
0
 def test_read_multiple(self):
     buf = '\x02\x01\x01\x02\x01\x02'
     dec = asn1.Decoder()
     dec.start(buf)
     tag, val = dec.read()
     assert val == 1
     tag, val = dec.read()
     assert val == 2
     assert dec.eof()
Пример #13
0
 def test_set_of(self):
     buf = '\x31\x06\x02\x01\x01\x02\x01\x02'
     dec = asn1.Decoder()
     dec.start(buf)
     tag = dec.peek()
     assert tag == (asn1.Set, asn1.TypeConstructed, asn1.ClassUniversal)
     dec.enter()
     tag, val = dec.read()
     assert val == 1
     tag, val = dec.read()
     assert val == 2
Пример #14
0
 def test_sequence(self):
     buf = '\x30\x08\x02\x01\x01\x04\x03foo'
     dec = asn1.Decoder()
     dec.start(buf)
     tag = dec.peek()
     assert tag == (asn1.Sequence, asn1.TypeConstructed, asn1.ClassUniversal)
     dec.enter()
     tag, val = dec.read()
     assert val == 1
     tag, val = dec.read()
     assert val == 'foo'
Пример #15
0
    def parse_search_result(self, buffer):
        """Parse an LDAP search result.

        This function returns a list of search result. Each entry in the list
        is a (msgid, dn, attrs) tuple. attrs is a dictionary with LDAP types
        as keys and a list of attribute values as its values.
        """
        decoder = asn1.Decoder()
        decoder.start(buffer)
        messages = []
        while True:
            tag = decoder.peek()
            if tag is None:
                break
            self._check_tag(tag, asn1.Sequence)
            decoder.enter()  # enter LDAPMessage
            self._check_tag(decoder.peek(), asn1.Integer)
            msgid = decoder.read()[1]  # messageID
            tag = decoder.peek()
            self._check_tag(tag, (4, 5), asn1.TypeConstructed,
                            asn1.ClassApplication)
            if tag[0] == 5:
                break
            decoder.enter()  #  SearchResultEntry
            self._check_tag(decoder.peek(), asn1.OctetString)
            dn = decoder.read()[1]  # objectName
            self._check_tag(decoder.peek(), asn1.Sequence)
            decoder.enter()  # enter attributes
            attrs = {}
            while True:
                tag = decoder.peek()
                if tag is None:
                    break
                self._check_tag(tag, asn1.Sequence)
                decoder.enter()  # one attribute
                self._check_tag(decoder.peek(), asn1.OctetString)
                name = decoder.read()[1]  # type
                self._check_tag(decoder.peek(), asn1.Set)
                decoder.enter()  # vals
                values = []
                while True:
                    tag = decoder.peek()
                    if tag is None:
                        break
                    self._check_tag(tag, asn1.OctetString)
                    values.append(decoder.read()[1])
                attrs[name] = values
                decoder.leave()  # leave vals
                decoder.leave()  # leave attribute
            decoder.leave()  # leave attributes
            messages.append((msgid, dn, attrs))
        return messages
Пример #16
0
 def parse_message_header(self, buffer):
     """Parse an LDAP header and return the tuple (messageid,
     protocolOp)."""
     decoder = asn1.Decoder()
     decoder.start(buffer)
     self._check_tag(decoder.peek(), asn1.Sequence)
     decoder.enter()
     self._check_tag(decoder.peek(), asn1.Integer)
     msgid = decoder.read()[1]
     tag = decoder.peek()
     self._check_tag(tag, None, asn1.TypeConstructed, asn1.ClassApplication)
     op = tag[0]
     return (msgid, op)
Пример #17
0
 def test_long_object_identifier(self):
     dec = asn1.Decoder()
     buf = '\x06\x03\x8c\x1a\x03'
     dec.start(buf)
     tag, val = dec.read()
     assert val == '39.2.3'
     buf = '\x06\x02\x4f\x03'
     dec.start(buf)
     tag, val = dec.read()
     assert val == '1.39.3'
     buf = '\x06\x04\x2a\x92\xa7\x60'
     dec.start(buf)
     tag, val = dec.read()
     assert val == '1.2.300000'
Пример #18
0
 def test_twos_complement_boundaries(self):
     buf = '\x02\x01\x7f'
     dec = asn1.Decoder()
     dec.start(buf)
     tag, val = dec.read()
     assert val == 127
     buf = '\x02\x02\x00\x80'
     dec.start(buf)
     tag, val = dec.read()
     assert val == 128
     buf = '\x02\x01\x80'
     dec.start(buf)
     tag, val = dec.read()
     assert val == -128
     buf = '\x02\x02\xff\x7f'
     dec.start(buf)
     tag, val = dec.read()
     assert val == -129
Пример #19
0
 def test_boolean(self):
     buf = '\x01\x01\xff'
     dec = asn1.Decoder()
     dec.start(buf)
     tag = dec.peek()
     assert tag == (asn1.Boolean, asn1.TypePrimitive, asn1.ClassUniversal)
     tag, val = dec.read()
     assert isinstance(val, int)
     assert val == True
     buf = '\x01\x01\x01'
     dec.start(buf)
     tag, val = dec.read()
     assert isinstance(val, int)
     assert val == True
     buf = '\x01\x01\x00'
     dec.start(buf)
     tag, val = dec.read()
     assert isinstance(val, int)
     assert val == False
Пример #20
0
 def test_error_object_identifier_with_too_large_first_component(self):
     buf = '\x06\x02\x8c\x40'
     dec = asn1.Decoder()
     dec.start(buf)
     assert_raises(asn1.Error, dec.read)
Пример #21
0
 def test_error_non_normalised_object_identifier(self):
     buf = '\x06\x02\x80\x01'
     dec = asn1.Decoder()
     dec.start(buf)
     assert_raises(asn1.Error, dec.read)
Пример #22
0
 def test_error_non_normalized_negative_integer(self):
     buf = '\x02\x02\xff\x80'
     dec = asn1.Decoder()
     dec.start(buf)
     assert_raises(asn1.Error, dec.read)
Пример #23
0
 def test_error_missing_value_bytes(self):
     buf = '\x02\x02\x01'
     dec = asn1.Decoder()
     dec.start(buf)
     assert_raises(asn1.Error, dec.read)
Пример #24
0
 def test_error_too_many_length_bytes(self):
     buf = '\x04\xff' + '\xff' * 0x7f
     dec = asn1.Decoder()
     dec.start(buf)
     assert_raises(asn1.Error, dec.read)
Пример #25
0
 def test_error_missing_length_bytes(self):
     buf = '\x04\x82\xff'
     dec = asn1.Decoder()
     dec.start(buf)
     assert_raises(asn1.Error, dec.read)
Пример #26
0
 def test_error_no_length_bytes(self):
     buf = '\x02'
     dec = asn1.Decoder()
     dec.start(buf)
     assert_raises(asn1.Error, dec.read)
Пример #27
0
 def test_no_input(self):
     dec = asn1.Decoder()
     dec.start('')
     tag = dec.peek()
     assert tag is None
Пример #28
0
 def test_real_object_identifier(self):
     dec = asn1.Decoder()
     buf = '\x06\x0a\x2a\x86\x48\x86\xf7\x12\x01\x02\x01\x01'
     dec.start(buf)
     tag, val = dec.read()
     assert val == '1.2.840.113554.1.2.1.1'
Пример #29
0
 def test_error_init(self):
     dec = asn1.Decoder()
     assert_raises(asn1.Error, dec.peek)
     assert_raises(asn1.Error, dec.read)
     assert_raises(asn1.Error, dec.enter)
     assert_raises(asn1.Error, dec.leave)
Пример #30
0
 def test_long_tag_length(self):
     buf = '\x04\x82\xff\xff' + 'x' * 0xffff
     dec = asn1.Decoder()
     dec.start(buf)
     tag, val = dec.read()
     assert val == 'x' * 0xffff