1// Passkey entry responder, negative reply on responding side: 2// - Test case not present in LMP.TS, but other permutations are described in SP/BV-14-C, SP/BV-15-C 3// - IUT is KeyboardOnly, responder 4// - Lower Tester is Display, initiator 5// - IUT fails passkey entry with User_Passkey_Request_NegativeReply, responds Not Accepted to the SimplePairingConfirm 6sequence! { procedure, context, 7 // ACL Connection Established 8 Lower Tester -> IUT: IoCapabilityReq { 9 transaction_id: 0, 10 io_capabilities: 0x00, 11 oob_authentication_data: 0x00, 12 authentication_requirement: 0x01, 13 } 14 IUT -> Upper Tester: IoCapabilityResponse { 15 bd_addr: context.peer_address(), 16 io_capability: IoCapability::DisplayOnly, 17 oob_data_present: OobDataPresent::NotPresent, 18 authentication_requirements: AuthenticationRequirements::NoBondingMitmProtection, 19 } 20 IUT -> Upper Tester: IoCapabilityRequest { 21 bd_addr: context.peer_address(), 22 } 23 Upper Tester -> IUT: IoCapabilityRequestReply { 24 bd_addr: context.peer_address(), 25 io_capability: IoCapability::KeyboardOnly, 26 oob_present: OobDataPresent::NotPresent, 27 authentication_requirements: AuthenticationRequirements::NoBondingMitmProtection, 28 } 29 IUT -> Upper Tester: IoCapabilityRequestReplyComplete { 30 num_hci_command_packets: 1, 31 status: ErrorCode::Success, 32 bd_addr: context.peer_address(), 33 } 34 IUT -> Lower Tester: IoCapabilityRes { 35 transaction_id: 0, 36 io_capabilities: 0x02, 37 oob_authentication_data: 0x00, 38 authentication_requirement: 0x01, 39 } 40 // Public Key Exchange 41 Lower Tester -> IUT: EncapsulatedHeader { 42 transaction_id: 0, 43 major_type: 1, 44 minor_type: 1, 45 payload_length: 48, 46 } 47 IUT -> Lower Tester: Accepted { 48 transaction_id: 0, 49 accepted_opcode: Opcode::EncapsulatedHeader, 50 } 51 repeat 3 times with (part in peer_p192_public_key()) { 52 Lower Tester -> IUT: EncapsulatedPayload { 53 transaction_id: 0, 54 data: part, 55 } 56 IUT -> Lower Tester: Accepted { 57 transaction_id: 0, 58 accepted_opcode: Opcode::EncapsulatedPayload, 59 } 60 } 61 IUT -> Lower Tester: EncapsulatedHeader { 62 transaction_id: 0, 63 major_type: 1, 64 minor_type: 1, 65 payload_length: 48, 66 } 67 Lower Tester -> IUT: Accepted { 68 transaction_id: 0, 69 accepted_opcode: Opcode::EncapsulatedHeader, 70 } 71 repeat 3 times with (part in local_p192_public_key(&context)) { 72 IUT -> Lower Tester: EncapsulatedPayload { 73 transaction_id: 0, 74 data: part, 75 } 76 Lower Tester -> IUT: Accepted { 77 transaction_id: 0, 78 accepted_opcode: Opcode::EncapsulatedPayload, 79 } 80 } 81 // Authentication Stage 1: Passkey Entry Protocol 82 IUT -> Upper Tester: UserPasskeyRequest { 83 bd_addr: context.peer_address(), 84 } 85 Upper Tester -> IUT: UserPasskeyRequestNegativeReply { 86 bd_addr: context.peer_address(), 87 } 88 IUT -> Upper Tester: UserPasskeyRequestNegativeReplyComplete { 89 num_hci_command_packets: 1, 90 status: ErrorCode::Success, 91 bd_addr: context.peer_address(), 92 } 93 Lower Tester -> IUT: SimplePairingConfirm { 94 transaction_id: 0, 95 commitment_value: [0; 16], 96 } 97 IUT -> Lower Tester: NotAccepted { 98 transaction_id: 0, 99 not_accepted_opcode: Opcode::SimplePairingConfirm, 100 error_code: ErrorCode::AuthenticationFailure.into(), 101 } 102 IUT -> Upper Tester: SimplePairingComplete { 103 status: ErrorCode::AuthenticationFailure, 104 bd_addr: context.peer_address(), 105 } 106} 107