Skip to content

Commit

Permalink
src,crypto: avoid tristate Maybe<bool> in ExportJWKEcKey()
Browse files Browse the repository at this point in the history
The function currently uses the return value to convey whether an
exception was thrown while it was running by using either Just(true) or
Nothing<bool>(). Unfortunately, Maybe<bool> also has a third state -
Just(false), which doesn't make any sense here. So this change avoids
the possibility of a tristate return value by making use of Maybe<void>
which only has two valid states - JustVoid() / Nothing<void>(), which
fits right in.

Signed-off-by: Darshan Sen <raisinten@gmail.com>

PR-URL: #42223
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: James M Snell <jasnell@gmail.com>
  • Loading branch information
RaisinTen authored Mar 8, 2022
1 parent 4d70dc7 commit 6b004f1
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 9 deletions.
15 changes: 8 additions & 7 deletions src/crypto/crypto_ec.cc
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ using v8::FunctionCallbackInfo;
using v8::FunctionTemplate;
using v8::Int32;
using v8::Just;
using v8::JustVoid;
using v8::Local;
using v8::Maybe;
using v8::Nothing;
Expand Down Expand Up @@ -711,7 +712,7 @@ WebCryptoKeyExportStatus ECKeyExportTraits::DoExport(
}
}

Maybe<bool> ExportJWKEcKey(
Maybe<void> ExportJWKEcKey(
Environment* env,
std::shared_ptr<KeyObjectData> key,
Local<Object> target) {
Expand All @@ -738,7 +739,7 @@ Maybe<bool> ExportJWKEcKey(
env->context(),
env->jwk_kty_string(),
env->jwk_ec_string()).IsNothing()) {
return Nothing<bool>();
return Nothing<void>();
}

if (SetEncodedValue(
Expand All @@ -753,7 +754,7 @@ Maybe<bool> ExportJWKEcKey(
env->jwk_y_string(),
y.get(),
degree_bytes).IsNothing()) {
return Nothing<bool>();
return Nothing<void>();
}

Local<String> crv_name;
Expand All @@ -774,14 +775,14 @@ Maybe<bool> ExportJWKEcKey(
default: {
THROW_ERR_CRYPTO_JWK_UNSUPPORTED_CURVE(
env, "Unsupported JWK EC curve: %s.", OBJ_nid2sn(nid));
return Nothing<bool>();
return Nothing<void>();
}
}
if (target->Set(
env->context(),
env->jwk_crv_string(),
crv_name).IsNothing()) {
return Nothing<bool>();
return Nothing<void>();
}

if (key->GetKeyType() == kKeyTypePrivate) {
Expand All @@ -791,10 +792,10 @@ Maybe<bool> ExportJWKEcKey(
target,
env->jwk_d_string(),
pvt,
degree_bytes);
degree_bytes).IsJust() ? JustVoid() : Nothing<void>();
}

return Just(true);
return JustVoid();
}

Maybe<bool> ExportJWKEdKey(
Expand Down
2 changes: 1 addition & 1 deletion src/crypto/crypto_ec.h
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@ struct ECKeyExportTraits final {

using ECKeyExportJob = KeyExportJob<ECKeyExportTraits>;

v8::Maybe<bool> ExportJWKEcKey(
v8::Maybe<void> ExportJWKEcKey(
Environment* env,
std::shared_ptr<KeyObjectData> key,
v8::Local<v8::Object> target);
Expand Down
3 changes: 2 additions & 1 deletion src/crypto/crypto_keys.cc
Original file line number Diff line number Diff line change
Expand Up @@ -497,7 +497,8 @@ Maybe<bool> ExportJWKAsymmetricKey(
break;
}
case EVP_PKEY_RSA: return ExportJWKRsaKey(env, key, target);
case EVP_PKEY_EC: return ExportJWKEcKey(env, key, target);
case EVP_PKEY_EC: return ExportJWKEcKey(env, key, target).IsJust() ?
Just(true) : Nothing<bool>();
case EVP_PKEY_ED25519:
// Fall through
case EVP_PKEY_ED448:
Expand Down

0 comments on commit 6b004f1

Please sign in to comment.