def test_alice_web_character_control_grant(alice_web_controller_test_client, grant_control_request): method_name, params = grant_control_request endpoint = f'/{method_name}' response = alice_web_controller_test_client.put(endpoint, data=json.dumps(params)) assert response.status_code == 200 response_data = json.loads(response.data) assert 'treasure_map' in response_data['result'] assert 'policy_encrypting_key' in response_data['result'] assert 'alice_verifying_key' in response_data['result'] map_bytes = b64decode(response_data['result']['treasure_map']) encrypted_map = TreasureMap.from_bytes(map_bytes) assert encrypted_map._hrac is not None # Send bad data to assert error returns response = alice_web_controller_test_client.put(endpoint, data=json.dumps( {'bad': 'input'})) assert response.status_code == 400 bad_params = params.copy() # Malform the request del (bad_params['bob_encrypting_key']) response = alice_web_controller_test_client.put( endpoint, data=json.dumps(bad_params)) assert response.status_code == 400
def receive_treasure_map(treasure_map_id): from nucypher.policy.collections import TreasureMap try: treasure_map = TreasureMap.from_bytes( bytes_representation=request.data, verify=True) except TreasureMap.InvalidSignature: do_store = False else: # TODO: If we include the policy ID in this check, does that prevent map spam? 1736 do_store = treasure_map.public_id() == treasure_map_id if do_store: log.info("{} storing TreasureMap {}".format( this_node, treasure_map_id)) # TODO 341 - what if we already have this TreasureMap? treasure_map_index = bytes.fromhex(treasure_map_id) this_node.treasure_maps[treasure_map_index] = treasure_map return Response(bytes(treasure_map), status=202) else: # TODO: Make this a proper 500 or whatever. #341 log.info( "Bad TreasureMap ID; not storing {}".format(treasure_map_id)) assert False
def test_alice_sets_treasure_map(enacted_federated_policy): """ Having enacted all the policies of a PolicyGroup, Alice creates a TreasureMap and ...... TODO """ enacted_federated_policy.publish_treasure_map(network_middleware=MockRestMiddleware()) treasure_map_id = enacted_federated_policy.treasure_map.public_id() found = 0 for node in enacted_federated_policy.bob.matching_nodes_among(enacted_federated_policy.alice.known_nodes): with node.datastore.describe(DatastoreTreasureMap, treasure_map_id) as treasure_map_on_node: assert FederatedTreasureMap.from_bytes(treasure_map_on_node.treasure_map) == enacted_federated_policy.treasure_map found += 1 assert found
def test_alice_sets_treasure_map(federated_alice, federated_bob, enacted_federated_policy): """ Having enacted all the policies of a PolicyGroup, Alice creates a TreasureMap and ...... TODO """ treasure_map_id = enacted_federated_policy.treasure_map.public_id() found = 0 for node in federated_bob.matching_nodes_among( federated_alice.known_nodes): with node.datastore.describe(DatastoreTreasureMap, treasure_map_id) as treasure_map_on_node: assert FederatedTreasureMap.from_bytes( treasure_map_on_node.treasure_map ) == enacted_federated_policy.treasure_map found += 1 assert found
def test_treasure_map_stored_by_ursula_is_the_correct_one_for_bob(federated_alice, federated_bob, federated_ursulas, enacted_federated_policy): """ The TreasureMap given by Alice to Ursula is the correct one for Bob; he can decrypt and read it. """ treasure_map_id = enacted_federated_policy.treasure_map.public_id() an_ursula = federated_bob.matching_nodes_among(federated_ursulas)[0] with an_ursula.datastore.describe(DatastoreTreasureMap, treasure_map_id) as treasure_map_record: treasure_map_on_network = FederatedTreasureMap.from_bytes(treasure_map_record.treasure_map) hrac_by_bob = federated_bob.construct_policy_hrac(federated_alice.stamp, enacted_federated_policy.label) assert enacted_federated_policy.hrac() == hrac_by_bob map_id_by_bob = federated_bob.construct_map_id(federated_alice.stamp, enacted_federated_policy.label) assert map_id_by_bob == treasure_map_on_network.public_id()
def test_treasure_map_serialization(enacted_federated_policy, federated_bob): treasure_map = enacted_federated_policy.treasure_map assert treasure_map.m is not None assert treasure_map.m != NO_DECRYPTION_PERFORMED assert treasure_map.m == MOCK_POLICY_DEFAULT_M, 'm value is not correct' serialized_map = bytes(treasure_map) deserialized_map = TreasureMap.from_bytes(serialized_map) assert deserialized_map._hrac == treasure_map._hrac # TreasureMap is currently encrypted with pytest.raises(TypeError): deserialized_map.m with pytest.raises(TypeError): deserialized_map.destinations compass = federated_bob.make_compass_for_alice( enacted_federated_policy.alice) deserialized_map.orient(compass) assert deserialized_map.m == treasure_map.m assert deserialized_map.destinations == treasure_map.destinations