首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可以使用Tweetnacl库使用base58密钥对消息进行签名吗?

可以使用Tweetnacl库使用base58密钥对消息进行签名吗?
EN

Stack Overflow用户
提问于 2019-09-20 14:41:23
回答 1查看 383关注 0票数 2

我已经使用Tweetnacl.js生成了密钥对:

代码语言:javascript
复制
const base58KeyPairGenerator = (seed: Uint8Array) => ({
    publicKey: keyToPublicIdentityKey(nacl.sign.keyPair.fromSeed(seed).publicKey),
    secretKey: seedToSecretIdentityKey(seed)
});

const keyToPublicIdentityKey = (key) => {
    return keyToIdentityKey(key, 'idpub');
};

const seedToSecretIdentityKey = (seed) => {
    return keyToIdentityKey(seed, 'idsec');
};

const keyToIdentityKey = (key, prefix) => {
    const keyBuffer = Buffer.from(key, 'hex');
    if (keyBuffer.length !== 32) {
        throw new Error('Key/seed must be 32 bytes long.');
    }
    const address = Buffer.concat([prefix, keyBuffer]);
    const checksum = sha256d(address).slice(0, 4);
    return base58.encode(Buffer.concat([address, checksum]));
};

const sha256d = (data) => {
    return Buffer.from(
        sha256()
            .update(
                sha256()
                    .update(data)
                    .digest()
            )
            .digest()
    );
};

const keyPair = base58KeyPairGenerator(nacl.randomBytes(32));

现在我有了base58密钥对(base58中的公钥和私钥),我想用下面这样的私钥对消息进行签名:

代码语言:javascript
复制
nacl.sign(
          Buffer.from(someStringMessage, 'hex'),
          base58.decode(keyPair.secretKey)
        )

这里的base58来自this库。

然而,我得到了这个错误:

代码语言:javascript
复制
bad secret key size

      at Object.<anonymous>.nacl.sign (node_modules/tweetnacl/nacl-fast.js:2257:11)

实际上,nacl.sign函数需要64位密钥,而我的base58版本不是这样的。

有没有办法在保留base58的同时修复它,或者我应该使用nacl.randomBytes(32)生成的原始Ed25519格式,即未转换的格式?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-20 15:31:10

也就是说,NaCl签名密钥是64字节,而不是32字节。这就是你得到的错误。

base58KeyPairGenerator函数中,密钥必须是nacl.sign.keyPair.fromSeed(seed).secretKey (或.privateKey或其他任何名称)的输出,而不仅仅是种子。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58026943

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档