Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cd62e63b authored by David Duarte's avatar David Duarte
Browse files

Add some LMP Secure Simple Pairing OOB tests

Bug: 248004609
Test: atest --host liblmp_tests
Change-Id: Ic2402826174b4769b9af9d46ba79efb6bbfc5139
parent 80ea31aa
Loading
Loading
Loading
Loading
+90 −0
Original line number Diff line number Diff line
@@ -837,4 +837,94 @@ mod tests {

        include!("../../test/SP/BV-17-C.in");
    }

    #[test]
    #[should_panic] // TODO: make the test pass
    fn oob_protocol_initiator_iut_with_oob_auth_data_success() {
        let context = TestContext::new();
        let procedure = initiate;

        include!("../../test/SP/BV-18-C.in");
    }

    #[test]
    #[should_panic] // TODO: make the test pass
    fn oob_protocol_responder_iut_with_oob_auth_data_success() {
        let context = TestContext::new();
        let procedure = respond;

        include!("../../test/SP/BV-19-C.in");
    }

    #[test]
    #[should_panic] // TODO: make the test pass
    fn oob_protocol_initiator_lower_tester_with_oob_auth_data_success() {
        let context = TestContext::new();
        let procedure = initiate;

        include!("../../test/SP/BV-20-C.in");
    }

    #[test]
    #[should_panic] // TODO: make the test pass
    fn oob_protocol_responder_lower_tester_with_oob_auth_data_success() {
        let context = TestContext::new();
        let procedure = respond;

        include!("../../test/SP/BV-21-C.in");
    }

    #[test]
    #[should_panic] // TODO: make the test pass
    fn oob_protocol_initiator_iut_and_lower_tester_with_oob_auth_data_success() {
        let context = TestContext::new();
        let procedure = initiate;

        include!("../../test/SP/BV-22-C.in");
    }

    #[test]
    #[should_panic] // TODO: make the test pass
    fn oob_protocol_responder_iut_and_lower_tester_with_oob_auth_data_success() {
        let context = TestContext::new();
        let procedure = respond;

        include!("../../test/SP/BV-23-C.in");
    }

    #[test]
    #[should_panic] // TODO: make the test pass
    fn oob_protocol_initiator_iut_with_oob_auth_data_failure() {
        let context = TestContext::new();
        let procedure = initiate;

        include!("../../test/SP/BV-24-C.in");
    }

    #[test]
    #[should_panic] // TODO: make the test pass
    fn oob_protocol_responder_iut_with_oob_auth_data_failure() {
        let context = TestContext::new();
        let procedure = respond;

        include!("../../test/SP/BV-25-C.in");
    }

    #[test]
    #[should_panic] // TODO: make the test pass
    fn oob_protocol_initiator_lower_tester_with_oob_auth_data_failure() {
        let context = TestContext::new();
        let procedure = initiate;

        include!("../../test/SP/BV-26-C.in");
    }

    #[test]
    #[should_panic] // TODO: make the test pass
    fn oob_protocol_responder_lower_tester_with_oob_auth_data_failure() {
        let context = TestContext::new();
        let procedure = respond;

        include!("../../test/SP/BV-27-C.in");
    }
}
+165 −0
Original line number Diff line number Diff line
sequence! { procedure, context,
    // ACL Connection Established
    Upper Tester -> IUT: AuthenticationRequested {
        connection_handle: context.peer_handle()
    }
    IUT -> Upper Tester: AuthenticationRequestedStatus {
       num_hci_command_packets: 1,
       status: ErrorCode::Success,
    }
    IUT -> Upper Tester: LinkKeyRequest {
        bd_addr: context.peer_address(),
    }
    Upper Tester -> IUT: LinkKeyRequestNegativeReply {
        bd_addr: context.peer_address(),
    }
    IUT -> Upper Tester: LinkKeyRequestNegativeReplyComplete {
       num_hci_command_packets: 1,
       status: ErrorCode::Success,
       bd_addr: context.peer_address(),
    }
    IUT -> Upper Tester: IoCapabilityRequest {
        bd_addr: context.peer_address(),
    }
    Upper Tester -> IUT: IoCapabilityRequestReply {
        bd_addr: context.peer_address(),
        io_capability: IoCapability::DisplayYesNo,
        oob_present: OobDataPresent::P192Present,
        authentication_requirements: AuthenticationRequirements::NoBondingMitmProtection,
    }
    IUT -> Upper Tester: IoCapabilityRequestReplyComplete {
        num_hci_command_packets: 1,
        status: ErrorCode::Success,
        bd_addr: context.peer_address(),
    }
    IUT -> Lower Tester: IoCapabilityReq {
        transaction_id: 0,
        io_capabilities: 0x01,
        oob_authentication_data: 0x01,
        authentication_requirement: 0x01,
    }
    Lower Tester -> IUT: IoCapabilityRes {
        transaction_id: 0,
        io_capabilities: 0x01,
        oob_authentication_data: 0x00,
        authentication_requirement: 0x01,
    }
    IUT -> Upper Tester: IoCapabilityResponse {
        bd_addr: context.peer_address(),
        io_capability: IoCapability::DisplayYesNo,
        oob_data_present: OobDataPresent::NotPresent,
        authentication_requirements: AuthenticationRequirements::NoBondingMitmProtection,
    }
    // Public Key Exchange
    IUT -> Lower Tester: EncapsulatedHeader {
        transaction_id: 0,
        major_type: 1,
        minor_type: 1,
        payload_length: 48,
    }
    Lower Tester -> IUT: Accepted {
        transaction_id: 0,
        accepted_opcode: Opcode::EncapsulatedHeader,
    }
    repeat 3 times with (part in local_p192_public_key(&context)) {
        IUT -> Lower Tester: EncapsulatedPayload {
            transaction_id: 0,
            data: part,
        }
        Lower Tester -> IUT: Accepted {
            transaction_id: 0,
            accepted_opcode: Opcode::EncapsulatedPayload,
        }
    }
    Lower Tester -> IUT: EncapsulatedHeader {
        transaction_id: 0,
        major_type: 1,
        minor_type: 1,
        payload_length: 48,
    }
    IUT -> Lower Tester: Accepted {
        transaction_id: 0,
        accepted_opcode: Opcode::EncapsulatedHeader,
    }
    repeat 3 times with (part in peer_p192_public_key()) {
        Lower Tester -> IUT: EncapsulatedPayload {
            transaction_id: 0,
            data: part,
        }
        IUT -> Lower Tester: Accepted {
            transaction_id: 0,
            accepted_opcode: Opcode::EncapsulatedPayload,
        }
    }
    // Authentication Stage 1: OOB Protocol
    IUT -> Upper Tester: RemoteOobDataRequest {
        bd_addr: context.peer_address(),
    }
    Upper Tester -> IUT: RemoteOobDataRequestReply {
        bd_addr: context.peer_address(),
        c: [0; 16],
        r: [0; 16],
    }
    IUT -> Upper Tester: RemoteOobDataRequestReplyComplete {
        num_hci_command_packets: 1,
        status: ErrorCode::Success,
        bd_addr: context.peer_address(),
    }
    IUT -> Lower Tester: SimplePairingNumber {
        transaction_id: 0,
        nonce: [0; 16],
    }
    Lower Tester -> IUT: Accepted {
        transaction_id: 0,
        accepted_opcode: Opcode::SimplePairingNumber,
    }
    Lower Tester -> IUT: SimplePairingNumber {
        transaction_id: 0,
        nonce: [0; 16],
    }
    IUT -> Lower Tester: Accepted {
        transaction_id: 0,
        accepted_opcode: Opcode::SimplePairingNumber,
    }
    // Authentication Stage 2
    IUT -> Lower Tester: DhkeyCheck {
        transaction_id: 0,
        confirmation_value: [0; 16],
    }
    Lower Tester -> IUT: Accepted { transaction_id: 0, accepted_opcode: Opcode::DhkeyCheck }
    Lower Tester -> IUT: DhkeyCheck {
        transaction_id: 0,
        confirmation_value: [0; 16],
    }
    IUT -> Lower Tester: Accepted { transaction_id: 0, accepted_opcode: Opcode::DhkeyCheck }
    IUT -> Upper Tester: SimplePairingComplete {
        status: ErrorCode::Success,
        bd_addr: context.peer_address(),
    }
    // Link Key Calculation
    IUT -> Lower Tester: AuRand {
        transaction_id: 0,
        random_number: [0; 16],
    }
    Lower Tester -> IUT: Sres {
        transaction_id: 0,
        authentication_rsp: [0; 4],
    }
    Lower Tester -> IUT: AuRand {
        transaction_id: 0,
        random_number: [0; 16],
    }
    IUT -> Lower Tester: Sres {
        transaction_id: 0,
        authentication_rsp: [0; 4],
    }
    IUT -> Upper Tester: LinkKeyNotification {
        bd_addr: context.peer_address(),
        key_type: KeyType::AuthenticatedP192,
        link_key: [0; 16],
    }
    IUT -> Upper Tester: AuthenticationComplete {
        status: ErrorCode::Success,
        connection_handle: context.peer_handle(),
    }
}
+143 −0
Original line number Diff line number Diff line
sequence! { procedure, context,
    // ACL Connection Established
    Lower Tester -> IUT: IoCapabilityReq {
        transaction_id: 0,
        io_capabilities: 0x01,
        oob_authentication_data: 0x00,
        authentication_requirement: 0x01,
    }
    IUT -> Upper Tester: IoCapabilityResponse {
        bd_addr: context.peer_address(),
        io_capability: IoCapability::DisplayYesNo,
        oob_data_present: OobDataPresent::NotPresent,
        authentication_requirements: AuthenticationRequirements::NoBondingMitmProtection,
    }
    IUT -> Upper Tester: IoCapabilityRequest {
        bd_addr: context.peer_address(),
    }
    Upper Tester -> IUT: IoCapabilityRequestReply {
        bd_addr: context.peer_address(),
        io_capability: IoCapability::DisplayYesNo,
        oob_present: OobDataPresent::P192Present,
        authentication_requirements: AuthenticationRequirements::NoBondingMitmProtection,
    }
    IUT -> Upper Tester: IoCapabilityRequestReplyComplete {
        num_hci_command_packets: 1,
        status: ErrorCode::Success,
        bd_addr: context.peer_address(),
    }
    IUT -> Lower Tester: IoCapabilityRes {
        transaction_id: 0,
        io_capabilities: 0x01,
        oob_authentication_data: 0x01,
        authentication_requirement: 0x01,
    }
    // Public Key Exchange
    Lower Tester -> IUT: EncapsulatedHeader {
        transaction_id: 0,
        major_type: 1,
        minor_type: 1,
        payload_length: 48,
    }
    IUT -> Lower Tester: Accepted {
        transaction_id: 0,
        accepted_opcode: Opcode::EncapsulatedHeader,
    }
    repeat 3 times with (part in peer_p192_public_key()) {
        Lower Tester -> IUT: EncapsulatedPayload {
            transaction_id: 0,
            data: part,
        }
        IUT -> Lower Tester: Accepted {
            transaction_id: 0,
            accepted_opcode: Opcode::EncapsulatedPayload,
        }
    }
    IUT -> Lower Tester: EncapsulatedHeader {
        transaction_id: 0,
        major_type: 1,
        minor_type: 1,
        payload_length: 48,
    }
    Lower Tester -> IUT: Accepted {
        transaction_id: 0,
        accepted_opcode: Opcode::EncapsulatedHeader,
    }
    repeat 3 times with (part in local_p192_public_key(&context)) {
        IUT -> Lower Tester: EncapsulatedPayload {
            transaction_id: 0,
            data: part,
        }
        Lower Tester -> IUT: Accepted {
            transaction_id: 0,
            accepted_opcode: Opcode::EncapsulatedPayload,
        }
    }
    // Authentication Stage 1: OOB Protocol
    IUT -> Upper Tester: RemoteOobDataRequest {
        bd_addr: context.peer_address(),
    }
    Upper Tester -> IUT: RemoteOobDataRequestReply {
        bd_addr: context.peer_address(),
        c: [0; 16],
        r: [0; 16],
    }
    IUT -> Upper Tester: RemoteOobDataRequestReplyComplete {
        num_hci_command_packets: 1,
        status: ErrorCode::Success,
        bd_addr: context.peer_address(),
    }
    Lower Tester -> IUT: SimplePairingNumber {
        transaction_id: 0,
        nonce: [0; 16],
    }
    IUT -> Lower Tester: Accepted {
        transaction_id: 0,
        accepted_opcode: Opcode::SimplePairingNumber,
    }
    IUT -> Lower Tester: SimplePairingNumber {
        transaction_id: 0,
        nonce: [0; 16],
    }
    Lower Tester -> IUT: Accepted {
        transaction_id: 0,
        accepted_opcode: Opcode::SimplePairingNumber,
    }
    // Authentication Stage 2
    Lower Tester -> IUT: DhkeyCheck {
        transaction_id: 0,
        confirmation_value: [0; 16],
    }
    IUT -> Lower Tester: Accepted { transaction_id: 0, accepted_opcode: Opcode::DhkeyCheck }
    IUT -> Lower Tester: DhkeyCheck {
        transaction_id: 0,
        confirmation_value: [0; 16],
    }
    Lower Tester -> IUT: Accepted { transaction_id: 0, accepted_opcode: Opcode::DhkeyCheck }
    IUT -> Upper Tester: SimplePairingComplete {
        status: ErrorCode::Success,
        bd_addr: context.peer_address(),
    }
    // Link Key Calculation
    Lower Tester -> IUT: AuRand {
        transaction_id: 0,
        random_number: [0; 16],
    }
    IUT -> Lower Tester: Sres {
        transaction_id: 0,
        authentication_rsp: [0; 4],
    }
    IUT -> Lower Tester: AuRand {
        transaction_id: 0,
        random_number: [0; 16],
    }
    Lower Tester -> IUT: Sres {
        transaction_id: 0,
        authentication_rsp: [0; 4],
    }
    IUT -> Upper Tester: LinkKeyNotification {
        bd_addr: context.peer_address(),
        key_type: KeyType::AuthenticatedP192,
        link_key: [0; 16],
    }
}
+158 −0
Original line number Diff line number Diff line
sequence! { procedure, context,
    Upper Tester ->IUT: ReadLocalOobData {}
    IUT -> Upper Tester: ReadLocalOobDataComplete {
       status: ErrorCode::Success,
        c: [0; 16],
        r: [0; 16],
    }
    // ACL Connection Established
    Upper Tester -> IUT: AuthenticationRequested {
        connection_handle: context.peer_handle()
    }
    IUT -> Upper Tester: AuthenticationRequestedStatus {
       num_hci_command_packets: 1,
       status: ErrorCode::Success,
    }
    IUT -> Upper Tester: LinkKeyRequest {
        bd_addr: context.peer_address(),
    }
    Upper Tester -> IUT: LinkKeyRequestNegativeReply {
        bd_addr: context.peer_address(),
    }
    IUT -> Upper Tester: LinkKeyRequestNegativeReplyComplete {
       num_hci_command_packets: 1,
       status: ErrorCode::Success,
       bd_addr: context.peer_address(),
    }
    IUT -> Upper Tester: IoCapabilityRequest {
        bd_addr: context.peer_address(),
    }
    Upper Tester -> IUT: IoCapabilityRequestReply {
        bd_addr: context.peer_address(),
        io_capability: IoCapability::DisplayYesNo,
        oob_present: OobDataPresent::NotPresent,
        authentication_requirements: AuthenticationRequirements::NoBondingMitmProtection,
    }
    IUT -> Upper Tester: IoCapabilityRequestReplyComplete {
        num_hci_command_packets: 1,
        status: ErrorCode::Success,
        bd_addr: context.peer_address(),
    }
    IUT -> Lower Tester: IoCapabilityReq {
        transaction_id: 0,
        io_capabilities: 0x01,
        oob_authentication_data: 0x00,
        authentication_requirement: 0x01,
    }
    Lower Tester -> IUT: IoCapabilityRes {
        transaction_id: 0,
        io_capabilities: 0x01,
        oob_authentication_data: 0x01,
        authentication_requirement: 0x01,
    }
    IUT -> Upper Tester: IoCapabilityResponse {
        bd_addr: context.peer_address(),
        io_capability: IoCapability::DisplayYesNo,
        oob_data_present: OobDataPresent::P192Present,
        authentication_requirements: AuthenticationRequirements::NoBondingMitmProtection,
    }
    // Public Key Exchange
    IUT -> Lower Tester: EncapsulatedHeader {
        transaction_id: 0,
        major_type: 1,
        minor_type: 1,
        payload_length: 48,
    }
    Lower Tester -> IUT: Accepted {
        transaction_id: 0,
        accepted_opcode: Opcode::EncapsulatedHeader,
    }
    repeat 3 times with (part in local_p192_public_key(&context)) {
        IUT -> Lower Tester: EncapsulatedPayload {
            transaction_id: 0,
            data: part,
        }
        Lower Tester -> IUT: Accepted {
            transaction_id: 0,
            accepted_opcode: Opcode::EncapsulatedPayload,
        }
    }
    Lower Tester -> IUT: EncapsulatedHeader {
        transaction_id: 0,
        major_type: 1,
        minor_type: 1,
        payload_length: 48,
    }
    IUT -> Lower Tester: Accepted {
        transaction_id: 0,
        accepted_opcode: Opcode::EncapsulatedHeader,
    }
    repeat 3 times with (part in peer_p192_public_key()) {
        Lower Tester -> IUT: EncapsulatedPayload {
            transaction_id: 0,
            data: part,
        }
        IUT -> Lower Tester: Accepted {
            transaction_id: 0,
            accepted_opcode: Opcode::EncapsulatedPayload,
        }
    }
    // Authentication Stage 1: OOB Protocol
    IUT -> Lower Tester: SimplePairingNumber {
        transaction_id: 0,
        nonce: [0; 16],
    }
    Lower Tester -> IUT: Accepted {
        transaction_id: 0,
        accepted_opcode: Opcode::SimplePairingNumber,
    }
    Lower Tester -> IUT: SimplePairingNumber {
        transaction_id: 0,
        nonce: [0; 16],
    }
    IUT -> Lower Tester: Accepted {
        transaction_id: 0,
        accepted_opcode: Opcode::SimplePairingNumber,
    }
    // Authentication Stage 2
    IUT -> Lower Tester: DhkeyCheck {
        transaction_id: 0,
        confirmation_value: [0; 16],
    }
    Lower Tester -> IUT: Accepted { transaction_id: 0, accepted_opcode: Opcode::DhkeyCheck }
    Lower Tester -> IUT: DhkeyCheck {
        transaction_id: 0,
        confirmation_value: [0; 16],
    }
    IUT -> Lower Tester: Accepted { transaction_id: 0, accepted_opcode: Opcode::DhkeyCheck }
    IUT -> Upper Tester: SimplePairingComplete {
        status: ErrorCode::Success,
        bd_addr: context.peer_address(),
    }
    // Link Key Calculation
    IUT -> Lower Tester: AuRand {
        transaction_id: 0,
        random_number: [0; 16],
    }
    Lower Tester -> IUT: Sres {
        transaction_id: 0,
        authentication_rsp: [0; 4],
    }
    Lower Tester -> IUT: AuRand {
        transaction_id: 0,
        random_number: [0; 16],
    }
    IUT -> Lower Tester: Sres {
        transaction_id: 0,
        authentication_rsp: [0; 4],
    }
    IUT -> Upper Tester: LinkKeyNotification {
        bd_addr: context.peer_address(),
        key_type: KeyType::AuthenticatedP192,
        link_key: [0; 16],
    }
    IUT -> Upper Tester: AuthenticationComplete {
        status: ErrorCode::Success,
        connection_handle: context.peer_handle(),
    }
}
+136 −0
Original line number Diff line number Diff line
sequence! { procedure, context,
    Upper Tester ->IUT: ReadLocalOobData {}
    IUT -> Upper Tester: ReadLocalOobDataComplete {
       status: ErrorCode::Success,
        c: [0; 16],
        r: [0; 16],
    }
    // ACL Connection Established
    Lower Tester -> IUT: IoCapabilityReq {
        transaction_id: 0,
        io_capabilities: 0x01,
        oob_authentication_data: 0x01,
        authentication_requirement: 0x01,
    }
    IUT -> Upper Tester: IoCapabilityResponse {
        bd_addr: context.peer_address(),
        io_capability: IoCapability::DisplayYesNo,
        oob_data_present: OobDataPresent::P192Present,
        authentication_requirements: AuthenticationRequirements::NoBondingMitmProtection,
    }
    IUT -> Upper Tester: IoCapabilityRequest {
        bd_addr: context.peer_address(),
    }
    Upper Tester -> IUT: IoCapabilityRequestReply {
        bd_addr: context.peer_address(),
        io_capability: IoCapability::DisplayYesNo,
        oob_present: OobDataPresent::NotPresent,
        authentication_requirements: AuthenticationRequirements::NoBondingMitmProtection,
    }
    IUT -> Upper Tester: IoCapabilityRequestReplyComplete {
        num_hci_command_packets: 1,
        status: ErrorCode::Success,
        bd_addr: context.peer_address(),
    }
    IUT -> Lower Tester: IoCapabilityRes {
        transaction_id: 0,
        io_capabilities: 0x01,
        oob_authentication_data: 0x00,
        authentication_requirement: 0x01,
    }
    // Public Key Exchange
    Lower Tester -> IUT: EncapsulatedHeader {
        transaction_id: 0,
        major_type: 1,
        minor_type: 1,
        payload_length: 48,
    }
    IUT -> Lower Tester: Accepted {
        transaction_id: 0,
        accepted_opcode: Opcode::EncapsulatedHeader,
    }
    repeat 3 times with (part in peer_p192_public_key()) {
        Lower Tester -> IUT: EncapsulatedPayload {
            transaction_id: 0,
            data: part,
        }
        IUT -> Lower Tester: Accepted {
            transaction_id: 0,
            accepted_opcode: Opcode::EncapsulatedPayload,
        }
    }
    IUT -> Lower Tester: EncapsulatedHeader {
        transaction_id: 0,
        major_type: 1,
        minor_type: 1,
        payload_length: 48,
    }
    Lower Tester -> IUT: Accepted {
        transaction_id: 0,
        accepted_opcode: Opcode::EncapsulatedHeader,
    }
    repeat 3 times with (part in local_p192_public_key(&context)) {
        IUT -> Lower Tester: EncapsulatedPayload {
            transaction_id: 0,
            data: part,
        }
        Lower Tester -> IUT: Accepted {
            transaction_id: 0,
            accepted_opcode: Opcode::EncapsulatedPayload,
        }
    }
    // Authentication Stage 1: OOB Protocol
    Lower Tester -> IUT: SimplePairingNumber {
        transaction_id: 0,
        nonce: [0; 16],
    }
    IUT -> Lower Tester: Accepted {
        transaction_id: 0,
        accepted_opcode: Opcode::SimplePairingNumber,
    }
    IUT -> Lower Tester: SimplePairingNumber {
        transaction_id: 0,
        nonce: [0; 16],
    }
    Lower Tester -> IUT: Accepted {
        transaction_id: 0,
        accepted_opcode: Opcode::SimplePairingNumber,
    }
    // Authentication Stage 2
    Lower Tester -> IUT: DhkeyCheck {
        transaction_id: 0,
        confirmation_value: [0; 16],
    }
    IUT -> Lower Tester: Accepted { transaction_id: 0, accepted_opcode: Opcode::DhkeyCheck }
    IUT -> Lower Tester: DhkeyCheck {
        transaction_id: 0,
        confirmation_value: [0; 16],
    }
    Lower Tester -> IUT: Accepted { transaction_id: 0, accepted_opcode: Opcode::DhkeyCheck }
    IUT -> Upper Tester: SimplePairingComplete {
        status: ErrorCode::Success,
        bd_addr: context.peer_address(),
    }
    // Link Key Calculation
    Lower Tester -> IUT: AuRand {
        transaction_id: 0,
        random_number: [0; 16],
    }
    IUT -> Lower Tester: Sres {
        transaction_id: 0,
        authentication_rsp: [0; 4],
    }
    IUT -> Lower Tester: AuRand {
        transaction_id: 0,
        random_number: [0; 16],
    }
    Lower Tester -> IUT: Sres {
        transaction_id: 0,
        authentication_rsp: [0; 4],
    }
    IUT -> Upper Tester: LinkKeyNotification {
        bd_addr: context.peer_address(),
        key_type: KeyType::AuthenticatedP192,
        link_key: [0; 16],
    }
}
Loading