kopia lustrzana https://github.com/tsileo/little-boxes
Make fetching a remote public key easier
rodzic
a6101a81e3
commit
68cae32889
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Ładowanie…
Reference in New Issue