1 /*
2 * Copyright (c) 2021-2024 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include "input_event_data_transformation.h"
17
18 #include "define_multimodal.h"
19 #include "extra_data.h"
20 #ifdef OHOS_BUILD_ENABLE_SECURITY_COMPONENT
21 #include "sec_comp_enhance_kit.h"
22 #endif // OHOS_BUILD_ENABLE_SECURITY_COMPONENT
23
24 #undef MMI_LOG_TAG
25 #define MMI_LOG_TAG "KeyEventDataTransformation"
26
27 namespace OHOS {
28 namespace MMI {
KeyEventToNetPacket(const std::shared_ptr<KeyEvent> key,NetPacket & pkt)29 int32_t InputEventDataTransformation::KeyEventToNetPacket(
30 const std::shared_ptr<KeyEvent> key, NetPacket &pkt)
31 {
32 CHKPR(key, RET_ERR);
33 if (SerializeInputEvent(key, pkt) != RET_OK) {
34 MMI_HILOGE("Serialize input event failed");
35 return RET_ERR;
36 }
37 pkt << key->GetKeyCode() << key->GetKeyAction() << key->GetKeyIntention();
38 auto keys = key->GetKeyItems();
39 int32_t size = static_cast<int32_t>(keys.size());
40 if (size > MAX_KEY_SIZE) {
41 MMI_HILOGE("Key exceeds the max range");
42 return RET_ERR;
43 }
44 pkt << size;
45 for (const auto &item : keys) {
46 pkt << item.GetKeyCode() << item.GetDownTime()
47 << item.GetDeviceId() << item.IsPressed() << item.GetUnicode();
48 }
49 pkt << key->GetFunctionKey(KeyEvent::NUM_LOCK_FUNCTION_KEY)
50 << key->GetFunctionKey(KeyEvent::CAPS_LOCK_FUNCTION_KEY)
51 << key->GetFunctionKey(KeyEvent::SCROLL_LOCK_FUNCTION_KEY);
52 if (pkt.ChkRWError()) {
53 MMI_HILOGE("Packet write key event failed");
54 return RET_ERR;
55 }
56 return RET_OK;
57 }
58
NetPacketToKeyEvent(NetPacket & pkt,std::shared_ptr<KeyEvent> key)59 int32_t InputEventDataTransformation::NetPacketToKeyEvent(NetPacket &pkt, std::shared_ptr<KeyEvent> key)
60 {
61 if (DeserializeInputEvent(pkt, key) != RET_OK) {
62 MMI_HILOGE("Deserialize input event failed");
63 return RET_ERR;
64 }
65 int32_t data = 0;
66 pkt >> data;
67 key->SetKeyCode(data);
68 pkt >> data;
69 key->SetKeyAction(data);
70 pkt >> data;
71 key->SetKeyIntention(data);
72 int32_t size = 0;
73 pkt >> size;
74 if (size > MAX_KEY_SIZE) {
75 MMI_HILOGE("Key exceeds the max range");
76 return RET_ERR;
77 }
78 if (pkt.ChkRWError()) {
79 MMI_HILOGE("Packet read size failed");
80 return RET_ERR;
81 }
82 bool isPressed = false;
83 for (int32_t i = 0; i < size; i++) {
84 KeyEvent::KeyItem keyItem;
85 pkt >> data;
86 keyItem.SetKeyCode(data);
87 int64_t datatime = 0;
88 pkt >> datatime;
89 keyItem.SetDownTime(datatime);
90 pkt >> data;
91 keyItem.SetDeviceId(data);
92 pkt >> isPressed;
93 if (pkt.ChkRWError()) {
94 MMI_HILOGE("Packet read item isPressed failed");
95 return RET_ERR;
96 }
97 keyItem.SetPressed(isPressed);
98 uint32_t unicode;
99 pkt >> unicode;
100 keyItem.SetUnicode(unicode);
101 key->AddKeyItem(keyItem);
102 }
103 ReadFunctionKeys(pkt, key);
104 return RET_OK;
105 }
106
ReadFunctionKeys(NetPacket & pkt,std::shared_ptr<KeyEvent> key)107 void InputEventDataTransformation::ReadFunctionKeys(NetPacket &pkt, std::shared_ptr<KeyEvent> key)
108 {
109 CHKPV(key);
110 bool state = false;
111 pkt >> state;
112 key->SetFunctionKey(KeyEvent::NUM_LOCK_FUNCTION_KEY, state);
113 pkt >> state;
114 key->SetFunctionKey(KeyEvent::CAPS_LOCK_FUNCTION_KEY, state);
115 pkt >> state;
116 key->SetFunctionKey(KeyEvent::SCROLL_LOCK_FUNCTION_KEY, state);
117 }
118
SwitchEventToNetPacket(const std::shared_ptr<SwitchEvent> swEvent,NetPacket & pkt)119 int32_t InputEventDataTransformation::SwitchEventToNetPacket(
120 const std::shared_ptr<SwitchEvent> swEvent, NetPacket &pkt)
121 {
122 if (SerializeInputEvent(swEvent, pkt) != RET_OK) {
123 MMI_HILOGE("Serialize input event failed");
124 return RET_ERR;
125 }
126 pkt << swEvent->GetSwitchType() << swEvent->GetSwitchValue() << swEvent->GetSwitchMask();
127 if (pkt.ChkRWError()) {
128 MMI_HILOGE("Packet write key event failed");
129 return RET_ERR;
130 }
131 return RET_OK;
132 }
133
NetPacketToSwitchEvent(NetPacket & pkt,std::shared_ptr<SwitchEvent> swEvent)134 int32_t InputEventDataTransformation::NetPacketToSwitchEvent(NetPacket &pkt, std::shared_ptr<SwitchEvent> swEvent)
135 {
136 if (DeserializeInputEvent(pkt, swEvent) != RET_OK) {
137 MMI_HILOGE("Deserialize input event failed");
138 return RET_ERR;
139 }
140 int32_t data = 0;
141 pkt >> data;
142 swEvent->SetSwitchType(data);
143 pkt >> data;
144 swEvent->SetSwitchValue(data);
145 pkt >> data;
146 swEvent->SetSwitchMask(data);
147 return RET_OK;
148 }
149
SerializeInputEvent(std::shared_ptr<InputEvent> event,NetPacket & pkt)150 int32_t InputEventDataTransformation::SerializeInputEvent(std::shared_ptr<InputEvent> event, NetPacket &pkt)
151 {
152 CHKPR(event, ERROR_NULL_POINTER);
153 pkt << event->GetEventType() << event->GetId() << event->GetActionTime()
154 << event->GetAction() << event->GetActionStartTime() << event->GetSensorInputTime() << event->GetDeviceId()
155 << event->GetSourceType() << event->GetTargetDisplayId() << event->GetTargetWindowId()
156 << event->GetAgentWindowId() << event->GetFlag() << event->IsMarkEnabled();
157 if (pkt.ChkRWError()) {
158 MMI_HILOGE("Serialize packet is failed");
159 return RET_ERR;
160 }
161 return RET_OK;
162 }
163
DeserializeInputEvent(NetPacket & pkt,std::shared_ptr<InputEvent> event)164 int32_t InputEventDataTransformation::DeserializeInputEvent(NetPacket &pkt, std::shared_ptr<InputEvent> event)
165 {
166 CHKPR(event, ERROR_NULL_POINTER);
167 int32_t tField = 0;
168 pkt >> tField;
169 pkt >> tField;
170 event->SetId(tField);
171 int64_t rField = 0;
172 pkt >> rField;
173 event->SetActionTime(rField);
174 pkt >> tField;
175 event->SetAction(tField);
176 pkt >> rField;
177 event->SetActionStartTime(rField);
178 uint64_t sensorTime;
179 pkt >> sensorTime;
180 event->SetSensorInputTime(sensorTime);
181 pkt >> tField;
182 event->SetDeviceId(tField);
183 pkt >> tField;
184 event->SetSourceType(tField);
185 pkt >> tField;
186 event->SetTargetDisplayId(tField);
187 pkt >> tField;
188 event->SetTargetWindowId(tField);
189 pkt >> tField;
190 event->SetAgentWindowId(tField);
191 uint32_t tFlag = InputEvent::EVENT_FLAG_NONE;
192 pkt >> tFlag;
193 event->AddFlag(tFlag);
194 bool markEnabled = true;
195 pkt >> markEnabled;
196 event->SetMarkEnabled(markEnabled);
197 if (pkt.ChkRWError()) {
198 MMI_HILOGE("Deserialize packet is failed");
199 return RET_ERR;
200 }
201 return RET_OK;
202 }
203
Marshalling(std::shared_ptr<PointerEvent> event,NetPacket & pkt)204 int32_t InputEventDataTransformation::Marshalling(std::shared_ptr<PointerEvent> event, NetPacket &pkt)
205 {
206 CHKPR(event, ERROR_NULL_POINTER);
207 if (SerializeInputEvent(event, pkt) != RET_OK) {
208 MMI_HILOGE("Serialize input event failed");
209 return RET_ERR;
210 }
211 SerializeFingerprint(event, pkt);
212 SerializePointerEvent(event, pkt);
213 std::set<int32_t> pressedBtns { event->GetPressedButtons() };
214 pkt << pressedBtns.size();
215 for (int32_t btnId : pressedBtns) {
216 pkt << btnId;
217 }
218 std::vector<int32_t> pointerIds { event->GetPointerIds() };
219 pkt << pointerIds.size();
220 for (const auto &pointerId : pointerIds) {
221 PointerEvent::PointerItem item;
222 if (!event->GetPointerItem(pointerId, item)) {
223 MMI_HILOGE("Get pointer item failed");
224 return RET_ERR;
225 }
226 if (SerializePointerItem(pkt, item) != RET_OK) {
227 MMI_HILOGE("Serialize pointer item failed");
228 return RET_ERR;
229 }
230 }
231 std::vector<int32_t> pressedKeys = event->GetPressedKeys();
232 pkt << pressedKeys.size();
233 for (const auto &keyCode : pressedKeys) {
234 pkt << keyCode;
235 }
236 std::vector<uint8_t> buffer = event->GetBuffer();
237 if (buffer.size() > ExtraData::MAX_BUFFER_SIZE) {
238 MMI_HILOGE("buffer is oversize:%{public}zu", buffer.size());
239 return RET_ERR;
240 }
241 pkt << buffer.size();
242 for (const auto &buf : buffer) {
243 pkt << buf;
244 }
245 pkt << event->GetPullId();
246 if (pkt.ChkRWError()) {
247 MMI_HILOGE("Marshalling pointer event failed");
248 return RET_ERR;
249 }
250 return RET_OK;
251 }
252
SerializePointerEvent(const std::shared_ptr<PointerEvent> event,NetPacket & pkt)253 void InputEventDataTransformation::SerializePointerEvent(const std::shared_ptr<PointerEvent> event, NetPacket &pkt)
254 {
255 pkt << event->GetPointerAction() << event->GetOriginPointerAction() << event->GetPointerId()
256 << event->GetSourceType() << event->GetButtonId() << event->GetFingerCount()
257 << event->GetZOrder() << event->GetDispatchTimes() << event->GetAxes();
258 for (int32_t i = PointerEvent::AXIS_TYPE_UNKNOWN; i < PointerEvent::AXIS_TYPE_MAX; ++i) {
259 pkt << event->GetAxisValue(static_cast<PointerEvent::AxisType>(i));
260 }
261 pkt << event->GetVelocity();
262 pkt << event->GetAxisEventType();
263 PointerEvent::FixedMode fixedMode = event->GetFixedMode();
264 if (fixedMode > PointerEvent::FixedMode::SCREEN_MODE_UNKNOWN &&
265 fixedMode < PointerEvent::FixedMode::SCREEN_MODE_MAX) {
266 pkt << static_cast<int32_t>(fixedMode);
267 } else {
268 pkt << static_cast<int32_t>(PointerEvent::FixedMode::SCREEN_MODE_UNKNOWN);
269 }
270 pkt << event->GetHandOption();
271 }
272
SerializeFingerprint(const std::shared_ptr<PointerEvent> event,NetPacket & pkt)273 void InputEventDataTransformation::SerializeFingerprint(const std::shared_ptr<PointerEvent> event, NetPacket &pkt)
274 {
275 #ifdef OHOS_BUILD_ENABLE_FINGERPRINT
276 pkt << event->GetFingerprintDistanceX() << event->GetFingerprintDistanceY();
277 #endif // OHOS_BUILD_ENABLE_FINGERPRINT
278 }
279
DeserializePressedButtons(std::shared_ptr<PointerEvent> event,NetPacket & pkt)280 int32_t InputEventDataTransformation::DeserializePressedButtons(std::shared_ptr<PointerEvent> event, NetPacket &pkt)
281 {
282 CHKPR(event, ERROR_NULL_POINTER);
283 int32_t tField;
284 pkt >> tField;
285 event->SetPointerAction(tField);
286 pkt >> tField;
287 event->SetOriginPointerAction(tField);
288 pkt >> tField;
289 event->SetPointerId(tField);
290 pkt >> tField;
291 event->SetSourceType(tField);
292 pkt >> tField;
293 event->SetButtonId(tField);
294 pkt >> tField;
295 event->SetFingerCount(tField);
296 pkt >> tField;
297 event->SetZOrder(tField);
298 pkt >> tField;
299 event->SetDispatchTimes(tField);
300 SetAxisInfo(pkt, event);
301 pkt >> tField;
302 event->SetFixedMode(static_cast<PointerEvent::FixedMode>(tField));
303 pkt >> tField;
304 event->SetHandOption(tField);
305
306 std::set<int32_t>::size_type nPressed;
307 pkt >> nPressed;
308 while (nPressed-- > 0) {
309 pkt >> tField;
310 event->SetButtonPressed(tField);
311 }
312 return RET_OK;
313 }
314
DeserializePointerIds(std::shared_ptr<PointerEvent> event,NetPacket & pkt)315 int32_t InputEventDataTransformation::DeserializePointerIds(std::shared_ptr<PointerEvent> event, NetPacket &pkt)
316 {
317 CHKPR(event, ERROR_NULL_POINTER);
318 std::vector<int32_t>::size_type pointerCnt;
319 pkt >> pointerCnt;
320 while (pointerCnt-- > 0) {
321 PointerEvent::PointerItem item;
322 if (DeserializePointerItem(pkt, item) != RET_OK) {
323 MMI_HILOGE("Deserialize pointer item failed");
324 return RET_ERR;
325 }
326 event->AddPointerItem(item);
327 }
328 return RET_OK;
329 }
330
Unmarshalling(NetPacket & pkt,std::shared_ptr<PointerEvent> event)331 int32_t InputEventDataTransformation::Unmarshalling(NetPacket &pkt, std::shared_ptr<PointerEvent> event)
332 {
333 if (DeserializeInputEvent(pkt, event) != RET_OK) {
334 MMI_HILOGE("Deserialize input event failed");
335 return RET_ERR;
336 }
337
338 #ifdef OHOS_BUILD_ENABLE_FINGERPRINT
339 double distanceX {0.0};
340 double distanceY {0.0};
341 pkt >> distanceX;
342 pkt >> distanceY;
343 event->SetFingerprintDistanceX(distanceX);
344 event->SetFingerprintDistanceY(distanceY);
345 #endif // OHOS_BUILD_ENABLE_FINGERPRINT
346
347 if (DeserializePressedButtons(event, pkt) != RET_OK) {
348 MMI_HILOGE("Deserialize pressed buttons failed");
349 return RET_ERR;
350 }
351
352 if (DeserializePointerIds(event, pkt) != RET_OK) {
353 MMI_HILOGE("Deserialize pressed ids failed");
354 return RET_ERR;
355 }
356
357 std::vector<int32_t> pressedKeys;
358 std::vector<int32_t>::size_type pressedKeySize;
359 int32_t tField;
360 pkt >> pressedKeySize;
361 while (pressedKeySize-- > 0) {
362 pkt >> tField;
363 pressedKeys.push_back(tField);
364 }
365 if (pkt.ChkRWError()) {
366 MMI_HILOGE("Unmarshalling pointer event failed");
367 return RET_ERR;
368 }
369 event->SetPressedKeys(pressedKeys);
370
371 std::vector<uint8_t> buffer;
372 std::vector<uint8_t>::size_type bufferSize;
373 pkt >> bufferSize;
374 uint8_t buff = 0;
375 while (bufferSize-- > 0) {
376 pkt >> buff;
377 buffer.push_back(buff);
378 }
379 pkt >> tField;
380 if (pkt.ChkRWError()) {
381 MMI_HILOGE("Unmarshalling pointer event failed");
382 return RET_ERR;
383 }
384 event->SetBuffer(buffer);
385 event->SetPullId(tField);
386 return RET_OK;
387 }
388
SetAxisInfo(NetPacket & pkt,std::shared_ptr<PointerEvent> event)389 void InputEventDataTransformation::SetAxisInfo(NetPacket &pkt, std::shared_ptr<PointerEvent> event)
390 {
391 uint32_t tAxes;
392 pkt >> tAxes;
393 double axisValue;
394 for (int32_t i = PointerEvent::AXIS_TYPE_UNKNOWN; i < PointerEvent::AXIS_TYPE_MAX; ++i) {
395 const PointerEvent::AxisType axisType { static_cast<PointerEvent::AxisType>(i) };
396 pkt >> axisValue;
397 event->SetAxisValue(axisType, axisValue);
398 if (!PointerEvent::HasAxis(tAxes, axisType)) {
399 event->ClearAxisStatus(axisType);
400 }
401 }
402 double velocity;
403 pkt >> velocity;
404 event->SetVelocity(velocity);
405 int32_t axisEventType;
406 pkt >> axisEventType;
407 event->SetAxisEventType(axisEventType);
408 }
409
SerializePointerItem(NetPacket & pkt,PointerEvent::PointerItem & item)410 int32_t InputEventDataTransformation::SerializePointerItem(NetPacket &pkt, PointerEvent::PointerItem &item)
411 {
412 pkt << item;
413 if (pkt.ChkRWError()) {
414 MMI_HILOGE("Packet write pointer item failed");
415 return RET_ERR;
416 }
417 return RET_OK;
418 }
419
DeserializePointerItem(NetPacket & pkt,PointerEvent::PointerItem & item)420 int32_t InputEventDataTransformation::DeserializePointerItem(NetPacket &pkt, PointerEvent::PointerItem &item)
421 {
422 pkt >> item;
423 if (pkt.ChkRWError()) {
424 MMI_HILOGE("Packet read pointer item failed");
425 return RET_ERR;
426 }
427 return RET_OK;
428 }
429
430 #ifdef OHOS_BUILD_ENABLE_SECURITY_COMPONENT
MarshallingEnhanceData(std::shared_ptr<PointerEvent> event,NetPacket & pkt)431 int32_t InputEventDataTransformation::MarshallingEnhanceData(std::shared_ptr<PointerEvent> event, NetPacket &pkt)
432 {
433 CHKPR(event, ERROR_NULL_POINTER);
434 int32_t pointerId = event->GetPointerId();
435 PointerEvent::PointerItem pointerItem;
436 if (!event->GetPointerItem(pointerId, pointerItem)) {
437 MMI_HILOGE("Can't find pointer item, pointer:%{public}d", pointerId);
438 return RET_ERR;
439 }
440 SecCompPointEvent *secCompPointEvent = static_cast<SecCompPointEvent*>(malloc(sizeof(SecCompPointEvent)));
441 if (secCompPointEvent == NULL) {
442 MMI_HILOGE("Malloc failed");
443 return RET_ERR;
444 }
445 if (event->GetFixedMode() == PointerEvent::FixedMode::ONE_HAND) {
446 secCompPointEvent->touchX = pointerItem.GetFixedDisplayX();
447 secCompPointEvent->touchY = pointerItem.GetFixedDisplayY();
448 } else {
449 secCompPointEvent->touchX = pointerItem.GetDisplayX();
450 secCompPointEvent->touchY = pointerItem.GetDisplayY();
451 }
452 secCompPointEvent->timeStamp = event->GetActionTime();
453 uint32_t dataLen = sizeof(*secCompPointEvent);
454 uint8_t outBuf[MAX_HMAC_SIZE] = { 0 };
455 uint8_t* enHanceData = reinterpret_cast<uint8_t *>(&outBuf[0]);
456 uint32_t enHanceDataLen = MAX_HMAC_SIZE;
457 int32_t result = Security::SecurityComponent::SecCompEnhanceKit::GetPointerEventEnhanceData(secCompPointEvent,
458 dataLen, enHanceData, enHanceDataLen);
459 if (result != 0 || enHanceDataLen > MAX_HMAC_SIZE) {
460 pkt << 0;
461 free(secCompPointEvent);
462 secCompPointEvent = nullptr;
463 return RET_ERR;
464 }
465 pkt << enHanceDataLen;
466 std::vector<uint8_t> realBuf;
467 for (size_t i = 0; i < enHanceDataLen; i++) {
468 realBuf.push_back(enHanceData[i]);
469 pkt << realBuf[i];
470 }
471 free(secCompPointEvent);
472 secCompPointEvent = nullptr;
473 if (pkt.ChkRWError()) {
474 MMI_HILOGE("Marshalling enhanceData failed");
475 return RET_ERR;
476 }
477 return RET_OK;
478 }
479
UnmarshallingEnhanceData(NetPacket & pkt,std::shared_ptr<PointerEvent> event)480 int32_t InputEventDataTransformation::UnmarshallingEnhanceData(NetPacket &pkt, std::shared_ptr<PointerEvent> event)
481 {
482 uint32_t enHanceDataLen;
483 pkt >> enHanceDataLen;
484 if (enHanceDataLen == 0) {
485 return RET_OK;
486 }
487 uint8_t enhanceDataBuf[enHanceDataLen];
488 std::vector<uint8_t> enhanceData;
489 for (size_t i = 0; i < enHanceDataLen; i++) {
490 pkt >> enhanceDataBuf[i];
491 enhanceData.push_back(enhanceDataBuf[i]);
492 }
493 if (pkt.ChkRWError()) {
494 MMI_HILOGE("UnmarshallingEnhanceData pointer event failed");
495 return RET_ERR;
496 }
497 event->SetEnhanceData(enhanceData);
498 return RET_OK;
499 }
500
501 struct keyEventEnhanceData {
502 int64_t timestamp;
503 int32_t keyCode;
504 };
505
MarshallingEnhanceData(std::shared_ptr<KeyEvent> event,NetPacket & pkt)506 int32_t InputEventDataTransformation::MarshallingEnhanceData(std::shared_ptr<KeyEvent> event, NetPacket &pkt)
507 {
508 CHKPR(event, ERROR_NULL_POINTER);
509 struct keyEventEnhanceData secCompKeyEvent;
510 secCompKeyEvent.timestamp = event->GetActionTime();
511 secCompKeyEvent.keyCode = event->GetKeyCode();
512 uint32_t dataLen = sizeof(secCompKeyEvent);
513 uint8_t outBuf[MAX_HMAC_SIZE] = { 0 };
514 uint8_t* enHanceData = reinterpret_cast<uint8_t *>(&outBuf[0]);
515 uint32_t enHanceDataLen = MAX_HMAC_SIZE;
516 int32_t result = Security::SecurityComponent::SecCompEnhanceKit::GetPointerEventEnhanceData(&secCompKeyEvent,
517 dataLen, enHanceData, enHanceDataLen);
518 if (result != 0 || enHanceDataLen > MAX_HMAC_SIZE) {
519 pkt << 0;
520 return RET_ERR;
521 }
522 pkt << enHanceDataLen;
523 std::vector<uint8_t> realBuf;
524 for (size_t i = 0; i < enHanceDataLen; i++) {
525 realBuf.push_back(enHanceData[i]);
526 pkt << realBuf[i];
527 }
528 if (pkt.ChkRWError()) {
529 MMI_HILOGE("Marshalling enhanceData failed");
530 return RET_ERR;
531 }
532 return RET_OK;
533 }
534
UnmarshallingEnhanceData(NetPacket & pkt,std::shared_ptr<KeyEvent> event)535 int32_t InputEventDataTransformation::UnmarshallingEnhanceData(NetPacket &pkt, std::shared_ptr<KeyEvent> event)
536 {
537 uint32_t enHanceDataLen;
538 pkt >> enHanceDataLen;
539 if (enHanceDataLen == 0 || enHanceDataLen > MAX_HMAC_SIZE) {
540 return RET_OK;
541 }
542 uint8_t enhanceDataBuf[enHanceDataLen];
543 std::vector<uint8_t> enhanceData;
544 for (size_t i = 0; i < enHanceDataLen; i++) {
545 pkt >> enhanceDataBuf[i];
546 enhanceData.push_back(enhanceDataBuf[i]);
547 }
548 if (pkt.ChkRWError()) {
549 MMI_HILOGE("UnmarshallingEnhanceData key event failed");
550 return RET_ERR;
551 }
552 event->SetEnhanceData(enhanceData);
553 return RET_OK;
554 }
555 #endif // OHOS_BUILD_ENABLE_SECURITY_COMPONENT
556 } // namespace MMI
557 } // namespace OHOS
558