36 lines
1.4 KiB
Python
36 lines
1.4 KiB
Python
import json
|
|
from idea44_soundgraph_studio_verifiable.core import AudioModule, AudioPatch, generate_ed25519_keypair, ProvenanceEvent
|
|
|
|
|
|
def test_audio_module_cid_is_stable():
|
|
m = AudioModule.make("oscillator", {"freq": 440, "wave": "sine"}, version="0.1")
|
|
cid1 = m.cid()
|
|
# recompute from dict to ensure canonicalization is stable
|
|
cid2 = AudioModule(id=m.id, type=m.type, params=m.params, version=m.version, license=m.license).cid()
|
|
assert cid1 == cid2
|
|
|
|
|
|
def test_patch_merkle_and_inclusion_proof():
|
|
m1 = AudioModule.make("oscillator", {"freq": 220})
|
|
m2 = AudioModule.make("filter", {"type": "lowpass", "cutoff": 1000})
|
|
|
|
node1 = {"id": "n1", "module_cid": m1.cid(), "params": {}}
|
|
node2 = {"id": "n2", "module_cid": m2.cid(), "params": {}}
|
|
|
|
patch = AudioPatch(nodes=[node1, node2], edges=[("n1","n2")])
|
|
root = patch.merkle_root()
|
|
assert isinstance(root, str) and len(root) == 64
|
|
|
|
proof, leaf = patch.inclusion_proof_for_module_cid(m1.cid())
|
|
# verify proof using the exported verification helper
|
|
from idea44_soundgraph_studio_verifiable.core import verify_merkle_proof
|
|
|
|
assert verify_merkle_proof(leaf, proof, root)
|
|
|
|
|
|
def test_provenance_event_sign_and_verify():
|
|
sk, pk = generate_ed25519_keypair()
|
|
ev = ProvenanceEvent(patch_id="patch-1", actor="alice", timestamp=123456.0, op_hash="deadbeef")
|
|
ev.sign(sk)
|
|
assert ev.verify(pk)
|