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
ursula = self.known_nodes[ursula_address]
encrypted_kfrag = bytes(treasure_map[ursula_address])
if capsules_to_include:
work_order = WorkOrder.construct_by_bob(arrangement_id=arrangement_id,
alice_verifying=alice_verifying_key,
capsules=capsules_to_include,
ursula=ursula,
bob=self)
bob=self,
encrypted_kfrag=encrypted_kfrag)
incomplete_work_orders[ursula_address] = work_order
else:
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,
bob: Bob,
arrangement_id,
encrypted_kfrag: bytes,
alice_address: bytes,
tasks: dict,
receipt_signature,
@ -371,7 +372,7 @@ class WorkOrder:
return len(self.tasks)
@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()
alice_address = canonical_address_from_umbral_key(alice_verifying)
@ -394,10 +395,14 @@ class WorkOrder:
receipt_bytes = cls.HEADER + bytes(ursula.stamp) + capsules
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,
alice_address=alice_address,
ursula=ursula, blockhash=blockhash)
ursula=ursula,
blockhash=blockhash)
@classmethod
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)
return cls(bob=bob,
ursula=ursula,
encrypted_kfrag=None,
arrangement_id=arrangement_id,
tasks=tasks,
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
work_order = WorkOrder.construct_by_bob(arrangement_id=arrangement_id,
encrypted_kfrag=None, # FIXME
bob=federated_bob,
alice_verifying=federated_alice.stamp.as_umbral_pubkey(),
ursula=ursula,

View File

@ -195,4 +195,15 @@ def _mock_ursula_reencrypts(ursula):
cfrag_signature = ursula.stamp(bytes(cfrag))
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