Make fetching a remote public key easier

pull/14/head
Thomas Sileo 2018-08-01 23:49:54 +02:00
rodzic a6101a81e3
commit 68cae32889
2 zmienionych plików z 15 dodań i 1 usunięć

Wyświetl plik

@ -10,6 +10,7 @@ from typing import Optional
from typing import Type
from typing import Union
from .key import Key
from .backend import Backend
from .errors import ActivityGoneError
from .errors import ActivityNotFoundError
@ -553,6 +554,9 @@ class Person(BaseActivity):
OBJECT_REQUIRED = False
ACTOR_REQUIRED = False
def get_key(self) -> Key:
return Key.from_dict(self.publicKey)
class Service(Person):
ACTIVITY_TYPE = ActivityType.SERVICE

Wyświetl plik

@ -10,12 +10,13 @@ from Crypto.Util import number
class Key(object):
DEFAULT_KEY_SIZE = 2048
def __init__(self, owner: str) -> None:
def __init__(self, owner: str, id_: Optional[str] = None) -> None:
self.owner = owner
self.privkey_pem: Optional[str] = None
self.pubkey_pem: Optional[str] = None
self.privkey: Optional[Any] = None
self.pubkey: Optional[Any] = None
self.id_ = id_
def load_pub(self, pubkey_pem: str) -> None:
self.pubkey_pem = pubkey_pem
@ -42,6 +43,15 @@ class Key(object):
"publicKeyPem": self.pubkey_pem,
}
@classmethod
def from_dict(cls, data):
try:
k = cls(data["owner"], data["id"])
k.load_pub(data["publicKeyPem"])
except KeyError:
raise ValueError(f"bad key data {data!r}")
return k
def to_magic_key(self) -> str:
mod = base64.urlsafe_b64encode(
number.long_to_bytes(self.privkey.n) # type: ignore