You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

143 lines
3.2 KiB

little_endian_packets
custom_field Address : 48 "hci/"
enum Code : 8 {
PAIRING_REQUEST = 0x01,
PAIRING_RESPONSE = 0x02,
PAIRING_CONFIRM = 0x03,
PAIRING_RANDOM = 0x04,
PAIRING_FAILED = 0x05,
ENCRYPTION_INFORMATION = 0x06,
CENTRAL_IDENTIFICATION = 0x07,
IDENTITY_INFORMATION = 0x08,
IDENTITY_ADDRESS_INFORMATION = 0x09,
SIGNING_INFORMATION = 0x0A,
SECURITY_REQUEST = 0x0B,
PAIRING_PUBLIC_KEY = 0x0C,
PAIRING_DH_KEY_CHECK = 0x0D,
PAIRING_KEYPRESS_NOTIFICATION = 0x0E,
}
packet Command {
code : Code,
_payload_,
}
enum IoCapability : 8 {
DISPLAY_ONLY = 0x00,
DISPLAY_YES_NO = 0x01,
KEYBOARD_ONLY = 0x02,
NO_INPUT_NO_OUTPUT = 0x03,
KEYBOARD_DISPLAY = 0x04,
}
enum OobDataFlag : 8 {
NOT_PRESENT = 0x00,
PRESENT = 0x01,
}
enum BondingFlags : 2 {
NO_BONDING = 0,
BONDING = 1,
}
group PairingInfo {
io_capability : IoCapability,
oob_data_flag : OobDataFlag,
auth_req: 8,
maximum_encryption_key_size : 5, // 7 - 16
_reserved_ : 3,
initiator_key_distribution : 8,
responder_key_distribution : 8,
}
packet PairingRequest : Command (code = PAIRING_REQUEST) {
PairingInfo,
}
packet PairingResponse : Command (code = PAIRING_RESPONSE) {
PairingInfo,
}
packet PairingConfirm : Command (code = PAIRING_CONFIRM) {
confirm_value : 8[16], // Initiating device sends Mconfirm, responding device sends Sconfirm
}
packet PairingRandom : Command (code = PAIRING_RANDOM) {
random_value : 8[16], // Initiating device sends Mrand, responding device sends Srand
}
enum PairingFailedReason : 8 {
PASSKEY_ENTRY_FAILED = 0x01,
OOB_NOT_AVAILABLE = 0x02,
AUTHENTICATION_REQUIREMENTS = 0x03,
CONFIRM_VALUE_FAILED = 0x04,
PAIRING_NOT_SUPPORTED = 0x05,
ENCRYPTION_KEY_SIZE = 0x06,
COMMAND_NOT_SUPPORTED = 0x07,
UNSPECIFIED_REASON = 0x08,
REPEATED_ATTEMPTS = 0x09,
INVALID_PARAMETERS = 0x0A,
DHKEY_CHECK_FAILED = 0x0B,
NUMERIC_COMPARISON_FAILED = 0x0C,
BR_EDR_PAIRING_IN_PROGRESS = 0x0D,
CROSS_TRANSPORT_KEY_DERIVATION_NOT_ALLOWED = 0x0E,
}
packet PairingFailed : Command (code = PAIRING_FAILED) {
reason : PairingFailedReason,
}
packet EncryptionInformation : Command (code = ENCRYPTION_INFORMATION) {
long_term_key : 8[16],
}
packet CentralIdentification : Command (code = CENTRAL_IDENTIFICATION) {
ediv : 16,
rand : 8[8],
}
packet IdentityInformation : Command (code = IDENTITY_INFORMATION) {
identity_resolving_key : 8[16],
}
enum AddrType : 8 {
PUBLIC = 0x00,
STATIC_RANDOM = 0x01,
}
packet IdentityAddressInformation : Command (code = IDENTITY_ADDRESS_INFORMATION) {
addr_type : AddrType,
bd_addr : Address,
}
packet SigningInformation : Command (code = SIGNING_INFORMATION) {
signature_key : 8[16],
}
packet SecurityRequest : Command (code = SECURITY_REQUEST) {
auth_req: 8,
}
packet PairingPublicKey : Command (code = PAIRING_PUBLIC_KEY) {
public_key_x : 8[32],
public_key_y : 8[32],
}
packet PairingDhKeyCheck : Command (code = PAIRING_DH_KEY_CHECK) {
dh_key_check : 8[16],
}
enum KeypressNotificationType : 8 {
ENTRY_STARTED = 0,
DIGIT_ENTERED = 1,
DIGIT_ERASED = 2,
CLEARED = 3,
ENTRY_COMPLETED = 4,
}
packet PairingKeypressNotification : Command (code = PAIRING_KEYPRESS_NOTIFICATION) {
notification_type : KeypressNotificationType,
}