构建基于sm4的wasm

构建基于sm4的wasm

前言

一直有个想法,想基于 https://github.com/guanzhi/GmSSL 构建出自定义的国密加解密方案,无奈C语言开发并不熟悉,而每次windows下构建开发环境,经常碰到文件无法下载,或者无法执行的问题。
突发奇想,另辟蹊径通过linux去运行,于是乎便有了如下操作方式。我们是基于docker进行的,所以各位看官得先把docker搭好了再继续 =)

1. 镜像文件编辑

# Dockerfile
# 基础镜像选择 Ubuntu
FROM ubuntu:22.04

# 安装构建工具和依赖
RUN apt update && \
    apt install -y git build-essential cmake perl wget curl \
    python3 python3-pip clang lld unzip

# 假设你已经将 emsdk.zip 和 GmSSL.zip 放在了与 Dockerfile 相同的目录下
COPY emsdk.zip /
COPY GmSSL.zip /

# 安装 Emscripten SDK
RUN unzip /emsdk.zip -d /emsdk && \
    chmod +x /emsdk/emsdk && \
    cd /emsdk && \
    ./emsdk install latest && \
    ./emsdk activate latest && \
    echo "source /emsdk/emsdk_env.sh" >> /root/.bashrc

# 解压 GmSSL 源码
RUN unzip /GmSSL.zip -d /gmssl

WORKDIR /gmssl

注意上面的有两个 zip 文件,其实分别对应git仓库的下载
https://github.com/emscripten-core/emsdk.git
https://github.com/guanzhi/GmSSL
因为git clone 可能无法正常下载,所以提前用zip方式下载下来,然后和Dockerfile放在一起

2. 启动容器

docker build -t gmssl-wasm .

3.进入容器

docker run -it gmssl-wasm bash

4.启用 emsdk 环境 + 构建

source /emsdk/emsdk_env.sh
mkdir -p /gmssl/build && cd /gmssl/build
emcmake cmake ..   \
  -DCMAKE_BUILD_TYPE=Release   \
  -DBUILD_SHARED_LIBS=OFF   \
  -DGMSSL_NO_ASM=ON   \
  -DGMSSL_BUILD_TEST=OFF  \
  -DCMAKE_INSTALL_PREFIX=./dist 
emmake make -j$(nproc)  
emmake make install

至此,将会在dist 文件夹中出现构建好的 libgmssl.a 等文件,后续我们生成 wasm 将会利用这些文件

5. 新建 wrapper 文件夹,用于构建 wasm

5.1 新建 sm4_wrapper.c 文件
#include <string.h>
#include <stdlib.h>
#include <stdint.h>
#include "gmssl/sm4.h"


// 128-bit 对称加密:块大小固定为 16 字节
int sm4_encrypt_block(uint8_t *key, uint8_t *in, uint8_t *out) {
   
    SM4_KEY sm4_key
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值