From 7ace1dfec137941328b9dba2d366f0777a7beec4 Mon Sep 17 00:00:00 2001 From: Darshan Sen Date: Mon, 1 Mar 2021 19:32:50 +0530 Subject: [PATCH 1/3] crypto: add separate error for INVALID_KEY_TYPE --- src/crypto/crypto_cipher.h | 41 +++++++++++++++++++++----------------- src/crypto/crypto_keys.h | 37 +++++++++++++++++++--------------- 2 files changed, 44 insertions(+), 34 deletions(-) diff --git a/src/crypto/crypto_cipher.h b/src/crypto/crypto_cipher.h index bae187a6e139a3..8a776709a1ae47 100644 --- a/src/crypto/crypto_cipher.h +++ b/src/crypto/crypto_cipher.h @@ -215,24 +215,29 @@ class CipherJob final : public CryptoJob { WebCryptoCipherMode cipher_mode() const { return cipher_mode_; } void DoThreadPoolWork() override { - switch (CipherTraits::DoCipher( - AsyncWrap::env(), - key(), - cipher_mode_, - *CryptoJob::params(), - in_, - &out_)) { - case WebCryptoCipherStatus::OK: - // Success! - break; - case WebCryptoCipherStatus::INVALID_KEY_TYPE: - // Fall through - // TODO(@jasnell): Separate error for this - case WebCryptoCipherStatus::FAILED: { - CryptoErrorVector* errors = CryptoJob::errors(); - errors->Capture(); - if (errors->empty()) - errors->push_back(std::string("Cipher job failed.")); + const WebCryptoCipherStatus status = + CipherTraits::DoCipher( + AsyncWrap::env(), + key(), + cipher_mode_, + *CryptoJob::params(), + in_, + &out_); + if (status == WebCryptoCipherStatus::OK) { + // Success! + return; + } + CryptoErrorVector* errors = CryptoJob::errors(); + errors->Capture(); + if (errors->empty()) { + switch(status) { + case WebCryptoCipherStatus::INVALID_KEY_TYPE: + errors->emplace_back("Invalid key type."); + break; + case WebCryptoCipherStatus::FAILED: + errors->emplace_back("Cipher job failed."); + break; + } } } } diff --git a/src/crypto/crypto_keys.h b/src/crypto/crypto_keys.h index 5f9fcc8510a781..7dda0ba278dcae 100644 --- a/src/crypto/crypto_keys.h +++ b/src/crypto/crypto_keys.h @@ -337,22 +337,27 @@ class KeyExportJob final : public CryptoJob { WebCryptoKeyFormat format() const { return format_; } void DoThreadPoolWork() override { - switch (KeyExportTraits::DoExport( - key_, - format_, - *CryptoJob::params(), - &out_)) { - case WebCryptoKeyExportStatus::OK: - // Success! - break; - case WebCryptoKeyExportStatus::INVALID_KEY_TYPE: - // Fall through - // TODO(@jasnell): Separate error for this - case WebCryptoKeyExportStatus::FAILED: { - CryptoErrorVector* errors = CryptoJob::errors(); - errors->Capture(); - if (errors->empty()) - errors->push_back("Key export failed."); + const WebCryptoKeyExportStatus status = + KeyExportTraits::DoExport( + key_, + format_, + *CryptoJob::params(), + &out_); + if (status == WebCryptoKeyExportStatus::OK) { + // Success! + return; + } + CryptoErrorVector* errors = CryptoJob::errors(); + errors->Capture(); + if (errors->empty()) { + switch(status) { + case WebCryptoKeyExportStatus::INVALID_KEY_TYPE: + errors->emplace_back("Invalid key type."); + break; + case WebCryptoKeyExportStatus::FAILED: + errors->emplace_back("Cipher job failed."); + break; + } } } } From 4a62519d1b569852f184544c66003db46ef26aac Mon Sep 17 00:00:00 2001 From: Darshan Sen Date: Mon, 1 Mar 2021 19:42:23 +0530 Subject: [PATCH 2/3] fixup! fix lint error --- src/crypto/crypto_cipher.h | 3 +-- src/crypto/crypto_keys.h | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/crypto/crypto_cipher.h b/src/crypto/crypto_cipher.h index 8a776709a1ae47..b7b8df985c70c6 100644 --- a/src/crypto/crypto_cipher.h +++ b/src/crypto/crypto_cipher.h @@ -230,14 +230,13 @@ class CipherJob final : public CryptoJob { CryptoErrorVector* errors = CryptoJob::errors(); errors->Capture(); if (errors->empty()) { - switch(status) { + switch (status) { case WebCryptoCipherStatus::INVALID_KEY_TYPE: errors->emplace_back("Invalid key type."); break; case WebCryptoCipherStatus::FAILED: errors->emplace_back("Cipher job failed."); break; - } } } } diff --git a/src/crypto/crypto_keys.h b/src/crypto/crypto_keys.h index 7dda0ba278dcae..b22e06cee96a4e 100644 --- a/src/crypto/crypto_keys.h +++ b/src/crypto/crypto_keys.h @@ -350,14 +350,13 @@ class KeyExportJob final : public CryptoJob { CryptoErrorVector* errors = CryptoJob::errors(); errors->Capture(); if (errors->empty()) { - switch(status) { + switch (status) { case WebCryptoKeyExportStatus::INVALID_KEY_TYPE: errors->emplace_back("Invalid key type."); break; case WebCryptoKeyExportStatus::FAILED: errors->emplace_back("Cipher job failed."); break; - } } } } From 4085b48776abd8db8bf4c015696ffe704ea24c92 Mon Sep 17 00:00:00 2001 From: Darshan Sen Date: Mon, 1 Mar 2021 20:26:16 +0530 Subject: [PATCH 3/3] fixup! fix compiler warning --- src/crypto/crypto_cipher.h | 3 +++ src/crypto/crypto_keys.h | 3 +++ 2 files changed, 6 insertions(+) diff --git a/src/crypto/crypto_cipher.h b/src/crypto/crypto_cipher.h index b7b8df985c70c6..70dea9ff3c5531 100644 --- a/src/crypto/crypto_cipher.h +++ b/src/crypto/crypto_cipher.h @@ -231,6 +231,9 @@ class CipherJob final : public CryptoJob { errors->Capture(); if (errors->empty()) { switch (status) { + case WebCryptoCipherStatus::OK: + UNREACHABLE(); + break; case WebCryptoCipherStatus::INVALID_KEY_TYPE: errors->emplace_back("Invalid key type."); break; diff --git a/src/crypto/crypto_keys.h b/src/crypto/crypto_keys.h index b22e06cee96a4e..03d1f9a33b1b61 100644 --- a/src/crypto/crypto_keys.h +++ b/src/crypto/crypto_keys.h @@ -351,6 +351,9 @@ class KeyExportJob final : public CryptoJob { errors->Capture(); if (errors->empty()) { switch (status) { + case WebCryptoKeyExportStatus::OK: + UNREACHABLE(); + break; case WebCryptoKeyExportStatus::INVALID_KEY_TYPE: errors->emplace_back("Invalid key type."); break;