41 lines
1.1 KiB
Python
41 lines
1.1 KiB
Python
import sys
|
|
import pathlib
|
|
|
|
# Ensure repository root is on sys.path so tests can import the package
|
|
sys.path.insert(0, str(pathlib.Path(__file__).resolve().parents[1]))
|
|
|
|
from cosmic_ledger.delta import DeltaLog, verify_delta_block
|
|
|
|
|
|
def test_export_and_verify_delta_block_with_signature():
|
|
dl = DeltaLog()
|
|
# add a few payloads
|
|
for i in range(4):
|
|
dl.add_entry({"v": i})
|
|
|
|
key = b'unique-test-key-xyz'
|
|
block = dl.export_delta_block(since_index=0, signer_key=key)
|
|
|
|
assert "root" in block
|
|
assert "digests" in block
|
|
assert "aggregated_sig" in block
|
|
assert block["aggregated_sig"] is not None
|
|
|
|
# verify should succeed with correct key
|
|
assert verify_delta_block(block, signer_key=key)
|
|
|
|
|
|
def test_verify_delta_block_tamper_detection():
|
|
dl = DeltaLog()
|
|
for i in range(3):
|
|
dl.add_entry({"v": i})
|
|
|
|
key = b'another-key-123'
|
|
block = dl.export_delta_block(since_index=0, signer_key=key)
|
|
|
|
# tamper with a digest
|
|
if block["digests"]:
|
|
block["digests"][0] = ("0" if block["digests"][0][0] != "0" else "1") + block["digests"][0][1:]
|
|
|
|
assert not verify_delta_block(block, signer_key=key)
|