LDN services: Difference between revisions
Line 1,553: | Line 1,553: | ||
AccessPoint->Station frame, the Station verifies that this matches the data previously sent to the AccessPoint. | AccessPoint->Station frame, the Station verifies that this matches the data previously sent to the AccessPoint. | ||
|- | |- | ||
| 0x38 || 0x10 || | | 0x38 || 0x10 || AuthEncryptionType1: Used for key derivation. | ||
Station->AccessPoint: The Station sets this to random data. Unused by the AccessPoint (besides the above), except for copying into the response. | |||
AccessPoint->Station: +0x38 from the data originally sent by the Station. The Station verifies that this matches the previously sent data. | |||
|- | |- | ||
| 0x48 || 0x10 || Only present with AuthEncryptionType1: AES-128-GCM MAC tag. | | 0x48 || 0x10 || Only present with AuthEncryptionType1: AES-128-GCM MAC tag. | ||
|- | |- | ||
| 0x48 (0x58 with AuthEncryptionType1) || || Frame-specific data, with the above size. The total frame size - {offset of the start of this data in the frame} must match the above size. | | 0x48 (0x58 with AuthEncryptionType1) || || Frame-specific payload data, with the above size. The total frame size - {offset of the start of this data in the frame} must match the above size. | ||
|} | |} | ||
Line 1,568: | Line 1,571: | ||
AuthEncryptionType1: The key is derived essentially the same as the data-frame CCMP key, except the input data for hashing is the 0x10-bytes at +0x38 (this also only supports using [[SPL_services|Generation]] 0x13, returning immediately if the input param indicates otherwise due to the [[#Protocol|Protocol]]). The encrypted AES-128-GCM data starts at +0x58 with the above size. The 0xC-bytes IV is at +0x0, the AAD is at +0x0 size 0x48-bytes. | AuthEncryptionType1: The key is derived essentially the same as the data-frame CCMP key, except the input data for hashing is the 0x10-bytes at +0x38 (this also only supports using [[SPL_services|Generation]] 0x13, returning immediately if the input param indicates otherwise due to the [[#Protocol|Protocol]]). The encrypted AES-128-GCM data starts at +0x58 with the above size. The 0xC-bytes IV is at +0x0, the AAD is at +0x0 size 0x48-bytes. | ||
The AccessPoint will not respond to frames where the source mac-address is unrecognized. | |||
Station->AccessPoint payload data, relative to frame_end above (frame size depends on whether the challenge is enabled): | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
Line 1,578: | Line 1,581: | ||
! Description | ! Description | ||
|- | |- | ||
| | | 0x0 || 0x20 || [[#UserConfig]]+0. Copied into state by the AccessPoint. | ||
|- | |- | ||
| | | 0x20 || 0x2 || Big-endian LocalCommunicationVersion. Byte-swapped by the AccessPoint then copied into state. [?+] This is now ignored. | ||
|- | |- | ||
| | | 0x22 || 0x1 || [?+] Copied into state by the AccessPoint. | ||
|- | |- | ||
| | | 0x23 || 0x1D || Zeros, unused by the AccessPoint. | ||
|- | |- | ||
| | | 0x40 || 0x24 || [6.0.0+] Zeros, unused by the AccessPoint. | ||
|- | |- | ||
| | | 0x64 || 0x300 || [6.0.0+] Authentication challenge data. If enabled, the total frame size must be >= {end offset of this data in the frame}. The frame data does not include this if it's not enabled. | ||
|} | |} | ||
AccessPoint->Station response frame, relative to | AccessPoint->Station response frame, relative to frame_end above (frame size depends on whether the challenge is enabled): | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
Line 1,599: | Line 1,602: | ||
! Description | ! Description | ||
|- | |- | ||
| | | 0x0 || 0x40 || Zeros. [6.0.0+] Only included in the frame if it's enabled (+0x0 [[#AuthVersion]] >= 3). Unused by the Station. | ||
|- | |- | ||
| | | 0x40 || 0x44 || [6.0.0+] Only included in the frame if it's enabled (+0x0 [[#AuthVersion]] >= 3). Unused by the Station. | ||
|- | |- | ||
| | | 0x84 || 0x100 || [6.0.0+] If enabled, Authentication challenge response data. Not included in the frame if it's not enabled. | ||
|} | |} | ||