Onionr/static-data/default-plugins/wot/wot/identity/processtrustsignature.py

31 lines
931 B
Python
Raw Normal View History

import logger
from nacl.signing import VerifyKey
import nacl.exceptions
from getbykey import get_identity_by_key
def process_trust_signature(signature: bytes):
if len(signature) != 128:
logger.warn(
f'Signature size is invalid for a signed identity')
signer = signature[:32]
signed = signature[32:65]
signature = signature[65:]
# If bad signature, it raises nacl.exceptions.BadSignatureError
VerifyKey.verify(signer, signed, signature)
else:
# if good signature
try:
signer_identity = get_identity_by_key(signer)
signed_identity = get_identity_by_key(signed)
except KeyError:
# if signer or signed identity are not in the identity set
# this means they have not been announced yet
pass
else:
# noop if already signed
signer_identity.trusted.add(signed_identity)