From 421b362d8088bc75376e2d80262c28b06013acc0 Mon Sep 17 00:00:00 2001 From: zxz*3 Date: Tue, 3 Dec 2024 21:55:57 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8B=86=E5=88=86ECC=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E5=B7=A5=E5=85=B7=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zxz*3 --- frameworks/js/napi/crypto/inc/napi_utils.h | 3 - .../js/napi/crypto/src/napi_dh_key_util.cpp | 105 +++++ .../js/napi/crypto/src/napi_ecc_key_util.cpp | 289 +++++++++++++ frameworks/js/napi/crypto/src/napi_utils.cpp | 391 ------------------ 4 files changed, 394 insertions(+), 394 deletions(-) diff --git a/frameworks/js/napi/crypto/inc/napi_utils.h b/frameworks/js/napi/crypto/inc/napi_utils.h index 2858380..3adf266 100644 --- a/frameworks/js/napi/crypto/inc/napi_utils.h +++ b/frameworks/js/napi/crypto/inc/napi_utils.h @@ -63,9 +63,6 @@ napi_value ConvertObjectBlobToNapiValue(napi_env env, HcfBlob *blob); bool GetAsyKeySpecFromNapiValue(napi_env env, napi_value arg, HcfAsyKeyParamsSpec **asyKeySpec); bool BuildSetNamedProperty(napi_env env, HcfBigInteger *number, const char *name, napi_value *intence); napi_value ConvertBigIntToNapiValue(napi_env env, HcfBigInteger *blob); -napi_value ConvertEccCommParamsSpecToNapiValue(napi_env env, HcfEccCommParamsSpec *blob); -napi_value ConvertDhCommParamsSpecToNapiValue(napi_env env, HcfDhCommParamsSpec *blob); -napi_value ConvertEccPointToNapiValue(napi_env env, HcfPoint *p); bool GetPointFromNapiValue(napi_env env, napi_value arg, HcfPoint *point); bool GetStringFromJSParams(napi_env env, napi_value arg, std::string &returnStr); diff --git a/frameworks/js/napi/crypto/src/napi_dh_key_util.cpp b/frameworks/js/napi/crypto/src/napi_dh_key_util.cpp index 7174c1d..7009123 100644 --- a/frameworks/js/napi/crypto/src/napi_dh_key_util.cpp +++ b/frameworks/js/napi/crypto/src/napi_dh_key_util.cpp @@ -23,6 +23,7 @@ #include "napi_key_pair.h" #include "napi_pri_key.h" #include "napi_pub_key.h" +#include "utils.h" namespace OHOS { namespace CryptoFramework { @@ -30,6 +31,110 @@ NapiDHKeyUtil::NapiDHKeyUtil() {} NapiDHKeyUtil::~NapiDHKeyUtil() {} + +static bool BuildDhInstanceToNapiValueSub(napi_env env, HcfDhCommParamsSpec *blob, napi_value *instance) +{ + if (!BuildSetNamedProperty(env, &(blob->p), "p", instance)) { + LOGE("build setNamedProperty a failed!"); + return false; + } + if (!BuildSetNamedProperty(env, &(blob->g), "g", instance)) { + LOGE("build setNamedProperty b failed!"); + return false; + } + napi_value length; + napi_status status = napi_create_int32(env, blob->length, &length); + if (status != napi_ok) { + LOGE("create length number failed!"); + return false; + } + status = napi_set_named_property(env, *instance, "l", length); + if (status != napi_ok) { + LOGE("create length number failed!"); + return false; + } + return true; +} + +static bool BuildDhInstanceToNapiValue(napi_env env, HcfDhCommParamsSpec *blob, napi_value *instance) +{ + napi_value algName; + size_t algNameLength = HcfStrlen(blob->base.algName); + if (!algNameLength) { + LOGE("algName is empty!"); + return false; + } + napi_status status = napi_create_string_utf8(env, blob->base.algName, algNameLength, &algName); + if (status != napi_ok) { + LOGE("create algName failed!"); + return false; + } + napi_value specType; + status = napi_create_uint32(env, blob->base.specType, &specType); + if (status != napi_ok) { + LOGE("create uint32 failed!"); + return false; + } + status = napi_set_named_property(env, *instance, "algName", algName); + if (status != napi_ok) { + LOGE("create set algName failed!"); + return false; + } + status = napi_set_named_property(env, *instance, "specType", specType); + if (status != napi_ok) { + LOGE("create set specType failed!"); + return false; + } + if (!BuildDhInstanceToNapiValueSub(env, blob, instance)) { + LOGE("create intance parter napi value failed!"); + return false; + } + return true; +} + +static bool CheckDhCommonParamSpec(napi_env env, HcfDhCommParamsSpec *blob) +{ + if (blob == nullptr) { + LOGE("Invalid blob!"); + return false; + } + if (blob->base.algName == nullptr) { + LOGE("Invalid blob algName!"); + return false; + } + if (blob->p.data == nullptr || blob->p.len == 0) { + LOGE("Invalid blob a!"); + return false; + } + if (blob->g.data == nullptr || blob->g.len == 0) { + LOGE("Invalid blob point x!"); + return false; + } + return true; +} + +static ConvertDhCommParamsSpecToNapiValue(napi_env env, HcfDhCommParamsSpec *blob) +{ + if (!CheckDhCommonParamSpec(env, blob)) { + napi_throw(env, GenerateBusinessError(env, HCF_INVALID_PARAMS, "Invalid blob!")); + LOGE("Invalid blob!"); + return NapiGetNull(env); + } + napi_value instance; + napi_status status = napi_create_object(env, &instance); + if (status != napi_ok) { + napi_throw(env, GenerateBusinessError(env, HCF_INVALID_PARAMS, "create object failed!")); + LOGE("create object failed!"); + return NapiGetNull(env); + } + if (!BuildDhInstanceToNapiValue(env, blob, &instance)) { + napi_throw(env, GenerateBusinessError(env, HCF_INVALID_PARAMS, "build object failed!")); + LOGE("Build object failed!"); + return NapiGetNull(env); + } + return instance; +} + napi_value NapiDHKeyUtil::JsGenDHCommonParamsSpec(napi_env env, napi_callback_info info) { size_t expectedArgc = PARAMS_NUM_TWO; diff --git a/frameworks/js/napi/crypto/src/napi_ecc_key_util.cpp b/frameworks/js/napi/crypto/src/napi_ecc_key_util.cpp index 0cd9cee..1285cb5 100644 --- a/frameworks/js/napi/crypto/src/napi_ecc_key_util.cpp +++ b/frameworks/js/napi/crypto/src/napi_ecc_key_util.cpp @@ -24,6 +24,7 @@ #include "napi_key_pair.h" #include "napi_pri_key.h" #include "napi_pub_key.h" +#include "utils.h" namespace OHOS { namespace CryptoFramework { @@ -31,6 +32,294 @@ NapiECCKeyUtil::NapiECCKeyUtil() {} NapiECCKeyUtil::~NapiECCKeyUtil() {} +static bool CheckEccCommonParamSpecBase(napi_env env, HcfEccCommParamsSpec *blob) +{ + if (blob->a.data == nullptr || blob->a.len == 0) { + LOGE("Invalid blob a!"); + return false; + } + if (blob->b.data == nullptr || blob->b.len == 0) { + LOGE("Invalid blob b!"); + return false; + } + if (blob->n.data == nullptr || blob->n.len == 0) { + LOGE("Invalid blob n!"); + return false; + } + return true; +} + +static bool CheckEccCommonParamSpec(napi_env env, HcfEccCommParamsSpec *blob) +{ + if (blob == nullptr) { + LOGE("Invalid blob!"); + return false; + } + if (!CheckEccCommonParamSpecBase(env, blob)) { + LOGE("Invalid blob ecc commonParamSpec base!"); + return false; + } + if (blob->base.algName == nullptr) { + LOGE("Invalid blob algName!"); + return false; + } + if (blob->field == nullptr) { + LOGE("Invalid blob field!"); + return false; + } + if (blob->field->fieldType == nullptr) { + LOGE("Invalid blob fieldType!"); + return false; + } + if (blob->g.x.data == nullptr || blob->g.x.len == 0) { + LOGE("Invalid blob point x!"); + return false; + } + if (blob->g.y.data == nullptr || blob->g.y.len == 0) { + LOGE("Invalid blob point y!"); + return false; + } + HcfECFieldFp *tmpField = reinterpret_cast(blob->field); + if (tmpField->p.data == nullptr || tmpField->p.len == 0) { + LOGE("Invalid blob p!"); + return false; + } + return true; +} + +static napi_value ConvertEccCommonParamFieldFpToNapiValue(napi_env env, HcfEccCommParamsSpec *blob) +{ + napi_value fieldFp; + napi_value fieldType; + napi_status status = napi_create_object(env, &fieldFp); + if (status != napi_ok) { + LOGE("create fieldFp failed!"); + return NapiGetNull(env); + } + size_t fieldTypeLength = HcfStrlen(blob->field->fieldType); + if (!fieldTypeLength) { + LOGE("fieldType is empty!"); + return NapiGetNull(env); + } + status = napi_create_string_utf8(env, blob->field->fieldType, fieldTypeLength, &fieldType); + if (status != napi_ok) { + LOGE("create object failed!"); + return NapiGetNull(env); + } + status = napi_set_named_property(env, fieldFp, "fieldType", fieldType); + if (status != napi_ok) { + LOGE("create object failed!"); + return NapiGetNull(env); + } + HcfECFieldFp *tmpField = reinterpret_cast(blob->field); + napi_value p = ConvertBigIntToNapiValue(env, &(tmpField->p)); + if (p == nullptr) { + LOGE("p is null!"); + return NapiGetNull(env); + } + status = napi_set_named_property(env, fieldFp, "p", p); + if (status != napi_ok) { + LOGE("create object failed!"); + return NapiGetNull(env); + } + return fieldFp; +} + +static bool IsNapiNull(napi_env env, napi_value value) +{ + napi_valuetype valueType; + napi_typeof(env, value, &valueType); + return (valueType == napi_null); +} + +static ConvertEccPointToNapiValue(napi_env env, HcfPoint *p) +{ + if (p == nullptr) { + LOGE("Invalid point data!"); + napi_throw(env, GenerateBusinessError(env, HCF_INVALID_PARAMS, "Invalid point data!")); + return nullptr; + } + + napi_value point; + napi_status status = napi_create_object(env, &point); + if (status != napi_ok) { + LOGE("create object failed!"); + napi_throw(env, GenerateBusinessError(env, HCF_ERR_MALLOC, "create object failed!")); + return nullptr; + } + + napi_value x = ConvertBigIntToNapiValue(env, &(p->x)); + if (x == nullptr || IsNapiNull(env, x)) { + LOGE("Failed to convert x to NapiValue!"); + return nullptr; + } + + napi_value y = ConvertBigIntToNapiValue(env, &(p->y)); + if (y == nullptr || IsNapiNull(env, y)) { + LOGE("Failed to convert y to NapiValue!"); + return nullptr; + } + + status = napi_set_named_property(env, point, "x", x); + if (status != napi_ok) { + LOGE("set x property failed!"); + napi_throw(env, GenerateBusinessError(env, HCF_INVALID_PARAMS, "set x property failed!")); + return nullptr; + } + + status = napi_set_named_property(env, point, "y", y); + if (status != napi_ok) { + LOGE("set y property failed!"); + napi_throw(env, GenerateBusinessError(env, HCF_INVALID_PARAMS, "set y property failed!")); + return nullptr; + } + + return point; +} + +static napi_value ConvertEccCommonParamPointToNapiValue(napi_env env, HcfEccCommParamsSpec *blob) +{ + napi_value point; + napi_status status = napi_create_object(env, &point); + if (status != napi_ok) { + LOGE("create object failed!"); + return NapiGetNull(env); + } + napi_value x = ConvertBigIntToNapiValue(env, &(blob->g.x)); + if (x == nullptr) { + LOGE("x is null!"); + return NapiGetNull(env); + } + + napi_value y = ConvertBigIntToNapiValue(env, &(blob->g.y)); + if (y == nullptr) { + LOGE("y is null!"); + return NapiGetNull(env); + } + status = napi_set_named_property(env, point, "x", x); + if (status != napi_ok) { + LOGE("create object failed!"); + return NapiGetNull(env); + } + status = napi_set_named_property(env, point, "y", y); + if (status != napi_ok) { + LOGE("create object failed!"); + return NapiGetNull(env); + } + return point; +} + +static bool BuildIntancePartertoNapiValueSon(napi_env env, napi_status status, HcfEccCommParamsSpec *blob, + napi_value *instance) +{ + if (!BuildSetNamedProperty(env, &(blob->a), "a", instance)) { + LOGE("build setNamedProperty a failed!"); + return false; + } + if (!BuildSetNamedProperty(env, &(blob->b), "b", instance)) { + LOGE("build setNamedProperty b failed!"); + return false; + } + if (!BuildSetNamedProperty(env, &(blob->n), "n", instance)) { + LOGE("build setNamedProperty n failed!"); + return false; + } + napi_value h; + status = napi_create_int32(env, blob->h, &h); + if (status != napi_ok) { + LOGE("create h uint32 failed!"); + return false; + } + status = napi_set_named_property(env, *instance, "h", h); + if (status != napi_ok) { + LOGE("create h uint32 failed!"); + return false; + } + return true; +} + +static bool BuildInstanceParterToNapiValue(napi_env env, HcfEccCommParamsSpec *blob, napi_value *instance) +{ + napi_value algName; + size_t algNameLength = HcfStrlen(blob->base.algName); + if (!algNameLength) { + LOGE("algName is empty!"); + return false; + } + napi_status status = napi_create_string_utf8(env, blob->base.algName, algNameLength, &algName); + if (status != napi_ok) { + LOGE("create algName failed!"); + return false; + } + napi_value specType; + status = napi_create_uint32(env, blob->base.specType, &specType); + if (status != napi_ok) { + LOGE("create uint32 failed!"); + return false; + } + status = napi_set_named_property(env, *instance, "algName", algName); + if (status != napi_ok) { + LOGE("create set algName failed!"); + return false; + } + status = napi_set_named_property(env, *instance, "specType", specType); + if (status != napi_ok) { + LOGE("create set specType failed!"); + return false; + } + if (!BuildIntancePartertoNapiValueSon(env, status, blob, instance)) { + LOGE("create intance parter napi value failed!"); + return false; + } + return true; +} + +static ConvertEccCommParamsSpecToNapiValue(napi_env env, HcfEccCommParamsSpec *blob) +{ + if (!CheckEccCommonParamSpec(env, blob)) { + napi_throw(env, GenerateBusinessError(env, HCF_INVALID_PARAMS, "Invalid blob!")); + LOGE("Invalid blob!"); + return NapiGetNull(env); + } + napi_value instance; + napi_status status = napi_create_object(env, &instance); + if (status != napi_ok) { + napi_throw(env, GenerateBusinessError(env, HCF_INVALID_PARAMS, "create object failed!")); + LOGE("create object failed!"); + return NapiGetNull(env); + } + napi_value point = ConvertEccCommonParamPointToNapiValue(env, blob); + if (point == NapiGetNull(env)) { + napi_throw(env, GenerateBusinessError(env, HCF_INVALID_PARAMS, "covert commonParam failed!")); + LOGE("Covert commonParam failed!"); + return NapiGetNull(env); + } + napi_value field = ConvertEccCommonParamFieldFpToNapiValue(env, blob); + if (field == NapiGetNull(env)) { + napi_throw(env, GenerateBusinessError(env, HCF_INVALID_PARAMS, "covert commonParam fieldFp failed!")); + LOGE("Covert commonParam fieldFp failed!"); + return NapiGetNull(env); + } + if (!BuildInstanceParterToNapiValue(env, blob, &instance)) { + napi_throw(env, GenerateBusinessError(env, HCF_INVALID_PARAMS, "build object failed!")); + LOGE("Build object failed!"); + return NapiGetNull(env); + } + status = napi_set_named_property(env, instance, "field", field); + if (status != napi_ok) { + napi_throw(env, GenerateBusinessError(env, HCF_INVALID_PARAMS, "set fieldFp failed!")); + LOGE("set fieldFp failed!"); + return NapiGetNull(env); + } + status = napi_set_named_property(env, instance, "g", point); + if (status != napi_ok) { + napi_throw(env, GenerateBusinessError(env, HCF_INVALID_PARAMS, "set g failed!")); + LOGE("set g failed!"); + return NapiGetNull(env); + } + return instance; +} + napi_value NapiECCKeyUtil::JsGenECCCommonParamsSpec(napi_env env, napi_callback_info info) { size_t expectedArgc = ARGS_SIZE_ONE; diff --git a/frameworks/js/napi/crypto/src/napi_utils.cpp b/frameworks/js/napi/crypto/src/napi_utils.cpp index c97b6c0..556f8a3 100644 --- a/frameworks/js/napi/crypto/src/napi_utils.cpp +++ b/frameworks/js/napi/crypto/src/napi_utils.cpp @@ -1954,183 +1954,6 @@ napi_value GetResourceName(napi_env env, const char *name) return resourceName; } -static bool CheckEccCommonParamSpecBase(napi_env env, HcfEccCommParamsSpec *blob) -{ - if (blob->a.data == nullptr || blob->a.len == 0) { - LOGE("Invalid blob a!"); - return false; - } - if (blob->b.data == nullptr || blob->b.len == 0) { - LOGE("Invalid blob b!"); - return false; - } - if (blob->n.data == nullptr || blob->n.len == 0) { - LOGE("Invalid blob n!"); - return false; - } - return true; -} - -static bool CheckEccCommonParamSpec(napi_env env, HcfEccCommParamsSpec *blob) -{ - if (blob == nullptr) { - LOGE("Invalid blob!"); - return false; - } - if (!CheckEccCommonParamSpecBase(env, blob)) { - LOGE("Invalid blob ecc commonParamSpec base!"); - return false; - } - if (blob->base.algName == nullptr) { - LOGE("Invalid blob algName!"); - return false; - } - if (blob->field == nullptr) { - LOGE("Invalid blob field!"); - return false; - } - if (blob->field->fieldType == nullptr) { - LOGE("Invalid blob fieldType!"); - return false; - } - if (blob->g.x.data == nullptr || blob->g.x.len == 0) { - LOGE("Invalid blob point x!"); - return false; - } - if (blob->g.y.data == nullptr || blob->g.y.len == 0) { - LOGE("Invalid blob point y!"); - return false; - } - HcfECFieldFp *tmpField = reinterpret_cast(blob->field); - if (tmpField->p.data == nullptr || tmpField->p.len == 0) { - LOGE("Invalid blob p!"); - return false; - } - return true; -} - -static napi_value ConvertEccCommonParamFieldFpToNapiValue(napi_env env, HcfEccCommParamsSpec *blob) -{ - napi_value fieldFp; - napi_value fieldType; - napi_status status = napi_create_object(env, &fieldFp); - if (status != napi_ok) { - LOGE("create fieldFp failed!"); - return NapiGetNull(env); - } - size_t fieldTypeLength = HcfStrlen(blob->field->fieldType); - if (!fieldTypeLength) { - LOGE("fieldType is empty!"); - return NapiGetNull(env); - } - status = napi_create_string_utf8(env, blob->field->fieldType, fieldTypeLength, &fieldType); - if (status != napi_ok) { - LOGE("create object failed!"); - return NapiGetNull(env); - } - status = napi_set_named_property(env, fieldFp, "fieldType", fieldType); - if (status != napi_ok) { - LOGE("create object failed!"); - return NapiGetNull(env); - } - HcfECFieldFp *tmpField = reinterpret_cast(blob->field); - napi_value p = ConvertBigIntToNapiValue(env, &(tmpField->p)); - if (p == nullptr) { - LOGE("p is null!"); - return NapiGetNull(env); - } - status = napi_set_named_property(env, fieldFp, "p", p); - if (status != napi_ok) { - LOGE("create object failed!"); - return NapiGetNull(env); - } - return fieldFp; -} - -static bool IsNapiNull(napi_env env, napi_value value) -{ - napi_valuetype valueType; - napi_typeof(env, value, &valueType); - return (valueType == napi_null); -} - -napi_value ConvertEccPointToNapiValue(napi_env env, HcfPoint *p) -{ - if (p == nullptr) { - LOGE("Invalid point data!"); - napi_throw(env, GenerateBusinessError(env, HCF_INVALID_PARAMS, "Invalid point data!")); - return nullptr; - } - - napi_value point; - napi_status status = napi_create_object(env, &point); - if (status != napi_ok) { - LOGE("create object failed!"); - napi_throw(env, GenerateBusinessError(env, HCF_ERR_MALLOC, "create object failed!")); - return nullptr; - } - - napi_value x = ConvertBigIntToNapiValue(env, &(p->x)); - if (x == nullptr || IsNapiNull(env, x)) { - LOGE("Failed to convert x to NapiValue!"); - return nullptr; - } - - napi_value y = ConvertBigIntToNapiValue(env, &(p->y)); - if (y == nullptr || IsNapiNull(env, y)) { - LOGE("Failed to convert y to NapiValue!"); - return nullptr; - } - - status = napi_set_named_property(env, point, "x", x); - if (status != napi_ok) { - LOGE("set x property failed!"); - napi_throw(env, GenerateBusinessError(env, HCF_INVALID_PARAMS, "set x property failed!")); - return nullptr; - } - - status = napi_set_named_property(env, point, "y", y); - if (status != napi_ok) { - LOGE("set y property failed!"); - napi_throw(env, GenerateBusinessError(env, HCF_INVALID_PARAMS, "set y property failed!")); - return nullptr; - } - - return point; -} - -static napi_value ConvertEccCommonParamPointToNapiValue(napi_env env, HcfEccCommParamsSpec *blob) -{ - napi_value point; - napi_status status = napi_create_object(env, &point); - if (status != napi_ok) { - LOGE("create object failed!"); - return NapiGetNull(env); - } - napi_value x = ConvertBigIntToNapiValue(env, &(blob->g.x)); - if (x == nullptr) { - LOGE("x is null!"); - return NapiGetNull(env); - } - - napi_value y = ConvertBigIntToNapiValue(env, &(blob->g.y)); - if (y == nullptr) { - LOGE("y is null!"); - return NapiGetNull(env); - } - status = napi_set_named_property(env, point, "x", x); - if (status != napi_ok) { - LOGE("create object failed!"); - return NapiGetNull(env); - } - status = napi_set_named_property(env, point, "y", y); - if (status != napi_ok) { - LOGE("create object failed!"); - return NapiGetNull(env); - } - return point; -} - bool BuildSetNamedProperty(napi_env env, HcfBigInteger *number, const char *name, napi_value *instance) { napi_value value = ConvertBigIntToNapiValue(env, number); @@ -2141,219 +1964,5 @@ bool BuildSetNamedProperty(napi_env env, HcfBigInteger *number, const char *name } return true; } - -static bool BuildIntancePartertoNapiValueSon(napi_env env, napi_status status, HcfEccCommParamsSpec *blob, - napi_value *instance) -{ - if (!BuildSetNamedProperty(env, &(blob->a), "a", instance)) { - LOGE("build setNamedProperty a failed!"); - return false; - } - if (!BuildSetNamedProperty(env, &(blob->b), "b", instance)) { - LOGE("build setNamedProperty b failed!"); - return false; - } - if (!BuildSetNamedProperty(env, &(blob->n), "n", instance)) { - LOGE("build setNamedProperty n failed!"); - return false; - } - napi_value h; - status = napi_create_int32(env, blob->h, &h); - if (status != napi_ok) { - LOGE("create h uint32 failed!"); - return false; - } - status = napi_set_named_property(env, *instance, "h", h); - if (status != napi_ok) { - LOGE("create h uint32 failed!"); - return false; - } - return true; -} - -static bool BuildInstanceParterToNapiValue(napi_env env, HcfEccCommParamsSpec *blob, napi_value *instance) -{ - napi_value algName; - size_t algNameLength = HcfStrlen(blob->base.algName); - if (!algNameLength) { - LOGE("algName is empty!"); - return false; - } - napi_status status = napi_create_string_utf8(env, blob->base.algName, algNameLength, &algName); - if (status != napi_ok) { - LOGE("create algName failed!"); - return false; - } - napi_value specType; - status = napi_create_uint32(env, blob->base.specType, &specType); - if (status != napi_ok) { - LOGE("create uint32 failed!"); - return false; - } - status = napi_set_named_property(env, *instance, "algName", algName); - if (status != napi_ok) { - LOGE("create set algName failed!"); - return false; - } - status = napi_set_named_property(env, *instance, "specType", specType); - if (status != napi_ok) { - LOGE("create set specType failed!"); - return false; - } - if (!BuildIntancePartertoNapiValueSon(env, status, blob, instance)) { - LOGE("create intance parter napi value failed!"); - return false; - } - return true; -} - -napi_value ConvertEccCommParamsSpecToNapiValue(napi_env env, HcfEccCommParamsSpec *blob) -{ - if (!CheckEccCommonParamSpec(env, blob)) { - napi_throw(env, GenerateBusinessError(env, HCF_INVALID_PARAMS, "Invalid blob!")); - LOGE("Invalid blob!"); - return NapiGetNull(env); - } - napi_value instance; - napi_status status = napi_create_object(env, &instance); - if (status != napi_ok) { - napi_throw(env, GenerateBusinessError(env, HCF_INVALID_PARAMS, "create object failed!")); - LOGE("create object failed!"); - return NapiGetNull(env); - } - napi_value point = ConvertEccCommonParamPointToNapiValue(env, blob); - if (point == NapiGetNull(env)) { - napi_throw(env, GenerateBusinessError(env, HCF_INVALID_PARAMS, "covert commonParam failed!")); - LOGE("Covert commonParam failed!"); - return NapiGetNull(env); - } - napi_value field = ConvertEccCommonParamFieldFpToNapiValue(env, blob); - if (field == NapiGetNull(env)) { - napi_throw(env, GenerateBusinessError(env, HCF_INVALID_PARAMS, "covert commonParam fieldFp failed!")); - LOGE("Covert commonParam fieldFp failed!"); - return NapiGetNull(env); - } - if (!BuildInstanceParterToNapiValue(env, blob, &instance)) { - napi_throw(env, GenerateBusinessError(env, HCF_INVALID_PARAMS, "build object failed!")); - LOGE("Build object failed!"); - return NapiGetNull(env); - } - status = napi_set_named_property(env, instance, "field", field); - if (status != napi_ok) { - napi_throw(env, GenerateBusinessError(env, HCF_INVALID_PARAMS, "set fieldFp failed!")); - LOGE("set fieldFp failed!"); - return NapiGetNull(env); - } - status = napi_set_named_property(env, instance, "g", point); - if (status != napi_ok) { - napi_throw(env, GenerateBusinessError(env, HCF_INVALID_PARAMS, "set g failed!")); - LOGE("set g failed!"); - return NapiGetNull(env); - } - return instance; -} - -static bool BuildDhInstanceToNapiValueSub(napi_env env, HcfDhCommParamsSpec *blob, napi_value *instance) -{ - if (!BuildSetNamedProperty(env, &(blob->p), "p", instance)) { - LOGE("build setNamedProperty a failed!"); - return false; - } - if (!BuildSetNamedProperty(env, &(blob->g), "g", instance)) { - LOGE("build setNamedProperty b failed!"); - return false; - } - napi_value length; - napi_status status = napi_create_int32(env, blob->length, &length); - if (status != napi_ok) { - LOGE("create length number failed!"); - return false; - } - status = napi_set_named_property(env, *instance, "l", length); - if (status != napi_ok) { - LOGE("create length number failed!"); - return false; - } - return true; -} - -static bool BuildDhInstanceToNapiValue(napi_env env, HcfDhCommParamsSpec *blob, napi_value *instance) -{ - napi_value algName; - size_t algNameLength = HcfStrlen(blob->base.algName); - if (!algNameLength) { - LOGE("algName is empty!"); - return false; - } - napi_status status = napi_create_string_utf8(env, blob->base.algName, algNameLength, &algName); - if (status != napi_ok) { - LOGE("create algName failed!"); - return false; - } - napi_value specType; - status = napi_create_uint32(env, blob->base.specType, &specType); - if (status != napi_ok) { - LOGE("create uint32 failed!"); - return false; - } - status = napi_set_named_property(env, *instance, "algName", algName); - if (status != napi_ok) { - LOGE("create set algName failed!"); - return false; - } - status = napi_set_named_property(env, *instance, "specType", specType); - if (status != napi_ok) { - LOGE("create set specType failed!"); - return false; - } - if (!BuildDhInstanceToNapiValueSub(env, blob, instance)) { - LOGE("create intance parter napi value failed!"); - return false; - } - return true; -} - -static bool CheckDhCommonParamSpec(napi_env env, HcfDhCommParamsSpec *blob) -{ - if (blob == nullptr) { - LOGE("Invalid blob!"); - return false; - } - if (blob->base.algName == nullptr) { - LOGE("Invalid blob algName!"); - return false; - } - if (blob->p.data == nullptr || blob->p.len == 0) { - LOGE("Invalid blob a!"); - return false; - } - if (blob->g.data == nullptr || blob->g.len == 0) { - LOGE("Invalid blob point x!"); - return false; - } - return true; -} - -napi_value ConvertDhCommParamsSpecToNapiValue(napi_env env, HcfDhCommParamsSpec *blob) -{ - if (!CheckDhCommonParamSpec(env, blob)) { - napi_throw(env, GenerateBusinessError(env, HCF_INVALID_PARAMS, "Invalid blob!")); - LOGE("Invalid blob!"); - return NapiGetNull(env); - } - napi_value instance; - napi_status status = napi_create_object(env, &instance); - if (status != napi_ok) { - napi_throw(env, GenerateBusinessError(env, HCF_INVALID_PARAMS, "create object failed!")); - LOGE("create object failed!"); - return NapiGetNull(env); - } - if (!BuildDhInstanceToNapiValue(env, blob, &instance)) { - napi_throw(env, GenerateBusinessError(env, HCF_INVALID_PARAMS, "build object failed!")); - LOGE("Build object failed!"); - return NapiGetNull(env); - } - return instance; -} } // namespace CryptoFramework } // namespace OHOS -- Gitee