Bob includes the encrypted KFrag in the WorkOrder, which we previously used in Ursula's side to get the Kfrag from the re-encryption request

pull/2687/head
David Núñez 2021-01-20 11:56:12 +01:00 committed by Kieran R. Prasch
parent c4d2aa8ff1
commit cdb825bdbc
4 changed files with 25 additions and 6 deletions

View File

@ -713,13 +713,14 @@ class Bob(Character):
# TODO: Bob crashes if he hasn't learned about this Ursula #999 # TODO: Bob crashes if he hasn't learned about this Ursula #999
ursula = self.known_nodes[ursula_address] ursula = self.known_nodes[ursula_address]
encrypted_kfrag = bytes(treasure_map[ursula_address])
if capsules_to_include: if capsules_to_include:
work_order = WorkOrder.construct_by_bob(arrangement_id=arrangement_id, work_order = WorkOrder.construct_by_bob(arrangement_id=arrangement_id,
alice_verifying=alice_verifying_key, alice_verifying=alice_verifying_key,
capsules=capsules_to_include, capsules=capsules_to_include,
ursula=ursula, ursula=ursula,
bob=self) bob=self,
encrypted_kfrag=encrypted_kfrag)
incomplete_work_orders[ursula_address] = work_order incomplete_work_orders[ursula_address] = work_order
else: else:
self.log.debug(f"All of these Capsules already have WorkOrders for this node: {ursula_address}") self.log.debug(f"All of these Capsules already have WorkOrders for this node: {ursula_address}")

View File

@ -342,6 +342,7 @@ class WorkOrder:
def __init__(self, def __init__(self,
bob: Bob, bob: Bob,
arrangement_id, arrangement_id,
encrypted_kfrag: bytes,
alice_address: bytes, alice_address: bytes,
tasks: dict, tasks: dict,
receipt_signature, receipt_signature,
@ -371,7 +372,7 @@ class WorkOrder:
return len(self.tasks) return len(self.tasks)
@classmethod @classmethod
def construct_by_bob(cls, arrangement_id, alice_verifying, capsules, ursula, bob): def construct_by_bob(cls, arrangement_id, alice_verifying, capsules, ursula, bob, encrypted_kfrag):
ursula.mature() ursula.mature()
alice_address = canonical_address_from_umbral_key(alice_verifying) alice_address = canonical_address_from_umbral_key(alice_verifying)
@ -394,10 +395,14 @@ class WorkOrder:
receipt_bytes = cls.HEADER + bytes(ursula.stamp) + capsules receipt_bytes = cls.HEADER + bytes(ursula.stamp) + capsules
receipt_signature = bob.stamp(receipt_bytes) receipt_signature = bob.stamp(receipt_bytes)
return cls(bob=bob, arrangement_id=arrangement_id, tasks=tasks, return cls(bob=bob,
arrangement_id=arrangement_id,
encrypted_kfrag=encrypted_kfrag,
tasks=tasks,
receipt_signature=receipt_signature, receipt_signature=receipt_signature,
alice_address=alice_address, alice_address=alice_address,
ursula=ursula, blockhash=blockhash) ursula=ursula,
blockhash=blockhash)
@classmethod @classmethod
def from_rest_payload(cls, arrangement_id, rest_payload, ursula, alice_address): def from_rest_payload(cls, arrangement_id, rest_payload, ursula, alice_address):
@ -431,6 +436,7 @@ class WorkOrder:
bob = Bob.from_public_keys(verifying_key=bob_verifying_key) bob = Bob.from_public_keys(verifying_key=bob_verifying_key)
return cls(bob=bob, return cls(bob=bob,
ursula=ursula, ursula=ursula,
encrypted_kfrag=None,
arrangement_id=arrangement_id, arrangement_id=arrangement_id,
tasks=tasks, tasks=tasks,
alice_address=alice_address, alice_address=alice_address,

View File

@ -110,6 +110,7 @@ def test_work_order_with_multiple_capsules(mock_ursula_reencrypts,
# Test construction of WorkOrders by Bob # Test construction of WorkOrders by Bob
work_order = WorkOrder.construct_by_bob(arrangement_id=arrangement_id, work_order = WorkOrder.construct_by_bob(arrangement_id=arrangement_id,
encrypted_kfrag=None, # FIXME
bob=federated_bob, bob=federated_bob,
alice_verifying=federated_alice.stamp.as_umbral_pubkey(), alice_verifying=federated_alice.stamp.as_umbral_pubkey(),
ursula=ursula, ursula=ursula,

View File

@ -195,4 +195,15 @@ def _mock_ursula_reencrypts(ursula):
cfrag_signature = ursula.stamp(bytes(cfrag)) cfrag_signature = ursula.stamp(bytes(cfrag))
bob = Bob.from_public_keys(verifying_key=pub_key_bob) bob = Bob.from_public_keys(verifying_key=pub_key_bob)
return WorkOrder.PRETask(capsule, task_signature, cfrag, cfrag_signature) task = WorkOrder.PRETask(capsule, task_signature, cfrag, cfrag_signature)
work_order = WorkOrder(bob=bob,
encrypted_kfrag=None, # FIXME
arrangement_id=None,
alice_address=alice_address,
tasks={capsule: task},
receipt_signature=None,
ursula=ursula,
blockhash=blockhash)
evidence = IndisputableEvidence(task, work_order)
return evidence