def test_encode_read_length(self): length_encodings = ( (0, "00"), (1, "01"), (38, "26"), (127, "7f"), (129, "8181"), (201, "81c9"), (65535, "82ffff"), (65536, "83010000") ) for value, enc in length_encodings: self.assertEqual(types.encode_length(value).encode("hex"), enc) self.assertEqual(types.read_length(enc.decode("hex")), (value, "")) # Test that the reader stops after the specified number of bytes. longer = enc + "00" self.assertEqual(types.read_length(longer.decode("hex")), (value, "\x00")) longer = enc + "ff" self.assertEqual(types.read_length(longer.decode("hex")), (value, "\xff")) # And test that it complains when there are not enough bytes. shorter = enc[:-2] self.assertRaises(error.ASN1Error, types.read_length, shorter.decode("hex"))
def test_read_indefinite_length(self): indef_length = "80".decode("hex") self.assertRaises(error.ASN1Error, types.read_length, indef_length) self.assertEqual(types.read_length(indef_length, strict=False), (-1, "")) self.assertEqual(types.read_length(indef_length + "hello", strict=False), (-1, "hello"))