1

我有一个如下的公钥字符串 let pk_str = "public key strig here" 并且我正在使用该库jose来验证 JWS

            (async() => {
                const decoder = new TextDecoder();
                const jws = vc_proof_value;
                const { payload, protectedHeader } = await compactVerify(jws, pk_str);
    
                console.log(protectedHeader)
                console.log(decoder.decode(payload))
              })();

尝试运行脚本时出现以下错误

(node:75986) UnhandledPromiseRejectionWarning: TypeError: Key must be one of type KeyObject, CryptoKey, or Uint8Array. Received type string

有没有办法构造密钥?

4

2 回答 2

1

key是所有适用函数的参数的文档。

于 2021-08-13T10:35:11.757 回答
1

在 NodeJS 中(我指的是 NodeJS,因为你已经标记了这个),公钥被传递,因为KeyObject它是用crypto.createPublicKey(). 您对密钥没有说太多,大概它是 PEM 编码的(因为它是一个字符串)。在这种情况下,您只需传递 PEM 编码的密钥:

var key = crypto.createPublicKey(pk_str);

如果compactVerify()调用pk_str中的替换为key,则验证有效。

除了 PEM 密钥(默认)之外,还支持 JWK 和 DER 密钥(X.509/SPKI 或 PKCS#1)。

于 2021-08-13T07:09:47.840 回答