コード例 #1
0
    def test_partial_key_backup_verification_success(self):
        """
        Test for the happy path of the verification process where each key is successfully verified and no bad actors.
        """
        # Arrange
        mediator = KeyCeremonyMediator("mediator_verification",
                                       CEREMONY_DETAILS)
        KeyCeremonyHelper.perform_round_1(GUARDIANS, mediator)
        KeyCeremonyHelper.perform_round_2(GUARDIANS, mediator)

        # Round 3 - Guardians only
        verification1 = GUARDIAN_1.verify_election_partial_key_backup(
            GUARDIAN_2_ID, identity_auxiliary_decrypt)
        verification2 = GUARDIAN_2.verify_election_partial_key_backup(
            GUARDIAN_1_ID, identity_auxiliary_decrypt)

        # Act
        mediator.receive_backup_verifications([verification1])

        # Assert
        self.assertFalse(mediator.get_verification_state().all_sent)
        self.assertFalse(mediator.all_backups_verified())
        self.assertIsNone(mediator.publish_joint_key())

        # Act
        mediator.receive_backup_verifications([verification2])
        joint_key = mediator.publish_joint_key()

        # Assert
        self.assertTrue(mediator.get_verification_state().all_sent)
        self.assertTrue(mediator.all_backups_verified())
        self.assertIsNotNone(joint_key)
コード例 #2
0
    def test_partial_key_backup_verification_failure(self):
        """
        In this case, the recipient guardian does not correctly verify the sent key backup.
        This failed verificaton requires the sender create a challenge and a new verifier
        aka another guardian must verify this challenge.
        """
        # Arrange
        mediator = KeyCeremonyMediator("mediator_challenge", CEREMONY_DETAILS)
        KeyCeremonyHelper.perform_round_1(GUARDIANS, mediator)
        KeyCeremonyHelper.perform_round_2(GUARDIANS, mediator)

        # Round 3 - Guardians only
        verification1 = GUARDIAN_1.verify_election_partial_key_backup(
            GUARDIAN_2_ID, identity_auxiliary_decrypt)

        # Act
        failed_verification2 = ElectionPartialKeyVerification(
            GUARDIAN_1_ID,
            GUARDIAN_2_ID,
            GUARDIAN_2_ID,
            False,
        )
        mediator.receive_backup_verifications(
            [verification1, failed_verification2])

        state = mediator.get_verification_state()

        # Assert
        self.assertTrue(state.all_sent)
        self.assertFalse(state.all_verified)
        self.assertIsNone(mediator.publish_joint_key())
        self.assertEqual(len(state.failed_verifications), 1)
        self.assertEqual(state.failed_verifications[0],
                         GuardianPair(GUARDIAN_1_ID, GUARDIAN_2_ID))

        # Act
        challenge = GUARDIAN_1.publish_election_backup_challenge(GUARDIAN_2_ID)
        mediator.verify_challenge(challenge)
        new_state = mediator.get_verification_state()
        all_verified = mediator.all_backups_verified()
        joint_key = mediator.publish_joint_key()

        # Assert
        self.assertTrue(new_state.all_sent)
        self.assertTrue(new_state.all_verified)
        self.assertEqual(len(new_state.failed_verifications), 0)
        self.assertTrue(all_verified)
        self.assertIsNotNone(joint_key)