密钥生成将算法抛出为错误

时间:2017-04-23 23:12:47

标签: javascript microsoft-edge webcryptoapi

我有以下代码:

crypto.subtle.generateKey({
  name: 'ECDSA',
  namedCurve: 'P-256',
}, true, ['sign', 'verify']).then(function(key) {
  console.log('generated key');
}).catch(function(err) {
  console.log('error: ' + err + ', as JSON: ' + JSON.stringify(err));
});

当我在Chrome或Firefox中运行此代码(live demo here)时,会打印出generated key。但是,在Microsoft Edge 14.14393中,输出非常奇怪:

error: [object Object], as JSON: {"name":"ECDSA","namedCurve":"P-256"}

为什么Edge在这里抛出错误?
为什么抛出的错误不是正常的错误对象,而是算法规范?
如何在Edge中生成ECDSA密钥?

1 个答案:

答案 0 :(得分:3)

根据Edge的Web Cryptography API文档,截至目前,它看起来不像ECDSA算法。

我真的不明白为什么错误与您传递给generateKey方法的有效负载相匹配,但它看起来像是一个错误。

关于你可以做什么,你可以使用像elliptic这样的库来生成关键的客户端。它已在Edge 13下进行了测试,并假设您遇到的错误不是由于14,它似乎是一个很好的解决方案。

const EC = require('elliptic').ec
const ec = new EC('p256')
const key = ec.genKeyPair()

我猜你也不想依赖一个api调用来负责生成和发回密钥,因为它可能会危害你的系统,但这也可能是解决问题的一种方法。