mirror of https://github.com/nucypher/nucypher.git
Merge pull request #2804 from fjarri/remove-unused-method
Remove unused method `Amonia.use_ursula_as_an_involuntary_and_unbeknownst_cdn`pull/2811/head
commit
59d653d647
|
@ -0,0 +1 @@
|
||||||
|
Remove an unused method of ``Amonia`` (deprecated since we do not store the treasure map on Ursulas anymore)
|
|
@ -178,50 +178,3 @@ class Amonia(Alice):
|
||||||
with patch("nucypher.policy.policies.BlockchainPolicy._publish_to_blockchain",
|
with patch("nucypher.policy.policies.BlockchainPolicy._publish_to_blockchain",
|
||||||
publish_wrong_payee_address_to_blockchain):
|
publish_wrong_payee_address_to_blockchain):
|
||||||
return super().grant(handpicked_ursulas=ursulas_to_trick_into_working_for_free, *args, **kwargs)
|
return super().grant(handpicked_ursulas=ursulas_to_trick_into_working_for_free, *args, **kwargs)
|
||||||
|
|
||||||
def use_ursula_as_an_involuntary_and_unbeknownst_cdn(self, policy, bob, sucker_ursula):
|
|
||||||
"""
|
|
||||||
Ursula is a sucker.
|
|
||||||
|
|
||||||
After I distract her, by paying for one Policy, maybe she'll store my copy of the Nicholas Cage remake of
|
|
||||||
The Wicker Man (I have neither the respect nor the inclination to trick her into storing the original 1973
|
|
||||||
version, which after all is a very decent film).
|
|
||||||
|
|
||||||
I'll make this work by fudging the HRAC a bit to create a new map ID which still appears to be connected
|
|
||||||
to the Policy for which I paid.
|
|
||||||
"""
|
|
||||||
# Here's the proper map associated with the policy for which I paid.
|
|
||||||
the_map = policy.treasure_map
|
|
||||||
|
|
||||||
# I'll make a copy of it to modify for use in this attack.
|
|
||||||
like_a_map_but_awful = EncryptedTreasureMap.from_bytes(bytes(the_map))
|
|
||||||
|
|
||||||
# I'll split the film up into segments, because I know Ursula checks that the file size is under 50k.
|
|
||||||
for i in range(50):
|
|
||||||
# I'll include a small portion of this awful film in a new message kit. We don't care about the signature for bob.
|
|
||||||
not_the_bees = b"Not the bees!" + int(i).to_bytes(length=4, byteorder="big")
|
|
||||||
like_a_map_but_awful._encrypted_tmap = MessageKit.author(
|
|
||||||
recipient_key=bob.public_keys(DecryptingPower),
|
|
||||||
plaintext=not_the_bees,
|
|
||||||
signer=self.stamp,
|
|
||||||
)
|
|
||||||
|
|
||||||
# Now I'll mess with the hrac just a bit.
|
|
||||||
bad_hrac = HRAC.from_bytes(bytes(the_map.hrac)[:15] + int(i).to_bytes(length=1, byteorder="big"))
|
|
||||||
# Also note that we only touch the last byte to demonstrate that this attack isn't possible
|
|
||||||
|
|
||||||
# I know Ursula checks the public signature because she thinks I'm Alice. So I'll sign my bad hrac.
|
|
||||||
like_a_map_but_awful._public_signature = self.stamp(bytes(self.stamp) + bytes(bad_hrac))
|
|
||||||
like_a_map_but_awful.hrac = bad_hrac
|
|
||||||
|
|
||||||
# I'll sign it again, so that it appears to match the policy for which I already paid.
|
|
||||||
transacting_power = self._crypto_power.power_ups(TransactingPower)
|
|
||||||
like_a_map_but_awful._blockchain_signature = EncryptedTreasureMap._sign(
|
|
||||||
blockchain_signer=transacting_power.sign_message,
|
|
||||||
public_signature=like_a_map_but_awful._public_signature,
|
|
||||||
hrac=like_a_map_but_awful.hrac,
|
|
||||||
encrypted_tmap=like_a_map_but_awful._encrypted_tmap)
|
|
||||||
|
|
||||||
# Sucker.
|
|
||||||
response = self.network_middleware.put_treasure_map_on_node(sucker_ursula, map_payload=bytes(like_a_map_but_awful))
|
|
||||||
return response
|
|
||||||
|
|
Loading…
Reference in New Issue