1sequence! { procedure, context, 2 // ACL Connection Established 3 Upper Tester -> IUT: AuthenticationRequested { 4 connection_handle: context.peer_handle() 5 } 6 IUT -> Upper Tester: AuthenticationRequestedStatus { 7 num_hci_command_packets: 1, 8 status: ErrorCode::Success, 9 } 10 IUT -> Upper Tester: LinkKeyRequest { 11 bd_addr: context.peer_address(), 12 } 13 Upper Tester -> IUT: LinkKeyRequestNegativeReply { 14 bd_addr: context.peer_address(), 15 } 16 IUT -> Upper Tester: LinkKeyRequestNegativeReplyComplete { 17 num_hci_command_packets: 1, 18 status: ErrorCode::Success, 19 bd_addr: context.peer_address(), 20 } 21 IUT -> Upper Tester: IoCapabilityRequest { 22 bd_addr: context.peer_address(), 23 } 24 Upper Tester -> IUT: IoCapabilityRequestReply { 25 bd_addr: context.peer_address(), 26 io_capability: IoCapability::KeyboardOnly, 27 oob_present: OobDataPresent::NotPresent, 28 authentication_requirements: AuthenticationRequirements::NoBondingMitmProtection, 29 } 30 IUT -> Upper Tester: IoCapabilityRequestReplyComplete { 31 num_hci_command_packets: 1, 32 status: ErrorCode::Success, 33 bd_addr: context.peer_address(), 34 } 35 IUT -> Lower Tester: IoCapabilityReq { 36 transaction_id: 0, 37 io_capabilities: 0x02, 38 oob_authentication_data: 0x00, 39 authentication_requirement: 0x01, 40 } 41 Lower Tester -> IUT: IoCapabilityRes { 42 transaction_id: 0, 43 io_capabilities: 0x00, 44 oob_authentication_data: 0x00, 45 authentication_requirement: 0x01, 46 } 47 IUT -> Upper Tester: IoCapabilityResponse { 48 bd_addr: context.peer_address(), 49 io_capability: IoCapability::DisplayOnly, 50 oob_data_present: OobDataPresent::NotPresent, 51 authentication_requirements: AuthenticationRequirements::NoBondingMitmProtection, 52 } 53 // Public Key Exchange 54 IUT -> Lower Tester: EncapsulatedHeader { 55 transaction_id: 0, 56 major_type: 1, 57 minor_type: 1, 58 payload_length: 48, 59 } 60 Lower Tester -> IUT: Accepted { 61 transaction_id: 0, 62 accepted_opcode: Opcode::EncapsulatedHeader, 63 } 64 repeat 3 times with (part in local_p192_public_key(&context)) { 65 IUT -> Lower Tester: EncapsulatedPayload { 66 transaction_id: 0, 67 data: part, 68 } 69 Lower Tester -> IUT: Accepted { 70 transaction_id: 0, 71 accepted_opcode: Opcode::EncapsulatedPayload, 72 } 73 } 74 Lower Tester -> IUT: EncapsulatedHeader { 75 transaction_id: 0, 76 major_type: 1, 77 minor_type: 1, 78 payload_length: 48, 79 } 80 IUT -> Lower Tester: Accepted { 81 transaction_id: 0, 82 accepted_opcode: Opcode::EncapsulatedHeader, 83 } 84 repeat 3 times with (part in peer_p192_public_key()) { 85 Lower Tester -> IUT: EncapsulatedPayload { 86 transaction_id: 0, 87 data: part, 88 } 89 IUT -> Lower Tester: Accepted { 90 transaction_id: 0, 91 accepted_opcode: Opcode::EncapsulatedPayload, 92 } 93 } 94 // Authentication Stage 1: Passkey Entry Protocol 95 IUT -> Upper Tester: UserPasskeyRequest { 96 bd_addr: context.peer_address(), 97 } 98 Upper Tester -> IUT: SendKeypressNotification { 99 bd_addr: context.peer_address(), 100 notification_type: KeypressNotificationType::EntryStarted, 101 } 102 IUT -> Lower Tester: KeypressNotification { 103 transaction_id: 0, 104 notification_type: 0x00, 105 } 106 IUT -> Upper Tester: SendKeypressNotificationComplete { 107 num_hci_command_packets: 1, 108 status: ErrorCode::Success, 109 bd_addr: context.peer_address(), 110 } 111 Upper Tester -> IUT: SendKeypressNotification { 112 bd_addr: context.peer_address(), 113 notification_type: KeypressNotificationType::EntryCompleted, 114 } 115 IUT -> Lower Tester: KeypressNotification { 116 transaction_id: 0, 117 notification_type: 0x04, 118 } 119 IUT -> Upper Tester: SendKeypressNotificationComplete { 120 num_hci_command_packets: 1, 121 status: ErrorCode::Success, 122 bd_addr: context.peer_address(), 123 } 124 Upper Tester -> IUT: UserPasskeyRequestReply { 125 bd_addr: context.peer_address(), 126 numeric_value: 0, 127 } 128 IUT -> Upper Tester: UserPasskeyRequestReplyComplete { 129 num_hci_command_packets: 1, 130 status: ErrorCode::Success, 131 bd_addr: context.peer_address(), 132 } 133 repeat 20 times { 134 IUT -> Lower Tester: SimplePairingConfirm { 135 transaction_id: 0, 136 commitment_value: [0; 16], 137 } 138 Lower Tester -> IUT: SimplePairingConfirm { 139 transaction_id: 0, 140 commitment_value: [0; 16], 141 } 142 IUT -> Lower Tester: SimplePairingNumber { 143 transaction_id: 0, 144 nonce: [0; 16], 145 } 146 Lower Tester -> IUT: Accepted { 147 transaction_id: 0, 148 accepted_opcode: Opcode::SimplePairingNumber, 149 } 150 Lower Tester -> IUT: SimplePairingNumber { 151 transaction_id: 0, 152 nonce: [0; 16], 153 } 154 IUT -> Lower Tester: Accepted { 155 transaction_id: 0, 156 accepted_opcode: Opcode::SimplePairingNumber, 157 } 158 } 159 // Authentication Stage 2 160 IUT -> Lower Tester: DhkeyCheck { 161 transaction_id: 0, 162 confirmation_value: [0; 16], 163 } 164 Lower Tester -> IUT: Accepted { transaction_id: 0, accepted_opcode: Opcode::DhkeyCheck } 165 Lower Tester -> IUT: DhkeyCheck { 166 transaction_id: 0, 167 confirmation_value: [0; 16], 168 } 169 IUT -> Lower Tester: Accepted { transaction_id: 0, accepted_opcode: Opcode::DhkeyCheck } 170 IUT -> Upper Tester: SimplePairingComplete { 171 status: ErrorCode::Success, 172 bd_addr: context.peer_address(), 173 } 174 // Link Key Calculation 175 IUT -> Lower Tester: AuRand { 176 transaction_id: 0, 177 random_number: [0; 16], 178 } 179 Lower Tester -> IUT: Sres { 180 transaction_id: 0, 181 authentication_rsp: [0; 4], 182 } 183 Lower Tester -> IUT: AuRand { 184 transaction_id: 0, 185 random_number: [0; 16], 186 } 187 IUT -> Lower Tester: Sres { 188 transaction_id: 0, 189 authentication_rsp: [0; 4], 190 } 191 IUT -> Upper Tester: LinkKeyNotification { 192 bd_addr: context.peer_address(), 193 key_type: KeyType::AuthenticatedP192, 194 link_key: [0; 16], 195 } 196 IUT -> Upper Tester: AuthenticationComplete { 197 status: ErrorCode::Success, 198 connection_handle: context.peer_handle(), 199 } 200} 201