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