Loading tools/rootcanal/lmp/lmp_packets.pdl +2 −2 Original line number Diff line number Diff line Loading @@ -82,7 +82,7 @@ enum ExtendedOpcode : 8 { RESUME_ENCRYPTION_REQ = 24, IO_CAPABILITY_REQ = 25, IO_CAPABILITY_RES = 26, NUMERIC_COMPARAISON_FAILED = 27, NUMERIC_COMPARISON_FAILED = 27, PASSKEY_FAILED = 28, OOB_FAILED = 29, KEYPRESS_NOTIFICATION = 30, Loading Loading @@ -168,7 +168,7 @@ packet Sres : Packet(opcode = SRES) { authentication_rsp: 8[4], } packet NumericComparaisonFailed: ExtendedPacket(extended_opcode = NUMERIC_COMPARAISON_FAILED) {} packet NumericComparisonFailed: ExtendedPacket(extended_opcode = NUMERIC_COMPARISON_FAILED) {} packet PasskeyFailed: ExtendedPacket(extended_opcode = PASSKEY_FAILED) {} Loading tools/rootcanal/lmp/src/procedure/secure_simple_pairing.rs +22 −22 Original line number Diff line number Diff line Loading @@ -24,8 +24,8 @@ fn has_mitm(requirements: hci::AuthenticationRequirements) -> bool { enum AuthenticationMethod { OutOfBand, NumericComparaisonJustWork, NumericComparaisonUserConfirm, NumericComparisonJustWork, NumericComparisonUserConfirm, PasskeyEntry, } Loading @@ -49,16 +49,16 @@ fn authentication_method( } else if !has_mitm(initiator.authentication_requirements) && !has_mitm(responder.authentication_requirements) { AuthenticationMethod::NumericComparaisonJustWork AuthenticationMethod::NumericComparisonJustWork } else if (initiator.io_capability == KeyboardOnly && responder.io_capability != NoInputNoOutput) || (responder.io_capability == KeyboardOnly && initiator.io_capability != NoInputNoOutput) { AuthenticationMethod::PasskeyEntry } else if initiator.io_capability == DisplayYesNo && responder.io_capability == DisplayYesNo { AuthenticationMethod::NumericComparaisonUserConfirm AuthenticationMethod::NumericComparisonUserConfirm } else { AuthenticationMethod::NumericComparaisonJustWork AuthenticationMethod::NumericComparisonJustWork } } Loading @@ -68,14 +68,14 @@ fn link_key_type(auth_method: AuthenticationMethod, dh_key: DhKey) -> hci::KeyTy use AuthenticationMethod::*; match (dh_key, auth_method) { (DhKey::P256(_), OutOfBand | PasskeyEntry | NumericComparaisonUserConfirm) => { (DhKey::P256(_), OutOfBand | PasskeyEntry | NumericComparisonUserConfirm) => { AuthenticatedP256 } (DhKey::P192(_), OutOfBand | PasskeyEntry | NumericComparaisonUserConfirm) => { (DhKey::P192(_), OutOfBand | PasskeyEntry | NumericComparisonUserConfirm) => { AuthenticatedP192 } (DhKey::P256(_), NumericComparaisonJustWork) => UnauthenticatedP256, (DhKey::P192(_), NumericComparaisonJustWork) => UnauthenticatedP192, (DhKey::P256(_), NumericComparisonJustWork) => UnauthenticatedP256, (DhKey::P192(_), NumericComparisonJustWork) => UnauthenticatedP192, } } Loading Loading @@ -427,8 +427,8 @@ pub async fn initiate(ctx: &impl Context) -> Result<(), ()> { let auth_method = authentication_method(initiator, responder); let result: Result<(), ()> = async { match auth_method { AuthenticationMethod::NumericComparaisonJustWork | AuthenticationMethod::NumericComparaisonUserConfirm => { AuthenticationMethod::NumericComparisonJustWork | AuthenticationMethod::NumericComparisonUserConfirm => { send_commitment(ctx, true).await; user_confirmation_request(ctx).await?; Loading Loading @@ -464,7 +464,7 @@ pub async fn initiate(ctx: &impl Context) -> Result<(), ()> { .await; if result.is_err() { ctx.send_lmp_packet(lmp::NumericComparaisonFailedBuilder { transaction_id: 0 }.build()); ctx.send_lmp_packet(lmp::NumericComparisonFailedBuilder { transaction_id: 0 }.build()); ctx.send_hci_event( hci::SimplePairingCompleteBuilder { status: hci::ErrorCode::AuthenticationFailure, Loading Loading @@ -638,8 +638,8 @@ pub async fn respond(ctx: &impl Context, request: lmp::IoCapabilityReqPacket) -> // Authentication Stage 1 let auth_method = authentication_method(initiator, responder); let negative_user_confirmation = match auth_method { AuthenticationMethod::NumericComparaisonJustWork | AuthenticationMethod::NumericComparaisonUserConfirm => { AuthenticationMethod::NumericComparisonJustWork | AuthenticationMethod::NumericComparisonUserConfirm => { receive_commitment(ctx, true).await; let user_confirmation = user_confirmation_request(ctx).await; Loading Loading @@ -672,11 +672,11 @@ pub async fn respond(ctx: &impl Context, request: lmp::IoCapabilityReqPacket) -> }; let _dhkey = match ctx .receive_lmp_packet::<Either<lmp::NumericComparaisonFailedPacket, lmp::DhkeyCheckPacket>>() .receive_lmp_packet::<Either<lmp::NumericComparisonFailedPacket, lmp::DhkeyCheckPacket>>() .await { Either::Left(_) => { // Numeric comparaison failed // Numeric comparison failed ctx.send_hci_event( hci::SimplePairingCompleteBuilder { status: hci::ErrorCode::AuthenticationFailure, Loading Loading @@ -798,7 +798,7 @@ mod tests { } #[test] fn numeric_comparaison_initiator_success() { fn numeric_comparison_initiator_success() { let context = TestContext::new(); let procedure = initiate; Loading @@ -806,7 +806,7 @@ mod tests { } #[test] fn numeric_comparaison_responder_success() { fn numeric_comparison_responder_success() { let context = TestContext::new(); let procedure = respond; Loading @@ -814,7 +814,7 @@ mod tests { } #[test] fn numeric_comparaison_initiator_failure_on_initiating_side() { fn numeric_comparison_initiator_failure_on_initiating_side() { let context = TestContext::new(); let procedure = initiate; Loading @@ -822,7 +822,7 @@ mod tests { } #[test] fn numeric_comparaison_responder_failure_on_initiating_side() { fn numeric_comparison_responder_failure_on_initiating_side() { let context = TestContext::new(); let procedure = respond; Loading @@ -830,7 +830,7 @@ mod tests { } #[test] fn numeric_comparaison_initiator_failure_on_responding_side() { fn numeric_comparison_initiator_failure_on_responding_side() { let context = TestContext::new(); let procedure = initiate; Loading @@ -838,7 +838,7 @@ mod tests { } #[test] fn numeric_comparaison_responder_failure_on_responding_side() { fn numeric_comparison_responder_failure_on_responding_side() { let context = TestContext::new(); let procedure = respond; Loading tools/rootcanal/lmp/test/SP/BV-06-C.in +1 −1 Original line number Diff line number Diff line Loading @@ -91,7 +91,7 @@ sequence! { procedure, context, accepted_opcode: Opcode::EncapsulatedPayload, } } // Authentication Stage 1: Numeric Comparaison Protocol // Authentication Stage 1: Numeric Comparison Protocol Lower Tester -> IUT: SimplePairingConfirm { transaction_id: 0, commitment_value: [0; 16], Loading tools/rootcanal/lmp/test/SP/BV-07-C.in +1 −1 Original line number Diff line number Diff line Loading @@ -73,7 +73,7 @@ sequence! { procedure, context, accepted_opcode: Opcode::EncapsulatedPayload, } } // Authentication Stage 1: Numeric Comparaison Protocol // Authentication Stage 1: Numeric Comparison Protocol IUT -> Lower Tester: SimplePairingConfirm { transaction_id: 0, commitment_value: [0; 16], Loading tools/rootcanal/lmp/test/SP/BV-08-C.in +2 −2 Original line number Diff line number Diff line Loading @@ -91,7 +91,7 @@ sequence! { procedure, context, accepted_opcode: Opcode::EncapsulatedPayload, } } // Authentication Stage 1: Numeric Comparaison Protocol // Authentication Stage 1: Numeric Comparison Protocol Lower Tester -> IUT: SimplePairingConfirm { transaction_id: 0, commitment_value: [0; 16], Loading Loading @@ -119,7 +119,7 @@ sequence! { procedure, context, status: ErrorCode::Success, bd_addr: context.peer_address(), } IUT -> Lower Tester: NumericComparaisonFailed { IUT -> Lower Tester: NumericComparisonFailed { transaction_id: 0, } IUT -> Upper Tester: SimplePairingComplete { Loading Loading
tools/rootcanal/lmp/lmp_packets.pdl +2 −2 Original line number Diff line number Diff line Loading @@ -82,7 +82,7 @@ enum ExtendedOpcode : 8 { RESUME_ENCRYPTION_REQ = 24, IO_CAPABILITY_REQ = 25, IO_CAPABILITY_RES = 26, NUMERIC_COMPARAISON_FAILED = 27, NUMERIC_COMPARISON_FAILED = 27, PASSKEY_FAILED = 28, OOB_FAILED = 29, KEYPRESS_NOTIFICATION = 30, Loading Loading @@ -168,7 +168,7 @@ packet Sres : Packet(opcode = SRES) { authentication_rsp: 8[4], } packet NumericComparaisonFailed: ExtendedPacket(extended_opcode = NUMERIC_COMPARAISON_FAILED) {} packet NumericComparisonFailed: ExtendedPacket(extended_opcode = NUMERIC_COMPARISON_FAILED) {} packet PasskeyFailed: ExtendedPacket(extended_opcode = PASSKEY_FAILED) {} Loading
tools/rootcanal/lmp/src/procedure/secure_simple_pairing.rs +22 −22 Original line number Diff line number Diff line Loading @@ -24,8 +24,8 @@ fn has_mitm(requirements: hci::AuthenticationRequirements) -> bool { enum AuthenticationMethod { OutOfBand, NumericComparaisonJustWork, NumericComparaisonUserConfirm, NumericComparisonJustWork, NumericComparisonUserConfirm, PasskeyEntry, } Loading @@ -49,16 +49,16 @@ fn authentication_method( } else if !has_mitm(initiator.authentication_requirements) && !has_mitm(responder.authentication_requirements) { AuthenticationMethod::NumericComparaisonJustWork AuthenticationMethod::NumericComparisonJustWork } else if (initiator.io_capability == KeyboardOnly && responder.io_capability != NoInputNoOutput) || (responder.io_capability == KeyboardOnly && initiator.io_capability != NoInputNoOutput) { AuthenticationMethod::PasskeyEntry } else if initiator.io_capability == DisplayYesNo && responder.io_capability == DisplayYesNo { AuthenticationMethod::NumericComparaisonUserConfirm AuthenticationMethod::NumericComparisonUserConfirm } else { AuthenticationMethod::NumericComparaisonJustWork AuthenticationMethod::NumericComparisonJustWork } } Loading @@ -68,14 +68,14 @@ fn link_key_type(auth_method: AuthenticationMethod, dh_key: DhKey) -> hci::KeyTy use AuthenticationMethod::*; match (dh_key, auth_method) { (DhKey::P256(_), OutOfBand | PasskeyEntry | NumericComparaisonUserConfirm) => { (DhKey::P256(_), OutOfBand | PasskeyEntry | NumericComparisonUserConfirm) => { AuthenticatedP256 } (DhKey::P192(_), OutOfBand | PasskeyEntry | NumericComparaisonUserConfirm) => { (DhKey::P192(_), OutOfBand | PasskeyEntry | NumericComparisonUserConfirm) => { AuthenticatedP192 } (DhKey::P256(_), NumericComparaisonJustWork) => UnauthenticatedP256, (DhKey::P192(_), NumericComparaisonJustWork) => UnauthenticatedP192, (DhKey::P256(_), NumericComparisonJustWork) => UnauthenticatedP256, (DhKey::P192(_), NumericComparisonJustWork) => UnauthenticatedP192, } } Loading Loading @@ -427,8 +427,8 @@ pub async fn initiate(ctx: &impl Context) -> Result<(), ()> { let auth_method = authentication_method(initiator, responder); let result: Result<(), ()> = async { match auth_method { AuthenticationMethod::NumericComparaisonJustWork | AuthenticationMethod::NumericComparaisonUserConfirm => { AuthenticationMethod::NumericComparisonJustWork | AuthenticationMethod::NumericComparisonUserConfirm => { send_commitment(ctx, true).await; user_confirmation_request(ctx).await?; Loading Loading @@ -464,7 +464,7 @@ pub async fn initiate(ctx: &impl Context) -> Result<(), ()> { .await; if result.is_err() { ctx.send_lmp_packet(lmp::NumericComparaisonFailedBuilder { transaction_id: 0 }.build()); ctx.send_lmp_packet(lmp::NumericComparisonFailedBuilder { transaction_id: 0 }.build()); ctx.send_hci_event( hci::SimplePairingCompleteBuilder { status: hci::ErrorCode::AuthenticationFailure, Loading Loading @@ -638,8 +638,8 @@ pub async fn respond(ctx: &impl Context, request: lmp::IoCapabilityReqPacket) -> // Authentication Stage 1 let auth_method = authentication_method(initiator, responder); let negative_user_confirmation = match auth_method { AuthenticationMethod::NumericComparaisonJustWork | AuthenticationMethod::NumericComparaisonUserConfirm => { AuthenticationMethod::NumericComparisonJustWork | AuthenticationMethod::NumericComparisonUserConfirm => { receive_commitment(ctx, true).await; let user_confirmation = user_confirmation_request(ctx).await; Loading Loading @@ -672,11 +672,11 @@ pub async fn respond(ctx: &impl Context, request: lmp::IoCapabilityReqPacket) -> }; let _dhkey = match ctx .receive_lmp_packet::<Either<lmp::NumericComparaisonFailedPacket, lmp::DhkeyCheckPacket>>() .receive_lmp_packet::<Either<lmp::NumericComparisonFailedPacket, lmp::DhkeyCheckPacket>>() .await { Either::Left(_) => { // Numeric comparaison failed // Numeric comparison failed ctx.send_hci_event( hci::SimplePairingCompleteBuilder { status: hci::ErrorCode::AuthenticationFailure, Loading Loading @@ -798,7 +798,7 @@ mod tests { } #[test] fn numeric_comparaison_initiator_success() { fn numeric_comparison_initiator_success() { let context = TestContext::new(); let procedure = initiate; Loading @@ -806,7 +806,7 @@ mod tests { } #[test] fn numeric_comparaison_responder_success() { fn numeric_comparison_responder_success() { let context = TestContext::new(); let procedure = respond; Loading @@ -814,7 +814,7 @@ mod tests { } #[test] fn numeric_comparaison_initiator_failure_on_initiating_side() { fn numeric_comparison_initiator_failure_on_initiating_side() { let context = TestContext::new(); let procedure = initiate; Loading @@ -822,7 +822,7 @@ mod tests { } #[test] fn numeric_comparaison_responder_failure_on_initiating_side() { fn numeric_comparison_responder_failure_on_initiating_side() { let context = TestContext::new(); let procedure = respond; Loading @@ -830,7 +830,7 @@ mod tests { } #[test] fn numeric_comparaison_initiator_failure_on_responding_side() { fn numeric_comparison_initiator_failure_on_responding_side() { let context = TestContext::new(); let procedure = initiate; Loading @@ -838,7 +838,7 @@ mod tests { } #[test] fn numeric_comparaison_responder_failure_on_responding_side() { fn numeric_comparison_responder_failure_on_responding_side() { let context = TestContext::new(); let procedure = respond; Loading
tools/rootcanal/lmp/test/SP/BV-06-C.in +1 −1 Original line number Diff line number Diff line Loading @@ -91,7 +91,7 @@ sequence! { procedure, context, accepted_opcode: Opcode::EncapsulatedPayload, } } // Authentication Stage 1: Numeric Comparaison Protocol // Authentication Stage 1: Numeric Comparison Protocol Lower Tester -> IUT: SimplePairingConfirm { transaction_id: 0, commitment_value: [0; 16], Loading
tools/rootcanal/lmp/test/SP/BV-07-C.in +1 −1 Original line number Diff line number Diff line Loading @@ -73,7 +73,7 @@ sequence! { procedure, context, accepted_opcode: Opcode::EncapsulatedPayload, } } // Authentication Stage 1: Numeric Comparaison Protocol // Authentication Stage 1: Numeric Comparison Protocol IUT -> Lower Tester: SimplePairingConfirm { transaction_id: 0, commitment_value: [0; 16], Loading
tools/rootcanal/lmp/test/SP/BV-08-C.in +2 −2 Original line number Diff line number Diff line Loading @@ -91,7 +91,7 @@ sequence! { procedure, context, accepted_opcode: Opcode::EncapsulatedPayload, } } // Authentication Stage 1: Numeric Comparaison Protocol // Authentication Stage 1: Numeric Comparison Protocol Lower Tester -> IUT: SimplePairingConfirm { transaction_id: 0, commitment_value: [0; 16], Loading Loading @@ -119,7 +119,7 @@ sequence! { procedure, context, status: ErrorCode::Success, bd_addr: context.peer_address(), } IUT -> Lower Tester: NumericComparaisonFailed { IUT -> Lower Tester: NumericComparisonFailed { transaction_id: 0, } IUT -> Upper Tester: SimplePairingComplete { Loading