mirror of https://github.com/nucypher/nucypher.git
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
parent
c4d2aa8ff1
commit
cdb825bdbc
|
@ -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}")
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue