Esempio n. 1
0
    def __init__(self,
                 operation=None,
                 unique_batch_item_id=None,
                 request_payload=None,
                 message_extension=None):
        super(RequestBatchItem, self).__init__(tag=Tags.REQUEST_BATCH_ITEM)

        self.payload_factory = RequestPayloadFactory()

        self.operation = operation
        self.unique_batch_item_id = unique_batch_item_id
        self.request_payload = request_payload
        self.message_extension = message_extension
Esempio n. 2
0
class RequestBatchItem(Struct):

    def __init__(self,
                 operation=None,
                 unique_batch_item_id=None,
                 request_payload=None,
                 message_extension=None):
        super(self.__class__, self).__init__(tag=Tags.REQUEST_BATCH_ITEM)

        self.payload_factory = RequestPayloadFactory()

        self.operation = operation
        self.unique_batch_item_id = unique_batch_item_id
        self.request_payload = request_payload
        self.message_extension = message_extension

    def read(self, istream):
        super(self.__class__, self).read(istream)
        tstream = BytearrayStream(istream.read(self.length))

        # Read the batch item operation
        self.operation = contents.Operation()
        self.operation.read(tstream)

        # Read the unique batch item ID if it is present
        if self.is_tag_next(Tags.UNIQUE_BATCH_ITEM_ID, tstream):
            self.unique_batch_item_id = contents.UniqueBatchItemID()
            self.unique_batch_item_id.read(tstream)

        # Dynamically create the response payload class that belongs to the
        # operation
        self.request_payload = self.payload_factory.create(
            self.operation.enum)
        self.request_payload.read(tstream)

        # Read the message extension if it is present
        if self.is_tag_next(Tags.MESSAGE_EXTENSION, tstream):
            self.message_extension = contents.MessageExtension()
            self.message_extension.read(tstream)

        self.is_oversized(tstream)

    def write(self, ostream):
        tstream = BytearrayStream()

        # Write the contents of the batch item to the stream
        self.operation.write(tstream)

        if self.unique_batch_item_id is not None:
            self.unique_batch_item_id.write(tstream)

        self.request_payload.write(tstream)

        if self.message_extension is not None:
            self.message_extension.write(tstream)

        # Write the length and value of the batch item
        self.length = tstream.length()
        super(self.__class__, self).write(ostream)
        ostream.write(tstream.buffer)
Esempio n. 3
0
class RequestBatchItem(Struct):

    def __init__(self,
                 operation=None,
                 unique_batch_item_id=None,
                 request_payload=None,
                 message_extension=None):
        super(RequestBatchItem, self).__init__(tag=Tags.REQUEST_BATCH_ITEM)

        self.payload_factory = RequestPayloadFactory()

        self.operation = operation
        self.unique_batch_item_id = unique_batch_item_id
        self.request_payload = request_payload
        self.message_extension = message_extension

    def read(self, istream):
        super(RequestBatchItem, self).read(istream)
        tstream = BytearrayStream(istream.read(self.length))

        # Read the batch item operation
        self.operation = contents.Operation()
        self.operation.read(tstream)

        # Read the unique batch item ID if it is present
        if self.is_tag_next(Tags.UNIQUE_BATCH_ITEM_ID, tstream):
            self.unique_batch_item_id = contents.UniqueBatchItemID()
            self.unique_batch_item_id.read(tstream)

        # Dynamically create the response payload class that belongs to the
        # operation
        self.request_payload = self.payload_factory.create(
            self.operation.value)
        self.request_payload.read(tstream)

        # Read the message extension if it is present
        if self.is_tag_next(Tags.MESSAGE_EXTENSION, tstream):
            self.message_extension = contents.MessageExtension()
            self.message_extension.read(tstream)

        self.is_oversized(tstream)

    def write(self, ostream):
        tstream = BytearrayStream()

        # Write the contents of the batch item to the stream
        self.operation.write(tstream)

        if self.unique_batch_item_id is not None:
            self.unique_batch_item_id.write(tstream)

        self.request_payload.write(tstream)

        if self.message_extension is not None:
            self.message_extension.write(tstream)

        # Write the length and value of the batch item
        self.length = tstream.length()
        super(RequestBatchItem, self).write(ostream)
        ostream.write(tstream.buffer)
Esempio n. 4
0
    def __init__(self, operation=None, unique_batch_item_id=None, request_payload=None, message_extension=None):
        super(RequestBatchItem, self).__init__(tag=Tags.REQUEST_BATCH_ITEM)

        self.payload_factory = RequestPayloadFactory()

        self.operation = operation
        self.unique_batch_item_id = unique_batch_item_id
        self.request_payload = request_payload
        self.message_extension = message_extension
Esempio n. 5
0
class RequestBatchItem(Struct):

    def __init__(self,
                 operation=None,
                 unique_batch_item_id=None,
                 request_payload=None,
                 message_extension=None,
                 ephemeral=None):
        super(RequestBatchItem, self).__init__(tag=Tags.REQUEST_BATCH_ITEM)

        self.payload_factory = RequestPayloadFactory()

        self.operation = operation
        self.unique_batch_item_id = unique_batch_item_id
        self.request_payload = request_payload
        self.message_extension = message_extension
        self.ephemeral = ephemeral

    @property
    def ephemeral(self):
        if self._ephemeral:
            return self._ephemeral.value
        return None

    @ephemeral.setter
    def ephemeral(self, value):
        if value is None:
            self._ephemeral = None
        elif isinstance(value, bool):
            ephemeral = primitives.Boolean(
                value=value,
                tag=enums.Tags.EPHEMERAL
            )
            self._ephemeral = ephemeral
        else:
            raise TypeError("The ephemeral value must be a boolean.")

    def read(self, istream, kmip_version=enums.KMIPVersion.KMIP_1_0):
        super(RequestBatchItem, self).read(
            istream,
            kmip_version=kmip_version
        )
        tstream = BytearrayStream(istream.read(self.length))

        # Read the batch item operation
        self.operation = contents.Operation()
        self.operation.read(tstream, kmip_version=kmip_version)

        if kmip_version >= enums.KMIPVersion.KMIP_2_0:
            if self.is_tag_next(enums.Tags.EPHEMERAL, tstream):
                ephemeral = primitives.Boolean(tag=enums.Tags.EPHEMERAL)
                ephemeral.read(tstream, kmip_version=kmip_version)
                self._ephemeral = ephemeral

        # Read the unique batch item ID if it is present
        if self.is_tag_next(Tags.UNIQUE_BATCH_ITEM_ID, tstream):
            self.unique_batch_item_id = contents.UniqueBatchItemID()
            self.unique_batch_item_id.read(tstream, kmip_version=kmip_version)

        # Dynamically create the response payload class that belongs to the
        # operation
        self.request_payload = self.payload_factory.create(
            self.operation.value)
        self.request_payload.read(tstream, kmip_version=kmip_version)

        # Read the message extension if it is present
        if self.is_tag_next(Tags.MESSAGE_EXTENSION, tstream):
            self.message_extension = contents.MessageExtension()
            self.message_extension.read(tstream, kmip_version=kmip_version)

        self.is_oversized(tstream)

    def write(self, ostream, kmip_version=enums.KMIPVersion.KMIP_1_0):
        tstream = BytearrayStream()

        # Write the contents of the batch item to the stream
        self.operation.write(tstream, kmip_version=kmip_version)

        if kmip_version >= enums.KMIPVersion.KMIP_2_0:
            if self._ephemeral:
                self._ephemeral.write(tstream, kmip_version=kmip_version)

        if self.unique_batch_item_id is not None:
            self.unique_batch_item_id.write(tstream, kmip_version=kmip_version)

        self.request_payload.write(tstream, kmip_version=kmip_version)

        if self.message_extension is not None:
            self.message_extension.write(tstream, kmip_version=kmip_version)

        # Write the length and value of the batch item
        self.length = tstream.length()
        super(RequestBatchItem, self).write(
            ostream,
            kmip_version=kmip_version
        )
        ostream.write(tstream.buffer)
Esempio n. 6
0
 def setUp(self):
     super(TestRequestPayloadFactory, self).setUp()
     self.factory = RequestPayloadFactory()
Esempio n. 7
0
class TestRequestPayloadFactory(testtools.TestCase):

    def setUp(self):
        super(TestRequestPayloadFactory, self).setUp()
        self.factory = RequestPayloadFactory()

    def tearDown(self):
        super(TestRequestPayloadFactory, self).tearDown()

    def _test_not_implemented(self, func, args):
        self.assertRaises(NotImplementedError, func, args)

    def _test_payload_type(self, payload, payload_type):
        msg = "expected {0}, received {1}".format(payload_type, payload)
        self.assertIsInstance(payload, payload_type, msg)

    def test_create_create_payload(self):
        payload = self.factory.create(Operation.CREATE)
        self._test_payload_type(payload, create.CreateRequestPayload)

    def test_create_create_key_pair_payload(self):
        payload = self.factory.create(Operation.CREATE_KEY_PAIR)
        self._test_payload_type(
            payload, create_key_pair.CreateKeyPairRequestPayload)

    def test_create_register_payload(self):
        payload = self.factory.create(Operation.REGISTER)
        self._test_payload_type(payload, register.RegisterRequestPayload)

    def test_create_rekey_payload(self):
        self._test_not_implemented(
            self.factory.create, Operation.REKEY)

    def test_create_derive_key_payload(self):
        self._test_not_implemented(
            self.factory.create, Operation.DERIVE_KEY)

    def test_create_certify_payload(self):
        self._test_not_implemented(
            self.factory.create, Operation.CERTIFY)

    def test_create_recertify_payload(self):
        self._test_not_implemented(
            self.factory.create, Operation.RECERTIFY)

    def test_create_locate_payload(self):
        payload = self.factory.create(Operation.LOCATE)
        self._test_payload_type(payload, locate.LocateRequestPayload)

    def test_create_check_payload(self):
        self._test_not_implemented(
            self.factory.create, Operation.CHECK)

    def test_create_get_payload(self):
        payload = self.factory.create(Operation.GET)
        self._test_payload_type(payload, get.GetRequestPayload)

    def test_create_get_attributes_payload(self):
        self._test_not_implemented(
            self.factory.create, Operation.GET_ATTRIBUTES)

    def test_create_get_attributes_list_payload(self):
        self._test_not_implemented(
            self.factory.create, Operation.GET_ATTRIBUTE_LIST)

    def test_create_add_attribute_payload(self):
        self._test_not_implemented(
            self.factory.create, Operation.ADD_ATTRIBUTE)

    def test_create_modify_attribute_payload(self):
        self._test_not_implemented(
            self.factory.create, Operation.MODIFY_ATTRIBUTE)

    def test_create_delete_attribute_payload(self):
        self._test_not_implemented(
            self.factory.create, Operation.DELETE_ATTRIBUTE)

    def test_create_obtain_lease_payload(self):
        self._test_not_implemented(
            self.factory.create, Operation.OBTAIN_LEASE)

    def test_create_get_usage_allocation_payload(self):
        self._test_not_implemented(
            self.factory.create, Operation.GET_USAGE_ALLOCATION)

    def test_create_activate_payload(self):
        self._test_not_implemented(
            self.factory.create, Operation.ACTIVATE)

    def test_create_revoke_payload(self):
        self._test_not_implemented(
            self.factory.create, Operation.REVOKE)

    def test_create_destroy_payload(self):
        payload = self.factory.create(Operation.DESTROY)
        self._test_payload_type(payload, destroy.DestroyRequestPayload)

    def test_create_archive_payload(self):
        self._test_not_implemented(
            self.factory.create, Operation.ARCHIVE)

    def test_create_recover_payload(self):
        self._test_not_implemented(
            self.factory.create, Operation.RECOVER)

    def test_create_validate_payload(self):
        self._test_not_implemented(
            self.factory.create, Operation.VALIDATE)

    def test_create_query_payload(self):
        payload = self.factory.create(Operation.QUERY)
        self._test_payload_type(payload, query.QueryRequestPayload)

    def test_create_cancel_payload(self):
        self._test_not_implemented(
            self.factory.create, Operation.CANCEL)

    def test_create_poll_payload(self):
        self._test_not_implemented(
            self.factory.create, Operation.POLL)

    def test_create_notify_payload(self):
        self._test_not_implemented(
            self.factory.create, Operation.NOTIFY)

    def test_create_put_payload(self):
        self._test_not_implemented(
            self.factory.create, Operation.PUT)

    def test_create_rekey_key_pair_payload(self):
        payload = self.factory.create(Operation.REKEY_KEY_PAIR)
        self._test_payload_type(
            payload, rekey_key_pair.RekeyKeyPairRequestPayload)

    def test_create_discover_versions_payload(self):
        payload = self.factory.create(Operation.DISCOVER_VERSIONS)
        self._test_payload_type(
            payload, discover_versions.DiscoverVersionsRequestPayload)
Esempio n. 8
0
 def setUp(self):
     super(TestRequestPayloadFactory, self).setUp()
     self.factory = RequestPayloadFactory()
Esempio n. 9
0
class TestRequestPayloadFactory(testtools.TestCase):

    def setUp(self):
        super(TestRequestPayloadFactory, self).setUp()
        self.factory = RequestPayloadFactory()

    def tearDown(self):
        super(TestRequestPayloadFactory, self).tearDown()

    def _test_not_implemented(self, func, args):
        self.assertRaises(NotImplementedError, func, args)

    def _test_payload_type(self, payload, payload_type):
        msg = "expected {0}, received {1}".format(payload_type, payload)
        self.assertIsInstance(payload, payload_type, msg)

    def test_create_create_payload(self):
        payload = self.factory.create(enums.Operation.CREATE)
        self._test_payload_type(payload, payloads.CreateRequestPayload)

    def test_create_create_key_pair_payload(self):
        payload = self.factory.create(enums.Operation.CREATE_KEY_PAIR)
        self._test_payload_type(
            payload,
            payloads.CreateKeyPairRequestPayload
        )

    def test_create_register_payload(self):
        payload = self.factory.create(enums.Operation.REGISTER)
        self._test_payload_type(payload, payloads.RegisterRequestPayload)

    def test_create_rekey_payload(self):
        self._test_not_implemented(self.factory.create, enums.Operation.REKEY)

    def test_create_derive_key_payload(self):
        payload = self.factory.create(enums.Operation.DERIVE_KEY)
        self._test_payload_type(payload, payloads.DeriveKeyRequestPayload)

    def test_create_certify_payload(self):
        self._test_not_implemented(
            self.factory.create,
            enums.Operation.CERTIFY
        )

    def test_create_recertify_payload(self):
        self._test_not_implemented(
            self.factory.create,
            enums.Operation.RECERTIFY
        )

    def test_create_locate_payload(self):
        payload = self.factory.create(enums.Operation.LOCATE)
        self._test_payload_type(payload, payloads.LocateRequestPayload)

    def test_create_check_payload(self):
        self._test_not_implemented(self.factory.create, enums.Operation.CHECK)

    def test_create_get_payload(self):
        payload = self.factory.create(enums.Operation.GET)
        self._test_payload_type(payload, payloads.GetRequestPayload)

    def test_create_get_attributes_payload(self):
        payload = self.factory.create(enums.Operation.GET_ATTRIBUTES)
        self._test_payload_type(
            payload,
            payloads.GetAttributesRequestPayload
        )

    def test_create_get_attributes_list_payload(self):
        payload = self.factory.create(enums.Operation.GET_ATTRIBUTE_LIST)
        self._test_payload_type(
            payload,
            payloads.GetAttributeListRequestPayload
        )

    def test_create_add_attribute_payload(self):
        self._test_not_implemented(
            self.factory.create,
            enums.Operation.ADD_ATTRIBUTE
        )

    def test_create_modify_attribute_payload(self):
        self._test_not_implemented(
            self.factory.create,
            enums.Operation.MODIFY_ATTRIBUTE
        )

    def test_create_delete_attribute_payload(self):
        self._test_not_implemented(
            self.factory.create,
            enums.Operation.DELETE_ATTRIBUTE
        )

    def test_create_obtain_lease_payload(self):
        self._test_not_implemented(
            self.factory.create,
            enums.Operation.OBTAIN_LEASE
        )

    def test_create_get_usage_allocation_payload(self):
        self._test_not_implemented(
            self.factory.create,
            enums.Operation.GET_USAGE_ALLOCATION
        )

    def test_create_activate_payload(self):
        payload = self.factory.create(enums.Operation.ACTIVATE)
        self._test_payload_type(payload, payloads.ActivateRequestPayload)

    def test_create_revoke_payload(self):
        payload = self.factory.create(enums.Operation.REVOKE)
        self._test_payload_type(payload, payloads.RevokeRequestPayload)

    def test_create_destroy_payload(self):
        payload = self.factory.create(enums.Operation.DESTROY)
        self._test_payload_type(payload, payloads.DestroyRequestPayload)

    def test_create_archive_payload(self):
        self._test_not_implemented(
            self.factory.create,
            enums.Operation.ARCHIVE
        )

    def test_create_recover_payload(self):
        self._test_not_implemented(
            self.factory.create,
            enums.Operation.RECOVER
        )

    def test_create_validate_payload(self):
        self._test_not_implemented(
            self.factory.create,
            enums.Operation.VALIDATE
        )

    def test_create_query_payload(self):
        payload = self.factory.create(enums.Operation.QUERY)
        self._test_payload_type(payload, payloads.QueryRequestPayload)

    def test_create_cancel_payload(self):
        self._test_not_implemented(
            self.factory.create,
            enums.Operation.CANCEL
        )

    def test_create_poll_payload(self):
        self._test_not_implemented(self.factory.create, enums.Operation.POLL)

    def test_create_notify_payload(self):
        self._test_not_implemented(
            self.factory.create,
            enums.Operation.NOTIFY
        )

    def test_create_put_payload(self):
        self._test_not_implemented(self.factory.create, enums.Operation.PUT)

    def test_create_rekey_key_pair_payload(self):
        payload = self.factory.create(enums.Operation.REKEY_KEY_PAIR)
        self._test_payload_type(
            payload,
            payloads.RekeyKeyPairRequestPayload
        )

    def test_create_discover_versions_payload(self):
        payload = self.factory.create(enums.Operation.DISCOVER_VERSIONS)
        self._test_payload_type(
            payload,
            payloads.DiscoverVersionsRequestPayload
        )

    def test_create_encrypt_payload(self):
        payload = self.factory.create(enums.Operation.ENCRYPT)
        self._test_payload_type(payload, payloads.EncryptRequestPayload)

    def test_create_decrypt_payload(self):
        payload = self.factory.create(enums.Operation.DECRYPT)
        self._test_payload_type(payload, payloads.DecryptRequestPayload)

    def test_create_sign_payload(self):
        payload = self.factory.create(enums.Operation.SIGN)
        self._test_payload_type(payload, payloads.SignRequestPayload)

    def test_create_signature_verify_payload(self):
        payload = self.factory.create(enums.Operation.SIGNATURE_VERIFY)
        self._test_payload_type(
            payload,
            payloads.SignatureVerifyRequestPayload
        )

    def test_create_mac_payload(self):
        payload = self.factory.create(enums.Operation.MAC)
        self._test_payload_type(payload, payloads.MACRequestPayload)

    def test_create_mac_verify_payload(self):
        self._test_not_implemented(
            self.factory.create,
            enums.Operation.MAC_VERIFY
        )

    def test_create_rng_retrieve_payload(self):
        self._test_not_implemented(
            self.factory.create,
            enums.Operation.RNG_RETRIEVE
        )

    def test_create_rng_seed_payload(self):
        self._test_not_implemented(
            self.factory.create,
            enums.Operation.RNG_SEED
        )

    def test_create_hash_payload(self):
        self._test_not_implemented(self.factory.create, enums.Operation.HASH)

    def test_create_create_split_key_payload(self):
        self._test_not_implemented(
            self.factory.create,
            enums.Operation.CREATE_SPLIT_KEY
        )

    def test_create_join_split_key_payload(self):
        self._test_not_implemented(
            self.factory.create,
            enums.Operation.JOIN_SPLIT_KEY
        )
Esempio n. 10
0
class TestRequestPayloadFactory(testtools.TestCase):
    def setUp(self):
        super(TestRequestPayloadFactory, self).setUp()
        self.factory = RequestPayloadFactory()

    def tearDown(self):
        super(TestRequestPayloadFactory, self).tearDown()

    def _test_not_implemented(self, func, args):
        self.assertRaises(NotImplementedError, func, args)

    def _test_payload_type(self, payload, payload_type):
        msg = "expected {0}, received {1}".format(payload_type, payload)
        self.assertIsInstance(payload, payload_type, msg)

    def test_create_create_payload(self):
        payload = self.factory.create(Operation.CREATE)
        self._test_payload_type(payload, create.CreateRequestPayload)

    def test_create_create_key_pair_payload(self):
        payload = self.factory.create(Operation.CREATE_KEY_PAIR)
        self._test_payload_type(payload,
                                create_key_pair.CreateKeyPairRequestPayload)

    def test_create_register_payload(self):
        payload = self.factory.create(Operation.REGISTER)
        self._test_payload_type(payload, register.RegisterRequestPayload)

    def test_create_rekey_payload(self):
        self._test_not_implemented(self.factory.create, Operation.REKEY)

    def test_create_derive_key_payload(self):
        self._test_not_implemented(self.factory.create, Operation.DERIVE_KEY)

    def test_create_certify_payload(self):
        self._test_not_implemented(self.factory.create, Operation.CERTIFY)

    def test_create_recertify_payload(self):
        self._test_not_implemented(self.factory.create, Operation.RECERTIFY)

    def test_create_locate_payload(self):
        payload = self.factory.create(Operation.LOCATE)
        self._test_payload_type(payload, locate.LocateRequestPayload)

    def test_create_check_payload(self):
        self._test_not_implemented(self.factory.create, Operation.CHECK)

    def test_create_get_payload(self):
        payload = self.factory.create(Operation.GET)
        self._test_payload_type(payload, get.GetRequestPayload)

    def test_create_get_attributes_payload(self):
        self._test_not_implemented(self.factory.create,
                                   Operation.GET_ATTRIBUTES)

    def test_create_get_attributes_list_payload(self):
        payload = self.factory.create(Operation.GET_ATTRIBUTE_LIST)
        self._test_payload_type(
            payload, get_attribute_list.GetAttributeListRequestPayload)

    def test_create_add_attribute_payload(self):
        self._test_not_implemented(self.factory.create,
                                   Operation.ADD_ATTRIBUTE)

    def test_create_modify_attribute_payload(self):
        self._test_not_implemented(self.factory.create,
                                   Operation.MODIFY_ATTRIBUTE)

    def test_create_delete_attribute_payload(self):
        self._test_not_implemented(self.factory.create,
                                   Operation.DELETE_ATTRIBUTE)

    def test_create_obtain_lease_payload(self):
        self._test_not_implemented(self.factory.create, Operation.OBTAIN_LEASE)

    def test_create_get_usage_allocation_payload(self):
        self._test_not_implemented(self.factory.create,
                                   Operation.GET_USAGE_ALLOCATION)

    def test_create_activate_payload(self):
        payload = self.factory.create(Operation.ACTIVATE)
        self._test_payload_type(payload, activate.ActivateRequestPayload)

    def test_create_revoke_payload(self):
        payload = self.factory.create(Operation.REVOKE)
        self._test_payload_type(payload, revoke.RevokeRequestPayload)

    def test_create_destroy_payload(self):
        payload = self.factory.create(Operation.DESTROY)
        self._test_payload_type(payload, destroy.DestroyRequestPayload)

    def test_create_archive_payload(self):
        self._test_not_implemented(self.factory.create, Operation.ARCHIVE)

    def test_create_recover_payload(self):
        self._test_not_implemented(self.factory.create, Operation.RECOVER)

    def test_create_validate_payload(self):
        self._test_not_implemented(self.factory.create, Operation.VALIDATE)

    def test_create_query_payload(self):
        payload = self.factory.create(Operation.QUERY)
        self._test_payload_type(payload, query.QueryRequestPayload)

    def test_create_cancel_payload(self):
        self._test_not_implemented(self.factory.create, Operation.CANCEL)

    def test_create_poll_payload(self):
        self._test_not_implemented(self.factory.create, Operation.POLL)

    def test_create_notify_payload(self):
        self._test_not_implemented(self.factory.create, Operation.NOTIFY)

    def test_create_put_payload(self):
        self._test_not_implemented(self.factory.create, Operation.PUT)

    def test_create_rekey_key_pair_payload(self):
        payload = self.factory.create(Operation.REKEY_KEY_PAIR)
        self._test_payload_type(payload,
                                rekey_key_pair.RekeyKeyPairRequestPayload)

    def test_create_discover_versions_payload(self):
        payload = self.factory.create(Operation.DISCOVER_VERSIONS)
        self._test_payload_type(
            payload, discover_versions.DiscoverVersionsRequestPayload)