Files
aitbc/packages/py/aitbc-crypto/tests/test_receipt_signing.py

46 lines
1.1 KiB
Python

import base64
from nacl.signing import SigningKey
from aitbc_crypto.receipt import canonical_json, receipt_hash
from aitbc_crypto.signing import ReceiptSigner, ReceiptVerifier
def test_canonical_json_orders_keys():
payload = {
"b": 2,
"a": 1,
"nested": {
"y": None,
"x": 5,
},
}
json_str = canonical_json(payload)
assert json_str == '{"a":1,"b":2,"nested":{"x":5}}'
def test_receipt_sign_and_verify():
payload = {
"version": "1.0",
"receipt_id": "rcpt-1",
"job_id": "job-1",
"provider": "miner-1",
"client": "client-1",
"units": 1.0,
"unit_type": "gpu_seconds",
"started_at": 1695720000,
"completed_at": 1695720005,
}
signing_key = SigningKey.generate()
signer = ReceiptSigner(signing_key.encode())
signature = signer.sign(payload)
verifier = ReceiptVerifier(signing_key.verify_key.encode())
assert verifier.verify(payload, signature)
# tamper payload
tampered = payload.copy()
tampered["units"] = 2.0
assert verifier.verify(tampered, signature) is False