MCPcopy Create free account
hub / github.com/secdev/scapy / ZigbeeAppCommandPayload

Class ZigbeeAppCommandPayload

scapy/layers/zigbee.py:763–881  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

761
762
763class ZigbeeAppCommandPayload(Packet):
764 name = "Zigbee Application Layer Command Payload"
765 fields_desc = [
766 ByteEnumField("cmd_identifier", 1, {
767 1: "APS_CMD_SKKE_1",
768 2: "APS_CMD_SKKE_2",
769 3: "APS_CMD_SKKE_3",
770 4: "APS_CMD_SKKE_4",
771 5: "APS_CMD_TRANSPORT_KEY",
772 6: "APS_CMD_UPDATE_DEVICE",
773 7: "APS_CMD_REMOVE_DEVICE",
774 8: "APS_CMD_REQUEST_KEY",
775 9: "APS_CMD_SWITCH_KEY",
776 # TODO: implement 10 to 13
777 10: "APS_CMD_EA_INIT_CHLNG",
778 11: "APS_CMD_EA_RSP_CHLNG",
779 12: "APS_CMD_EA_INIT_MAC_DATA",
780 13: "APS_CMD_EA_RSP_MAC_DATA",
781 14: "APS_CMD_TUNNEL",
782 15: "APS_CMD_VERIFY_KEY",
783 16: "APS_CMD_CONFIRM_KEY"
784 }),
785 # SKKE Commands
786 ConditionalField(dot15d4AddressField("initiator", 0,
787 adjust=lambda pkt, x: 8),
788 lambda pkt: pkt.cmd_identifier in [1, 2, 3, 4]),
789 ConditionalField(dot15d4AddressField("responder", 0,
790 adjust=lambda pkt, x: 8),
791 lambda pkt: pkt.cmd_identifier in [1, 2, 3, 4]),
792 ConditionalField(StrFixedLenField("data", 0, length=16),
793 lambda pkt: pkt.cmd_identifier in [1, 2, 3, 4]),
794 # Confirm-key command
795 ConditionalField(
796 ByteEnumField("status", 0, _ApsStatusValues),
797 lambda pkt: pkt.cmd_identifier == 16),
798 # Common fields
799 ConditionalField(
800 ByteEnumField("key_type", 0, _TransportKeyKeyTypes),
801 lambda pkt: pkt.cmd_identifier in [5, 8, 15, 16]),
802 ConditionalField(dot15d4AddressField("address", 0,
803 adjust=lambda pkt, x: 8),
804 lambda pkt: pkt.cmd_identifier in [6, 7, 15, 16]),
805 # Transport-key Command
806 ConditionalField(
807 StrFixedLenField("key", None, 16),
808 lambda pkt: pkt.cmd_identifier == 5),
809 ConditionalField(
810 ByteField("key_seqnum", 0),
811 lambda pkt: (pkt.cmd_identifier == 5 and
812 pkt.key_type in [0x01, 0x05])),
813 ConditionalField(
814 dot15d4AddressField("dest_addr", 0, adjust=lambda pkt, x: 8),
815 lambda pkt: ((pkt.cmd_identifier == 5 and
816 pkt.key_type not in [0x02, 0x03]) or
817 pkt.cmd_identifier == 14)),
818 ConditionalField(
819 dot15d4AddressField("src_addr", 0, adjust=lambda pkt, x: 8),
820 lambda pkt: (pkt.cmd_identifier == 5 and

Callers

nothing calls this directly

Calls 9

ByteEnumFieldClass · 0.90
ConditionalFieldClass · 0.90
dot15d4AddressFieldClass · 0.90
StrFixedLenFieldClass · 0.90
ByteFieldClass · 0.90
XLEShortFieldClass · 0.90
StrFieldClass · 0.90
FlagsFieldClass · 0.90
BitEnumFieldClass · 0.90

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…