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