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    IUT -> Lower Tester: SimplePairingConfirm {
134        transaction_id: 0,
135        commitment_value: [0; 16],
136    }
137    Lower Tester -> IUT: SimplePairingConfirm {
138        transaction_id: 0,
139        commitment_value: [0; 16],
140    }
141    IUT -> Lower Tester: SimplePairingNumber {
142        transaction_id: 0,
143        nonce: [0; 16],
144    }
145    Lower Tester -> IUT: NotAccepted {
146        transaction_id: 0,
147        not_accepted_opcode: Opcode::SimplePairingNumber,
148        error_code: ErrorCode::AuthenticationFailure.into(),
149    }
150    IUT -> Upper Tester: SimplePairingComplete {
151        status: ErrorCode::AuthenticationFailure,
152        bd_addr: context.peer_address(),
153    }
154    IUT -> Upper Tester: AuthenticationComplete {
155        status: ErrorCode::AuthenticationFailure,
156        connection_handle: context.peer_handle(),
157    }
158}
159