Ejemplo n.º 1
0
    def test_parser_large_tag(self):
        # One extra byte
        result = parser.parse(b'\x7f\x49\x00')
        self.assertEqual(1, result[0])
        self.assertEqual(1, result[1])
        self.assertEqual(73, result[2])
        self.assertEqual(b'\x7f\x49\x00', result[3])
        self.assertEqual(b'', result[4])
        self.assertEqual(b'', result[5])

        # Two extra bytes
        result = parser.parse(b'\x7f\x81\x49\x00')
        self.assertEqual(1, result[0])
        self.assertEqual(1, result[1])
        self.assertEqual(201, result[2])
        self.assertEqual(b'\x7f\x81\x49\x00', result[3])
        self.assertEqual(b'', result[4])
        self.assertEqual(b'', result[5])

        # Three extra bytes
        result = parser.parse(b'\x7f\x81\x80\x00\x00')
        self.assertEqual(1, result[0])
        self.assertEqual(1, result[1])
        self.assertEqual(16384, result[2])
        self.assertEqual(b'\x7f\x81\x80\x00\x00', result[3])
        self.assertEqual(b'', result[4])
        self.assertEqual(b'', result[5])
Ejemplo n.º 2
0
 def test_parse_indef_nested(self):
     data = b'\x24\x80\x24\x80\x24\x80\x04\x00\x00\x00\x00\x00\x00\x00'
     result = parser.parse(data)
     self.assertEqual(b'\x24\x80', result[3])
     self.assertEqual(b'\x24\x80\x24\x80\x04\x00\x00\x00\x00\x00',
                      result[4])
     self.assertEqual(b'\x00\x00', result[5])
Ejemplo n.º 3
0
 def test_parser(self):
     result = parser.parse(b'\x02\x01\x00')
     self.assertIsInstance(result, tuple)
     self.assertEqual(0, result[0])
     self.assertEqual(0, result[1])
     self.assertEqual(2, result[2])
     self.assertEqual(b'\x02\x01', result[3])
     self.assertEqual(b'\x00', result[4])
     self.assertEqual(b'', result[5])
Ejemplo n.º 4
0
 def test_parser(self):
     result = parser.parse(b'\x02\x01\x00')
     self.assertIsInstance(result, tuple)
     self.assertEqual(0, result[0])
     self.assertEqual(0, result[1])
     self.assertEqual(2, result[2])
     self.assertEqual(b'\x02\x01', result[3])
     self.assertEqual(b'\x00', result[4])
     self.assertEqual(b'', result[5])
Ejemplo n.º 5
0
    def load(cls, encoded_data: bytes, strict=False):
        '''
        Loads a BER/DER-encoded byte string using the current class as the spec
        :param encoded_data:
            A byte string of BER or DER encoded data
        :param strict:
            A boolean indicating if trailing data should be forbidden - if so, a
            ValueError will be raised when trailing data exists
        :return:
            A instance of the current class
        '''

        class_, method, tag, header, contents, trailer = asn1Parser.parse(
            encoded_data, strict=strict)
        value = cls(class_=class_, tag=tag, method=method, contents=contents)

        if cls.class_ is not None and value.class_ != cls.class_:
            raise ElementaryFileError(
                "Invalid elementary file class, expected class '{}' got '{}'".
                format(
                    asn1.CLASS_NUM_TO_NAME_MAP.get(cls.class_, cls.class_),
                    asn1.CLASS_NUM_TO_NAME_MAP.get(value.class_,
                                                   value.class_)))
        if cls.method is not None and value.method != cls.method:
            raise ElementaryFileError(
                "Invalid elementary file method , expected method '{}' got '{}'"
                .format(
                    asn1.METHOD_NUM_TO_NAME_MAP.get(cls.method, cls.method),
                    asn1.METHOD_NUM_TO_NAME_MAP.get(value.method,
                                                    value.method)))

        if cls.tag is not None and value.tag != cls.tag:
            raise ElementaryFileError(
                "Invalid elementary file tag, expected tag '{}' got '{}'".
                format(cls.tag, value.tag))

        return value
Ejemplo n.º 6
0
 def test_parser_strict(self):
     with self.assertRaises(ValueError):
         parser.parse(b'\x02\x01\x00\x00', strict=True)
Ejemplo n.º 7
0
 def test_parser_strict(self):
     with self.assertRaises(ValueError):
         parser.parse(b'\x02\x01\x00\x00', strict=True)
Ejemplo n.º 8
0
 def test_parse_indef_nested(self):
     data = b'\x24\x80\x24\x80\x24\x80\x04\x00\x00\x00\x00\x00\x00\x00'
     result = parser.parse(data)
     self.assertEqual(b'\x24\x80', result[3])
     self.assertEqual(b'\x24\x80\x24\x80\x04\x00\x00\x00\x00\x00', result[4])
     self.assertEqual(b'\x00\x00', result[5])