diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/crypto-mbedtls.c | 19 | ||||
-rw-r--r-- | lib/ubus.c | 12 |
2 files changed, 18 insertions, 13 deletions
diff --git a/lib/crypto-mbedtls.c b/lib/crypto-mbedtls.c index 3fa4cfd..31b57f8 100644 --- a/lib/crypto-mbedtls.c +++ b/lib/crypto-mbedtls.c @@ -44,6 +44,15 @@ static mbedtls_entropy_context entropy; static void __attribute__((constructor)) load(); static void __attribute__((destructor)) unload(); +static void raise_mbedtls_exception(uc_vm_t *vm, int errnum, const char *msg) +{ + char buf[120] = ""; + + mbedtls_strerror(errnum, buf, sizeof(buf)); + uc_vm_raise_exception(vm, EXCEPTION_RUNTIME, msg, buf); +} + + static uc_value_t * md_digest(uc_vm_t *vm, size_t nargs) { @@ -268,9 +277,7 @@ pk_set_public_key(uc_vm_t *vm, size_t nargs) int err = mbedtls_pk_parse_public_key(&ctx->pk, (const unsigned char*)ucv_string_get(key), ucv_string_length(key)); if (err) - uc_vm_raise_exception(vm, EXCEPTION_RUNTIME, "not a valid DER key %s: %s", - mbedtls_high_level_strerr(err), - mbedtls_low_level_strerr(err)); + raise_mbedtls_exception(vm, err, "not a valid DER key %s"); return NULL; } @@ -316,7 +323,7 @@ pk_sign(uc_vm_t *vm, size_t nargs) size_t sig_len = sizeof(sig); if (mbedtls_pk_sign(&ctx->pk, md_type, hash, hash_len, - sig, &sig_len, + sig, sig_len, &sig_len, mbedtls_ctr_drbg_random, &ctx->ctr_drbg)) { uc_vm_raise_exception(vm, EXCEPTION_TYPE, "pk sign failed"); return NULL; @@ -376,9 +383,7 @@ pk_verify(uc_vm_t *vm, size_t nargs) hash, hash_size, (const unsigned char*)ucv_string_get(sig), ucv_string_length(sig)); if (err) { - uc_vm_raise_exception(vm, EXCEPTION_RUNTIME, "validation failed: %s: %s", - mbedtls_high_level_strerr(err), - mbedtls_low_level_strerr(err)); + raise_mbedtls_exception(vm, err, "validation failed: %s"); return FALSE; } @@ -1001,12 +1001,6 @@ uc_ubus_defer(uc_vm_t *vm, size_t nargs) conn_get(vm, &c); - rv = ubus_lookup_id(&c->ctx, ucv_string_get(objname), &id); - - if (rv != UBUS_STATUS_OK) - err_return(rv, "Failed to resolve object name '%s'", - ucv_string_get(objname)); - args_get_named(vm, nargs, "object", UC_STRING, REQUIRED, &objname, "method", UC_STRING, REQUIRED, &funname, @@ -1016,6 +1010,12 @@ uc_ubus_defer(uc_vm_t *vm, size_t nargs) "fd", 0, NAMED, &fd, "fd_cb", UC_CLOSURE, NAMED, &fdcb); + rv = ubus_lookup_id(&c->ctx, ucv_string_get(objname), &id); + + if (rv != UBUS_STATUS_OK) + err_return(rv, "Failed to resolve object name '%s'", + ucv_string_get(objname)); + rv = uc_ubus_defer_common(vm, c, &res, id, funname, funargs, fd, fdcb, replycb, datacb); if (rv != UBUS_STATUS_OK) |