added zenroom fulfillment verification

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>
This commit is contained in:
Jürgen Eckel 2022-06-14 13:45:09 +02:00
parent 3f28ddd990
commit ca4a9cf949

View File

@ -508,9 +508,21 @@ class Transaction(object):
ccffill = input_.fulfillment ccffill = input_.fulfillment
try: try:
parsed_ffill = Fulfillment.from_uri(ccffill.serialize_uri()) parsed_ffill = Fulfillment.from_uri(ccffill.serialize_uri())
except (TypeError, ValueError, except TypeError as e:
ParsingError, ASN1DecodeError, ASN1EncodeError): print( f"Exception TypeError : {e}")
return False return False;
except ValueError as e:
print( f"Exception ValueError : {e}")
return False;
except ParsingError as e:
print( f"Exception ParsingError : {e}")
return False;
except ASN1DecodeError as e:
print( f"Exception ASN1DecodeError : {e}")
return False;
except ASN1EncodeError as e:
print( f"Exception ASN1EncodeError : {e}")
return False;
if operation == self.CREATE: if operation == self.CREATE:
# NOTE: In the case of a `CREATE` transaction, the # NOTE: In the case of a `CREATE` transaction, the
@ -519,17 +531,21 @@ class Transaction(object):
else: else:
output_valid = output_condition_uri == ccffill.condition_uri output_valid = output_condition_uri == ccffill.condition_uri
message = sha3_256(message.encode()) ffill_valid = False
if input_.fulfills: if isinstance( parsed_ffill, ZenroomSha256 ):
message.update('{}{}'.format( ffill_valid = parsed_ffill.validate(message=message)
input_.fulfills.txid, input_.fulfills.output).encode()) else:
message = sha3_256(message.encode())
if input_.fulfills:
message.update('{}{}'.format(
input_.fulfills.txid, input_.fulfills.output).encode())
# NOTE: We pass a timestamp to `.validate`, as in case of a timeout # NOTE: We pass a timestamp to `.validate`, as in case of a timeout
# condition we'll have to validate against it # condition we'll have to validate against it
# cryptoconditions makes no assumptions of the encoding of the # cryptoconditions makes no assumptions of the encoding of the
# message to sign or verify. It only accepts bytestrings # message to sign or verify. It only accepts bytestrings
ffill_valid = parsed_ffill.validate(message=message.digest()) ffill_valid = parsed_ffill.validate(message=message.digest())
return output_valid and ffill_valid return output_valid and ffill_valid
# This function is required by `lru_cache` to create a key for memoization # This function is required by `lru_cache` to create a key for memoization