1 /*
2 * Copyright (C) 2022 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 #include "device_attest_oem_adapter.h"
16
17 #include "attest_type.h"
18 #include "attest_utils_log.h"
19 #include "attest_adapter_oem.h"
20 #include "attest_adapter_os.h"
21 #include "attest_adapter_mock.h"
22 #include "attest_adapter.h"
23
24 // 是否存在重置标记
AttestIsResetFlagExist(void)25 bool AttestIsResetFlagExist(void)
26 {
27 return OEMIsResetFlagExist();
28 }
29 // 创建重置标记
30
AttestCreateResetFlag(void)31 int32_t AttestCreateResetFlag(void)
32 {
33 return OEMCreateResetFlag();
34 }
35 // 写入认证结果
AttestWriteAuthStatus(const char * data,uint32_t len)36 int32_t AttestWriteAuthStatus(const char* data, uint32_t len)
37 {
38 return OEMWriteAuthStatus(data, len);
39 }
40
41 // 读取认证结果
AttestReadAuthStatus(char * buffer,uint32_t bufferLen)42 int32_t AttestReadAuthStatus(char* buffer, uint32_t bufferLen)
43 {
44 return OEMReadAuthStatus(buffer, bufferLen);
45 }
46
47 // 读取认证结果长度
AttestGetAuthStatusFileSize(uint32_t * len)48 int32_t AttestGetAuthStatusFileSize(uint32_t* len)
49 {
50 return OEMGetAuthStatusFileSize(len);
51 }
52
53 // 读取凭据
AttestReadTicket(TicketInfo * ticketInfo)54 int32_t AttestReadTicket(TicketInfo* ticketInfo)
55 {
56 return OEMReadTicket(ticketInfo);
57 }
58
59 // 写入凭据
AttestWriteTicket(const TicketInfo * ticketInfo)60 int32_t AttestWriteTicket(const TicketInfo* ticketInfo)
61 {
62 return OEMWriteTicket(ticketInfo);
63 }
64
65 // 读取Manufacturekey
AttestGetManufacturekey(uint8_t manufacturekey[],uint32_t len)66 int32_t AttestGetManufacturekey(uint8_t manufacturekey[], uint32_t len)
67 {
68 if (ATTEST_MOCK_DEVICE_STUB_FLAG) {
69 return OsGetAcKeyStub((char*)manufacturekey, len);
70 }
71 return OEMGetManufacturekey((char*)manufacturekey, len);
72 }
73
74 // 读取ProductId
AttestGetProductId(uint8_t productId[],uint32_t len)75 int32_t AttestGetProductId(uint8_t productId[], uint32_t len)
76 {
77 if (ATTEST_MOCK_DEVICE_STUB_FLAG) {
78 return OsGetProdIdStub((char*)productId, len);
79 }
80 return OEMGetProductId((char*)productId, len);
81 }
82
83 // 读取Token
AttestReadToken(TokenInfo * tokenInfo)84 int32_t AttestReadToken(TokenInfo* tokenInfo)
85 {
86 if (tokenInfo == NULL) {
87 return ATTEST_ERR;
88 }
89 char token[TOKEN_ENCRYPT_LEN + 1] = {0};
90 int32_t ret = 0;
91 if (ATTEST_MOCK_DEVICE_STUB_FLAG) {
92 ret = OsReadTokenStub(token, TOKEN_ENCRYPT_LEN);
93 } else {
94 ret = OEMReadToken(token, TOKEN_ENCRYPT_LEN);
95 }
96 if (ret != ATTEST_OK) {
97 ATTEST_LOG_ERROR("[AttestReadToken] Read oem token failed, ret = %d", ret);
98 return ret;
99 }
100 int32_t offset = 0;
101 if (memcpy_s(tokenInfo->tokenId, TOKEN_ID_ENCRYPT_LEN, token + offset, TOKEN_ID_ENCRYPT_LEN) != 0) {
102 return ATTEST_ERR;
103 }
104 offset += (TOKEN_ID_ENCRYPT_LEN + 1);
105 if (memcpy_s(tokenInfo->tokenValue, TOKEN_VALUE_ENCRYPT_LEN, token + offset, TOKEN_VALUE_ENCRYPT_LEN) != 0) {
106 return ATTEST_ERR;
107 }
108 offset += (TOKEN_VALUE_ENCRYPT_LEN + 1);
109 if (memcpy_s(tokenInfo->salt, SALT_ENCRYPT_LEN, token + offset, SALT_ENCRYPT_LEN) != 0) {
110 return ATTEST_ERR;
111 }
112 offset += (SALT_ENCRYPT_LEN + 1);
113 if (memcpy_s(tokenInfo->version, VERSION_ENCRYPT_LEN, token + offset, VERSION_ENCRYPT_LEN) != 0) {
114 return ATTEST_ERR;
115 }
116 return ATTEST_OK;
117 }
118
119 // 写入Token
AttestWriteToken(TokenInfo * tokenInfo)120 int32_t AttestWriteToken(TokenInfo* tokenInfo)
121 {
122 if (tokenInfo == NULL) {
123 return ATTEST_ERR;
124 }
125 char token[TOKEN_ENCRYPT_LEN + 1];
126 char separator = ',';
127 (void)memset_s(token, sizeof(token), 0, sizeof(token));
128 int32_t offset = 0;
129 if (memcpy_s(token, sizeof(token), tokenInfo->tokenId, sizeof(tokenInfo->tokenId)) != 0) {
130 return ATTEST_ERR;
131 }
132 offset += (TOKEN_ID_ENCRYPT_LEN + 1);
133 token[offset - 1] = separator;
134 if (memcpy_s(token + offset, sizeof(token), tokenInfo->tokenValue, sizeof(tokenInfo->tokenValue)) != 0) {
135 return ATTEST_ERR;
136 }
137 offset += (TOKEN_VALUE_ENCRYPT_LEN + 1);
138 token[offset - 1] = separator;
139 if (memcpy_s(token + offset, sizeof(token), tokenInfo->salt, sizeof(tokenInfo->salt)) != 0) {
140 return ATTEST_ERR;
141 }
142 offset += (SALT_ENCRYPT_LEN + 1);
143 token[offset - 1] = separator;
144 if (memcpy_s(token + offset, sizeof(token), tokenInfo->version, sizeof(tokenInfo->version)) != 0) {
145 return ATTEST_ERR;
146 }
147
148 int32_t ret = 0;
149 if (ATTEST_MOCK_DEVICE_STUB_FLAG) {
150 ret = OsWriteTokenStub(token, TOKEN_ENCRYPT_LEN);
151 } else {
152 ret = OEMWriteToken((const char *)token, TOKEN_ENCRYPT_LEN);
153 }
154 if (ret != ATTEST_OK) {
155 ATTEST_LOG_ERROR("[AttestWriteToken] Write token failed, ret = %d", ret);
156 ret = ATTEST_ERR;
157 }
158 return ret;
159 }
160
161 // 读取ProductKey
AttestGetProductKey(uint8_t productKey[],uint32_t len)162 int32_t AttestGetProductKey(uint8_t productKey[], uint32_t len)
163 {
164 if (ATTEST_MOCK_DEVICE_STUB_FLAG) {
165 return OsGetProdKeyStub((char*)productKey, len);
166 }
167 return OEMGetProductKey((char*)productKey, len);
168 }
169
AttestGetVersionId(void)170 char* AttestGetVersionId(void)
171 {
172 if (ATTEST_MOCK_DEVICE_STUB_FLAG) {
173 return OsGetVersionIdStub();
174 }
175 return OsGetVersionId();
176 }
177
AttestGetBuildRootHash(void)178 char* AttestGetBuildRootHash(void)
179 {
180 if (ATTEST_MOCK_DEVICE_STUB_FLAG) {
181 return OsGetBuildRootHashStub();
182 }
183 return OsGetBuildRootHash();
184 }
185
AttestGetDisplayVersion(void)186 char* AttestGetDisplayVersion(void)
187 {
188 if (ATTEST_MOCK_DEVICE_STUB_FLAG) {
189 return OsGetDisplayVersionStub();
190 }
191 return OsGetDisplayVersion();
192 }
193
AttestGetManufacture(void)194 char* AttestGetManufacture(void)
195 {
196 if (ATTEST_MOCK_DEVICE_STUB_FLAG) {
197 return OsGetManufactureStub();
198 }
199 return OsGetManufacture();
200 }
201
AttestGetProductModel(void)202 char* AttestGetProductModel(void)
203 {
204 if (ATTEST_MOCK_DEVICE_STUB_FLAG) {
205 return OsGetProductModelStub();
206 }
207 return OsGetProductModel();
208 }
209
AttestGetBrand(void)210 char* AttestGetBrand(void)
211 {
212 if (ATTEST_MOCK_DEVICE_STUB_FLAG) {
213 return OsGetBrandStub();
214 }
215 return OsGetBrand();
216 }
217
AttestGetSecurityPatchTag(void)218 char* AttestGetSecurityPatchTag(void)
219 {
220 if (ATTEST_MOCK_DEVICE_STUB_FLAG) {
221 return OsGetSecurityPatchTagStub();
222 }
223 return OsGetSecurityPatchTag();
224 }
225
AttestGetUdid(void)226 char* AttestGetUdid(void)
227 {
228 if (ATTEST_MOCK_DEVICE_STUB_FLAG) {
229 return OsGetUdidStub();
230 }
231 return OsGetUdid();
232 }
233
AttestGetSerial(void)234 char* AttestGetSerial(void)
235 {
236 return OsGetSerial();
237 }
238
AttestSetParameter(const char * key,const char * value)239 int32_t AttestSetParameter(const char *key, const char *value)
240 {
241 return OsSetParameter(key, value);
242 }
243
AttestGetParameter(const char * key,const char * def,char * value,uint32_t len)244 int32_t AttestGetParameter(const char *key, const char *def, char *value, uint32_t len)
245 {
246 return OsGetParameter(key, def, value, len);
247 }
248
AttestReadNetworkConfig(char * buffer,uint32_t bufferLen)249 int32_t AttestReadNetworkConfig(char* buffer, uint32_t bufferLen)
250 {
251 return OEMReadNetworkConfig(buffer, bufferLen);
252 }
253
AttestWriteAuthResultCode(const char * data,uint32_t len)254 int32_t AttestWriteAuthResultCode(const char* data, uint32_t len)
255 {
256 return OEMWriteAuthResultCode(data, len);
257 }
258
AttestReadAuthResultCode(char * buffer,uint32_t bufferLen)259 int32_t AttestReadAuthResultCode(char* buffer, uint32_t bufferLen)
260 {
261 return OEMReadAuthResultCode(buffer, bufferLen);
262 }
263