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)
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)