Я пытаюсь использовать API-интерфейс webcrypto для IE 11 и chrome. Я получаю ошибку Unable to get property 'message' of undefined or null reference
при использовании реализации IE.
Я использую реализацию, показанную здесь https://docs.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-developer/dev-guides/dn265046(v=vs.85).
export function verifySocketMessage(signature: string, convertedData: any, publicKey: string) {
publicKey = publicKey.replace(/(\r\n|\n|\r)/gm, "").split("-----")[2];
let crypto = window.crypto || (<any>window).msCrypto;
// IE 11 implementation
let importOp = crypto.subtle.importKey("spki",
base64ToArrayBufferEx(publicKey),
{
name: "RSASSA-PKCS1-v1_5",
hash: { name: "SHA-256" }
},
true, ["verify"]);
return Promise.resolve(importOp).then((key) => {
let keyRes;
key.oncomplete = (e) => {
keyRes = e.target.result;
console.log("onComplete", keyRes);
let verifyOp = crypto.subtle.verify("RSASSA-PKCS1-v1_5",
keyRes, base64ToArrayBufferEx("signature"), strToAB("convertedData"));
console.log("verifyOp", verifyOp); // This contains the error
return Promise.resolve(verifyOp).then(verified => {
console.log("in verified", verified);
verified.onerror = (err) => {
console.log("in verified err", err);
};
verified.oncomplete = (e) => {
console.log("verified complete", e);
};
});
};
});
// Chrome implementation
// return crypto.subtle.importKey("spki",
// base64ToArrayBufferEx(publicKey),
// {
// name: "RSASSA-PKCS1-v1_5",
// hash: { name: "SHA-256" }
// },
// true, ["verify"]).then(key => {
// console.log("key", key)
// return crypto.subtle.verify({
// name: "RSASSA-PKCS1-v1_5"
// } as any, key, base64ToArrayBufferEx(signature),
// strToAB(convertedData)).then(verified => {
// console.log("verified", verified)
// return Promise.resolve(verified);
// }, (err) => {
// console.log("up err", err);
// });
// });
}
Параметры работают просто отлично и проверяют сообщение в chrome, но терпят неудачу в IE 11. Когда я пытаюсь выполнить точную реализацию, включая генерацию и подписание ключей, показанных в документах IE11, все работает нормально.
Есть ли что-то отличное в том, как генерируются ключи IE11 и хромированные ключи? Используемые мной данные и ключи создаются в браузере Chrome.