Skip to content

Commit 33180fa

Browse files
RaisinTendanielleadams
authored andcommitted
crypto: add separate error for INVALID_KEY_TYPE
PR-URL: #37555 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: James M Snell <jasnell@gmail.com>
1 parent 05badcf commit 33180fa

File tree

2 files changed

+48
-34
lines changed

2 files changed

+48
-34
lines changed

src/crypto/crypto_cipher.h

+25-18
Original file line numberDiff line numberDiff line change
@@ -215,24 +215,31 @@ class CipherJob final : public CryptoJob<CipherTraits> {
215215
WebCryptoCipherMode cipher_mode() const { return cipher_mode_; }
216216

217217
void DoThreadPoolWork() override {
218-
switch (CipherTraits::DoCipher(
219-
AsyncWrap::env(),
220-
key(),
221-
cipher_mode_,
222-
*CryptoJob<CipherTraits>::params(),
223-
in_,
224-
&out_)) {
225-
case WebCryptoCipherStatus::OK:
226-
// Success!
227-
break;
228-
case WebCryptoCipherStatus::INVALID_KEY_TYPE:
229-
// Fall through
230-
// TODO(@jasnell): Separate error for this
231-
case WebCryptoCipherStatus::FAILED: {
232-
CryptoErrorVector* errors = CryptoJob<CipherTraits>::errors();
233-
errors->Capture();
234-
if (errors->empty())
235-
errors->push_back(std::string("Cipher job failed."));
218+
const WebCryptoCipherStatus status =
219+
CipherTraits::DoCipher(
220+
AsyncWrap::env(),
221+
key(),
222+
cipher_mode_,
223+
*CryptoJob<CipherTraits>::params(),
224+
in_,
225+
&out_);
226+
if (status == WebCryptoCipherStatus::OK) {
227+
// Success!
228+
return;
229+
}
230+
CryptoErrorVector* errors = CryptoJob<CipherTraits>::errors();
231+
errors->Capture();
232+
if (errors->empty()) {
233+
switch (status) {
234+
case WebCryptoCipherStatus::OK:
235+
UNREACHABLE();
236+
break;
237+
case WebCryptoCipherStatus::INVALID_KEY_TYPE:
238+
errors->emplace_back("Invalid key type.");
239+
break;
240+
case WebCryptoCipherStatus::FAILED:
241+
errors->emplace_back("Cipher job failed.");
242+
break;
236243
}
237244
}
238245
}

src/crypto/crypto_keys.h

+23-16
Original file line numberDiff line numberDiff line change
@@ -337,22 +337,29 @@ class KeyExportJob final : public CryptoJob<KeyExportTraits> {
337337
WebCryptoKeyFormat format() const { return format_; }
338338

339339
void DoThreadPoolWork() override {
340-
switch (KeyExportTraits::DoExport(
341-
key_,
342-
format_,
343-
*CryptoJob<KeyExportTraits>::params(),
344-
&out_)) {
345-
case WebCryptoKeyExportStatus::OK:
346-
// Success!
347-
break;
348-
case WebCryptoKeyExportStatus::INVALID_KEY_TYPE:
349-
// Fall through
350-
// TODO(@jasnell): Separate error for this
351-
case WebCryptoKeyExportStatus::FAILED: {
352-
CryptoErrorVector* errors = CryptoJob<KeyExportTraits>::errors();
353-
errors->Capture();
354-
if (errors->empty())
355-
errors->push_back("Key export failed.");
340+
const WebCryptoKeyExportStatus status =
341+
KeyExportTraits::DoExport(
342+
key_,
343+
format_,
344+
*CryptoJob<KeyExportTraits>::params(),
345+
&out_);
346+
if (status == WebCryptoKeyExportStatus::OK) {
347+
// Success!
348+
return;
349+
}
350+
CryptoErrorVector* errors = CryptoJob<KeyExportTraits>::errors();
351+
errors->Capture();
352+
if (errors->empty()) {
353+
switch (status) {
354+
case WebCryptoKeyExportStatus::OK:
355+
UNREACHABLE();
356+
break;
357+
case WebCryptoKeyExportStatus::INVALID_KEY_TYPE:
358+
errors->emplace_back("Invalid key type.");
359+
break;
360+
case WebCryptoKeyExportStatus::FAILED:
361+
errors->emplace_back("Cipher job failed.");
362+
break;
356363
}
357364
}
358365
}

0 commit comments

Comments
 (0)