#node.js #cryptography #jose
Вопрос:
У меня есть строка открытого ключа следующим образом, пусть pk_str = «строка открытого ключа здесь», и я использую библиотеку 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
Есть ли способ создать ключ ?
Ответ №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).
Ответ №2:
Ниже приведена документация по key
аргументу всех применимых функций.