1/* 2 * Copyright (c) 2023-2024 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16#include "hks_lite_api.h" 17#include "hks_lite_api_common.h" 18#include "hks_type.h" 19 20#include "jsi.h" 21 22namespace OHOS { 23namespace ACELite { 24 25void AddInt32PropertyInLite(JSIValue object, const char *name, int32_t value) 26{ 27 JSIValue numberProperty = JSI::CreateNumber(value); 28 JSI::SetNamedProperty(object, name, numberProperty); 29} 30 31static JSIValue CreateHuksErrCode(void) 32{ 33 JSIValue errorCode = JSI::CreateObject(); 34 35 AddInt32PropertyInLite(errorCode, "HUKS_ERR_CODE_PERMISSION_FAIL", HUKS_ERR_CODE_PERMISSION_FAIL); 36 AddInt32PropertyInLite(errorCode, "HUKS_ERR_CODE_NOT_SYSTEM_APP", HUKS_ERR_CODE_NOT_SYSTEM_APP); 37 AddInt32PropertyInLite(errorCode, "HUKS_ERR_CODE_ILLEGAL_ARGUMENT", HUKS_ERR_CODE_ILLEGAL_ARGUMENT); 38 AddInt32PropertyInLite(errorCode, "HUKS_ERR_CODE_NOT_SUPPORTED_API", HUKS_ERR_CODE_NOT_SUPPORTED_API); 39 AddInt32PropertyInLite(errorCode, "HUKS_ERR_CODE_FEATURE_NOT_SUPPORTED", HUKS_ERR_CODE_FEATURE_NOT_SUPPORTED); 40 AddInt32PropertyInLite(errorCode, "HUKS_ERR_CODE_MISSING_CRYPTO_ALG_ARGUMENT", 41 HUKS_ERR_CODE_MISSING_CRYPTO_ALG_ARGUMENT); 42 AddInt32PropertyInLite(errorCode, "HUKS_ERR_CODE_INVALID_CRYPTO_ALG_ARGUMENT", 43 HUKS_ERR_CODE_INVALID_CRYPTO_ALG_ARGUMENT); 44 AddInt32PropertyInLite(errorCode, "HUKS_ERR_CODE_FILE_OPERATION_FAIL", HUKS_ERR_CODE_FILE_OPERATION_FAIL); 45 AddInt32PropertyInLite(errorCode, "HUKS_ERR_CODE_COMMUNICATION_FAIL", HUKS_ERR_CODE_COMMUNICATION_FAIL); 46 AddInt32PropertyInLite(errorCode, "HUKS_ERR_CODE_CRYPTO_FAIL", HUKS_ERR_CODE_CRYPTO_FAIL); 47 AddInt32PropertyInLite(errorCode, "HUKS_ERR_CODE_KEY_AUTH_PERMANENTLY_INVALIDATED", 48 HUKS_ERR_CODE_KEY_AUTH_PERMANENTLY_INVALIDATED); 49 AddInt32PropertyInLite(errorCode, "HUKS_ERR_CODE_KEY_AUTH_VERIFY_FAILED", HUKS_ERR_CODE_KEY_AUTH_VERIFY_FAILED); 50 AddInt32PropertyInLite(errorCode, "HUKS_ERR_CODE_KEY_AUTH_TIME_OUT", HUKS_ERR_CODE_KEY_AUTH_TIME_OUT); 51 AddInt32PropertyInLite(errorCode, "HUKS_ERR_CODE_SESSION_LIMIT", HUKS_ERR_CODE_SESSION_LIMIT); 52 AddInt32PropertyInLite(errorCode, "HUKS_ERR_CODE_ITEM_NOT_EXIST", HUKS_ERR_CODE_ITEM_NOT_EXIST); 53 AddInt32PropertyInLite(errorCode, "HUKS_ERR_CODE_EXTERNAL_ERROR", HUKS_ERR_CODE_EXTERNAL_ERROR); 54 AddInt32PropertyInLite(errorCode, "HUKS_ERR_CODE_CREDENTIAL_NOT_EXIST", HUKS_ERR_CODE_CREDENTIAL_NOT_EXIST); 55 AddInt32PropertyInLite(errorCode, "HUKS_ERR_CODE_INSUFFICIENT_MEMORY", HUKS_ERR_CODE_INSUFFICIENT_MEMORY); 56 AddInt32PropertyInLite(errorCode, "HUKS_ERR_CODE_CALL_SERVICE_FAILED", HUKS_ERR_CODE_CALL_SERVICE_FAILED); 57 58 return errorCode; 59} 60 61static JSIValue CreateHuksKeyPurpose(void) 62{ 63 JSIValue keyPurpose = JSI::CreateObject(); 64 65 AddInt32PropertyInLite(keyPurpose, "HUKS_KEY_PURPOSE_ENCRYPT", HKS_KEY_PURPOSE_ENCRYPT); 66 AddInt32PropertyInLite(keyPurpose, "HUKS_KEY_PURPOSE_DECRYPT", HKS_KEY_PURPOSE_DECRYPT); 67 AddInt32PropertyInLite(keyPurpose, "HUKS_KEY_PURPOSE_SIGN", HKS_KEY_PURPOSE_SIGN); 68 AddInt32PropertyInLite(keyPurpose, "HUKS_KEY_PURPOSE_VERIFY", HKS_KEY_PURPOSE_VERIFY); 69 AddInt32PropertyInLite(keyPurpose, "HUKS_KEY_PURPOSE_MAC", HKS_KEY_PURPOSE_MAC); 70 71 return keyPurpose; 72} 73 74static JSIValue CreateHuksKeyPadding(void) 75{ 76 JSIValue keyPadding = JSI::CreateObject(); 77 78 AddInt32PropertyInLite(keyPadding, "HUKS_PADDING_NONE", HKS_PADDING_NONE); 79 AddInt32PropertyInLite(keyPadding, "HUKS_PADDING_PKCS7", HKS_PADDING_PKCS7); 80 AddInt32PropertyInLite(keyPadding, "HUKS_PADDING_PKCS1_V1_5", HKS_PADDING_PKCS1_V1_5); 81 AddInt32PropertyInLite(keyPadding, "HUKS_PADDING_OAEP", HKS_PADDING_OAEP); 82 AddInt32PropertyInLite(keyPadding, "HUKS_PADDING_PSS", HKS_PADDING_PSS); 83 AddInt32PropertyInLite(keyPadding, "HUKS_PADDING_ISO_IEC_9796_2", HKS_PADDING_ISO_IEC_9796_2); 84 AddInt32PropertyInLite(keyPadding, "HUKS_PADDING_ISO_IEC_9797_1", HKS_PADDING_ISO_IEC_9797_1); 85 86 return keyPadding; 87} 88 89static JSIValue CreateHuksCipherMode(void) 90{ 91 JSIValue keyCipherMode = JSI::CreateObject(); 92 93 AddInt32PropertyInLite(keyCipherMode, "HUKS_MODE_ECB", HKS_MODE_ECB); 94 AddInt32PropertyInLite(keyCipherMode, "HUKS_MODE_CBC", HKS_MODE_CBC); 95 AddInt32PropertyInLite(keyCipherMode, "HUKS_MODE_CTR", HKS_MODE_CTR); 96 AddInt32PropertyInLite(keyCipherMode, "HUKS_MODE_GCM", HKS_MODE_GCM); 97 98 return keyCipherMode; 99} 100 101static JSIValue CreateHuksKeySize(void) 102{ 103 JSIValue keySize = JSI::CreateObject(); 104 105 AddInt32PropertyInLite(keySize, "HUKS_AES_KEY_SIZE_128", HKS_AES_KEY_SIZE_128); 106 AddInt32PropertyInLite(keySize, "HUKS_AES_KEY_SIZE_192", HKS_AES_KEY_SIZE_192); 107 AddInt32PropertyInLite(keySize, "HUKS_AES_KEY_SIZE_256", HKS_AES_KEY_SIZE_256); 108 AddInt32PropertyInLite(keySize, "HUKS_AES_KEY_SIZE_512", HKS_AES_KEY_SIZE_512); 109 110 AddInt32PropertyInLite(keySize, "HUKS_DES_KEY_SIZE_64", HKS_DES_KEY_SIZE_64); 111 AddInt32PropertyInLite(keySize, "HUKS_3DES_KEY_SIZE_128", HKS_3DES_KEY_SIZE_128); 112 AddInt32PropertyInLite(keySize, "HUKS_3DES_KEY_SIZE_192", HKS_3DES_KEY_SIZE_192); 113 114 AddInt32PropertyInLite(keySize, "HUKS_RSA_KEY_SIZE_1024", HKS_RSA_KEY_SIZE_1024); 115 AddInt32PropertyInLite(keySize, "HUKS_RSA_KEY_SIZE_2048", HKS_RSA_KEY_SIZE_2048); 116 117 return keySize; 118} 119 120static JSIValue CreateHuksKeyAlg(void) 121{ 122 JSIValue keyAlg = JSI::CreateObject(); 123 124 AddInt32PropertyInLite(keyAlg, "HUKS_ALG_AES", HKS_ALG_AES); 125 AddInt32PropertyInLite(keyAlg, "HUKS_ALG_DES", HKS_ALG_DES); 126 AddInt32PropertyInLite(keyAlg, "HUKS_ALG_3DES", HKS_ALG_3DES); 127 128 AddInt32PropertyInLite(keyAlg, "HUKS_ALG_HMAC", HKS_ALG_HMAC); 129 AddInt32PropertyInLite(keyAlg, "HUKS_ALG_CMAC", HKS_ALG_CMAC); 130 131 AddInt32PropertyInLite(keyAlg, "HUKS_ALG_RSA", HKS_ALG_RSA); 132 133 return keyAlg; 134} 135 136static JSIValue CreateHuksKeyFlag(void) 137{ 138 JSIValue keyFlag = JSI::CreateObject(); 139 140 AddInt32PropertyInLite(keyFlag, "HUKS_KEY_FLAG_IMPORT_KEY", HKS_KEY_FLAG_IMPORT_KEY); 141 AddInt32PropertyInLite(keyFlag, "HUKS_KEY_FLAG_GENERATE_KEY", HKS_KEY_FLAG_GENERATE_KEY); 142 AddInt32PropertyInLite(keyFlag, "HUKS_KEY_FLAG_AGREE_KEY", HKS_KEY_FLAG_AGREE_KEY); 143 AddInt32PropertyInLite(keyFlag, "HUKS_KEY_FLAG_DERIVE_KEY", HKS_KEY_FLAG_DERIVE_KEY); 144 145 return keyFlag; 146} 147 148static JSIValue CreateHuksKeyStorageType(void) 149{ 150 JSIValue keyStorageType = JSI::CreateObject(); 151 152 AddInt32PropertyInLite(keyStorageType, "HUKS_STORAGE_TEMP", HKS_STORAGE_TEMP); 153 AddInt32PropertyInLite(keyStorageType, "HUKS_STORAGE_PERSISTENT", HKS_STORAGE_PERSISTENT); 154 155 return keyStorageType; 156} 157 158static JSIValue CreateHuksTagType(void) 159{ 160 JSIValue tagType = JSI::CreateObject(); 161 162 AddInt32PropertyInLite(tagType, "HUKS_TAG_TYPE_INVALID", HKS_TAG_TYPE_INVALID); 163 AddInt32PropertyInLite(tagType, "HUKS_TAG_TYPE_INT", HKS_TAG_TYPE_INT); 164 AddInt32PropertyInLite(tagType, "HUKS_TAG_TYPE_UINT", HKS_TAG_TYPE_UINT); 165 AddInt32PropertyInLite(tagType, "HUKS_TAG_TYPE_ULONG", HKS_TAG_TYPE_ULONG); 166 AddInt32PropertyInLite(tagType, "HUKS_TAG_TYPE_BOOL", HKS_TAG_TYPE_BOOL); 167 AddInt32PropertyInLite(tagType, "HUKS_TAG_TYPE_BYTES", HKS_TAG_TYPE_BYTES); 168 169 return tagType; 170} 171 172static void AddHuksTagPart1(JSIValue tag) 173{ 174 AddInt32PropertyInLite(tag, "HUKS_TAG_INVALID", HKS_TAG_INVALID); 175 176 AddInt32PropertyInLite(tag, "HUKS_TAG_ALGORITHM", HKS_TAG_ALGORITHM); 177 AddInt32PropertyInLite(tag, "HUKS_TAG_PURPOSE", HKS_TAG_PURPOSE); 178 AddInt32PropertyInLite(tag, "HUKS_TAG_KEY_SIZE", HKS_TAG_KEY_SIZE); 179 AddInt32PropertyInLite(tag, "HUKS_TAG_PADDING", HKS_TAG_PADDING); 180 AddInt32PropertyInLite(tag, "HUKS_TAG_BLOCK_MODE", HKS_TAG_BLOCK_MODE); 181 AddInt32PropertyInLite(tag, "HUKS_TAG_KEY_TYPE", HKS_TAG_KEY_TYPE); 182 AddInt32PropertyInLite(tag, "HUKS_TAG_ASSOCIATED_DATA", HKS_TAG_ASSOCIATED_DATA); 183 AddInt32PropertyInLite(tag, "HUKS_TAG_NONCE", HKS_TAG_NONCE); 184 AddInt32PropertyInLite(tag, "HUKS_TAG_IV", HKS_TAG_IV); 185 186 AddInt32PropertyInLite(tag, "HUKS_TAG_INFO", HKS_TAG_INFO); 187 AddInt32PropertyInLite(tag, "HUKS_TAG_PWD", HKS_TAG_PWD); 188 189 AddInt32PropertyInLite(tag, "HUKS_TAG_KEY_GENERATE_TYPE", HKS_TAG_KEY_GENERATE_TYPE); 190 AddInt32PropertyInLite(tag, "HUKS_TAG_KEY_ALIAS", HKS_TAG_KEY_ALIAS); 191 192 AddInt32PropertyInLite(tag, "HUKS_TAG_ORIGINATION_EXPIRE_DATETIME", HKS_TAG_ORIGINATION_EXPIRE_DATETIME); 193 194 AddInt32PropertyInLite(tag, "HUKS_TAG_USAGE_EXPIRE_DATETIME", HKS_TAG_USAGE_EXPIRE_DATETIME); 195 196 AddInt32PropertyInLite(tag, "HUKS_TAG_CREATION_DATETIME", HKS_TAG_CREATION_DATETIME); 197} 198 199static void AddHuksTagPart2(JSIValue tag) 200{ 201 AddInt32PropertyInLite(tag, "HUKS_TAG_IS_KEY_ALIAS", HKS_TAG_IS_KEY_ALIAS); 202 AddInt32PropertyInLite(tag, "HUKS_TAG_KEY_STORAGE_FLAG", HKS_TAG_KEY_STORAGE_FLAG); 203 AddInt32PropertyInLite(tag, "HUKS_TAG_KEY_FLAG", HKS_TAG_KEY_FLAG); 204 205 AddInt32PropertyInLite(tag, "HUKS_TAG_SECURE_KEY_ALIAS", HKS_TAG_SECURE_KEY_ALIAS); 206 207 AddInt32PropertyInLite(tag, "HUKS_TAG_KEY_DOMAIN", HKS_TAG_KEY_DOMAIN); 208 209 AddInt32PropertyInLite(tag, "HUKS_TAG_PROCESS_NAME", HKS_TAG_PROCESS_NAME); 210 211 AddInt32PropertyInLite(tag, "HUKS_TAG_KEY", HKS_TAG_KEY); 212 AddInt32PropertyInLite(tag, "HUKS_TAG_AE_TAG", HKS_TAG_AE_TAG); 213 AddInt32PropertyInLite(tag, "HUKS_TAG_IS_KEY_HANDLE", HKS_TAG_IS_KEY_HANDLE); 214 215 AddInt32PropertyInLite(tag, "HUKS_TAG_OS_VERSION", HKS_TAG_OS_VERSION); 216 AddInt32PropertyInLite(tag, "HUKS_TAG_OS_PATCHLEVEL", HKS_TAG_OS_PATCHLEVEL); 217 218 AddInt32PropertyInLite(tag, "HUKS_TAG_SYMMETRIC_KEY_DATA", HKS_TAG_SYMMETRIC_KEY_DATA); 219} 220 221static void AddHuksTagPart3(JSIValue tag) 222{ 223 AddInt32PropertyInLite(tag, "HUKS_TAG_DIGEST", HKS_TAG_DIGEST); 224 AddInt32PropertyInLite(tag, "HUKS_TAG_RSA_PSS_SALT_LEN_TYPE", HKS_TAG_RSA_PSS_SALT_LEN_TYPE); 225 AddInt32PropertyInLite(tag, "HUKS_TAG_IMPORT_KEY_TYPE", HKS_TAG_IMPORT_KEY_TYPE); 226} 227 228static JSIValue CreateHuksTag(void) 229{ 230 JSIValue tag = JSI::CreateObject(); 231 232 AddHuksTagPart1(tag); 233 AddHuksTagPart2(tag); 234 AddHuksTagPart3(tag); 235 236 return tag; 237} 238 239static JSIValue CreateHuksKeyDigest() 240{ 241 JSIValue keyDigest = JSI::CreateObject(); 242 243 AddInt32PropertyInLite(keyDigest, "HUKS_DIGEST_SHA1", HKS_DIGEST_SHA1); 244 AddInt32PropertyInLite(keyDigest, "HUKS_DIGEST_SHA256", HKS_DIGEST_SHA256); 245 246 return keyDigest; 247} 248 249static JSIValue CreateHuksImportKeyType() 250{ 251 JSIValue importKeyType = JSI::CreateObject(); 252 253 AddInt32PropertyInLite(importKeyType, "HUKS_KEY_TYPE_PUBLIC_KEY", HKS_KEY_TYPE_PUBLIC_KEY); 254 AddInt32PropertyInLite(importKeyType, "HUKS_KEY_TYPE_PRIVATE_KEY", HKS_KEY_TYPE_PRIVATE_KEY); 255 AddInt32PropertyInLite(importKeyType, "HUKS_KEY_TYPE_KEY_PAIR", HKS_KEY_TYPE_KEY_PAIR); 256 257 return importKeyType; 258} 259 260static JSIValue CreateHuksRsaPssSaltLenType() 261{ 262 JSIValue rsaPssSaltLenType = JSI::CreateObject(); 263 264 AddInt32PropertyInLite(rsaPssSaltLenType, "HUKS_RSA_PSS_SALT_LEN_DIGEST", HKS_RSA_PSS_SALTLEN_DIGEST); 265 AddInt32PropertyInLite(rsaPssSaltLenType, "HUKS_RSA_PSS_SALT_LEN_MAX", HKS_RSA_PSS_SALTLEN_MAX); 266 267 return rsaPssSaltLenType; 268} 269 270static void InitHuksModuleEnum(JSIValue exports) 271{ 272 JSI::SetNamedProperty(exports, "HuksExceptionErrCode", CreateHuksErrCode()); 273 JSI::SetNamedProperty(exports, "HuksKeyPurpose", CreateHuksKeyPurpose()); 274 JSI::SetNamedProperty(exports, "HuksKeyPadding", CreateHuksKeyPadding()); 275 JSI::SetNamedProperty(exports, "HuksCipherMode", CreateHuksCipherMode()); 276 JSI::SetNamedProperty(exports, "HuksKeySize", CreateHuksKeySize()); 277 JSI::SetNamedProperty(exports, "HuksKeyAlg", CreateHuksKeyAlg()); 278 JSI::SetNamedProperty(exports, "HuksKeyFlag", CreateHuksKeyFlag()); 279 JSI::SetNamedProperty(exports, "HuksKeyStorageType", CreateHuksKeyStorageType()); 280 JSI::SetNamedProperty(exports, "HuksTagType", CreateHuksTagType()); 281 JSI::SetNamedProperty(exports, "HuksTag", CreateHuksTag()); 282 JSI::SetNamedProperty(exports, "HuksKeyDigest", CreateHuksKeyDigest()); 283 JSI::SetNamedProperty(exports, "HuksImportKeyType", CreateHuksImportKeyType()); 284 JSI::SetNamedProperty(exports, "HuksRsaPssSaltLenType", CreateHuksRsaPssSaltLenType()); 285} 286 287void InitHuksModule(JSIValue exports) 288{ 289 JSI::SetModuleAPI(exports, "generateKeyItem", HksLiteModule::generateKeyItem); 290 JSI::SetModuleAPI(exports, "deleteKeyItem", HksLiteModule::deleteKeyItem); 291 JSI::SetModuleAPI(exports, "isKeyItemExist", HksLiteModule::isKeyItemExist); 292 JSI::SetModuleAPI(exports, "hasKeyItem", HksLiteModule::hasKeyItem); 293 JSI::SetModuleAPI(exports, "importKeyItem", HksLiteModule::importKeyItem); 294 JSI::SetModuleAPI(exports, "exportKeyItem", HksLiteModule::exportKeyItem); 295 JSI::SetModuleAPI(exports, "getKeyProperties", HksLiteModule::getKeyProperties); 296 JSI::SetModuleAPI(exports, "importWrappedKeyItem", HksLiteModule::importWrappedKeyItem); 297 298 JSI::SetModuleAPI(exports, "initSession", HksLiteModule::initSession); 299 JSI::SetModuleAPI(exports, "updateSession", HksLiteModule::updateSession); 300 JSI::SetModuleAPI(exports, "finishSession", HksLiteModule::finishSession); 301 JSI::SetModuleAPI(exports, "abortSession", HksLiteModule::abortSession); 302 303 InitHuksModuleEnum(exports); 304} 305} // namespace ACELite 306} // namespace OHOS 307