Merge pull request #436 from tuxxy/ursula-timestamp

Add timestamp on Ursula
pull/435/head
K Prasch 2018-09-28 12:20:41 -07:00 committed by GitHub
commit 8e61f19c55
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 17 additions and 8 deletions

View File

@ -368,7 +368,8 @@ class Bob(Character):
class Ursula(Character, VerifiableNode, Miner):
_internal_splitter = BytestringSplitter(Signature,
_internal_splitter = BytestringSplitter((int, 4, {'byteorder': 'big'}),
Signature,
VariableLengthBytestring,
(UmbralPublicKey, PUBLIC_KEY_LENGTH),
(UmbralPublicKey, PUBLIC_KEY_LENGTH),
@ -558,7 +559,10 @@ class Ursula(Character, VerifiableNode, Miner):
certificate = self.rest_server_certificate()
cert_vbytes = VariableLengthBytestring(certificate.public_bytes(Encoding.PEM))
as_bytes = bytes().join((bytes(self._interface_signature),
timestamp = maya.now().epoch.to_bytes(4, 'big')
as_bytes = bytes().join((timestamp,
bytes(self._interface_signature),
bytes(identity_evidence),
bytes(self.public_keys(SigningPower)),
bytes(self.public_keys(EncryptingPower)),
@ -592,7 +596,8 @@ class Ursula(Character, VerifiableNode, Miner):
federated_only: bool = False,
) -> 'Ursula':
(signature,
(timestamp,
signature,
identity_evidence,
verifying_key,
encrypting_key,
@ -623,7 +628,8 @@ class Ursula(Character, VerifiableNode, Miner):
stranger_ursulas = []
ursulas_attrs = cls._internal_splitter.repeat(ursulas_as_bytes)
for (signature,
for (timestamp,
signature,
identity_evidence,
verifying_key,
encrypting_key,

View File

@ -117,7 +117,7 @@ class VerifiableNode:
port=self.rest_information()[0].port)
if not response.status_code == 200:
raise RuntimeError("Or something.") # TODO: Raise an error here? Or return False? Or something?
signature, identity_evidence, verifying_key, encrypting_key, public_address, certificate_vbytes, rest_info = self._internal_splitter(response.content)
timestamp, signature, identity_evidence, verifying_key, encrypting_key, public_address, certificate_vbytes, rest_info = self._internal_splitter(response.content)
verifying_keys_match = verifying_key == self.public_keys(SigningPower)
encrypting_keys_match = encrypting_key == self.public_keys(EncryptingPower)

View File

@ -1,6 +1,9 @@
import pytest
from nucypher.characters.lawful import Ursula
@pytest.mark.skip("To be implemented.")
def test_serialize_ursula(ursulas):
assert False
def test_serialize_ursula(federated_ursulas):
ursula = federated_ursulas.pop()
ursula_as_bytes = bytes(ursula)
ursula_object = Ursula.from_bytes(ursula_as_bytes, federated_only=True)
assert ursula == ursula_object