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