1 /*
2 * Copyright (c) 2023 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
22 namespace OHOS {
23 namespace ACELite {
24
AddInt32PropertyInLite(JSIValue object,const char * name,int32_t value)25 void AddInt32PropertyInLite(JSIValue object, const char *name, int32_t value)
26 {
27 JSIValue numberProperty = JSI::CreateNumber(value);
28 JSI::SetNamedProperty(object, name, numberProperty);
29 }
30
CreateHuksErrCode(void)31 static 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_ILLEGAL_ARGUMENT", HUKS_ERR_CODE_ILLEGAL_ARGUMENT);
37 AddInt32PropertyInLite(errorCode, "HUKS_ERR_CODE_NOT_SUPPORTED_API", HUKS_ERR_CODE_NOT_SUPPORTED_API);
38 AddInt32PropertyInLite(errorCode, "HUKS_ERR_CODE_FEATURE_NOT_SUPPORTED", HUKS_ERR_CODE_FEATURE_NOT_SUPPORTED);
39 AddInt32PropertyInLite(errorCode, "HUKS_ERR_CODE_MISSING_CRYPTO_ALG_ARGUMENT",
40 HUKS_ERR_CODE_MISSING_CRYPTO_ALG_ARGUMENT);
41 AddInt32PropertyInLite(errorCode, "HUKS_ERR_CODE_INVALID_CRYPTO_ALG_ARGUMENT",
42 HUKS_ERR_CODE_INVALID_CRYPTO_ALG_ARGUMENT);
43 AddInt32PropertyInLite(errorCode, "HUKS_ERR_CODE_FILE_OPERATION_FAIL", HUKS_ERR_CODE_FILE_OPERATION_FAIL);
44 AddInt32PropertyInLite(errorCode, "HUKS_ERR_CODE_COMMUNICATION_FAIL", HUKS_ERR_CODE_COMMUNICATION_FAIL);
45 AddInt32PropertyInLite(errorCode, "HUKS_ERR_CODE_CRYPTO_FAIL", HUKS_ERR_CODE_CRYPTO_FAIL);
46 AddInt32PropertyInLite(errorCode, "HUKS_ERR_CODE_KEY_AUTH_PERMANENTLY_INVALIDATED",
47 HUKS_ERR_CODE_KEY_AUTH_PERMANENTLY_INVALIDATED);
48 AddInt32PropertyInLite(errorCode, "HUKS_ERR_CODE_KEY_AUTH_VERIFY_FAILED", HUKS_ERR_CODE_KEY_AUTH_VERIFY_FAILED);
49 AddInt32PropertyInLite(errorCode, "HUKS_ERR_CODE_KEY_AUTH_TIME_OUT", HUKS_ERR_CODE_KEY_AUTH_TIME_OUT);
50 AddInt32PropertyInLite(errorCode, "HUKS_ERR_CODE_SESSION_LIMIT", HUKS_ERR_CODE_SESSION_LIMIT);
51 AddInt32PropertyInLite(errorCode, "HUKS_ERR_CODE_ITEM_NOT_EXIST", HUKS_ERR_CODE_ITEM_NOT_EXIST);
52 AddInt32PropertyInLite(errorCode, "HUKS_ERR_CODE_EXTERNAL_ERROR", HUKS_ERR_CODE_EXTERNAL_ERROR);
53 AddInt32PropertyInLite(errorCode, "HUKS_ERR_CODE_CREDENTIAL_NOT_EXIST", HUKS_ERR_CODE_CREDENTIAL_NOT_EXIST);
54 AddInt32PropertyInLite(errorCode, "HUKS_ERR_CODE_INSUFFICIENT_MEMORY", HUKS_ERR_CODE_INSUFFICIENT_MEMORY);
55 AddInt32PropertyInLite(errorCode, "HUKS_ERR_CODE_CALL_SERVICE_FAILED", HUKS_ERR_CODE_CALL_SERVICE_FAILED);
56
57 return errorCode;
58 }
59
CreateHuksKeyPurpose(void)60 static JSIValue CreateHuksKeyPurpose(void)
61 {
62 JSIValue keyPurpose = JSI::CreateObject();
63
64 AddInt32PropertyInLite(keyPurpose, "HUKS_KEY_PURPOSE_ENCRYPT", HKS_KEY_PURPOSE_ENCRYPT);
65 AddInt32PropertyInLite(keyPurpose, "HUKS_KEY_PURPOSE_DECRYPT", HKS_KEY_PURPOSE_DECRYPT);
66
67 return keyPurpose;
68 }
69
CreateHuksKeyPadding(void)70 static JSIValue CreateHuksKeyPadding(void)
71 {
72 JSIValue keyPadding = JSI::CreateObject();
73
74 AddInt32PropertyInLite(keyPadding, "HUKS_PADDING_NONE", HKS_PADDING_NONE);
75 AddInt32PropertyInLite(keyPadding, "HUKS_PADDING_PKCS7", HKS_PADDING_PKCS7);
76
77 return keyPadding;
78 }
79
CreateHuksCipherMode(void)80 static JSIValue CreateHuksCipherMode(void)
81 {
82 JSIValue keyCipherMode = JSI::CreateObject();
83
84 AddInt32PropertyInLite(keyCipherMode, "HUKS_MODE_ECB", HKS_MODE_ECB);
85 AddInt32PropertyInLite(keyCipherMode, "HUKS_MODE_CBC", HKS_MODE_CBC);
86 AddInt32PropertyInLite(keyCipherMode, "HUKS_MODE_CTR", HKS_MODE_CTR);
87 AddInt32PropertyInLite(keyCipherMode, "HUKS_MODE_GCM", HKS_MODE_GCM);
88
89 return keyCipherMode;
90 }
91
CreateHuksKeySize(void)92 static JSIValue CreateHuksKeySize(void)
93 {
94 JSIValue keySize = JSI::CreateObject();
95
96 AddInt32PropertyInLite(keySize, "HUKS_AES_KEY_SIZE_128", HKS_AES_KEY_SIZE_128);
97 AddInt32PropertyInLite(keySize, "HUKS_AES_KEY_SIZE_192", HKS_AES_KEY_SIZE_192);
98 AddInt32PropertyInLite(keySize, "HUKS_AES_KEY_SIZE_256", HKS_AES_KEY_SIZE_256);
99 AddInt32PropertyInLite(keySize, "HUKS_AES_KEY_SIZE_512", HKS_AES_KEY_SIZE_512);
100
101 return keySize;
102 }
103
CreateHuksKeyAlg(void)104 static JSIValue CreateHuksKeyAlg(void)
105 {
106 JSIValue keyAlg = JSI::CreateObject();
107
108 AddInt32PropertyInLite(keyAlg, "HUKS_ALG_AES", HKS_ALG_AES);
109
110 return keyAlg;
111 }
112
CreateHuksKeyFlag(void)113 static JSIValue CreateHuksKeyFlag(void)
114 {
115 JSIValue keyFlag = JSI::CreateObject();
116
117 AddInt32PropertyInLite(keyFlag, "HUKS_KEY_FLAG_IMPORT_KEY", HKS_KEY_FLAG_IMPORT_KEY);
118 AddInt32PropertyInLite(keyFlag, "HUKS_KEY_FLAG_GENERATE_KEY", HKS_KEY_FLAG_GENERATE_KEY);
119 AddInt32PropertyInLite(keyFlag, "HUKS_KEY_FLAG_AGREE_KEY", HKS_KEY_FLAG_AGREE_KEY);
120 AddInt32PropertyInLite(keyFlag, "HUKS_KEY_FLAG_DERIVE_KEY", HKS_KEY_FLAG_DERIVE_KEY);
121
122 return keyFlag;
123 }
124
CreateHuksKeyStorageType(void)125 static JSIValue CreateHuksKeyStorageType(void)
126 {
127 JSIValue keyStorageType = JSI::CreateObject();
128
129 AddInt32PropertyInLite(keyStorageType, "HUKS_STORAGE_TEMP", HKS_STORAGE_TEMP);
130 AddInt32PropertyInLite(keyStorageType, "HUKS_STORAGE_PERSISTENT", HKS_STORAGE_PERSISTENT);
131
132 return keyStorageType;
133 }
134
CreateHuksTagType(void)135 static JSIValue CreateHuksTagType(void)
136 {
137 JSIValue tagType = JSI::CreateObject();
138
139 AddInt32PropertyInLite(tagType, "HUKS_TAG_TYPE_INVALID", HKS_TAG_TYPE_INVALID);
140 AddInt32PropertyInLite(tagType, "HUKS_TAG_TYPE_INT", HKS_TAG_TYPE_INT);
141 AddInt32PropertyInLite(tagType, "HUKS_TAG_TYPE_UINT", HKS_TAG_TYPE_UINT);
142 AddInt32PropertyInLite(tagType, "HUKS_TAG_TYPE_ULONG", HKS_TAG_TYPE_ULONG);
143 AddInt32PropertyInLite(tagType, "HUKS_TAG_TYPE_BOOL", HKS_TAG_TYPE_BOOL);
144 AddInt32PropertyInLite(tagType, "HUKS_TAG_TYPE_BYTES", HKS_TAG_TYPE_BYTES);
145
146 return tagType;
147 }
148
AddHuksTagPart1(JSIValue tag)149 static void AddHuksTagPart1(JSIValue tag)
150 {
151 AddInt32PropertyInLite(tag, "HUKS_TAG_INVALID", HKS_TAG_INVALID);
152
153 AddInt32PropertyInLite(tag, "HUKS_TAG_ALGORITHM", HKS_TAG_ALGORITHM);
154 AddInt32PropertyInLite(tag, "HUKS_TAG_PURPOSE", HKS_TAG_PURPOSE);
155 AddInt32PropertyInLite(tag, "HUKS_TAG_KEY_SIZE", HKS_TAG_KEY_SIZE);
156 AddInt32PropertyInLite(tag, "HUKS_TAG_PADDING", HKS_TAG_PADDING);
157 AddInt32PropertyInLite(tag, "HUKS_TAG_BLOCK_MODE", HKS_TAG_BLOCK_MODE);
158 AddInt32PropertyInLite(tag, "HUKS_TAG_KEY_TYPE", HKS_TAG_KEY_TYPE);
159 AddInt32PropertyInLite(tag, "HUKS_TAG_ASSOCIATED_DATA", HKS_TAG_ASSOCIATED_DATA);
160 AddInt32PropertyInLite(tag, "HUKS_TAG_NONCE", HKS_TAG_NONCE);
161 AddInt32PropertyInLite(tag, "HUKS_TAG_IV", HKS_TAG_IV);
162
163 AddInt32PropertyInLite(tag, "HUKS_TAG_INFO", HKS_TAG_INFO);
164 AddInt32PropertyInLite(tag, "HUKS_TAG_PWD", HKS_TAG_PWD);
165
166 AddInt32PropertyInLite(tag, "HUKS_TAG_KEY_GENERATE_TYPE", HKS_TAG_KEY_GENERATE_TYPE);
167 AddInt32PropertyInLite(tag, "HUKS_TAG_KEY_ALIAS", HKS_TAG_KEY_ALIAS);
168
169 AddInt32PropertyInLite(tag, "HUKS_TAG_ORIGINATION_EXPIRE_DATETIME", HKS_TAG_ORIGINATION_EXPIRE_DATETIME);
170
171 AddInt32PropertyInLite(tag, "HUKS_TAG_USAGE_EXPIRE_DATETIME", HKS_TAG_USAGE_EXPIRE_DATETIME);
172
173 AddInt32PropertyInLite(tag, "HUKS_TAG_CREATION_DATETIME", HKS_TAG_CREATION_DATETIME);
174 }
175
AddHuksTagPart2(JSIValue tag)176 static void AddHuksTagPart2(JSIValue tag)
177 {
178 AddInt32PropertyInLite(tag, "HUKS_TAG_IS_KEY_ALIAS", HKS_TAG_IS_KEY_ALIAS);
179 AddInt32PropertyInLite(tag, "HUKS_TAG_KEY_STORAGE_FLAG", HKS_TAG_KEY_STORAGE_FLAG);
180 AddInt32PropertyInLite(tag, "HUKS_TAG_KEY_FLAG", HKS_TAG_KEY_FLAG);
181
182 AddInt32PropertyInLite(tag, "HUKS_TAG_SECURE_KEY_ALIAS", HKS_TAG_SECURE_KEY_ALIAS);
183
184 AddInt32PropertyInLite(tag, "HUKS_TAG_KEY_DOMAIN", HKS_TAG_KEY_DOMAIN);
185
186 AddInt32PropertyInLite(tag, "HUKS_TAG_PROCESS_NAME", HKS_TAG_PROCESS_NAME);
187
188 AddInt32PropertyInLite(tag, "HUKS_TAG_KEY", HKS_TAG_KEY);
189 AddInt32PropertyInLite(tag, "HUKS_TAG_AE_TAG", HKS_TAG_AE_TAG);
190 AddInt32PropertyInLite(tag, "HUKS_TAG_IS_KEY_HANDLE", HKS_TAG_IS_KEY_HANDLE);
191
192 AddInt32PropertyInLite(tag, "HUKS_TAG_OS_VERSION", HKS_TAG_OS_VERSION);
193 AddInt32PropertyInLite(tag, "HUKS_TAG_OS_PATCHLEVEL", HKS_TAG_OS_PATCHLEVEL);
194
195 AddInt32PropertyInLite(tag, "HUKS_TAG_SYMMETRIC_KEY_DATA", HKS_TAG_SYMMETRIC_KEY_DATA);
196 }
197
CreateHuksTag(void)198 static JSIValue CreateHuksTag(void)
199 {
200 JSIValue tag = JSI::CreateObject();
201
202 AddHuksTagPart1(tag);
203 AddHuksTagPart2(tag);
204
205 return tag;
206 }
207
InitHuksModuleEnum(JSIValue exports)208 static void InitHuksModuleEnum(JSIValue exports)
209 {
210 JSI::SetNamedProperty(exports, "HuksExceptionErrCode", CreateHuksErrCode());
211 JSI::SetNamedProperty(exports, "HuksKeyPurpose", CreateHuksKeyPurpose());
212 JSI::SetNamedProperty(exports, "HuksKeyPadding", CreateHuksKeyPadding());
213 JSI::SetNamedProperty(exports, "HuksCipherMode", CreateHuksCipherMode());
214 JSI::SetNamedProperty(exports, "HuksKeySize", CreateHuksKeySize());
215 JSI::SetNamedProperty(exports, "HuksKeyAlg", CreateHuksKeyAlg());
216 JSI::SetNamedProperty(exports, "HuksKeyFlag", CreateHuksKeyFlag());
217 JSI::SetNamedProperty(exports, "HuksKeyStorageType", CreateHuksKeyStorageType());
218 JSI::SetNamedProperty(exports, "HuksTagType", CreateHuksTagType());
219 JSI::SetNamedProperty(exports, "HuksTag", CreateHuksTag());
220 }
221
InitHuksModule(JSIValue exports)222 void InitHuksModule(JSIValue exports)
223 {
224 JSI::SetModuleAPI(exports, "generateKeyItem", HksLiteModule::generateKeyItem);
225 JSI::SetModuleAPI(exports, "initSession", HksLiteModule::initSession);
226 JSI::SetModuleAPI(exports, "updateSession", HksLiteModule::updateSession);
227 JSI::SetModuleAPI(exports, "finishSession", HksLiteModule::finishSession);
228 JSI::SetModuleAPI(exports, "abortSession", HksLiteModule::abortSession);
229 JSI::SetModuleAPI(exports, "deleteKeyItem", HksLiteModule::deleteKeyItem);
230 JSI::SetModuleAPI(exports, "isKeyItemExist", HksLiteModule::isKeyItemExist);
231
232 InitHuksModuleEnum(exports);
233 }
234 } // namespace ACELite
235 } // namespace OHOS
236