🤓
Chrome は SubtleCrypto.decrypt() のエラーを識別しない
発見に至る経緯
Web Crypto API
の勉強がてら自分用のオフラインパスワードマネージャを開発しています。
JSON 形式にシリアライズして暗号化したオブジェクト、および暗号・復号に用いる CryptoKey
を IndexedDB
に保存する仕組みにしました。
鍵は生成時に extractable
プロパティを false
に設定することで平文として取得できなくなります。IndexedDB
に保存された CryptoKey
は鍵の参照のみを API に提供するので、ユーザーや拡張機能、あるいはマルウェアにストレージを開けられて勝手に持ち出される心配がなくなります。
開発を進めるにつれて、やがて SubtleCrypto.decrypt(...)
の部分でエラーが発生します。Promise
ベースの API ということで .catch(...)
でログを取ることに。しかし
console
Error
としか出ず、MDN にあるエラーのどれにあたるのか分からない事態に。(この時点で他のブラウザで検証すべきだったのですが)かれこれ一時間は格闘し、やがて FireFox での検証でエラーの正体が OperationError
であった事が判明しました。
反省
デバッグは2つ以上のブラウザで行うようにします。。
Discussion