Просмотр исходного кода

change: 国密算法改名为gmssl, 毕竟是基于gmssl实现的, SM有点那个意思了-_-

Wendal Chen 3 лет назад
Родитель
Сommit
d0b460545f

+ 0 - 0
components/SM/include/internal/ayconfig.h → components/gmssl/include/internal/ayconfig.h


+ 0 - 0
components/SM/include/internal/ssl_random.h → components/gmssl/include/internal/ssl_random.h


+ 0 - 0
components/SM/include/modes_lcl.h → components/gmssl/include/modes_lcl.h


+ 0 - 0
components/SM/include/openssl/modes.h → components/gmssl/include/openssl/modes.h


+ 0 - 0
components/SM/include/sm2/sm2.h → components/gmssl/include/sm2/sm2.h


+ 0 - 0
components/SM/include/sm3/sm3.h → components/gmssl/include/sm3/sm3.h


+ 0 - 0
components/SM/include/sm4/sm4.h → components/gmssl/include/sm4/sm4.h


+ 28 - 24
components/SM/src/luat_lib_sm.c → components/gmssl/src/luat_lib_gmssl.c

@@ -1,11 +1,12 @@
 
 
 /*
 /*
-@module  sm
+@module  gmssl
 @summary 国密算法
 @summary 国密算法
 @version 1.0
 @version 1.0
-@date    2020.07.03
-@demo sm
-@tag LUAT_USE_SM
+@date    2023.03.02
+@author  chenxudong1208
+@demo gmssl
+@tag LUAT_USE_GMSSL
 */
 */
 #include "luat_base.h"
 #include "luat_base.h"
 #include "luat_malloc.h"
 #include "luat_malloc.h"
@@ -25,6 +26,7 @@
 
 
 static int myrand(void *ctx, unsigned char *msg, size_t size)
 static int myrand(void *ctx, unsigned char *msg, size_t size)
 {
 {
+    // TODO 替换成crypto_trng
 	mbedtls_mpi k;
 	mbedtls_mpi k;
 	mbedtls_mpi_init(&k);
 	mbedtls_mpi_init(&k);
 	mbedtls_mpi_read_string(&k, HEX_CODE,
 	mbedtls_mpi_read_string(&k, HEX_CODE,
@@ -86,16 +88,16 @@ sm2算法加密
 @string 公钥y,必选
 @string 公钥y,必选
 @string 随机数,必选
 @string 随机数,必选
 @string 待计算的数据,必选
 @string 待计算的数据,必选
-@return 
+@return string 加密后的字符串, 原样输出,未经HEX转换
 @usage
 @usage
 local originStr = "encryption standard"
 local originStr = "encryption standard"
 local pkx = "435B39CCA8F3B508C1488AFC67BE491A0F7BA07E581A0E4849A5CF70628A7E0A"
 local pkx = "435B39CCA8F3B508C1488AFC67BE491A0F7BA07E581A0E4849A5CF70628A7E0A"
 local pky = "75DDBA78F15FEECB4C7895E2C1CDF5FE01DEBB2CDBADF45399CCF77BBA076A42"
 local pky = "75DDBA78F15FEECB4C7895E2C1CDF5FE01DEBB2CDBADF45399CCF77BBA076A42"
 local private = "1649AB77A00637BD5E2EFE283FBF353534AA7F7CB89463F208DDBC2920BB0DA0"
 local private = "1649AB77A00637BD5E2EFE283FBF353534AA7F7CB89463F208DDBC2920BB0DA0"
 local rand = "4C62EEFD6ECFC2B95B92FD6C3D9575148AFA17425546D49018E5388D49DD7B4F"
 local rand = "4C62EEFD6ECFC2B95B92FD6C3D9575148AFA17425546D49018E5388D49DD7B4F"
-local encodeStr = sm.sm2encrypt(pkx,pky,rand,originStr)
+local encodeStr = gmssl.sm2encrypt(pkx,pky,rand,originStr)
 print(originStr,"encrypt",string.toHex(encodeStr))
 print(originStr,"encrypt",string.toHex(encodeStr))
-log.info("testsm.sm2decrypt",sm.sm2decrypt(private,encodeStr))
+log.info("testsm.sm2decrypt",gmssl.sm2decrypt(private,encodeStr))
 */
 */
 static int l_sm2_encrypt(lua_State *L)
 static int l_sm2_encrypt(lua_State *L)
 {    
 {    
@@ -122,6 +124,7 @@ static int l_sm2_encrypt(lua_State *L)
         return luaL_error(L, "invalid rand length=%d", randLen);
         return luaL_error(L, "invalid rand length=%d", randLen);
     }
     }
     
     
+    // TODO 改为luaBuffer
     unsigned char *out = calloc(SM2_STR_LEN, sizeof(unsigned char));
     unsigned char *out = calloc(SM2_STR_LEN, sizeof(unsigned char));
     int ret = 0;
     int ret = 0;
     size_t olen = 0;
     size_t olen = 0;
@@ -149,16 +152,16 @@ sm2算法解密
 @api sm.sm2decrypt(private,data)
 @api sm.sm2decrypt(private,data)
 @string 私钥,必选
 @string 私钥,必选
 @string 待计算的数据,必选
 @string 待计算的数据,必选
-@return 
+@return string 解密后的字符串,未经HEX转换
 @usage
 @usage
 local originStr = "encryption standard"
 local originStr = "encryption standard"
 local pkx = "435B39CCA8F3B508C1488AFC67BE491A0F7BA07E581A0E4849A5CF70628A7E0A"
 local pkx = "435B39CCA8F3B508C1488AFC67BE491A0F7BA07E581A0E4849A5CF70628A7E0A"
 local pky = "75DDBA78F15FEECB4C7895E2C1CDF5FE01DEBB2CDBADF45399CCF77BBA076A42"
 local pky = "75DDBA78F15FEECB4C7895E2C1CDF5FE01DEBB2CDBADF45399CCF77BBA076A42"
 local private = "1649AB77A00637BD5E2EFE283FBF353534AA7F7CB89463F208DDBC2920BB0DA0"
 local private = "1649AB77A00637BD5E2EFE283FBF353534AA7F7CB89463F208DDBC2920BB0DA0"
 local rand = "4C62EEFD6ECFC2B95B92FD6C3D9575148AFA17425546D49018E5388D49DD7B4F"
 local rand = "4C62EEFD6ECFC2B95B92FD6C3D9575148AFA17425546D49018E5388D49DD7B4F"
-local encodeStr = sm.sm2encrypt(pkx,pky,rand,originStr)
+local encodeStr = gmssl.sm2encrypt(pkx,pky,rand,originStr)
 print(originStr,"encrypt",string.toHex(encodeStr))
 print(originStr,"encrypt",string.toHex(encodeStr))
-log.info("testsm.sm2decrypt",sm.sm2decrypt(private,encodeStr))
+log.info("testsm.sm2decrypt",gmssl.sm2decrypt(private,encodeStr))
 */
 */
 static int l_sm2_decrypt(lua_State *L)
 static int l_sm2_decrypt(lua_State *L)
 {    
 {    
@@ -198,9 +201,9 @@ static int l_sm2_decrypt(lua_State *L)
 流式sm3算法加密
 流式sm3算法加密
 @api sm.sm3update(data)
 @api sm.sm3update(data)
 @string 待计算的数据,必选
 @string 待计算的数据,必选
-@return 
+@return string 对应的hash值
 @usage
 @usage
-local encodeStr = sm.sm3update("lqlq666lqlq946")
+local encodeStr = gmssl.sm3update("lqlq666lqlq946")
 log.info("testsm.sm3update",string.toHex(encodeStr))
 log.info("testsm.sm3update",string.toHex(encodeStr))
 */
 */
 static int l_sm3_update(lua_State *L)
 static int l_sm3_update(lua_State *L)
@@ -228,7 +231,7 @@ static int l_sm3_update(lua_State *L)
 
 
 /*
 /*
 SM4加密算法
 SM4加密算法
-@api sm.sm4encrypt(mode,padding,originStr,password)
+@api gmssl.sm4encrypt(mode,padding,originStr,password)
 @number  加密模式   
 @number  加密模式   
 @number  填充方式 
 @number  填充方式 
 @string  加密的字符串
 @string  加密的字符串
@@ -237,21 +240,21 @@ SM4加密算法
 @usage
 @usage
 local originStr = "AES128 ECB ZeroPadding test"
 local originStr = "AES128 ECB ZeroPadding test"
 --加密模式:ECB;填充方式:ZeroPadding;密钥:1234567890123456;密钥长度:128 bit
 --加密模式:ECB;填充方式:ZeroPadding;密钥:1234567890123456;密钥长度:128 bit
-local encodeStr = sm.sm4encrypt("ECB","ZERO",originStr,"1234567890123456")
+local encodeStr = gmssl.sm4encrypt("ECB","ZERO",originStr,"1234567890123456")
 print(originStr,"encrypt",string.toHex(encodeStr))
 print(originStr,"encrypt",string.toHex(encodeStr))
-log.info("testsm.decrypt",sm.sm4decrypt("ECB","ZERO",encodeStr,"1234567890123456"))
+log.info("testsm.decrypt",gmssl.sm4decrypt("ECB","ZERO",encodeStr,"1234567890123456"))
 
 
 originStr = "AES128 ECB Pkcs5Padding test"
 originStr = "AES128 ECB Pkcs5Padding test"
 --加密模式:ECB;填充方式:Pkcs5Padding;密钥:1234567890123456;密钥长度:128 bit
 --加密模式:ECB;填充方式:Pkcs5Padding;密钥:1234567890123456;密钥长度:128 bit
-encodeStr = sm.sm4encrypt("ECB","PKCS5",originStr,"1234567890123456")
+encodeStr = gmssl.sm4encrypt("ECB","PKCS5",originStr,"1234567890123456")
 print(originStr,"encrypt",string.toHex(encodeStr))
 print(originStr,"encrypt",string.toHex(encodeStr))
-log.info("testsm.decrypt",sm.sm4decrypt("ECB","PKCS5",encodeStr,"1234567890123456"))
+log.info("testsm.decrypt",gmssl.sm4decrypt("ECB","PKCS5",encodeStr,"1234567890123456"))
 
 
 originStr = "AES256 CBC Pkcs5Padding test"
 originStr = "AES256 CBC Pkcs5Padding test"
 --加密模式:CBC;填充方式:Pkcs5Padding;密钥:1234567890123456;密钥长度:256 bit;偏移量:1234567890666666
 --加密模式:CBC;填充方式:Pkcs5Padding;密钥:1234567890123456;密钥长度:256 bit;偏移量:1234567890666666
-encodeStr = sm.sm4encrypt("CBC","PKCS5",originStr,"1234567890123456","1234567890666666")
+encodeStr = gmssl.sm4encrypt("CBC","PKCS5",originStr,"1234567890123456","1234567890666666")
 print(originStr,"encrypt",string.toHex(encodeStr))
 print(originStr,"encrypt",string.toHex(encodeStr))
-log.info("testsm.decrypt",sm.sm4decrypt("CBC","PKCS5",encodeStr,"1234567890123456","1234567890666666"))
+log.info("testsm.decrypt",gmssl.sm4decrypt("CBC","PKCS5",encodeStr,"1234567890123456","1234567890666666"))
 */
 */
 static int l_sm4_encrypt(lua_State *L)
 static int l_sm4_encrypt(lua_State *L)
 {    
 {    
@@ -375,13 +378,14 @@ static int l_sm4_encrypt(lua_State *L)
 
 
 /*
 /*
 SM4解密算法
 SM4解密算法
-@api sm.sm4_decrypt(mode,padding,encodeStr,password)
+@api gmssl.sm4decrypt(mode,padding,encodeStr,password)
 @number  加密模式   
 @number  加密模式   
 @number  填充方式 
 @number  填充方式 
 @string  已加密的字符串
 @string  已加密的字符串
 @string  密钥
 @string  密钥
 @return string 解密的字符串
 @return string 解密的字符串
 @usage
 @usage
+-- 参考gmssl.sm4encrypt
 */
 */
 static int l_sm4_decrypt(lua_State *L)
 static int l_sm4_decrypt(lua_State *L)
 {    
 {    
@@ -461,19 +465,19 @@ static int l_sm4_decrypt(lua_State *L)
 }
 }
 
 
 #include "rotable2.h"
 #include "rotable2.h"
-static const rotable_Reg_t reg_sm[] =
+static const rotable_Reg_t reg_gmssl[] =
 {
 {
     { "sm2encrypt",      ROREG_FUNC(l_sm2_encrypt)},
     { "sm2encrypt",      ROREG_FUNC(l_sm2_encrypt)},
     { "sm2decrypt",      ROREG_FUNC(l_sm2_decrypt)},
     { "sm2decrypt",      ROREG_FUNC(l_sm2_decrypt)},
-    { "sm3update",      ROREG_FUNC(l_sm3_update)},
+    { "sm3update",       ROREG_FUNC(l_sm3_update)},
     { "sm4encrypt",      ROREG_FUNC(l_sm4_encrypt)},
     { "sm4encrypt",      ROREG_FUNC(l_sm4_encrypt)},
     { "sm4decrypt",      ROREG_FUNC(l_sm4_decrypt)},
     { "sm4decrypt",      ROREG_FUNC(l_sm4_decrypt)},
 
 
 	{ NULL,             ROREG_INT(0) }
 	{ NULL,             ROREG_INT(0) }
 };
 };
 
 
-LUAMOD_API int luaopen_sm( lua_State *L ) {
-    luat_newlib2(L, reg_sm);
+LUAMOD_API int luaopen_gmssl( lua_State *L ) {
+    luat_newlib2(L, reg_gmssl);
     return 1;
     return 1;
 }
 }
 
 

+ 0 - 0
components/SM/src/modes/cbc128.c → components/gmssl/src/modes/cbc128.c


+ 0 - 0
components/SM/src/sm2/sm2.c → components/gmssl/src/sm2/sm2.c


+ 0 - 0
components/SM/src/sm3/sm3.c → components/gmssl/src/sm3/sm3.c


+ 0 - 0
components/SM/src/sm4/sm4_cbc.c → components/gmssl/src/sm4/sm4_cbc.c


+ 0 - 0
components/SM/src/sm4/sm4_common.c → components/gmssl/src/sm4/sm4_common.c


+ 0 - 0
components/SM/src/sm4/sm4_ecb.c → components/gmssl/src/sm4/sm4_ecb.c


+ 0 - 0
components/SM/src/sm4/sm4_enc.c → components/gmssl/src/sm4/sm4_enc.c


+ 0 - 0
components/SM/src/sm4/sm4_lcl.h → components/gmssl/src/sm4/sm4_lcl.h


+ 0 - 0
components/SM/src/sm4/sm4_setkey.c → components/gmssl/src/sm4/sm4_setkey.c


+ 16 - 13
demo/sm/main.lua → demo/gmssl/main.lua

@@ -1,6 +1,6 @@
 
 
 -- LuaTools需要PROJECT和VERSION这两个信息
 -- LuaTools需要PROJECT和VERSION这两个信息
-PROJECT = "smdemo"
+PROJECT = "gmssldemo"
 VERSION = "1.0.0"
 VERSION = "1.0.0"
 
 
 log.info("main", PROJECT, VERSION)
 log.info("main", PROJECT, VERSION)
@@ -17,40 +17,43 @@ end
 sys.taskInit(function()
 sys.taskInit(function()
 
 
     sys.wait(3000)
     sys.wait(3000)
-    log.info("sm", "start")
+    log.info("gmssl", "start")
 
 
+    -- SM2 , 非对称加密, 类似于RSA,但属于椭圆算法
+    -- 就当前实现还是比较慢的
     local originStr = "encryption standard"
     local originStr = "encryption standard"
     local pkx = "191BFF8148006EEA72D857CB974DB9F4903B3CA3655D8D597AD4663F5044DCB1"
     local pkx = "191BFF8148006EEA72D857CB974DB9F4903B3CA3655D8D597AD4663F5044DCB1"
     local pky = "E2F7888AF1FCD8C653A8059CD2F379855389F71A7709E2C1EE1E914C855EF119"
     local pky = "E2F7888AF1FCD8C653A8059CD2F379855389F71A7709E2C1EE1E914C855EF119"
     local private = "1649AB77A00637BD5E2EFE283FBF353534AA7F7CB89463F208DDBC2920BB0DA0"
     local private = "1649AB77A00637BD5E2EFE283FBF353534AA7F7CB89463F208DDBC2920BB0DA0"
     local rand = "4C62EEFD6ECFC2B95B92FD6C3D9575148AFA17425546D49018E5388D49DD7B4F"
     local rand = "4C62EEFD6ECFC2B95B92FD6C3D9575148AFA17425546D49018E5388D49DD7B4F"
-    local encodeStr = sm.sm2encrypt(pkx,pky,rand,originStr,private)
+    local encodeStr = gmssl.sm2encrypt(pkx,pky,rand,originStr,private)
     print(originStr,"encrypt",string.toHex(encodeStr))
     print(originStr,"encrypt",string.toHex(encodeStr))
-    log.info("testsm.sm2decrypt",sm.sm2decrypt(private,encodeStr,pkx,pky))
+    log.info("testsm.sm2decrypt",gmssl.sm2decrypt(private,encodeStr,pkx,pky))
 
 
-    encodeStr = sm.sm3update("lqlq666lqlq946")
+    -- SM3 算法, hash类
+    encodeStr = gmssl.sm3update("lqlq666lqlq946")
     log.info("testsm.sm3update",string.toHex(encodeStr))
     log.info("testsm.sm3update",string.toHex(encodeStr))
 
 
-    originStr = "AES128 ECB ZeroPadding test"
+    -- SM4 算法, 对称加密
+    originStr = "SM4 ECB ZeroPadding test"
     --加密模式:ECB;填充方式:ZeroPadding;密钥:1234567890123456;密钥长度:128 bit
     --加密模式:ECB;填充方式:ZeroPadding;密钥:1234567890123456;密钥长度:128 bit
-    encodeStr = sm.sm4encrypt("ECB","ZERO",originStr,"1234567890123456")
+    encodeStr = gmssl.sm4encrypt("ECB","ZERO",originStr,"1234567890123456")
     print(originStr,"encrypt",string.toHex(encodeStr))
     print(originStr,"encrypt",string.toHex(encodeStr))
-    log.info("testsm.sm4decrypt",sm.sm4decrypt("ECB","ZERO",encodeStr,"1234567890123456"))
+    log.info("testsm.sm4decrypt",gmssl.sm4decrypt("ECB","ZERO",encodeStr,"1234567890123456"))
 
 
     originStr = "AES128 ECB Pkcs5Padding test"
     originStr = "AES128 ECB Pkcs5Padding test"
     --加密模式:ECB;填充方式:Pkcs5Padding;密钥:1234567890123456;密钥长度:128 bit
     --加密模式:ECB;填充方式:Pkcs5Padding;密钥:1234567890123456;密钥长度:128 bit
-    encodeStr = sm.sm4encrypt("ECB","PKCS5",originStr,"1234567890123456")
+    encodeStr = gmssl.sm4encrypt("ECB","PKCS5",originStr,"1234567890123456")
     print(originStr,"encrypt",string.toHex(encodeStr))
     print(originStr,"encrypt",string.toHex(encodeStr))
-    log.info("testsm.sm4decrypt",sm.sm4decrypt("ECB","PKCS5",encodeStr,"1234567890123456"))
+    log.info("testsm.sm4decrypt",gmssl.sm4decrypt("ECB","PKCS5",encodeStr,"1234567890123456"))
 
 
     originStr = "AES256 CBC Pkcs5Padding test"
     originStr = "AES256 CBC Pkcs5Padding test"
     --加密模式:CBC;填充方式:Pkcs5Padding;密钥:1234567890123456;密钥长度:256 bit;偏移量:1234567890666666
     --加密模式:CBC;填充方式:Pkcs5Padding;密钥:1234567890123456;密钥长度:256 bit;偏移量:1234567890666666
-    encodeStr = sm.sm4encrypt("CBC","PKCS5",originStr,"1234567890123456","1234567890666666")
+    encodeStr = gmssl.sm4encrypt("CBC","PKCS5",originStr,"1234567890123456","1234567890666666")
     print(originStr,"encrypt",string.toHex(encodeStr))
     print(originStr,"encrypt",string.toHex(encodeStr))
-    log.info("testsm.sm4decrypt",sm.sm4decrypt("CBC","PKCS5",encodeStr,"1234567890123456","1234567890666666"))
+    log.info("testsm.sm4decrypt",gmssl.sm4decrypt("CBC","PKCS5",encodeStr,"1234567890123456","1234567890666666"))
 
 
     log.info("sm", "ALL Done")
     log.info("sm", "ALL Done")
-    sys.wait(100000)
 end)
 end)
 
 
 -- 用户代码已结束---------------------------------------------
 -- 用户代码已结束---------------------------------------------

+ 1 - 1
luat/include/luat_libs.h

@@ -57,7 +57,7 @@ LUAMOD_API int luaopen_pack( lua_State *L );
 LUAMOD_API int luaopen_mqttcore( lua_State *L );
 LUAMOD_API int luaopen_mqttcore( lua_State *L );
 /** crypto库*/
 /** crypto库*/
 LUAMOD_API int luaopen_crypto( lua_State *L );
 LUAMOD_API int luaopen_crypto( lua_State *L );
-LUAMOD_API int luaopen_sm( lua_State *L );
+LUAMOD_API int luaopen_gmssl( lua_State *L );
 /** 功耗调整 */
 /** 功耗调整 */
 LUAMOD_API int luaopen_pm( lua_State *L);
 LUAMOD_API int luaopen_pm( lua_State *L);
 LUAMOD_API int luaopen_m2m( lua_State *L);
 LUAMOD_API int luaopen_m2m( lua_State *L);

+ 2 - 2
luat/modules/luat_lib_vmx.c

@@ -69,8 +69,8 @@ static const luaL_Reg loadedlibs[] = {
 #ifdef LUAT_USE_ADC
 #ifdef LUAT_USE_ADC
   {"adc",   luaopen_adc},
   {"adc",   luaopen_adc},
 #endif
 #endif
-#ifdef LUAT_USE_SM
-  {"sm",   luaopen_sm},
+#ifdef LUAT_USE_GMSSL
+  {"gmssl",   luaopen_gmssl},
 #endif
 #endif
   {NULL, NULL}
   {NULL, NULL}
 };
 };