52 lines
1.7 KiB
Python
52 lines
1.7 KiB
Python
import json
|
|
from pathlib import Path
|
|
|
|
from blspy import AugSchemeMPL, PublicKeyMPL, SignatureMPL
|
|
|
|
from chia.util.byte_types import hexstr_to_bytes
|
|
from chia.util.hash import std_hash
|
|
|
|
|
|
def validate_alert_file(file_path: Path, pubkey: str) -> bool:
|
|
text = file_path.read_text()
|
|
validated = validate_alert(text, pubkey)
|
|
return validated
|
|
|
|
|
|
def validate_alert(text: str, pubkey: str) -> bool:
|
|
json_obj = json.loads(text)
|
|
data = json_obj["data"]
|
|
message = bytes(data, "UTF-8")
|
|
signature = json_obj["signature"]
|
|
signature = SignatureMPL.from_bytes(hexstr_to_bytes(signature))
|
|
pubkey_bls = PublicKeyMPL.from_bytes(hexstr_to_bytes(pubkey))
|
|
sig_match_my = AugSchemeMPL.verify(pubkey_bls, message, signature)
|
|
|
|
return sig_match_my
|
|
|
|
|
|
def create_alert_file(alert_file_path: Path, key, genesis_challenge_preimage: str):
|
|
bytes_preimage = bytes(genesis_challenge_preimage, "UTF-8")
|
|
genesis_challenge = std_hash(bytes_preimage)
|
|
file_dict = {
|
|
"ready": True,
|
|
"genesis_challenge": genesis_challenge.hex(),
|
|
"genesis_challenge_preimage": genesis_challenge_preimage,
|
|
}
|
|
data: str = json.dumps(file_dict)
|
|
signature = AugSchemeMPL.sign(key, bytes(data, "utf-8"))
|
|
file_data = {"data": data, "signature": f"{signature}"}
|
|
file_data_json = json.dumps(file_data)
|
|
alert_file_path.write_text(file_data_json)
|
|
|
|
|
|
def create_not_ready_alert_file(alert_file_path: Path, key):
|
|
file_dict = {
|
|
"ready": False,
|
|
}
|
|
data: str = json.dumps(file_dict)
|
|
signature = AugSchemeMPL.sign(key, bytes(data, "utf-8"))
|
|
file_data = {"data": data, "signature": f"{signature}"}
|
|
file_data_json = json.dumps(file_data)
|
|
alert_file_path.write_text(file_data_json)
|