1sequence! { procedure, context,
2    Upper Tester ->IUT: ReadLocalOobData {}
3    IUT -> Upper Tester: ReadLocalOobDataComplete {
4       status: ErrorCode::Success,
5        c: [0; 16],
6        r: [0; 16],
7    }
8    // ACL Connection Established
9    Upper Tester -> IUT: AuthenticationRequested {
10        connection_handle: context.peer_handle()
11    }
12    IUT -> Upper Tester: AuthenticationRequestedStatus {
13       num_hci_command_packets: 1,
14       status: ErrorCode::Success,
15    }
16    IUT -> Upper Tester: LinkKeyRequest {
17        bd_addr: context.peer_address(),
18    }
19    Upper Tester -> IUT: LinkKeyRequestNegativeReply {
20        bd_addr: context.peer_address(),
21    }
22    IUT -> Upper Tester: LinkKeyRequestNegativeReplyComplete {
23       num_hci_command_packets: 1,
24       status: ErrorCode::Success,
25       bd_addr: context.peer_address(),
26    }
27    IUT -> Upper Tester: IoCapabilityRequest {
28        bd_addr: context.peer_address(),
29    }
30    Upper Tester -> IUT: IoCapabilityRequestReply {
31        bd_addr: context.peer_address(),
32        io_capability: IoCapability::DisplayYesNo,
33        oob_present: OobDataPresent::NotPresent,
34        authentication_requirements: AuthenticationRequirements::NoBondingMitmProtection,
35    }
36    IUT -> Upper Tester: IoCapabilityRequestReplyComplete {
37        num_hci_command_packets: 1,
38        status: ErrorCode::Success,
39        bd_addr: context.peer_address(),
40    }
41    IUT -> Lower Tester: IoCapabilityReq {
42        transaction_id: 0,
43        io_capabilities: 0x01,
44        oob_authentication_data: 0x00,
45        authentication_requirement: 0x01,
46    }
47    Lower Tester -> IUT: IoCapabilityRes {
48        transaction_id: 0,
49        io_capabilities: 0x01,
50        oob_authentication_data: 0x01,
51        authentication_requirement: 0x01,
52    }
53    IUT -> Upper Tester: IoCapabilityResponse {
54        bd_addr: context.peer_address(),
55        io_capability: IoCapability::DisplayYesNo,
56        oob_data_present: OobDataPresent::P192Present,
57        authentication_requirements: AuthenticationRequirements::NoBondingMitmProtection,
58    }
59    // Public Key Exchange
60    IUT -> Lower Tester: EncapsulatedHeader {
61        transaction_id: 0,
62        major_type: 1,
63        minor_type: 1,
64        payload_length: 48,
65    }
66    Lower Tester -> IUT: Accepted {
67        transaction_id: 0,
68        accepted_opcode: Opcode::EncapsulatedHeader,
69    }
70    repeat 3 times with (part in local_p192_public_key(&context)) {
71        IUT -> Lower Tester: EncapsulatedPayload {
72            transaction_id: 0,
73            data: part,
74        }
75        Lower Tester -> IUT: Accepted {
76            transaction_id: 0,
77            accepted_opcode: Opcode::EncapsulatedPayload,
78        }
79    }
80    Lower Tester -> IUT: EncapsulatedHeader {
81        transaction_id: 0,
82        major_type: 1,
83        minor_type: 1,
84        payload_length: 48,
85    }
86    IUT -> Lower Tester: Accepted {
87        transaction_id: 0,
88        accepted_opcode: Opcode::EncapsulatedHeader,
89    }
90    repeat 3 times with (part in peer_p192_public_key()) {
91        Lower Tester -> IUT: EncapsulatedPayload {
92            transaction_id: 0,
93            data: part,
94        }
95        IUT -> Lower Tester: Accepted {
96            transaction_id: 0,
97            accepted_opcode: Opcode::EncapsulatedPayload,
98        }
99    }
100    // Authentication Stage 1: OOB Protocol
101    IUT -> Lower Tester: SimplePairingNumber {
102        transaction_id: 0,
103        nonce: [0; 16],
104    }
105    Lower Tester -> IUT: Accepted {
106        transaction_id: 0,
107        accepted_opcode: Opcode::SimplePairingNumber,
108    }
109    Lower Tester -> IUT: SimplePairingNumber {
110        transaction_id: 0,
111        nonce: [0; 16],
112    }
113    IUT -> Lower Tester: Accepted {
114        transaction_id: 0,
115        accepted_opcode: Opcode::SimplePairingNumber,
116    }
117    // Authentication Stage 2
118    IUT -> Lower Tester: DhkeyCheck {
119        transaction_id: 0,
120        confirmation_value: [0; 16],
121    }
122    Lower Tester -> IUT: Accepted { transaction_id: 0, accepted_opcode: Opcode::DhkeyCheck }
123    Lower Tester -> IUT: DhkeyCheck {
124        transaction_id: 0,
125        confirmation_value: [0; 16],
126    }
127    IUT -> Lower Tester: Accepted { transaction_id: 0, accepted_opcode: Opcode::DhkeyCheck }
128    IUT -> Upper Tester: SimplePairingComplete {
129        status: ErrorCode::Success,
130        bd_addr: context.peer_address(),
131    }
132    // Link Key Calculation
133    IUT -> Lower Tester: AuRand {
134        transaction_id: 0,
135        random_number: [0; 16],
136    }
137    Lower Tester -> IUT: Sres {
138        transaction_id: 0,
139        authentication_rsp: [0; 4],
140    }
141    Lower Tester -> IUT: AuRand {
142        transaction_id: 0,
143        random_number: [0; 16],
144    }
145    IUT -> Lower Tester: Sres {
146        transaction_id: 0,
147        authentication_rsp: [0; 4],
148    }
149    IUT -> Upper Tester: LinkKeyNotification {
150        bd_addr: context.peer_address(),
151        key_type: KeyType::AuthenticatedP192,
152        link_key: [0; 16],
153    }
154    IUT -> Upper Tester: AuthenticationComplete {
155        status: ErrorCode::Success,
156        connection_handle: context.peer_handle(),
157    }
158}
159