from beaconcrypt import BeaconCryptBeacon, BeaconCryptServer
from nacl.utils import random
SERVER_KID = 0
REGISTRATION_MESSAGE = b"registration ok"
def main():
server_seed = random(32)
server = BeaconCryptServer(SERVER_KID, server_seed)
beacon = BeaconCryptBeacon(SERVER_KID, server.id_pk())
b_reg_1 = beacon.generate_registration()
with open("transport", "wb") as f:
f.write(b_reg_1)
with open("transport", "rb") as f:
s_reg_1 = f.read()
s_reg_resp = server.register_beacon(s_reg_1, REGISTRATION_MESSAGE)
with open("transport", "wb") as f:
f.write(s_reg_resp.serialized())
with open("transport", "rb") as f:
b_reg_1 = f.read()
first_message = beacon.process_initial_message(b_reg_1)
print(f"Beacon got intial message: {first_message}")
b_ping = beacon.encrypt_to_server_signed(b"ping")
with open("transport", "wb") as f:
f.write(b_ping)
with open("transport", "rb") as f:
s_ping = f.read()
ping = server.decrypt_beacon_message_signed(s_ping)
print(f"Server got ping: {ping}")
s_task_0 = server.encrypt_to_beacon_signed(b"task contents", s_reg_resp.key_id())
with open("transport", "wb") as f:
f.write(s_task_0)
with open("transport", "rb") as f:
b_task_0 = f.read()
task_0 = beacon.decrypt_server_message_signed(b_task_0)
print(f"Beacon got first task: {task_0}")
b_task_1 = beacon.encrypt_to_server_signed(b"task response")
with open("transport", "wb") as f:
f.write(b_task_1)
with open("transport", "rb") as f:
s_task_1 = f.read()
task_1 = server.decrypt_beacon_message_signed(s_task_1)
print(f"Server got response to first task: {task_1}")
if __name__ == "__main__":
main()