在SoC数据加解密验证中使用 Python 的 gmssl 库
在SoC数据加解密验证中使用 Python 的 gmssl 库
摘要:本文提供了一个在UVM验证环境中使用 Python 的 gmssl
库重的完整示例,这种方式展示了良好的模块化设计,更换底层实现而无需修改调用方代码。
准备工作:安装 gmssl 库
首先,请确保您的 Python 环境中已经安装了 gmssl
库。如果尚未安装,请运行以下命令:
pip install gmssl
1. Python 脚本:sm4_crypto.py
(使用 gmssl)
这是重写后的核心 Python 脚本。它使用 gmssl
库来执行 SM4 加密和解密,并通过标准输入/输出与 UVM 环境进行 JSON 格式的数据通信。
# sm4_crypto.py
import sys
import json
from gmssl import sm4def main():"""通过标准输入接收JSON数据,执行SM4加密或解密,并将结果以JSON格式输出到标准输出。"""try:# 从标准输入读取 JSON 格式的数据input_data = sys.stdin.read()data = json.loads(input_data)# 将十六进制字符串密钥和初始化向量转换为字节key = bytes.fromhex(data["key"]) # 128-bit (16 bytes) 密钥iv = bytes.fromhex(data["iv"]) # 128-bit (16 bytes) 初始化向量# 初始化 SM4 加密器crypt_sm4 = sm4.CryptSM4()output_json = {}# 判断是执行加密还是解密if "plaintext" in data:# --- 加密流程 ---plaintext = bytes.fromhex(data["plaintext"])# 设置加密密钥crypt_sm4.set_key(key, sm4.SM4_ENCRYPT)# 使用CBC模式进行加密,gmssl会自动处理填充ciphertext = crypt_sm4.crypt_cbc(iv, plaintext)# 准备输出的JSONoutput_json = {"ciphertext": ciphertext.hex()}elif "ciphertext" in data:# --- 解密流程 ---ciphertext = bytes.fromhex(data["ciphertext"])# 设置解密密钥crypt_sm4.set_key(key, sm4.SM4_DECRYPT)# 使用CBC模式进行解密,gmssl会自动处理填充decrypted_p