Как правильно реализовать Web Crypto API generateKey и exportKey? - PullRequest
0 голосов
/ 28 мая 2020

Всем привет!

У меня есть этот код:

async function generateKey() {
  const algoritm = { name: "AES-CBC", length: 256 };
  const exportable = true;
  const usage = ['encrypt'];
  return await window.crypto.subtle.generateKey(algoritm, exportable, usage).then(key => { return key; 
  });
}

, когда я вызываю console.log (generateKey ()); Я получаю: >Promise при первой загрузке и >Promise {<pending>} при обновлении окна браузера.

async function exportKey(key) {
  const format = "jwk";
  return await window.crypto.subtle.exportKey(format, key).then(key => { return key; });
}

когда я звоню let key =generateKey(); console.log(exportKey (key)); Я получаю: 'SubtleCrypto': parameter 2 is not of type 'CryptoKey'.

У меня есть два вопроса о

  • Как правильно сгенерировать ключ с заданными параметрами?

  • Каков правильный способ экспортировать сгенерированный ключ в формате JSON?

Я прочитал из: SubtleCrypto MDN Web Docs

1 Ответ

2 голосов
/ 28 мая 2020

Ваше использование API выглядит правильно. Вы получаете сообщение об ошибке 'SubtleCrypto': parameter 2 is not of type 'CryptoKey', потому что parameter 2 имеет тип Promise . Чтобы устранить эту проблему, разрешите обещание от generateKey, прежде чем передавать его exportKey

const main = async () => {
  const key = await generateKey()
  const exported = await exportKey(key)
  console.log(exported)
}

. Конечно, это может стать еще проще, если вы используете мою библиотеку rubico

const { pipe } = require('rubico')

const main = pipe([generateKey, exportKey, console.log])

Два примера эквивалентны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...