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 #ifndef ASSET_API_H
17 #define ASSET_API_H
18 
19 #include <stdint.h>
20 #include <stdlib.h>
21 
22 #include "asset_type.h"
23 
24 /**
25  * @addtogroup AssetApi
26  * @{
27  *
28  * @brief Provides APIs for storing and managing short sensitive data of users, including adding, deleting, updating,
29  * and querying the data.
30  * The short sensitive data refers to sensitive data shorter than 1024 bytes, including the user passwords
31  * (accounts/passwords), token data (application credentials), and critical data in plaintext (bank card numbers).
32  *
33  * @since 11
34  */
35 
36 /**
37  * @file asset_api.h
38  *
39  * @brief Declares the APIs for accessing assets.
40  *
41  * @library libasset_ndk.z.so
42  * @kit AssetStoreKit
43  * @syscap SystemCapability.Security.Asset
44  * @since 11
45  */
46 
47 #ifdef __cplusplus
48 extern "C" {
49 #endif
50 /**
51  * @brief Adds an asset.
52  *
53  * @param attributes Pointer to the attributes of the asset to add.
54  * @param attributes Number of the attributes of the asset to add.
55  * @return {@link ASSET_SUCCESS} 0 - The operation is successful.
56  *     {@link ASSET_PERMISSION_DENIED} 201 - The caller doesn't have the permission.
57  *     {@link ASSET_INVALID_ARGUMENT} 401 - Parameter error. Possible causes:
58  *         1. Mandatory parameters are left unspecified.
59  *         2. Incorrect parameter types.
60  *         3. Parameter verification failed.
61  *     {@link ASSET_SERVICE_UNAVAILABLE} 24000001 - The ASSET service is unavailable.
62  *     {@link ASSET_DUPLICATED} 24000003 - The asset already exists.
63  *     {@link ASSET_STATUS_MISMATCH} 24000005 - The screen lock status does not match.
64  *     {@link ASSET_OUT_OF_MEMORY} 24000006 - Insufficient memory.
65  *     {@link ASSET_DATA_CORRUPTED} 24000007 - The asset is corrupted.
66  *     {@link ASSET_DATABASE_ERROR} 24000008 - The database operation failed.
67  *     {@link ASSET_CRYPTO_ERROR} 24000009 - The cryptography operation failed.
68  *     {@link ASSET_IPC_ERROR} 24000010 - IPC failed.
69  *     {@link ASSET_BMS_ERROR} 24000011 - Calling the Bundle Manager service failed.
70  *     {@link ASSET_ACCOUNT_ERROR} 24000012 - Calling the OS Account service failed.
71  *     {@link ASSET_ACCESS_TOKEN_ERROR} 24000013 - Calling the Access Token service failed.
72  *     {@link ASSET_FILE_OPERATION_ERROR} 24000014 - The file operation failed.
73  *     {@link ASSET_GET_SYSTEM_TIME_ERROR} 24000015 - Getting the system time failed.
74  * @since 11
75  */
76 int32_t OH_Asset_Add(const Asset_Attr *attributes, uint32_t attrCnt);
77 
78 /**
79  * @brief Removes one or more assets.
80  *
81  * @param query Pointer to the conditions for removing the assets.
82  * @param queryCnt Number of conditions for removing the assets.
83  * @return {@link ASSET_SUCCESS} 0 - The operation is successful.
84  *     {@link ASSET_INVALID_ARGUMENT} 401 - Parameter error. Possible causes:
85  *         1. Incorrect parameter types.
86  *         2. Parameter verification failed.
87  *     {@link ASSET_SERVICE_UNAVAILABLE} 24000001 - The ASSET service is unavailable.
88  *     {@link ASSET_NOT_FOUND} 24000002 - The asset is not found.
89  *     {@link ASSET_OUT_OF_MEMORY} 24000006 - Insufficient memory.
90  *     {@link ASSET_DATA_CORRUPTED} 24000007 - The asset is corrupted.
91  *     {@link ASSET_DATABASE_ERROR} 24000008 - The database operation failed.
92  *     {@link ASSET_IPC_ERROR} 24000010 - IPC failed.
93  *     {@link ASSET_BMS_ERROR} 24000011 - Calling the Bundle Manager service failed.
94  *     {@link ASSET_ACCOUNT_ERROR} 24000012 - Calling the OS Account service failed.
95  *     {@link ASSET_ACCESS_TOKEN_ERROR} 24000013 - Calling the Access Token service failed.
96  *     {@link ASSET_GET_SYSTEM_TIME_ERROR} 24000015 - Getting the system time failed.
97  * @since 11
98  */
99 int32_t OH_Asset_Remove(const Asset_Attr *query, uint32_t queryCnt);
100 
101 /**
102  * @brief Updates an asset.
103  *
104  * @param query Pointer to the conditions for updating the asset.
105  * @param queryCnt Number of conditions for updating the asset.
106  * @param attributes Pointer to the attributes of the asset to update.
107  * @param attributes Number of the attributes of the asset to update.
108  * @return {@link ASSET_SUCCESS} 0 - The operation is successful.
109  *     {@link ASSET_INVALID_ARGUMENT} 401 - Parameter error. Possible causes:
110  *         1. Mandatory parameters are left unspecified.
111  *         2. Incorrect parameter types.
112  *         3. Parameter verification failed.
113  *     {@link ASSET_SERVICE_UNAVAILABLE} 24000001 - The ASSET service is unavailable.
114  *     {@link ASSET_NOT_FOUND} 24000002 - The asset is not found.
115  *     {@link ASSET_STATUS_MISMATCH} 24000005 - The screen lock status does not match.
116  *     {@link ASSET_OUT_OF_MEMORY} 24000006 - Insufficient memory.
117  *     {@link ASSET_DATA_CORRUPTED} 24000007 - The asset is corrupted.
118  *     {@link ASSET_DATABASE_ERROR} 24000008 - The database operation failed.
119  *     {@link ASSET_CRYPTO_ERROR} 24000009 - The cryptography operation failed.
120  *     {@link ASSET_IPC_ERROR} 24000010 - IPC failed.
121  *     {@link ASSET_BMS_ERROR} 24000011 - Calling the Bundle Manager service failed.
122  *     {@link ASSET_ACCOUNT_ERROR} 24000012 - Calling the OS Account service failed.
123  *     {@link ASSET_ACCESS_TOKEN_ERROR} 24000013 - Calling the Access Token service failed.
124  *     {@link ASSET_GET_SYSTEM_TIME_ERROR} 24000015 - Getting the system time failed.
125  * @since 11
126  */
127 int32_t OH_Asset_Update(const Asset_Attr *query, uint32_t queryCnt,
128     const Asset_Attr *attributesToUpdate, uint32_t updateCnt);
129 
130 /**
131  * @brief Preprocesses data before querying the asset that can be accessed only after a successful user authentication.
132  *
133  * @param query Pointer to the search criteria of the asset.
134  * @param queryCnt Number of the search criteria.
135  * @param challenge Pointer to the challenge value to be used when <b>OH_Asset_Query</b> is called.
136  * @return {@link ASSET_SUCCESS} 0 - The operation is successful.
137  *     {@link ASSET_INVALID_ARGUMENT} 401 - Parameter error. Possible causes:
138  *         1. Incorrect parameter types.
139  *         2. Parameter verification failed.
140  *     {@link ASSET_SERVICE_UNAVAILABLE} 24000001 - The ASSET service is unavailable.
141  *     {@link ASSET_NOT_FOUND} 24000002 - The asset is not found.
142  *     {@link ASSET_STATUS_MISMATCH} 24000005 - The screen lock status does not match.
143  *     {@link ASSET_OUT_OF_MEMORY} 24000006 - Insufficient memory.
144  *     {@link ASSET_DATA_CORRUPTED} 24000007 - The asset is corrupted.
145  *     {@link ASSET_DATABASE_ERROR} 24000008 - The database operation failed.
146  *     {@link ASSET_CRYPTO_ERROR} 24000009 - The cryptography operation failed.
147  *     {@link ASSET_IPC_ERROR} 24000010 - IPC failed.
148  *     {@link ASSET_BMS_ERROR} 24000011 - Calling the Bundle Manager service failed.
149  *     {@link ASSET_ACCOUNT_ERROR} 24000012 - Calling the OS Account service failed.
150  *     {@link ASSET_ACCESS_TOKEN_ERROR} 24000013 - Calling the Access Token service failed.
151  *     {@link ASSET_LIMIT_EXCEEDED} 24000016 - The cache exceeds the limit.
152  *     {@link ASSET_UNSUPPORTED} 24000017 - The capability is not supported.
153  * @since 11
154  */
155 int32_t OH_Asset_PreQuery(const Asset_Attr *query, uint32_t queryCnt, Asset_Blob *challenge);
156 
157 /**
158  * @brief Queries assets.
159  *
160  * @param query Pointer to the search criteria.
161  * @param queryCnt Number of the search criteria.
162  * @param resultSet Pointer to the query result obtained.
163  * @return {@link ASSET_SUCCESS} 0 - The operation is successful.
164  *     {@link ASSET_INVALID_ARGUMENT} 401 - Parameter error. Possible causes:
165  *         1. Incorrect parameter types.
166  *         2. Parameter verification failed.
167  *     {@link ASSET_SERVICE_UNAVAILABLE} 24000001 - The ASSET service is unavailable.
168  *     {@link ASSET_NOT_FOUND} 24000002 - The asset is not found.
169  *     {@link ASSET_ACCESS_DENIED} 24000004 - Access to the asset is denied.
170  *     {@link ASSET_STATUS_MISMATCH} 24000005 - The screen lock status does not match.
171  *     {@link ASSET_OUT_OF_MEMORY} 24000006 - Insufficient memory.
172  *     {@link ASSET_DATA_CORRUPTED} 24000007 - The asset is corrupted.
173  *     {@link ASSET_DATABASE_ERROR} 24000008 - The database operation failed.
174  *     {@link ASSET_CRYPTO_ERROR} 24000009 - The cryptography operation failed.
175  *     {@link ASSET_IPC_ERROR} 24000010 - IPC failed.
176  *     {@link ASSET_BMS_ERROR} 24000011 - Calling the Bundle Manager service failed.
177  *     {@link ASSET_ACCOUNT_ERROR} 24000012 - Calling the OS Account service failed.
178  *     {@link ASSET_ACCESS_TOKEN_ERROR} 24000013 - Calling the Access Token service failed.
179  *     {@link ASSET_UNSUPPORTED} 24000017 - The capability is not supported.
180  * @since 11
181  */
182 int32_t OH_Asset_Query(const Asset_Attr *query, uint32_t queryCnt, Asset_ResultSet *resultSet);
183 
184 /**
185  * @brief Processes data after the query of the asset that requires user authentication.
186  *
187  * @param handle Pointer to the handle of the data to process, which includes the challenge value returned by
188  *     <b>OH_Asset_PreQuery</b>.
189  * @param handleCnt Number of the elements in the handle attribute set.
190  * @return {@link ASSET_SUCCESS} 0 - The operation is successful.
191  *     {@link ASSET_INVALID_ARGUMENT} 401 - Parameter error. Possible causes:
192  *         1. Mandatory parameters are left unspecified.
193  *         2. Incorrect parameter types.
194  *         3. Parameter verification failed.
195  *     {@link ASSET_SERVICE_UNAVAILABLE} 24000001 - The ASSET service is unavailable.
196  *     {@link ASSET_OUT_OF_MEMORY} 24000006 - Insufficient memory.
197  *     {@link ASSET_IPC_ERROR} 24000010 - IPC failed.
198  *     {@link ASSET_BMS_ERROR} 24000011 - Calling the Bundle Manager service failed.
199  *     {@link ASSET_ACCOUNT_ERROR} 24000012 - Calling the OS Account service failed.
200  *     {@link ASSET_ACCESS_TOKEN_ERROR} 24000013 - Calling the Access Token service failed.
201  * @since 11
202  */
203 int32_t OH_Asset_PostQuery(const Asset_Attr *handle, uint32_t handleCnt);
204 
205 /**
206  * @brief Parses the query result to obtain the specified attribute value.
207  *
208  * @param result Pointer to the query result to parse, which is obtained by <b>OH_Asset_Query</b>.
209  * @param tag Tag of the attribute to obtain.
210  * @return Returns <b>Asset_Attr</b> obtained if the operation is successful; returns <b>NULL</b> otherwise.
211  *     The attribute does not need to be released by the service.
212  * @since 11
213  */
214 Asset_Attr *OH_Asset_ParseAttr(const Asset_Result *result, Asset_Tag tag);
215 
216 /**
217  * @brief Releases the memory occupied by the challenge value.
218  *
219  * @param blob Pointer to the challenge value (obtained by <b>OH_Asset_PreQuery</b>) to release.
220  * @since 11
221  */
222 void OH_Asset_FreeBlob(Asset_Blob *blob);
223 
224 /**
225  * @brief Releases the memory occupied by the query result.
226  *
227  * @param resultSet Pointer to the query result (obtained by <b>OH_Asset_Query</b>) to release.
228  * @since 11
229  */
230 void OH_Asset_FreeResultSet(Asset_ResultSet *resultSet);
231 
232 #ifdef __cplusplus
233 }
234 #endif
235 
236 /** @} */
237 #endif // ASSET_API_H
238