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