def extend(self, value): if isinstance(value, list): try: self.__value.extend(value) self.__encoded_value.extend(bytearray([item.encode() for item in value])) except: raise TypeError('List must contain ASN1 objects') else: self.__encoded_value.extend(value) try: i = 0 while i < len(value): ident = value[i] ident_len = value[i + 1] if ident_len < 0x80: data_len = ident_len data_start = i + 2 else: len_start = i + 1 data_start = len_start + (ident_len - 0x80) + 1 data_len = intcodecs.defdecode(value[len_start : data_start]) data_stop = data_start + data_len self.__value.append(make_object(ident, value[data_start : data_stop])) i = data_stop except: raise TypeError('Invalid bytes passed')
def __parse_bytes(self, key_bytes): maintype = key_bytes[0] cur_len = key_bytes[1] if cur_len < 0x80: parsed_len = cur_len data_start = 2 data_stop = data_start + parsed_len + 1 else: len_start = 1 len_stop = len_start + cur_len - 0x80 + 1 parsed_len = intcodecs.defdecode(key_bytes[len_start : len_stop]) data_start = len_stop data_stop = data_start + parsed_len + 1 self.value = asn1key.make_object(maintype, key_bytes[data_start : data_stop])