Ошибка ввода параметра алгоритма web crypto importKey
Я реализую примеры для pbkdf2, показанные на MDN. Мой тестовый код
let enc = new TextEncoder();
let password = enc.encode("password");
window.crypto.subtle.importKey(
"raw",
password,
{"name": "PBKDF2"},
false,
["deriveBits", "deriveKey"]
)
Это приводит к следующей ошибке (машинопись 3.3.4000):
credential.service.ts:6:3 - error TS2345: Argument of type '{ "name": string; }' is not assignable to parameter of type 'string | AesKeyAlgorithm | EcKeyImportParams | HmacImportParams | RsaHashedImportParams | DhImportKeyParams'.
Type '{ "name": string; }' is missing the following properties from type 'DhImportKeyParams': generator, prime
{"name": "PBKDF2"},
Код отлично работает в Chrome.
1 ответ
Следующий (некрасивый) обходной путь делает свое дело:
window.crypto.subtle.importKey(
"raw",
password,
{
"name": "PBKDF2",
// the next two lines are just to trick typescript
"generator": new Uint8Array(12),
"prime": new Uint8Array(12)
},
false,
["deriveBits", "deriveKey"]
)
Это уродливо, как это обманывает машинку в мышлении PBKDF2
объект - это нечто иное, чем оно есть на самом деле.
Я думаю, что этот пример неверен. Когда вы смотрите вверх наParameters section / algorithm
вы увидите, что:
Для PBKDF2: передайте строку PBKDF2.
Так что вместо {name: 'PBKDF2'}
использовать просто 'PBKDF2'
.
MDN: SubtleCrypto.importKey()
https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/importKey