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