mirror of
https://github.com/oven-sh/bun
synced 2026-02-18 23:01:58 +00:00
Pass test-crypto-keygen-* tests (#19040)
Co-authored-by: Jarred Sumner <jarred@jarredsumner.com> Co-authored-by: Dave Caruso <me@paperdave.net>
This commit is contained in:
@@ -28,6 +28,7 @@
|
||||
#include <openssl/err.h>
|
||||
#include "ErrorCode.h"
|
||||
#include "ErrorStackTrace.h"
|
||||
#include "KeyObject.h"
|
||||
|
||||
namespace WTF {
|
||||
template<> class StringTypeAdapter<GCOwnedDataScope<StringView>, void> {
|
||||
@@ -627,6 +628,12 @@ WTF::String ERR_OUT_OF_RANGE(JSC::ThrowScope& scope, JSC::JSGlobalObject* global
|
||||
|
||||
namespace ERR {
|
||||
|
||||
EncodedJSValue INVALID_ARG_TYPE(ThrowScope& scope, JSGlobalObject* globalObject, ASCIILiteral message)
|
||||
{
|
||||
scope.throwException(globalObject, createError(globalObject, ErrorCode::ERR_INVALID_ARG_TYPE, message));
|
||||
return {};
|
||||
}
|
||||
|
||||
JSC::EncodedJSValue INVALID_ARG_TYPE(JSC::ThrowScope& throwScope, JSC::JSGlobalObject* globalObject, const WTF::String& arg_name, const WTF::String& expected_type, JSC::JSValue val_actual_value)
|
||||
{
|
||||
auto message = Message::ERR_INVALID_ARG_TYPE(throwScope, globalObject, arg_name, expected_type, val_actual_value);
|
||||
@@ -665,6 +672,22 @@ JSC::EncodedJSValue INVALID_ARG_TYPE_INSTANCE(JSC::ThrowScope& throwScope, JSC::
|
||||
return {};
|
||||
}
|
||||
|
||||
JSC::EncodedJSValue INVALID_ARG_TYPE_INSTANCE(JSC::ThrowScope& throwScope, JSC::JSGlobalObject* globalObject, WTF::ASCIILiteral arg_name, WTF::ASCIILiteral expected_instance_types, JSC::JSValue val_actual_value)
|
||||
{
|
||||
JSC::VM& vm = globalObject->vm();
|
||||
WTF::StringBuilder builder;
|
||||
builder.append("The \""_s);
|
||||
builder.append(arg_name);
|
||||
builder.append("\" argument must be an instance of "_s);
|
||||
builder.append(expected_instance_types);
|
||||
builder.append(". Received "_s);
|
||||
determineSpecificType(vm, globalObject, builder, val_actual_value);
|
||||
RETURN_IF_EXCEPTION(throwScope, {});
|
||||
|
||||
throwScope.throwException(globalObject, createError(globalObject, ErrorCode::ERR_INVALID_ARG_TYPE, builder.toString()));
|
||||
return {};
|
||||
}
|
||||
|
||||
// When you want INVALID_ARG_TYPE to say "The argument must be an instance of X. Received Y." instead of "The argument must be of type X. Received Y."
|
||||
JSC::EncodedJSValue INVALID_ARG_INSTANCE(JSC::ThrowScope& throwScope, JSC::JSGlobalObject* globalObject, const WTF::String& arg_name, const WTF::String& expected_type, JSC::JSValue val_actual_value)
|
||||
{
|
||||
@@ -780,6 +803,12 @@ JSC::EncodedJSValue OUT_OF_RANGE(JSC::ThrowScope& throwScope, JSC::JSGlobalObjec
|
||||
return {};
|
||||
}
|
||||
|
||||
JSC::EncodedJSValue OUT_OF_RANGE(JSC::ThrowScope& scope, JSC::JSGlobalObject* globalObject, ASCIILiteral message)
|
||||
{
|
||||
scope.throwException(globalObject, createError(globalObject, ErrorCode::ERR_OUT_OF_RANGE, message));
|
||||
return {};
|
||||
}
|
||||
|
||||
JSC::EncodedJSValue INVALID_ARG_VALUE(JSC::ThrowScope& throwScope, JSC::JSGlobalObject* globalObject, WTF::ASCIILiteral name, JSC::JSValue value, const WTF::String& reason)
|
||||
{
|
||||
ASCIILiteral type = String(name).contains('.') ? "property"_s : "argument"_s;
|
||||
@@ -874,7 +903,7 @@ JSC::EncodedJSValue INVALID_ARG_VALUE(JSC::ThrowScope& throwScope, JSC::JSGlobal
|
||||
return {};
|
||||
}
|
||||
|
||||
JSC::EncodedJSValue INVALID_ARG_VALUE(JSC::ThrowScope& throwScope, JSC::JSGlobalObject* globalObject, WTF::ASCIILiteral name, WTF::ASCIILiteral reason, JSC::JSValue value, const WTF::Vector<ASCIILiteral>& oneOf)
|
||||
JSC::EncodedJSValue INVALID_ARG_VALUE(JSC::ThrowScope& throwScope, JSC::JSGlobalObject* globalObject, WTF::ASCIILiteral name, WTF::ASCIILiteral reason, JSC::JSValue value, const std::span<const ASCIILiteral> oneOf)
|
||||
{
|
||||
WTF::StringBuilder builder;
|
||||
builder.append("The "_s);
|
||||
@@ -902,6 +931,32 @@ JSC::EncodedJSValue INVALID_ARG_VALUE(JSC::ThrowScope& throwScope, JSC::JSGlobal
|
||||
return {};
|
||||
}
|
||||
|
||||
JSC::EncodedJSValue INVALID_ARG_VALUE(JSC::ThrowScope& throwScope, JSC::JSGlobalObject* globalObject, WTF::ASCIILiteral name, WTF::ASCIILiteral reason, JSC::JSValue value, const std::span<const int32_t> oneOf)
|
||||
{
|
||||
WTF::StringBuilder builder;
|
||||
builder.append("The "_s);
|
||||
if (WTF::StringView(name).contains('.')) {
|
||||
builder.append("property '"_s);
|
||||
} else {
|
||||
builder.append("argument '"_s);
|
||||
}
|
||||
builder.append(name);
|
||||
builder.append("' "_s);
|
||||
builder.append(reason);
|
||||
|
||||
bool first = true;
|
||||
for (int32_t oneOfStr : oneOf) {
|
||||
if (!first) {
|
||||
builder.append(", "_s);
|
||||
}
|
||||
first = false;
|
||||
builder.append(oneOfStr);
|
||||
}
|
||||
|
||||
throwScope.throwException(globalObject, createError(globalObject, ErrorCode::ERR_INVALID_ARG_VALUE, builder.toString()));
|
||||
return {};
|
||||
}
|
||||
|
||||
JSC::EncodedJSValue INVALID_ARG_VALUE(JSC::ThrowScope& throwScope, JSC::JSGlobalObject* globalObject, const WTF::String& name, JSC::JSValue value, const WTF::String& reason)
|
||||
{
|
||||
WTF::StringBuilder builder;
|
||||
@@ -917,7 +972,7 @@ JSC::EncodedJSValue INVALID_ARG_VALUE(JSC::ThrowScope& throwScope, JSC::JSGlobal
|
||||
builder.append(reason);
|
||||
builder.append(". Received "_s);
|
||||
|
||||
JSValueToStringSafe(globalObject, builder, value);
|
||||
JSValueToStringSafe(globalObject, builder, value, true);
|
||||
RETURN_IF_EXCEPTION(throwScope, {});
|
||||
|
||||
throwScope.throwException(globalObject, createError(globalObject, ErrorCode::ERR_INVALID_ARG_VALUE, builder.toString()));
|
||||
@@ -1091,6 +1146,12 @@ JSC::EncodedJSValue CRYPTO_UNSUPPORTED_OPERATION(JSC::ThrowScope& throwScope, JS
|
||||
return {};
|
||||
}
|
||||
|
||||
JSC::EncodedJSValue CRYPTO_UNSUPPORTED_OPERATION(JSC::ThrowScope& throwScope, JSC::JSGlobalObject* globalObject)
|
||||
{
|
||||
throwScope.throwException(globalObject, createError(globalObject, ErrorCode::ERR_CRYPTO_UNSUPPORTED_OPERATION, "Unsupported crypto operation"_s));
|
||||
return {};
|
||||
}
|
||||
|
||||
JSC::EncodedJSValue CRYPTO_INVALID_KEYLEN(JSC::ThrowScope& throwScope, JSC::JSGlobalObject* globalObject)
|
||||
{
|
||||
throwScope.throwException(globalObject, createError(globalObject, ErrorCode::ERR_CRYPTO_INVALID_KEYLEN, "Invalid key length"_s));
|
||||
@@ -1154,12 +1215,36 @@ JSC::EncodedJSValue CRYPTO_JWK_UNSUPPORTED_CURVE(JSC::ThrowScope& throwScope, JS
|
||||
return {};
|
||||
}
|
||||
|
||||
JSC::EncodedJSValue CRYPTO_JWK_UNSUPPORTED_CURVE(JSC::ThrowScope& throwScope, JSC::JSGlobalObject* globalObject, ASCIILiteral message, const char* curveName)
|
||||
{
|
||||
WTF::StringBuilder builder;
|
||||
builder.append(message);
|
||||
if (curveName) {
|
||||
builder.append(std::span<const char> { curveName, strlen(curveName) });
|
||||
}
|
||||
builder.append('.');
|
||||
throwScope.throwException(globalObject, createError(globalObject, ErrorCode::ERR_CRYPTO_JWK_UNSUPPORTED_CURVE, builder.toString()));
|
||||
return {};
|
||||
}
|
||||
|
||||
JSC::EncodedJSValue CRYPTO_JWK_UNSUPPORTED_KEY_TYPE(JSC::ThrowScope& throwScope, JSC::JSGlobalObject* globalObject)
|
||||
{
|
||||
throwScope.throwException(globalObject, createError(globalObject, ErrorCode::ERR_CRYPTO_JWK_UNSUPPORTED_KEY_TYPE, "Unsupported JWK Key Type."_s));
|
||||
return {};
|
||||
}
|
||||
|
||||
JSC::EncodedJSValue CRYPTO_INVALID_JWK(JSC::ThrowScope& throwScope, JSC::JSGlobalObject* globalObject)
|
||||
{
|
||||
throwScope.throwException(globalObject, createError(globalObject, ErrorCode::ERR_CRYPTO_INVALID_JWK, "Invalid JWK data"_s));
|
||||
return {};
|
||||
}
|
||||
|
||||
JSC::EncodedJSValue CRYPTO_INVALID_JWK(JSC::ThrowScope& throwScope, JSC::JSGlobalObject* globalObject, ASCIILiteral message)
|
||||
{
|
||||
throwScope.throwException(globalObject, createError(globalObject, ErrorCode::ERR_CRYPTO_INVALID_JWK, message));
|
||||
return {};
|
||||
}
|
||||
|
||||
JSC::EncodedJSValue CRYPTO_SIGN_KEY_REQUIRED(JSC::ThrowScope& throwScope, JSC::JSGlobalObject* globalObject)
|
||||
{
|
||||
auto message = "No key provided to sign"_s;
|
||||
@@ -1180,12 +1265,36 @@ JSC::EncodedJSValue CRYPTO_INVALID_KEY_OBJECT_TYPE(JSC::ThrowScope& throwScope,
|
||||
return {};
|
||||
}
|
||||
|
||||
JSC::EncodedJSValue CRYPTO_INCOMPATIBLE_KEY_OPTIONS(JSC::ThrowScope& throwScope, JSC::JSGlobalObject* globalObject, const WTF::String& receivedKeyEncoding, const WTF::String& expectedOperation)
|
||||
JSC::EncodedJSValue CRYPTO_INVALID_KEY_OBJECT_TYPE(JSC::ThrowScope& throwScope, JSC::JSGlobalObject* globalObject, CryptoKeyType receivedType, ASCIILiteral expected)
|
||||
{
|
||||
WTF::StringBuilder builder;
|
||||
builder.append("Invalid key object type "_s);
|
||||
switch (receivedType) {
|
||||
case CryptoKeyType::Private:
|
||||
builder.append("private"_s);
|
||||
break;
|
||||
case CryptoKeyType::Public:
|
||||
builder.append("public"_s);
|
||||
break;
|
||||
case CryptoKeyType::Secret:
|
||||
builder.append("secret"_s);
|
||||
break;
|
||||
}
|
||||
builder.append(", expected "_s);
|
||||
builder.append(expected);
|
||||
builder.append('.');
|
||||
throwScope.throwException(globalObject, createError(globalObject, ErrorCode::ERR_CRYPTO_INVALID_KEY_OBJECT_TYPE, builder.toString()));
|
||||
return {};
|
||||
}
|
||||
|
||||
JSC::EncodedJSValue CRYPTO_INCOMPATIBLE_KEY_OPTIONS(JSC::ThrowScope& throwScope, JSC::JSGlobalObject* globalObject, const WTF::StringView& receivedKeyEncoding, const WTF::String& expectedOperation)
|
||||
{
|
||||
WTF::StringBuilder builder;
|
||||
builder.append("The selected key encoding "_s);
|
||||
builder.append(receivedKeyEncoding);
|
||||
builder.append(" does not support "_s);
|
||||
builder.append(' ');
|
||||
builder.append(expectedOperation);
|
||||
builder.append('.');
|
||||
throwScope.throwException(globalObject, createError(globalObject, ErrorCode::ERR_CRYPTO_INCOMPATIBLE_KEY_OPTIONS, builder.toString()));
|
||||
return {};
|
||||
}
|
||||
@@ -1199,6 +1308,15 @@ JSC::EncodedJSValue CRYPTO_INVALID_DIGEST(JSC::ThrowScope& throwScope, JSC::JSGl
|
||||
return {};
|
||||
}
|
||||
|
||||
JSC::EncodedJSValue CRYPTO_INVALID_DIGEST(JSC::ThrowScope& throwScope, JSC::JSGlobalObject* globalObject, ASCIILiteral message, const WTF::StringView& digest)
|
||||
{
|
||||
WTF::StringBuilder builder;
|
||||
builder.append(message);
|
||||
builder.append(digest);
|
||||
throwScope.throwException(globalObject, createError(globalObject, ErrorCode::ERR_CRYPTO_INVALID_DIGEST, builder.toString()));
|
||||
return {};
|
||||
}
|
||||
|
||||
JSC::EncodedJSValue CRYPTO_HASH_FINALIZED(JSC::ThrowScope& throwScope, JSC::JSGlobalObject* globalObject)
|
||||
{
|
||||
throwScope.throwException(globalObject, createError(globalObject, ErrorCode::ERR_CRYPTO_HASH_FINALIZED, "Digest already called"_s));
|
||||
@@ -1225,12 +1343,53 @@ JSC::EncodedJSValue CRYPTO_UNKNOWN_DH_GROUP(JSC::ThrowScope& scope, JSGlobalObje
|
||||
return {};
|
||||
}
|
||||
|
||||
JSC::EncodedJSValue OSSL_EVP_INVALID_DIGEST(JSC::ThrowScope& scope, JSC::JSGlobalObject* globalObject)
|
||||
{
|
||||
scope.throwException(globalObject, createError(globalObject, ErrorCode::ERR_OSSL_EVP_INVALID_DIGEST, "Invalid digest used"_s));
|
||||
return {};
|
||||
}
|
||||
|
||||
JSC::EncodedJSValue MISSING_PASSPHRASE(JSC::ThrowScope& throwScope, JSC::JSGlobalObject* globalObject, WTF::ASCIILiteral message)
|
||||
{
|
||||
throwScope.throwException(globalObject, createError(globalObject, ErrorCode::ERR_MISSING_PASSPHRASE, message));
|
||||
return {};
|
||||
}
|
||||
|
||||
JSC::EncodedJSValue KEY_GENERATION_JOB_FAILED(JSC::ThrowScope& throwScope, JSC::JSGlobalObject* globalObject)
|
||||
{
|
||||
auto message = "Key generation job failed"_s;
|
||||
throwScope.throwException(globalObject, createError(globalObject, ErrorCode::ERR_KEY_GENERATION_JOB_FAILED, message));
|
||||
return {};
|
||||
}
|
||||
|
||||
JSC::EncodedJSValue INCOMPATIBLE_OPTION_PAIR(JSC::ThrowScope& throwScope, JSC::JSGlobalObject* globalObject, ASCIILiteral opt1, ASCIILiteral opt2)
|
||||
{
|
||||
WTF::StringBuilder builder;
|
||||
builder.append("Option \""_s);
|
||||
builder.append(opt1);
|
||||
builder.append("\" cannot be used in combination with option \""_s);
|
||||
builder.append(opt2);
|
||||
builder.append("\""_s);
|
||||
|
||||
throwScope.throwException(globalObject, createError(globalObject, ErrorCode::ERR_INCOMPATIBLE_OPTION_PAIR, builder.toString()));
|
||||
return {};
|
||||
}
|
||||
|
||||
JSC::EncodedJSValue MISSING_OPTION(JSC::ThrowScope& scope, JSC::JSGlobalObject* globalObject, ASCIILiteral message)
|
||||
{
|
||||
WTF::StringBuilder builder;
|
||||
builder.append(message);
|
||||
builder.append(" is required"_s);
|
||||
scope.throwException(globalObject, createError(globalObject, ErrorCode::ERR_MISSING_OPTION, builder.toString()));
|
||||
return {};
|
||||
}
|
||||
|
||||
EncodedJSValue CLOSED_MESSAGE_PORT(ThrowScope& scope, JSGlobalObject* globalObject)
|
||||
{
|
||||
scope.throwException(globalObject, createError(globalObject, ErrorCode::ERR_CLOSED_MESSAGE_PORT, "Cannot send data on closed MessagePort"_s));
|
||||
return {};
|
||||
}
|
||||
|
||||
} // namespace ERR
|
||||
|
||||
static JSC::JSValue ERR_INVALID_ARG_TYPE(JSC::ThrowScope& scope, JSC::JSGlobalObject* globalObject, JSValue arg0, JSValue arg1, JSValue arg2)
|
||||
|
||||
Reference in New Issue
Block a user