【发布时间】:2020-12-05 10:16:10
【问题描述】:
我在 gatsby 中使用 bigInt 库,像这样
import BigInteger from 'bigi';
const signature = ecdsa.sign(shaMsg, BigInteger.fromBuffer(privateKey));
在生产版本中似乎存在一些我无法修复的 polyfill 问题。在 localhost 中运行时没有问题。
所以我想我会尝试一个不同的 bigInt 库来看看这是否能解决它
import bigInt from "big-integer";
问题是这个库没有fromBuffer 函数,而上面代码中的signature 是缓冲区类型。
除了使用“bigi”库中的函数之外,我如何转换它?
谢谢(这个问题是否有意义,因为我不知道自己在做什么)
编辑:为澄清起见,控制台记录BigInteger.fromBuffer(privateKey) 在开发版本(有效的版本)结果:
BigInteger {0: 5218218, 1: 6291014, 2: 34656281, 3: 1776116, 4: 53518743, 5: 10808093, 6: 62725491, 7: 63913863, 8: 50275223, 9: 1979384, t: 10, s: 0}
在生产环境中,它不起作用,与上述相同的日志
n {0: 5218218, 1: 6291014, 2: 34656281, 3: 1776116, 4: 53518743, 5: 10808093, 6: 62725491, 7: 63913863, 8: 50275223, 9: 1979384, t: 10, s: 0}
我不明白会发生什么,可能问题出在ecdsa 库中,正如下面评论员所建议的那样
我在生产中遇到的错误是
Expected property "1" of type BigInteger, got n
编辑:我解决了这个问题,我在其他地方得到了帮助,通过使用椭圆而不是 ecdsa 进行签名,如下所示,这是一个 ecsda 问题。由于赏金,我无法关闭,也无法发布答案,所以我不知道该怎么办
【问题讨论】:
-
你的问题对我来说很有意义。也许你可以创建一个字节的大整数,左移 8,创建下一个字节的大整数并添加它,左移 8 等等。 shift 一般不是很费钱的操作(但是由于 JS 并没有真正做整数类型,所以不知道到底有多快)。
-
@MaartenBodewes 如何创建一个字节的 bigint 以及如何左移 8?这是怎么做到的?
-
我认为您可以使用括号索引缓冲区中的字节,然后您可以使用带有单个参数的 biginteger 构造函数。
shiftLeft是大整数类的方法吧? -
@MaartenBodewes 这是第一次做这件事,所以 IDK。你认为这个图书馆有帮助吗? npmjs.com/package/buffer
-
这可能与 BigInteger 的实现无关,更多的是与您的
ecdsa.sign函数有关。这是什么图书馆?
标签: reactjs cryptography biginteger