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 
16 #ifndef ATTRIBUTE_H
17 #define ATTRIBUTE_H
18 
19 #include "c_array.h"
20 #include "defines.h"
21 
22 #ifdef __cplusplus
23 extern "C" {
24 #endif
25 
26 typedef enum {
27     /* Root tag */
28     ATTR_ROOT = 100000,
29     /* Result code */
30     ATTR_RESULT_CODE = 100001,
31     /* Tag of signature data in TLV */
32     ATTR_SIGNATURE = 100004,
33     /* Identify mode */
34     ATTR_IDENTIFY_MODE = 100005,
35     /* Tag of templateId data in TLV */
36     ATTR_TEMPLATE_ID = 100006,
37     /* Tag of templateId list data in TLV */
38     ATTR_TEMPLATE_ID_LIST = 100007,
39     /* Expected attribute, tag of remain count in TLV */
40     ATTR_REMAIN_ATTEMPTS = 100009,
41     /* Remain time */
42     ATTR_LOCKOUT_DURATION = 100010,
43     /* Session id, required when decode in C */
44     ATTR_SCHEDULE_ID = 100014,
45     /* Tag of data */
46     ATTR_DATA = 100020,
47     /* Tag of auth subType */
48     ATTR_PIN_SUB_TYPE = 100021,
49     /* Tag of auth schedule mode */
50     ATTR_SCHEDULE_MODE = 100022,
51     /* Tag of property */
52     ATTR_PROPERTY_MODE = 100023,
53     /* Tag of auth type */
54     ATTR_TYPE = 100024,
55     /* Tag of cred id */
56     ATTR_CREDENTIAL_ID = 100025,
57     /* Controller */
58     ATTR_CONTROLLER = 100026,
59     /* calleruid */
60     ATTR_CALLER_UID = 100027,
61     /* result */
62     ATTR_RESULT = 100028,
63     /* capability level */
64     ATTR_CAPABILITY_LEVEL = 100029,
65     /* algorithm setinfo */
66     ATTR_ALGORITHM_INFO = 100030,
67     /* time stamp */
68     ATTR_TIME_STAMP = 100031,
69     /* root secret */
70     ATTR_ROOT_SECRET = 100032,
71     /* attrs */
72     ATTR_ATTRS = 100033,
73     /* pin expired sys time */
74     ATTR_EXPIRED_SYS_TIME = 100034,
75     /* executor matcher */
76     ATTR_EXECUTOR_MATCHER = 100036,
77     /* user id */
78     ATTR_USER_ID = 100041,
79     /* token */
80     ATTR_TOKEN = 100042,
81     /* executor role */
82     ATTR_EXECUTOR_ROLE = 100043,
83     /* esl */
84     ATTR_ESL = 100044,
85     /* VERIFIER udid */
86     ATTR_VERIFIER_UDID = 100045,
87     /* COLLECTOR udid */
88     ATTR_COLLECTOR_UDID = 100046,
89     /* local udid */
90     ATTR_LOCAL_UDID = 100063,
91     /* peer udid */
92     ATTR_PEER_UDID = 100064,
93     /* public key */
94     ATTR_PUBLIC_KEY = 100065,
95     /* Challenge */
96     ATTR_CHALLENGE = 100066,
97     /* executor index */
98     ATTR_EXECUTOR_INDEX = 100067,
99 } AttributeKey;
100 
101 #define MAX_SUB_MSG_NUM 10
102 
103 typedef void Attribute;
104 
105 #define MAX_EXECUTOR_MSG_LEN 2048
106 
107 Attribute *CreateEmptyAttribute(void);
108 Attribute *CreateAttributeFromSerializedMsg(const Uint8Array msg);
109 void FreeAttribute(Attribute **attribute);
110 
111 ResultCode GetAttributeSerializedMsg(const Attribute *attribute, Uint8Array *retMsg);
112 
113 ResultCode GetAttributeUint32(const Attribute *attribute, AttributeKey key, uint32_t *retValue);
114 ResultCode SetAttributeUint32(Attribute *attribute, AttributeKey key, const uint32_t value);
115 ResultCode GetAttributeInt32(const Attribute *attribute, AttributeKey key, int32_t *retValue);
116 ResultCode SetAttributeInt32(Attribute *attribute, AttributeKey key, const int32_t value);
117 ResultCode GetAttributeUint64(const Attribute *attribute, AttributeKey key, uint64_t *retValue);
118 ResultCode SetAttributeUint64(Attribute *attribute, AttributeKey key, const uint64_t value);
119 ResultCode GetAttributeUint8Array(const Attribute *attribute, AttributeKey key, Uint8Array *retData);
120 ResultCode SetAttributeUint8Array(Attribute *attribute, AttributeKey key, const Uint8Array data);
121 ResultCode GetAttributeUint64Array(const Attribute *attribute, AttributeKey key, Uint64Array *retData);
122 ResultCode SetAttributeUint64Array(Attribute *attribute, AttributeKey key, const Uint64Array data);
123 
124 ResultCode ParseMultiDataSerializedMsg(const Uint8Array msg, Uint8Array *subMsgData, int *subMsgSize);
125 ResultCode GetMultiDataSerializedMsg(Uint8Array *sourceArrayMsg, uint32_t size, Uint8Array *retMsg);
126 
127 #ifdef __cplusplus
128 }
129 #endif
130 
131 #endif // ATTRIBUTE_H