Skip to content

Commit e2a8fd7

Browse files
committed
Log a warning on startup if the network uses the fixed Z2M key
1 parent 778904b commit e2a8fd7

File tree

3 files changed

+46
-24
lines changed

3 files changed

+46
-24
lines changed

tests/application/test_startup.py

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,11 @@
3838
),
3939
FormedZStack1CC2531: (
4040
"CC2531, Z-Stack Home 1.2",
41-
15,
42-
t.Channels.from_channel_list([15]),
43-
0x1F1C,
44-
t.EUI64.convert("bf:00:dc:3b:60:4b:21:74"),
45-
t.KeyData(bytes.fromhex("b133fd66f718179ffd767b3cc5765a60")),
41+
11,
42+
t.Channels.from_channel_list([11]),
43+
0x1A62,
44+
t.EUI64.convert("dd:dd:dd:dd:dd:dd:dd:dd"),
45+
t.KeyData([1, 3, 5, 7, 9, 11, 13, 15, 0, 2, 4, 6, 8, 10, 12, 13]),
4646
),
4747
}
4848

@@ -53,7 +53,15 @@
5353
[(device_cls,) + settings for device_cls, settings in DEV_NETWORK_SETTINGS.items()],
5454
)
5555
async def test_info(
56-
device, model, channel, channels, pan_id, ext_pan_id, network_key, make_application
56+
device,
57+
model,
58+
channel,
59+
channels,
60+
pan_id,
61+
ext_pan_id,
62+
network_key,
63+
make_application,
64+
caplog,
5765
):
5866
app, znp_server = make_application(server_cls=device)
5967

@@ -66,6 +74,11 @@ async def test_info(
6674

6775
await app.startup(auto_form=False)
6876

77+
if network_key == t.KeyData([1, 3, 5, 7, 9, 11, 13, 15, 0, 2, 4, 6, 8, 10, 12, 13]):
78+
assert "Your network is using the insecure" in caplog.text
79+
else:
80+
assert "Your network is using the insecure" not in caplog.text
81+
6982
assert app.pan_id == pan_id
7083
assert app.extended_pan_id == ext_pan_id
7184
assert app.channel == channel

tests/nvram/CC2531-ZStack1.formed.json

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44
"EXTADDR": "8533ce1c004b1200",
55
"STARTUP_OPTION": "00",
66
"START_DELAY": "0a",
7-
"NIB": "1d0502151415001e0000000105018f070002051e00000f000000000000000000001c1f08008000000f0f050001000000010000000074214b603bdc00bf010000000000000000000000000000000000000000000000000000000000000000000000000f030001780a010000410000",
8-
"DEVICE_LIST": "030044480000010800008de90100010800006203020004080000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
9-
"ADDRMGR": "03444859214b1c004b1200038de98e6e4b1c004b1200036203f23acefeff5ecfd000ffffffffffffffffffff00ffffffffffffffffffff00ffffffffffffffffffff00ffffffffffffffffffff00ffffffffffffffffffff00ffffffffffffffffffff00ffffffffffffffffffff00ffffffffffffffffffff00ffffffffffffffffffff00ffffffffffffffffffff00ffffffffffffffffffff00ffffffffffffffffffff00ffffffffffffffffffff00ffffffffffffffffffff00ffffffffffffffffffff00ffffffffffffffffffff00ffffffffffffffffffff00ffffffffffffffffffff00ffffffffffffffffffff00ffffffffffffffffffff",
7+
"NIB": "49050215141500140000000105018f070002051e00000b00000000000000000000621a08000800000f0f0500010000000100000000dddddddddddddddd010000000000000000000000000000000000000000000000000000000000000000000000000f0300013c0a010000640000",
8+
"DEVICE_LIST": "020051b7000001080000b1fd010004080000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
9+
"ADDRMGR": "0351b759214b1c004b120003b1fdf23acefeff5ecfd002a9c2a4412ffeffbd1bec00ffffffffffffffffffff00ffffffffffffffffffff00ffffffffffffffffffff00ffffffffffffffffffff00ffffffffffffffffffff00ffffffffffffffffffff00ffffffffffffffffffff00ffffffffffffffffffff00ffffffffffffffffffff00ffffffffffffffffffff00ffffffffffffffffffff00ffffffffffffffffffff00ffffffffffffffffffff00ffffffffffffffffffff00ffffffffffffffffffff00ffffffffffffffffffff00ffffffffffffffffffff00ffffffffffffffffffff00ffffffffffffffffffff00ffffffffffffffffffff",
1010
"POLL_RATE_OLD16": "e803",
1111
"QUEUED_POLL_RATE": "6400",
1212
"RESPONSE_POLL_RATE": "6400",
@@ -16,32 +16,32 @@
1616
"STACK_PROFILE": "02",
1717
"INDIRECT_MSG_TIMEOUT": "07",
1818
"ROUTE_EXPIRY_TIME": "1e",
19-
"EXTENDED_PAN_ID": "8533ce1c004b1200",
19+
"EXTENDED_PAN_ID": "dddddddddddddddd",
2020
"BCAST_RETRIES": "02",
2121
"PASSIVE_ACK_TIMEOUT": "05",
22-
"BCAST_DELIVERY_TIME": "1e",
22+
"BCAST_DELIVERY_TIME": "14",
2323
"NWK_MODE": "02",
2424
"CONCENTRATOR_ENABLE": "01",
25-
"CONCENTRATOR_DISCOVERY": "78",
25+
"CONCENTRATOR_DISCOVERY": "3c",
2626
"CONCENTRATOR_RADIUS": "0a",
2727
"POLL_RATE": "e8030000",
28-
"CONCENTRATOR_RC": "01",
28+
"CONCENTRATOR_RC": "00",
2929
"NWK_MGR_MODE": "01",
30-
"SRC_RTG_EXPIRY_TIME": "ff",
30+
"SRC_RTG_EXPIRY_TIME": "0a",
3131
"ROUTE_DISCOVERY_TIME": "05",
32-
"NWK_ACTIVE_KEY_INFO": "00b133fd66f718179ffd767b3cc5765a60",
32+
"NWK_ACTIVE_KEY_INFO": "0001030507090b0d0f00020406080a0c0d",
3333
"NWK_ALTERN_KEY_INFO": "0000000000000000000000000000000000",
3434
"ROUTER_OFF_ASSOC_CLEANUP": "00",
3535
"NWK_LEAVE_REQ_ALLOWED": "01",
3636
"NWK_CHILD_AGE_ENABLE": "00",
37-
"DEVICE_LIST_KA_TIMEOUT": "ff003c0000ff003c0000fffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
37+
"DEVICE_LIST_KA_TIMEOUT": "ff003c0000fffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
3838
"BINDING_TABLE": "0000ffffffffffffffffffffffffffff",
39-
"GROUP_TABLE": "0000ffffffffffffffffffffffffffffffffffffff",
39+
"GROUP_TABLE": "0100f2840b00000000000000000000000000000000",
4040
"APS_FRAME_RETRIES": "03",
4141
"APS_ACK_WAIT_DURATION": "b80b",
4242
"APS_ACK_WAIT_MULTIPLIER": "02",
4343
"BINDING_TIME": "803e",
44-
"APS_USE_EXT_PANID": "74214b603bdc00bf",
44+
"APS_USE_EXT_PANID": "0000000000000000",
4545
"APS_USE_INSECURE_JOIN": "01",
4646
"COMMISSIONED_NWK_ADDR": "feff",
4747
"APS_NONMEMBER_RADIUS": "02",
@@ -53,18 +53,18 @@
5353
"NWK_ENDDEV_TIMEOUT_DEF": "08",
5454
"END_DEV_TIMEOUT_VALUE": "08",
5555
"END_DEV_CONFIGURATION": "00",
56-
"PRECFGKEY": "b133fd66f718179ffd767b3cc5765a60",
57-
"PRECFGKEYS_ENABLE": "01",
56+
"PRECFGKEY": "01030507090b0d0f00020406080a0c0d",
57+
"PRECFGKEYS_ENABLE": "00",
5858
"SECURITY_MODE": "04",
5959
"SECURE_PERMIT_JOIN": "01",
6060
"APS_LINK_KEY_TYPE": "01",
6161
"APS_ALLOW_R19_SECURITY": "00",
6262
"USE_DEFAULT_TCLK": "01",
6363
"TRUSTCENTER_ADDR": "0000000000000000",
6464
"USERDESC": "0000000000000000000000000000000000",
65-
"NWKKEY": "00b133fd66f718179ffd767b3cc5765a60a60e0000",
66-
"PANID": "ffff",
67-
"CHANLIST": "00800000",
65+
"NWKKEY": "0001030507090b0d0f00020406080a0c0de2040000",
66+
"PANID": "621a",
67+
"CHANLIST": "00080000",
6868
"LEAVE_CTRL": "00",
6969
"SCAN_DURATION": "05",
7070
"LOGICAL_TYPE": "00",
@@ -79,4 +79,4 @@
7979
"APP_ITEM_6": "ffffffffffffffffffffffffffffffff",
8080
"RF_TEST_PARMS": "00000000"
8181
}
82-
}
82+
}

zigpy_znp/zigbee/application.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,10 @@
6565

6666
REQUEST_RETRYABLE_ERRORS = REQUEST_TRANSIENT_ERRORS | REQUEST_ROUTING_ERRORS
6767

68+
Z2M_PAN_ID = 0xA162
69+
Z2M_EXT_PAN_ID = t.EUI64.convert("DD:DD:DD:DD:DD:DD:DD:DD")
70+
Z2M_NETWORK_KEY = t.KeyData([1, 3, 5, 7, 9, 11, 13, 15, 0, 2, 4, 6, 8, 10, 12, 13])
71+
6872
DEFAULT_TC_LINK_KEY = t.TCLinkKey(
6973
ExtAddr=t.EUI64.convert("FF:FF:FF:FF:FF:FF:FF:FF"), # global
7074
Key=t.KeyData(b"ZigBeeAlliance09"),
@@ -364,6 +368,11 @@ async def _startup(self, auto_form=False, force_form=False, read_only=False):
364368
" Network key: %s", ":".join(f"{c:02x}" for c in self.network_key)
365369
)
366370

371+
if self.network_key == Z2M_NETWORK_KEY:
372+
LOGGER.warning(
373+
"Your network is using the insecure Zigbee2MQTT network key!"
374+
)
375+
367376
self._watchdog_task = asyncio.create_task(self._watchdog_loop())
368377

369378
async def update_network_channel(self, channel: t.uint8_t):

0 commit comments

Comments
 (0)