Farpy Receipt Signing (v1)

Farpy signs receipts to provide non-repudiation: Farpy cannot deny what it signed.

No correctness guarantees. No determinism guarantees.

Algorithm

Ed25519

Canonical JSON

UTF-8 JSON with:\n- sort_keys=true\n- separators=(",",":")\n- ensure_ascii=false

Fields excluded from signing

sig, sig_alg, sig_pub, sig_v

Bytestring to sign

message = b"FARPY_RECEIPT_V1\n" + canonical_json(receipt_without_sig_fields)

Signature fields added

sig_alg = "ed25519"\nsig_v   = 1\nsig_pub = base64(raw_32_byte_public_key)\nsig     = base64(signature_bytes)

Public key

PEM: public_key.pem

Raw32 (base64):

Offline verifier

Python: verify.py

python3 /signing/verify.py /path/to/receipt.json /signing/public_key.pem
Render now Run NodeMuncher