• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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