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 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.