Nodejs создает открытый ключ, используя строку открытого ключа

#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 аргументу всех применимых функций.