16
16
import hashlib
17
17
import logging
18
18
import os
19
- from typing import Any , Dict
19
+ from typing import Any , Dict , Iterator , List , Optional
20
20
21
21
import attr
22
22
import jsonschema
23
23
from signedjson .key import (
24
24
NACL_ED25519 ,
25
+ SigningKey ,
26
+ VerifyKey ,
25
27
decode_signing_key_base64 ,
26
28
decode_verify_key_bytes ,
27
29
generate_signing_key ,
31
33
)
32
34
from unpaddedbase64 import decode_base64
33
35
36
+ from synapse .types import JsonDict
34
37
from synapse .util .stringutils import random_string , random_string_with_symbols
35
38
36
39
from ._base import Config , ConfigError
81
84
logger = logging .getLogger (__name__ )
82
85
83
86
84
- @attr .s
87
+ @attr .s ( slots = True , auto_attribs = True )
85
88
class TrustedKeyServer :
86
- # string: name of the server.
87
- server_name = attr . ib ()
89
+ # name of the server.
90
+ server_name : str
88
91
89
- # dict[str,VerifyKey]|None: map from key id to key object, or None to disable
90
- # signature verification.
91
- verify_keys = attr .ib (default = None )
92
+ # map from key id to key object, or None to disable signature verification.
93
+ verify_keys : Optional [Dict [str , VerifyKey ]] = None
92
94
93
95
94
96
class KeyConfig (Config ):
@@ -279,15 +281,15 @@ def generate_config_section(
279
281
% locals ()
280
282
)
281
283
282
- def read_signing_keys (self , signing_key_path , name ) :
284
+ def read_signing_keys (self , signing_key_path : str , name : str ) -> List [ SigningKey ] :
283
285
"""Read the signing keys in the given path.
284
286
285
287
Args:
286
- signing_key_path (str)
287
- name (str) : Associated config key name
288
+ signing_key_path
289
+ name: Associated config key name
288
290
289
291
Returns:
290
- list[SigningKey]
292
+ The signing keys read from the given path.
291
293
"""
292
294
293
295
signing_keys = self .read_file (signing_key_path , name )
@@ -296,7 +298,9 @@ def read_signing_keys(self, signing_key_path, name):
296
298
except Exception as e :
297
299
raise ConfigError ("Error reading %s: %s" % (name , str (e )))
298
300
299
- def read_old_signing_keys (self , old_signing_keys ):
301
+ def read_old_signing_keys (
302
+ self , old_signing_keys : Optional [JsonDict ]
303
+ ) -> Dict [str , VerifyKey ]:
300
304
if old_signing_keys is None :
301
305
return {}
302
306
keys = {}
@@ -340,7 +344,7 @@ def generate_files(self, config: Dict[str, Any], config_dir_path: str) -> None:
340
344
write_signing_keys (signing_key_file , (key ,))
341
345
342
346
343
- def _perspectives_to_key_servers (config ) :
347
+ def _perspectives_to_key_servers (config : JsonDict ) -> Iterator [ JsonDict ] :
344
348
"""Convert old-style 'perspectives' configs into new-style 'trusted_key_servers'
345
349
346
350
Returns an iterable of entries to add to trusted_key_servers.
@@ -402,7 +406,9 @@ def _perspectives_to_key_servers(config):
402
406
}
403
407
404
408
405
- def _parse_key_servers (key_servers , federation_verify_certificates ):
409
+ def _parse_key_servers (
410
+ key_servers : List [Any ], federation_verify_certificates : bool
411
+ ) -> Iterator [TrustedKeyServer ]:
406
412
try :
407
413
jsonschema .validate (key_servers , TRUSTED_KEY_SERVERS_SCHEMA )
408
414
except jsonschema .ValidationError as e :
@@ -444,7 +450,7 @@ def _parse_key_servers(key_servers, federation_verify_certificates):
444
450
yield result
445
451
446
452
447
- def _assert_keyserver_has_verify_keys (trusted_key_server ) :
453
+ def _assert_keyserver_has_verify_keys (trusted_key_server : TrustedKeyServer ) -> None :
448
454
if not trusted_key_server .verify_keys :
449
455
raise ConfigError (INSECURE_NOTARY_ERROR )
450
456
0 commit comments