fuwuqi/client.py
2023-01-18 05:01:59 +00:00

36 lines
1.1 KiB
Python

from cryptography.hazmat.primitives import hashes, serialization
from cryptography.hazmat.primitives.asymmetric import padding
from base64 import b64encode
from email.utils import formatdate
from requests import post
date = formatdate(usegmt=True)
with open('activity.jsonld', 'rb') as f:
activity = f.read()
digester = hashes.Hash(hashes.SHA256())
digester.update(activity)
digest = b64encode(digester.finalize()).decode()
message = f'(request-target): post /users/a/inbox\nhost: social.exozy.me\ndate: {date}\ndigest: SHA-256={digest}'
with open('private.pem', 'rb') as f:
privkey = serialization.load_pem_private_key(f.read(), None)
signature = b64encode(privkey.sign(
message.encode('utf8'),
padding.PKCS1v15(),
hashes.SHA256()
)).decode()
header = f'keyId="https://0.exozy.me/users/test.jsonld#main-key",headers="(request-target) host date digest",signature="{signature}"'
resp = post('http://localhost:4200/users/test.outbox', headers={
'(request-target)': 'post /users/a/inbox',
'Host': 'social.exozy.me',
'Date': date,
'Digest': f'SHA-256={digest}',
'Signature': header,
}, data=activity)
print(resp)
print(resp.text)