myproductpassport ← Atgal į pasą
Nuo klastojimo apsaugotas įrašas

Fernway FX-36 E-Bike Battery

Kiekviena paskelbta šio paso versija gauna kontrolinį kodą, susiejama su ankstesne versija ir pasirašoma. Jei kas nors įraše vėliau būtų pakeista, toliau pateikti kontroliniai kodai nebesutaptų.

Nepakeista nuo įrašymo · parašai patikrinti
Dabartinis kontrolinis kodas (SHA-256)
b7e831dbf369cc947b766db555078e87c54bd5d9e54f7f113c4eb6c2d49d35bc
Paskutinį kartą įrašyta3 lap 2026, 16:52 UTC
Įrašytos versijos1
ParašasEd25519

Istorija

  1. #1 · Paskelbta Parašas galioja
    Kontrolinis kodas: b7e831dbf369cc947b766db555078e87c54bd5d9e54f7f113c4eb6c2d49d35bc
    Grandinė: cddfa8de6044bb8698b0a86d62eeed064a8b6b891c31a1b7ebdc8639f39b826d

Patikrinkite patys

  1. Atsisiųskite įrašus JSON formatu ir viešąjį raktą.
  2. Kiekvieno įrašo grandinės reikšmė yra SHA-256 maiša, apskaičiuota iš: schemos pavadinimo, paso ID, įrašo numerio, jo kontrolinio kodo, ankstesnės grandinės reikšmės ir laiko, po vieną eilutėje.
  3. Patikrinkite grandinės reikšmės Ed25519 parašą pagal paskelbtą raktą. Kiekviename įraše taip pat turi būti nurodyta ankstesnio įrašo grandinės reikšmė.
import json, hashlib, base64, urllib.request
from cryptography.hazmat.primitives.asymmetric.ed25519 import Ed25519PublicKey

doc = json.load(urllib.request.urlopen("https://myproductpassport.eu/p/3daf1fbb-004d-4881-8515-9571e900f3eb/integrity.json"))
keys = {k["key_id"]: k["public_key"] for k in json.load(urllib.request.urlopen("https://myproductpassport.eu/.well-known/mpp-integrity-keys.json"))["keys"]}
prev = None
for r in doc["records"]:
    line = "\n".join([doc["schema"], doc["passport_uuid"], str(r["sequence"]), r["content_hash"], r["previous_hash"] or "", r["recorded_at"]])
    assert hashlib.sha256(line.encode()).hexdigest() == r["chain_hash"] and r["previous_hash"] == prev
    Ed25519PublicKey.from_public_bytes(base64.b64decode(keys[r["key_id"]])).verify(base64.b64decode(r["signature"]), r["chain_hash"].encode())
    prev = r["chain_hash"]
print("verified", len(doc["records"]), "records")

Kontrolinis kodas apima visą įrašą, įskaitant ribotos prieigos informaciją ir kiekvieno pridėto dokumento maišą, todėl įrodo, kad įrašas nepasikeitė, neatskleisdamas jo turinio. Jis rodo, kad pasas nebuvo pakeistas nuo įrašymo; jis nepatvirtina, kad jame pateikta informacija teisinga: už ją ir toliau atsako pasą paskelbęs ekonominės veiklos vykdytojas.