gpt4 book ai didi

c - 使用 Emscripten 编译的 WebAssembly 中的 HmacSHA256

转载 作者:太空狗 更新时间:2023-10-29 16:34:08 24 4
gpt4 key购买 nike

我正在尝试在 WebAssembly 中实现 JWT token (仅编码),目标是拥有一个非常轻量级 wasm 模块。作为 Web 开发人员,我的 C 知识是有限的。现在我已经实现了以下函数(从 JS 移植)来编码 url-safe Base64 编码器,它工作得很好。

char _keyStr[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=";
char ret_val[200];

char* encode (char *data){
int len = strlen(data);
int i = 0;
int j = 0;

while(i<len){
char chr1 = data[i++];
int chr2Out = (i > len - 1)? 1:0;
char chr2 = data[i++];
int chr3Out = (i > len - 1)? 1:0;;
char chr3 = data[i++];


char enc1 = chr1 >> 2;
char enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
char enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
char enc4 = chr3 & 63;

if (chr2Out) {
enc3 = enc4 = 64;
} else if (chr3Out) {
enc4 = 64;
}

ret_val[j++] = _keyStr[enc1];
ret_val[j++] = _keyStr[enc2];
ret_val[j++] = _keyStr[enc3];
ret_val[j++] = _keyStr[enc4];

}
ret_val[j] = '\0';
return ret_val;
}

我的下一个挑战是能够使用 HmacSHA256 为我的 JWT 负载签名。下面的 JS fiddle ,描述了我想用 C 完成的事情。 https://jsfiddle.net/gm7boy2p/813/

我正在努力集成第 3 方代码并将其与 emcc 兼容。我正在寻找轻量级库或代码片段。

示例代码或任何帮助将不胜感激。


更新:经过额外研究,阅读 this stackoverflow 问题和 this 文章,看起来将 openssl 或任何其他外部库与 WebAssembly 结合使用绝非易事。所以我现在正在寻找的是一个独立的 C 函数,我可以将它集成到我现有的代码中。

最佳答案

确实在使用web-assembly时不能使用系统库。因此,唯一的解决方案是以与交叉编译器(即 emscripten)已经提供的库兼容的方式从源代码编译它们

所以对于你的问题,我找到了图书馆 cryptopp ,满足您的用例。示例 here展示如何使用此库。

现在你如何为你的案例编译这个库?由于它带有一个 make 文件,您需要做的就是调用

emmake make -f GNUmakefile-cross -j8

这将生成一个 .a 文件,它实际上是一个 .bc 文件,可以与您希望在 Web 上运行的现有 C/C++ 程序链接。只需确保适本地包含此文件的标题即可。如果您为您的项目制作一个 makefile 就更好了。

P.S 通过在 GNUmakefile-cross 文件的末尾添加这些行,我在我的系统中本地工作

cryptest.html: libcryptopp.a $(TESTOBJS)
$(CXX) -s DISABLE_EXCEPTION_CATCHING=0 --preload-file TestData -o $@ $(strip $(CXXFLAGS)) $(TESTOBJS) ./libcryptopp.a $(LDFLAGS) $(LDLIBS)

我更改了 test.cpp 文件以包含“HMAC”的示例代码,然后从命令行调用以下行

emmake make -f GNUmakefile-cross cryptest.html -j8

输出即 cryptest.html,在 firefox 中打开时工作完美。

关于c - 使用 Emscripten 编译的 WebAssembly 中的 HmacSHA256,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49776226/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com