Farpy signs receipts to provide non-repudiation: Farpy cannot deny what it signed.
No correctness guarantees. No determinism guarantees.
Ed25519
UTF-8 JSON with:\n- sort_keys=true\n- separators=(",",":")\n- ensure_ascii=falsesig, sig_alg, sig_pub, sig_v
message = b"FARPY_RECEIPT_V1\n" + canonical_json(receipt_without_sig_fields)
sig_alg = "ed25519"\nsig_v = 1\nsig_pub = base64(raw_32_byte_public_key)\nsig = base64(signature_bytes)
PEM: public_key.pem
Raw32 (base64):
Python: verify.py
python3 /signing/verify.py /path/to/receipt.json /signing/public_key.pem