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

fix: gmssl库的sm4加密模式错误

https://gitee.com/openLuat/LuatOS/issues/I88J7P
Wendal Chen 2 лет назад
Родитель
Сommit
1f6e7fadec
2 измененных файлов с 14 добавлено и 4 удалено
  1. 2 3
      components/gmssl/bind/luat_lib_gmssl.c
  2. 12 1
      demo/gmssl/main.lua

+ 2 - 3
components/gmssl/bind/luat_lib_gmssl.c

@@ -391,11 +391,10 @@ static int l_sm4_encrypt(lua_State *L)
         if(strcmp(pMode, "ECB") == 0)
         {
             //开始分组加密,每16字节一组
+            char out[SM4_BLOCK_LEN];
             while(nRmnLen>0)
             {
-                // sm4_ecb_encrypt(pInBuf+nBufLen-nRmnLen,pInBuf+nBufLen-nRmnLen,&sm4_key,1);
-                char out[SM4_BLOCK_LEN];
-                sm4_encrypt(&sm4_key, (uint8_t*)(pBuf+nBufLen-nRmnLen), (uint8_t*)out);
+                sm4_encrypt(&sm4_key, (uint8_t*)(pInBuf+nBufLen-nRmnLen), (uint8_t*)out);
                 luaL_addlstring(&b, out, SM4_BLOCK_LEN);
                 nRmnLen -= SM4_BLOCK_LEN;
             }

+ 12 - 1
demo/gmssl/main.lua

@@ -21,7 +21,7 @@ end
 
 sys.taskInit(function()
 
-    sys.wait(3000)
+    sys.wait(1000)
     log.info("gmssl", "start")
 
     -- SM2 , 非对称加密, 类似于RSA,但属于椭圆算法
@@ -75,6 +75,17 @@ sys.taskInit(function()
         encodeStr = gmssl.sm4encrypt("CBC","PKCS5",originStr,passwd,iv)
         log.info("加密对比", originStr,"encrypt",string.toHex(encodeStr))
         log.info("gmssl.sm4decrypt",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
 
     log.info("gmssl", "ALL Done")