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