我想对数据进行签名,返回签名和公钥(并“忘记”私钥)API
根据这些文档,我从以下内容开始
const generateKeyPair = async function() {
return crypto.subtle.generateKey(
{
name: "ECDSA",
namedCurve: "P-384",
},
true,
["sign", "verify"]
);
}
const sign = async function(privateKey: CryptoKey, buffer: BufferSource) {
return crypto.subtle.sign(privateKey.algorithm, privateKey, buffer);
}
根据我的测试,我认为函数generateKeyPair
是好的。但是当我像这样尝试sign
函数时
import { describe, it, expect } from "vitest";
import { generateKeyPair, sign } from "../../src";
describe("sign", () => {
it('returns a signature.', async () => {
const { privateKey } = await generateKeyPair();
const data = { foo: 'bar' };
const stringifiedData = JSON.stringify(data);
const buffer = Buffer.from(stringifiedData);
await expect(sign(privateKey, buffer)).resolves.toBeTruthy() // expect signature here
});
});
测试失败,出现错误
错误:promise rejected“TypeError [ERR_MISSING_OPTION]:算法.hash是必需的”而不是解析
所以我猜privateKey.algorithm
缺少内部的hash
字段。我是不是用错了算法?我还试着把"hash": "SHA-512"
添加到generateKeyPair
中的选项中。
我基本上想生成一个密钥对,并使用私有密钥对进行签名,使用公共密钥对进行阅读。
你有什么主意吗?
1条答案
按热度按时间3xiyfsfu1#
您需要指定要使用的签名算法的名称和散列。在ECDSA签名的情况下,您需要将
EcdsaParams
对象传递给sign()
函数:Playground链接