#!/usr/bin/env python3
"""Independent public check of Rekor v2 entry 171750012 (log2025-1.rekor.sigstore.dev).
Needs only network + pycryptodome. No honesty.tools files required.
Usage: python3 verify_rekor_entry1.py"""
import base64, hashlib, json, urllib.request
from Crypto.PublicKey import ECC; from Crypto.Signature import eddsa; from Crypto.Hash import SHA512
IDX = 171750012
BODY = b"www.honesty.tools/receipts\n23\nl9LsroPm6bLAb7D4cRCyd/XoohbAdljZiCIsV7jF1ys=\n"   # C2SP checkpoint body, tree size 23
PUB_RAW_B64 = "QX8nadAqf3QFrnY2MrSOqAhhrKhxFAYBiwrs9R0Pv4I="                               # receipt-log key (Kevin Russell)
n = IDX // 256; path = "x%03d/%03d" % (n // 1000, n % 1000)
d = urllib.request.urlopen("https://log2025-1.rekor.sigstore.dev/api/v2/tile/entries/" + path).read()
ents, i = [], 0
while i < len(d):
    L = int.from_bytes(d[i:i+2], "big"); ents.append(d[i+2:i+2+L]); i += 2 + L
e = json.loads(ents[IDX % 256])["spec"]["hashedRekordV002"]
assert e["data"]["algorithm"] == "SHA2_512" and base64.b64decode(e["data"]["digest"]) == hashlib.sha512(BODY).digest(), "digest mismatch"
spki = base64.b64decode(e["signature"]["verifier"]["publicKey"]["rawBytes"])
assert base64.b64encode(spki[-32:]).decode() == PUB_RAW_B64, "public key mismatch"
eddsa.new(ECC.import_key(spki), "rfc8032").verify(SHA512.new(BODY), base64.b64decode(e["signature"]["content"]))
print("OK: Rekor entry %d = hashedrekord SHA2_512(checkpoint body size 23, root 97d2ecae...d72b), Ed25519ph sig by key fp %s"
      % (IDX, hashlib.sha256(spki[-32:]).hexdigest()))
