gmssl - 国密算法(SM2/SM3/SM4)#

已适配 Air780E Air780EP Air780EPS

备注

本页文档由这个文件自动生成。如有错误,请提交issue或帮忙修改后pr,谢谢!

小技巧

本库有专属demo,点此链接查看gmssl的demo例子

示例

-- 本库 支持 SM2 SM3 SM4 三个算法
-- 理论上可以扩展支持 SM9 算法
-- 不支持SM1, 因为那是硬件算法, 没有软件实现的

sm.sm2encrypt(pkx,pky,data, mode, mode2)#

sm2算法加密

参数

传入值类型

解释

string

公钥x,必选. HEX字符串

string

公钥y,必选. HEX字符串

string

待计算的数据,必选,最长32字节, 非HEX字符串

boolean

输出模式,默认false. false-GMSSL默认格式DER, true-网站兼容模式

boolean

标准版本,默认false. false-C1C3C2新国际, true-C1C2C3老国际

返回值

返回值类型

解释

string

加密后的字符串, 原样输出,未经HEX转换. 若加密失败会返回nil或空字符串

例子

-- 提示 mode/mode2 参数是 2023.10.17 新增
-- 由于SM2在各平台的实现都有差异,用法务必参考demo

sm.sm2decrypt(private,data,mode,mode2)#

sm2算法解密

参数

传入值类型

解释

string

私钥,必选,HEX字符串

string

待计算的数据,必选,原始数据,非HEX字符串

boolean

输出模式,默认false. false-GMSSL默认格式DER, true-网站兼容模式

boolean

标准版本,默认false. false-C1C3C2新国际, true-C1C2C3老国际

返回值

返回值类型

解释

string

解密后的字符串,未经HEX转换.若解密失败会返回nil或空字符串

例子

-- 提示 mode/mode2 参数是 2023.10.17 新增
-- 由于SM2在各平台的实现都有差异,用法务必参考demo

sm.sm3(data)#

sm3算法,算HASH值

参数

传入值类型

解释

string

待计算的数据,必选

返回值

返回值类型

解释

string

对应的hash值

例子

local encodeStr = gmssl.sm3("lqlq666lqlq946")
log.info("testsm.sm3update",string.toHex(encodeStr))

sm.sm3hmac(data, key)#

sm3算法,算HASH值,但带HMAC

参数

传入值类型

解释

string

待计算的数据,必选

string

密钥

返回值

返回值类型

解释

string

对应的hash值

例子

local encodeStr = gmssl.sm3hmac("lqlq666lqlq946", "123")
log.info("testsm.sm3update",string.toHex(encodeStr))

gmssl.sm4encrypt(mode,padding,originStr,password)#

SM4加密算法

参数

传入值类型

解释

string

加密模式, CBC或ECB

string

填充方式, NONE/ZERO/PKCS5/PKCS7

string

加密的字符串

string

密钥

string

偏移量

返回值

返回值类型

解释

string

加密后的数据

例子

local originStr = "SM4 ECB ZeroPadding test"
--加密模式:ECB;填充方式:ZeroPadding;密钥:1234567890123456;密钥长度:128 bit
local encodeStr = gmssl.sm4encrypt("ECB","ZERO",originStr,"1234567890123456")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testsm.decrypt",gmssl.sm4decrypt("ECB","ZERO",encodeStr,"1234567890123456"))

originStr = "SM4 ECB Pkcs5Padding test"
--加密模式:ECB;填充方式:Pkcs5Padding;密钥:1234567890123456;密钥长度:128 bit
encodeStr = gmssl.sm4encrypt("ECB","PKCS5",originStr,"1234567890123456")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testsm.decrypt",gmssl.sm4decrypt("ECB","PKCS5",encodeStr,"1234567890123456"))

originStr = "SM4 CBC Pkcs5Padding test"
--加密模式:CBC;填充方式:Pkcs5Padding;密钥:1234567890123456;密钥长度:256 bit;偏移量:1234567890666666
encodeStr = gmssl.sm4encrypt("CBC","PKCS5",originStr,"1234567890123456","1234567890666666")
print(originStr,"encrypt",string.toHex(encodeStr))
log.info("testsm.decrypt",gmssl.sm4decrypt("CBC","PKCS5",encodeStr,"1234567890123456","1234567890666666"))

gmssl.sm4decrypt(mode,padding,encodeStr,password)#

SM4解密算法

参数

传入值类型

解释

string

加密模式, CBC或ECB

string

填充方式, NONE/ZERO/PKCS5/PKCS7

string

已加密的字符串

string

密钥

string

偏移量

返回值

返回值类型

解释

string

解密的字符串

例子

-- 参考gmssl.sm4encrypt

sm.sm2sign(private,data,id)#

sm2算法签名

参数

传入值类型

解释

string

私钥,必选,HEX字符串

string

待计算的数据,必选,原始数据,非HEX字符串

string

id值,非HEX字符串,可选,默认值”1234567812345678”

返回值

返回值类型

解释

string

前面字符串,未经HEX转换.若签名失败会返回nil

例子

-- 本API于 2023.10.19 新增
-- 具体用法请查阅demo

sm.sm2verify(pkx, pky, data, id, sig)#

sm2算法验签

参数

传入值类型

解释

string

公钥X,必选,HEX字符串

string

公钥Y,必选,HEX字符串

string

待计算的数据,必选,原始数据,非HEX字符串

string

id值,非HEX字符串,可选,默认值”1234567812345678”

string

签名数据,必须64字节,非HEX字符串

返回值

返回值类型

解释

boolean

验证成功返回true,否则返回nil

例子

-- 本API于 2023.10.19 新增
-- 具体用法请查阅demo