mirror of https://github.com/nucypher/nucypher.git
TreasureMap touchups, including the value of m. See #238.
parent
06c1c6b06b
commit
4e86386caf
|
@ -114,18 +114,18 @@ class Policy(object):
|
||||||
"""
|
"""
|
||||||
_ursula = None
|
_ursula = None
|
||||||
|
|
||||||
def __init__(self, alice, bob=None, kfrags=(constants.UNKNOWN_KFRAG,), uri=None, m=None, alices_signature=constants.NOT_SIGNED):
|
def __init__(self, alice, bob=None, kfrags=(constants.UNKNOWN_KFRAG,),
|
||||||
|
label=None, m=None, alices_signature=constants.NOT_SIGNED):
|
||||||
|
|
||||||
"""
|
"""
|
||||||
:param kfrags: A list of KFrags to distribute per this Policy.
|
:param kfrags: A list of KFrags to distribute per this Policy.
|
||||||
:param uri: The identity of the resource to which Bob is granted access.
|
:param label: The identity of the resource to which Bob is granted access.
|
||||||
"""
|
"""
|
||||||
self.alice = alice
|
self.alice = alice
|
||||||
self.bob = bob
|
self.bob = bob
|
||||||
self.kfrags = kfrags
|
self.kfrags = kfrags
|
||||||
self.uri = uri
|
self.uri = label
|
||||||
self.m = m
|
self.treasure_map = TreasureMap(m=m)
|
||||||
self.treasure_map = TreasureMap()
|
|
||||||
self._accepted_arrangements = OrderedDict()
|
self._accepted_arrangements = OrderedDict()
|
||||||
|
|
||||||
self.alices_signature = alices_signature
|
self.alices_signature = alices_signature
|
||||||
|
@ -195,7 +195,7 @@ class Policy(object):
|
||||||
"""
|
"""
|
||||||
return keccak_digest(bytes(self.alice.stamp) + self.hrac())
|
return keccak_digest(bytes(self.alice.stamp) + self.hrac())
|
||||||
|
|
||||||
def publish_treasure_map(self, networky_stuff=None, use_dht=True):
|
def publish_treasure_map(self, networky_stuff=None, use_dht=False):
|
||||||
if networky_stuff is None and use_dht is False:
|
if networky_stuff is None and use_dht is False:
|
||||||
raise ValueError("Can't engage the REST swarm without networky stuff.")
|
raise ValueError("Can't engage the REST swarm without networky stuff.")
|
||||||
tmap_message_kit, signature_for_bob = self.alice.encrypt_for(
|
tmap_message_kit, signature_for_bob = self.alice.encrypt_for(
|
||||||
|
@ -210,10 +210,13 @@ class Policy(object):
|
||||||
map_id = self.treasure_map_dht_key()
|
map_id = self.treasure_map_dht_key()
|
||||||
|
|
||||||
if use_dht:
|
if use_dht:
|
||||||
|
# Instead of self.alice, let's say self.author. See #230.
|
||||||
setter = self.alice.server.set(map_id, constants.BYTESTRING_IS_TREASURE_MAP + map_payload)
|
setter = self.alice.server.set(map_id, constants.BYTESTRING_IS_TREASURE_MAP + map_payload)
|
||||||
event_loop = asyncio.get_event_loop()
|
event_loop = asyncio.get_event_loop()
|
||||||
event_loop.run_until_complete(setter)
|
event_loop.run_until_complete(setter)
|
||||||
else:
|
else:
|
||||||
|
if not self.alice.known_nodes:
|
||||||
|
raise RuntimeError("Alice hasn't learned of any nodes. Thus, she can't push the TreasureMap.")
|
||||||
for node in self.alice.known_nodes.values():
|
for node in self.alice.known_nodes.values():
|
||||||
response = networky_stuff.push_treasure_map_to_node(node, map_id, constants.BYTESTRING_IS_TREASURE_MAP + map_payload)
|
response = networky_stuff.push_treasure_map_to_node(node, map_id, constants.BYTESTRING_IS_TREASURE_MAP + map_payload)
|
||||||
# TODO: Do something here based on success or failure
|
# TODO: Do something here based on success or failure
|
||||||
|
@ -274,15 +277,20 @@ class Policy(object):
|
||||||
def public_key(self):
|
def public_key(self):
|
||||||
return self.alice.public_key(DelegatingPower)
|
return self.alice.public_key(DelegatingPower)
|
||||||
|
|
||||||
|
|
||||||
class TreasureMap(object):
|
class TreasureMap(object):
|
||||||
def __init__(self, ursula_interface_ids=None):
|
def __init__(self, m, ursula_interface_ids=None):
|
||||||
self.ids = ursula_interface_ids or []
|
self.m = m
|
||||||
|
self.ids = set(ursula_interface_ids or set())
|
||||||
|
|
||||||
def packed_payload(self):
|
def packed_payload(self):
|
||||||
return msgpack.dumps([bytes(ursula_id) for ursula_id in self.ids])
|
return msgpack.dumps(self.nodes_as_bytes() + [self.m])
|
||||||
|
|
||||||
|
def nodes_as_bytes(self):
|
||||||
|
return [bytes(ursula_id) for ursula_id in self.ids]
|
||||||
|
|
||||||
def add_ursula(self, ursula):
|
def add_ursula(self, ursula):
|
||||||
self.ids.append(ursula.interface_dht_key())
|
self.ids.add(bytes(ursula.stamp))
|
||||||
|
|
||||||
def __eq__(self, other):
|
def __eq__(self, other):
|
||||||
return self.ids == other.ids
|
return self.ids == other.ids
|
||||||
|
@ -319,7 +327,7 @@ class WorkOrder(object):
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def construct_by_bob(cls, kfrag_hrac, capsules, ursula, bob):
|
def construct_by_bob(cls, kfrag_hrac, capsules, ursula, bob):
|
||||||
receipt_bytes = b"wo:" + ursula.interface_dht_key() # TODO: represent the capsules as bytes and hash them as part of the receipt, ie + keccak_digest(b"".join(capsules)) - See #137
|
receipt_bytes = b"wo:" + ursula.interface_information() # TODO: represent the capsules as bytes and hash them as part of the receipt, ie + keccak_digest(b"".join(capsules)) - See #137
|
||||||
receipt_signature = bob.stamp(receipt_bytes)
|
receipt_signature = bob.stamp(receipt_bytes)
|
||||||
return cls(bob, kfrag_hrac, capsules, receipt_bytes, receipt_signature,
|
return cls(bob, kfrag_hrac, capsules, receipt_bytes, receipt_signature,
|
||||||
ursula)
|
ursula)
|
||||||
|
|
Loading…
Reference in New Issue