mirror of
https://github.com/oven-sh/bun
synced 2026-02-18 06:41:50 +00:00
node:crypto: move Sign and Verify to c++ (#17692)
Co-authored-by: Jarred Sumner <jarred@jarredsumner.com>
This commit is contained in:
@@ -637,6 +637,23 @@ JSC::EncodedJSValue INVALID_ARG_TYPE(JSC::ThrowScope& throwScope, JSC::JSGlobalO
|
||||
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)
|
||||
{
|
||||
auto& vm = JSC::getVM(globalObject);
|
||||
WTF::StringBuilder builder;
|
||||
builder.append("The \""_s);
|
||||
builder.append(arg_name);
|
||||
builder.append("\" argument must be an instance of "_s);
|
||||
builder.append(expected_type);
|
||||
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 {};
|
||||
}
|
||||
|
||||
JSC::EncodedJSValue OUT_OF_RANGE(JSC::ThrowScope& throwScope, JSC::JSGlobalObject* globalObject, const WTF::String& arg_name, double lower, double upper, JSC::JSValue actual)
|
||||
{
|
||||
WTF::StringBuilder builder;
|
||||
@@ -789,6 +806,93 @@ JSC::EncodedJSValue INVALID_ARG_VALUE(JSC::ThrowScope& throwScope, JSC::JSGlobal
|
||||
return {};
|
||||
}
|
||||
|
||||
// for validateOneOf
|
||||
JSC::EncodedJSValue INVALID_ARG_VALUE(JSC::ThrowScope& throwScope, JSC::JSGlobalObject* globalObject, JSC::JSValue name, JSC::JSValue value, WTF::ASCIILiteral reason, JSC::JSArray* oneOf)
|
||||
{
|
||||
WTF::StringBuilder builder;
|
||||
builder.append("The argument '"_s);
|
||||
JSValueToStringSafe(globalObject, builder, name);
|
||||
RETURN_IF_EXCEPTION(throwScope, {});
|
||||
|
||||
builder.append("' "_s);
|
||||
builder.append(reason);
|
||||
unsigned length = oneOf->length();
|
||||
for (size_t i = 0; i < length; i++) {
|
||||
JSValue index = oneOf->getIndex(globalObject, i);
|
||||
RETURN_IF_EXCEPTION(throwScope, {});
|
||||
if (index.isString()) {
|
||||
JSString* str = index.toString(globalObject);
|
||||
RETURN_IF_EXCEPTION(throwScope, {});
|
||||
builder.append('\'');
|
||||
builder.append(str->view(globalObject));
|
||||
builder.append('\'');
|
||||
} else {
|
||||
JSValueToStringSafe(globalObject, builder, index);
|
||||
RETURN_IF_EXCEPTION(throwScope, {});
|
||||
}
|
||||
|
||||
if (i < length - 1) {
|
||||
builder.append(", "_s);
|
||||
}
|
||||
}
|
||||
builder.append(". Received "_s);
|
||||
JSValueToStringSafe(globalObject, builder, value, true);
|
||||
RETURN_IF_EXCEPTION(throwScope, {});
|
||||
|
||||
throwScope.throwException(globalObject, createError(globalObject, ErrorCode::ERR_INVALID_ARG_VALUE, builder.toString()));
|
||||
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)
|
||||
{
|
||||
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 (ASCIILiteral oneOfStr : oneOf) {
|
||||
if (!first) {
|
||||
builder.append(", "_s);
|
||||
}
|
||||
first = false;
|
||||
builder.append('`');
|
||||
builder.append(oneOfStr);
|
||||
builder.append('`');
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
builder.append("The "_s);
|
||||
if (name.contains('.')) {
|
||||
builder.append("property '"_s);
|
||||
} else {
|
||||
builder.append("argument '"_s);
|
||||
}
|
||||
builder.append(name);
|
||||
builder.append("' "_s);
|
||||
builder.append(reason);
|
||||
builder.append(". Received "_s);
|
||||
|
||||
JSValueToStringSafe(globalObject, builder, value);
|
||||
RETURN_IF_EXCEPTION(throwScope, {});
|
||||
|
||||
throwScope.throwException(globalObject, createError(globalObject, ErrorCode::ERR_INVALID_ARG_VALUE, builder.toString()));
|
||||
return {};
|
||||
}
|
||||
|
||||
JSC::EncodedJSValue INVALID_URL_SCHEME(JSC::ThrowScope& throwScope, JSC::JSGlobalObject* globalObject, const WTF::String& expectedScheme)
|
||||
{
|
||||
auto message = makeString("The URL must be of scheme "_s, expectedScheme);
|
||||
@@ -911,6 +1015,57 @@ JSC::EncodedJSValue CRYPTO_JWK_UNSUPPORTED_CURVE(JSC::ThrowScope& throwScope, JS
|
||||
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_SIGN_KEY_REQUIRED(JSC::ThrowScope& throwScope, JSC::JSGlobalObject* globalObject)
|
||||
{
|
||||
auto message = "No key provided to sign"_s;
|
||||
throwScope.throwException(globalObject, createError(globalObject, ErrorCode::ERR_CRYPTO_SIGN_KEY_REQUIRED, message));
|
||||
return {};
|
||||
}
|
||||
|
||||
JSC::EncodedJSValue CRYPTO_INVALID_KEY_OBJECT_TYPE(JSC::ThrowScope& throwScope, JSC::JSGlobalObject* globalObject, JSValue received, WTF::ASCIILiteral expected)
|
||||
{
|
||||
WTF::StringBuilder builder;
|
||||
builder.append("Invalid key object type "_s);
|
||||
JSValueToStringSafe(globalObject, builder, received);
|
||||
RETURN_IF_EXCEPTION(throwScope, {});
|
||||
|
||||
builder.append(". Expected "_s);
|
||||
builder.append(expected);
|
||||
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::String& receivedKeyEncoding, const WTF::String& expectedOperation)
|
||||
{
|
||||
WTF::StringBuilder builder;
|
||||
builder.append("The selected key encoding "_s);
|
||||
builder.append(receivedKeyEncoding);
|
||||
builder.append(" does not support "_s);
|
||||
throwScope.throwException(globalObject, createError(globalObject, ErrorCode::ERR_CRYPTO_INCOMPATIBLE_KEY_OPTIONS, builder.toString()));
|
||||
return {};
|
||||
}
|
||||
|
||||
JSC::EncodedJSValue CRYPTO_INVALID_DIGEST(JSC::ThrowScope& throwScope, JSC::JSGlobalObject* globalObject, const WTF::String& digest)
|
||||
{
|
||||
WTF::StringBuilder builder;
|
||||
builder.append("Invalid digest: "_s);
|
||||
builder.append(digest);
|
||||
throwScope.throwException(globalObject, createError(globalObject, ErrorCode::ERR_CRYPTO_INVALID_DIGEST, builder.toString()));
|
||||
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 {};
|
||||
}
|
||||
|
||||
} // 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