Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
src,crypto: avoid tristate Maybe<bool> in ExportJWKEcKey()
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 and danielleadams committed Apr 24, 2022
1 parent 3cc06de commit bf1f485
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
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
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
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 bf1f485

Please sign in to comment.