init: Air780EPM 官方 LuatOS 项目代码基线
- 来源: 合宙 LuatOS 官方仓库 air780epm 模块完整代码 - 路径: luatos/air780epm/module/Air780EPM/demo 含官方 demo(含 mqtt/mqtts/socket/uart 等) - 后续: 基于 demo 开发 UART<->MQTT 数据上报功能
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
--[[
|
||||
@module gmssl_sm2
|
||||
@summary gmssl_sm2
|
||||
@version 1.0
|
||||
@date 2025.10.29
|
||||
@author 沈园园
|
||||
@usage
|
||||
本文件为gmssl sm2应用功能模块,核心业务逻辑为:
|
||||
1、演示国密sm2加密和解码的应用;
|
||||
|
||||
本文件没有对外接口,直接在main.lua中require "gmssl_sm2"就可以加载运行;
|
||||
]]
|
||||
|
||||
|
||||
function gmssl_sm2_encrypt_decrypt(originStr, pkx, pky, private)
|
||||
-- GMSSL默认格式
|
||||
log.info("==== SM2 默认GMSSL模式")
|
||||
local encodeStr = gmssl.sm2encrypt(pkx,pky,originStr)
|
||||
log.info("sm2默认模式", "加密后", encodeStr and string.toHex(encodeStr))
|
||||
if encodeStr then
|
||||
log.info("sm2默认模式", "解密后", gmssl.sm2decrypt(private,encodeStr))
|
||||
end
|
||||
|
||||
|
||||
-- 网站兼容模式 https://i.goto327.top/CryptTools/SM2.aspx
|
||||
-- 密文格式 C1C3C2, 新国标, 一般是这种
|
||||
log.info("==== SM2 网站兼容模式")
|
||||
local encodeStr = gmssl.sm2encrypt(pkx,pky,originStr, true)
|
||||
log.info("sm2网站兼容模式 C1C3C2", "加密后", encodeStr and string.toHex(encodeStr))
|
||||
if encodeStr then
|
||||
log.info("sm2网站兼容模式 C1C3C2", "解密后", gmssl.sm2decrypt(private,encodeStr, true))
|
||||
else
|
||||
log.info("解密失败")
|
||||
end
|
||||
-- 密文格式 C1C2C3, 老国标, 老的Java库通常支持这种
|
||||
log.info("==== SM2 网站兼容模式, 但C1C2C3")
|
||||
local encodeStr = gmssl.sm2encrypt(pkx,pky,originStr, true, true)
|
||||
log.info("sm2网站兼容模式 C1C2C3", "加密后", encodeStr and string.toHex(encodeStr))
|
||||
if encodeStr then
|
||||
log.info("sm2网站兼容模式 C1C2C3", "解密后", gmssl.sm2decrypt(private,encodeStr, true, true))
|
||||
else
|
||||
log.info("解密失败")
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
local function gmssl_sm2_task_func()
|
||||
-- 未加密字符串
|
||||
local originStr = "!!from LuatOS!!"
|
||||
|
||||
-- SM2 , 非对称加密, 类似于RSA,但属于椭圆算法
|
||||
-- 就当前实现还是比较慢的
|
||||
if gmssl.sm2encrypt then -- 部分BSP不支持
|
||||
local pkx = "ABE87C924B7ECFDEA1748A06E89003C9F7F4DC5C3563873CE2CAE46F66DE8141"
|
||||
local pky = "9514733D38CC026F2452A6A3A3A4DA0C28F864AFA5FE2C45E0EB6B761FBB5286"
|
||||
local private = "129EDC282CD2E9C1144C2E7315F926D772BC96600D2771E8BE02060313FE00D5"
|
||||
gmssl_sm2_encrypt_decrypt(originStr, pkx, pky, private)
|
||||
end
|
||||
|
||||
-- SM密钥生成
|
||||
if gmssl.sm2keygen then
|
||||
log.info("SM2密钥生成测试")
|
||||
originStr = "32wrniosadnfvnadsio;fasiow"
|
||||
local pkx, pky, private = gmssl.sm2keygen()
|
||||
gmssl_sm2_encrypt_decrypt(originStr, pkx, pky, private)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
sys.taskInit(gmssl_sm2_task_func)
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
--[[
|
||||
@module gmssl_sm2sign
|
||||
@summary gmssl_sm2sign
|
||||
@version 1.0
|
||||
@date 2025.10.29
|
||||
@author 沈园园
|
||||
@usage
|
||||
本文件为gmssl sm2sign应用功能模块,核心业务逻辑为:
|
||||
1、演示国密SM2签名和验签的应用;
|
||||
|
||||
本文件没有对外接口,直接在main.lua中require "gmssl_sm2sign"就可以加载运行;
|
||||
]]
|
||||
|
||||
|
||||
local function gmssl_sm2sign_task_func()
|
||||
|
||||
-- SM2签名和验签
|
||||
if gmssl.sm2sign then
|
||||
local originStr = string.fromHex("434477813974bf58f94bcf760833c2b40f77a5fc360485b0b9ed1bd9682edb45")
|
||||
local pkx = "ABE87C924B7ECFDEA1748A06E89003C9F7F4DC5C3563873CE2CAE46F66DE8141"
|
||||
local pky = "9514733D38CC026F2452A6A3A3A4DA0C28F864AFA5FE2C45E0EB6B761FBB5286"
|
||||
local private = "129EDC282CD2E9C1144C2E7315F926D772BC96600D2771E8BE02060313FE00D5"
|
||||
|
||||
-- 不带id的情况,即默认id="1234567812345678"
|
||||
local sig = gmssl.sm2sign(private, originStr, nil)
|
||||
log.info("sm2sign", sig and sig:toHex())
|
||||
if sig then
|
||||
local ret = gmssl.sm2verify(pkx, pky, originStr, nil, sig)
|
||||
log.info("sm2verify", ret or "false")
|
||||
end
|
||||
|
||||
-- 带id的情况
|
||||
local id = "1234"
|
||||
local sig = gmssl.sm2sign(private, originStr, id)
|
||||
log.info("sm2sign", sig and sig:toHex())
|
||||
if sig then
|
||||
local ret = gmssl.sm2verify(pkx, pky, originStr, id, sig)
|
||||
log.info("sm2verify", ret or "false")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
sys.taskInit(gmssl_sm2sign_task_func)
|
||||
@@ -0,0 +1,26 @@
|
||||
--[[
|
||||
@module gmssl_sm3
|
||||
@summary gmssl_sm3
|
||||
@version 1.0
|
||||
@date 2025.10.29
|
||||
@author 沈园园
|
||||
@usage
|
||||
本文件为gmssl sm3应用功能模块,核心业务逻辑为:
|
||||
1、演示国密sm3算法;
|
||||
|
||||
本文件没有对外接口,直接在main.lua中require "gmssl_sm3"就可以加载运行;
|
||||
]]
|
||||
|
||||
|
||||
local function gmssl_sm3_task_func()
|
||||
-- sm3算法,算HASH值
|
||||
local encodeStr = gmssl.sm3("lqlq666lqlq946")
|
||||
log.info("gmssl.sm3",string.toHex(encodeStr))
|
||||
|
||||
-- sm3算法,算HASH值,但带HMAC
|
||||
local encodeStr = gmssl.sm3hmac("lqlq666lqlq946", "123")
|
||||
log.info("gmssl.sm3hmac",string.toHex(encodeStr))
|
||||
|
||||
end
|
||||
|
||||
sys.taskInit(gmssl_sm3_task_func)
|
||||
@@ -0,0 +1,53 @@
|
||||
--[[
|
||||
@module gmssl_sm4
|
||||
@summary gmssl_sm4
|
||||
@version 1.0
|
||||
@date 2025.10.29
|
||||
@author 沈园园
|
||||
@usage
|
||||
本文件为gmssl sm4应用功能模块,核心业务逻辑为:
|
||||
1、演示国密sm4加密和解码的应用;
|
||||
|
||||
本文件没有对外接口,直接在main.lua中require "gmssl_sm4"就可以加载运行;
|
||||
]]
|
||||
|
||||
|
||||
local function gmssl_sm4_task_func()
|
||||
|
||||
if gmssl.sm4encrypt then
|
||||
log.info("=== SM4测试")
|
||||
local passwd = "1234567890123456"
|
||||
local iv = "1234567890666666"
|
||||
-- SM4 算法, 对称加密
|
||||
originStr = ">>SM4 ECB ZeroPadding test<<"
|
||||
--加密模式:ECB;填充方式:ZeroPadding;密钥:1234567890123456;
|
||||
encodeStr = gmssl.sm4encrypt("ECB", "ZERO", originStr, passwd)
|
||||
log.info("sm4.ecb.zero", "加密后", string.toHex(encodeStr))
|
||||
log.info("sm4.ecb.zero", "解密后", gmssl.sm4decrypt("ECB","ZERO",encodeStr,passwd))
|
||||
|
||||
originStr = ">>SM4 ECB Pkcs5Padding test<<"
|
||||
--加密模式:ECB;填充方式:Pkcs5Padding;密钥:1234567890123456;
|
||||
encodeStr = gmssl.sm4encrypt("ECB", "PKCS5", originStr, passwd)
|
||||
log.info("sm4.ecb.pks5", "加密后", string.toHex(encodeStr))
|
||||
log.info("sm4.ecb.pks5", "解密后", gmssl.sm4decrypt("ECB","PKCS5",encodeStr,passwd))
|
||||
|
||||
originStr = ">>SM4 CBC Pkcs5Padding test<<"
|
||||
--加密模式:CBC;填充方式:Pkcs5Padding;密钥:1234567890123456;偏移量:1234567890666666
|
||||
encodeStr = gmssl.sm4encrypt("CBC","PKCS5", originStr, passwd, iv)
|
||||
log.info("sm4.cbc.pks5", "加密后", string.toHex(encodeStr))
|
||||
log.info("sm4.cbc.pks5", "解密后", gmssl.sm4decrypt("CBC","PKCS5",encodeStr,passwd, iv))
|
||||
|
||||
-- 完全对齐16字节的对比测试
|
||||
originStr = "1234567890123456"
|
||||
encodeStr = gmssl.sm4encrypt("ECB","PKCS7",originStr,passwd)
|
||||
log.info("sm4.ecb.pkcs7", encodeStr:toHex())
|
||||
encodeStr = gmssl.sm4encrypt("ECB","PKCS5",originStr,passwd)
|
||||
log.info("sm4.ecb.pkcs5", encodeStr:toHex())
|
||||
encodeStr = gmssl.sm4encrypt("ECB","ZERO",originStr,passwd)
|
||||
log.info("sm4.ecb.zero", encodeStr:toHex())
|
||||
encodeStr = gmssl.sm4encrypt("ECB","NONE",originStr,passwd)
|
||||
log.info("sm4.ecb.none", encodeStr:toHex())
|
||||
end
|
||||
end
|
||||
|
||||
sys.taskInit(gmssl_sm4_task_func)
|
||||
@@ -0,0 +1,70 @@
|
||||
--[[
|
||||
@module main
|
||||
@summary LuatOS用户应用脚本文件入口,总体调度应用逻辑
|
||||
@version 1.0
|
||||
@date 2025.10.29
|
||||
@author 沈园园
|
||||
@usage
|
||||
本demo演示的核心功能为:
|
||||
演示有关gmssl国密算法的功能包含SM2,SM3,SM4
|
||||
更多说明参考本目录下的readme.md文件
|
||||
]]
|
||||
|
||||
|
||||
--[[
|
||||
必须定义PROJECT和VERSION变量,Luatools工具会用到这两个变量,远程升级功能也会用到这两个变量
|
||||
PROJECT:项目名,ascii string类型
|
||||
可以随便定义,只要不使用,就行
|
||||
VERSION:项目版本号,ascii string类型
|
||||
如果使用合宙iot.openluat.com进行远程升级,必须按照"XXX.YYY.ZZZ"三段格式定义:
|
||||
X、Y、Z各表示1位数字,三个X表示的数字可以相同,也可以不同,同理三个Y和三个Z表示的数字也是可以相同,可以不同
|
||||
因为历史原因,YYY这三位数字必须存在,但是没有任何用处,可以一直写为999
|
||||
如果不使用合宙iot.openluat.com进行远程升级,根据自己项目的需求,自定义格式即可
|
||||
]]
|
||||
PROJECT = "luatos_gmssl_app"
|
||||
VERSION = "001.999.000"
|
||||
|
||||
|
||||
-- 在日志中打印项目名和项目版本号
|
||||
log.info("main", PROJECT, VERSION)
|
||||
|
||||
|
||||
|
||||
|
||||
-- 如果内核固件支持errDump功能,此处进行配置,【强烈建议打开此处的注释】
|
||||
-- 因为此功能模块可以记录并且上传脚本在运行过程中出现的语法错误或者其他自定义的错误信息,可以初步分析一些设备运行异常的问题
|
||||
-- 以下代码是最基本的用法,更复杂的用法可以详细阅读API说明文档
|
||||
-- 启动errDump日志存储并且上传功能,600秒上传一次
|
||||
-- if errDump then
|
||||
-- errDump.config(true, 600)
|
||||
-- end
|
||||
|
||||
|
||||
-- 使用LuatOS开发的任何一个项目,都强烈建议使用远程升级FOTA功能
|
||||
-- 可以使用合宙的iot.openluat.com平台进行远程升级
|
||||
-- 也可以使用客户自己搭建的平台进行远程升级
|
||||
-- 远程升级的详细用法,可以参考fota的demo进行使用
|
||||
|
||||
|
||||
-- 启动一个循环定时器
|
||||
-- 每隔3秒钟打印一次总内存,实时的已使用内存,历史最高的已使用内存情况
|
||||
-- 方便分析内存使用是否有异常
|
||||
-- sys.timerLoopStart(function()
|
||||
-- log.info("mem.lua", rtos.meminfo())
|
||||
-- log.info("mem.sys", rtos.meminfo("sys"))
|
||||
-- end, 3000)
|
||||
|
||||
|
||||
-- 加载sm2算法, 含密钥生成应用功能模块
|
||||
require "gmssl_sm2"
|
||||
-- 加载sm3算法应用功能模块
|
||||
require "gmssl_sm3"
|
||||
-- 加载sm4算法应用功能模块
|
||||
require "gmssl_sm4"
|
||||
-- 加载sm2签名和验签应用功能模块
|
||||
require "gmssl_sm2sign"
|
||||
|
||||
-- 用户代码已结束---------------------------------------------
|
||||
-- 结尾总是这一句
|
||||
sys.run()
|
||||
-- sys.run()之后不要加任何语句!!!!!因为添加的任何语句都不会被执行
|
||||
@@ -0,0 +1,88 @@
|
||||
## 功能模块介绍
|
||||
|
||||
1、main.lua:主程序入口;
|
||||
|
||||
2、gmssl_sm2.lua:sm2算法, 含密钥生成;
|
||||
|
||||
3、gmssl_sm3:sm3算法;
|
||||
|
||||
5、gmssl_sm4:sm4算法;
|
||||
|
||||
6、gmssl_sm2sign:sm2签名和验签;
|
||||
|
||||
## 演示功能概述
|
||||
|
||||
1、创建一个task;
|
||||
|
||||
2、演示gmssl国密算法包含SM2算法, 含密钥生成,SM3算法,SM4算法以及sm2签名和验签;
|
||||
|
||||
|
||||
## 演示硬件环境
|
||||
|
||||

|
||||
|
||||
1、Air780EPM核心板一块
|
||||
|
||||
2、TYPE-C USB数据线一根
|
||||
|
||||
3、Air780EPM核心板和数据线的硬件接线方式为
|
||||
|
||||
- Air780EPM核心板通过TYPE-C USB口连接TYPE-C USB 数据线,数据线的另外一端连接电脑的USB口;
|
||||
- 核心板正面的 ON/OFF 拨动开关 拨到ON一端;
|
||||
|
||||
|
||||
## 演示软件环境
|
||||
|
||||
1、[Luatools下载调试工具](https://docs.openluat.com/air780epm/luatos/common/download/)
|
||||
|
||||
2、[Air780EPM 最新版本的内核固件](https://docs.openluat.com/air780epm/luatos/firmware/version/)
|
||||
|
||||
|
||||
## 演示核心步骤
|
||||
|
||||
1、搭建好硬件环境
|
||||
|
||||
2、Luatools烧录内核固件和demo脚本代码
|
||||
|
||||
3、烧录成功后,自动开机运行
|
||||
|
||||
4、出现类似于下面的日志,就表示运行成功:
|
||||
|
||||
``` lua
|
||||
[2025-10-29 16:51:55.069][000000000.365] I/user.==== SM2 默认GMSSL模式
|
||||
[2025-10-29 16:51:55.296][000000000.912] I/user.sm2默认模式 加密后 3078022022F0E9C08C45EC2D456C184541900B2D069790DF554BD37183453306E49A474E022100A7220907D53AF4A580B6AEC7B8EA53FF5E51F5E56A8ACC440C86F58C4E3EB9110420A4FCAE7ECF86059FB63B0F82A502223E8B4C7CAECBE29E72C05A87DF8BA3C08F040F63EE6697093A495733939D4D68070F
|
||||
[2025-10-29 16:51:55.526][000000001.150] I/user.sm2默认模式 解密后 !!from LuatOS!!
|
||||
[2025-10-29 16:51:55.530][000000001.151] I/user.==== SM2 网站兼容模式
|
||||
[2025-10-29 16:51:55.977][000000001.601] I/user.sm2网站兼容模式 C1C3C2 加密后 7CD71EFCD699E81C5A320DD78357788BA4A4E87C02691EB73225B6E8CC3F1A95730359208D2E6A375E49D84321C9BB28F0D7B65BC348DD07A9ADE9C1F38D053CA5B4128EE908F4494DB1867F0C48D00FCFE3F6A9C38CDA696CABAF36E9D120244AAEC7B42200A0A9C8321EDEDC9010
|
||||
[2025-10-29 16:51:56.177][000000001.800] I/user.sm2网站兼容模式 C1C3C2 解密后 !!from LuatOS!!
|
||||
[2025-10-29 16:51:56.182][000000001.800] I/user.==== SM2 网站兼容模式, 但C1C2C3
|
||||
[2025-10-29 16:51:56.589][000000002.228] I/user.sm2网站兼容模式 C1C2C3 加密后 0429D777A89C474D468CBB4BDE604C5D0111EF6FEB9AD180A9A5167657C4CFD09A0CAAF6D3467CE2564C73A666EC4DE2CA2E28F5B2BBFA9FE5B30CCA39D0B453DB60AF6B2B6DC1E7D76F3E9FF048FEACC850B37144EC64840A84A1A81B4ACF4BDB851391ECC9F13974A76464C9F9624C
|
||||
[2025-10-29 16:51:56.788][000000002.425] I/user.sm2网站兼容模式 C1C2C3 解密后 !!from LuatOS!!
|
||||
[2025-10-29 16:51:56.794][000000002.425] I/user.SM2密钥生成测试
|
||||
[2025-10-29 16:51:57.048][000000002.660] I/user.==== SM2 默认GMSSL模式
|
||||
[2025-10-29 16:51:57.462][000000003.092] I/user.sm2默认模式 加密后 3081820220227403C3A196042379534047850F01BA8EC3603226AF18E0CE65729EBBBDC68C02201D1FBBD3998FDB2757AE55262F1CDD288C6C403766F77F6D7CB9017457E7EE660420B742677896DEDBBEAF55857603EB4C39FA9DFFDAD6E17AFA27FA0D7C7D2F7EF5041A79A2DF1D84C0B449459A4FE6BCC3A494F9F4CC2D00F9A4A7C4FE
|
||||
[2025-10-29 16:51:57.674][000000003.301] I/user.sm2默认模式 解密后 32wrniosadnfvnadsio;fasiow
|
||||
[2025-10-29 16:51:57.681][000000003.301] I/user.==== SM2 网站兼容模式
|
||||
[2025-10-29 16:51:58.092][000000003.717] I/user.sm2网站兼容模式 C1C3C2 加密后 A615127F2C18731AB83CA50CDC386C0F70506EA3BE6B1B1E74E1F417BCFB992AC9B4F91A4233181CD5C419CA21B5AD46BBA7F2E635D4AC317842E8762A19260218921AB2D4C02C8211E2AC28976B61D33E0AB826B2DE223E6E51729B31B02E02E0C73D5822F12FC4618E6E1F7110278CBD273C152B650C75A423
|
||||
[2025-10-29 16:51:58.306][000000003.927] I/user.sm2网站兼容模式 C1C3C2 解密后 32wrniosadnfvnadsio;fasiow
|
||||
[2025-10-29 16:51:58.313][000000003.927] I/user.==== SM2 网站兼容模式, 但C1C2C3
|
||||
[2025-10-29 16:51:58.748][000000004.372] I/user.sm2网站兼容模式 C1C2C3 加密后 045807522541AF430F7D0F3EE27D0718AA33D17E98F04121CC3039A6C7EA5B219751DA6CDC64B805C5BA08E97CFC7546D72BCBF1CD2329F26190A6CF33D76E37B1BFFEDBA05C31D8673F33CFA5925A5EC0DB37A58F74B30020DE25104E47001D02A23C45814230650A1D9961B5BDC69218DF8AEEB9A66266EF175C
|
||||
[2025-10-29 16:51:58.947][000000004.581] I/user.sm2网站兼容模式 C1C2C3 解密后 32wrniosadnfvnadsio;fasiow
|
||||
[2025-10-29 16:51:58.962][000000004.588] I/user.gmssl.sm3 E64FD76F4078E51DCA428323D3FADBD5D52723BBF1379184650DA5CE6002B2BF 64
|
||||
[2025-10-29 16:51:58.964][000000004.588] I/user.gmssl.sm3hmac FBB67FC936777011AA70336F0F0B6305D529A97A87D8ECA8880472CD2C30A721 64
|
||||
[2025-10-29 16:51:58.966][000000004.595] I/user.=== SM4测试
|
||||
[2025-10-29 16:51:58.971][000000004.596] I/user.sm4.ecb.zero 加密后 E8DF19897C0BF1FFA50910C5C548F5A4E9E34BED9F5CEE519CFA24C37A290B25 64
|
||||
[2025-10-29 16:51:58.973][000000004.596] I/user.sm4.ecb.zero 解密后 >>SM4 ECB ZeroPadding test<<
|
||||
[2025-10-29 16:51:58.975][000000004.597] I/user.sm4.ecb.pks5 加密后 25B3D6AB8C855115C3A8883FE3ADCC6B9004C83B86CE7A45517CA6736DBA4EFE 64
|
||||
[2025-10-29 16:51:58.976][000000004.598] I/user.sm4.ecb.pks5 解密后 >>SM4 ECB Pkcs5Padding test<<
|
||||
[2025-10-29 16:51:58.978][000000004.598] I/user.sm4.cbc.pks5 加密后 A11C24BB018C8124FADAFC9B6BF7932C05BA2F24E9DFB9D79D982A676F9C010C 64
|
||||
[2025-10-29 16:51:58.979][000000004.599] I/user.sm4.cbc.pks5 解密后 >>SM4 CBC Pkcs5Padding test<<
|
||||
[2025-10-29 16:51:58.981][000000004.600] I/user.sm4.ecb.pkcs7 B083DCC0A9F64BD9FAE2FA8C936E3D776C88F739AF2A29A735381F5677BADEF7 64
|
||||
[2025-10-29 16:51:58.983][000000004.600] I/user.sm4.ecb.pkcs5 B083DCC0A9F64BD9FAE2FA8C936E3D776C88F739AF2A29A735381F5677BADEF7 64
|
||||
[2025-10-29 16:51:58.987][000000004.601] I/user.sm4.ecb.zero B083DCC0A9F64BD9FAE2FA8C936E3D77D2D68ED9FE06CB40C9A150AA5917F15F 64
|
||||
[2025-10-29 16:51:58.988][000000004.601] I/user.sm4.ecb.none B083DCC0A9F64BD9FAE2FA8C936E3D77 32
|
||||
[2025-10-29 16:51:59.450][000000005.084] I/user.sm2sign 9C2303667887E45ABA016BBACFF1AF2F3ED764CE220A0B0D67CF9206BF48F26AA2797E5478919FB0C6140B89D7DDA33055428A7B3D40F49E0BAD410624D83199
|
||||
[2025-10-29 16:51:59.864][000000005.496] I/user.sm2verify true
|
||||
[2025-10-29 16:52:00.357][000000005.982] I/user.sm2sign 756D9F37525A543A6647370C22DD71ADEEFBF86D83CE87A28889EAC9F63F0C5CFF334A2D99B067EA676437EE1DEC86B8A8F109568A7CF3AFE70A8DD09562F7E2
|
||||
[2025-10-29 16:52:00.782][000000006.411] I/user.sm2verify true
|
||||
```
|
||||
Reference in New Issue
Block a user