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