sequence! { procedure, context, // ACL Connection Established Lower Tester -> IUT: IoCapabilityReq { transaction_id: 0, io_capabilities: 0x01, oob_authentication_data: 0x00, authentication_requirement: 0x01, } IUT -> Upper Tester: IoCapabilityResponse { bd_addr: context.peer_address(), io_capability: IoCapability::DisplayYesNo, oob_data_present: OobDataPresent::NotPresent, authentication_requirements: AuthenticationRequirements::NoBondingMitmProtection, } IUT -> Upper Tester: IoCapabilityRequest { bd_addr: context.peer_address(), } Upper Tester -> IUT: IoCapabilityRequestReply { bd_addr: context.peer_address(), io_capability: IoCapability::DisplayYesNo, oob_present: OobDataPresent::NotPresent, authentication_requirements: AuthenticationRequirements::NoBondingMitmProtection, } IUT -> Upper Tester: IoCapabilityRequestReplyComplete { num_hci_command_packets: 1, status: ErrorCode::Success, bd_addr: context.peer_address(), } IUT -> Lower Tester: IoCapabilityRes { transaction_id: 0, io_capabilities: 0x01, oob_authentication_data: 0x00, authentication_requirement: 0x01, } // Public Key Exchange Lower Tester -> IUT: EncapsulatedHeader { transaction_id: 0, major_type: 1, minor_type: 1, payload_length: 48, } IUT -> Lower Tester: Accepted { transaction_id: 0, accepted_opcode: Opcode::EncapsulatedHeader, } repeat 3 times with (part in peer_p192_public_key()) { Lower Tester -> IUT: EncapsulatedPayload { transaction_id: 0, data: part, } IUT -> Lower Tester: Accepted { transaction_id: 0, accepted_opcode: Opcode::EncapsulatedPayload, } } IUT -> Lower Tester: EncapsulatedHeader { transaction_id: 0, major_type: 1, minor_type: 1, payload_length: 48, } Lower Tester -> IUT: Accepted { transaction_id: 0, accepted_opcode: Opcode::EncapsulatedHeader, } repeat 3 times with (part in local_p192_public_key(&context)) { IUT -> Lower Tester: EncapsulatedPayload { transaction_id: 0, data: part, } Lower Tester -> IUT: Accepted { transaction_id: 0, accepted_opcode: Opcode::EncapsulatedPayload, } } // Authentication Stage 1: Numeric Comparison Protocol IUT -> Lower Tester: SimplePairingConfirm { transaction_id: 0, commitment_value: [0; 16], } Lower Tester -> IUT: SimplePairingNumber { transaction_id: 0, nonce: [0; 16], } IUT -> Lower Tester: Accepted { transaction_id: 0, accepted_opcode: Opcode::SimplePairingNumber, } IUT -> Lower Tester: SimplePairingNumber { transaction_id: 0, nonce: [0; 16], } Lower Tester -> IUT: Accepted { transaction_id: 0, accepted_opcode: Opcode::SimplePairingNumber, } IUT -> Upper Tester: UserConfirmationRequest { bd_addr: context.peer_address(), numeric_value: 0 } Upper Tester -> IUT: UserConfirmationRequestReply { bd_addr: context.peer_address() } IUT -> Upper Tester: UserConfirmationRequestReplyComplete { num_hci_command_packets: 1, status: ErrorCode::Success, bd_addr: context.peer_address(), } // Authentication Stage 2 Lower Tester -> IUT: DhkeyCheck { transaction_id: 0, confirmation_value: [0; 16], } IUT -> Lower Tester: Accepted { transaction_id: 0, accepted_opcode: Opcode::DhkeyCheck } IUT -> Lower Tester: DhkeyCheck { transaction_id: 0, confirmation_value: [0; 16], } Lower Tester -> IUT: Accepted { transaction_id: 0, accepted_opcode: Opcode::DhkeyCheck } IUT -> Upper Tester: SimplePairingComplete { status: ErrorCode::Success, bd_addr: context.peer_address(), } // Link Key Calculation Lower Tester -> IUT: AuRand { transaction_id: 0, random_number: [0; 16], } IUT -> Lower Tester: Sres { transaction_id: 0, authentication_rsp: [0; 4], } IUT -> Lower Tester: AuRand { transaction_id: 0, random_number: [0; 16], } Lower Tester -> IUT: Sres { transaction_id: 0, authentication_rsp: [0; 4], } IUT -> Upper Tester: LinkKeyNotification { bd_addr: context.peer_address(), key_type: KeyType::AuthenticatedP192, link_key: [0; 16], } }