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
16 #include "dslm_test.h"
17
18 #include <chrono>
19 #include <condition_variable>
20 #include <gtest/gtest.h>
21 #include <iostream>
22 #include <mutex>
23 #include <thread>
24
25 #include "file_ex.h"
26 #include "nativetoken_kit.h"
27 #include "securec.h"
28 #include "token_setproc.h"
29
30 #include "device_security_defines.h"
31 #include "device_security_info.h"
32 #include "device_security_level_defines.h"
33 #include "dslm_bigdata.h"
34 #include "dslm_core_defines.h"
35 #include "dslm_core_process.h"
36 #include "dslm_credential.h"
37 #include "dslm_crypto.h"
38 #include "dslm_device_list.h"
39 #include "dslm_fsm_process.h"
40 #include "dslm_hidumper.h"
41 #include "dslm_hievent.h"
42 #include "dslm_inner_process.h"
43 #include "dslm_memory_mock.h"
44 #include "dslm_messenger_wrapper.h"
45 #include "dslm_msg_interface_mock.h"
46 #include "dslm_msg_serialize.h"
47 #include "dslm_msg_utils.h"
48 #include "dslm_ohos_request.h"
49 #include "dslm_ohos_verify.h"
50 #include "dslm_request_callback_mock.h"
51 #include "external_interface_adapter.h"
52 #include "hks_adapter.h"
53 #include "hks_type.h"
54 #include "messenger_device_socket_manager.h"
55 #include "messenger_device_status_manager.h"
56 #include "utils_datetime.h"
57 #include "utils_mem.h"
58 #include "utils_timer.h"
59 #include "utils_tlv.h"
60 #include "utils_work_queue.h"
61
62 using namespace std;
63 using namespace std::chrono;
64 using namespace testing;
65 using namespace testing::ext;
66
67 typedef struct QueueMsgData {
68 DeviceIdentify srcIdentity;
69 uint32_t msgLen;
70 uint8_t msgData[1];
71 } QueueMsgData;
72
73 #define MESSENGER_PROCESS_QUEUE_SIZE 256
74 #define MESSENGER_PROCESS_QUEUE_NAME "messenger_queue"
75 #define MAX_CRED_LEN 81920
76 #define PTR_LEN 4
77 #define BUFF_LEN 8
78 #define MSG_BUFF_MAX_LENGTH (81920 * 4)
79
80 // for testing
81 extern "C" {
82 extern bool CheckMessage(const uint8_t *msg, uint32_t length);
83 extern void DoTimerProcess(TimerProc callback, const void *context);
84 QueueMsgData *CreateQueueMsgData(const DeviceIdentify *devId, const uint8_t *msg, uint32_t msgLen,
85 uint32_t *queueDataLen);
86 int32_t OnPeerMsgReceived(const DeviceIdentify *devId, const uint8_t *msg, uint32_t len);
87 int32_t OnPeerStatusReceiver(const DeviceIdentify *deviceId, uint32_t status, int32_t level);
88 int32_t OnSendResultNotifier(const DeviceIdentify *devId, uint64_t transNo, uint32_t result);
89 }
90
91 namespace OHOS {
92 namespace Security {
93 namespace DslmUnitTest {
94
95 static uint8_t CRED[] = {0x01, 0x01, 0xa5, 0x0b, 0x30, 0x82, 0x0b, 0xa1, 0x30, 0x82, 0x0a, 0x8b, 0xa0, 0x03, 0x02, 0x01,
96 0x02, 0x02, 0x01, 0x01, 0x30, 0x0b, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x30, 0x7f,
97 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x43, 0x4e, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03,
98 0x55, 0x04, 0x08, 0x0c, 0x0a, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x31, 0x13, 0x30, 0x11,
99 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x0a, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x31, 0x13,
100 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x0c, 0x0a, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x77, 0x6f, 0x72, 0x6c, 0x64,
101 0x31, 0x16, 0x30, 0x14, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x0d, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x77, 0x6f, 0x72,
102 0x6c, 0x64, 0x31, 0x31, 0x31, 0x31, 0x19, 0x30, 0x17, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09,
103 0x01, 0x16, 0x0a, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x30, 0x1e, 0x17, 0x0d, 0x32, 0x34,
104 0x30, 0x34, 0x32, 0x38, 0x30, 0x39, 0x35, 0x36, 0x31, 0x32, 0x5a, 0x17, 0x0d, 0x33, 0x34, 0x30, 0x34, 0x32, 0x38,
105 0x30, 0x39, 0x35, 0x36, 0x31, 0x32, 0x5a, 0x30, 0x1a, 0x31, 0x18, 0x30, 0x16, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13,
106 0x0f, 0x41, 0x20, 0x4b, 0x65, 0x79, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x20, 0x4b, 0x65, 0x79, 0x30, 0x82, 0x01,
107 0x20, 0x30, 0x0b, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x03, 0x82, 0x01, 0x0f, 0x00,
108 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xc2, 0x61, 0x0a, 0xad, 0xa5, 0x33, 0xf8, 0x8f, 0x1e, 0xf3,
109 0x2d, 0xf8, 0x0e, 0x4a, 0x93, 0xa2, 0xcc, 0x71, 0x85, 0xdd, 0x62, 0x0e, 0xec, 0x5e, 0xd5, 0xa7, 0xfa, 0x0b, 0x2b,
110 0xdc, 0x3e, 0x9b, 0xb4, 0x06, 0xec, 0xe6, 0xea, 0x1c, 0x8f, 0x9a, 0x06, 0xfd, 0x90, 0x8f, 0xbb, 0xea, 0xe1, 0xe3,
111 0x77, 0xa1, 0xd5, 0x58, 0x73, 0xae, 0xba, 0xb1, 0x68, 0xce, 0x3a, 0xa7, 0x50, 0xf0, 0x95, 0x0d, 0x24, 0x80, 0x48,
112 0x06, 0xb1, 0x1b, 0x47, 0x7b, 0x09, 0x3e, 0x6a, 0xe8, 0x27, 0x33, 0x09, 0x82, 0xbb, 0x05, 0x8b, 0x88, 0x56, 0x6f,
113 0xb8, 0xbe, 0x61, 0x20, 0xe4, 0x9d, 0x13, 0xbc, 0x5b, 0x96, 0x70, 0xd1, 0x56, 0xfd, 0xf7, 0x2e, 0x34, 0x41, 0x6a,
114 0x02, 0xd3, 0xd9, 0xca, 0xb4, 0x2f, 0x1f, 0xf9, 0x59, 0x49, 0xf4, 0xb4, 0x04, 0x74, 0x3f, 0xe8, 0x5c, 0xc9, 0x9d,
115 0x9f, 0x2d, 0x54, 0x8c, 0xe2, 0x31, 0x39, 0x5d, 0xc3, 0x39, 0xf5, 0xa1, 0xee, 0x3a, 0x2a, 0x28, 0xe1, 0xa8, 0x89,
116 0x7d, 0xd6, 0x62, 0x1f, 0xc6, 0x4d, 0xd9, 0x0a, 0xc6, 0xb7, 0xae, 0x7f, 0x8d, 0xa8, 0x4a, 0x24, 0xf1, 0x4d, 0x56,
117 0xba, 0xc1, 0x1d, 0xd9, 0xa8, 0x5f, 0xbb, 0xc3, 0x60, 0xd1, 0x8b, 0x01, 0xa2, 0xb4, 0x39, 0x1f, 0xa7, 0xe8, 0x67,
118 0xcd, 0xd0, 0x00, 0x82, 0x37, 0xa3, 0x8b, 0xe6, 0xbb, 0x84, 0xd8, 0x71, 0xff, 0x0b, 0x3f, 0x93, 0x5a, 0x95, 0x27,
119 0x56, 0x54, 0x24, 0xa2, 0x33, 0xfe, 0x24, 0x10, 0x16, 0x29, 0x3a, 0x97, 0xc2, 0x5c, 0x25, 0x0b, 0x18, 0xbd, 0x82,
120 0xc2, 0x02, 0x3c, 0xf7, 0x45, 0x8c, 0x48, 0xef, 0xd4, 0x3b, 0xf8, 0xf6, 0x69, 0x3d, 0x3b, 0x96, 0xbd, 0x50, 0xff,
121 0x44, 0x52, 0xba, 0x61, 0xe7, 0xaa, 0x2e, 0x5f, 0xa8, 0x4a, 0xef, 0xdc, 0xca, 0x70, 0x8e, 0xf4, 0xed, 0x9d, 0x02,
122 0x03, 0x01, 0x00, 0x01, 0xa3, 0x82, 0x08, 0x91, 0x30, 0x82, 0x08, 0x8d, 0x30, 0x0b, 0x06, 0x03, 0x55, 0x1d, 0x0f,
123 0x04, 0x04, 0x03, 0x02, 0x07, 0x80, 0x30, 0x08, 0x06, 0x03, 0x55, 0x1d, 0x1f, 0x04, 0x01, 0x00, 0x30, 0x82, 0x08,
124 0x72, 0x06, 0x0c, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x8f, 0x5b, 0x02, 0x82, 0x78, 0x01, 0x03, 0x04, 0x82, 0x08, 0x60,
125 0x30, 0x82, 0x08, 0x5c, 0x02, 0x01, 0x00, 0x30, 0x72, 0x02, 0x01, 0x00, 0x06, 0x0d, 0x2b, 0x06, 0x01, 0x04, 0x01,
126 0x8f, 0x5b, 0x02, 0x82, 0x78, 0x02, 0x01, 0x04, 0x04, 0x5e, 0x7b, 0x22, 0x63, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e,
127 0x67, 0x65, 0x22, 0x3a, 0x22, 0x37, 0x38, 0x35, 0x36, 0x33, 0x34, 0x31, 0x32, 0x37, 0x38, 0x35, 0x36, 0x33, 0x34,
128 0x31, 0x32, 0x22, 0x2c, 0x22, 0x70, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x3a, 0x22, 0x5b,
129 0x7b, 0x5c, 0x22, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x5c, 0x22, 0x20, 0x3a, 0x20, 0x5c, 0x22, 0x30, 0x5c,
130 0x22, 0x2c, 0x5c, 0x22, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x5c, 0x22, 0x20, 0x3a, 0x20, 0x5c,
131 0x22, 0x30, 0x5c, 0x22, 0x7d, 0x5d, 0x22, 0x7d, 0x00, 0x30, 0x1d, 0x02, 0x01, 0x02, 0x06, 0x0d, 0x2b, 0x06, 0x01,
132 0x04, 0x01, 0x8f, 0x5b, 0x02, 0x82, 0x78, 0x02, 0x01, 0x02, 0x04, 0x09, 0x64, 0x73, 0x6c, 0x6d, 0x5f, 0x6b, 0x65,
133 0x79, 0x00, 0x30, 0x59, 0x02, 0x01, 0x02, 0x06, 0x0d, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x8f, 0x5b, 0x02, 0x82, 0x78,
134 0x02, 0x01, 0x03, 0x30, 0x45, 0x06, 0x0e, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x8f, 0x5b, 0x02, 0x82, 0x78, 0x02, 0x01,
135 0x03, 0x01, 0x04, 0x33, 0x7b, 0x22, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x3a,
136 0x22, 0x64, 0x73, 0x6c, 0x6d, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x22, 0x2c, 0x22, 0x41, 0x50, 0x4c,
137 0x22, 0x3a, 0x22, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x5f, 0x62, 0x61, 0x73, 0x69, 0x63, 0x22, 0x7d, 0x30, 0x16,
138 0x02, 0x01, 0x03, 0x06, 0x0e, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x8f, 0x5b, 0x02, 0x82, 0x78, 0x02, 0x02, 0x04, 0x0a,
139 0x0c, 0x01, 0x00, 0x30, 0x82, 0x07, 0x03, 0x02, 0x01, 0x03, 0x06, 0x0e, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x8f, 0x5b,
140 0x02, 0x82, 0x78, 0x02, 0x02, 0x02, 0x05, 0x04, 0x82, 0x06, 0xec, 0x65, 0x79, 0x4a, 0x30, 0x65, 0x58, 0x41, 0x69,
141 0x4f, 0x69, 0x41, 0x69, 0x52, 0x46, 0x4e, 0x4d, 0x49, 0x6e, 0x30, 0x3d, 0x2e, 0x65, 0x79, 0x4a, 0x30, 0x65, 0x58,
142 0x42, 0x6c, 0x49, 0x6a, 0x6f, 0x67, 0x49, 0x6d, 0x52, 0x6c, 0x59, 0x6e, 0x56, 0x6e, 0x49, 0x69, 0x77, 0x67, 0x49,
143 0x6d, 0x31, 0x68, 0x62, 0x6e, 0x56, 0x6d, 0x59, 0x57, 0x4e, 0x30, 0x64, 0x58, 0x4a, 0x6c, 0x49, 0x6a, 0x6f, 0x67,
144 0x49, 0x6b, 0x39, 0x49, 0x54, 0x31, 0x4d, 0x69, 0x4c, 0x43, 0x41, 0x69, 0x59, 0x6e, 0x4a, 0x68, 0x62, 0x6d, 0x51,
145 0x69, 0x4f, 0x69, 0x41, 0x69, 0x54, 0x30, 0x68, 0x50, 0x55, 0x79, 0x49, 0x73, 0x49, 0x43, 0x4a, 0x74, 0x62, 0x32,
146 0x52, 0x6c, 0x62, 0x43, 0x49, 0x36, 0x49, 0x43, 0x4a, 0x50, 0x53, 0x45, 0x39, 0x54, 0x49, 0x69, 0x77, 0x67, 0x49,
147 0x6e, 0x4e, 0x76, 0x5a, 0x6e, 0x52, 0x33, 0x59, 0x58, 0x4a, 0x6c, 0x56, 0x6d, 0x56, 0x79, 0x63, 0x32, 0x6c, 0x76,
148 0x62, 0x69, 0x49, 0x36, 0x49, 0x43, 0x49, 0x7a, 0x4c, 0x6a, 0x41, 0x75, 0x4d, 0x43, 0x49, 0x73, 0x49, 0x43, 0x4a,
149 0x7a, 0x5a, 0x57, 0x4e, 0x31, 0x63, 0x6d, 0x6c, 0x30, 0x65, 0x55, 0x78, 0x6c, 0x64, 0x6d, 0x56, 0x73, 0x49, 0x6a,
150 0x6f, 0x67, 0x49, 0x6c, 0x4e, 0x4d, 0x4d, 0x53, 0x49, 0x73, 0x49, 0x43, 0x4a, 0x7a, 0x61, 0x57, 0x64, 0x75, 0x56,
151 0x47, 0x6c, 0x74, 0x5a, 0x53, 0x49, 0x36, 0x49, 0x43, 0x49, 0x79, 0x4d, 0x44, 0x49, 0x79, 0x4d, 0x44, 0x67, 0x79,
152 0x4d, 0x6a, 0x45, 0x78, 0x4e, 0x54, 0x63, 0x79, 0x4d, 0x43, 0x49, 0x73, 0x49, 0x43, 0x4a, 0x32, 0x5a, 0x58, 0x4a,
153 0x7a, 0x61, 0x57, 0x39, 0x75, 0x49, 0x6a, 0x6f, 0x67, 0x49, 0x6a, 0x45, 0x75, 0x4d, 0x43, 0x34, 0x78, 0x49, 0x6e,
154 0x30, 0x3d, 0x2e, 0x4d, 0x47, 0x51, 0x43, 0x4d, 0x46, 0x78, 0x6d, 0x6f, 0x75, 0x4f, 0x5a, 0x42, 0x6d, 0x43, 0x62,
155 0x73, 0x34, 0x64, 0x30, 0x52, 0x76, 0x54, 0x64, 0x57, 0x4f, 0x59, 0x77, 0x53, 0x73, 0x58, 0x79, 0x44, 0x77, 0x77,
156 0x62, 0x61, 0x4e, 0x58, 0x4e, 0x4d, 0x61, 0x64, 0x72, 0x6f, 0x71, 0x6d, 0x41, 0x43, 0x47, 0x64, 0x58, 0x4d, 0x59,
157 0x79, 0x43, 0x30, 0x4a, 0x30, 0x2f, 0x75, 0x7a, 0x61, 0x39, 0x42, 0x42, 0x6b, 0x52, 0x2f, 0x67, 0x49, 0x77, 0x42,
158 0x35, 0x5a, 0x75, 0x6d, 0x6b, 0x6d, 0x34, 0x45, 0x68, 0x66, 0x76, 0x48, 0x6f, 0x63, 0x45, 0x57, 0x6a, 0x34, 0x67,
159 0x57, 0x2b, 0x61, 0x44, 0x63, 0x61, 0x6e, 0x42, 0x4d, 0x49, 0x41, 0x37, 0x33, 0x6f, 0x6e, 0x4c, 0x5a, 0x42, 0x59,
160 0x71, 0x56, 0x4f, 0x73, 0x65, 0x58, 0x61, 0x4d, 0x6a, 0x7a, 0x39, 0x4f, 0x2f, 0x2f, 0x48, 0x4f, 0x58, 0x4e, 0x37,
161 0x59, 0x36, 0x72, 0x30, 0x54, 0x30, 0x2e, 0x57, 0x33, 0x73, 0x69, 0x64, 0x58, 0x4e, 0x6c, 0x63, 0x6c, 0x42, 0x31,
162 0x59, 0x6d, 0x78, 0x70, 0x59, 0x30, 0x74, 0x6c, 0x65, 0x53, 0x49, 0x36, 0x49, 0x43, 0x4a, 0x4e, 0x53, 0x47, 0x39,
163 0x33, 0x52, 0x6b, 0x46, 0x5a, 0x53, 0x45, 0x74, 0x76, 0x57, 0x6b, 0x6c, 0x36, 0x61, 0x6a, 0x42, 0x44, 0x51, 0x56,
164 0x46, 0x5a, 0x53, 0x6b, 0x74, 0x35, 0x55, 0x55, 0x52, 0x42, 0x64, 0x30, 0x6c, 0x4a, 0x51, 0x56, 0x46, 0x46, 0x54,
165 0x45, 0x45, 0x79, 0x53, 0x55, 0x46, 0x43, 0x52, 0x33, 0x56, 0x4e, 0x61, 0x46, 0x56, 0x47, 0x52, 0x6d, 0x35, 0x73,
166 0x55, 0x47, 0x74, 0x56, 0x64, 0x30, 0x31, 0x33, 0x64, 0x44, 0x68, 0x70, 0x51, 0x33, 0x4a, 0x50, 0x52, 0x55, 0x64,
167 0x45, 0x4c, 0x30, 0x78, 0x52, 0x61, 0x55, 0x31, 0x46, 0x4d, 0x6d, 0x5a, 0x36, 0x54, 0x45, 0x30, 0x72, 0x63, 0x32,
168 0x52, 0x61, 0x52, 0x58, 0x68, 0x4a, 0x4f, 0x57, 0x51, 0x78, 0x4e, 0x30, 0x52, 0x73, 0x57, 0x47, 0x68, 0x4a, 0x55,
169 0x32, 0x59, 0x72, 0x57, 0x6e, 0x52, 0x7a, 0x65, 0x46, 0x52, 0x4f, 0x56, 0x44, 0x52, 0x30, 0x4e, 0x44, 0x4e, 0x44,
170 0x53, 0x57, 0x31, 0x59, 0x62, 0x54, 0x6c, 0x74, 0x65, 0x6e, 0x4a, 0x4d, 0x4f, 0x54, 0x56, 0x74, 0x4f, 0x43, 0x74,
171 0x4b, 0x57, 0x45, 0x4a, 0x5a, 0x53, 0x47, 0x67, 0x7a, 0x61, 0x30, 0x6c, 0x54, 0x5a, 0x45, 0x6c, 0x6e, 0x5a, 0x48,
172 0x41, 0x78, 0x64, 0x56, 0x52, 0x6d, 0x62, 0x45, 0x5a, 0x49, 0x56, 0x6a, 0x42, 0x59, 0x5a, 0x6d, 0x31, 0x70, 0x59,
173 0x6e, 0x67, 0x72, 0x4d, 0x6c, 0x52, 0x4d, 0x54, 0x47, 0x35, 0x51, 0x59, 0x33, 0x56, 0x58, 0x4d, 0x46, 0x42, 0x57,
174 0x54, 0x58, 0x68, 0x4b, 0x4f, 0x44, 0x5a, 0x6e, 0x50, 0x54, 0x30, 0x69, 0x4c, 0x43, 0x41, 0x69, 0x63, 0x32, 0x6c,
175 0x6e, 0x62, 0x6d, 0x46, 0x30, 0x64, 0x58, 0x4a, 0x6c, 0x49, 0x6a, 0x6f, 0x67, 0x49, 0x6b, 0x31, 0x48, 0x55, 0x55,
176 0x4e, 0x4e, 0x51, 0x30, 0x5a, 0x34, 0x56, 0x47, 0x78, 0x6c, 0x64, 0x6a, 0x68, 0x58, 0x56, 0x6a, 0x5a, 0x6b, 0x4e,
177 0x6b, 0x74, 0x75, 0x65, 0x46, 0x70, 0x79, 0x61, 0x33, 0x70, 0x52, 0x62, 0x47, 0x59, 0x33, 0x53, 0x45, 0x38, 0x35,
178 0x54, 0x6d, 0x31, 0x55, 0x61, 0x33, 0x4e, 0x58, 0x65, 0x54, 0x56, 0x34, 0x61, 0x46, 0x56, 0x4f, 0x63, 0x6a, 0x6c,
179 0x4d, 0x61, 0x6d, 0x6c, 0x4d, 0x63, 0x6e, 0x55, 0x33, 0x64, 0x45, 0x59, 0x31, 0x65, 0x6d, 0x59, 0x72, 0x4d, 0x45,
180 0x4a, 0x5a, 0x65, 0x47, 0x35, 0x32, 0x57, 0x58, 0x67, 0x79, 0x62, 0x56, 0x46, 0x4a, 0x64, 0x32, 0x4e, 0x68, 0x65,
181 0x6e, 0x56, 0x74, 0x64, 0x30, 0x64, 0x73, 0x61, 0x47, 0x78, 0x4f, 0x52, 0x48, 0x67, 0x72, 0x5a, 0x48, 0x4a, 0x30,
182 0x5a, 0x30, 0x4a, 0x7a, 0x53, 0x48, 0x46, 0x4c, 0x63, 0x6b, 0x64, 0x71, 0x63, 0x57, 0x52, 0x45, 0x4e, 0x44, 0x4e,
183 0x54, 0x62, 0x44, 0x6b, 0x7a, 0x52, 0x33, 0x42, 0x33, 0x4e, 0x45, 0x38, 0x33, 0x55, 0x6b, 0x35, 0x52, 0x55, 0x7a,
184 0x4a, 0x51, 0x64, 0x6e, 0x67, 0x34, 0x53, 0x6d, 0x74, 0x4b, 0x59, 0x6e, 0x52, 0x46, 0x56, 0x57, 0x56, 0x79, 0x5a,
185 0x48, 0x59, 0x76, 0x4e, 0x56, 0x4d, 0x69, 0x66, 0x53, 0x77, 0x67, 0x65, 0x79, 0x4a, 0x31, 0x63, 0x32, 0x56, 0x79,
186 0x55, 0x48, 0x56, 0x69, 0x62, 0x47, 0x6c, 0x6a, 0x53, 0x32, 0x56, 0x35, 0x49, 0x6a, 0x6f, 0x67, 0x49, 0x6b, 0x31,
187 0x49, 0x62, 0x33, 0x64, 0x47, 0x51, 0x56, 0x6c, 0x49, 0x53, 0x32, 0x39, 0x61, 0x53, 0x58, 0x70, 0x71, 0x4d, 0x45,
188 0x4e, 0x42, 0x55, 0x56, 0x6c, 0x4b, 0x53, 0x33, 0x6c, 0x52, 0x52, 0x45, 0x46, 0x33, 0x53, 0x55, 0x6c, 0x42, 0x55,
189 0x55, 0x56, 0x4d, 0x51, 0x54, 0x4a, 0x4a, 0x51, 0x55, 0x4a, 0x46, 0x51, 0x6b, 0x46, 0x47, 0x57, 0x54, 0x6b, 0x72,
190 0x4d, 0x30, 0x52, 0x61, 0x54, 0x48, 0x4d, 0x34, 0x54, 0x6e, 0x52, 0x61, 0x52, 0x48, 0x56, 0x73, 0x5a, 0x48, 0x52,
191 0x77, 0x51, 0x6d, 0x70, 0x31, 0x61, 0x6c, 0x42, 0x32, 0x64, 0x32, 0x6c, 0x6c, 0x55, 0x44, 0x6c, 0x55, 0x64, 0x6b,
192 0x31, 0x50, 0x57, 0x46, 0x5a, 0x72, 0x4e, 0x57, 0x5a, 0x32, 0x53, 0x6b, 0x68, 0x46, 0x55, 0x58, 0x59, 0x32, 0x57,
193 0x45, 0x52, 0x6c, 0x62, 0x45, 0x64, 0x50, 0x4e, 0x47, 0x52, 0x6e, 0x55, 0x56, 0x6f, 0x7a, 0x4e, 0x6c, 0x56, 0x4b,
194 0x51, 0x32, 0x6c, 0x56, 0x64, 0x31, 0x55, 0x79, 0x4c, 0x33, 0x4a, 0x4c, 0x63, 0x6b, 0x4e, 0x72, 0x65, 0x6e, 0x46,
195 0x76, 0x53, 0x30, 0x74, 0x74, 0x61, 0x58, 0x4e, 0x4e, 0x61, 0x30, 0x59, 0x32, 0x61, 0x46, 0x46, 0x6e, 0x62, 0x6c,
196 0x5a, 0x46, 0x5a, 0x33, 0x6c, 0x33, 0x61, 0x33, 0x68, 0x61, 0x56, 0x32, 0x34, 0x7a, 0x61, 0x48, 0x46, 0x6a, 0x65,
197 0x6e, 0x67, 0x7a, 0x63, 0x44, 0x64, 0x7a, 0x61, 0x6d, 0x46, 0x32, 0x53, 0x33, 0x6c, 0x53, 0x59, 0x6e, 0x52, 0x58,
198 0x56, 0x57, 0x35, 0x58, 0x64, 0x6d, 0x74, 0x54, 0x56, 0x32, 0x63, 0x39, 0x50, 0x53, 0x49, 0x73, 0x49, 0x43, 0x4a,
199 0x7a, 0x61, 0x57, 0x64, 0x75, 0x59, 0x58, 0x52, 0x31, 0x63, 0x6d, 0x55, 0x69, 0x4f, 0x69, 0x41, 0x69, 0x54, 0x55,
200 0x64, 0x52, 0x51, 0x30, 0x31, 0x47, 0x55, 0x32, 0x4a, 0x48, 0x4d, 0x7a, 0x64, 0x4d, 0x63, 0x30, 0x64, 0x7a, 0x52,
201 0x6b, 0x70, 0x4c, 0x5a, 0x31, 0x6c, 0x44, 0x56, 0x55, 0x52, 0x30, 0x53, 0x33, 0x42, 0x74, 0x51, 0x33, 0x46, 0x56,
202 0x52, 0x48, 0x63, 0x31, 0x63, 0x6b, 0x31, 0x4d, 0x56, 0x6b, 0x68, 0x6a, 0x51, 0x33, 0x5a, 0x74, 0x61, 0x44, 0x56,
203 0x68, 0x63, 0x56, 0x68, 0x72, 0x51, 0x6d, 0x51, 0x32, 0x52, 0x7a, 0x6c, 0x7a, 0x55, 0x44, 0x5a, 0x47, 0x64, 0x30,
204 0x52, 0x71, 0x62, 0x6d, 0x64, 0x59, 0x65, 0x45, 0x74, 0x73, 0x51, 0x31, 0x52, 0x4d, 0x5a, 0x30, 0x6c, 0x33, 0x5a,
205 0x48, 0x56, 0x34, 0x64, 0x45, 0x67, 0x30, 0x59, 0x55, 0x51, 0x35, 0x52, 0x6a, 0x4e, 0x33, 0x54, 0x30, 0x74, 0x51,
206 0x4e, 0x6e, 0x5a, 0x4a, 0x4d, 0x31, 0x46, 0x76, 0x63, 0x56, 0x4e, 0x6e, 0x65, 0x57, 0x4a, 0x49, 0x4d, 0x6b, 0x5a,
207 0x6a, 0x64, 0x79, 0x74, 0x46, 0x59, 0x33, 0x6f, 0x32, 0x4d, 0x6b, 0x30, 0x33, 0x54, 0x30, 0x52, 0x74, 0x4e, 0x30,
208 0x70, 0x33, 0x52, 0x57, 0x52, 0x6d, 0x5a, 0x58, 0x6f, 0x77, 0x53, 0x6b, 0x4a, 0x31, 0x59, 0x30, 0x64, 0x4b, 0x4d,
209 0x30, 0x68, 0x4b, 0x5a, 0x58, 0x56, 0x56, 0x56, 0x79, 0x4a, 0x39, 0x4c, 0x43, 0x42, 0x37, 0x49, 0x6e, 0x56, 0x7a,
210 0x5a, 0x58, 0x4a, 0x51, 0x64, 0x57, 0x4a, 0x73, 0x61, 0x57, 0x4e, 0x4c, 0x5a, 0x58, 0x6b, 0x69, 0x4f, 0x69, 0x41,
211 0x69, 0x54, 0x55, 0x68, 0x76, 0x64, 0x30, 0x5a, 0x42, 0x57, 0x55, 0x68, 0x4c, 0x62, 0x31, 0x70, 0x4a, 0x65, 0x6d,
212 0x6f, 0x77, 0x51, 0x30, 0x46, 0x52, 0x57, 0x55, 0x70, 0x4c, 0x65, 0x56, 0x46, 0x45, 0x51, 0x58, 0x64, 0x4a, 0x53,
213 0x55, 0x46, 0x52, 0x52, 0x55, 0x78, 0x42, 0x4d, 0x6b, 0x6c, 0x42, 0x51, 0x6b, 0x52, 0x46, 0x4d, 0x48, 0x4e, 0x50,
214 0x4d, 0x55, 0x56, 0x57, 0x63, 0x58, 0x56, 0x69, 0x55, 0x48, 0x4d, 0x78, 0x62, 0x44, 0x4e, 0x61, 0x64, 0x6d, 0x70,
215 0x42, 0x54, 0x45, 0x35, 0x78, 0x52, 0x6b, 0x63, 0x72, 0x55, 0x6c, 0x42, 0x49, 0x65, 0x69, 0x39, 0x4e, 0x4b, 0x33,
216 0x52, 0x50, 0x65, 0x55, 0x4e, 0x36, 0x63, 0x54, 0x4a, 0x75, 0x4e, 0x55, 0x46, 0x4e, 0x52, 0x6e, 0x55, 0x72, 0x4d,
217 0x57, 0x78, 0x73, 0x55, 0x45, 0x46, 0x68, 0x56, 0x45, 0x64, 0x59, 0x59, 0x7a, 0x51, 0x77, 0x54, 0x79, 0x39, 0x75,
218 0x54, 0x47, 0x6c, 0x75, 0x65, 0x69, 0x38, 0x34, 0x65, 0x6d, 0x5a, 0x61, 0x4e, 0x48, 0x52, 0x45, 0x51, 0x57, 0x6c,
219 0x55, 0x62, 0x33, 0x4e, 0x42, 0x55, 0x6d, 0x6c, 0x4b, 0x4b, 0x32, 0x30, 0x7a, 0x63, 0x6b, 0x56, 0x57, 0x54, 0x55,
220 0x5a, 0x72, 0x51, 0x69, 0x74, 0x6d, 0x62, 0x6e, 0x68, 0x35, 0x53, 0x45, 0x46, 0x44, 0x63, 0x32, 0x55, 0x72, 0x59,
221 0x57, 0x70, 0x48, 0x64, 0x6d, 0x5a, 0x78, 0x5a, 0x32, 0x46, 0x32, 0x61, 0x6a, 0x6c, 0x47, 0x54, 0x58, 0x4e, 0x49,
222 0x59, 0x6a, 0x4a, 0x4d, 0x52, 0x56, 0x70, 0x51, 0x5a, 0x6d, 0x6b, 0x72, 0x64, 0x7a, 0x30, 0x39, 0x49, 0x69, 0x77,
223 0x67, 0x49, 0x6e, 0x4e, 0x70, 0x5a, 0x32, 0x35, 0x68, 0x64, 0x48, 0x56, 0x79, 0x5a, 0x53, 0x49, 0x36, 0x49, 0x43,
224 0x4a, 0x4e, 0x52, 0x30, 0x31, 0x44, 0x54, 0x55, 0x56, 0x30, 0x64, 0x44, 0x63, 0x31, 0x56, 0x47, 0x30, 0x77, 0x55,
225 0x6d, 0x64, 0x74, 0x59, 0x6c, 0x6b, 0x76, 0x62, 0x32, 0x56, 0x70, 0x62, 0x30, 0x59, 0x33, 0x63, 0x48, 0x63, 0x32,
226 0x4b, 0x32, 0x38, 0x76, 0x5a, 0x45, 0x4a, 0x6d, 0x57, 0x54, 0x46, 0x43, 0x56, 0x56, 0x52, 0x30, 0x52, 0x48, 0x6c,
227 0x56, 0x62, 0x6a, 0x46, 0x79, 0x57, 0x6a, 0x6c, 0x74, 0x54, 0x57, 0x31, 0x4e, 0x57, 0x47, 0x78, 0x79, 0x51, 0x30,
228 0x6f, 0x76, 0x61, 0x47, 0x46, 0x54, 0x63, 0x32, 0x35, 0x6f, 0x53, 0x47, 0x31, 0x32, 0x64, 0x32, 0x68, 0x33, 0x53,
229 0x58, 0x5a, 0x6d, 0x59, 0x54, 0x42, 0x54, 0x5a, 0x30, 0x67, 0x7a, 0x57, 0x45, 0x4e, 0x42, 0x62, 0x55, 0x52, 0x55,
230 0x57, 0x6d, 0x30, 0x78, 0x4d, 0x6e, 0x70, 0x54, 0x55, 0x48, 0x63, 0x34, 0x62, 0x31, 0x6c, 0x49, 0x4c, 0x33, 0x51,
231 0x76, 0x4e, 0x58, 0x46, 0x30, 0x53, 0x30, 0x74, 0x48, 0x64, 0x6c, 0x70, 0x46, 0x5a, 0x57, 0x4a, 0x6d, 0x53, 0x6c,
232 0x64, 0x49, 0x51, 0x56, 0x45, 0x35, 0x4d, 0x46, 0x70, 0x6e, 0x62, 0x6c, 0x68, 0x55, 0x64, 0x57, 0x4e, 0x4f, 0x52,
233 0x30, 0x46, 0x51, 0x59, 0x30, 0x35, 0x42, 0x4f, 0x45, 0x6b, 0x39, 0x49, 0x6e, 0x31, 0x64, 0x00, 0x30, 0x18, 0x02,
234 0x01, 0x02, 0x06, 0x0d, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x8f, 0x5b, 0x02, 0x82, 0x78, 0x02, 0x01, 0x0b, 0x04, 0x04,
235 0x00, 0x00, 0x00, 0x00, 0x30, 0x18, 0x02, 0x01, 0x02, 0x06, 0x0d, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x8f, 0x5b, 0x02,
236 0x82, 0x78, 0x02, 0x01, 0x05, 0x04, 0x04, 0x02, 0x00, 0x00, 0x00, 0x30, 0x16, 0x02, 0x01, 0x02, 0x06, 0x0e, 0x2b,
237 0x06, 0x01, 0x04, 0x01, 0x8f, 0x5b, 0x02, 0x82, 0x78, 0x02, 0x04, 0x01, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0b, 0x06,
238 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x03, 0x82, 0x01, 0x01, 0x00, 0x8d, 0xb8, 0xee, 0xa7,
239 0x12, 0x30, 0x8c, 0x48, 0xc0, 0x57, 0x26, 0x99, 0xed, 0x1b, 0x48, 0x93, 0xdd, 0x7c, 0x7f, 0x04, 0xbd, 0x8b, 0x2a,
240 0x70, 0x2d, 0x27, 0x02, 0x8d, 0x98, 0xf0, 0x27, 0x78, 0xc2, 0x10, 0x1e, 0xa9, 0x5a, 0x3d, 0xce, 0x7b, 0x0d, 0x16,
241 0x57, 0x33, 0xd4, 0x5b, 0x87, 0x79, 0x65, 0xf0, 0x6f, 0xc4, 0xb0, 0x61, 0xef, 0x04, 0xa5, 0x6e, 0xd6, 0xc5, 0xbe,
242 0xf1, 0xbe, 0x6d, 0xaf, 0x76, 0x6f, 0x88, 0xc1, 0x37, 0xe8, 0xcd, 0x9d, 0x11, 0xdf, 0x57, 0x79, 0xc9, 0x74, 0x9e,
243 0x91, 0x8c, 0xb6, 0x82, 0x8a, 0xc7, 0x82, 0x5c, 0x25, 0x68, 0x90, 0x70, 0x9a, 0x31, 0x4e, 0x06, 0x7d, 0x57, 0x57,
244 0x26, 0x60, 0x09, 0x52, 0xf5, 0x4e, 0x6c, 0xee, 0xd8, 0x6b, 0x36, 0x80, 0x35, 0x21, 0xa9, 0xb2, 0x7a, 0x6b, 0x26,
245 0x4c, 0x44, 0xbd, 0xb6, 0x37, 0x27, 0x66, 0xe8, 0x26, 0x12, 0x51, 0xd2, 0x5b, 0x85, 0x3e, 0x92, 0x5a, 0xd3, 0x9d,
246 0xca, 0xc5, 0x92, 0xcb, 0x13, 0xa0, 0x8a, 0x52, 0xb7, 0xa7, 0xf3, 0x2b, 0xdc, 0x6d, 0x65, 0xf0, 0xb6, 0x52, 0xbc,
247 0xf7, 0x40, 0xdc, 0x8e, 0xa8, 0x6b, 0xda, 0xbc, 0x6a, 0xb4, 0x50, 0x63, 0x20, 0xe4, 0x34, 0xf4, 0x59, 0xaa, 0x88,
248 0xdc, 0xe3, 0x7a, 0x88, 0xde, 0xcd, 0xd6, 0xb6, 0x0c, 0x19, 0xfc, 0x1f, 0xe2, 0x47, 0xae, 0x35, 0xcf, 0x91, 0x7e,
249 0x7b, 0x05, 0x9f, 0x7b, 0x27, 0x80, 0x25, 0x21, 0x06, 0x43, 0xa0, 0x28, 0xb0, 0xa2, 0x71, 0xda, 0xc8, 0x63, 0xed,
250 0x7d, 0x58, 0x2e, 0x20, 0xfc, 0xde, 0x00, 0x1a, 0x04, 0xba, 0xcc, 0x5f, 0x78, 0x99, 0x64, 0xa5, 0x65, 0x2f, 0x10,
251 0x7b, 0x98, 0xc0, 0x36, 0x4a, 0x5f, 0x82, 0xe6, 0x77, 0x81, 0x13, 0xda, 0xa0, 0x21, 0xec, 0x80, 0x0f, 0x46, 0x12,
252 0x13, 0x50, 0xdd, 0xe6, 0xee, 0x01, 0x01, 0xcf, 0x03, 0x30, 0x82, 0x03, 0xcb, 0x30, 0x82, 0x02, 0xb3, 0xa0, 0x03,
253 0x02, 0x01, 0x02, 0x02, 0x01, 0x03, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b,
254 0x05, 0x00, 0x30, 0x7e, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x43, 0x4e, 0x31, 0x13,
255 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x08, 0x0c, 0x0a, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x77, 0x6f, 0x72, 0x6c, 0x64,
256 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x0a, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x77, 0x6f, 0x72,
257 0x6c, 0x64, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x0c, 0x0a, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x77,
258 0x6f, 0x72, 0x6c, 0x64, 0x31, 0x15, 0x30, 0x13, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x0c, 0x68, 0x65, 0x6c, 0x6c,
259 0x6f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x31, 0x31, 0x31, 0x19, 0x30, 0x17, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7,
260 0x0d, 0x01, 0x09, 0x01, 0x16, 0x0a, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x30, 0x1e, 0x17,
261 0x0d, 0x32, 0x32, 0x30, 0x31, 0x32, 0x32, 0x30, 0x39, 0x32, 0x35, 0x33, 0x33, 0x5a, 0x17, 0x0d, 0x33, 0x32, 0x30,
262 0x31, 0x32, 0x30, 0x30, 0x39, 0x32, 0x35, 0x33, 0x33, 0x5a, 0x30, 0x7f, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55,
263 0x04, 0x06, 0x13, 0x02, 0x43, 0x4e, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x08, 0x0c, 0x0a, 0x68, 0x65,
264 0x6c, 0x6c, 0x6f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x0a,
265 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x0b,
266 0x0c, 0x0a, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x31, 0x16, 0x30, 0x14, 0x06, 0x03, 0x55,
267 0x04, 0x03, 0x0c, 0x0d, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x31, 0x31, 0x31, 0x31, 0x19,
268 0x30, 0x17, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09, 0x01, 0x16, 0x0a, 0x68, 0x65, 0x6c, 0x6c,
269 0x6f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7,
270 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01,
271 0x00, 0xbc, 0x1c, 0x78, 0x55, 0x11, 0xb6, 0x37, 0xba, 0xea, 0xe2, 0x5b, 0x7c, 0x00, 0x70, 0x03, 0x05, 0xc0, 0x85,
272 0x1d, 0xf9, 0x52, 0x26, 0x01, 0x42, 0xa7, 0x58, 0x06, 0x25, 0xb2, 0x21, 0xcb, 0x3e, 0xcd, 0xc1, 0x86, 0x91, 0xc7,
273 0x6f, 0xae, 0xe4, 0x8f, 0x33, 0xf7, 0xad, 0xc4, 0x1b, 0x67, 0x69, 0x75, 0x2d, 0x23, 0x16, 0x8e, 0x85, 0x7c, 0x8d,
274 0x77, 0x24, 0x54, 0xc3, 0x85, 0xa8, 0xe9, 0x53, 0x96, 0xb6, 0x25, 0x18, 0xcd, 0xc6, 0xf3, 0x46, 0xd5, 0x69, 0x67,
275 0x04, 0x83, 0x0e, 0x1c, 0xfa, 0x79, 0x12, 0x93, 0xe0, 0x29, 0x1a, 0x63, 0x54, 0x6b, 0xaf, 0x47, 0x2b, 0x78, 0x7e,
276 0xe6, 0xf7, 0xf3, 0xf3, 0x57, 0xd5, 0x98, 0x92, 0xf5, 0xcd, 0x7d, 0x15, 0x69, 0x88, 0x80, 0xfb, 0x00, 0xb3, 0xac,
277 0x57, 0x35, 0xc3, 0x96, 0x86, 0x2a, 0x1b, 0x05, 0x21, 0xc2, 0x18, 0xf0, 0x55, 0x28, 0x8b, 0x5e, 0x71, 0xaf, 0x00,
278 0x14, 0x45, 0x0f, 0xbf, 0x13, 0x29, 0x73, 0x78, 0x5d, 0xf4, 0xda, 0xa1, 0xb0, 0x90, 0x21, 0xd8, 0xcb, 0x8c, 0xd0,
279 0xaa, 0x7d, 0xe8, 0x86, 0x4b, 0xb6, 0xe6, 0xb3, 0xcb, 0x50, 0xec, 0x8e, 0xa7, 0xa8, 0x09, 0x36, 0xcf, 0xf7, 0x05,
280 0x58, 0x7b, 0xe9, 0xbf, 0x7f, 0xd6, 0x24, 0xf2, 0x3f, 0xb9, 0x5d, 0x0c, 0x3e, 0xd5, 0x57, 0x85, 0x10, 0x09, 0x30,
281 0xe9, 0xa4, 0x5b, 0x6b, 0x0d, 0x06, 0x3f, 0x52, 0xb0, 0x61, 0x7b, 0xdb, 0x0f, 0x9f, 0x4f, 0xba, 0x19, 0x60, 0x5f,
282 0x92, 0x48, 0xf3, 0xe6, 0x7d, 0x5a, 0x18, 0x4e, 0xc9, 0x3f, 0x6b, 0xe6, 0x07, 0x7a, 0x8c, 0x83, 0x12, 0x29, 0x12,
283 0x49, 0x95, 0x2d, 0x52, 0x31, 0x87, 0xa7, 0x70, 0x04, 0xe9, 0xad, 0xaf, 0xeb, 0x13, 0xef, 0x12, 0x7e, 0x53, 0x39,
284 0x93, 0x59, 0xb6, 0xe1, 0x34, 0x60, 0xa4, 0xcd, 0x23, 0xf1, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x53, 0x30, 0x51,
285 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x83, 0x4e, 0xaa, 0x7a, 0x40, 0xe7, 0x71, 0x93,
286 0xdc, 0xc5, 0xd8, 0x7f, 0xbb, 0x20, 0x63, 0x9c, 0x92, 0xaf, 0xc0, 0xd4, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23,
287 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x4d, 0x60, 0x01, 0x09, 0x97, 0x0c, 0x4f, 0x3a, 0x3e, 0x45, 0x07, 0xb3, 0x38,
288 0x99, 0x3b, 0x0c, 0xa6, 0x89, 0x11, 0x2f, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05,
289 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05,
290 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0x78, 0x0a, 0x42, 0x9b, 0x25, 0x05, 0xae, 0x0b, 0x6a, 0x63, 0xd1, 0xc4, 0xbe,
291 0xcd, 0xbe, 0x2f, 0xf1, 0xf4, 0x6a, 0xf0, 0xe3, 0xe3, 0x45, 0x53, 0xf2, 0x96, 0xa8, 0xc7, 0x5f, 0x82, 0x0c, 0xa6,
292 0x69, 0xe5, 0xd9, 0x53, 0x34, 0x0e, 0x43, 0x57, 0x0f, 0x44, 0x98, 0x3c, 0x2e, 0x48, 0xc6, 0x42, 0xb8, 0x6e, 0x0b,
293 0x60, 0x94, 0x6d, 0x11, 0x92, 0xbe, 0x1b, 0x95, 0x87, 0xfe, 0x3d, 0xd3, 0x5e, 0x9d, 0xb7, 0x9b, 0x59, 0x9b, 0xf0,
294 0xe1, 0x8d, 0xc9, 0x52, 0x84, 0x20, 0x49, 0xab, 0x1f, 0x74, 0x80, 0x3f, 0xac, 0x95, 0xd9, 0xb5, 0xfd, 0xe6, 0x55,
295 0x43, 0x4b, 0x98, 0xf9, 0x5c, 0x45, 0x66, 0x42, 0x3a, 0xd1, 0x89, 0x9a, 0xf9, 0x67, 0xb6, 0x9e, 0xff, 0xa9, 0x69,
296 0x7b, 0x24, 0x22, 0x1a, 0x88, 0x3e, 0xf7, 0xd9, 0xb6, 0x89, 0x53, 0x50, 0xd9, 0x72, 0x1c, 0xb7, 0x6a, 0x6d, 0x96,
297 0x58, 0x6a, 0x5c, 0x84, 0x11, 0x12, 0x04, 0xeb, 0x68, 0x4a, 0xf7, 0x72, 0xc0, 0x6f, 0x93, 0xd3, 0x14, 0x10, 0x71,
298 0x7c, 0xd8, 0x43, 0xe9, 0x87, 0x3e, 0xcc, 0xa6, 0xdf, 0x42, 0x42, 0xcc, 0x28, 0x6f, 0x64, 0x22, 0xb3, 0xf9, 0x02,
299 0x65, 0x21, 0x95, 0x09, 0xdd, 0x78, 0x28, 0x28, 0x7e, 0xcc, 0x56, 0xf8, 0x80, 0x49, 0x71, 0x9c, 0x58, 0xb2, 0x8e,
300 0x05, 0x86, 0x14, 0x0e, 0xdd, 0xc9, 0xf3, 0xf3, 0xcc, 0xb2, 0x16, 0xec, 0xa9, 0xbf, 0xab, 0x9b, 0xe5, 0x6a, 0x53,
301 0x9a, 0x21, 0x57, 0xc4, 0x6b, 0xfe, 0x74, 0x3e, 0x40, 0xbb, 0xc4, 0x15, 0xaf, 0x2b, 0xaf, 0x3e, 0xea, 0x63, 0xaf,
302 0xf6, 0x41, 0x26, 0xd4, 0xcb, 0xb4, 0x2f, 0x14, 0x2b, 0xfb, 0x31, 0x71, 0x43, 0xd6, 0x40, 0x87, 0xf7, 0x61, 0x4b,
303 0x1b, 0x09, 0x26, 0x58, 0x36, 0xaf, 0x33, 0x59, 0x1d, 0x54, 0xc5, 0xd9, 0x99, 0x5e, 0x78, 0x01, 0x01, 0xe3, 0x03,
304 0x30, 0x82, 0x03, 0xdf, 0x30, 0x82, 0x02, 0xc7, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x01, 0x02, 0x30, 0x0d, 0x06,
305 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x81, 0x92, 0x31, 0x0b, 0x30, 0x09,
306 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x43, 0x4e, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x08, 0x0c,
307 0x0a, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04,
308 0x07, 0x0c, 0x0a, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03,
309 0x55, 0x04, 0x0a, 0x0c, 0x0a, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x31, 0x13, 0x30, 0x11,
310 0x06, 0x03, 0x55, 0x04, 0x0b, 0x0c, 0x0a, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x31, 0x14,
311 0x30, 0x12, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x0b, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x77, 0x6f, 0x72, 0x6c, 0x64,
312 0x31, 0x31, 0x19, 0x30, 0x17, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09, 0x01, 0x16, 0x0a, 0x68,
313 0x65, 0x6c, 0x6c, 0x6f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x30, 0x1e, 0x17, 0x0d, 0x32, 0x32, 0x30, 0x31, 0x32, 0x32,
314 0x30, 0x39, 0x32, 0x33, 0x34, 0x38, 0x5a, 0x17, 0x0d, 0x33, 0x32, 0x30, 0x31, 0x32, 0x30, 0x30, 0x39, 0x32, 0x33,
315 0x34, 0x38, 0x5a, 0x30, 0x7e, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x43, 0x4e, 0x31,
316 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x08, 0x0c, 0x0a, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x77, 0x6f, 0x72, 0x6c,
317 0x64, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x0a, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x77, 0x6f,
318 0x72, 0x6c, 0x64, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x0c, 0x0a, 0x68, 0x65, 0x6c, 0x6c, 0x6f,
319 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x31, 0x15, 0x30, 0x13, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x0c, 0x68, 0x65, 0x6c,
320 0x6c, 0x6f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x31, 0x31, 0x31, 0x19, 0x30, 0x17, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86,
321 0xf7, 0x0d, 0x01, 0x09, 0x01, 0x16, 0x0a, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x30, 0x82,
322 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82,
323 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xb4, 0xc9, 0x17, 0xe4, 0x80, 0x87, 0xf7,
324 0x1c, 0x99, 0xcc, 0x45, 0xfa, 0x57, 0xb4, 0x9b, 0xc5, 0xb1, 0xec, 0xdf, 0x64, 0x72, 0x53, 0x18, 0xa1, 0x45, 0x46,
325 0xc8, 0x93, 0x8f, 0x0e, 0xfd, 0x0b, 0xf6, 0x41, 0x3f, 0xd6, 0x18, 0x3d, 0x1c, 0x46, 0xaf, 0x08, 0x15, 0x9a, 0x97,
326 0xd6, 0x4a, 0xeb, 0xda, 0xfe, 0x8b, 0x56, 0x22, 0x1f, 0x5f, 0x18, 0xd0, 0x5e, 0x68, 0x02, 0xea, 0x8f, 0xd2, 0xd7,
327 0x9e, 0x74, 0x30, 0x72, 0x3e, 0x28, 0xbc, 0x21, 0xa0, 0xea, 0xb8, 0x92, 0x99, 0xd6, 0x19, 0x4c, 0x8b, 0x5d, 0xef,
328 0x3d, 0x8d, 0x5c, 0x81, 0x47, 0x06, 0xef, 0xb7, 0x0a, 0xcc, 0x2e, 0x53, 0x32, 0x59, 0x8d, 0x4c, 0xb7, 0xac, 0xd1,
329 0xd7, 0x67, 0xf7, 0xf9, 0x58, 0xe1, 0xa8, 0xe5, 0xe2, 0x48, 0x14, 0xaf, 0x76, 0xc2, 0x11, 0x79, 0x69, 0xe2, 0xe8,
330 0x41, 0x40, 0xf6, 0x25, 0x9e, 0xdb, 0xa3, 0x72, 0xd7, 0x23, 0x98, 0x47, 0x4c, 0xb5, 0xc2, 0x50, 0x9a, 0x11, 0xe9,
331 0xaf, 0x62, 0x6c, 0xf5, 0xca, 0xb6, 0x91, 0x99, 0xde, 0xcb, 0x9f, 0x5a, 0x7b, 0x99, 0x24, 0x2c, 0x2c, 0xe9, 0x16,
332 0xaa, 0x63, 0xed, 0xcb, 0xa7, 0xcf, 0x94, 0x6c, 0xdd, 0x16, 0x6c, 0xd7, 0xe3, 0x63, 0xc3, 0x9a, 0x00, 0x05, 0x2d,
333 0x7c, 0xa8, 0x0c, 0xb5, 0x08, 0x40, 0x67, 0x79, 0xc2, 0xce, 0x8b, 0xa9, 0x48, 0x3e, 0xf2, 0x1c, 0x92, 0x78, 0x01,
334 0x1d, 0xdb, 0xb0, 0x73, 0x33, 0x8c, 0xe5, 0x80, 0x41, 0x5d, 0xea, 0x8e, 0x78, 0xd9, 0x3b, 0x15, 0x64, 0xe2, 0x21,
335 0xfe, 0x4c, 0xb9, 0x79, 0x6a, 0x39, 0x29, 0x59, 0xe7, 0xb5, 0xa9, 0xf1, 0x2a, 0x9f, 0x0f, 0x3c, 0x12, 0xe3, 0xd6,
336 0xb0, 0xc0, 0x8f, 0x5d, 0xbc, 0x6a, 0x63, 0x83, 0x21, 0xa1, 0xdd, 0x94, 0x00, 0xe5, 0x35, 0xd7, 0x18, 0x62, 0x2c,
337 0x9f, 0x97, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x53, 0x30, 0x51, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04,
338 0x16, 0x04, 0x14, 0x4d, 0x60, 0x01, 0x09, 0x97, 0x0c, 0x4f, 0x3a, 0x3e, 0x45, 0x07, 0xb3, 0x38, 0x99, 0x3b, 0x0c,
339 0xa6, 0x89, 0x11, 0x2f, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x9a, 0x77,
340 0x73, 0xe5, 0x45, 0xa4, 0x69, 0x42, 0xfe, 0xbf, 0xd4, 0x88, 0xf0, 0xa8, 0xce, 0x81, 0xf5, 0x51, 0xc8, 0x0c, 0x30,
341 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0d, 0x06,
342 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0x0a, 0xcb,
343 0x6d, 0x66, 0x56, 0x1b, 0x77, 0x07, 0xb8, 0x29, 0xcc, 0x04, 0x6a, 0x36, 0xf0, 0x5d, 0x0a, 0x54, 0xa7, 0x2d, 0xc6,
344 0x32, 0xd5, 0x38, 0x2c, 0xc3, 0x84, 0xa9, 0xc7, 0x22, 0xeb, 0x0b, 0x56, 0xa4, 0xe7, 0x67, 0xb0, 0x07, 0x79, 0x45,
345 0x39, 0xe8, 0xdc, 0xa8, 0x45, 0xf4, 0x91, 0x48, 0x81, 0x09, 0xd9, 0x33, 0x57, 0x90, 0x73, 0xbc, 0x33, 0x2c, 0x4d,
346 0x37, 0x79, 0x4f, 0xe1, 0x16, 0xa9, 0x41, 0xab, 0xce, 0xbc, 0x43, 0x4b, 0x13, 0xdf, 0x6c, 0xdb, 0xaf, 0x48, 0xb2,
347 0xe2, 0xcf, 0x0a, 0x9d, 0xe4, 0xeb, 0x39, 0xc9, 0x5f, 0x56, 0x56, 0xec, 0xc2, 0x2b, 0x4a, 0x9e, 0xc1, 0xcf, 0xee,
348 0xab, 0x05, 0x3b, 0xa1, 0xd8, 0x7f, 0x3b, 0xe0, 0x7f, 0xc1, 0x72, 0xf3, 0xd7, 0x68, 0x26, 0x41, 0xe1, 0x7d, 0xcd,
349 0xa6, 0x37, 0xee, 0xe2, 0xd4, 0x5c, 0x28, 0x4b, 0x52, 0x24, 0xa7, 0x55, 0x98, 0x89, 0x68, 0xb6, 0x35, 0xf5, 0xa8,
350 0xce, 0x5e, 0x60, 0x76, 0x39, 0x04, 0x34, 0x91, 0xd0, 0xcb, 0xd1, 0x62, 0xf4, 0xa5, 0x1f, 0xbf, 0xf0, 0x03, 0xd1,
351 0x44, 0x18, 0x9f, 0x06, 0x1c, 0x8e, 0xef, 0x68, 0x7c, 0x48, 0x33, 0x17, 0xf8, 0xf8, 0xe3, 0xb3, 0xf8, 0x4e, 0x30,
352 0xa8, 0xa2, 0x19, 0x65, 0xf6, 0x1e, 0x54, 0x17, 0x44, 0xa5, 0x9b, 0xdf, 0x54, 0x61, 0xd1, 0x6d, 0x2e, 0x5d, 0x12,
353 0x87, 0xea, 0x73, 0x83, 0x6d, 0x86, 0x53, 0x9b, 0x4d, 0x69, 0x70, 0x00, 0x88, 0x45, 0x81, 0x3c, 0xcb, 0xab, 0x2f,
354 0x32, 0xd9, 0x8d, 0xa3, 0x0d, 0x67, 0x09, 0x93, 0xdd, 0x7f, 0xcb, 0xdb, 0xbc, 0x17, 0x58, 0xd0, 0x02, 0xea, 0x1e,
355 0x98, 0x30, 0x98, 0xe4, 0x16, 0xa5, 0x67, 0xe0, 0x67, 0xd1, 0xe6, 0x50, 0x40, 0x79, 0x57, 0xba, 0x3c, 0x32, 0x65,
356 0xfa, 0x08, 0x2b, 0xea, 0x02, 0xb9, 0x4a, 0x01, 0x01, 0x0b, 0x04, 0x30, 0x82, 0x04, 0x07, 0x30, 0x82, 0x02, 0xef,
357 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x14, 0x4a, 0xfc, 0x65, 0x4f, 0x67, 0x13, 0x23, 0x9a, 0xe3, 0xeb, 0xb3, 0x60,
358 0xe6, 0x5a, 0x90, 0xef, 0xaa, 0x5e, 0x45, 0x8b, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01,
359 0x01, 0x0b, 0x05, 0x00, 0x30, 0x81, 0x92, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x43,
360 0x4e, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x08, 0x0c, 0x0a, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x77, 0x6f,
361 0x72, 0x6c, 0x64, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x07, 0x0c, 0x0a, 0x68, 0x65, 0x6c, 0x6c, 0x6f,
362 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x0a, 0x68, 0x65, 0x6c,
363 0x6c, 0x6f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x0c, 0x0a, 0x68,
364 0x65, 0x6c, 0x6c, 0x6f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x31, 0x14, 0x30, 0x12, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c,
365 0x0b, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x31, 0x31, 0x19, 0x30, 0x17, 0x06, 0x09, 0x2a,
366 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09, 0x01, 0x16, 0x0a, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x77, 0x6f, 0x72, 0x6c,
367 0x64, 0x30, 0x1e, 0x17, 0x0d, 0x32, 0x32, 0x30, 0x31, 0x32, 0x32, 0x30, 0x39, 0x32, 0x31, 0x34, 0x34, 0x5a, 0x17,
368 0x0d, 0x33, 0x32, 0x30, 0x31, 0x32, 0x30, 0x30, 0x39, 0x32, 0x31, 0x34, 0x34, 0x5a, 0x30, 0x81, 0x92, 0x31, 0x0b,
369 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x43, 0x4e, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04,
370 0x08, 0x0c, 0x0a, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03,
371 0x55, 0x04, 0x07, 0x0c, 0x0a, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x31, 0x13, 0x30, 0x11,
372 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x0a, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x31, 0x13,
373 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x0c, 0x0a, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x77, 0x6f, 0x72, 0x6c, 0x64,
374 0x31, 0x14, 0x30, 0x12, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x0b, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x77, 0x6f, 0x72,
375 0x6c, 0x64, 0x31, 0x31, 0x19, 0x30, 0x17, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09, 0x01, 0x16,
376 0x0a, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09,
377 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01,
378 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xe7, 0x7f, 0xdc, 0x2f, 0xfb, 0x9c, 0xa3, 0x15, 0x38, 0xd1, 0xe2, 0x21, 0x05,
379 0xc7, 0xbf, 0x76, 0x44, 0xec, 0x40, 0x27, 0x74, 0xc2, 0x6c, 0x02, 0xef, 0xeb, 0xc9, 0x7e, 0xc4, 0x01, 0x1b, 0x60,
380 0xb6, 0x3c, 0x51, 0xe9, 0xf7, 0x67, 0x1f, 0x62, 0xe7, 0x98, 0xb0, 0x9b, 0xab, 0x89, 0xac, 0x42, 0xb7, 0xaa, 0x15,
381 0x72, 0x7f, 0x78, 0xc3, 0x3c, 0x16, 0x40, 0xd9, 0x70, 0xbc, 0xb5, 0xad, 0x53, 0x0c, 0x6d, 0x35, 0x8b, 0xc0, 0x6c,
382 0x57, 0x09, 0x79, 0x97, 0xb1, 0x19, 0x5e, 0xfb, 0x6d, 0xd2, 0xdd, 0x0c, 0x70, 0xfe, 0xc0, 0xc0, 0x76, 0x10, 0x46,
383 0xbd, 0xab, 0xfa, 0x84, 0x87, 0xcf, 0x2a, 0x31, 0xf4, 0x89, 0xfe, 0xdf, 0xdb, 0xa8, 0xd1, 0x96, 0xd4, 0x59, 0x53,
384 0xbc, 0x32, 0x87, 0xb0, 0xb9, 0xb2, 0xc3, 0xd1, 0x3c, 0x98, 0xbe, 0x66, 0xa4, 0xa2, 0x5d, 0x3f, 0x9a, 0x43, 0x96,
385 0x6a, 0x7d, 0xcb, 0x53, 0xd0, 0x58, 0xae, 0x36, 0xb2, 0x40, 0x79, 0xb0, 0x7c, 0x8a, 0xfd, 0x27, 0x86, 0x86, 0x75,
386 0xf4, 0xeb, 0x82, 0xe5, 0x4a, 0xad, 0x37, 0x2c, 0xff, 0xe7, 0x95, 0x27, 0x27, 0x0e, 0x98, 0x2d, 0xef, 0xe6, 0x44,
387 0x20, 0xe2, 0xd6, 0x84, 0xd1, 0x4c, 0x49, 0xc3, 0xeb, 0x08, 0x4b, 0x23, 0x1c, 0x55, 0xc5, 0xe0, 0x15, 0x6f, 0x2a,
388 0x95, 0xc0, 0xad, 0x60, 0x8a, 0xb0, 0x32, 0xfc, 0xa2, 0xfd, 0x91, 0x1f, 0x13, 0xf0, 0xef, 0x1c, 0x7b, 0x6c, 0x46,
389 0x41, 0x8a, 0x11, 0x89, 0x24, 0xe0, 0xb0, 0x21, 0x86, 0xab, 0x4a, 0xa9, 0x86, 0x49, 0x2b, 0xe8, 0x41, 0xd6, 0x00,
390 0x04, 0x67, 0xfe, 0x8e, 0xc7, 0xca, 0xf2, 0xa1, 0x5f, 0x50, 0xec, 0x7d, 0x8b, 0x76, 0x4c, 0x01, 0x0a, 0xbc, 0xe1,
391 0x2c, 0x56, 0x3c, 0x65, 0x49, 0x4a, 0xc9, 0xd7, 0x57, 0xaa, 0x93, 0x72, 0x02, 0x79, 0xc7, 0x02, 0x03, 0x01, 0x00,
392 0x01, 0xa3, 0x53, 0x30, 0x51, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x9a, 0x77, 0x73,
393 0xe5, 0x45, 0xa4, 0x69, 0x42, 0xfe, 0xbf, 0xd4, 0x88, 0xf0, 0xa8, 0xce, 0x81, 0xf5, 0x51, 0xc8, 0x0c, 0x30, 0x1f,
394 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x9a, 0x77, 0x73, 0xe5, 0x45, 0xa4, 0x69, 0x42,
395 0xfe, 0xbf, 0xd4, 0x88, 0xf0, 0xa8, 0xce, 0x81, 0xf5, 0x51, 0xc8, 0x0c, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13,
396 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7,
397 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0x34, 0x1b, 0xea, 0x9d, 0xe7, 0x6f, 0xe5, 0x89,
398 0xce, 0x97, 0xae, 0x5a, 0x5a, 0x66, 0xf0, 0x1f, 0xd6, 0x32, 0x3b, 0xe5, 0xf6, 0x40, 0x45, 0xd0, 0x04, 0xd1, 0x13,
399 0x3d, 0x49, 0x7d, 0x68, 0xb9, 0x81, 0x7f, 0x02, 0x33, 0x6e, 0xf1, 0xab, 0x6b, 0x49, 0x03, 0xb2, 0x5f, 0x8c, 0x73,
400 0xd0, 0x3c, 0xfc, 0xd8, 0x27, 0xc2, 0x8a, 0x5f, 0xe9, 0x6b, 0x31, 0x22, 0xc9, 0xa8, 0x02, 0x85, 0x27, 0xb6, 0xe3,
401 0xd4, 0x91, 0x5f, 0x15, 0x17, 0x50, 0x3e, 0xaf, 0xdb, 0x25, 0x6e, 0x5e, 0x38, 0xc6, 0x25, 0xd6, 0x63, 0x3f, 0x74,
402 0xb8, 0x4f, 0xa8, 0x8c, 0xab, 0x7e, 0x19, 0x83, 0x89, 0x4d, 0xc5, 0xa3, 0xc3, 0xfd, 0xd5, 0xb9, 0x84, 0x76, 0xc8,
403 0x29, 0x7f, 0xcd, 0x17, 0x0c, 0xcc, 0xce, 0x9e, 0x60, 0xb9, 0xcf, 0xad, 0x81, 0x32, 0xd5, 0x65, 0x12, 0x0b, 0x2e,
404 0xf4, 0x36, 0x56, 0x03, 0xbd, 0x13, 0xd6, 0x42, 0xdd, 0xfb, 0xc9, 0xe5, 0xd0, 0x4a, 0x9c, 0xe1, 0xf2, 0x45, 0x1f,
405 0x23, 0x13, 0x56, 0xfb, 0xc1, 0x9e, 0x41, 0x9b, 0xad, 0xf9, 0x16, 0xaa, 0x0c, 0x23, 0x81, 0x9d, 0x27, 0xd7, 0x68,
406 0xa9, 0x49, 0x1e, 0xb5, 0xb5, 0xa6, 0xbb, 0x11, 0x5a, 0x37, 0x13, 0x4e, 0x97, 0xbd, 0x28, 0x17, 0x83, 0x6a, 0x6a,
407 0x2f, 0x2e, 0xa2, 0x00, 0x42, 0xc7, 0xfe, 0x0f, 0xfc, 0xaf, 0x88, 0x84, 0x65, 0xa2, 0x4f, 0x02, 0x13, 0xfd, 0xa9,
408 0x4b, 0xb6, 0x31, 0xc5, 0xfa, 0x41, 0xd3, 0x4b, 0xa6, 0xb0, 0xe3, 0x0c, 0x4a, 0xaf, 0xaa, 0x0b, 0x8f, 0xc5, 0x34,
409 0x9c, 0x77, 0xc1, 0x35, 0x65, 0x03, 0x2d, 0x2b, 0x0c, 0x4b, 0xdd, 0x69, 0xc6, 0xe4, 0x97, 0xf8, 0x2d, 0x49, 0x3a,
410 0xdd, 0x26, 0xb7, 0x09, 0xd3, 0x3d, 0xee, 0xc5, 0x09, 0x21, 0xcd, 0x73, 0x41, 0x05, 0xc1, 0xf1, 0xdb, 0x8e, 0x3a,
411 0x7f};
412
413 uint8_t g_fourthCert[] = {
414 0x30, 0x82, 0x02, 0x1A, 0x30, 0x82, 0x01, 0xA1, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x08, 0x4A,
415 0x18, 0x69, 0x9F, 0x9D, 0x7D, 0x8C, 0xD0, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D,
416 0x04, 0x03, 0x03, 0x30, 0x53, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02,
417 0x43, 0x4E, 0x31, 0x0F, 0x30, 0x0D, 0x06, 0x03, 0x55, 0x04, 0x0A, 0x0C, 0x06, 0x48, 0x75, 0x61,
418 0x77, 0x65, 0x69, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x0B, 0x0C, 0x0A, 0x48, 0x75,
419 0x61, 0x77, 0x65, 0x69, 0x20, 0x43, 0x42, 0x47, 0x31, 0x1E, 0x30, 0x1C, 0x06, 0x03, 0x55, 0x04,
420 0x03, 0x0C, 0x15, 0x48, 0x75, 0x61, 0x77, 0x65, 0x69, 0x20, 0x43, 0x42, 0x47, 0x20, 0x52, 0x6F,
421 0x6F, 0x74, 0x20, 0x43, 0x41, 0x20, 0x47, 0x32, 0x30, 0x1E, 0x17, 0x0D, 0x32, 0x30, 0x30, 0x33,
422 0x31, 0x36, 0x30, 0x33, 0x30, 0x34, 0x33, 0x39, 0x5A, 0x17, 0x0D, 0x34, 0x39, 0x30, 0x33, 0x31,
423 0x36, 0x30, 0x33, 0x30, 0x34, 0x33, 0x39, 0x5A, 0x30, 0x53, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03,
424 0x55, 0x04, 0x06, 0x13, 0x02, 0x43, 0x4E, 0x31, 0x0F, 0x30, 0x0D, 0x06, 0x03, 0x55, 0x04, 0x0A,
425 0x0C, 0x06, 0x48, 0x75, 0x61, 0x77, 0x65, 0x69, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04,
426 0x0B, 0x0C, 0x0A, 0x48, 0x75, 0x61, 0x77, 0x65, 0x69, 0x20, 0x43, 0x42, 0x47, 0x31, 0x1E, 0x30,
427 0x1C, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C, 0x15, 0x48, 0x75, 0x61, 0x77, 0x65, 0x69, 0x20, 0x43,
428 0x42, 0x47, 0x20, 0x52, 0x6F, 0x6F, 0x74, 0x20, 0x43, 0x41, 0x20, 0x47, 0x32, 0x30, 0x76, 0x30,
429 0x10, 0x06, 0x07, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x02, 0x01, 0x06, 0x05, 0x2B, 0x81, 0x04, 0x00,
430 0x22, 0x03, 0x62, 0x00, 0x04, 0x5A, 0x27, 0x64, 0x1A, 0x70, 0xD2, 0x3B, 0x0D, 0xFF, 0x1C, 0x4D,
431 0xB2, 0xD8, 0x61, 0xE5, 0xF9, 0xFA, 0x56, 0x04, 0x86, 0xB9, 0x4B, 0xE2, 0x25, 0x9C, 0xDA, 0xEC,
432 0x19, 0x4B, 0xF0, 0x0B, 0x52, 0x36, 0x41, 0x6B, 0xED, 0xA8, 0x21, 0xD6, 0x9B, 0x01, 0x65, 0x14,
433 0xAF, 0x79, 0xCC, 0xA5, 0xE2, 0x33, 0xCB, 0x3D, 0xC9, 0x5D, 0xD5, 0x55, 0x78, 0x7B, 0x8A, 0xF3,
434 0x7C, 0x64, 0x93, 0xB7, 0x48, 0x2E, 0x4D, 0xD5, 0x30, 0xAB, 0xBC, 0x1D, 0xA5, 0xA4, 0x73, 0x01,
435 0xC1, 0xCC, 0xF8, 0x0C, 0x0D, 0x24, 0x80, 0x70, 0x8C, 0x9B, 0xFC, 0x03, 0x79, 0xCE, 0xA4, 0x38,
436 0x7C, 0x75, 0xC6, 0xF0, 0x91, 0xA3, 0x42, 0x30, 0x40, 0x30, 0x0E, 0x06, 0x03, 0x55, 0x1D, 0x0F,
437 0x01, 0x01, 0xFF, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x0F, 0x06, 0x03, 0x55, 0x1D, 0x13,
438 0x01, 0x01, 0xFF, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xFF, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D,
439 0x0E, 0x04, 0x16, 0x04, 0x14, 0xA3, 0x8E, 0x5A, 0xF5, 0x5A, 0xBC, 0x71, 0x8C, 0x2A, 0x6A, 0x25,
440 0x72, 0x7E, 0x48, 0x92, 0xE2, 0x92, 0xDC, 0x20, 0x00, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48,
441 0xCE, 0x3D, 0x04, 0x03, 0x03, 0x03, 0x67, 0x00, 0x30, 0x64, 0x02, 0x30, 0x33, 0x2A, 0x5E, 0x07,
442 0xB3, 0xF4, 0x21, 0xB6, 0x3B, 0x73, 0xA8, 0x29, 0x59, 0xC0, 0xA5, 0x85, 0x1C, 0xE7, 0x38, 0x91,
443 0x63, 0xF2, 0xE6, 0xAF, 0xAC, 0xDB, 0xB6, 0x3C, 0x8A, 0x33, 0xF4, 0xA2, 0x2A, 0xAF, 0x78, 0xE7,
444 0x06, 0x50, 0x47, 0x26, 0xCD, 0x26, 0xC8, 0x8E, 0xE7, 0xB5, 0x8A, 0x44, 0x02, 0x30, 0x5B, 0x9B,
445 0xC7, 0x83, 0x31, 0x96, 0x39, 0xCE, 0xAE, 0x62, 0x31, 0x95, 0x02, 0xE8, 0x7E, 0xD4, 0xCD, 0x84,
446 0xA2, 0xC7, 0x85, 0x32, 0xD5, 0x89, 0x6C, 0x2D, 0x55, 0x7B, 0xDF, 0xC3, 0xED, 0x28, 0xFF, 0x61,
447 0x15, 0x38, 0xE0, 0x0C, 0x77, 0x2D, 0x5C, 0x99, 0x42, 0xE4, 0xBE, 0xFE, 0x64, 0x36,
448 };
449
450 uint8_t g_thirdCert[] = {
451 0x30, 0x82, 0x02, 0xF5, 0x30, 0x82, 0x02, 0x7B, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x08, 0x49,
452 0xAC, 0x1C, 0xD5, 0xE2, 0x4C, 0xC1, 0xD2, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D,
453 0x04, 0x03, 0x03, 0x30, 0x53, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02,
454 0x43, 0x4E, 0x31, 0x0F, 0x30, 0x0D, 0x06, 0x03, 0x55, 0x04, 0x0A, 0x0C, 0x06, 0x48, 0x75, 0x61,
455 0x77, 0x65, 0x69, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x0B, 0x0C, 0x0A, 0x48, 0x75,
456 0x61, 0x77, 0x65, 0x69, 0x20, 0x43, 0x42, 0x47, 0x31, 0x1E, 0x30, 0x1C, 0x06, 0x03, 0x55, 0x04,
457 0x03, 0x0C, 0x15, 0x48, 0x75, 0x61, 0x77, 0x65, 0x69, 0x20, 0x43, 0x42, 0x47, 0x20, 0x52, 0x6F,
458 0x6F, 0x74, 0x20, 0x43, 0x41, 0x20, 0x47, 0x32, 0x30, 0x1E, 0x17, 0x0D, 0x32, 0x30, 0x30, 0x33,
459 0x31, 0x36, 0x31, 0x32, 0x30, 0x31, 0x30, 0x30, 0x5A, 0x17, 0x0D, 0x34, 0x30, 0x30, 0x33, 0x31,
460 0x36, 0x31, 0x32, 0x30, 0x31, 0x30, 0x30, 0x5A, 0x30, 0x58, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03,
461 0x55, 0x04, 0x06, 0x13, 0x02, 0x43, 0x4E, 0x31, 0x0F, 0x30, 0x0D, 0x06, 0x03, 0x55, 0x04, 0x0A,
462 0x0C, 0x06, 0x48, 0x75, 0x61, 0x77, 0x65, 0x69, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04,
463 0x0B, 0x0C, 0x0A, 0x48, 0x75, 0x61, 0x77, 0x65, 0x69, 0x20, 0x43, 0x42, 0x47, 0x31, 0x23, 0x30,
464 0x21, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C, 0x1A, 0x48, 0x75, 0x61, 0x77, 0x65, 0x69, 0x20, 0x43,
465 0x42, 0x47, 0x20, 0x45, 0x71, 0x75, 0x69, 0x70, 0x6D, 0x65, 0x6E, 0x74, 0x20, 0x53, 0x32, 0x20,
466 0x43, 0x41, 0x30, 0x76, 0x30, 0x10, 0x06, 0x07, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x02, 0x01, 0x06,
467 0x05, 0x2B, 0x81, 0x04, 0x00, 0x22, 0x03, 0x62, 0x00, 0x04, 0xAC, 0x08, 0xAD, 0xDC, 0x4E, 0xE1,
468 0x9F, 0x99, 0x4F, 0x08, 0x89, 0x93, 0x8C, 0x16, 0xDE, 0x6C, 0x2E, 0xE0, 0x30, 0x1D, 0xEF, 0xD7,
469 0x67, 0x91, 0x46, 0xF4, 0x15, 0xE8, 0xAD, 0xFB, 0x03, 0x5E, 0xEF, 0x7E, 0x67, 0x33, 0xC7, 0xA4,
470 0x19, 0x2B, 0x25, 0x77, 0x35, 0x51, 0x13, 0x7F, 0x59, 0xFA, 0x59, 0x64, 0x43, 0x32, 0xC2, 0x45,
471 0xEE, 0x58, 0xB4, 0x69, 0x83, 0x34, 0xA6, 0x34, 0x95, 0x56, 0x77, 0x27, 0x06, 0x91, 0x23, 0x81,
472 0x54, 0xC1, 0x00, 0x81, 0xED, 0xB6, 0x15, 0xB7, 0x2F, 0x46, 0x09, 0xAB, 0xC7, 0xAE, 0x29, 0x01,
473 0x78, 0x8F, 0xD4, 0x4E, 0xE2, 0x2E, 0xB1, 0xC6, 0x81, 0x67, 0xA3, 0x82, 0x01, 0x15, 0x30, 0x82,
474 0x01, 0x11, 0x30, 0x1F, 0x06, 0x03, 0x55, 0x1D, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0xA3,
475 0x8E, 0x5A, 0xF5, 0x5A, 0xBC, 0x71, 0x8C, 0x2A, 0x6A, 0x25, 0x72, 0x7E, 0x48, 0x92, 0xE2, 0x92,
476 0xDC, 0x20, 0x00, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D, 0x0E, 0x04, 0x16, 0x04, 0x14, 0xFF, 0xE6,
477 0xD9, 0x39, 0xC6, 0x7D, 0xE7, 0xBF, 0x02, 0xA6, 0xDB, 0xBA, 0x77, 0x21, 0x95, 0xDF, 0xE4, 0xCF,
478 0x55, 0xE4, 0x30, 0x0F, 0x06, 0x03, 0x55, 0x1D, 0x13, 0x01, 0x01, 0xFF, 0x04, 0x05, 0x30, 0x03,
479 0x01, 0x01, 0xFF, 0x30, 0x46, 0x06, 0x03, 0x55, 0x1D, 0x20, 0x04, 0x3F, 0x30, 0x3D, 0x30, 0x3B,
480 0x06, 0x04, 0x55, 0x1D, 0x20, 0x00, 0x30, 0x33, 0x30, 0x31, 0x06, 0x08, 0x2B, 0x06, 0x01, 0x05,
481 0x05, 0x07, 0x02, 0x01, 0x16, 0x25, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x2F, 0x2F, 0x63, 0x70, 0x6B,
482 0x69, 0x2D, 0x63, 0x61, 0x77, 0x65, 0x62, 0x2E, 0x68, 0x75, 0x61, 0x77, 0x65, 0x69, 0x2E, 0x63,
483 0x6F, 0x6D, 0x2F, 0x63, 0x70, 0x6B, 0x69, 0x2F, 0x63, 0x70, 0x73, 0x30, 0x0E, 0x06, 0x03, 0x55,
484 0x1D, 0x0F, 0x01, 0x01, 0xFF, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x66, 0x06, 0x03, 0x55,
485 0x1D, 0x1F, 0x04, 0x5F, 0x30, 0x5D, 0x30, 0x5B, 0xA0, 0x59, 0xA0, 0x57, 0x86, 0x55, 0x68, 0x74,
486 0x74, 0x70, 0x3A, 0x2F, 0x2F, 0x63, 0x70, 0x6B, 0x69, 0x2D, 0x63, 0x61, 0x77, 0x65, 0x62, 0x2E,
487 0x68, 0x75, 0x61, 0x77, 0x65, 0x69, 0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x63, 0x70, 0x6B, 0x69, 0x2F,
488 0x73, 0x65, 0x72, 0x76, 0x6C, 0x65, 0x74, 0x2F, 0x63, 0x72, 0x6C, 0x46, 0x69, 0x6C, 0x65, 0x44,
489 0x6F, 0x77, 0x6E, 0x2E, 0x63, 0x72, 0x6C, 0x3F, 0x63, 0x65, 0x72, 0x74, 0x79, 0x70, 0x65, 0x3D,
490 0x31, 0x30, 0x26, 0x2F, 0x72, 0x6F, 0x6F, 0x74, 0x5F, 0x67, 0x32, 0x5F, 0x63, 0x72, 0x6C, 0x2E,
491 0x63, 0x72, 0x6C, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x03, 0x03,
492 0x68, 0x00, 0x30, 0x65, 0x02, 0x30, 0x71, 0x21, 0x99, 0x88, 0x31, 0x40, 0x3F, 0x52, 0xE0, 0x0D,
493 0x44, 0xAA, 0x7E, 0xC1, 0x7F, 0x18, 0x73, 0x43, 0xD9, 0xD4, 0x0B, 0xA4, 0x50, 0xA3, 0x31, 0xDE,
494 0xB5, 0xF4, 0x70, 0xE6, 0xDC, 0xFE, 0x6E, 0xC2, 0xE8, 0x2A, 0xE4, 0xC1, 0xD7, 0xBF, 0xE4, 0x93,
495 0x38, 0x02, 0xD2, 0x3D, 0xA6, 0xA9, 0x02, 0x31, 0x00, 0xA6, 0xF1, 0x32, 0xE7, 0x12, 0xD4, 0x43,
496 0xD9, 0x6C, 0x77, 0xF7, 0x11, 0x9C, 0x38, 0x55, 0x4C, 0x91, 0x6A, 0x1C, 0xD7, 0xE0, 0xEA, 0xE5,
497 0xFE, 0x53, 0x28, 0xB3, 0x77, 0x67, 0x1A, 0x6F, 0x4C, 0x03, 0x75, 0xBB, 0x09, 0xAD, 0x23, 0x44,
498 0xB3, 0xA3, 0x03, 0xA8, 0x40, 0x66, 0xCC, 0x82, 0x0E,
499 };
500
501 uint8_t g_secondCert[] = {
502 0x30, 0x82, 0x03, 0x1D, 0x30, 0x82, 0x02, 0xA3, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x12, 0x20,
503 0x24, 0x06, 0x11, 0x17, 0x18, 0x41, 0x6D, 0xF1, 0x9B, 0xC9, 0x42, 0xE8, 0x11, 0xAC, 0x31, 0x86,
504 0x12, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x03, 0x30, 0x58, 0x31,
505 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x43, 0x4E, 0x31, 0x0F, 0x30, 0x0D,
506 0x06, 0x03, 0x55, 0x04, 0x0A, 0x0C, 0x06, 0x48, 0x75, 0x61, 0x77, 0x65, 0x69, 0x31, 0x13, 0x30,
507 0x11, 0x06, 0x03, 0x55, 0x04, 0x0B, 0x0C, 0x0A, 0x48, 0x75, 0x61, 0x77, 0x65, 0x69, 0x20, 0x43,
508 0x42, 0x47, 0x31, 0x23, 0x30, 0x21, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C, 0x1A, 0x48, 0x75, 0x61,
509 0x77, 0x65, 0x69, 0x20, 0x43, 0x42, 0x47, 0x20, 0x45, 0x71, 0x75, 0x69, 0x70, 0x6D, 0x65, 0x6E,
510 0x74, 0x20, 0x53, 0x32, 0x20, 0x43, 0x41, 0x30, 0x1E, 0x17, 0x0D, 0x32, 0x34, 0x30, 0x36, 0x31,
511 0x31, 0x30, 0x39, 0x31, 0x38, 0x34, 0x31, 0x5A, 0x17, 0x0D, 0x33, 0x34, 0x30, 0x36, 0x31, 0x31,
512 0x30, 0x39, 0x31, 0x38, 0x34, 0x31, 0x5A, 0x30, 0x6F, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55,
513 0x04, 0x06, 0x13, 0x02, 0x43, 0x4E, 0x31, 0x0F, 0x30, 0x0D, 0x06, 0x03, 0x55, 0x04, 0x0A, 0x0C,
514 0x06, 0x48, 0x75, 0x61, 0x77, 0x65, 0x69, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x0B,
515 0x0C, 0x0A, 0x48, 0x75, 0x61, 0x77, 0x65, 0x69, 0x20, 0x43, 0x42, 0x47, 0x31, 0x3A, 0x30, 0x38,
516 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C, 0x31, 0x48, 0x55, 0x41, 0x57, 0x45, 0x49, 0x5F, 0x48, 0x57,
517 0x50, 0x4C, 0x52, 0x5F, 0x65, 0x65, 0x64, 0x35, 0x35, 0x32, 0x66, 0x36, 0x2D, 0x65, 0x33, 0x32,
518 0x66, 0x2D, 0x34, 0x38, 0x63, 0x38, 0x2D, 0x38, 0x38, 0x37, 0x34, 0x2D, 0x34, 0x62, 0x32, 0x61,
519 0x34, 0x31, 0x61, 0x61, 0x66, 0x37, 0x38, 0x34, 0x30, 0x59, 0x30, 0x13, 0x06, 0x07, 0x2A, 0x86,
520 0x48, 0xCE, 0x3D, 0x02, 0x01, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x01, 0x07, 0x03,
521 0x42, 0x00, 0x04, 0xDA, 0x99, 0xB7, 0xAE, 0x30, 0xD1, 0xBC, 0xA5, 0x8B, 0x6A, 0x1F, 0x34, 0x01,
522 0x79, 0x0D, 0x56, 0x55, 0xE9, 0x9A, 0xA7, 0xC5, 0xFA, 0x87, 0x6D, 0xF5, 0x14, 0xE3, 0x10, 0x8E,
523 0x03, 0xD2, 0xAE, 0xFC, 0xF1, 0x0D, 0xFB, 0x7A, 0xF9, 0xE5, 0xEE, 0x82, 0x1B, 0xCC, 0xF6, 0x01,
524 0x5A, 0x2A, 0x6E, 0xB0, 0x4F, 0x2B, 0x1C, 0xD6, 0x3F, 0x43, 0xA7, 0xBE, 0x89, 0x92, 0xB8, 0x8B,
525 0xAB, 0xDE, 0x32, 0xA3, 0x82, 0x01, 0x34, 0x30, 0x82, 0x01, 0x30, 0x30, 0x1F, 0x06, 0x03, 0x55,
526 0x1D, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0xFF, 0xE6, 0xD9, 0x39, 0xC6, 0x7D, 0xE7, 0xBF,
527 0x02, 0xA6, 0xDB, 0xBA, 0x77, 0x21, 0x95, 0xDF, 0xE4, 0xCF, 0x55, 0xE4, 0x30, 0x1D, 0x06, 0x03,
528 0x55, 0x1D, 0x0E, 0x04, 0x16, 0x04, 0x14, 0xD1, 0xA8, 0x64, 0x63, 0x27, 0xAB, 0x17, 0x79, 0x27,
529 0x01, 0x57, 0x13, 0x68, 0x7A, 0x3C, 0xFE, 0xCC, 0xAF, 0x09, 0xAA, 0x30, 0x46, 0x06, 0x03, 0x55,
530 0x1D, 0x20, 0x04, 0x3F, 0x30, 0x3D, 0x30, 0x3B, 0x06, 0x04, 0x55, 0x1D, 0x20, 0x00, 0x30, 0x33,
531 0x30, 0x31, 0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x02, 0x01, 0x16, 0x25, 0x68, 0x74,
532 0x74, 0x70, 0x3A, 0x2F, 0x2F, 0x70, 0x6B, 0x69, 0x2E, 0x63, 0x6F, 0x6E, 0x73, 0x75, 0x6D, 0x65,
533 0x72, 0x2E, 0x68, 0x75, 0x61, 0x77, 0x65, 0x69, 0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x63, 0x61, 0x2F,
534 0x63, 0x70, 0x73, 0x30, 0x12, 0x06, 0x03, 0x55, 0x1D, 0x13, 0x01, 0x01, 0xFF, 0x04, 0x08, 0x30,
535 0x06, 0x01, 0x01, 0xFF, 0x02, 0x01, 0x00, 0x30, 0x0E, 0x06, 0x03, 0x55, 0x1D, 0x0F, 0x01, 0x01,
536 0xFF, 0x04, 0x04, 0x03, 0x02, 0x02, 0xB4, 0x30, 0x49, 0x06, 0x03, 0x55, 0x1D, 0x1F, 0x04, 0x42,
537 0x30, 0x40, 0x30, 0x3E, 0xA0, 0x3C, 0xA0, 0x3A, 0x86, 0x38, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x2F,
538 0x2F, 0x70, 0x6B, 0x69, 0x2E, 0x63, 0x6F, 0x6E, 0x73, 0x75, 0x6D, 0x65, 0x72, 0x2E, 0x68, 0x75,
539 0x61, 0x77, 0x65, 0x69, 0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x63, 0x61, 0x2F, 0x63, 0x72, 0x6C, 0x2F,
540 0x65, 0x71, 0x75, 0x5F, 0x73, 0x32, 0x2F, 0x63, 0x72, 0x6C, 0x32, 0x30, 0x32, 0x34, 0x2E, 0x63,
541 0x72, 0x6C, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D, 0x25, 0x04, 0x16, 0x30, 0x14, 0x06, 0x08, 0x2B,
542 0x06, 0x01, 0x05, 0x05, 0x07, 0x03, 0x01, 0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x03,
543 0x02, 0x30, 0x18, 0x06, 0x0C, 0x2B, 0x06, 0x01, 0x04, 0x01, 0x8F, 0x5B, 0x02, 0x82, 0x78, 0x01,
544 0x01, 0x04, 0x08, 0x30, 0x06, 0x02, 0x01, 0x01, 0x0A, 0x01, 0x02, 0x30, 0x0A, 0x06, 0x08, 0x2A,
545 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x03, 0x03, 0x68, 0x00, 0x30, 0x65, 0x02, 0x31, 0x00, 0x84,
546 0xA8, 0xD7, 0xAD, 0x5B, 0xF2, 0x93, 0x05, 0xE1, 0x0F, 0xC8, 0x45, 0xC3, 0x48, 0x50, 0x91, 0xFE,
547 0xF3, 0xE5, 0x5C, 0x71, 0x49, 0x2E, 0x54, 0xBD, 0x1A, 0x2E, 0x9D, 0x8B, 0x5E, 0x4D, 0x5E, 0x19,
548 0xF1, 0x8F, 0xB7, 0x8F, 0xDF, 0x27, 0x20, 0x09, 0x3B, 0x53, 0x28, 0x41, 0x5B, 0xC1, 0x45, 0x02,
549 0x30, 0x47, 0x4F, 0x1C, 0x49, 0xBF, 0xE9, 0x30, 0x19, 0xBB, 0x0D, 0x24, 0x08, 0xD7, 0x0E, 0x83,
550 0x4D, 0xB9, 0x6D, 0x27, 0xD8, 0x7F, 0xF9, 0x34, 0x82, 0xB9, 0x18, 0x47, 0x3E, 0x9A, 0x2B, 0x1E,
551 0x1B, 0x70, 0x57, 0x2C, 0x8E, 0x70, 0x57, 0x08, 0x90, 0x60, 0xD8, 0x4F, 0x5F, 0x7E, 0xB8, 0xB1,
552 0x53,
553 };
554
555 uint8_t g_firstCert[] = {
556 0x30, 0x82, 0x03, 0x19, 0x30, 0x82, 0x02, 0xBF, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x01, 0x01,
557 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02, 0x30, 0x6F, 0x31, 0x0B,
558 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x43, 0x4E, 0x31, 0x0F, 0x30, 0x0D, 0x06,
559 0x03, 0x55, 0x04, 0x0A, 0x0C, 0x06, 0x48, 0x75, 0x61, 0x77, 0x65, 0x69, 0x31, 0x13, 0x30, 0x11,
560 0x06, 0x03, 0x55, 0x04, 0x0B, 0x0C, 0x0A, 0x48, 0x75, 0x61, 0x77, 0x65, 0x69, 0x20, 0x43, 0x42,
561 0x47, 0x31, 0x3A, 0x30, 0x38, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C, 0x31, 0x48, 0x55, 0x41, 0x57,
562 0x45, 0x49, 0x5F, 0x48, 0x57, 0x50, 0x4C, 0x52, 0x5F, 0x65, 0x65, 0x64, 0x35, 0x35, 0x32, 0x66,
563 0x36, 0x2D, 0x65, 0x33, 0x32, 0x66, 0x2D, 0x34, 0x38, 0x63, 0x38, 0x2D, 0x38, 0x38, 0x37, 0x34,
564 0x2D, 0x34, 0x62, 0x32, 0x61, 0x34, 0x31, 0x61, 0x61, 0x66, 0x37, 0x38, 0x34, 0x30, 0x1E, 0x17,
565 0x0D, 0x32, 0x34, 0x30, 0x36, 0x31, 0x31, 0x30, 0x39, 0x31, 0x38, 0x34, 0x31, 0x5A, 0x17, 0x0D,
566 0x33, 0x34, 0x30, 0x36, 0x31, 0x31, 0x30, 0x39, 0x31, 0x38, 0x34, 0x31, 0x5A, 0x30, 0x2C, 0x31,
567 0x2A, 0x30, 0x28, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x21, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65,
568 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x20, 0x4D, 0x61, 0x6E,
569 0x61, 0x67, 0x65, 0x6D, 0x65, 0x6E, 0x74, 0x20, 0x4B, 0x65, 0x79, 0x30, 0x2A, 0x30, 0x05, 0x06,
570 0x03, 0x2B, 0x65, 0x6E, 0x03, 0x21, 0x00, 0x42, 0x80, 0x20, 0x36, 0x27, 0x20, 0x3A, 0xD2, 0x28,
571 0x1D, 0xF2, 0x97, 0x05, 0x9A, 0xBA, 0x75, 0x26, 0xB5, 0x0C, 0x8B, 0xD7, 0x07, 0x27, 0x62, 0xAC,
572 0x1A, 0x47, 0x4D, 0x75, 0x78, 0xFD, 0x41, 0xA3, 0x82, 0x01, 0xBC, 0x30, 0x82, 0x01, 0xB8, 0x30,
573 0x0B, 0x06, 0x03, 0x55, 0x1D, 0x0F, 0x04, 0x04, 0x03, 0x02, 0x03, 0xA8, 0x30, 0x82, 0x01, 0xA7,
574 0x06, 0x0C, 0x2B, 0x06, 0x01, 0x04, 0x01, 0x8F, 0x5B, 0x02, 0x82, 0x78, 0x01, 0x03, 0x04, 0x82,
575 0x01, 0x95, 0x30, 0x82, 0x01, 0x91, 0x02, 0x01, 0x00, 0x30, 0x22, 0x02, 0x01, 0x00, 0x06, 0x0D,
576 0x2B, 0x06, 0x01, 0x04, 0x01, 0x8F, 0x5B, 0x02, 0x82, 0x78, 0x02, 0x01, 0x04, 0x04, 0x0E, 0x63,
577 0x68, 0x61, 0x6C, 0x6C, 0x65, 0x6E, 0x67, 0x65, 0x5F, 0x64, 0x61, 0x74, 0x61, 0x30, 0x81, 0xCF,
578 0x02, 0x01, 0x02, 0x06, 0x0D, 0x2B, 0x06, 0x01, 0x04, 0x01, 0x8F, 0x5B, 0x02, 0x82, 0x78, 0x02,
579 0x01, 0x03, 0x30, 0x81, 0xBA, 0x06, 0x0E, 0x2B, 0x06, 0x01, 0x04, 0x01, 0x8F, 0x5B, 0x02, 0x82,
580 0x78, 0x02, 0x01, 0x03, 0x01, 0x04, 0x81, 0xA7, 0x7B, 0x22, 0x61, 0x70, 0x70, 0x49, 0x64, 0x22,
581 0x3A, 0x22, 0x63, 0x6F, 0x6D, 0x2E, 0x65, 0x78, 0x61, 0x6D, 0x70, 0x6C, 0x65, 0x2E, 0x6D, 0x79,
582 0x61, 0x70, 0x70, 0x6C, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x5F, 0x42, 0x48, 0x7A, 0x53,
583 0x39, 0x66, 0x50, 0x62, 0x63, 0x48, 0x38, 0x78, 0x6A, 0x4C, 0x36, 0x77, 0x2B, 0x47, 0x6E, 0x55,
584 0x46, 0x6E, 0x33, 0x6A, 0x4E, 0x38, 0x44, 0x38, 0x4B, 0x61, 0x4F, 0x4B, 0x61, 0x66, 0x57, 0x48,
585 0x65, 0x33, 0x62, 0x77, 0x37, 0x66, 0x55, 0x78, 0x57, 0x6E, 0x6B, 0x55, 0x63, 0x4F, 0x32, 0x4C,
586 0x44, 0x52, 0x6C, 0x50, 0x35, 0x68, 0x59, 0x73, 0x50, 0x44, 0x36, 0x54, 0x58, 0x51, 0x5A, 0x45,
587 0x4E, 0x65, 0x6C, 0x59, 0x6C, 0x51, 0x41, 0x6E, 0x71, 0x46, 0x68, 0x5A, 0x78, 0x31, 0x51, 0x63,
588 0x72, 0x48, 0x51, 0x3D, 0x22, 0x2C, 0x22, 0x62, 0x75, 0x6E, 0x64, 0x6C, 0x65, 0x4E, 0x61, 0x6D,
589 0x65, 0x22, 0x3A, 0x22, 0x63, 0x6F, 0x6D, 0x2E, 0x65, 0x78, 0x61, 0x6D, 0x70, 0x6C, 0x65, 0x2E,
590 0x6D, 0x79, 0x61, 0x70, 0x70, 0x6C, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x22, 0x7D, 0x30,
591 0x55, 0x02, 0x01, 0x03, 0x06, 0x0E, 0x2B, 0x06, 0x01, 0x04, 0x01, 0x8F, 0x5B, 0x02, 0x82, 0x78,
592 0x02, 0x02, 0x02, 0x09, 0x04, 0x40, 0x42, 0x45, 0x31, 0x30, 0x43, 0x35, 0x46, 0x39, 0x41, 0x34,
593 0x46, 0x41, 0x32, 0x46, 0x46, 0x43, 0x31, 0x38, 0x31, 0x30, 0x32, 0x42, 0x31, 0x45, 0x46, 0x43,
594 0x37, 0x31, 0x35, 0x44, 0x41, 0x46, 0x33, 0x44, 0x38, 0x34, 0x39, 0x33, 0x46, 0x33, 0x39, 0x32,
595 0x42, 0x44, 0x39, 0x46, 0x39, 0x35, 0x35, 0x38, 0x44, 0x33, 0x33, 0x36, 0x33, 0x41, 0x34, 0x32,
596 0x36, 0x35, 0x44, 0x35, 0x30, 0x45, 0x30, 0x25, 0x02, 0x01, 0x03, 0x06, 0x0E, 0x2B, 0x06, 0x01,
597 0x04, 0x01, 0x8F, 0x5B, 0x02, 0x82, 0x78, 0x02, 0x02, 0x02, 0x06, 0x04, 0x10, 0x28, 0xC4, 0xFB,
598 0x49, 0x44, 0xAF, 0xEC, 0x11, 0xB9, 0x09, 0x02, 0x42, 0xAC, 0x12, 0x00, 0x02, 0x30, 0x18, 0x02,
599 0x01, 0x02, 0x06, 0x0D, 0x2B, 0x06, 0x01, 0x04, 0x01, 0x8F, 0x5B, 0x02, 0x82, 0x78, 0x02, 0x01,
600 0x05, 0x04, 0x04, 0x02, 0x00, 0x00, 0x00, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D,
601 0x04, 0x03, 0x02, 0x03, 0x48, 0x00, 0x30, 0x45, 0x02, 0x20, 0x79, 0x3D, 0xA4, 0x01, 0x82, 0xBE,
602 0xD6, 0x6F, 0xA0, 0x24, 0x82, 0x2B, 0x91, 0x30, 0x11, 0x7F, 0x57, 0x95, 0xF0, 0x20, 0xE8, 0x3F,
603 0x03, 0xEC, 0xE1, 0x1F, 0xBD, 0x9F, 0x8C, 0x99, 0x2A, 0x21, 0x02, 0x21, 0x00, 0xA3, 0x23, 0x85,
604 0x93, 0xA1, 0xD1, 0xBB, 0x90, 0xAC, 0x7E, 0x5B, 0x9D, 0xCD, 0x0A, 0xE0, 0xC5, 0x43, 0xA1, 0x9F,
605 0x94, 0x44, 0x37, 0x25, 0x4F, 0xDF, 0xDC, 0x7E, 0xDC, 0xDE, 0x4A, 0x50, 0x78,
606 };
607
SetUpTestCase()608 void DslmTest::SetUpTestCase()
609 {
610 // modify the device's systime to ensure that the certificate verification passes
611 constexpr time_t yearTimeLeast = 1699977600;
612 constexpr time_t yearTimeValid = 1704038400;
613 struct timeval timeVal = {0};
614 string isEnforcing;
615
616 gettimeofday(&timeVal, nullptr);
617 if (timeVal.tv_sec <= yearTimeLeast) {
618 timeVal.tv_sec = yearTimeValid;
619 settimeofday(&timeVal, nullptr);
620 }
621
622 static const char *acls[] = {"ACCESS_IDS"};
623 static const char *perms[] = {
624 "ohos.permission.PLACE_CALL",
625 "ohos.permission.ACCESS_IDS",
626 "ohos.permission.ACCESS_SERVICE_DM",
627 "ohos.permission.DISTRIBUTED_DATASYNC",
628 };
629 uint64_t tokenId;
630 NativeTokenInfoParams infoInstance = {
631 .dcapsNum = 0,
632 .permsNum = 2,
633 .aclsNum = 1,
634 .dcaps = nullptr,
635 .perms = perms,
636 .acls = acls,
637 .processName = "dslm_service",
638 .aplStr = "system_core",
639 };
640 tokenId = GetAccessTokenId(&infoInstance);
641 SetSelfTokenID(tokenId);
642 LoadStringFromFile("/sys/fs/selinux/enforce", isEnforcing);
643 if (isEnforcing.compare("1") == 0) {
644 DslmTest::isEnforcing_ = true;
645 SaveStringToFile("/sys/fs/selinux/enforce", "0");
646 }
647 }
TearDownTestCase()648 void DslmTest::TearDownTestCase()
649 {
650 if (DslmTest::isEnforcing_) {
651 SaveStringToFile("/sys/fs/selinux/enforce", "1");
652 }
653 }
SetUp()654 void DslmTest::SetUp()
655 {
656 }
TearDown()657 void DslmTest::TearDown()
658 {
659 }
660 bool DslmTest::isEnforcing_ = false;
661
BlockCheckDeviceStatus(const DeviceIdentify * device,uint32_t status,uint64_t millisec)662 static void BlockCheckDeviceStatus(const DeviceIdentify *device, uint32_t status, uint64_t millisec)
663 {
664 static int sleepTick = 10;
665 uint64_t cnt = millisec / static_cast<uint64_t>(sleepTick) + 1;
666 do {
667 const DslmDeviceInfo *info = GetDslmDeviceInfo(device);
668 if (info == nullptr) {
669 continue;
670 }
671 if (info->machine.currState == status) {
672 break;
673 }
674 if (cnt == 0) {
675 break;
676 }
677 this_thread::sleep_for(milliseconds(sleepTick));
678 cnt--;
679 } while (true);
680 }
681
682 HWTEST_F(DslmTest, BuildDeviceSecInfoRequest_case1, TestSize.Level0)
683 {
684 uint64_t random = 0x0807060504030201;
685 MessageBuff *msg = nullptr;
686 // 0d196608 = 0x030000
687 const char *except = "{\"message\":1,\"payload\":{\"version\":196608,\"challenge\":\"0102030405060708\","
688 "\"support\":[3000,2000,1000]}}";
689 int32_t ret = BuildDeviceSecInfoRequest(random, &msg);
690 ASSERT_EQ(0, ret);
691 EXPECT_STREQ(except, (const char *)msg->buff);
692 FreeMessageBuff(msg);
693 }
694
695 HWTEST_F(DslmTest, BuildDeviceSecInfoRequest_case2, TestSize.Level0)
696 {
697 uint64_t random = 0x0807060504030201;
698 MessageBuff **msg = nullptr;
699 int32_t ret = BuildDeviceSecInfoRequest(random, msg);
700 ASSERT_EQ(ERR_INVALID_PARA, ret);
701 }
702
703 HWTEST_F(DslmTest, BuildDeviceSecInfoRequest_case3, TestSize.Level0)
704 {
705 uint64_t random = 0x0807060504030201;
706 const char *message = "{\"mege\":1,\"payload\":{\"version\":131072,\"challenge\":\"0102030405060708\"}}";
707 uint32_t messageLen = strlen(message) + 1;
708 MessageBuff msg = {.length = messageLen, .buff = (uint8_t *)message};
709 MessageBuff *msg_ptr = &msg;
710
711 int32_t ret = BuildDeviceSecInfoRequest(random, &msg_ptr);
712 ASSERT_EQ(ERR_INVALID_PARA, ret);
713 }
714
715 HWTEST_F(DslmTest, BuildDeviceSecInfoResponse_case1, TestSize.Level0)
716 {
717 uint64_t random = 0x0807060504030201;
718 uint8_t info[] = {'a', 'b', 'c', 'd', 1, 3, 5, 7, 9};
719 DslmCredBuff cred = {(CredType)3, 9, info};
720
721 // 0d196608 = 0x030000
722 const char *except = "{\"message\":2,\"payload\":{\"version\":196608,\"type\":3,\"challenge\":\"0102030405060708\","
723 "\"info\":\"YWJjZAEDBQcJ\"}}";
724
725 MessageBuff *msg = nullptr;
726 int32_t ret = BuildDeviceSecInfoResponse(random, (DslmCredBuff *)&cred, &msg);
727 ASSERT_EQ(0, ret);
728
729 EXPECT_STREQ(except, (const char *)msg->buff);
730 FreeMessageBuff(msg);
731 }
732
733 HWTEST_F(DslmTest, BuildDeviceSecInfoResponse_case2, TestSize.Level0)
734 {
735 uint64_t random = 0x0807060504030201;
736 uint8_t info[] = {'a', 'b', 'c', 'd', 1, 3, 5, 7, 9};
737 DslmCredBuff cred = {(CredType)3, 9, info};
738
739 {
740 MessageBuff **msg = nullptr;
741
742 int32_t ret = BuildDeviceSecInfoResponse(random, (DslmCredBuff *)&cred, msg);
743 ASSERT_EQ(ERR_INVALID_PARA, ret);
744
745 ret = BuildDeviceSecInfoResponse(random, nullptr, msg);
746 }
747
748 {
749 MessageBuff msg;
750 memset_s(&msg, sizeof(MessageBuff), 0, sizeof(MessageBuff));
751 MessageBuff *msgPtr = &msg;
752
753 int32_t ret = BuildDeviceSecInfoResponse(random, (DslmCredBuff *)&cred, &msgPtr);
754 ASSERT_EQ(ERR_INVALID_PARA, ret);
755 }
756 }
757
758 HWTEST_F(DslmTest, ParseMessage_case1, TestSize.Level0)
759 {
760 const char *message = "{\"message\":1,\"payload\":{\"version\":131072,\"challenge\":\"0102030405060708\"}}";
761 const char *except = "{\"version\":131072,\"challenge\":\"0102030405060708\"}";
762
763 uint32_t messageLen = strlen(message) + 1;
764 MessageBuff msg = {.length = messageLen, .buff = (uint8_t *)message};
765
766 MessagePacket *packet = ParseMessage(&msg);
767 ASSERT_NE(nullptr, packet);
768
769 EXPECT_EQ(1U, packet->type);
770 EXPECT_STREQ(except, (const char *)packet->payload);
771
772 FreeMessagePacket(packet);
773 }
774
775 HWTEST_F(DslmTest, ParseMessage_case2, TestSize.Level0)
776 {
777 const char *message = "{\"mege\":1,\"payload\":{\"version\":131072,\"challenge\":\"0102030405060708\"}}";
778
779 uint32_t messageLen = strlen(message) + 1;
780 MessageBuff msg = {.length = messageLen, .buff = (uint8_t *)message};
781
782 MessagePacket *packet = ParseMessage(&msg);
783 EXPECT_EQ(nullptr, packet);
784 FreeMessagePacket(packet);
785 }
786
787 HWTEST_F(DslmTest, ParseMessage_case3, TestSize.Level0)
788 {
789 const char *message = "{\"message\":1,\"pay\":{\"version\":131072,\"challenge\":\"0102030405060708\"}}";
790
791 uint32_t messageLen = strlen(message) + 1;
792 MessageBuff msg = {.length = messageLen, .buff = (uint8_t *)message};
793
794 MessagePacket *packet = ParseMessage(&msg);
795 EXPECT_EQ(nullptr, packet);
796 FreeMessagePacket(packet);
797 }
798
799 HWTEST_F(DslmTest, ParseMessage_case4, TestSize.Level0)
800 {
801 const MessageBuff *buff = nullptr;
802 EXPECT_EQ(nullptr, ParseMessage(buff));
803 }
804
805 HWTEST_F(DslmTest, ParseMessage_case5, TestSize.Level0)
806 {
807 uint8_t *message = nullptr;
808 uint32_t messageLen = 0;
809 MessageBuff msg = {.length = messageLen, .buff = message};
810
811 EXPECT_EQ(nullptr, ParseMessage(&msg));
812 }
813
814 HWTEST_F(DslmTest, ParseMessage_case6, TestSize.Level0)
815 {
816 uint8_t message[] = {'1', '2'};
817 uint32_t messageLen = 2;
818 MessageBuff msg = {.length = messageLen, .buff = message};
819 EXPECT_EQ(nullptr, ParseMessage(&msg));
820 }
821
822 HWTEST_F(DslmTest, ParseMessage_case7, TestSize.Level0)
823 {
824 uint8_t message[] = {1, 2, 0};
825 uint32_t messageLen = 3;
826 MessageBuff msg = {.length = messageLen, .buff = message};
827 EXPECT_EQ(nullptr, ParseMessage(&msg));
828 }
829
830 HWTEST_F(DslmTest, ParseMessage_case8, TestSize.Level0)
831 {
832 MockMalloc mock;
833
834 // mock the malloc return nullptr
835 EXPECT_CALL(mock, UtilsMalloc).WillRepeatedly(Return(nullptr));
836
837 const char *message = "{\"message\":1,\"payload\":{\"version\":131072,\"challenge\":\"0102030405060708\"}}";
838
839 uint32_t messageLen = strlen(message) + 1;
840 MessageBuff msg = {.length = messageLen, .buff = (uint8_t *)message};
841
842 MessagePacket *packet = ParseMessage(&msg);
843 ASSERT_EQ(nullptr, packet);
844 }
845
846 HWTEST_F(DslmTest, GetPkInfoListStr_case1, TestSize.Level0)
847 {
848 const char *udidStr = "device";
849 char *pkInfoListStr = nullptr;
850
851 int32_t result = GetPkInfoListStr(true, udidStr, &pkInfoListStr);
852 EXPECT_EQ(result, 0);
853 }
854
855 HWTEST_F(DslmTest, GetPkInfoListStr_case2, TestSize.Level0)
856 {
857 const char *udidStr = "device";
858 char *pkInfoListStr = nullptr;
859
860 MockMalloc mock;
861
862 // mock the malloc always return nullptr
863 EXPECT_CALL(mock, UtilsMalloc).WillOnce(Return(nullptr));
864
865 int32_t result = GetPkInfoListStr(true, udidStr, &pkInfoListStr);
866 EXPECT_EQ(result, ERR_MEMORY_ERR);
867 }
868
869 HWTEST_F(DslmTest, GetPkInfoListStr_case3, TestSize.Level0)
870 {
871 const char *udidStr = "device";
872 char *pkInfoListStr = nullptr;
873
874 MockStrcpy mock;
875 // mock the strcpy_s return a EINVAL
876 EXPECT_CALL(mock, strcpy_s).WillOnce(Return(EINVAL));
877
878 int32_t result = GetPkInfoListStr(true, udidStr, &pkInfoListStr);
879 EXPECT_EQ(result, ERR_MEMORY_ERR);
880 }
881
882 HWTEST_F(DslmTest, ParseDeviceSecInfoRequest_case1, TestSize.Level0)
883 {
884 const char *message = "{\"version\":3351057,\"challenge\":\"010203040a0b0c0d\"}";
885
886 uint32_t messageLen = strlen(message) + 1;
887 MessageBuff msg = {.length = messageLen, .buff = (uint8_t *)message};
888
889 RequestObject obj;
890 (void)memset_s(&obj, sizeof(RequestObject), 0, sizeof(RequestObject));
891
892 // 3351057 = 0x332211
893 int32_t ret = ParseDeviceSecInfoRequest(&msg, &obj);
894 EXPECT_EQ(0, ret);
895
896 EXPECT_EQ(0x332211U, obj.version);
897 EXPECT_EQ(0x0d0c0b0a04030201UL, obj.challenge);
898 EXPECT_EQ(0U, obj.arraySize);
899 }
900
901 HWTEST_F(DslmTest, ParseDeviceSecInfoRequest_case2, TestSize.Level0)
902 {
903 const char *message = "{\"version\":3351057,\"challenge\":\"z\"}";
904
905 uint32_t messageLen = strlen(message) + 1;
906 MessageBuff msg = {.length = messageLen, .buff = (uint8_t *)message};
907
908 RequestObject obj;
909 (void)memset_s(&obj, sizeof(RequestObject), 0, sizeof(RequestObject));
910
911 int32_t ret = ParseDeviceSecInfoRequest(&msg, &obj);
912 EXPECT_EQ(ERR_NO_CHALLENGE, ret);
913 }
914
915 HWTEST_F(DslmTest, ParseDeviceSecInfoRequest_case3, TestSize.Level0)
916 {
917 const char *message = "{\"version\":3351057,\"challenge\":1}";
918
919 uint32_t messageLen = strlen(message) + 1;
920 MessageBuff msg = {.length = messageLen, .buff = (uint8_t *)message};
921
922 RequestObject obj;
923 (void)memset_s(&obj, sizeof(RequestObject), 0, sizeof(RequestObject));
924 int32_t ret = ParseDeviceSecInfoRequest(&msg, &obj);
925 EXPECT_EQ(ERR_NO_CHALLENGE, ret);
926 }
927
928 HWTEST_F(DslmTest, ParseDeviceSecInfoRequest_case4, TestSize.Level0)
929 {
930 const char *message = "{\"version\":3351057,\"challssenge\":\"z\"}";
931
932 uint32_t messageLen = strlen(message) + 1;
933 MessageBuff msg = {.length = messageLen, .buff = (uint8_t *)message};
934
935 RequestObject obj;
936 (void)memset_s(&obj, sizeof(RequestObject), 0, sizeof(RequestObject));
937 int32_t ret = ParseDeviceSecInfoRequest(&msg, &obj);
938 EXPECT_EQ(ERR_NO_CHALLENGE, ret);
939 }
940
941 HWTEST_F(DslmTest, ParseDeviceSecInfoRequest_case5, TestSize.Level0)
942 {
943 const char *message = "{\"version\":3351057,\"challenge\":\"010203040a0b0c0d\",\"support\":[33,44,55]}";
944
945 uint32_t messageLen = strlen(message) + 1;
946 MessageBuff msg = {.length = messageLen, .buff = (uint8_t *)message};
947
948 RequestObject obj;
949 (void)memset_s(&obj, sizeof(RequestObject), 0, sizeof(RequestObject));
950
951 // 3351057 = 0x332211
952 int32_t ret = ParseDeviceSecInfoRequest(&msg, &obj);
953 EXPECT_EQ(static_cast<int32_t>(0), ret);
954 EXPECT_EQ(0x332211U, obj.version);
955 EXPECT_EQ(0x0d0c0b0a04030201U, obj.challenge);
956 // add support
957 EXPECT_EQ(3U, obj.arraySize);
958 EXPECT_EQ(33U, obj.credArray[0]);
959 EXPECT_EQ(44U, obj.credArray[1]);
960 EXPECT_EQ(55U, obj.credArray[2]);
961 }
962
963 HWTEST_F(DslmTest, ParseDeviceSecInfoRequest_case6, TestSize.Level0)
964 {
965 const char *message = "{\"version\":3351057,\"challenge\":\"010203040a0b0c0d\",\"support\":[]}";
966
967 uint32_t messageLen = strlen(message) + 1;
968 MessageBuff msg = {.length = messageLen, .buff = (uint8_t *)message};
969
970 RequestObject obj;
971 (void)memset_s(&obj, sizeof(RequestObject), 0, sizeof(RequestObject));
972
973 // 3351057 = 0x332211
974 int32_t ret = ParseDeviceSecInfoRequest(&msg, &obj);
975 EXPECT_EQ(0, ret);
976 EXPECT_EQ(0x332211U, obj.version);
977 EXPECT_EQ(0x0d0c0b0a04030201U, obj.challenge);
978 // add support
979 EXPECT_EQ(0U, obj.arraySize);
980 }
981
982 HWTEST_F(DslmTest, ParseDeviceSecInfoRequest_case7, TestSize.Level0)
983 {
984 const char *message = "{\"version\":3351057,\"challenge\":\"010203040a0b0c0d\",\"support\":[]}";
985 uint32_t messageLen = strlen(message) + 1;
986 MessageBuff msg = {.length = messageLen, .buff = (uint8_t *)message};
987
988 RequestObject obj;
989 (void)memset_s(&obj, sizeof(RequestObject), 0, sizeof(RequestObject));
990
991 {
992 int32_t ret = ParseDeviceSecInfoRequest(nullptr, &obj);
993 EXPECT_EQ(ERR_INVALID_PARA, ret);
994 }
995
996 {
997 int32_t ret = ParseDeviceSecInfoRequest(&msg, nullptr);
998 EXPECT_EQ(ERR_INVALID_PARA, ret);
999 }
1000
1001 {
1002 int32_t ret = ParseDeviceSecInfoRequest(nullptr, &obj);
1003 EXPECT_EQ(ERR_INVALID_PARA, ret);
1004 }
1005
1006 {
1007 msg.buff = nullptr;
1008 int32_t ret = ParseDeviceSecInfoRequest(&msg, &obj);
1009 EXPECT_EQ(ERR_INVALID_PARA, ret);
1010 }
1011 }
1012
1013 HWTEST_F(DslmTest, ParseDeviceSecInfoRequest_case8, TestSize.Level0)
1014 {
1015 const char *message = "{\"version\":3351057,\"challenge}";
1016
1017 uint32_t messageLen = strlen(message) + 1;
1018 MessageBuff msg = {.length = messageLen, .buff = (uint8_t *)message};
1019
1020 RequestObject obj;
1021 (void)memset_s(&obj, sizeof(RequestObject), 0, sizeof(RequestObject));
1022
1023 // 3351057 = 0x332211
1024 int32_t ret = ParseDeviceSecInfoRequest(&msg, &obj);
1025 EXPECT_EQ(ERR_INVALID_PARA, ret);
1026 }
1027
1028 HWTEST_F(DslmTest, ParseDeviceSecInfoResponse_case1, TestSize.Level0)
1029 {
1030 const char *message = "{\"version\":131072,\"challenge\":\"3C1F21EE53D3C4E2\",\"type\":2,\"info\":"
1031 "\"SkFERS1BTDAwOjg3QUQyOEQzQjFCLi4u\"}";
1032
1033 uint32_t messageLen = strlen(message) + 1;
1034 MessageBuff msg = {.length = messageLen, .buff = (uint8_t *)message};
1035
1036 uint64_t challenge;
1037 uint32_t version;
1038 DslmCredBuff *cred = nullptr;
1039
1040 // 131072 = 0x020000
1041 int32_t ret = ParseDeviceSecInfoResponse(&msg, &challenge, &version, &cred);
1042 EXPECT_EQ(0, ret);
1043 EXPECT_EQ(0x020000U, version);
1044
1045 EXPECT_EQ(0xE2C4D353EE211F3CUL, challenge);
1046
1047 const char *except = "JADE-AL00:87AD28D3B1B...";
1048 EXPECT_NE(nullptr, cred);
1049 EXPECT_EQ(2U, cred->type);
1050 EXPECT_EQ(strlen(except), cred->credLen);
1051 EXPECT_EQ(0, strncmp(except, (const char *)cred->credVal, cred->credLen));
1052 DestroyDslmCred(cred);
1053 }
1054
1055 HWTEST_F(DslmTest, ParseDeviceSecInfoResponse_case2, TestSize.Level0)
1056 {
1057 const char *message = "{\"version\":3351057,\"challssenge\":\"z\"}";
1058
1059 uint32_t messageLen = strlen(message) + 1;
1060 MessageBuff msg = {.length = messageLen, .buff = (uint8_t *)message};
1061
1062 uint64_t challenge;
1063 uint32_t ver;
1064 DslmCredBuff *cred = nullptr;
1065
1066 int32_t ret = ParseDeviceSecInfoResponse(&msg, &challenge, &ver, &cred);
1067 EXPECT_EQ(ERR_NO_CHALLENGE, ret);
1068 }
1069
1070 HWTEST_F(DslmTest, ParseDeviceSecInfoResponse_case3, TestSize.Level0)
1071 {
1072 const char *message =
1073 "{\"version\":131072,\"challenge\":\"3C1F21EE53D3C4E2\",\"type\":2,\"infod\":\"JADE-AL00:87AD28D3B1B...\"}";
1074
1075 uint32_t messageLen = strlen(message) + 1;
1076 MessageBuff msg = {.length = messageLen, .buff = (uint8_t *)message};
1077
1078 uint64_t challenge;
1079 uint32_t ver;
1080 DslmCredBuff *cred = nullptr;
1081
1082 int32_t ret = ParseDeviceSecInfoResponse(&msg, &challenge, &ver, &cred);
1083 EXPECT_EQ(ERR_NO_CRED, ret);
1084 }
1085
1086 HWTEST_F(DslmTest, ParseDeviceSecInfoResponse_case4, TestSize.Level0)
1087 {
1088 const char *message =
1089 "{\"version\":131072,\"challenge\":\"3C1F21EE53D3C4E2\",\"type\":2,\"infod\":\"JADE-AL00:87AD28D3B1B...\"}";
1090
1091 uint32_t messageLen = strlen(message) + 1;
1092 MessageBuff msg = {.length = messageLen, .buff = (uint8_t *)message};
1093
1094 uint64_t challenge;
1095 uint32_t ver;
1096 DslmCredBuff **cred = nullptr;
1097
1098 int32_t ret = ParseDeviceSecInfoResponse(&msg, &challenge, &ver, cred);
1099 EXPECT_EQ(ERR_INVALID_PARA, ret);
1100 }
1101
1102 HWTEST_F(DslmTest, ParseDeviceSecInfoResponse_case5, TestSize.Level0)
1103 {
1104 const char *message = "{\"version\":131072,\"challenge\":\"3C1F21EE53D3C4E2\",\"type\":2,\"info\":"
1105 "\"SkFERS1BTDAwOjg3QUQyOEQzQjFCLi4u\"}";
1106
1107 uint32_t messageLen = strlen(message) + 1;
1108 // msg has null buff
1109 MessageBuff msg = {.length = messageLen, .buff = nullptr};
1110
1111 uint64_t challenge;
1112 uint32_t version;
1113 DslmCredBuff *cred = nullptr;
1114
1115 // 131072 = 0x020000
1116 int32_t ret = ParseDeviceSecInfoResponse(&msg, &challenge, &version, &cred);
1117 EXPECT_EQ(ERR_INVALID_PARA, ret);
1118 }
1119
1120 HWTEST_F(DslmTest, ParseDeviceSecInfoResponse_case6, TestSize.Level0)
1121 {
1122 int32_t ret;
1123 const char *message = "{\"version\":131072,\"challenge\":\"3C1F21EE53D3C4E2\",\"type\":2,\"info\":"
1124 "\"SkFERS1BTDAwOjg3QUQyOEQzQjFCLi4u\"}";
1125 uint32_t messageLen = strlen(message) + 1;
1126 MessageBuff msg = {.length = messageLen, .buff = (uint8_t *)message};
1127
1128 uint64_t challenge;
1129 uint32_t ver;
1130 DslmCredBuff cred;
1131 memset_s(&cred, sizeof(DslmCredBuff), 0, sizeof(DslmCredBuff));
1132 DslmCredBuff *credPtr = &cred;
1133
1134 {
1135 // malformed inputs
1136 ret = ParseDeviceSecInfoResponse(&msg, &challenge, &ver, nullptr);
1137 EXPECT_EQ(ERR_INVALID_PARA, ret);
1138 }
1139
1140 {
1141 // malformed inputs, credPtr != nullptr
1142 ret = ParseDeviceSecInfoResponse(&msg, &challenge, &ver, &credPtr);
1143 EXPECT_EQ(ERR_INVALID_PARA, ret);
1144 }
1145
1146 {
1147 ret = ParseDeviceSecInfoResponse(nullptr, &challenge, &ver, &credPtr);
1148 EXPECT_EQ(ERR_INVALID_PARA, ret);
1149 }
1150
1151 {
1152 ret = ParseDeviceSecInfoResponse(&msg, nullptr, &ver, &credPtr);
1153 EXPECT_EQ(ERR_INVALID_PARA, ret);
1154 }
1155
1156 {
1157 ret = ParseDeviceSecInfoResponse(&msg, &challenge, nullptr, &credPtr);
1158 EXPECT_EQ(ERR_INVALID_PARA, ret);
1159 }
1160 }
1161
1162 HWTEST_F(DslmTest, ParseDeviceSecInfoResponse_case7, TestSize.Level0)
1163 {
1164 int32_t ret;
1165 uint64_t challenge;
1166 uint32_t version;
1167 DslmCredBuff *cred = nullptr;
1168
1169 {
1170 // malformed challenge
1171 const char *message = "{\"version\":131072,\"challenge\":\"3C1F21EE53D3C4E2A\",\"type\":2,\"info\":"
1172 "\"SkFERS1BTDAwOjg3QUQyOEQzQjFCLi4u\"}";
1173 uint32_t messageLen = strlen(message) + 1;
1174 MessageBuff msg = {.length = messageLen, .buff = (uint8_t *)message};
1175
1176 // 131072 = 0x020000
1177 ret = ParseDeviceSecInfoResponse(&msg, &challenge, &version, &cred);
1178 EXPECT_EQ(ERR_NO_CHALLENGE, ret);
1179 }
1180
1181 {
1182 // malformed json
1183 const char *message = "{\"version\":131072,\"challenge\":\"3C1F21EE53D3C4E2\",\"type\":2,\"infod}";
1184 uint32_t messageLen = strlen(message) + 1;
1185 MessageBuff msg = {.length = messageLen, .buff = (uint8_t *)message};
1186
1187 ret = ParseDeviceSecInfoResponse(&msg, &challenge, &version, &cred);
1188 EXPECT_EQ(ERR_INVALID_PARA, ret);
1189 }
1190 }
1191
1192 HWTEST_F(DslmTest, ParseDeviceSecInfoResponse_case8, TestSize.Level0)
1193 {
1194 // malformed info field
1195 const char *message = "{\"version\":131072,\"challenge\":\"3C1F21EE53D3C4E2\",\"type\":2,\"info\":"
1196 "\"SkFERS1BTDAwOjg3QUQyOEQzQjFCLi4ux\"}";
1197
1198 uint32_t messageLen = strlen(message) + 1;
1199 MessageBuff msg = {.length = messageLen, .buff = (uint8_t *)message};
1200
1201 uint64_t challenge;
1202 uint32_t version;
1203 DslmCredBuff *cred = nullptr;
1204
1205 // 131072 = 0x020000
1206 int32_t ret = ParseDeviceSecInfoResponse(&msg, &challenge, &version, &cred);
1207 EXPECT_EQ(ERR_NO_CRED, ret);
1208 }
1209
1210 HWTEST_F(DslmTest, RandomValue_case1, TestSize.Level0)
1211 {
1212 RandomValue rand1 = {0, {0}};
1213 (void)memset_s(&rand1, sizeof(RandomValue), 0, sizeof(RandomValue));
1214 GenerateRandom(&rand1, sizeof(uint64_t));
1215
1216 RandomValue rand2 = {0, {0}};
1217 (void)memset_s(&rand2, sizeof(RandomValue), 0, sizeof(RandomValue));
1218 GenerateRandom(&rand2, sizeof(uint64_t));
1219
1220 EXPECT_EQ(sizeof(uint64_t), rand1.length);
1221 EXPECT_EQ(sizeof(uint64_t), rand2.length);
1222
1223 EXPECT_GT(rand1.value[0] + rand1.value[1] + rand1.value[2] + rand1.value[3], 0);
1224 EXPECT_EQ(rand1.value[31] + rand1.value[30] + rand1.value[29] + rand1.value[28], 0);
1225 EXPECT_NE(0, memcmp(rand1.value, rand2.value, sizeof(uint64_t)));
1226 }
1227
1228 HWTEST_F(DslmTest, RandomValue_case2, TestSize.Level0)
1229 {
1230 RandomValue rand = {0, {0}};
1231 (void)memset_s(&rand, sizeof(RandomValue), 0, sizeof(RandomValue));
1232
1233 GenerateRandom(&rand, 1024);
1234 EXPECT_EQ(static_cast<uint32_t>(RANDOM_MAX_LEN), rand.length);
1235
1236 GenerateRandom(nullptr, 1024);
1237 }
1238
1239 HWTEST_F(DslmTest, GetMillisecondSinceBoot_case1, TestSize.Level0)
1240 {
1241 uint64_t tick = 100;
1242 uint64_t start = GetMillisecondSinceBoot();
1243 EXPECT_GT(start, 0U);
1244 this_thread::sleep_for(milliseconds(tick));
1245 uint64_t end = GetMillisecondSinceBoot();
1246 EXPECT_GT(end, 0U);
1247
1248 EXPECT_GT(end - start, tick - 25);
1249 EXPECT_LT(end - start, tick + 25);
1250 }
1251
1252 HWTEST_F(DslmTest, GetMillisecondSince1970_case1, TestSize.Level0)
1253 {
1254 uint64_t tick = 100;
1255 uint64_t start = GetMillisecondSince1970();
1256 EXPECT_GT(start, 0U);
1257 this_thread::sleep_for(milliseconds(tick));
1258 uint64_t end = GetMillisecondSince1970();
1259 EXPECT_GT(end, 0U);
1260
1261 EXPECT_GT(end - start, tick - 25);
1262 EXPECT_LT(end - start, tick + 25);
1263 }
1264
1265 HWTEST_F(DslmTest, GetDateTime_case1, TestSize.Level0)
1266 {
1267 {
1268 DateTime date;
1269 EXPECT_TRUE(GetDateTimeByMillisecondSince1970(GetMillisecondSince1970(), &date));
1270 }
1271 {
1272 DateTime date;
1273 EXPECT_TRUE(GetDateTimeByMillisecondSinceBoot(GetMillisecondSinceBoot(), &date));
1274 }
1275 }
1276
1277 HWTEST_F(DslmTest, InitDslmCredentialFunctions_case1, TestSize.Level0)
1278 {
1279 bool ret = InitDslmCredentialFunctions(NULL);
1280 EXPECT_EQ(false, ret);
1281 }
1282
1283 HWTEST_F(DslmTest, OhosDslmCred_case1, TestSize.Level0)
1284 {
1285 const DeviceIdentify identify = {DEVICE_ID_MAX_LEN, {0}};
1286 RequestObject object;
1287
1288 object.arraySize = 1;
1289 object.credArray[0] = CRED_TYPE_STANDARD;
1290 object.challenge = 0x1234567812345678;
1291 object.version = 0x112234;
1292
1293 DslmCredBuff *cred = nullptr;
1294
1295 int32_t ret = DefaultRequestDslmCred(&identify, &object, &cred);
1296
1297 DslmCredInfo info;
1298 (void)memset_s(&info, sizeof(DslmCredInfo), 0, sizeof(DslmCredInfo));
1299
1300 ret = DefaultVerifyDslmCred(&identify, object.challenge, cred, &info);
1301
1302 DestroyDslmCred(cred);
1303 EXPECT_EQ(false, GetPeerDeviceOnlineStatus(nullptr, nullptr));
1304 }
1305
1306 HWTEST_F(DslmTest, OhosDslmCred_case2, TestSize.Level0)
1307 {
1308 const DeviceIdentify identify = {DEVICE_ID_MAX_LEN, {0}};
1309 RequestObject object;
1310
1311 object.arraySize = 1;
1312 object.credArray[0] = CRED_TYPE_STANDARD;
1313 object.challenge = 0x1234567812345678;
1314 object.version = 0x112234;
1315
1316 DslmCredBuff cred = {
1317 .type = (CredType)3000,
1318 .credLen = sizeof(CRED),
1319 .credVal = &CRED[0],
1320 };
1321
1322 DslmCredInfo info;
1323 (void)memset_s(&info, sizeof(DslmCredInfo), 0, sizeof(DslmCredInfo));
1324
1325 int32_t ret = DefaultVerifyDslmCred(&identify, object.challenge, &cred, &info);
1326 EXPECT_EQ(ERR_CALL_EXTERNAL_FUNC, ret);
1327 }
1328
1329 HWTEST_F(DslmTest, OhosDslmCred_case3, TestSize.Level0)
1330 {
1331 struct HksBlob certs[] = {
1332 { .data = g_firstCert, .size = sizeof(g_firstCert) },
1333 { .data = g_secondCert, .size = sizeof(g_secondCert) },
1334 { .data = g_thirdCert, .size = sizeof(g_thirdCert) },
1335 { .data = g_fourthCert, .size = sizeof(g_fourthCert) },
1336 };
1337 struct HksCertChain certChain = {
1338 .certs = certs,
1339 .certsCount = 4
1340 };
1341 uint8_t *cert = nullptr;
1342 uint32_t certLen = 0;
1343
1344 int32_t ret = HksCertChainToBuffer(&certChain, &cert, &certLen);
1345 EXPECT_EQ(ret, 0);
1346
1347 const DeviceIdentify identify = {DEVICE_ID_MAX_LEN, {0}};
1348 RequestObject object;
1349 object.arraySize = 1;
1350 object.credArray[0] = CRED_TYPE_STANDARD;
1351 object.challenge = 0x1234567812345678;
1352 object.version = 0x112234;
1353 DslmCredBuff cred = {
1354 .type = (CredType)3000,
1355 .credLen = certLen,
1356 .credVal = cert,
1357 };
1358 DslmCredInfo info;
1359 (void)memset_s(&info, sizeof(DslmCredInfo), 0, sizeof(DslmCredInfo));
1360
1361 ret = DefaultVerifyDslmCred(&identify, object.challenge, &cred, &info);
1362 EXPECT_EQ(1, ret);
1363 FREE(cert);
1364 cert = nullptr;
1365 }
1366
1367 HWTEST_F(DslmTest, OnRequestDeviceSecLevelInfo_case1, TestSize.Level0)
1368 {
1369 const DeviceIdentify device = {DEVICE_ID_MAX_LEN, {'a', 'b', 'c', 'd', 'e', 'f', 'g'}};
1370
1371 const RequestOption option = {
1372 .challenge = 0xffffffffffffffff,
1373 .timeout = 2,
1374 };
1375
1376 {
1377 uint32_t cookie = 1234;
1378 DslmRequestCallbackMock mockCallback;
1379 EXPECT_CALL(mockCallback, RequestCallback(_, _, _)).Times(Exactly(0));
1380 int32_t ret = OnRequestDeviceSecLevelInfo(&device, &option, 0, cookie, DslmRequestCallbackMock::MockedCallback);
1381 EXPECT_EQ(static_cast<int32_t>(ret), ERR_MSG_NOT_INIT);
1382 }
1383
1384 {
1385 uint32_t cookie = 1234;
1386 DslmRequestCallbackMock mockCallback;
1387 EXPECT_CALL(mockCallback, RequestCallback(_, _, _)).Times(Exactly(0));
1388 int32_t ret = OnRequestDeviceSecLevelInfo(nullptr, &option, 0, cookie, DslmRequestCallbackMock::MockedCallback);
1389 EXPECT_EQ(static_cast<int32_t>(ret), ERR_INVALID_PARA);
1390 }
1391
1392 {
1393 uint32_t cookie = 1234;
1394 DslmRequestCallbackMock mockCallback;
1395 EXPECT_CALL(mockCallback, RequestCallback(_, _, _)).Times(Exactly(0));
1396 int32_t ret = OnRequestDeviceSecLevelInfo(&device, nullptr, 0, cookie, DslmRequestCallbackMock::MockedCallback);
1397 EXPECT_EQ(static_cast<int32_t>(ret), ERR_INVALID_PARA);
1398 }
1399
1400 {
1401 uint32_t cookie = 5678;
1402 DslmMsgInterfaceMock mockMsg;
1403 DslmRequestCallbackMock mockCallback;
1404 EXPECT_CALL(mockMsg, IsMessengerReady(_)).Times(AtLeast(1));
1405 EXPECT_CALL(mockMsg, GetSelfDeviceIdentify(_, _, _)).Times(AtLeast(1));
1406 EXPECT_CALL(mockMsg, GetDeviceOnlineStatus(_, _, _)).Times(AtLeast(1)).WillRepeatedly(Return(false));
1407 EXPECT_CALL(mockCallback, RequestCallback(_, _, _)).Times(Exactly(0));
1408 int32_t ret = OnRequestDeviceSecLevelInfo(&device, &option, 0, cookie, DslmRequestCallbackMock::MockedCallback);
1409 EXPECT_EQ(static_cast<int32_t>(ret), ERR_NOEXIST_DEVICE);
1410
1411 EXPECT_CALL(mockMsg, SendMsgTo(_, _, _, _, _)).Times(AtLeast(2));
1412 mockMsg.MakeMsgLoopback();
1413 mockMsg.MakeDeviceOnline(&device);
1414 BlockCheckDeviceStatus(&device, STATE_SUCCESS, 10000);
1415 mockMsg.MakeDeviceOffline(&device);
1416 }
1417 }
1418
1419 HWTEST_F(DslmTest, OnRequestDeviceSecLevelInfo_case2, TestSize.Level0)
1420 {
1421 const DeviceIdentify device = {DEVICE_ID_MAX_LEN, {'a', 'b', 'c', 'd', 'e', 'f', 'g'}};
1422
1423 const RequestOption option = {
1424 .challenge = 0xffffffffffffffff,
1425 .timeout = 2,
1426 };
1427
1428 {
1429 uint32_t cookie = 0xabcd;
1430 DslmMsgInterfaceMock mockMsg;
1431 EXPECT_CALL(mockMsg, IsMessengerReady(_)).Times(AtLeast(1));
1432 EXPECT_CALL(mockMsg, GetSelfDeviceIdentify(_, _, _)).Times(AtLeast(1));
1433 EXPECT_CALL(mockMsg, GetDeviceOnlineStatus(_, _, _)).Times(AtLeast(1)).WillRepeatedly(Return(true));
1434
1435 int32_t ret = OnRequestDeviceSecLevelInfo(&device, &option, 0, cookie, DslmRequestCallbackMock::MockedCallback);
1436 EXPECT_EQ(ret, 0);
1437 mockMsg.MakeDeviceOffline(&device);
1438 }
1439
1440 {
1441 const DeviceIdentify device = {DEVICE_ID_MAX_LEN, {0, 'b', 'c', 'd', 'e', 'f', 'g'}};
1442 uint32_t cookie = 0xabcd;
1443 DslmMsgInterfaceMock mockMsg;
1444 EXPECT_CALL(mockMsg, IsMessengerReady(_)).Times(AtLeast(1));
1445 EXPECT_CALL(mockMsg, GetSelfDeviceIdentify(_, _, _)).Times(AtLeast(1));
1446 EXPECT_CALL(mockMsg, SendMsgTo(_, _, _, _, _)).Times(Exactly(0));
1447 DslmRequestCallbackMock mockCallback;
__anon109849350102(const DslmCallbackInfo *info) 1448 auto isRightLevel = [](const DslmCallbackInfo *info) { return info->level >= 1; };
1449 EXPECT_CALL(mockCallback, RequestCallback(cookie, 0, Truly(isRightLevel))).Times(Exactly(1));
1450
1451 int32_t ret = OnRequestDeviceSecLevelInfo(&device, &option, 0, cookie, DslmRequestCallbackMock::MockedCallback);
1452 EXPECT_EQ(ret, 0);
1453 mockMsg.MakeDeviceOffline(&device);
1454 }
1455 }
1456
1457 HWTEST_F(DslmTest, OnRequestDeviceSecLevelInfo_case3, TestSize.Level0)
1458 {
1459 constexpr uint32_t maxNotifySize = 64;
1460
1461 const DeviceIdentify device = {DEVICE_ID_MAX_LEN, {'a'}};
1462 const RequestOption option = {
1463 .challenge = 0xffabcdffffffffee,
1464 .timeout = 2,
1465 .extra = 0,
1466 };
1467
1468 DslmMsgInterfaceMock mockMsg;
1469 EXPECT_CALL(mockMsg, IsMessengerReady(_)).Times(AtLeast(1));
1470 EXPECT_CALL(mockMsg, GetSelfDeviceIdentify(_, _, _)).Times(AtLeast(1));
1471 EXPECT_CALL(mockMsg, GetDeviceOnlineStatus(_, _, _)).Times(AtLeast(1)).WillRepeatedly(Return(true));
__anon109849350202(const uint8_t *message) 1472 auto isSendRequestOut = [](const uint8_t *message) {
1473 const char *prefix = "{\"message\":1,\"payload\":{\"version\":196608,\"challenge\":\"";
1474 const string msg = string(static_cast<const char *>(static_cast<const void *>(message)));
1475 EXPECT_EQ(msg.rfind(prefix, 0), 0U);
1476 return true;
1477 };
1478
1479 uint32_t cookie = 0x4567;
1480 EXPECT_CALL(mockMsg, SendMsgTo(_, _, _, Truly(isSendRequestOut), _)).Times(Exactly(1)).WillRepeatedly(Return(true));
1481
1482 DslmDeviceInfo *info = CreatOrGetDslmDeviceInfo(&device);
1483 ASSERT_NE(info, nullptr);
1484
1485 EXPECT_EQ(info->notifyListSize, 0U);
1486
1487 DslmRequestCallbackMock callback;
1488 EXPECT_CALL(callback, RequestCallback(cookie, Ne(0U), Ne(nullptr))).Times(Exactly(maxNotifySize));
1489 for (uint32_t i = 1; i <= maxNotifySize; i++) {
1490 int32_t ret = OnRequestDeviceSecLevelInfo(&device, &option, 0, cookie, DslmRequestCallbackMock::MockedCallback);
1491 EXPECT_EQ(static_cast<uint32_t>(ret), 0U);
1492 EXPECT_EQ(info->notifyListSize, i);
1493 EXPECT_EQ(info->historyListSize, 0U);
1494 }
1495 for (uint32_t i = 1; i <= maxNotifySize; i++) {
1496 int32_t ret = OnRequestDeviceSecLevelInfo(&device, &option, 0, cookie, DslmRequestCallbackMock::MockedCallback);
1497 EXPECT_EQ(static_cast<uint32_t>(ret), ERR_SA_BUSY);
1498 EXPECT_EQ(info->notifyListSize, maxNotifySize);
1499 EXPECT_EQ(info->historyListSize, 0U);
1500 }
1501 mockMsg.MakeDeviceOffline(&device);
1502
1503 EXPECT_EQ(info->notifyListSize, 0U);
1504 EXPECT_EQ(info->historyListSize, 30U); // 30 is the max history list size
1505 }
1506
1507 HWTEST_F(DslmTest, OnRequestDeviceSecLevelInfo_case4, TestSize.Level0)
1508 {
1509 NiceMock<DslmMsgInterfaceMock> mockMsg;
1510 DslmRequestCallbackMock mockCallback;
1511
1512 EXPECT_CALL(mockMsg, IsMessengerReady(_)).Times(AtLeast(1));
1513 EXPECT_CALL(mockMsg, GetDeviceOnlineStatus(_, _, _)).Times(AtLeast(1)).WillRepeatedly(Return(true));
1514 EXPECT_CALL(mockMsg, SendMsgTo(_, _, _, _, _)).Times(AtLeast(1)).WillRepeatedly(Return(true));
1515 EXPECT_CALL(mockMsg, GetSelfDeviceIdentify(_, _, _)).Times(AtLeast(1));
1516
1517 mutex mtx;
1518 condition_variable cv;
1519 int32_t cnt = 0;
1520 const time_point<system_clock> start = system_clock::now();
1521 const int32_t reqTimes = 3;
1522
1523 uint32_t cookies[] = {0, 0x1234, 0x5678, 0xabcd};
1524 uint32_t timeouts[] = {0, 1, 3, 5};
1525
__anon109849350302(uint32_t cookie) 1526 auto checkCookie = [&mtx, &cv, &cnt, &start, &cookies, &timeouts](uint32_t cookie) {
1527 unique_lock<mutex> lck(mtx);
1528 cnt++;
1529 cv.notify_one();
1530 time_point<system_clock> curr = system_clock::now();
1531 auto cost = duration_cast<seconds>(curr - start).count();
1532 EXPECT_EQ(cookie, cookies[cnt]);
1533 EXPECT_EQ(cost, timeouts[cnt]);
1534 return true;
1535 };
1536
1537 EXPECT_CALL(mockCallback, RequestCallback(Truly(checkCookie), ERR_TIMEOUT, _)).Times(Exactly(3));
1538
1539 const DeviceIdentify device = {DEVICE_ID_MAX_LEN, {'a', 'b', 'c', 'd', 'e', 'f', 'a', 'b'}};
1540 RequestOption option;
1541 for (int i = 1; i <= reqTimes; i++) {
1542 option.timeout = timeouts[i];
1543 int32_t ret =
1544 OnRequestDeviceSecLevelInfo(&device, &option, i, cookies[i], DslmRequestCallbackMock::MockedCallback);
1545 EXPECT_EQ(static_cast<uint32_t>(ret), 0U);
1546 }
1547
1548 unique_lock<mutex> lck(mtx);
__anon109849350402() 1549 cv.wait(lck, [&cnt]() { return (cnt == reqTimes); });
1550 mockMsg.MakeDeviceOffline(&device);
1551 }
1552
1553 HWTEST_F(DslmTest, OnRequestDeviceSecLevelInfo_case5, TestSize.Level0)
1554 {
1555 const DeviceIdentify device = {DEVICE_ID_MAX_LEN, {'a', 'b', 'c', 'd', 'e', 'f', 'a', 'b'}};
1556 const RequestOption option = {
1557 .challenge = 0xffabcdffffffffee,
1558 .timeout = 2,
1559 .extra = 0,
1560 };
1561 uint32_t cookie = 1234;
1562
1563 int32_t ret = OnRequestDeviceSecLevelInfo(&device, &option, 0, cookie, nullptr);
1564 EXPECT_EQ(ERR_INVALID_PARA, ret);
1565 }
1566
1567 HWTEST_F(DslmTest, OnPeerMsgRequestInfoReceived_case1, TestSize.Level0)
1568 {
1569 const char *input = "{\"version\":65536,\"challenge\":\"0102030405060708\"}";
1570 uint32_t len = strlen(input) + 1;
1571
1572 const DeviceIdentify device = {DEVICE_ID_MAX_LEN, {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i'}};
1573
1574 (void)OnPeerMsgRequestInfoReceived(&device, (const uint8_t *)input, len);
1575
1576 int32_t ret = OnPeerMsgRequestInfoReceived(&device, nullptr, len);
1577 EXPECT_EQ(ERR_INVALID_PARA, ret);
1578
1579 len = 0;
1580 ret = OnPeerMsgRequestInfoReceived(&device, (const uint8_t *)input, len);
1581 EXPECT_EQ(ERR_INVALID_PARA, ret);
1582 }
1583
1584 HWTEST_F(DslmTest, OnPeerMsgRequestInfoReceived_case2, TestSize.Level0)
1585 {
1586 const DeviceIdentify *device = nullptr;
1587 const char *input = "{\"version\":65536,\"challenge\":\"0102030405060708\"}";
1588 uint32_t len = strlen(input) + 1;
1589
1590 int32_t ret = OnPeerMsgRequestInfoReceived(device, (const uint8_t *)input, len);
1591 EXPECT_EQ(ERR_INVALID_PARA, ret);
1592 }
1593
1594 HWTEST_F(DslmTest, OnPeerMsgResponseInfoReceived_case1, TestSize.Level0)
1595 {
1596 const char *input = "{\"version\":65536,\"type\":0,\"challenge\":\"EEFFFFFFFFCDABFF\",\"info\":"
1597 "\"MDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYxMDExMTIxMzE0MTUxNkFBQkJDQ0RE\"}";
1598 uint32_t len = strlen(input) + 1;
1599
1600 DeviceIdentify device = {8, {'a', 'b', 'c', 'd', 'e', 'f', 'g'}};
1601
1602 int32_t ret = OnPeerMsgResponseInfoReceived(&device, (const uint8_t *)input, len);
1603 EXPECT_EQ(ERR_NOEXIST_DEVICE, static_cast<int32_t>(ret));
1604
1605 ret = OnPeerMsgResponseInfoReceived(&device, nullptr, len);
1606 EXPECT_EQ(ERR_INVALID_PARA, ret);
1607
1608 len = 0;
1609 ret = OnPeerMsgResponseInfoReceived(&device, (const uint8_t *)input, len);
1610 EXPECT_EQ(ERR_INVALID_PARA, ret);
1611 }
1612
1613 HWTEST_F(DslmTest, OnPeerMsgResponseInfoReceived_case2, TestSize.Level0)
1614 {
1615 const DeviceIdentify *device = nullptr;
1616 const char *input = "{\"version\":65536,\"challenge\":\"0102030405060708\"}";
1617 uint32_t len = strlen(input) + 1;
1618
1619 int32_t ret = OnPeerMsgResponseInfoReceived(device, (const uint8_t *)input, len);
1620 EXPECT_EQ(ERR_INVALID_PARA, ret);
1621 }
1622
1623 HWTEST_F(DslmTest, InitSelfDeviceSecureLevel_case1, TestSize.Level0)
1624 {
1625 const DeviceIdentify device = {DEVICE_ID_MAX_LEN, {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i'}};
1626 DslmDeviceInfo *info = GetDslmDeviceInfo(&device);
1627 EXPECT_EQ(nullptr, info);
1628
1629 DslmMsgInterfaceMock mockMsg;
1630 mockMsg.MakeSelfDeviceId(&device);
1631 mockMsg.MakeMsgLoopback();
1632 EXPECT_CALL(mockMsg, GetSelfDeviceIdentify(_, _, _)).Times(AtLeast(1));
1633 InitSelfDeviceSecureLevel();
1634
1635 info = GetDslmDeviceInfo(&device);
1636 ASSERT_NE(nullptr, info);
1637 EXPECT_GE(info->credInfo.credLevel, 1U);
1638 DslmUtilsStopTimerTask(info->timeHandle);
1639 mockMsg.MakeDeviceOffline(&device);
1640 }
1641
1642 HWTEST_F(DslmTest, InitSelfDeviceSecureLevel_case2, TestSize.Level0)
1643 {
1644 const DeviceIdentify device = {DEVICE_ID_MAX_LEN, {'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x'}};
1645
1646 DslmDeviceInfo *info = GetDslmDeviceInfo(&device);
1647 EXPECT_EQ(nullptr, info);
1648
1649 NiceMock<DslmMsgInterfaceMock> mockMsg;
1650 EXPECT_CALL(mockMsg, SendMsgTo(_, _, _, _, _)).Times(Exactly(6));
1651 mockMsg.MakeDeviceOnline(&device);
1652
1653 info = GetDslmDeviceInfo(&device);
1654 ASSERT_NE(nullptr, info);
1655 EXPECT_EQ(1U, info->queryTimes);
1656 EXPECT_EQ(STATE_WAITING_CRED_RSP, info->machine.currState);
1657
1658 BlockCheckDeviceStatus(&device, STATE_SUCCESS, 5000);
1659 EXPECT_EQ(STATE_FAILED, info->machine.currState);
1660 EXPECT_LT(5U, info->queryTimes);
1661 DslmUtilsStopTimerTask(info->timeHandle);
1662 mockMsg.MakeDeviceOffline(&device);
1663 }
1664
1665 HWTEST_F(DslmTest, InnerKitsTest_case1, TestSize.Level0)
1666 {
1667 DeviceIdentify device = {DEVICE_ID_MAX_LEN, {0}};
1668
1669 DeviceSecurityInfo *info = nullptr;
1670 int32_t ret = RequestDeviceSecurityInfo(&device, nullptr, &info);
1671 EXPECT_EQ(ret, 0);
1672 int32_t level = 0;
1673 ret = GetDeviceSecurityLevelValue(info, &level);
1674 FreeDeviceSecurityInfo(info);
1675 EXPECT_EQ(ret, 0);
1676 EXPECT_GE(level, 1);
1677 }
1678
1679 static int32_t g_cnt = 0;
1680 static mutex g_mtx;
1681 static condition_variable g_cv;
1682
TestDeviceSecurityInfoCallback(const DeviceIdentify * identify,struct DeviceSecurityInfo * info)1683 void TestDeviceSecurityInfoCallback(const DeviceIdentify *identify, struct DeviceSecurityInfo *info)
1684 {
1685 unique_lock<mutex> lck(g_mtx);
1686 int32_t level = 0;
1687 int32_t ret = GetDeviceSecurityLevelValue(info, &level);
1688 FreeDeviceSecurityInfo(info);
1689 EXPECT_EQ(ret, 0);
1690 EXPECT_GE(level, 1);
1691 g_cnt++;
1692 g_cv.notify_one();
1693 }
1694
1695 HWTEST_F(DslmTest, InnerKitsTest_case2, TestSize.Level0)
1696 {
1697 DeviceIdentify device = {DEVICE_ID_MAX_LEN, {0}};
1698
1699 g_cnt = 0;
1700 int ret = RequestDeviceSecurityInfoAsync(&device, nullptr, TestDeviceSecurityInfoCallback);
1701 EXPECT_EQ(ret, 0);
1702
1703 ret = RequestDeviceSecurityInfoAsync(&device, nullptr, TestDeviceSecurityInfoCallback);
1704 EXPECT_EQ(ret, 0);
1705
1706 ret = RequestDeviceSecurityInfoAsync(&device, nullptr, TestDeviceSecurityInfoCallback);
1707 EXPECT_EQ(ret, 0);
1708
1709 unique_lock<mutex> lck(g_mtx);
__anon109849350502() 1710 g_cv.wait_for(lck, std::chrono::milliseconds(2000), []() { return (g_cnt == 3); });
1711 EXPECT_EQ(g_cnt, 3);
1712 }
1713
1714 HWTEST_F(DslmTest, InnerKitsTest_case3, TestSize.Level0)
1715 {
1716 DeviceIdentify device = {DEVICE_ID_MAX_LEN, {0}};
1717 (void)memset_s(device.identity, DEVICE_ID_MAX_LEN, 'F', DEVICE_ID_MAX_LEN);
1718 DeviceSecurityInfo *info = nullptr;
1719 int32_t ret = RequestDeviceSecurityInfo(&device, nullptr, &info);
1720 EXPECT_EQ(ret, ERR_NOEXIST_DEVICE);
1721 }
1722
1723 HWTEST_F(DslmTest, GetSupportedCredTypes_case1, TestSize.Level0)
1724 {
1725 int32_t ret = GetSupportedCredTypes(nullptr, 0);
1726 EXPECT_EQ(0, ret);
1727 }
1728
1729 /**
1730 * @tc.name: GetSupportedCredTypes_case2
1731 * @tc.desc: function GetSupportedCredTypes with malformed inputs
1732 * @tc.type: FUNC
1733 * @tc.require: issueNumber
1734 */
1735 HWTEST_F(DslmTest, GetSupportedCredTypes_case2, TestSize.Level0)
1736 {
1737 int32_t ret;
1738 CredType list[] = {CRED_TYPE_MINI, CRED_TYPE_SMALL, CRED_TYPE_STANDARD, CRED_TYPE_LARGE};
1739 ret = GetSupportedCredTypes(list, 2);
1740 EXPECT_EQ(2, ret);
1741
1742 ret = GetSupportedCredTypes(list, 0);
1743 EXPECT_EQ(0, ret);
1744 }
1745
1746 HWTEST_F(DslmTest, CreateDslmCred_case1, TestSize.Level0)
1747 {
1748 CredType type = CRED_TYPE_STANDARD;
1749
1750 EXPECT_EQ(nullptr, CreateDslmCred(type, 0, nullptr));
1751 }
1752
1753 HWTEST_F(DslmTest, CreateDslmCred_case2, TestSize.Level0)
1754 {
1755 uint8_t buff[BUFF_LEN];
1756 memset_s(buff, sizeof(buff), 'c', sizeof(buff));
1757 TlvCommon *ptr = (TlvCommon *)buff;
1758 ptr->tag = 0x110;
1759 ptr->len = PTR_LEN;
1760 CredType type = CRED_TYPE_STANDARD;
1761
1762 EXPECT_EQ(nullptr, CreateDslmCred(type, 0, buff));
1763
1764 EXPECT_EQ(nullptr, CreateDslmCred(type, MAX_CRED_LEN + 1, buff));
1765 }
1766
1767 HWTEST_F(DslmTest, CheckAndGenerateChallenge_case1, TestSize.Level0)
1768 {
1769 DslmDeviceInfo device;
1770 (void)memset_s(&device, sizeof(DslmDeviceInfo), 0, sizeof(DslmDeviceInfo));
1771
1772 {
1773 int32_t ret = CheckAndGenerateChallenge(nullptr);
1774 EXPECT_EQ(ERR_INVALID_PARA, ret);
1775 }
1776
1777 {
1778 int32_t ret = CheckAndGenerateChallenge(&device);
1779 EXPECT_EQ(SUCCESS, ret);
1780 }
1781 }
1782
1783 HWTEST_F(DslmTest, CheckAndGenerateChallenge_case2, TestSize.Level0)
1784 {
1785 DslmDeviceInfo device;
1786 (void)memset_s(&device, sizeof(DslmDeviceInfo), 0, sizeof(DslmDeviceInfo));
1787
1788 {
1789 device.nonceTimeStamp = 0xFFFFFFFFFFFFFFFF;
1790 int32_t ret = CheckAndGenerateChallenge(&device);
1791 EXPECT_EQ(SUCCESS, ret);
1792 }
1793
1794 {
1795 device.nonceTimeStamp = GetMillisecondSinceBoot();
1796 int32_t ret = CheckAndGenerateChallenge(&device);
1797 EXPECT_EQ(SUCCESS, ret);
1798 }
1799
1800 {
1801 device.nonceTimeStamp = GetMillisecondSinceBoot();
1802 device.nonce = 1;
1803 int32_t ret = CheckAndGenerateChallenge(&device);
1804 EXPECT_EQ(SUCCESS, ret);
1805 }
1806 }
1807
1808 HWTEST_F(DslmTest, SendDeviceInfoRequest_case1, TestSize.Level0)
1809 {
1810 DslmDeviceInfo *device = nullptr;
1811
1812 int32_t ret = SendDeviceInfoRequest(device);
1813 EXPECT_EQ(ERR_INVALID_PARA, ret);
1814 }
1815
1816 HWTEST_F(DslmTest, VerifyDeviceInfoResponse_case1, TestSize.Level0)
1817 {
1818 DslmDeviceInfo *device = nullptr;
1819
1820 int32_t ret = VerifyDeviceInfoResponse(device, NULL);
1821 EXPECT_EQ(ERR_INVALID_PARA, ret);
1822 }
1823
1824 HWTEST_F(DslmTest, VerifyDeviceInfoResponse_case2, TestSize.Level0)
1825 {
1826 MessageBuff msg = {.length = 0, .buff = nullptr};
1827 DslmDeviceInfo device;
1828 (void)memset_s(&device, sizeof(device), 0, sizeof(device));
1829
1830 int32_t ret = VerifyDeviceInfoResponse(&device, &msg);
1831 EXPECT_EQ(ERR_INVALID_PARA, ret);
1832
1833 ret = VerifyDeviceInfoResponse(&device, nullptr);
1834 EXPECT_EQ(ERR_INVALID_PARA, ret);
1835 }
1836
1837 HWTEST_F(DslmTest, VerifyDeviceInfoResponse_case3, TestSize.Level0)
1838 {
1839 const char *message = "{\"version\":131072,\"challenge\":\"3C1F21EE53D3C4E2\",\"type\":2,\"info\":"
1840 "\"SkFERS1BTDAwOjg3QUQyOEQzQjFCLi4u\"}";
1841 uint32_t messageLen = strlen(message) + 1;
1842 MessageBuff msg = {.length = messageLen, .buff = (uint8_t *)message};
1843
1844 DslmDeviceInfo device;
1845 (void)memset_s(&device, sizeof(device), 0, sizeof(device));
1846
1847 int32_t ret = VerifyDeviceInfoResponse(&device, &msg);
1848 EXPECT_EQ(ERR_CHALLENGE_ERR, ret);
1849 }
1850
1851 HWTEST_F(DslmTest, VerifyDeviceInfoResponse_case4, TestSize.Level0)
1852 {
1853 DslmDeviceInfo device;
1854 memset_s(&device, sizeof(DslmDeviceInfo), 0, sizeof(DslmDeviceInfo));
1855 device.nonce = 0xE2C4D353EE211F3C;
1856 const char *message = "{\"version\":131072,\"challenge\":\"3C1F21EE53D3C4E2\",\"type\":2,\"info\":"
1857 "\"SkFERS1BTDAwOjg3QUQyOEQzQjFCLi4u\"}";
1858 uint32_t messageLen = strlen(message) + 1;
1859 MessageBuff msg = {.length = messageLen, .buff = (uint8_t *)message};
1860
1861 {
1862 int32_t ret = VerifyDeviceInfoResponse(&device, &msg);
1863 EXPECT_NE(0, ret);
1864 }
1865
1866 {
1867 device.nonceTimeStamp = 0xFFFFFFFFFFFFFFFF;
1868 int32_t ret = VerifyDeviceInfoResponse(&device, &msg);
1869 EXPECT_EQ(ERR_CHALLENGE_ERR, ret);
1870 }
1871 }
1872
1873 HWTEST_F(DslmTest, GetDslmDeviceInfo_case1, TestSize.Level0)
1874 {
1875 DeviceIdentify *device = nullptr;
1876
1877 EXPECT_EQ(nullptr, GetDslmDeviceInfo(device));
1878 }
1879
1880 HWTEST_F(DslmTest, CreatOrGetDslmDeviceInfo_case1, TestSize.Level0)
1881 {
1882 DeviceIdentify *device = nullptr;
1883
1884 EXPECT_EQ(nullptr, CreatOrGetDslmDeviceInfo(device));
1885 }
1886
1887 HWTEST_F(DslmTest, CreatOrGetDslmDeviceInfo_case2, TestSize.Level0)
1888 {
1889 DeviceIdentify device = {.length = DEVICE_ID_MAX_LEN - 1};
1890
1891 EXPECT_EQ(nullptr, CreatOrGetDslmDeviceInfo(&device));
1892 }
1893
1894 HWTEST_F(DslmTest, IsSameDevice_case1, TestSize.Level0)
1895 {
1896 DeviceIdentify *device_first = nullptr;
1897 DeviceIdentify device_second;
1898 (void)memset_s(&device_second, sizeof(device_second), 0, sizeof(device_second));
1899
1900 EXPECT_EQ(false, IsSameDevice(device_first, &device_second));
1901
1902 EXPECT_EQ(false, IsSameDevice(&device_second, nullptr));
1903 }
1904
1905 HWTEST_F(DslmTest, GetCurrentMachineState_case1, TestSize.Level0)
1906 {
1907 DslmDeviceInfo *info = nullptr;
1908 uint32_t ret = GetCurrentMachineState(info);
1909 EXPECT_EQ(STATE_FAILED, ret);
1910 }
1911
1912 HWTEST_F(DslmTest, OnMsgSendResultNotifier_case1, TestSize.Level0)
1913 {
1914 DeviceIdentify identify = {DEVICE_ID_MAX_LEN, {'a', 'b', 'c', 'd', 'e', 'f', 'a', 'b'}};
1915 uint64_t transNo = 0;
1916 uint32_t result = ERR_DEFAULT;
1917
1918 {
1919 uint32_t ret = OnMsgSendResultNotifier(&identify, transNo, result);
1920 EXPECT_EQ(SUCCESS, ret);
1921 }
1922
1923 {
1924 uint32_t ret = OnMsgSendResultNotifier(nullptr, transNo, result);
1925 EXPECT_EQ(SUCCESS, ret);
1926 }
1927
1928 {
1929 NiceMock<DslmMsgInterfaceMock> mockMsg;
1930 mockMsg.MakeDeviceOnline(&identify);
1931 DslmDeviceInfo *deviceInfo = GetDslmDeviceInfo(&identify);
1932 ASSERT_NE(deviceInfo, nullptr);
1933 deviceInfo->machine.currState = STATE_WAITING_CRED_RSP;
1934 ScheduleDslmStateMachine(deviceInfo, EVENT_MSG_SEND_FAILED, &result);
1935 EXPECT_EQ(deviceInfo->machine.currState, STATE_WAITING_CRED_RSP);
1936
1937 uint32_t res = 2; // ERR_SESSION_OPEN_FAILED
1938 ScheduleDslmStateMachine(deviceInfo, EVENT_MSG_SEND_FAILED, &res);
1939 EXPECT_GE(deviceInfo->machine.currState, 0);
1940 ScheduleDslmStateMachine(deviceInfo, EVENT_DEVICE_OFFLINE, &res);
1941 mockMsg.MakeDeviceOffline(&identify);
1942 }
1943 }
1944
1945 HWTEST_F(DslmTest, OnPeerStatusReceiver_case1, TestSize.Level0)
1946 {
1947 const DeviceIdentify device = {DEVICE_ID_MAX_LEN, {'a', 'b', 'c', 'd', 'e', 'f', 'a', 'b'}};
1948 uint32_t status = 1234;
1949 uint32_t level = -1;
1950
1951 int32_t ret = OnPeerStatusReceiver(&device, status, level);
1952 EXPECT_EQ(SUCCESS, ret);
1953 }
1954
1955 HWTEST_F(DslmTest, DslmDumper_case2, TestSize.Level0)
1956 {
1957 DslmDumper(-1);
1958
1959 ReportAppInvokeEvent(nullptr);
1960 ReportSecurityInfoSyncEvent(nullptr);
__anon109849350602(const void *context) 1961 auto handle = DslmUtilsStartPeriodicTimerTask(100, [](const void *context) { return; }, nullptr);
1962 ASSERT_NE(handle, static_cast<uint32_t>(0));
1963 DslmUtilsStopTimerTask(handle);
1964 }
1965
1966 HWTEST_F(DslmTest, JudgeListDeviceType_case1, TestSize.Level0)
1967 {
1968 bool ret = JudgeListDeviceType();
1969 EXPECT_EQ(ret, false);
1970 }
1971
1972 HWTEST_F(DslmTest, InitDslmProcess_case1, TestSize.Level0)
1973 {
1974 EXPECT_EQ(false, InitDslmProcess());
1975 }
1976
1977 HWTEST_F(DslmTest, DeinitDslmProcess_case1, TestSize.Level0)
1978 {
1979 EXPECT_EQ(true, DeinitDslmProcess());
1980 }
1981
1982 // dslm_ohos_verify.c
1983 HWTEST_F(DslmTest, VerifyOhosDslmCred_case1, TestSize.Level0)
1984 {
1985 const DeviceIdentify device = {DEVICE_ID_MAX_LEN, {'a', 'b', 'c', 'd', 'e', 'f', 'a', 'b'}};
1986 uint64_t challenge = 0x1234;
1987 uint8_t info[] = {'a', 'b', 'c', 'd', 1, 3, 5, 7, 9};
1988 DslmCredBuff cred = {CRED_TYPE_STANDARD, 9, info};
1989 DslmCredInfo *credInfo = nullptr;
1990
1991 int32_t ret = VerifyOhosDslmCred(&device, challenge, &cred, credInfo);
1992 EXPECT_EQ(ERR_INVALID_PARA, ret);
1993 }
1994
1995 HWTEST_F(DslmTest, VerifyOhosDslmCred_case2, TestSize.Level0)
1996 {
1997 const DeviceIdentify device = {DEVICE_ID_MAX_LEN, {'a', 'b', 'c', 'd', 'e', 'f', 'a', 'b'}};
1998 uint64_t challenge = 0x1234;
1999 uint8_t info[] = {'a', 'b', 'c', 'd', 1, 3, 5, 7, 9};
2000 DslmCredBuff cred = {CRED_TYPE_LARGE, 9, info};
2001 DslmCredInfo credInfo;
2002 (void)memset_s(&credInfo, sizeof(DslmCredInfo), 0, sizeof(DslmCredInfo));
2003
2004 int32_t ret = VerifyOhosDslmCred(&device, challenge, &cred, &credInfo);
2005 EXPECT_EQ(ERR_INVALID_PARA, ret);
2006
2007 ret = VerifyOhosDslmCred(nullptr, challenge, &cred, &credInfo);
2008 EXPECT_EQ(ERR_INVALID_PARA, ret);
2009
2010 ret = VerifyOhosDslmCred(&device, challenge, nullptr, &credInfo);
2011 EXPECT_EQ(ERR_INVALID_PARA, ret);
2012 }
2013
2014 HWTEST_F(DslmTest, VerifyOhosDslmCred_case3, TestSize.Level0)
2015 {
2016 const DeviceIdentify device = {DEVICE_ID_MAX_LEN, {'a', 'b', 'c', 'd', 'e', 'f', 'a', 'b'}};
2017 uint64_t challenge = 0x1234;
2018 uint8_t info[] = {'a', 'b', 'c', 'd', 1, 3, 5, 7, 9};
2019 DslmCredBuff cred = {CRED_TYPE_SMALL, 9, info};
2020 DslmCredInfo credInfo;
2021 (void)memset_s(&credInfo, sizeof(DslmCredInfo), 0, sizeof(DslmCredInfo));
2022
2023 int32_t ret = VerifyOhosDslmCred(&device, challenge, &cred, &credInfo);
2024 EXPECT_EQ(ERR_PARSE_CLOUD_CRED_DATA, ret);
2025 }
2026
2027 // dslm_ohos_request.c
2028
2029 // 2nd param of GetCredFromCurrentDevice() is 0
2030 HWTEST_F(DslmTest, GetCredFromCurrentDevice_case1, TestSize.Level0)
2031 {
2032 char cred[] = "test";
2033 uint32_t len = 0;
2034
2035 int32_t ret = GetCredFromCurrentDevice(cred, len);
2036 EXPECT_EQ(ERR_INVALID_PARA, ret);
2037
2038 ret = GetCredFromCurrentDevice(nullptr, len);
2039 EXPECT_EQ(ERR_INVALID_PARA, ret);
2040 }
2041
2042 /**
2043 * @tc.name: GetPeerDeviceOnlineStatus_case1
2044 * @tc.desc: function GetPeerDeviceOnlineStatus when g_messenger is NULL
2045 * @tc.type: FUNC
2046 * @tc.require: issueNumber
2047 */
2048 HWTEST_F(DslmTest, GetPeerDeviceOnlineStatus_case1, TestSize.Level0)
2049 {
2050 EXPECT_EQ(false, GetPeerDeviceOnlineStatus(nullptr, nullptr));
2051 }
2052
2053 /**
2054 * @tc.name: GetPeerDeviceOnlineStatus_case2
2055 * @tc.desc: function GetPeerDeviceOnlineStatus with null input
2056 * @tc.type: FUNC
2057 * @tc.require: issueNumber
2058 */
2059 HWTEST_F(DslmTest, GetPeerDeviceOnlineStatus_case2, TestSize.Level0)
2060 {
2061 DslmMsgInterfaceMock mockMsg;
2062 EXPECT_EQ(false, GetPeerDeviceOnlineStatus(nullptr, nullptr));
2063
2064 const DeviceIdentify devId = {DEVICE_ID_MAX_LEN, {0}};
2065 EXPECT_EQ(false, GetPeerDeviceOnlineStatus(&devId, nullptr));
2066 }
2067
2068 /**
2069 * @tc.name: GetSelfDevice_case1
2070 * @tc.desc: function GetSelfDevice with null input
2071 * @tc.type: FUNC
2072 * @tc.require: issueNumber
2073 */
2074 HWTEST_F(DslmTest, GetSelfDevice_case1, TestSize.Level0)
2075 {
2076 int32_t level = 0;
2077 const DeviceIdentify *identify = GetSelfDevice(&level);
2078 EXPECT_NE(nullptr, identify);
2079 }
2080
2081 /**
2082 * @tc.name: DeinitMessenger_case1
2083 * @tc.desc: function DeinitMessenger when g_messenger is NULL
2084 * @tc.type: FUNC
2085 * @tc.require: issueNumber
2086 */
2087 HWTEST_F(DslmTest, DeinitMessenger_case1, TestSize.Level0)
2088 {
2089 DslmMsgInterfaceMock mockMsg;
2090
2091 uint32_t ret = DeinitMessenger();
2092 EXPECT_EQ(SUCCESS, ret);
2093 }
2094
2095 /**
2096 * @tc.name: DeinitMessenger_case2
2097 * @tc.desc: function DeinitMessenger when g_messenger is not NULL
2098 * @tc.type: FUNC
2099 * @tc.require: issueNumber
2100 */
2101 HWTEST_F(DslmTest, DeinitMessenger_case2, TestSize.Level0)
2102 {
2103 uint32_t ret = DeinitMessenger();
2104 EXPECT_EQ(SUCCESS, ret);
2105 }
2106
2107 /**
2108 * @tc.name: SendMsgToDevice_case1
2109 * @tc.desc: function SendMsgToDevice when g_messenger is NULL
2110 * @tc.type: FUNC
2111 * @tc.require: issueNumber
2112 */
2113 HWTEST_F(DslmTest, SendMsgToDevice_case1, TestSize.Level0)
2114 {
2115 DslmMsgInterfaceMock mockMsg;
2116 uint64_t transNo = 0xfe;
2117 const DeviceIdentify devId = {DEVICE_ID_MAX_LEN, {0}};
2118 const uint8_t msg[] = {'1', '2'};
2119 uint32_t msgLen = 2;
2120
2121 mockMsg.~DslmMsgInterfaceMock();
2122 EXPECT_CALL(mockMsg, SendMsgTo(_, _, _, _, _)).Times(Exactly(0));
2123
2124 SendMsgToDevice(transNo, &devId, msg, msgLen);
2125 }
2126
2127 /**
2128 * @tc.name: CheckMessage_case1
2129 * @tc.desc: function CheckMessage when malformed input,
2130 * msg contains non ASCII item.
2131 * @tc.type: FUNC
2132 * @tc.require: issueNumber
2133 */
2134 HWTEST_F(DslmTest, CheckMessage_case1, TestSize.Level0)
2135 {
2136 {
2137 const uint8_t msg[] = {'1', 0x8f, '\0'};
2138 uint32_t msgLen = 3;
2139
2140 EXPECT_EQ(false, CheckMessage(msg, msgLen));
2141 }
2142
2143 {
2144 const uint8_t msg[] = {'1', 0x8f, '\0'};
2145 uint32_t msgLen = 0;
2146
2147 EXPECT_EQ(false, CheckMessage(msg, msgLen));
2148 }
2149
2150 {
2151 const uint8_t msg[] = {'1', 0x8f, '\0'};
2152 uint32_t msgLen = (81920 * 4) + 1;
2153
2154 EXPECT_EQ(false, CheckMessage(msg, msgLen));
2155 }
2156 }
2157
2158 // just for coverage
2159 /**
2160 * @tc.name: FreeMessagePacket_case1
2161 * @tc.desc: function FreeMessagePacket when packet->payload is NULL
2162 * @tc.type: FUNC
2163 * @tc.require: issueNumber
2164 */
2165 HWTEST_F(DslmTest, FreeMessagePacket_case1, TestSize.Level0)
2166 {
2167 MessagePacket *packet = (MessagePacket *)MALLOC(sizeof(MessagePacket));
2168 ASSERT_NE(nullptr, packet);
2169 (void)memset_s(packet, sizeof(MessagePacket), 0, sizeof(MessagePacket));
2170
2171 FreeMessagePacket(packet);
2172 }
2173
2174 // just for coverage
2175 /**
2176 * @tc.name: FreeMessageBuff_case1
2177 * @tc.desc: function FreeMessageBuff when buff->buff is NULL
2178 * @tc.type: FUNC
2179 * @tc.require: issueNumber
2180 */
2181 HWTEST_F(DslmTest, FreeMessageBuff_case1, TestSize.Level0)
2182 {
2183 MessageBuff *buff = (MessageBuff *)MALLOC(sizeof(MessageBuff));
2184 ASSERT_NE(nullptr, buff);
2185 memset_s(buff, sizeof(MessageBuff), 0, sizeof(MessageBuff));
2186
2187 FreeMessageBuff(buff);
2188 FreeMessageBuff(nullptr);
2189 }
2190
dummyDump(const DslmDeviceInfo * info,int32_t fd)2191 static void dummyDump(const DslmDeviceInfo *info, int32_t fd)
2192 {
2193 (void)info;
2194 (void)fd;
2195 }
2196
2197 HWTEST_F(DslmTest, ForEachDeviceDump_case1, TestSize.Level0)
2198 {
2199 ForEachDeviceDump(nullptr, 0);
2200 ForEachDeviceDump(dummyDump, 0);
2201 InitDslmStateMachine(nullptr);
2202 ScheduleDslmStateMachine(nullptr, 0, nullptr);
2203 EXPECT_EQ(false, GetPeerDeviceOnlineStatus(nullptr, nullptr));
2204 }
2205
2206 /**
2207 * @tc.name: DestroyDslmCred_case1
2208 * @tc.desc: function DestroyDslmCred with malformed inputs
2209 * @tc.type: FUNC
2210 * @tc.require: issueNumber
2211 */
2212 HWTEST_F(DslmTest, DestroyDslmCred_case1, TestSize.Level0)
2213 {
2214 DslmCredBuff *cred = (DslmCredBuff *)MALLOC(sizeof(DslmCredBuff));
2215 cred->type = (CredType)3;
2216 cred->credLen = 9;
2217 cred->credVal = nullptr;
2218 DestroyDslmCred(cred);
2219
2220 cred = nullptr;
2221 DestroyDslmCred(cred);
2222 EXPECT_EQ(nullptr, cred);
2223 }
2224
2225 /**
2226 * @tc.name: ReportHiEventAppInvoke_case1
2227 * @tc.desc: function ReportHiEventAppInvoke with malformed inputs
2228 * @tc.type: FUNC
2229 * @tc.require: issueNumber
2230 */
2231 HWTEST_F(DslmTest, ReportHiEventAppInvoke_case1, TestSize.Level0)
2232 {
2233 DslmDeviceInfo *info = (DslmDeviceInfo *)MALLOC(sizeof(DslmDeviceInfo));
2234 ASSERT_NE(nullptr, info);
2235 (void)memset_s(info, sizeof(DslmDeviceInfo), 0, sizeof(DslmDeviceInfo));
2236 info->lastRequestTime = 10U;
2237 ReportHiEventInfoSync(nullptr);
2238 ReportHiEventInfoSync(info);
2239 ReportHiEventAppInvoke(nullptr);
2240 EXPECT_NE(nullptr, info);
2241 FREE(info);
2242 info = nullptr;
2243 }
2244
2245 /**
2246 * @tc.name: GetDeviceSecurityLevelValue_case1
2247 * @tc.desc: function GetDeviceSecurityLevelValue with malformed inputs
2248 * @tc.type: FUNC
2249 * @tc.require: issueNumber
2250 */
2251 HWTEST_F(DslmTest, GetDeviceSecurityLevelValue_case1, TestSize.Level0)
2252 {
2253 int32_t ret;
2254 int32_t level = 0;
2255 DeviceSecurityInfo info = {.magicNum = 0xcd, .result = 0, .level = 0};
2256
2257 ret = GetDeviceSecurityLevelValue(nullptr, &level);
2258 EXPECT_EQ(ERR_INVALID_PARA, ret);
2259
2260 ret = GetDeviceSecurityLevelValue(&info, nullptr);
2261 EXPECT_EQ(ERR_INVALID_PARA, ret);
2262
2263 ret = GetDeviceSecurityLevelValue(&info, &level);
2264 EXPECT_EQ(ERR_INVALID_PARA, ret);
2265
2266 // will not crash
2267 FreeDeviceSecurityInfo(&info);
2268 }
2269
2270 /**
2271 * @tc.name: RequestDeviceSecurityInfoAsync_case1
2272 * @tc.desc: function RequestDeviceSecurityInfoAsync with malformed inputs
2273 * @tc.type: FUNC
2274 * @tc.require: issueNumber
2275 */
2276 HWTEST_F(DslmTest, RequestDeviceSecurityInfoAsync_case1, TestSize.Level0)
2277 {
2278 int32_t ret;
2279 const DeviceIdentify device = {DEVICE_ID_MAX_LEN, {'a', 'b', 'c', 'd', 'e', 'f', 'g'}};
2280 RequestOption opt = {.challenge = 0xcd, .timeout = 400, .extra = 0};
__anon109849350702(const DeviceIdentify *identify, struct DeviceSecurityInfo *info) 2281 auto callback = [](const DeviceIdentify *identify, struct DeviceSecurityInfo *info) { return; };
2282
2283 ret = RequestDeviceSecurityInfoAsync(nullptr, &opt, callback);
2284 EXPECT_EQ(ERR_INVALID_PARA, ret);
2285
2286 ret = RequestDeviceSecurityInfoAsync(&device, &opt, nullptr);
2287 EXPECT_EQ(ERR_INVALID_PARA, ret);
2288
2289 // malformed option->timeout > MAX_KEEP_LEN
2290 ret = RequestDeviceSecurityInfoAsync(&device, &opt, callback);
2291 EXPECT_EQ(ERR_INVALID_PARA, ret);
2292 }
2293
2294 HWTEST_F(DslmTest, DslmDumper_case1, TestSize.Level0)
2295 {
2296 DslmDumper(-1);
2297
2298 ReportAppInvokeEvent(nullptr);
2299 ReportSecurityInfoSyncEvent(nullptr);
__anon109849350802(const void *context) 2300 auto handle = DslmUtilsStartPeriodicTimerTask(100, [](const void *context) { return; }, nullptr);
2301 ASSERT_NE(handle, 0);
2302 DslmUtilsStopTimerTask(handle);
2303 }
2304
2305 HWTEST_F(DslmTest, DslmQueue_case1, TestSize.Level0)
2306 {
2307 auto queue = CreateWorkQueue(2, "test");
2308 ASSERT_NE(queue, nullptr);
2309
__anon109849350902(const uint8_t *data, uint32_t len) 2310 auto proc = [](const uint8_t *data, uint32_t len) { return; };
2311 {
2312 auto ret = QueueWork(queue, proc, nullptr, 0);
2313 EXPECT_EQ(ret, WORK_QUEUE_OK);
2314 }
2315 {
2316 auto ret = QueueWork(nullptr, nullptr, nullptr, 0);
2317 EXPECT_EQ(ret, WORK_QUEUE_NULL_PTR);
2318
2319 ret = QueueWork(queue, nullptr, nullptr, 0);
2320 EXPECT_EQ(ret, WORK_QUEUE_NULL_PTR);
2321 }
2322 {
__anon109849350a02(const uint8_t *data, uint32_t len) 2323 auto sleepfunc = [](const uint8_t *data, uint32_t len) { this_thread::sleep_for(milliseconds(600)); };
2324 auto ret = QueueWork(queue, sleepfunc, nullptr, 0);
2325 EXPECT_EQ(ret, WORK_QUEUE_OK);
2326 ret = QueueWork(queue, sleepfunc, nullptr, 0);
2327 (void)QueueWork(queue, proc, nullptr, 0);
2328 (void)QueueWork(queue, proc, nullptr, 0);
2329 (void)QueueWork(queue, proc, nullptr, 0);
2330 (void)QueueWork(queue, proc, nullptr, 0);
2331 (void)QueueWork(queue, proc, nullptr, 0);
2332 EXPECT_GE(ret, WORK_QUEUE_OK);
2333 }
2334
2335 {
2336 auto ret = DestroyWorkQueue(queue);
2337 EXPECT_EQ(ret, 0);
2338 }
2339 {
2340 auto ret = DestroyWorkQueue(nullptr);
2341 EXPECT_EQ(ret, WORK_QUEUE_NULL_PTR);
2342 }
2343 }
2344
2345 HWTEST_F(DslmTest, DestroyAllDslmDeviceInfo_case1, TestSize.Level0)
2346 {
2347 const DeviceIdentify device = {DEVICE_ID_MAX_LEN, {'a'}};
2348 DslmDeviceInfo *info = CreatOrGetDslmDeviceInfo(&device);
2349 ASSERT_NE(info, nullptr);
2350 ASSERT_NE(GetDeviceListSize(), 0U);
2351
2352 DestroyAllDslmDeviceInfo();
2353 EXPECT_EQ(GetDeviceListSize(), 0U);
2354 }
2355
2356 HWTEST_F(DslmTest, JudgeListDeviceType_case2, TestSize.Level0)
2357 {
2358 bool ret = JudgeListDeviceType();
2359 EXPECT_EQ(ret, true);
2360 }
2361 } // namespace DslmUnitTest
2362 } // namespace Security
2363 } // namespace OHOS