Как мне экспортировать закрытый ключ SubtleCrypto ECDSA с помощью PKCS # 8 в JavaScript?

#javascript #export #private-key #ecdsa #subtlecrypto

#javascript #экспорт #закрытый ключ #ecdsa #subtlecrypto

Вопрос:

Я пытаюсь экспортировать закрытый ключ ECDSA (это, вероятно, относится и к ECDH), который я сгенерировал с помощью SubtleCrypto в JavaScript. Согласно MDN (да, это для importKey , но это то место, на которое вы ссылаетесь со страницы для exportKey ), я могу использовать PKCS # 8 для этой цели, и поэтому я собрал следующий фрагмент кода, который стремится реализовать такой экспорт:

 crypto.subtle.generateKey(
    {
        "name": "ECDSA",
        "namedCurve": "P-256"
    },
    true,
    ["sign", "verify"]
).then(keys => {
    crypto.subtle.exportKey("pkcs8", keys.privateKey)
        .then(exported_key => {
            console.log(exported_key)
        })
})
 

Это работает в Chromium и GNOME Web (WebKit). В Firefox я получаю следующую ошибку, зарегистрированную на консоли:

 Uncaught (in promise) DOMException: Operation is not supported
 

Это, по-видимому, происходит от последнего выражения, то есть призыва к exportKey . Поддержка Firefox важна для меня и для того, над чем я работаю, поэтому я хотел бы разобраться в этом, и я полагаю, что скорее я делаю что-то неправильно, чем ошибка в Firefox, поэтому я думаю, что это лучше выяснить, чем просто сказать, что Firefox не поддерживается независимо.

Можно подумать, что это связано с тем, что Firefox не поддерживает экспорт ключей EC с помощью PKSC # 8, но, глядя на таблицу совместимости в MDN, кажется, что это не так, поскольку он помечен как поддерживаемый с версии 34 и далее, и нет никаких замечаний по реализации. Я отвлекся.

Что я могу здесь делать не так, и как я могу заставить это работать?

Комментарии:

1. Похоже, это открытая ошибка Firefox, ошибка 1133698 и D97857 .

2. обе ошибки теперь помечены как закрытые, и код в вопросе просто сработал для меня (firefox версии 94.0.1, chrome версии 96.0.4664.45)

3. Определенно неловкая ситуация. Как вы думаете, как с этим следует обращаться?