Fix imports and function calls after rebasing over latest changes (TMapConKFrags and umbral_adapter).

Fix incompatible treasure map data used in tests.
pull/2664/head
derekpierre 2021-07-07 09:24:17 -04:00
parent 26968e05bc
commit d31f5938ca
18 changed files with 275 additions and 129 deletions

View File

@ -75,8 +75,7 @@ from nucypher.config.constants import END_OF_POLICIES_PROBATIONARY_PERIOD
from nucypher.config.storages import ForgetfulNodeStorage, NodeStorage
from nucypher.control.controllers import WebController
from nucypher.control.emitters import StdoutEmitter
from nucypher.crypto.api import encrypt_and_sign, keccak_digest
from nucypher.crypto.constants import HRAC_LENGTH, PUBLIC_KEY_LENGTH, WRIT_CHECKSUM_SIZE
from nucypher.crypto.constants import HRAC_LENGTH, WRIT_CHECKSUM_SIZE
from nucypher.crypto.keypairs import HostingKeypair
from nucypher.crypto.kits import UmbralMessageKit
from nucypher.crypto.powers import (

View File

@ -25,7 +25,7 @@ from constant_sorrow import constants
from cryptography.hazmat.primitives.asymmetric import ec
from hendrix.deploy.tls import HendrixDeployTLS
from hendrix.facilities.services import ExistingKeyTLSContextFactory
from umbral.signing import Signer
from nucypher.crypto.umbral_adapter import Signer
from nucypher.config.constants import MAX_UPLOAD_CONTENT_LENGTH
from nucypher.crypto.kits import MessageKit

View File

@ -31,8 +31,8 @@ import click
from constant_sorrow.constants import KEYSTORE_LOCKED
from mnemonic.mnemonic import Mnemonic
from nucypher.characters.control.emitters import StdoutEmitter
from nucypher.config.constants import DEFAULT_CONFIG_ROOT
from nucypher.control.emitters import StdoutEmitter
from nucypher.crypto.keypairs import HostingKeypair
from nucypher.crypto.passwords import (
secret_box_decrypt,

View File

@ -17,7 +17,7 @@ along with nucypher. If not, see <https://www.gnu.org/licenses/>.
from random import shuffle
import maya
from umbral.keys import UmbralPublicKey
from nucypher.crypto.umbral_adapter import PublicKey
from nucypher.acumen.perception import FleetSensor
from nucypher.crypto.signing import InvalidSignature
@ -27,16 +27,16 @@ from nucypher.network.nodes import Learner
def get_treasure_map_from_known_ursulas(learner: Learner,
map_identifier: str,
bob_encrypting_key: UmbralPublicKey,
bob_encrypting_key: PublicKey,
timeout=3):
"""
Iterate through the nodes we know, asking for the TreasureMap.
Return the first one who has it.
"""
if learner.federated_only:
from nucypher.policy.collections import TreasureMap as _MapClass
from nucypher.policy.maps import TreasureMap as _MapClass
else:
from nucypher.policy.collections import SignedTreasureMap as _MapClass
from nucypher.policy.maps import SignedTreasureMap as _MapClass
start = maya.now()
@ -79,7 +79,7 @@ def get_treasure_map_from_known_ursulas(learner: Learner,
def find_matching_nodes(known_nodes: FleetSensor,
bob_encrypting_key: UmbralPublicKey,
bob_encrypting_key: PublicKey,
no_less_than=7): # Somewhat arbitrary floor here.
# Look for nodes whose checksum address has the second character of Bob's encrypting key in the first
# few characters.
@ -95,7 +95,7 @@ def find_matching_nodes(known_nodes: FleetSensor,
search_boundary = 2
target_nodes = []
target_hex_match = bob_encrypting_key.hex()[1]
target_hex_match = bytes(bob_encrypting_key).hex()[1]
while len(target_nodes) < no_less_than:
search_boundary += 2
if search_boundary > 42: # We've searched the entire string and can't match any. TODO: Portable learning is a nice idea here.

View File

@ -25,9 +25,8 @@ from bytestring_splitter import BytestringSplitter, VariableLengthBytestring
from eth_typing.evm import ChecksumAddress
from twisted.internet import reactor
from nucypher.blockchain.eth.agents import StakersReservoir, StakingEscrowAgent
from nucypher.blockchain.eth.constants import POLICY_ID_LENGTH
from nucypher.crypto.constants import HRAC_LENGTH, PUBLIC_KEY_LENGTH
from nucypher.crypto.constants import HRAC_LENGTH
from nucypher.crypto.kits import RevocationKit
from nucypher.crypto.powers import TransactingPower
from nucypher.crypto.splitters import key_splitter
@ -83,7 +82,7 @@ class TreasureMapPublisher:
def __init__(self,
treasure_map_bytes: bytes,
nodes: Sequence[Ursula],
nodes: Sequence['Ursula'],
network_middleware: RestMiddleware,
percent_to_complete_before_release: int = 5,
threadpool_size: int = 120,
@ -92,7 +91,7 @@ class TreasureMapPublisher:
self._total = len(nodes)
self._block_until_this_many_are_complete = math.ceil(len(nodes) * percent_to_complete_before_release / 100)
def put_treasure_map_on_node(node: Ursula):
def put_treasure_map_on_node(node: 'Ursula'):
try:
response = network_middleware.put_treasure_map_on_node(node=node,
map_payload=treasure_map_bytes)

View File

@ -17,7 +17,7 @@
from typing import List, Optional
from eth_typing import ChecksumAddress
from umbral.keys import UmbralPublicKey
from nucypher.crypto.umbral_adapter import PublicKey
from nucypher.characters.control.specifications.fields import TreasureMap
from nucypher.control.interfaces import ControlInterface, attach_schema
@ -53,7 +53,7 @@ class PorterInterface(ControlInterface):
def publish_treasure_map(self,
treasure_map: bytes,
bob_encrypting_key: bytes) -> dict:
bob_enc_key = UmbralPublicKey.from_bytes(bob_encrypting_key)
bob_enc_key = PublicKey.from_bytes(bob_encrypting_key)
self.implementer.publish_treasure_map(treasure_map_bytes=treasure_map,
bob_encrypting_key=bob_enc_key)
response_data = {'published': True} # always True - if publish failed, an exception is raised by implementer
@ -74,7 +74,7 @@ class PorterInterface(ControlInterface):
def get_treasure_map(self,
treasure_map_id: str,
bob_encrypting_key: bytes) -> dict:
bob_enc_key = UmbralPublicKey.from_bytes(bob_encrypting_key)
bob_enc_key = PublicKey.from_bytes(bob_encrypting_key)
treasure_map = self.implementer.get_treasure_map(map_identifier=treasure_map_id,
bob_encrypting_key=bob_enc_key)
response_data = {'treasure_map': treasure_map}

View File

@ -19,8 +19,7 @@ from marshmallow import fields
from nucypher.control.specifications.exceptions import InvalidInputData
from nucypher.control.specifications.fields.base import BaseField
from nucypher.crypto.constants import HRAC_LENGTH
from nucypher.policy.collections import TreasureMap
from nucypher.crypto.constants import HRAC_LENGTH, KECCAK_DIGEST_LENGTH
class TreasureMapID(BaseField, fields.String):
@ -28,5 +27,5 @@ class TreasureMapID(BaseField, fields.String):
def _validate(self, value):
treasure_map_id = bytes.fromhex(value)
# FIXME federated has map id length 32 bytes but decentralized has length 16 bytes ... huh? - #2725
if len(treasure_map_id) != TreasureMap.ID_LENGTH and len(treasure_map_id) != HRAC_LENGTH:
if len(treasure_map_id) != KECCAK_DIGEST_LENGTH and len(treasure_map_id) != HRAC_LENGTH:
raise InvalidInputData(f"Could not convert input for {self.name} to a valid TreasureMap ID: invalid length")

View File

@ -19,7 +19,7 @@ from base64 import b64encode, b64decode
from marshmallow import fields
from nucypher.control.specifications.fields import BaseField
from nucypher.policy.collections import WorkOrder as WorkOrderClass
from nucypher.policy.orders import WorkOrder as WorkOrderClass
class WorkOrder(BaseField, fields.Field):

View File

@ -19,7 +19,7 @@ from typing import List, Optional, Sequence
from constant_sorrow.constants import NO_CONTROL_PROTOCOL, NO_BLOCKCHAIN_CONNECTION
from eth_typing import ChecksumAddress
from flask import request, Response
from umbral.keys import UmbralPublicKey
from nucypher.crypto.umbral_adapter import PublicKey
from nucypher.blockchain.eth.agents import ContractAgency, StakingEscrowAgent
from nucypher.blockchain.eth.interfaces import BlockchainInterfaceFactory
@ -72,7 +72,7 @@ the Pipe for nucypher network operations
class UrsulaInfo:
"""Simple object that stores relevant Ursula information resulting from sampling."""
def __init__(self, checksum_address: str, uri: str, encrypting_key: UmbralPublicKey):
def __init__(self, checksum_address: str, uri: str, encrypting_key: PublicKey):
self.checksum_address = checksum_address
self.uri = uri
self.encrypting_key = encrypting_key
@ -112,13 +112,13 @@ the Pipe for nucypher network operations
self.make_cli_controller()
self.log.info(self.BANNER)
def get_treasure_map(self, map_identifier: str, bob_encrypting_key: UmbralPublicKey):
def get_treasure_map(self, map_identifier: str, bob_encrypting_key: PublicKey):
return treasuremap.get_treasure_map_from_known_ursulas(learner=self,
map_identifier=map_identifier,
bob_encrypting_key=bob_encrypting_key,
timeout=self.DEFAULT_EXECUTION_TIMEOUT)
def publish_treasure_map(self, treasure_map_bytes: bytes, bob_encrypting_key: UmbralPublicKey) -> None:
def publish_treasure_map(self, treasure_map_bytes: bytes, bob_encrypting_key: PublicKey) -> None:
# TODO (#2516): remove hardcoding of 8 nodes
self.block_until_number_of_known_nodes_is(8, timeout=self.DEFAULT_EXECUTION_TIMEOUT, learn_on_this_thread=True)
target_nodes = treasuremap.find_matching_nodes(known_nodes=self.known_nodes,

View File

@ -18,12 +18,12 @@
from base64 import b64encode
import pytest
from umbral.keys import UmbralPublicKey
from nucypher.crypto.umbral_adapter import PublicKey
from nucypher.crypto.constants import HRAC_LENGTH
from nucypher.crypto.powers import DecryptingPower
from nucypher.network.nodes import Learner
from nucypher.policy.collections import TreasureMap
from nucypher.policy.maps import TreasureMap
from tests.utils.middleware import MockRestMiddleware
@ -84,13 +84,13 @@ def test_publish_and_get_treasure_map(blockchain_porter_rpc_controller,
idle_blockchain_policy):
# ensure that random treasure map cannot be obtained since not available
with pytest.raises(TreasureMap.NowhereToBeFound):
random_bob_encrypting_key = UmbralPublicKey.from_bytes(
random_bob_encrypting_key = PublicKey.from_bytes(
bytes.fromhex("026d1f4ce5b2474e0dae499d6737a8d987ed3c9ab1a55e00f57ad2d8e81fe9e9ac"))
random_treasure_map_id = "93a9482bdf3b4f2e9df906a35144ca84"
assert len(bytes.fromhex(random_treasure_map_id)) == HRAC_LENGTH # non-federated is 16 bytes
get_treasure_map_params = {
'treasure_map_id': random_treasure_map_id,
'bob_encrypting_key': random_bob_encrypting_key.hex()
'bob_encrypting_key': bytes(random_bob_encrypting_key).hex()
}
request_data = {'method': 'get_treasure_map', 'params': get_treasure_map_params}
blockchain_porter_rpc_controller.send(request_data)
@ -103,7 +103,7 @@ def test_publish_and_get_treasure_map(blockchain_porter_rpc_controller,
treasure_map = enacted_policy.treasure_map
publish_treasure_map_params = {
'treasure_map': b64encode(bytes(treasure_map)).decode(),
'bob_encrypting_key': blockchain_bob_encrypting_key.hex()
'bob_encrypting_key': bytes(blockchain_bob_encrypting_key).hex()
}
request_data = {'method': 'publish_treasure_map', 'params': publish_treasure_map_params}
response = blockchain_porter_rpc_controller.send(request_data)
@ -114,7 +114,7 @@ def test_publish_and_get_treasure_map(blockchain_porter_rpc_controller,
enacted_policy.label)
get_treasure_map_params = {
'treasure_map_id': map_id,
'bob_encrypting_key': blockchain_bob_encrypting_key.hex()
'bob_encrypting_key': bytes(blockchain_bob_encrypting_key).hex()
}
request_data = {'method': 'get_treasure_map', 'params': get_treasure_map_params}
response = blockchain_porter_rpc_controller.send(request_data)

View File

@ -19,12 +19,12 @@ import json
from base64 import b64encode
import pytest
from umbral.keys import UmbralPublicKey
from nucypher.crypto.umbral_adapter import PublicKey
from nucypher.crypto.constants import HRAC_LENGTH
from nucypher.crypto.powers import DecryptingPower
from nucypher.network.nodes import Learner
from nucypher.policy.collections import TreasureMap
from nucypher.policy.maps import TreasureMap
from tests.utils.middleware import MockRestMiddleware
@ -83,13 +83,13 @@ def test_publish_and_get_treasure_map(blockchain_porter_web_controller,
# ensure that random treasure map cannot be obtained since not available
with pytest.raises(TreasureMap.NowhereToBeFound):
random_bob_encrypting_key = UmbralPublicKey.from_bytes(
random_bob_encrypting_key = PublicKey.from_bytes(
bytes.fromhex("026d1f4ce5b2474e0dae499d6737a8d987ed3c9ab1a55e00f57ad2d8e81fe9e9ac"))
random_treasure_map_id = "93a9482bdf3b4f2e9df906a35144ca84"
assert len(bytes.fromhex(random_treasure_map_id)) == HRAC_LENGTH # non-federated is 16 bytes
get_treasure_map_params = {
'treasure_map_id': random_treasure_map_id,
'bob_encrypting_key': random_bob_encrypting_key.hex()
'bob_encrypting_key': bytes(random_bob_encrypting_key).hex()
}
blockchain_porter_web_controller.get('/get_treasure_map',
data=json.dumps(get_treasure_map_params))
@ -102,7 +102,7 @@ def test_publish_and_get_treasure_map(blockchain_porter_web_controller,
treasure_map = enacted_policy.treasure_map
publish_treasure_map_params = {
'treasure_map': b64encode(bytes(treasure_map)).decode(),
'bob_encrypting_key': blockchain_bob_encrypting_key.hex()
'bob_encrypting_key': bytes(blockchain_bob_encrypting_key).hex()
}
response = blockchain_porter_web_controller.post('/publish_treasure_map', data=json.dumps(publish_treasure_map_params))
assert response.status_code == 200
@ -114,7 +114,7 @@ def test_publish_and_get_treasure_map(blockchain_porter_web_controller,
enacted_policy.label)
get_treasure_map_params = {
'treasure_map_id': map_id,
'bob_encrypting_key': blockchain_bob_encrypting_key.hex()
'bob_encrypting_key': bytes(blockchain_bob_encrypting_key).hex()
}
response = blockchain_porter_web_controller.get('/get_treasure_map',
data=json.dumps(get_treasure_map_params))

View File

@ -16,11 +16,11 @@
"""
import pytest
from umbral.keys import UmbralPublicKey
from nucypher.crypto.umbral_adapter import PublicKey
from nucypher.crypto.constants import HRAC_LENGTH
from nucypher.crypto.powers import DecryptingPower
from nucypher.policy.collections import TreasureMap
from nucypher.policy.maps import TreasureMap
from tests.utils.middleware import MockRestMiddleware
@ -78,7 +78,7 @@ def test_publish_and_get_treasure_map(blockchain_porter,
idle_blockchain_policy):
# ensure that random treasure map cannot be obtained since not available
with pytest.raises(TreasureMap.NowhereToBeFound):
random_bob_encrypting_key = UmbralPublicKey.from_bytes(
random_bob_encrypting_key = PublicKey.from_bytes(
bytes.fromhex("026d1f4ce5b2474e0dae499d6737a8d987ed3c9ab1a55e00f57ad2d8e81fe9e9ac"))
random_treasure_map_id = "93a9482bdf3b4f2e9df906a35144ca84"
assert len(bytes.fromhex(random_treasure_map_id)) == HRAC_LENGTH # non-federated is 16 bytes

View File

@ -18,11 +18,11 @@
from base64 import b64encode, b64decode
import pytest
from umbral.keys import UmbralPublicKey
from nucypher.crypto.umbral_adapter import PublicKey
from nucypher.crypto.powers import DecryptingPower
from nucypher.network.nodes import Learner
from nucypher.policy.collections import TreasureMap
from nucypher.policy.maps import TreasureMap
# should always be first test due to checks on response id
@ -80,24 +80,59 @@ def test_publish_and_get_treasure_map(federated_porter_rpc_controller,
federated_alice,
federated_bob,
enacted_federated_policy):
random_bob_encrypting_key = UmbralPublicKey.from_bytes(
random_bob_encrypting_key = PublicKey.from_bytes(
bytes.fromhex("026d1f4ce5b2474e0dae499d6737a8d987ed3c9ab1a55e00f57ad2d8e81fe9e9ac"))
random_treasure_map_id = "f6ec73c93084ce91d5542a4ba6070071f5565112fe19b26ae9c960f9d658903a" # federated is 32 bytes
random_treasure_map = b64decode("Qld7S8sbKFCv2B8KxfJo4oxiTOjZ4VPyqTK5K1xK6DND6TbLg2hvlGaMV69aiiC5QfadB82w/5q1"
"Sw+SNFHN2esWgAbs38QuUVUGCzDoWzQAAAGIAuhw12ZiPMNV8LaeWV8uUN+au2HGOjWilqtKsaP9f"
"mnLAzFiTUAu9/VCxOLOQE88BPoWk1H7OxRLDEhnBVYyflpifKbOYItwLLTtWYVFRY90LtNSAzS8d3v"
"NH4c3SHSZwYsCKY+5LvJ68GD0CqhydSxCcGckh0unttHrYGSOQsURUI4AAAEBsSMlukjA1WyYA+Fouq"
"kuRtk8bVHcYLqRUkK2n6dShEUGMuY1SzcAbBINvJYmQp+hhzK5m47AzCl463emXepYZQC/evytktG7y"
"Xxd3k8Ak+Qr7T4+G2VgJl4YrafTpIT6wowd+8u/SMSrrf/M41OhtLeBC4uDKjO3rYBQfVLTpEAgiX/9"
"jxB80RtNMeCwgcieviAR5tlw2IlxVTEhxXbFeopcOZmfEuhVWqgBUfIakqsNCXkkubV0XS2l5G1vtTM8"
"oNML0rP8PyKd4+0M5N6P/EQqFkHH93LCDD0IQBq9usm3MoJp0eT8N3m5gprI05drDh2xe/W6qnQfw3YXn"
"jdvf2A=")
random_treasure_map_id = "cc1c29dd2305483cc838cbcc5ecb5ef6edfd69ecadb0aa52b6b084b630989187" # federated is 32 bytes
random_treasure_map = b64decode("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")
# ensure that random treasure map cannot be obtained since not available
with pytest.raises(TreasureMap.NowhereToBeFound):
get_treasure_map_params = {
'treasure_map_id': random_treasure_map_id,
'bob_encrypting_key': random_bob_encrypting_key.hex()
'bob_encrypting_key': bytes(random_bob_encrypting_key).hex()
}
request_data = {'method': 'get_treasure_map', 'params': get_treasure_map_params}
federated_porter_rpc_controller.send(request_data)
@ -105,7 +140,7 @@ def test_publish_and_get_treasure_map(federated_porter_rpc_controller,
# publish the random treasure map
publish_treasure_map_params = {
'treasure_map': b64encode(bytes(random_treasure_map)).decode(),
'bob_encrypting_key': random_bob_encrypting_key.hex()
'bob_encrypting_key': bytes(random_bob_encrypting_key).hex()
}
request_data = {'method': 'publish_treasure_map', 'params': publish_treasure_map_params}
response = federated_porter_rpc_controller.send(request_data)
@ -114,7 +149,7 @@ def test_publish_and_get_treasure_map(federated_porter_rpc_controller,
# try getting the random treasure map now
get_treasure_map_params = {
'treasure_map_id': random_treasure_map_id,
'bob_encrypting_key': random_bob_encrypting_key.hex()
'bob_encrypting_key': bytes(random_bob_encrypting_key).hex()
}
request_data = {'method': 'get_treasure_map', 'params': get_treasure_map_params}
response = federated_porter_rpc_controller.send(request_data)
@ -126,7 +161,7 @@ def test_publish_and_get_treasure_map(federated_porter_rpc_controller,
enacted_federated_policy.label)
get_treasure_map_params = {
'treasure_map_id': map_id,
'bob_encrypting_key': federated_bob.public_keys(DecryptingPower).hex()
'bob_encrypting_key': bytes(federated_bob.public_keys(DecryptingPower)).hex()
}
request_data = {'method': 'get_treasure_map', 'params': get_treasure_map_params}
response = federated_porter_rpc_controller.send(request_data)

View File

@ -19,11 +19,11 @@ import json
from base64 import b64decode, b64encode
import pytest
from umbral.keys import UmbralPublicKey
from nucypher.crypto.umbral_adapter import PublicKey
from nucypher.crypto.powers import DecryptingPower
from nucypher.network.nodes import Learner
from nucypher.policy.collections import TreasureMap
from nucypher.policy.maps import TreasureMap
def test_get_ursulas(federated_porter_web_controller, federated_ursulas):
@ -79,31 +79,66 @@ def test_publish_and_get_treasure_map(federated_porter_web_controller,
response = federated_porter_web_controller.post('/publish_treasure_map', data=json.dumps({'bad': 'input'}))
assert response.status_code == 400
random_bob_encrypting_key = UmbralPublicKey.from_bytes(
random_bob_encrypting_key = PublicKey.from_bytes(
bytes.fromhex("026d1f4ce5b2474e0dae499d6737a8d987ed3c9ab1a55e00f57ad2d8e81fe9e9ac"))
random_treasure_map_id = "f6ec73c93084ce91d5542a4ba6070071f5565112fe19b26ae9c960f9d658903a" # federated is 32 bytes
random_treasure_map = b64decode("Qld7S8sbKFCv2B8KxfJo4oxiTOjZ4VPyqTK5K1xK6DND6TbLg2hvlGaMV69aiiC5QfadB82w/5q1"
"Sw+SNFHN2esWgAbs38QuUVUGCzDoWzQAAAGIAuhw12ZiPMNV8LaeWV8uUN+au2HGOjWilqtKsaP9f"
"mnLAzFiTUAu9/VCxOLOQE88BPoWk1H7OxRLDEhnBVYyflpifKbOYItwLLTtWYVFRY90LtNSAzS8d3v"
"NH4c3SHSZwYsCKY+5LvJ68GD0CqhydSxCcGckh0unttHrYGSOQsURUI4AAAEBsSMlukjA1WyYA+Fouq"
"kuRtk8bVHcYLqRUkK2n6dShEUGMuY1SzcAbBINvJYmQp+hhzK5m47AzCl463emXepYZQC/evytktG7y"
"Xxd3k8Ak+Qr7T4+G2VgJl4YrafTpIT6wowd+8u/SMSrrf/M41OhtLeBC4uDKjO3rYBQfVLTpEAgiX/9"
"jxB80RtNMeCwgcieviAR5tlw2IlxVTEhxXbFeopcOZmfEuhVWqgBUfIakqsNCXkkubV0XS2l5G1vtTM8"
"oNML0rP8PyKd4+0M5N6P/EQqFkHH93LCDD0IQBq9usm3MoJp0eT8N3m5gprI05drDh2xe/W6qnQfw3YXn"
"jdvf2A=")
random_treasure_map_id = "cc1c29dd2305483cc838cbcc5ecb5ef6edfd69ecadb0aa52b6b084b630989187" # federated is 32 bytes
random_treasure_map = b64decode("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")
# ensure that random treasure map cannot be obtained since not available
with pytest.raises(TreasureMap.NowhereToBeFound):
get_treasure_map_params = {
'treasure_map_id': random_treasure_map_id,
'bob_encrypting_key': random_bob_encrypting_key.hex()
'bob_encrypting_key': bytes(random_bob_encrypting_key).hex()
}
federated_porter_web_controller.get('/get_treasure_map', data=json.dumps(get_treasure_map_params))
# publish the random treasure map
publish_treasure_map_params = {
'treasure_map': b64encode(bytes(random_treasure_map)).decode(),
'bob_encrypting_key': random_bob_encrypting_key.hex()
'bob_encrypting_key': bytes(random_bob_encrypting_key).hex()
}
response = federated_porter_web_controller.post('/publish_treasure_map',
data=json.dumps(publish_treasure_map_params))
@ -114,7 +149,7 @@ def test_publish_and_get_treasure_map(federated_porter_web_controller,
# try getting the random treasure map now
get_treasure_map_params = {
'treasure_map_id': random_treasure_map_id,
'bob_encrypting_key': random_bob_encrypting_key.hex()
'bob_encrypting_key': bytes(random_bob_encrypting_key).hex()
}
response = federated_porter_web_controller.get('/get_treasure_map',
data=json.dumps(get_treasure_map_params))
@ -127,7 +162,7 @@ def test_publish_and_get_treasure_map(federated_porter_web_controller,
enacted_federated_policy.label)
get_treasure_map_params = {
'treasure_map_id': map_id,
'bob_encrypting_key': federated_bob.public_keys(DecryptingPower).hex()
'bob_encrypting_key': bytes(federated_bob.public_keys(DecryptingPower)).hex()
}
response = federated_porter_web_controller.get('/get_treasure_map',
data=json.dumps(get_treasure_map_params))
@ -147,23 +182,58 @@ def test_endpoints_basic_auth(federated_porter_basic_auth_web_controller):
response = federated_porter_basic_auth_web_controller.get('/get_ursulas', data=json.dumps(get_ursulas_params))
assert response.status_code == 401 # user unauthorized
random_bob_encrypting_key = UmbralPublicKey.from_bytes(
random_bob_encrypting_key = PublicKey.from_bytes(
bytes.fromhex("026d1f4ce5b2474e0dae499d6737a8d987ed3c9ab1a55e00f57ad2d8e81fe9e9ac"))
random_treasure_map_id = "f6ec73c93084ce91d5542a4ba6070071f5565112fe19b26ae9c960f9d658903a" # federated is 32 bytes
random_treasure_map = b64decode("Qld7S8sbKFCv2B8KxfJo4oxiTOjZ4VPyqTK5K1xK6DND6TbLg2hvlGaMV69aiiC5QfadB82w/5q1"
"Sw+SNFHN2esWgAbs38QuUVUGCzDoWzQAAAGIAuhw12ZiPMNV8LaeWV8uUN+au2HGOjWilqtKsaP9f"
"mnLAzFiTUAu9/VCxOLOQE88BPoWk1H7OxRLDEhnBVYyflpifKbOYItwLLTtWYVFRY90LtNSAzS8d3v"
"NH4c3SHSZwYsCKY+5LvJ68GD0CqhydSxCcGckh0unttHrYGSOQsURUI4AAAEBsSMlukjA1WyYA+Fouq"
"kuRtk8bVHcYLqRUkK2n6dShEUGMuY1SzcAbBINvJYmQp+hhzK5m47AzCl463emXepYZQC/evytktG7y"
"Xxd3k8Ak+Qr7T4+G2VgJl4YrafTpIT6wowd+8u/SMSrrf/M41OhtLeBC4uDKjO3rYBQfVLTpEAgiX/9"
"jxB80RtNMeCwgcieviAR5tlw2IlxVTEhxXbFeopcOZmfEuhVWqgBUfIakqsNCXkkubV0XS2l5G1vtTM8"
"oNML0rP8PyKd4+0M5N6P/EQqFkHH93LCDD0IQBq9usm3MoJp0eT8N3m5gprI05drDh2xe/W6qnQfw3YXn"
"jdvf2A=")
random_treasure_map_id = "cc1c29dd2305483cc838cbcc5ecb5ef6edfd69ecadb0aa52b6b084b630989187" # federated is 32 bytes
random_treasure_map = b64decode("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")
# /get_treasure_map
get_treasure_map_params = {
'treasure_map_id': random_treasure_map_id,
'bob_encrypting_key': random_bob_encrypting_key.hex()
'bob_encrypting_key': bytes(random_bob_encrypting_key).hex()
}
response = federated_porter_basic_auth_web_controller.get('/get_treasure_map', data=json.dumps(get_treasure_map_params))
assert response.status_code == 401 # user not authenticated
@ -171,7 +241,7 @@ def test_endpoints_basic_auth(federated_porter_basic_auth_web_controller):
# /publish_treasure_map
publish_treasure_map_params = {
'treasure_map': b64encode(bytes(random_treasure_map)).decode(),
'bob_encrypting_key': random_bob_encrypting_key.hex()
'bob_encrypting_key': bytes(random_bob_encrypting_key).hex()
}
response = federated_porter_basic_auth_web_controller.post('/publish_treasure_map',
data=json.dumps(publish_treasure_map_params))

View File

@ -17,10 +17,10 @@
from base64 import b64decode
import pytest
from umbral.keys import UmbralPublicKey
from nucypher.crypto.umbral_adapter import PublicKey
from nucypher.crypto.powers import DecryptingPower
from nucypher.policy.collections import TreasureMap
from nucypher.policy.maps import TreasureMap
def test_get_ursulas(federated_porter, federated_ursulas):
@ -68,18 +68,53 @@ def test_get_ursulas(federated_porter, federated_ursulas):
def test_publish_and_get_treasure_map(federated_porter, federated_alice, federated_bob, enacted_federated_policy):
random_bob_encrypting_key = UmbralPublicKey.from_bytes(
random_bob_encrypting_key = PublicKey.from_bytes(
bytes.fromhex("026d1f4ce5b2474e0dae499d6737a8d987ed3c9ab1a55e00f57ad2d8e81fe9e9ac"))
random_treasure_map_id = "f6ec73c93084ce91d5542a4ba6070071f5565112fe19b26ae9c960f9d658903a" # federated is 32 bytes
random_treasure_map = b64decode("Qld7S8sbKFCv2B8KxfJo4oxiTOjZ4VPyqTK5K1xK6DND6TbLg2hvlGaMV69aiiC5QfadB82w/5q1"
"Sw+SNFHN2esWgAbs38QuUVUGCzDoWzQAAAGIAuhw12ZiPMNV8LaeWV8uUN+au2HGOjWilqtKsaP9f"
"mnLAzFiTUAu9/VCxOLOQE88BPoWk1H7OxRLDEhnBVYyflpifKbOYItwLLTtWYVFRY90LtNSAzS8d3v"
"NH4c3SHSZwYsCKY+5LvJ68GD0CqhydSxCcGckh0unttHrYGSOQsURUI4AAAEBsSMlukjA1WyYA+Fouq"
"kuRtk8bVHcYLqRUkK2n6dShEUGMuY1SzcAbBINvJYmQp+hhzK5m47AzCl463emXepYZQC/evytktG7y"
"Xxd3k8Ak+Qr7T4+G2VgJl4YrafTpIT6wowd+8u/SMSrrf/M41OhtLeBC4uDKjO3rYBQfVLTpEAgiX/9"
"jxB80RtNMeCwgcieviAR5tlw2IlxVTEhxXbFeopcOZmfEuhVWqgBUfIakqsNCXkkubV0XS2l5G1vtTM8"
"oNML0rP8PyKd4+0M5N6P/EQqFkHH93LCDD0IQBq9usm3MoJp0eT8N3m5gprI05drDh2xe/W6qnQfw3YXn"
"jdvf2A=")
random_treasure_map_id = "cc1c29dd2305483cc838cbcc5ecb5ef6edfd69ecadb0aa52b6b084b630989187" # federated is 32 bytes
random_treasure_map = b64decode("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")
# ensure that random treasure map cannot be obtained since not available
with pytest.raises(TreasureMap.NowhereToBeFound):

View File

@ -18,12 +18,13 @@ import os
from base64 import b64encode
import pytest
from umbral.keys import UmbralPrivateKey
from nucypher.characters.control.specifications.fields import TreasureMap
from nucypher.control.specifications.exceptions import InvalidArgumentCombo, InvalidInputData
from nucypher.crypto.constants import ENCRYPTED_KFRAG_PAYLOAD_LENGTH
from nucypher.crypto.powers import DecryptingPower
from nucypher.policy.collections import WorkOrder as WorkOrderClass
from nucypher.crypto.umbral_adapter import SecretKey
from nucypher.policy.orders import WorkOrder as WorkOrderClass
from nucypher.policy.policies import Arrangement
from nucypher.utilities.porter.control.specifications.fields.ursulainfo import UrsulaInfo
from nucypher.utilities.porter.control.specifications.porter_schema import (
@ -139,7 +140,7 @@ def test_alice_get_ursulas_schema(get_random_checksum_address):
ursula_info = {
"checksum_address": get_random_checksum_address(),
"uri": f"https://127.0.0.1:{port+i}",
"encrypting_key": UmbralPrivateKey.gen_key().pubkey
"encrypting_key": SecretKey.random().public_key()
}
ursulas_info.append(ursula_info)
@ -269,19 +270,24 @@ def test_bob_exec_work_order(mock_ursula_reencrypts,
federated_ursulas,
get_random_checksum_address,
federated_bob,
federated_alice):
federated_alice,
random_policy_label):
# Setup
ursula = list(federated_ursulas)[0]
tasks = [mock_ursula_reencrypts(ursula) for _ in range(3)]
material = [(task.capsule, task.signature, task.cfrag, task.cfrag_signature) for task in tasks]
capsules, signatures, cfrags, cfrag_signatures = zip(*material)
arrangement_id = os.urandom(Arrangement.ID_LENGTH)
work_order = WorkOrderClass.construct_by_bob(arrangement_id=arrangement_id,
mock_kfrag = os.urandom(ENCRYPTED_KFRAG_PAYLOAD_LENGTH)
# Test construction of WorkOrders by Bob
work_order = WorkOrderClass.construct_by_bob(encrypted_kfrag=mock_kfrag,
bob=federated_bob,
alice_verifying=federated_alice.stamp.as_umbral_pubkey(),
relayer_verifying_key=federated_alice.stamp.as_umbral_pubkey(),
alice_verifying_key=federated_alice.stamp.as_umbral_pubkey(),
ursula=ursula,
capsules=capsules)
capsules=capsules,
label=random_policy_label)
# Test Work Order
work_order_bytes = work_order.payload()

View File

@ -19,8 +19,7 @@ from base64 import b64encode, b64decode
import maya
import pytest
from umbral.keys import UmbralPrivateKey
from umbral.signing import Signer
from nucypher.crypto.umbral_adapter import SecretKey, Signer
from nucypher.crypto.kits import UmbralMessageKit as UmbralMessageKitClass
@ -97,22 +96,22 @@ def test_date_time():
def test_key():
field = Key()
umbral_pub_key = UmbralPrivateKey.gen_key().pubkey
other_umbral_pub_key = UmbralPrivateKey.gen_key().pubkey
umbral_pub_key = SecretKey.random().public_key()
other_umbral_pub_key = SecretKey.random().public_key()
serialized = field._serialize(value=umbral_pub_key, attr=None, obj=None)
assert serialized == bytes(umbral_pub_key).hex()
assert serialized != bytes(other_umbral_pub_key).hex()
deserialized = field._deserialize(value=serialized, attr=None, data=None)
assert deserialized == umbral_pub_key
assert deserialized != other_umbral_pub_key
assert deserialized == bytes(umbral_pub_key)
assert deserialized != bytes(other_umbral_pub_key)
field._validate(value=umbral_pub_key.to_bytes())
field._validate(value=other_umbral_pub_key.to_bytes())
field._validate(value=bytes(umbral_pub_key))
field._validate(value=bytes(other_umbral_pub_key))
with pytest.raises(InvalidInputData):
field._validate(value=b"UmbralPublicKey")
field._validate(value=b"PublicKey")
def test_umbral_message_kit(enacted_federated_policy, federated_alice):
@ -139,12 +138,12 @@ def test_umbral_message_kit(enacted_federated_policy, federated_alice):
def test_umbral_signature():
umbral_priv_key = UmbralPrivateKey.gen_key()
umbral_priv_key = SecretKey.random()
signer = Signer(umbral_priv_key)
message = b'this is a message'
signature = signer(message)
other_signature = signer(b'this is a different message')
signature = signer.sign(message)
other_signature = signer.sign(b'this is a different message')
field = UmbralSignature()
serialized = field._serialize(value=signature, attr=None, obj=None)

View File

@ -18,11 +18,10 @@ import os
from base64 import b64encode
import pytest
from bytestring_splitter import VariableLengthBytestring
from nucypher.control.specifications.exceptions import InvalidInputData
from nucypher.policy.collections import WorkOrder as WorkOrderClass
from nucypher.policy.policies import Arrangement
from nucypher.crypto.constants import ENCRYPTED_KFRAG_PAYLOAD_LENGTH
from nucypher.policy.orders import WorkOrder as WorkOrderClass
from nucypher.utilities.porter.control.specifications.fields import (
TreasureMapID,
UrsulaChecksumAddress,
@ -79,19 +78,24 @@ def test_work_order_field(mock_ursula_reencrypts,
federated_ursulas,
get_random_checksum_address,
federated_bob,
federated_alice):
federated_alice,
random_policy_label):
# Setup
ursula = list(federated_ursulas)[0]
tasks = [mock_ursula_reencrypts(ursula) for _ in range(3)]
material = [(task.capsule, task.signature, task.cfrag, task.cfrag_signature) for task in tasks]
capsules, signatures, cfrags, cfrag_signatures = zip(*material)
arrangement_id = os.urandom(Arrangement.ID_LENGTH)
work_order = WorkOrderClass.construct_by_bob(arrangement_id=arrangement_id,
mock_kfrag = os.urandom(ENCRYPTED_KFRAG_PAYLOAD_LENGTH)
# Test construction of WorkOrders by Bob
work_order = WorkOrderClass.construct_by_bob(encrypted_kfrag=mock_kfrag,
bob=federated_bob,
alice_verifying=federated_alice.stamp.as_umbral_pubkey(),
relayer_verifying_key=federated_alice.stamp.as_umbral_pubkey(),
alice_verifying_key=federated_alice.stamp.as_umbral_pubkey(),
ursula=ursula,
capsules=capsules)
capsules=capsules,
label=random_policy_label)
# Test Work Order
work_order_bytes = work_order.payload()
@ -108,7 +112,7 @@ def test_work_order_field(mock_ursula_reencrypts,
cfrag_byte_stream = bytes()
for cfrag in cfrags:
reencryption_signature = ursula.stamp(bytes(cfrag))
cfrag_byte_stream += VariableLengthBytestring(cfrag) + reencryption_signature
cfrag_byte_stream += bytes(cfrag) + bytes(reencryption_signature)
field = WorkOrderResult()
serialized = field._serialize(value=cfrag_byte_stream, attr=None, obj=None)