예제 #1
0
 def __init__(self, tag=None, byte_string=None):
     self.tag = tag
     if not self.tag:
         if byte_string:
             self.tag = ber_decoder.Tag()
             self.tag.decode(byte_string)
     self.data_tags = (
     )  # This must be a tuple of the data tags for this Module
예제 #2
0
 def decode(self):
     if self.tag:
         if self.tag.header.type == 1 and self.tag.header.data_length > 0:
             index_from = 0
             data_tags_octets_counter = self.tag.header.data_length  # number of header_octets for data tags
             cdr_last_octet = index_from + self.tag.header.data_length  # pointer to the end of the CDR
             while data_tags_octets_counter > 0:  # as long I have bytes to read
                 tag_content = self.tag.value[index_from:cdr_last_octet]
                 header = ber_decoder.Header(tag_content)
                 data_tag = self.get_data_tag(header)
                 data_tag.decode(tag_content)
                 self.add_data_tag(data_tag)
                 if data_tag.header.type == 1 and data_tag.header.data_length > 0:
                     # Here I load any nested Tag in this Constructed Tag
                     nested_index = 0
                     while nested_index < data_tag.header.data_length:
                         nested_tag = ber_decoder.Tag()
                         nested_tag.decode(data_tag.value[nested_index:])
                         nested_index += nested_tag.header.total_octets
                         data_tag.add_nested_tag(nested_tag)
                 index_from += data_tag.header.total_octets
                 data_tags_octets_counter -= data_tag.header.total_octets
     else:
         raise ValueError("Can't decode without Tag")
예제 #3
0
 def test_constructed_indefinite_length(self):
     data = '\xa1\x80\xa0\x82\x01]\xa1\x82\x01Y\x9f!\x01\x03\x8c\x03\x00\x00\'\x89\x03\r\x05\x07\x94\x06MSRSR1\x8d\x03\x00\x00\x00\x82\x03l\xe8\r\x92\x02\x00\x01\x93\x01\x00\x8a\x03\x0f\x05\x10\x8b\x03\x0f\x056\x9ff\x01\x04\x95\x07\x11Ep\tp\x01\xf3\x86\x08S\x12rP\x82DT\xf0\x9f\x81\x0f\x08S\x12rP\x82DTr\x85\x08\'\x02\x07#psQ\xf5\x9d\x01\x11\x9f/\x01\x05\x9b\x07\'\xf2p\t\x7f\xda9\x87\x07\x11E\x11UH\x89U\x9fU\x05\x81\xbc\xe5\x00\x00\x9fV\x07\x11Ep\tp\x01\xf3\x99\x07\x11Ep\tp\x01\xf3\x9a\x03\x0f\x05\x01\x9fe\x01\x00\x9fd\x01\x08\x9fi\x01\x08\x9fh\x01\x08\x9fj\x02\x00P\x9fk\x01\x00\x9fl\x01\x02\x9fm\x01\x02\x9fq\x02\x07\x03\x9fr\x02\x01\x00\x9fs\x02\x01\x00\x9fn\x02\x01\x06\x9fo\x02\x01\x03\x9fp\x02\x05\x03\x9f\x81\x19\x01\x03\x84\x06A\x11\x94\x94\x80\x06\xbfK\x0f\x80\x04\x00\x00\x00\x0f\x81\x07\x11Ep\t\x00\x05\xf2\x97\x07URRSR1I\x9fB\x01\x01\x81\x03\x1aV\xf0\x9fD\x05\x81\xbc\xe5\x00\x00\x83\x01\x01\x80\x03\x0b\x02\r\x9f?\x01\x13\x90\x01\x00\x91\x02\x00\x01\x8f\x01\x00\x8e\x03\x00\x00\x12\x9f#\x02\x00\x03\x9c\x07\'\xf2p\t\x7f\xda9\x9f[\x07URRSR1I\x9fJ\x06!\x11UH\x89U\x96\x05DJAMO\x9f"\x01\x00\x88\x01\x00\xa0g\xaeT\x95\x06MSRSR1\x8d\x03l\xe8\x0e\x9ff\x01\x04\x81\x02\x00\x00\x83\x02\x00\x01\x80\x03\x1aV\xf1\x82\x05\x81\xbc\xe5\x00\x00\x84\x02\x00\x08\x98\x05\x81\xbc\xe5\x00\x00\x99\x07\x11Ep\tp\x01\xf3\xa5\x15\x80\x01\x02\x81\x04\x00\x00\x00\x0f\x85\n\x92\x00\x11\x04Ep\t\x00\x05\x02\x9c\x02\x05\x800\x80\xb0\x0b\x86\x03\x0f\x04:\x88\x011\x89\x01\x01\x00\x00\xa0?\xaf=\x95\x06MSRSR1\x8d\x03l\xe8\x0f\x9ff\x01\x04\x81\x02\x00\x00\x83\x02\x00\x01\x80\x03\x1aW$\x82\x05\x81\xbc\xe5\x00\x00\x98\x05\x81\xbc\xe5\x00\x00\x99\x07\x11Ep\tp\x01\xf3\x84\x02\x00\x01\x9c\x02\x05\x80\xa0\x81\xab\xa0\x81\xa8\x9a\x01\x03\x8b\x03\x00\x00\'\x88\x03\r\x05\x07\x93\x06MSRSR1\x8c\x03\x00\x00\x00\x82\x03l\xe8\x10\x90\x02\x00\x01\x91\x01\x00\x89\x03\x0f\x05\x10\x8a\x03\x0f\x056\x9ff\x01\x04\x9f(\x03\x1aV\xf0\x83\x01\x01\x9f2\x07\x11E\x11UH\x89U\x80\x03\x0b\x02\x01\x8d\x03\x00\x00\x11\x9f*\x01\x13\x9f\x1f\x01\x00\x9f\\\x01\x00\x98\x01\x01\x8f\x01\x00\x9f.\x05\x81\xbc\xe5\x00\x00\x95\x06HGUESP\x96\x07URRSR1I\x8e\x01\x00\x9f[\x061\x11\x94\x94\x80\x06\x84\x06A\x11\x94\x94\x80\x06\x85\x07\x11E\x11UH\x89U\x9b\x01\x00\x81\x03\x1aW&\x9c\x02\x00\x03\x87\x01\x00\x00\x00'
     tag = ber_decoder.Tag(byte_string=data)
     self.assertEqual(0, tag.header.data_length)
예제 #4
0
 def test_constructed_definite_length(self):
     data = '\xbfK\x0f\x80\x04\x00\x00\x00\x0f\x81\x07\x11Ep\t\x00\x05\xf2'
     tag = ber_decoder.Tag(byte_string=data)
     self.assertEqual(15, tag.header.data_length)
예제 #5
0
 def test_primitive_length(self):
     data = '\x86\x03\r\x05\x07'
     tag = ber_decoder.Tag(byte_string=data)
     self.assertEqual(3, tag.header.data_length)
예제 #6
0
 def test_primitive(self):
     data = '\x86\x03\r\x05\x07'
     tag = ber_decoder.Tag(byte_string=data)
     self.assertEqual(0, tag.type)