如何在主进程中使用electron.js中真实的的crypto模块?

rks48beu  于 2023-01-28  发布在  Electron
关注(0)|答案(2)|浏览(335)

我正在用electron.js编写一个加密货币的轻量级钱包。实际上,到目前为止,我只是使用纯node.js作为逻辑。所有与加密相关的东西都在electron.js应用程序的主进程中处理,我刚刚计算出crypto!=crypto && openssl!= boringssl,因此一些函数的行为与最初的node.js crypto模块不同。这现在正在破坏我的代码。
所以我现在的问题是,如何将node.js中的“原始”加密模块与我正在使用的所有依赖模块(如electron main进程中的create-hash)一起使用?

w6mmgewl

w6mmgewl1#

令人高兴的是,唯一的问题是“ripemd160”的快捷方式“rpmd160”在node.js上工作,但在electron上不工作,只需用完整术语替换快捷方式,现在一切都正常了。

tgabmvqs

tgabmvqs2#

我想建立在OP的答案之上,因为我正在努力解决一个非常相似的问题,他自己的答案引导我找到了一个解决方案,但一开始并不清楚如何解决。

错误

我还尝试将加密货币库合并到Electronjs中,并收到以下错误:

[1] Could not start server. Error:  Error: Digest method not supported
[1]     at new Hash (node:internal/crypto/hash:71:19)
[1]     at createHash (node:crypto:130:10)
[1]     at ripemd160 (/home/trout/work/coinjoin/colab-coinjoin-api/node_modules/@psf/bitcoincashjs-lib/src/crypto.js:4:10)
[1]     at Object.hash160 (/home/trout/work/coinjoin/colab-coinjoin-api/node_modules/@psf/bitcoincashjs-lib/src/crypto.js:16:10)
[1]     at HDNode.getIdentifier (/home/trout/work/coinjoin/colab-coinjoin-api/node_modules/@psf/bitcoincashjs-lib/src/hdnode.js:133:18)
[1]     at HDNode.getFingerprint (/home/trout/work/coinjoin/colab-coinjoin-api/node_modules/@psf/bitcoincashjs-lib/src/hdnode.js:137:15)
[1]     at HDNode.derive (/home/trout/work/coinjoin/colab-coinjoin-api/node_modules/@psf/bitcoincashjs-lib/src/hdnode.js:277:31)
[1]     at HDNode.deriveHardened (/home/trout/work/coinjoin/colab-coinjoin-api/node_modules/@psf/bitcoincashjs-lib/src/hdnode.js:286:15)
[1]     at /home/trout/work/coinjoin/colab-coinjoin-api/node_modules/@psf/bitcoincashjs-lib/src/hdnode.js:311:21
[1]     at Array.reduce (<anonymous>)
[1]     at HDNode.derivePath (/home/trout/work/coinjoin/colab-coinjoin-api/node_modules/@psf/bitcoincashjs-lib/src/hdnode.js:307:20)
[1]     at BchAdapter.generateBchId (/home/trout/work/psf/code/ipfs-coord/lib/adapters/bch-adapter.js:41:38)
[1]     at async ThisNodeUseCases.createSelf (/home/trout/work/psf/code/ipfs-coord/lib/use-cases/this-node-use-cases.js:65:21)
[1]     at async IpfsCoord.start (/home/trout/work/psf/code/ipfs-coord/index.js:93:21)
[1]     at async IpfsCoordAdapter.start (/home/trout/work/coinjoin/colab-coinjoin-api/src/adapters/ipfs/ipfs-coord.js:81:5)
[1]     at async IPFS.start (/home/trout/work/coinjoin/colab-coinjoin-api/src/adapters/ipfs/index.js:43:7)
[1]     at async Adapters.start (/home/trout/work/coinjoin/colab-coinjoin-api/src/adapters/index.js:51:9)
[1]     at async Controllers.initAdapters (/home/trout/work/coinjoin/colab-coinjoin-api/src/controllers/index.js:30:5)
[1]     at async Server.startServer (/home/trout/work/coinjoin/colab-coinjoin-api/bin/server.js:83:7)

错误的来源是Electronjs用Google Chromium团队的BorringSSL库替换了Node.js本地加密模块,后者来自OpenSSL。This GitHub Issue向我提示了这一事实。
修复
查看这个错误,可以看到ripemd 160被调用了。通过挖掘依赖项,我找到了create-hash npm library。在我的原始代码中,我调用了以下代码行:

  • return createHash('rmd160').update(buffer).digest()

我可以通过将rmd160替换为ripemd160来修复这个问题,因此该行如下所示:

  • return createHash('ripemd160').update(buffer).digest()

就是这样!那一行修改使库可以在Electronjs中与BorringSSL一起工作。

相关问题