Skip to content
This repository was archived by the owner on Apr 26, 2024. It is now read-only.

Commit e0bb268

Browse files
author
David Robertson
authored
Fix typechecker problems exposed by signedjson 1.1.2 (#12326)
1 parent 1f32b90 commit e0bb268

File tree

9 files changed

+38
-25
lines changed

9 files changed

+38
-25
lines changed

changelog.d/12326.misc

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Fix typechecker problems exposed by signedjson 1.1.2.

mypy.ini

+3
Original file line numberDiff line numberDiff line change
@@ -273,6 +273,9 @@ ignore_missing_imports = True
273273
[mypy-ijson.*]
274274
ignore_missing_imports = True
275275

276+
[mypy-importlib_metadata.*]
277+
ignore_missing_imports = True
278+
276279
[mypy-jaeger_client.*]
277280
ignore_missing_imports = True
278281

synapse/config/key.py

+8-5
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
import hashlib
1717
import logging
1818
import os
19-
from typing import Any, Dict, Iterator, List, Optional
19+
from typing import TYPE_CHECKING, Any, Dict, Iterator, List, Optional
2020

2121
import attr
2222
import jsonschema
@@ -38,6 +38,9 @@
3838

3939
from ._base import Config, ConfigError
4040

41+
if TYPE_CHECKING:
42+
from signedjson.key import VerifyKeyWithExpiry
43+
4144
INSECURE_NOTARY_ERROR = """\
4245
Your server is configured to accept key server responses without signature
4346
validation or TLS certificate validation. This is likely to be very insecure. If
@@ -300,16 +303,16 @@ def read_signing_keys(self, signing_key_path: str, name: str) -> List[SigningKey
300303

301304
def read_old_signing_keys(
302305
self, old_signing_keys: Optional[JsonDict]
303-
) -> Dict[str, VerifyKey]:
306+
) -> Dict[str, "VerifyKeyWithExpiry"]:
304307
if old_signing_keys is None:
305308
return {}
306309
keys = {}
307310
for key_id, key_data in old_signing_keys.items():
308311
if is_signing_algorithm_supported(key_id):
309312
key_base64 = key_data["key"]
310313
key_bytes = decode_base64(key_base64)
311-
verify_key = decode_verify_key_bytes(key_id, key_bytes)
312-
verify_key.expired_ts = key_data["expired_ts"]
314+
verify_key: "VerifyKeyWithExpiry" = decode_verify_key_bytes(key_id, key_bytes) # type: ignore[assignment]
315+
verify_key.expired = key_data["expired_ts"]
313316
keys[key_id] = verify_key
314317
else:
315318
raise ConfigError(
@@ -422,7 +425,7 @@ def _parse_key_servers(
422425
server_name = server["server_name"]
423426
result = TrustedKeyServer(server_name=server_name)
424427

425-
verify_keys = server.get("verify_keys")
428+
verify_keys: Optional[Dict[str, str]] = server.get("verify_keys")
426429
if verify_keys is not None:
427430
result.verify_keys = {}
428431
for key_id, key_base64 in verify_keys.items():

synapse/crypto/keyring.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ def __init__(
176176
self._local_verify_keys: Dict[str, FetchKeyResult] = {}
177177
for key_id, key in hs.config.key.old_signing_keys.items():
178178
self._local_verify_keys[key_id] = FetchKeyResult(
179-
verify_key=key, valid_until_ts=key.expired_ts
179+
verify_key=key, valid_until_ts=key.expired
180180
)
181181

182182
vk = get_verify_key(hs.signing_key)

synapse/events/builder.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
from typing import TYPE_CHECKING, Any, Dict, List, Optional, Tuple, Union
1616

1717
import attr
18-
from nacl.signing import SigningKey
18+
from signedjson.types import SigningKey
1919

2020
from synapse.api.constants import MAX_DEPTH
2121
from synapse.api.room_versions import (

synapse/rest/key/v2/local_key_resource.py

+6-6
Original file line numberDiff line numberDiff line change
@@ -76,17 +76,17 @@ def update_response_body(self, time_now_msec: int) -> None:
7676

7777
def response_json_object(self) -> JsonDict:
7878
verify_keys = {}
79-
for key in self.config.key.signing_key:
80-
verify_key_bytes = key.verify_key.encode()
81-
key_id = "%s:%s" % (key.alg, key.version)
79+
for signing_key in self.config.key.signing_key:
80+
verify_key_bytes = signing_key.verify_key.encode()
81+
key_id = "%s:%s" % (signing_key.alg, signing_key.version)
8282
verify_keys[key_id] = {"key": encode_base64(verify_key_bytes)}
8383

8484
old_verify_keys = {}
85-
for key_id, key in self.config.key.old_signing_keys.items():
86-
verify_key_bytes = key.encode()
85+
for key_id, old_signing_key in self.config.key.old_signing_keys.items():
86+
verify_key_bytes = old_signing_key.encode()
8787
old_verify_keys[key_id] = {
8888
"key": encode_base64(verify_key_bytes),
89-
"expired_ts": key.expired_ts,
89+
"expired_ts": old_signing_key.expired,
9090
}
9191

9292
json_object = {

synapse/rest/key/v2/remote_key_resource.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
# limitations under the License.
1414

1515
import logging
16-
from typing import TYPE_CHECKING, Dict
16+
from typing import TYPE_CHECKING, Dict, Set
1717

1818
from signedjson.sign import sign_json
1919

@@ -149,7 +149,7 @@ async def query_keys(
149149

150150
cached = await self.store.get_server_keys_json(store_queries)
151151

152-
json_results = set()
152+
json_results: Set[bytes] = set()
153153

154154
time_now_ms = self.clock.time_msec()
155155

@@ -234,8 +234,8 @@ async def query_keys(
234234
await self.query_keys(request, query, query_remote_on_cache_miss=False)
235235
else:
236236
signed_keys = []
237-
for key_json in json_results:
238-
key_json = json_decoder.decode(key_json.decode("utf-8"))
237+
for key_json_raw in json_results:
238+
key_json = json_decoder.decode(key_json_raw.decode("utf-8"))
239239
for signing_key in self.config.key.key_server_signing_keys:
240240
key_json = sign_json(
241241
key_json, self.config.server.server_name, signing_key

tests/crypto/test_event_signing.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@
2828
SIGNING_KEY_SEED = decode_base64("YJDBA9Xnr2sVqXD9Vj7XVUnmFZcZrlw8Md7kMW+3XA1")
2929

3030
KEY_ALG = "ed25519"
31-
KEY_VER = 1
32-
KEY_NAME = "%s:%d" % (KEY_ALG, KEY_VER)
31+
KEY_VER = "1"
32+
KEY_NAME = "%s:%s" % (KEY_ALG, KEY_VER)
3333

3434
HOSTNAME = "domain"
3535

@@ -39,7 +39,7 @@ def setUp(self):
3939
# NB: `signedjson` expects `nacl.signing.SigningKey` instances which have been
4040
# monkeypatched to include new `alg` and `version` attributes. This is captured
4141
# by the `signedjson.types.SigningKey` protocol.
42-
self.signing_key: signedjson.types.SigningKey = nacl.signing.SigningKey(
42+
self.signing_key: signedjson.types.SigningKey = nacl.signing.SigningKey( # type: ignore[assignment]
4343
SIGNING_KEY_SEED
4444
)
4545
self.signing_key.alg = KEY_ALG

tests/rest/key/v2/test_remote_key_resource.py

+11-5
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ async def get_json(
7676
"verify_keys": {
7777
key_id: {
7878
"key": signedjson.key.encode_verify_key_base64(
79-
signing_key.verify_key
79+
signedjson.key.get_verify_key(signing_key)
8080
)
8181
}
8282
},
@@ -175,7 +175,7 @@ def prepare(self, reactor: MemoryReactor, clock: Clock, hs: HomeServer) -> None:
175175
% (
176176
self.hs_signing_key.version,
177177
): signedjson.key.encode_verify_key_base64(
178-
self.hs_signing_key.verify_key
178+
signedjson.key.get_verify_key(self.hs_signing_key)
179179
)
180180
},
181181
}
@@ -229,7 +229,9 @@ def test_get_key(self) -> None:
229229
assert isinstance(keyres, FetchKeyResult)
230230
self.assertEqual(
231231
signedjson.key.encode_verify_key_base64(keyres.verify_key),
232-
signedjson.key.encode_verify_key_base64(testkey.verify_key),
232+
signedjson.key.encode_verify_key_base64(
233+
signedjson.key.get_verify_key(testkey)
234+
),
233235
)
234236

235237
def test_get_notary_key(self) -> None:
@@ -251,7 +253,9 @@ def test_get_notary_key(self) -> None:
251253
assert isinstance(keyres, FetchKeyResult)
252254
self.assertEqual(
253255
signedjson.key.encode_verify_key_base64(keyres.verify_key),
254-
signedjson.key.encode_verify_key_base64(testkey.verify_key),
256+
signedjson.key.encode_verify_key_base64(
257+
signedjson.key.get_verify_key(testkey)
258+
),
255259
)
256260

257261
def test_get_notary_keyserver_key(self) -> None:
@@ -268,5 +272,7 @@ def test_get_notary_keyserver_key(self) -> None:
268272
assert isinstance(keyres, FetchKeyResult)
269273
self.assertEqual(
270274
signedjson.key.encode_verify_key_base64(keyres.verify_key),
271-
signedjson.key.encode_verify_key_base64(self.hs_signing_key.verify_key),
275+
signedjson.key.encode_verify_key_base64(
276+
signedjson.key.get_verify_key(self.hs_signing_key)
277+
),
272278
)

0 commit comments

Comments
 (0)