static void njs_webcrypto_cleanup_pkey(void *data);
static njs_webcrypto_key_format_t njs_key_format(njs_vm_t *vm,
- njs_value_t *value, njs_str_t *format);
+ njs_value_t *value);
static njs_int_t njs_key_usage(njs_vm_t *vm, njs_value_t *value,
unsigned *mask);
static njs_webcrypto_algorithm_t *njs_key_algorithm(njs_vm_t *vm,
unsigned usage;
EVP_PKEY *pkey;
njs_int_t ret;
- njs_str_t key_data, format;
+ njs_str_t key_data;
njs_value_t value, *options;
const u_char *start;
#if (OPENSSL_VERSION_NUMBER < 0x30000000L)
pkey = NULL;
- fmt = njs_key_format(vm, njs_arg(args, nargs, 1), &format);
+ fmt = njs_key_format(vm, njs_arg(args, nargs, 1));
if (njs_slow_path(fmt == NJS_KEY_FORMAT_UNKNOWN)) {
- njs_type_error(vm, "unknown key format: \"%V\"", &format);
goto fail;
}
break;
default:
- njs_internal_error(vm, "not implemented key format: \"%V\"", &format);
+ njs_internal_error(vm, "not implemented key format: \"jwk\"");
goto fail;
}
static njs_webcrypto_key_format_t
-njs_key_format(njs_vm_t *vm, njs_value_t *value, njs_str_t *format)
+njs_key_format(njs_vm_t *vm, njs_value_t *value)
{
njs_int_t ret;
+ njs_str_t format;
njs_uint_t fmt;
njs_value_t string;
ret = njs_value_to_string(vm, &string, value);
if (njs_slow_path(ret != NJS_OK)) {
- return NJS_ERROR;
+ goto fail;
}
- njs_string_get(&string, format);
+ njs_string_get(&string, &format);
fmt = 0;
while (fmt < sizeof(formats) / sizeof(formats[0])) {
- if (njs_strstr_eq(format, &formats[fmt].name)) {
+ if (njs_strstr_eq(&format, &formats[fmt].name)) {
return formats[fmt].value;
}
fmt++;
}
+fail:
+
+ njs_type_error(vm, "unknown key format: \"%V\"", &format);
+
return NJS_KEY_FORMAT_UNKNOWN;
}