Exemplo n.º 1
0
    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)
Exemplo n.º 2
0
    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)
Exemplo n.º 3
0
    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)
Exemplo n.º 4
0
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
Exemplo n.º 5
0
    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)
Exemplo n.º 6
0
    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
Exemplo n.º 7
0
    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
Exemplo n.º 8
0
 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)