Я создаю KeyPair, а затем экспортировать ключ из пары ключей, используя Web Crypto API:WebCrypto: Safari не может exportKey() и обещание, кажется, никогда не разрешить/не
var log = console.log.bind(console);
var subtleCrypto = null;
if (window.crypto) {
subtleCrypto = window.crypto.subtle || window.crypto.webkitSubtle;
}
if (window.msCrypto) {
subtleCrypto = window.msCrypto.subtle
}
subtleCrypto.generateKey(
{
name: "RSASSA-PKCS1-v1_5",
modulusLength: 2048,
publicExponent: new Uint8Array([1, 0, 1]), // 24 bit representation of 65537
hash: {name: "SHA-256"}
},
true, // can extract it later if we want
["sign", "verify"]
).then(function(keyPair){
log('Exporting from keyPair', keyPair)
subtleCrypto.exportKey('pkcs8', keyPair.privateKey).then(function(pkcs8) {
log('Exported keypair!', pkcs8)
}, function(reason) {
log('Couldnt export keypair', reason)
})
}, function(reason){
log('could not generate key', reason)
})
В Chrome и Firefox, код работает отлично, печать:
"Exporting from keyPair" Object { privateKey: CryptoKey, publicKey: CryptoKey }
"Exported keypair!" ArrayBuffer { byteLength: 1218 }
Однако на сафари это не удается, печать только:
Exporting from keyPair KeyPair
И то ничего не делать. Как я могу экспортировать ключ в Safari?
Это на самом деле не имеет ничего общего с обещаниями, но скорее это похоже на ошибку в реализации веб-криптографической Сафари. –
Может быть, доступ к 'keyPair.privateKey' бросает? Вы не поймаете все ошибки в своих обещаниях, попробуйте добавить обработчик '.catch()'. – Bergi
@bergi не будет второй функцией после в 'then()' ловить ошибки? Я прочитал страницу обещаний в MDN, но подозреваю, что не понимаю разницу между .catch() и второй функцией .then(). – mikemaccana