Libsodium generateKeys 只能偶尔工作
Libsodium generateKeys working only sporadically
我是 运行 这个代码:
import React, { Component } from "react";
import logo from "./logo.svg";
import "./App.css";
import sotez from "sotez";
class App extends Component {
state = {
pkh: "",
mnemonic: "",
sk: ""
};
async componentDidMount() {
await this.main();
}
main = async () => {
const password = "yanterzzz";
await sotez.node
.query("/chains/main/blocks/head")
.then(response => console.log(response));
const result = await sotez.crypto.generateMnemonic();
const answer = await sotez.crypto.generateKeys(result, password);
console.log(answer.mnemonic);
this.setState({ mnemonic: answer.mnemonic });
this.setState({ sk: answer.sk });
this.setState({ pkh: answer.pkh });
};
}
它可以工作一段时间并正确生成密钥,但最终我会 运行 陷入这个错误:
Unhandled Rejection (TypeError): library.sodium.crypto_sign_seed_keypair is not a function
我的问题是 React 和组件重新加载还是 libsodium 库的问题?
所以可能发生的情况是用于 generateKeys
的伪随机数生成器需要从熵池中播种。通常,此池会在信息可用时自动更新信息。 RNG 在决定重新播种之前只会输出特定数量的数据。
它不会阻塞并等待自动重新播种发生,而是会进行显式调用以尽快检索熵。但是,此特定调用在 运行 时间内不可用,届时程序将因给定错误而崩溃。通常,除非在紧密循环中检索随机值,否则永远不会生成错误。
密钥对生成至少需要与密钥大小一样多的高质量随机数据,因此这是导致系统 运行 熵耗尽的已知原因之一。
我是 运行 这个代码:
import React, { Component } from "react";
import logo from "./logo.svg";
import "./App.css";
import sotez from "sotez";
class App extends Component {
state = {
pkh: "",
mnemonic: "",
sk: ""
};
async componentDidMount() {
await this.main();
}
main = async () => {
const password = "yanterzzz";
await sotez.node
.query("/chains/main/blocks/head")
.then(response => console.log(response));
const result = await sotez.crypto.generateMnemonic();
const answer = await sotez.crypto.generateKeys(result, password);
console.log(answer.mnemonic);
this.setState({ mnemonic: answer.mnemonic });
this.setState({ sk: answer.sk });
this.setState({ pkh: answer.pkh });
};
}
它可以工作一段时间并正确生成密钥,但最终我会 运行 陷入这个错误:
Unhandled Rejection (TypeError): library.sodium.crypto_sign_seed_keypair is not a function
我的问题是 React 和组件重新加载还是 libsodium 库的问题?
所以可能发生的情况是用于 generateKeys
的伪随机数生成器需要从熵池中播种。通常,此池会在信息可用时自动更新信息。 RNG 在决定重新播种之前只会输出特定数量的数据。
它不会阻塞并等待自动重新播种发生,而是会进行显式调用以尽快检索熵。但是,此特定调用在 运行 时间内不可用,届时程序将因给定错误而崩溃。通常,除非在紧密循环中检索随机值,否则永远不会生成错误。
密钥对生成至少需要与密钥大小一样多的高质量随机数据,因此这是导致系统 运行 熵耗尽的已知原因之一。