#!/usr/bin/env python3 # Requires the cryptography package. Verifies a detached website discovery-card JWS. import base64,json,urllib.request from cryptography.hazmat.primitives.asymmetric.ed25519 import Ed25519PublicKey def get(url): with urllib.request.urlopen(url,timeout=20) as r: return json.load(r) def decode(s): return base64.urlsafe_b64decode(s+'='*((-len(s))%4)) card=get('https://hergertsynthora.com/.well-known/agent-card.json') jwks=get('https://hergertsynthora.com/.well-known/jwks.json') sig=card.pop('signatures')[0] protected=json.loads(decode(sig['protected'])) assert protected['alg']=='EdDSA' key=next(k for k in jwks['keys'] if k['kid']==protected['kid']) assert key['kty']=='OKP' and key['crv']=='Ed25519' payload=json.dumps(card,sort_keys=True,separators=(',',':'),ensure_ascii=False).encode() payload64=base64.urlsafe_b64encode(payload).rstrip(b'=').decode() Ed25519PublicKey.from_public_bytes(decode(key['x'])).verify(decode(sig['signature']),(sig['protected']+'.'+payload64).encode()) print('Firma de tarjeta vĂ¡lida; la firma no certifica calidad ni frescura de productos.')