Skip to content

Commit 71f4fae

Browse files
committed
Switch to pycryptodome for ed25519 verification
1 parent ec318c0 commit 71f4fae

File tree

1 file changed

+9
-7
lines changed

1 file changed

+9
-7
lines changed

mautrix/crypto/signature.py

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import functools
88
import json
99

10-
import olm
10+
import unpaddedbase64
1111

1212
from mautrix.types import DeviceID, EncryptionKeyAlgorithm, KeyID, SigningKey, UserID
1313

@@ -37,11 +37,13 @@ def verify_signature_json(
3737
key_id = str(KeyID(EncryptionKeyAlgorithm.ED25519, key_name))
3838
try:
3939
signature = signatures[user_id][key_id]
40-
except KeyError:
41-
return False
42-
signed_data = canonical_json(data_copy)
43-
try:
44-
olm.ed25519_verify(key, signed_data, signature)
40+
decoded_key = unpaddedbase64.decode_base64(key)
41+
# pycryptodome doesn't accept raw keys, so wrap it in a DER structure
42+
der_key = b"\x30\x2a\x30\x05\x06\x03\x2b\x65\x70\x03\x21\x00" + decoded_key
43+
decoded_signature = unpaddedbase64.decode_base64(signature)
44+
parsed_key = ECC.import_key(der_key)
45+
verifier = eddsa.new(parsed_key, "rfc8032")
46+
verifier.verify(canonical_json(data_copy).encode("utf-8"), decoded_signature)
4547
return True
46-
except olm.OlmVerifyError:
48+
except (KeyError, ValueError):
4749
return False

0 commit comments

Comments
 (0)