Libsodium generateKeys仅偶尔起作用

时间:2018-08-07 02:19:03

标签: reactjs cryptography libsodium

我正在运行以下代码:

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库的问题?

1 个答案:

答案 0 :(得分:0)

因此,可能发生的情况是,用于var age = 15; function whichSchool(age) { return (age < 13) ? "Elementary School" : (age >= 13 && age <= 18) ? "Secondary School" : "University" } console.log(whichSchool(15))的伪随机数生成器需要从熵池中进行播种。通常,此池在可用时会自动用信息更新。 RNG在决定有必要播种之前只会输出特定数量的数据。

与其阻塞并等待自动播种,不如进行显式调用以尽快检索熵。但是,此特定调用在运行时中不可用,并且那时程序将由于给定的错误而崩溃。通常,除非在紧密循环中检索随机值,否则永远不会产生错误。

密钥对的生成至少需要与密钥大小一样多的高质量随机数据,因此这是导致系统用尽熵的已知原因之一。