def setUp(self): """ A message to play with. """ self.uuid = str(uuid4()) self.node = "9876543210abcd".decode("hex") self.value = 1.234 self.timestamp = time.time() self.expires = self.timestamp + 1000 self.public_key = PUBLIC_KEY self.name = "a_human_readable_key_name" self.key = construct_key(self.public_key, self.name) self.meta = {"mime": "numeric", "description": "a test value"} self.sig = generate_signature(self.value, self.timestamp, self.expires, self.name, self.meta, PRIVATE_KEY) self.version = "0.1" self.message = "value" self.mock_value = Value( self.uuid, self.node, self.key, self.value, self.timestamp, self.expires, self.public_key, self.name, self.meta, self.sig, self.version, )
def setUp(self): """ Gives us some messages to play with. """ self.uuid = str(uuid4()) self.node = '9876543210abcd'.decode('hex') self.value = 1.234 self.timestamp = time.time() self.expires = self.timestamp + 1000 self.public_key = PUBLIC_KEY self.name = 'a_human_readable_key_name' self.key = construct_key(self.public_key, self.name) self.meta = { 'mime': 'numeric', 'description': 'a test value' } self.version = '0.1' self.sig = generate_signature(self.value, self.timestamp, self.expires, self.name, self.meta, self.version, PRIVATE_KEY) self.message = 'value' self.nodes = (('hash1', '127.0.0.1', 1908, '0.1'), ('hash2', '0.0.0.0', 1908, '0.1')) self.mock_message = Value(self.uuid, self.node, self.key, self.value, self.timestamp, self.expires, self.version, self.public_key, self.name, self.meta, self.sig, self.version)
def test_generate_signature(self): """ Ensures that the given values result in the expected signature given a certain private key and said signature can be validated with the related public key. """ expected = self.signature actual = generate_signature(self.value, self.timestamp, self.expires, self.name, self.meta, PRIVATE_KEY) self.assertEqual(expected, actual) # Check the resulting signature can be validated with the public key check = validate_signature(self.value, self.timestamp, self.expires, self.name, self.meta, expected, PUBLIC_KEY) self.assertEqual(True, check)
def send_store(self, contact, private_key, public_key, name, value, timestamp, expires, meta): """ Sends a Store message to the given contact. The value contained within the message is stored against a key derived from the public_key and name. Furthermore, the message is cryptographically signed using the value, timestamp, expires, name and meta values. """ uuid = str(uuid4()) signature = generate_signature(value, timestamp, expires, name, meta, private_key) compound_key = construct_key(public_key, name) store = Store(uuid, self.id, compound_key, value, timestamp, expires, public_key, name, meta, signature, self.version) return self.send_message(contact, store)