Ejemplo n.º 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(CEREMONY_DETAILS)
        mediator.confirm_presence_of_guardian(GUARDIAN_1.share_public_keys())
        mediator.confirm_presence_of_guardian(GUARDIAN_2.share_public_keys())
        mediator.receive_election_partial_key_backup(
            GUARDIAN_1.share_election_partial_key_backup(GUARDIAN_2_ID))
        mediator.receive_election_partial_key_backup(
            GUARDIAN_2.share_election_partial_key_backup(GUARDIAN_1_ID))
        GUARDIAN_1.save_election_partial_key_backup(
            mediator.share_election_partial_key_backups_to_guardian(
                GUARDIAN_1_ID)[0])
        GUARDIAN_2.save_election_partial_key_backup(
            mediator.share_election_partial_key_backups_to_guardian(
                GUARDIAN_2_ID)[0])
        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_election_partial_key_verification(verification1)

        # Assert
        self.assertFalse(
            mediator.all_election_partial_key_verifications_received())
        self.assertFalse(mediator.all_election_partial_key_backups_verified())
        self.assertIsNone(mediator.publish_joint_key())

        # Act
        mediator.receive_election_partial_key_verification(verification2)
        joint_key = mediator.publish_joint_key()

        # Assert
        self.assertTrue(
            mediator.all_election_partial_key_verifications_received())
        self.assertTrue(mediator.all_election_partial_key_backups_verified())
        self.assertIsNotNone(joint_key)
Ejemplo n.º 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(CEREMONY_DETAILS)
        mediator.confirm_presence_of_guardian(GUARDIAN_1.share_public_keys())
        mediator.confirm_presence_of_guardian(GUARDIAN_2.share_public_keys())
        mediator.receive_election_partial_key_backup(
            GUARDIAN_1.share_election_partial_key_backup(GUARDIAN_2_ID))
        mediator.receive_election_partial_key_backup(
            GUARDIAN_2.share_election_partial_key_backup(GUARDIAN_1_ID))
        GUARDIAN_1.save_election_partial_key_backup(
            mediator.share_election_partial_key_backups_to_guardian(
                GUARDIAN_1_ID)[0])
        GUARDIAN_2.save_election_partial_key_backup(
            mediator.share_election_partial_key_backups_to_guardian(
                GUARDIAN_2_ID)[0])
        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
        failed_verification2 = ElectionPartialKeyVerification(
            verification2.owner_id,
            verification2.designated_id,
            verification2.verifier_id,
            False,
        )
        mediator.receive_election_partial_key_verification(verification1)
        mediator.receive_election_partial_key_verification(
            failed_verification2)
        failed_pairs = mediator.share_failed_partial_key_verifications()
        missing_challenges = mediator.share_missing_election_partial_key_challenges(
        )

        # Assert
        self.assertTrue(
            mediator.all_election_partial_key_verifications_received())
        self.assertFalse(mediator.all_election_partial_key_backups_verified())
        self.assertIsNone(mediator.publish_joint_key())
        self.assertEqual(len(failed_pairs), 1)
        self.assertEqual(failed_pairs[0],
                         GuardianPair(GUARDIAN_1_ID, GUARDIAN_2_ID))
        self.assertEqual(len(missing_challenges), 1)
        self.assertEqual(missing_challenges[0],
                         GuardianPair(GUARDIAN_1_ID, GUARDIAN_2_ID))

        # Act
        challenge = GUARDIAN_1.publish_election_backup_challenge(GUARDIAN_2_ID)
        mediator.receive_election_partial_key_challenge(challenge)
        no_missing_challenges = mediator.share_missing_election_partial_key_challenges(
        )

        # Assert
        self.assertFalse(mediator.all_election_partial_key_backups_verified())
        self.assertEqual(len(no_missing_challenges), 0)

        # Act
        challenges = mediator.share_open_election_partial_key_challenges()
        challenge_verification = VERIFIER.verify_election_partial_key_challenge(
            challenges[0])
        mediator.receive_election_partial_key_verification(
            challenge_verification)
        joint_key = mediator.publish_joint_key()

        # Assert
        self.assertEqual(len(challenges), 1)
        self.assertTrue(mediator.all_election_partial_key_backups_verified())
        self.assertIsNotNone(joint_key)