Ошибка ввода параметра алгоритма 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

Другие вопросы по тегам