def test_valid_signature(self, message): alice = Account() signature = alice.sign(message) signing_key = alice.identity_keys["ed25519"] assert signature assert signing_key ed25519_verify(signing_key, message, signature)
def test_valid_signature(self): message = "It's a secret to everybody" alice = Account() signature = alice.sign(message) signing_key = alice.identity_keys["ed25519"] assert signature assert signing_key ed25519_verify(signing_key, message, signature)
def test_invalid_signature(self, message): alice = Account() bob = Account() signature = alice.sign(message) signing_key = bob.identity_keys["ed25519"] assert signature assert signing_key with pytest.raises(OlmVerifyError): ed25519_verify(signing_key, message, signature)
def verify_signature_json(data: 'SignedObject', user_id: UserID, device_id: DeviceID, key: SigningKey) -> bool: data_copy = {**data} data_copy.pop("unsigned", None) signatures = data_copy.pop("signatures") signature = signatures[user_id][f"{EncryptionKeyAlgorithm.ED25519}:{device_id}"] signed_data = canonical_json(data_copy) try: olm.ed25519_verify(key, signed_data, signature) return True except olm.OlmVerifyError: return False
def test_twice_signature_verification(self): alice = Account() message = b"Test" signature = alice.sign(message) signing_key = alice.identity_keys["ed25519"] assert signature assert signing_key ed25519_verify(signing_key, message, signature) assert signature == alice.sign(message) ed25519_verify(signing_key, message, signature)
def verify_json(self, json, user_key, user_id, device_id): """Verifies a signed key object's signature. The object must have a 'signatures' key associated with an object of the form `user_id: {key_id: signature}`. Args: json (dict): The JSON object to verify. user_key (str): The public ed25519 key which was used to sign the object. user_id (str): The user who owns the device. device_id (str): The device who owns the key. Returns: True if the verification was successful, False if not. """ try: signatures = json.pop('signatures') except KeyError: return False key_id = 'ed25519:{}'.format(device_id) try: signature_base64 = signatures[user_id][key_id] except KeyError: json['signatures'] = signatures return False unsigned = json.pop('unsigned', None) try: olm.ed25519_verify(user_key, encode_canonical_json(json), signature_base64) success = True except olm.utility.OlmVerifyError: success = False json['signatures'] = signatures if unsigned: json['unsigned'] = unsigned return success
def _verify_signed_dict( dct: Dict[str, Any], signer_user_id: UserId, signer_device_id: str, signer_ed25519: str, ) -> Dict[str, Any]: dct = {k: v for k, v in dct.items() if k != "unsigned"} key_id = f"ed25519:{signer_device_id}" try: signature = dct.pop("signatures")[signer_user_id][key_id] except KeyError as e: raise err.SignedDictMissingKey(e.args[0]) try: olm.ed25519_verify( signer_ed25519, E2E._canonical_json(dct), signature, ) except olm.OlmVerifyError as e: raise err.SignedDictVerificationError(e.args[0]) return dct
def test_signing(self): seed = PkSigning.generate_seed() signing = PkSigning(seed) message = "This statement is true" signature = signing.sign(message) ed25519_verify(signing.public_key, message, signature)