From c4cbff3359c99b050de138a666afe6aad6d8eb05 Mon Sep 17 00:00:00 2001 From: jMyles Date: Fri, 1 Dec 2017 16:02:58 -0800 Subject: [PATCH] Tests that show Bob that Bob is able to issue a WorkOrder via REST. --- nkms/policy/models.py | 16 +++++++++++++++- tests/network/test_network_upgrade.py | 8 ++++++-- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/nkms/policy/models.py b/nkms/policy/models.py index 8f492572c..d21283d29 100644 --- a/nkms/policy/models.py +++ b/nkms/policy/models.py @@ -305,5 +305,19 @@ class WorkOrder(object): receipt_bytes = b"wo:" + ursula_dht_key + keccak_digest(b"".join(pfrags)) receipt_signature = bobs_seal(receipt_bytes) bob_pubkey_sig = bytes(bobs_seal) - return cls(ursula_dht_key, p_frags, receipt_bytes, receipt_signature, bob_pubkey_sig) + return cls(kfrag_hrac, pfrags, receipt_bytes, receipt_signature, bob_pubkey_sig, ursula_dht_key) + + @classmethod + def from_rest_payload(cls, kfrag_hrac, rest_payload): + payload_splitter = BytestringSplitter(Signature, PublicKey) + signature, bob_pubkey_sig, (receipt_bytes, packed_pfrags) = payload_splitter(rest_payload, msgpack_remainder=True) + pfrags = msgpack.loads(packed_pfrags) + verified = signature.verify(receipt_bytes, bob_pubkey_sig) + if not verified: + raise ValueError("This doesn't appear to be from Bob.") + return cls(kfrag_hrac, pfrags, receipt_bytes, signature, bob_pubkey_sig) + + def payload(self): + return bytes(self.receipt_signature) + self.bob_pubkey_sig + msgpack.dumps((self.receipt_bytes, msgpack.dumps(self.pfrags))) + diff --git a/tests/network/test_network_upgrade.py b/tests/network/test_network_upgrade.py index 0b0037615..c25ed4cf3 100644 --- a/tests/network/test_network_upgrade.py +++ b/tests/network/test_network_upgrade.py @@ -31,10 +31,14 @@ def test_bob_can_issue_a_work_order_to_a_specific_ursula(enacted_policy_group, a assert len(bob._ursulas) == len(ursulas) p_frags = (b"llamas", b"dingos") - work_order = bob.generate_work_order(p_frags) + work_orders = bob.generate_work_orders(enacted_policy_group, p_frags, num_ursulas=1) + + assert len(work_orders) == 1 networky_stuff = MockNetworkyStuff(ursulas) - bob.issue_work_order(networky_stuff, work_order, num_ursulas=1) # Issue the work order only to the first Ursula. + + for ursula_dht_key, work_order in work_orders.items(): + bob.get_reencrypted_c_frag(networky_stuff, work_order) # Issue the work order only to the first Ursula. first_ursula = bob.get_ursula(0) work_orders_from_bob = first_ursula.work_orders(bob=bob)