def der_hex_array_to_raw(der_hex_array):
    """
    将DER编码的十六进制数组转换为原始数据（如ECDSA的r和s）
    :param der_hex_array: DER编码的十六进制数组（如[0x30, 0x45, ...]）
    :return: 原始数据列表（如[r数组, s数组]）
    """
    # 转换十六进制数组为字节流（bytes）
    der_bytes = bytes(der_hex_array)
    
    # 手动解析DER结构（针对：SEQUENCE包含两个INTEGER的常见情况）
    ptr = 0  # 指针，用于遍历字节流
    
    # 1. 解析外层SEQUENCE（标签0x30）
    if der_bytes[ptr] != 0x30:
        raise ValueError("DER格式错误：外层不是SEQUENCE（0x30）")
    ptr += 1  # 跳过标签
    
    # 解析SEQUENCE的长度
    length = der_bytes[ptr]
    ptr += 1
    # 处理长格式长度（如果长度 >= 0x80，说明是多字节长度）
    if length & 0x80:
        length_bytes = length & 0x7F  # 长度字段的字节数
        length = 0
        for _ in range(length_bytes):
            length = (length << 8) | der_bytes[ptr]
            ptr += 1
    
    # 2. 解析第一个INTEGER（通常是r）
    if der_bytes[ptr] != 0x02:
        raise ValueError("DER格式错误：第一个元素不是INTEGER（0x02）")
    ptr += 1  # 跳过标签
    
    # 解析第一个INTEGER的长度
    r_length = der_bytes[ptr]
    ptr += 1
    r_bytes = der_bytes[ptr:ptr + r_length]
    ptr += r_length
    # 去除可能的前导0x00（DER编码的INTEGER如果最高位为1，会加0x00避免被视为负数）
    r_bytes = r_bytes.lstrip(b'\x00')
    if not r_bytes:  # 处理全0的情况
        r_bytes = b'\x00'
    
    # 3. 解析第二个INTEGER（通常是s）
    if der_bytes[ptr] != 0x02:
        raise ValueError("DER格式错误：第二个元素不是INTEGER（0x02）")
    ptr += 1  # 跳过标签
    
    # 解析第二个INTEGER的长度
    s_length = der_bytes[ptr]
    ptr += 1
    s_bytes = der_bytes[ptr:ptr + s_length]
    ptr += s_length
    # 去除可能的前导0x00
    s_bytes = s_bytes.lstrip(b'\x00')
    if not s_bytes:
        s_bytes = b'\x00'
    
    # 转换为十六进制数组（带0x前缀）
    r_hex_array = [f"0x{byte:02X}" for byte in r_bytes]
    s_hex_array = [f"0x{byte:02X}" for byte in s_bytes]
    
    return [r_hex_array, s_hex_array]


def main():
    import sys
    if len(sys.argv) != 2:
        print("用法：python DER2hex.py '<DER十六进制数组>'")
        print("示例：python DER2hex.py '[0x30, 0x44, 0x02, 0x20, 0x01, 0x02, 0x03, 0x04, 0x02, 0x20, 0x05, 0x06, 0x07, 0x08]'")
        sys.exit(1)
    
    input_str = sys.argv[1]
    try:
        # 解析输入的十六进制数组字符串为整数列表（如[0x30, 0x44, ...]）
        der_hex_array = eval(input_str)
        if not isinstance(der_hex_array, list) or not all(isinstance(x, int) for x in der_hex_array):
            raise ValueError("输入必须是十六进制整数数组（如[0x30, 0x45, ...]）")
        
        # 转换并输出结果
        raw_arrays = der_hex_array_to_raw(der_hex_array)
        print("解析后的原始数据十六进制数组：")
        print(f"r: [{', '.join(raw_arrays[0])}]")
        print(f"s: [{', '.join(raw_arrays[1])}]")
    
    except Exception as e:
        print(f"处理失败：{str(e)}")
        sys.exit(1)


if __name__ == "__main__":
    main()