当前位置: 首页 > news >正文

SM2隐式证书用户公私钥生成python代码实现

GMT0130-2023具体描述基于SM2算法的隐式证书公钥机制,这里尝试Python代码实现密钥生成部分功能,具体如下,椭圆曲线计算实现使用python第三方包gmssl。

#生成用户私钥Da和公钥Pa,其中Da=(tA+d'A)mod N,Pa可以直接用Da计算出来,当然也可以使用标准中的公式Pa=WA+[lambda]Ppub得到。

def on_click_gen_da_pa():global asymmetric_sm2_imp_user_da_text, default_sm2_tabletry:ta_h = gen_ta()d_a = bytes.fromhex(asymmetric_sm2_imp_user_da_text.get(1.0, END).strip().replace("\n", ""))d_a_h = d_a.hex()da = (int(ta_h, base=16) + int(d_a_h, base=16)) % int(default_sm2_table['n'], base=16)da_h = f'{da:32x}'write_log_to_Text("INFO:Da " + da_h, 2)pa_h = gen_p(da_h)write_log_to_Text("INFO:Pa " + pa_h, 2)except Exception as e:write_log_to_Text("ERROR:generate User keys failed:" + str(e), 2)

#计算tA=(w+lambda*ms)mod N

def gen_ta():global asymmetric_sm2_imp_kgc_w_text, asymmetric_sm2_imp_kgc_ms_text,default_sm2_tablew = bytes.fromhex(asymmetric_sm2_imp_kgc_w_text.get(1.0, END).strip().replace("\n", ""))w_h = w.hex()lambda_ = gen_lamda()ms = bytes.fromhex(asymmetric_sm2_imp_kgc_ms_text.get(1.0, END).strip().replace("\n", ""))ms_h = ms.hex()ta = (int(w_h, base=16) + int(lambda_, base=16)*int(ms_h, base=16)) % int(default_sm2_table['n'], base=16)ta_h = f'{ta:32x}'write_log_to_Text("INFO:Ta " + ta_h, 2)return ta_h

#计算lambda=Hash_SM3(x_WA||y_WA||Ha) mod N

def gen_lamda():global default_sm2_tableHA = gen_ha()(WA_x, Wa_y) = gen_wa()lambda_before_hash = WA_x + Wa_y + HAlambda_before_hash_bytes = bytes.fromhex(lambda_before_hash)lambda_i_d = [ch for ch in lambda_before_hash_bytes]lambda___ = gmssl.sm3.sm3_hash(lambda_i_d)lambda__ = int(lambda___, base=16) % int(default_sm2_table['n'], base=16)lambda_h = f'{lambda__:64x}'write_log_to_Text("INFO:lambda " + lambda_h, 2)return lambda_h

#计算WA=[w]G+Ua

def gen_wa():global asymmetric_sm2_imp_user_ua_x_var, asymmetric_sm2_imp_user_ua_y_var, asymmetric_sm2_imp_kgc_w_textw = bytes.fromhex(asymmetric_sm2_imp_kgc_w_text.get(1.0, END).strip().replace("\n", ""))w_h = w.hex()wa_p_h = gen_p(w_h, 2)ua_h = asymmetric_sm2_imp_user_ua_x_var.get() + asymmetric_sm2_imp_user_ua_y_var.get()tSm2 = sm2.CryptSM2('','')WA = tSm2._convert_jacb_to_nor(tSm2._add_point(wa_p_h, ua_h))WA_x = WA[0:64]WA_y = WA[64:]write_log_to_Text("INFO:WA_x " + WA_x, 2)write_log_to_Text("INFO:WA_y " + WA_y, 2)return WA_x, WA_y

#计算Ha=Hash_SM3(ENTLa||IDa||a||b||x_G||y_G||x_pub||y_pub)

def gen_ha():global asymmetric_sm2_imp_user_id_var, default_sm2_table, asymmetric_sm2_imp_kgc_pub_x_var, asymmetric_sm2_imp_kgc_pub_y_varida = asymmetric_sm2_imp_user_id_var.get().encode('GBK')ida_h = ida.hex()pubx = asymmetric_sm2_imp_kgc_pub_x_var.get()puby = asymmetric_sm2_imp_kgc_pub_y_var.get()entla = len(ida)*8entla_h = f'{entla:04x}'HA_before_hash = entla_h + str(ida_h) + default_sm2_table['a'] + default_sm2_table['b'] + default_sm2_table['g'] + pubx + pubyHA_before_hash_bytes = bytes.fromhex(HA_before_hash)ha_i_d = [ch for ch in HA_before_hash_bytes]ha_h = gmssl.sm3.sm3_hash(ha_i_d)write_log_to_Text("INFO:HA " + ha_h, 2)return ha_h

实现结果:

http://www.lryc.cn/news/407436.html

相关文章:

  • IEC104转MQTT网关快速实现了IEC104到MQTT的转换和数据交互
  • 【OpenCV C++20 学习笔记】调节图片对比度和亮度(像素变换)
  • web UI自动化测试 浏览器模式设置
  • OpenCV图像滤波(1)双边滤波函数bilateralFilter的使用
  • 前端开发使用Big.js精算避免误差
  • 在 Ubuntu 22.04/20.04 安装 CVAT 和 SAM 指南
  • 【SpringCloud】 微服务分布式环境下的事务问题,seata大合集
  • vite5+vue3开发阅读APP实战笔记20240725
  • Intel任命Micron技术开发主管领导Intel Foundry制造运营
  • 苹果发布iOS 18 Beta 4,新增CarPlay 壁纸等多项功能改进
  • 谷粒商城实战笔记-50-51-商品分类的删除
  • vue3+g2plot实现词云图
  • Golang | Leetcode Golang题解之第273题整数转换英文表示
  • 使用C#手搓Word插件
  • WordPress主题追格企业官网主题免费开源版V1.1.6
  • uniapp引入自定义图标
  • pytorch-scheduler(调度器)
  • 防火墙与入侵检测系统(IDS/IPS)在现代网络安全中的关键角色
  • Python 之 os、open、json、pickle 模块的“疯狂”探险记
  • CTF-Web习题:2019强网杯 UPLOAD
  • Unity环境渲染与反射探针的深入探索
  • vue3 父组件 props 异步传值,子组件接收不到或接收错误
  • [C++]TinyWebServer
  • Uniswap价格批量查询与ws订阅行情
  • vue 实战 区域内小组件元素拖拽 示例
  • C++多线程编程中的锁详解
  • van-dialog 组件调用报错
  • 【Django】在vscode中运行调试Django项目(命令及图形方式)
  • 麦田物语第十三天
  • 【Git多人协作开发】不同的分支下的多人协作开发模式