Exemplo n.º 1
0
def test_deserializer_from_activate():
    # To test deserialization - we need to start with a different message-type and then convert
    # back to a generic message...
    token = "TOKEN12345"
    seq_id = 0x1234567890ABCDEF
    send_id = 0x5F5F5F5F5F5F5F5F

    x = pySRUPLib.SRUP_Activate()
    y = pySRUPLib.SRUP_Generic()

    x.token = token
    x.sequence_id = seq_id
    x.sender_id = send_id

    assert x.sign(keyfile) is True
    z = x.serialize()

    assert y.deserialize(z) is True

    # Remember we can't verify the generic message...
    assert y.verify(pubkeyfile) is False

    assert y.sender_id == send_id
    assert y.sequence_id == seq_id

    assert y.token == token
Exemplo n.º 2
0
def test_generic_serializer():
    # Similarly we can't serialize a generic message...
    x = pySRUPLib.SRUP_Generic()
    x.token = "TOKEN12345"
    x.sequence_id = 0x1234567890ABCDEF
    x.sender_id = 0x5F5F5F5F5F5F5F5F
    assert x.sign(keyfile) is False
Exemplo n.º 3
0
def test_deserializer_from_data():
    # To test deserialization - we need to start with a different message-type and then convert
    # back to a generic message...
    token = "TOKEN12345"
    seq_id = 0x1234567890ABCDEF
    send_id = 0x5F5F5F5F5F5F5F5F

    data = "This is some data that I might store in the data field"
    data_id = "A string"

    x = pySRUPLib.SRUP_Data()
    y = pySRUPLib.SRUP_Generic()

    x.token = token
    x.sequence_id = seq_id
    x.sender_id = send_id
    x.bytes_data = data
    x.data_id = data_id

    assert x.sign(keyfile) is True
    z = x.serialize()

    assert y.deserialize(z) is True

    # Remember we can't verify the generic message...
    assert y.verify(pubkeyfile) is False

    assert y.sender_id == send_id
    assert y.sequence_id == seq_id

    assert y.token == token
Exemplo n.º 4
0
def test_deserializer_from_init():
    # To test deserialization - we need to start with a different message-type and then convert
    # back to a generic message...
    token = "TOKEN12345"
    seq_id = 0x1234567890ABCDEF
    send_id = 0x5F5F5F5F5F5F5F5F

    url = "https://google.com"
    digest = "THIS IS A TEST VALUE FOR THE DIGEST"
    target = 0x7F7F7F7F7F7F7F7F

    x = pySRUPLib.SRUP_Initiate()
    y = pySRUPLib.SRUP_Generic()

    x.token = token
    x.sequence_id = seq_id
    x.sender_id = send_id
    x.url = url
    x.digest = digest
    x.target = target

    assert x.sign(keyfile) is True
    z = x.serialize()

    assert y.deserialize(z) is True

    # Remember we can't verify the generic message...
    assert y.verify(pubkeyfile) is False

    assert y.sender_id == send_id
    assert y.sequence_id == seq_id

    assert y.token == token
Exemplo n.º 5
0
def test_ID_request_generic_deserializer():
    token = "TOKEN12345"
    seq_id = 0x1234567890ABCDEF
    send_id = 0x5F5F5F5F5F5F5F5F

    x = pySRUPLib.SRUP_ID_Request()
    i = pySRUPLib.SRUP_Generic()

    x.token = token
    x.sequence_id = seq_id
    x.sender_id = send_id

    assert x.sign(keyfile) is True
    z = x.serialize()

    assert i.deserialize(z) is True
    assert i.msg_type == pySRUPLib.__id_request_message_type()
def test_syndicated_terminate_generic_deserializer():
    token = "TOKEN12345"
    seq_id = 0x1234567890ABCDEF
    send_id = 0x5F5F5F5F5F5F5F5F

    x = pySRUPLib.SRUP_Syndicated_Terminate()
    i = pySRUPLib.SRUP_Generic()

    x.token = token
    x.sequence_id = seq_id
    x.sender_id = send_id

    assert x.sign(keyfile) is True
    z = x.serialize()

    assert i.deserialize(z) is True
    assert i.msg_type == pySRUPLib.__syndicated_terminate_message_type()
Exemplo n.º 7
0
def action_test_generic_deserializer():
    token = "TOKEN12345"
    action_id = 7
    seq_id = 0x1234567890ABCDEF
    send_id = 0x5F5F5F5F5F5F5F5F

    x = pySRUPLib.SRUP_Action()
    i = pySRUPLib.SRUP_Generic()

    x.action_id = action_id
    x.token = token
    x.sequence_id = seq_id
    x.sender_id = send_id

    assert x.sign(keyfile) is True
    z = x.serialize()

    assert i.deserialize(z) is True
    assert i.msg_type == pySRUPLib.__action_message_type()
Exemplo n.º 8
0
def test_generic_signing():
    # Note: the protocol standard says we can't sign a generic message
    # (i.e. as we'd never send a generic message we'd sign the real message
    # and interpret as a generic on receipt
    blank = ""

    x = pySRUPLib.SRUP_Generic()
    assert x.sign(blank) is False
    assert x.sign(keyfile) is False

    x.token = "TOKEN12345"
    assert x.sign(keyfile) is False

    x.sequence_id = 0x1234567890ABCDEF
    assert x.sign(keyfile) is False

    x.sender_id = 0x5F5F5F5F5F5F5F5F
    assert x.sign(blank) is False
    assert x.sign(keyfile) is False
Exemplo n.º 9
0
def test_syndicated_dev_count_generic_deserializer():
    token = "TOKEN12345"
    seq_id = 0x1234567890ABCDEF
    send_id = 0x5F5F5F5F5F5F5F5F
    count = 0x12345678

    x = pySRUPLib.SRUP_Syndicated_Device_Count()
    i = pySRUPLib.SRUP_Generic()

    x.token = token
    x.sequence_id = seq_id
    x.sender_id = send_id
    x.count = count

    assert x.sign(keyfile) is True
    z = x.serialize()

    assert i.deserialize(z) is True
    assert i.msg_type == pySRUPLib.__syndicated_device_count_message_type()
Exemplo n.º 10
0
def test_syndication_request_generic_deserializer_keystring():
    token = "TOKEN12345"
    seq_id = 0x1234567890ABCDEF
    send_id = 0x5F5F5F5F5F5F5F5F
    data = "0123456789ABCDEF"

    x = pySRUPLib.SRUP_Syndication_Request()
    i = pySRUPLib.SRUP_Generic()

    x.token = token
    x.sequence_id = seq_id
    x.sender_id = send_id

    x.encrypt_keystring(data, pub_keystring)
    assert x.sign_keystring(priv_keystring) is True
    z = x.serialize()

    assert i.deserialize(z) is True
    assert i.msg_type == pySRUPLib.__syndication_request_message_type()
def test_join_request_generic_deserializer():
    token = "TOKEN12345"
    seq_id = 0x1234567890ABCDEF
    send_id = 0x5F5F5F5F5F5F5F5F
    data = "0123456789ABCDEF"

    x = pySRUPLib.SRUP_Human_Join_Response()
    i = pySRUPLib.SRUP_Generic()

    x.token = token
    x.sequence_id = seq_id
    x.sender_id = send_id

    x.encrypt(data, pubkeyfile)
    assert x.sign(keyfile) is True
    z = x.serialize()

    assert i.deserialize(z) is True
    assert i.msg_type == pySRUPLib.__human_join_response_message_type()
Exemplo n.º 12
0
def test_join_command_generic_deserializer():
    token = "TOKEN12345"
    seq_id = 0x1234567890ABCDEF
    send_id = 0x5F5F5F5F5F5F5F5F
    dev_id = 0x8383838383838383

    x = pySRUPLib.SRUP_Join_Command()
    i = pySRUPLib.SRUP_Generic()

    x.token = token
    x.sequence_id = seq_id
    x.sender_id = send_id
    x.device_id = dev_id

    assert x.sign(keyfile) is True
    z = x.serialize()

    assert i.deserialize(z) is True
    assert i.msg_type == pySRUPLib.__join_command_message_type()
Exemplo n.º 13
0
def test_initiate_generic_deserializer():
    token = "TOKEN12345"
    action_id = 7
    seq_id = 0x1234567890ABCDEF
    send_id = 0x5F5F5F5F5F5F5F5F
    status = pySRUPLib.SRUP_Response().srup_response_status_update_fail_file()

    x = pySRUPLib.SRUP_Response()
    i = pySRUPLib.SRUP_Generic()

    x.action_id = action_id
    x.token = token
    x.sequence_id = seq_id
    x.sender_id = send_id
    x.status = status

    assert x.sign(keyfile) is True
    z = x.serialize()

    assert i.deserialize(z) is True
    assert i.msg_type == pySRUPLib.__response_message_type()
Exemplo n.º 14
0
def test_syndicated_action_request_generic_deserializer():
    token = "TOKEN12345"
    seq_id = 0x1234567890ABCDEF
    send_id = 0x5F5F5F5F5F5F5F5F
    target_id = 0x76543210FEDCBA98
    action = 0x43

    x = pySRUPLib.SRUP_Syndicated_Action()
    i = pySRUPLib.SRUP_Generic()

    x.token = token
    x.sequence_id = seq_id
    x.sender_id = send_id
    x.target_id = target_id
    x.action_id = action

    assert x.sign(keyfile) is True
    z = x.serialize()

    assert i.deserialize(z) is True
    assert i.msg_type == pySRUPLib.__syndicated_action_message_type()
def test_syndication_init_generic_deserializer_keystring():
    token = "TOKEN12345"
    seq_id = 0x1234567890ABCDEF
    send_id = 0x5F5F5F5F5F5F5F5F
    data = "0123456789ABCDEF"
    url = "http://www.really-long-url.example.com/longpath/to/the/files/we_might/need.py"

    x = pySRUPLib.SRUP_Syndication_Init()
    i = pySRUPLib.SRUP_Generic()

    x.token = token
    x.sequence_id = seq_id
    x.sender_id = send_id
    x.url = url

    x.encrypt_keystring(data, pub_keystring)
    assert x.sign_keystring(priv_keystring) is True
    z = x.serialize()

    assert i.deserialize(z) is True
    assert i.msg_type == pySRUPLib.__syndication_init_message_type()
def test_join_request_generic_deserializer():
    token = "TOKEN12345"
    seq_id = 0x1234567890ABCDEF
    send_id = 0x5F5F5F5F5F5F5F5F
    data = "0123456789ABCDEF"
    joining_device_id = 0xABCF5F5F5F5F5F5F

    x = pySRUPLib.SRUP_Observation_Request()
    i = pySRUPLib.SRUP_Generic()

    x.token = token
    x.sequence_id = seq_id
    x.sender_id = send_id
    x.joining_device_id = joining_device_id

    x.encrypt(data, pubkeyfile)
    assert x.sign(keyfile) is True
    z = x.serialize()

    assert i.deserialize(z) is True
    assert i.msg_type == pySRUPLib.__observation_request_message_type()
Exemplo n.º 17
0
def test_generic_seqid():
    MAX_SEQID = 0xFFFFFFFFFFFFFFFF
    ZERO_SEQID = 0x00
    VALID_SEQID = 0x7FFFFFFFFFFFFFE7

    x = pySRUPLib.SRUP_Generic()

    x.sequence_id = MAX_SEQID
    assert x.sequence_id == MAX_SEQID

    x.sequence_id = VALID_SEQID
    assert x.sequence_id == VALID_SEQID

    x.sequence_id = ZERO_SEQID
    assert x.sequence_id == ZERO_SEQID

    with pytest.raises(OverflowError):
        x.sequence_id = MAX_SEQID + 1

    with pytest.raises(OverflowError):
        x.sequence_id = ZERO_SEQID - 1
Exemplo n.º 18
0
def test_generic_sender():
    MAX_SENDER = 0xFFFFFFFFFFFFFFFF
    ZERO_SENDER = 0x00
    VALID_SENDER = 0x7FFFFFFFFFFFFFE7

    x = pySRUPLib.SRUP_Generic()

    x.sender_id = MAX_SENDER
    assert x.sender_id == MAX_SENDER

    x.sender_id = VALID_SENDER
    assert x.sender_id == VALID_SENDER

    x.sender_id = ZERO_SENDER
    assert x.sender_id == ZERO_SENDER

    with pytest.raises(OverflowError):
        x.sender_id = MAX_SENDER + 1

    with pytest.raises(OverflowError):
        x.sender_id = ZERO_SENDER - 1
def test_syndicated_dev_list_generic_deserializer():
    token = "TOKEN12345"
    seq_id = 0x1234567890ABCDEF
    send_id = 0x5F5F5F5F5F5F5F5F
    dev_seq = 0x12345678
    dev_id = 0x7765412340ABCDEF

    x = pySRUPLib.SRUP_Syndicated_Device_List()
    i = pySRUPLib.SRUP_Generic()

    x.token = token
    x.sequence_id = seq_id
    x.sender_id = send_id
    x.device_sequence = dev_seq
    x.device_id = dev_id

    assert x.sign(keyfile) is True
    z = x.serialize()
    assert z is not None

    assert i.deserialize(z) is True
    assert i.msg_type == pySRUPLib.__syndicated_device_list_message_type()
Exemplo n.º 20
0
def test_data_generic_deserializer():
    token = "TOKEN12345"
    seq_id = 0x1234567890ABCDEF
    send_id = 0x5F5F5F5F5F5F5F5F
    data_id = "Text"
    data = "This is some text ..."

    x = pySRUPLib.SRUP_Data()
    i = pySRUPLib.SRUP_Generic()

    x.token = token
    x.sequence_id = seq_id
    x.sender_id = send_id
    x.data_id = data_id
    x.bytes_data = data

    assert x.sign(keyfile) is True
    z = x.serialize()
    assert z is not None

    assert i.deserialize(z) is True
    assert i.msg_type == pySRUPLib.__data_message_type()
Exemplo n.º 21
0
def test_initiate_generic_deserializer():
    token = "TOKEN12345"
    action_id = 7
    seq_id = 0x1234567890ABCDEF
    send_id = 0x5F5F5F5F5F5F5F5F
    digest = "8317c2d45ef7d42d7abe4f2eb5f53787e158b78680d67e99615b8799ef9936eb"
    url = "http://www.really-long-url.example.com/longpath/to/the/files/we_might/need.py"

    x = pySRUPLib.SRUP_Initiate()
    i = pySRUPLib.SRUP_Generic()

    x.action_id = action_id
    x.token = token
    x.sequence_id = seq_id
    x.sender_id = send_id
    x.digest = digest
    x.url = url

    assert x.sign(keyfile) is True
    z = x.serialize()

    assert i.deserialize(z) is True
    assert i.msg_type == pySRUPLib.__initiate_message_type()
Exemplo n.º 22
0
def test_c2_req_generic_deserializer():
    token = "TOKEN12345"
    seq_id = 0x1234567890ABCDEF
    send_id = 0x5F5F5F5F5F5F5F5F
    req_id = 0xF8
    data = "This is some text ..."
    source = 0x00011187643212356

    x = pySRUPLib.SRUP_Syndicated_C2_Request()
    i = pySRUPLib.SRUP_Generic()

    x.token = token
    x.sequence_id = seq_id
    x.sender_id = send_id
    x.req_id = req_id
    x.bytes_data = data
    x.source_id = source

    assert x.sign(keyfile) is True
    z = x.serialize()
    assert z is not None

    assert i.deserialize(z) is True
    assert i.msg_type == pySRUPLib.__syndicated_c2_request_message_type()
Exemplo n.º 23
0
    def __on_message(self, client, userdata, msg):
        # First check if the message is even for us...
        # Remembering that server's are wild...
        topic = None
        ch_topic = msg.topic
        if ch_topic[0:5] == 'SRUP/':
            topic = ch_topic[5:]

        # First check if the message is for us (or if we're a server read it anyway)
        if topic == self.__device_id or self.__isServer:
            SRUP_generic_message = pySRUPLib.SRUP_Generic()

            # if if deserializes then it's probably a SRUP message...
            if SRUP_generic_message.deserialize(msg.payload):

                # Did we send it? If so, ignore it...
                if SRUP_generic_message.sender_id != int(self.__device_id, 16):

                    # Check to see if we've had a message from this sender before (creating a counter if we haven't)
                    if SRUP_generic_message.sender_id not in self.__seq_id:
                        self.__seq_id.update(
                            {SRUP_generic_message.sender_id: 0})

                    # Get current sequence ID for this sender...
                    s = self.__seq_id[SRUP_generic_message.sender_id]

                    # Check to see the sequence ID of the message is greater than the last received message
                    # to avoid replay attack...
                    if SRUP_generic_message.sequence_id > s:

                        # Update the "last received" sequence ID for this sender...
                        self.__seq_id[
                            SRUP_generic_message.
                            sender_id] = SRUP_generic_message.sequence_id

                        msg_type = SRUP_generic_message.msg_type
                        if msg_type == SRUP_ACTION_MESSAGE_TYPE:
                            SRUP_action_message = pySRUPLib.SRUP_Action()
                            SRUP_action_message.deserialize(msg.payload)
                            if SRUP_action_message.verify(
                                    self.__remote_public_key):
                                self.__on_action(SRUP_action_message)
                            else:
                                # TODO: THROW A CUSTOM EXCEPTION
                                print("Message did not verify using {}".format(
                                    self.__remote_public_key))

                        elif msg_type == SRUP_DATA_MESSAGE_TYPE:
                            SRUP_data_message = pySRUPLib.SRUP_Data()
                            SRUP_data_message.deserialize(msg.payload)
                            if SRUP_data_message.verify(
                                    self.__remote_public_key):
                                self.__on_data(SRUP_data_message)
                            else:
                                # TODO: THROW A CUSTOM EXCEPTION
                                print("Message did not verify using {}".format(
                                    self.__remote_public_key))

                        elif msg_type == SRUP_INITIATE_MESSAGE_TYPE:
                            # Devices can't send init messages – so skip this if we're a server...
                            if not self.__isServer:
                                SRUP_initiate_message = pySRUPLib.SRUP_Initiate(
                                )
                                SRUP_initiate_message.deserialize(msg.payload)
                                if SRUP_initiate_message.verify(
                                        self.__remote_public_key):
                                    self.__on_initiate(SRUP_initiate_message)
                                else:
                                    # TODO: THROW A CUSTOM EXCEPTION
                                    print("Message did not verify using {}".
                                          format(self.__remote_public_key))

                        elif msg_type == SRUP_RESPONSE_MESSAGE_TYPE:
                            SRUP_response_message = pySRUPLib.SRUP_Response()
                            SRUP_response_message.deserialize(msg.payload)
                            if SRUP_response_message.verify(
                                    self.__remote_public_key):
                                self.__on_response(SRUP_response_message)
                            else:
                                # TODO: THROW A CUSTOM EXCEPTION
                                print("Message did not verify using {}".format(
                                    self.__remote_public_key))

                        elif msg_type == SRUP_ACTIVATE_MESSAGE_TYPE:
                            # Devices can't send activate messages either – so again, we'll skip if we're a server.
                            if not self.__isServer:
                                SRUP_activate_message = pySRUPLib.SRUP_Activate(
                                )
                                SRUP_activate_message.deserialize(msg.payload)
                                if SRUP_activate_message.verify(
                                        self.__remote_public_key):
                                    self.__on_activate(SRUP_activate_message)
                                else:
                                    # TODO: THROW A CUSTOM EXCEPTION
                                    print("Message did not verify using {}".
                                          format(self.__remote_public_key))
                        else:
                            # We have received a message type that we can't handle...
                            # TODO: THROW A CUSTOM EXCEPTION
                            print("Invalid message type or format")
                            print(SRUP_generic_message.sequence_id)

                    else:
                        # TODO: THROW A CUSTOM EXCEPTION
                        print("Sequence ID 0x{:02X} is invalid".format(
                            SRUP_generic_message.sequence_id))
                        # print("Message Type: {}".format(SRUP_generic_message.msg_type))
                else:
                    pass
                    # This is our own message – so ignore it...
            else:
                pass
                # TODO: Not a SRUP Message ...
        else:
            pass
Exemplo n.º 24
0
def test_generic_token():
    x = pySRUPLib.SRUP_Generic()
    assert x.token is None
    x.token = "TEST_TOKEN"
    assert x.token == "TEST_TOKEN"
Exemplo n.º 25
0
def test_invalid_deserialize():
    x = pySRUPLib.SRUP_Generic()
    junk = "12345".encode()
    q = x.deserialize(junk)
    assert q is False
Exemplo n.º 26
0
def test_empty_object():
    x = pySRUPLib.SRUP_Generic()
    assert x.token is None
    assert x.sequence_id is None
    assert x.sender_id is None
Exemplo n.º 27
0
def test_version():
    """Test the version returns the current version"""
    x = pySRUPLib.SRUP_Generic()
    assert x.version == pySRUPLib.__version()
Exemplo n.º 28
0
def test_response_type():
    x = pySRUPLib.SRUP_Generic()
    assert x.msg_type == pySRUPLib.__generic_message_type()