@is_connected
def derive_key(self, object_type, unique_identifiers, derivation_method, derivation_parameters, **kwargs):
    "\n        Derive a new key or secret data from existing managed objects.\n\n        Args:\n            object_type (ObjectType): An ObjectType enumeration specifying\n                what type of object to derive. Only SymmetricKeys and\n                SecretData can be specified. Required.\n            unique_identifiers (list): A list of strings specifying the\n                unique IDs of the existing managed objects to use for\n                derivation. Multiple objects can be specified to fit the\n                requirements of the given derivation method. Required.\n            derivation_method (DerivationMethod): A DerivationMethod\n                enumeration specifying how key derivation should be done.\n                Required.\n            derivation_parameters (dict): A dictionary containing various\n                settings for the key derivation process. See Note below.\n                Required.\n            **kwargs (various): A placeholder for object attributes that\n                should be set on the newly derived object. Currently\n                supported attributes include:\n                    cryptographic_algorithm (enums.CryptographicAlgorithm)\n                    cryptographic_length (int)\n\n        Returns:\n            string: The unique ID of the newly derived object.\n\n        Raises:\n            ClientConnectionNotOpen: if the client connection is unusable\n            KmipOperationFailure: if the operation result is a failure\n            TypeError: if the input arguments are invalid\n\n        Notes:\n            The derivation_parameters argument is a dictionary that can\n            contain the following key/value pairs:\n\n            Key                        | Value\n            ---------------------------|---------------------------------------\n            'cryptographic_parameters' | A dictionary containing additional\n                                       | cryptographic settings. See the\n                                       | decrypt method for more information.\n            'initialization_vector'    | Bytes to be used to initialize the key\n                                       | derivation function, if needed.\n            'derivation_data'          | Bytes to be used as the basis for the\n                                       | key derivation process (e.g., the\n                                       | bytes to be encrypted, hashed, etc).\n            'salt'                     | Bytes to used as a salt value for the\n                                       | key derivation function, if needed.\n                                       | Usually used with PBKDF2.\n            'iteration_count'          | An integer defining how many\n                                       | iterations should be used with the key\n                                       | derivation function, if needed.\n                                       | Usually used with PBKDF2.\n        "
    if (not isinstance(object_type, enums.ObjectType)):
        raise TypeError('Object type must be an ObjectType enumeration.')
    if (not isinstance(unique_identifiers, list)):
        raise TypeError('Unique identifiers must be a list of strings.')
    else:
        for unique_identifier in unique_identifiers:
            if (not isinstance(unique_identifier, six.string_types)):
                raise TypeError('Unique identifiers must be a list of strings.')
    if (not isinstance(derivation_method, enums.DerivationMethod)):
        raise TypeError('Derivation method must be a DerivationMethod enumeration.')
    if (not isinstance(derivation_parameters, dict)):
        raise TypeError('Derivation parameters must be a dictionary.')
    derivation_parameters = DerivationParameters(cryptographic_parameters=self._build_cryptographic_parameters(derivation_parameters.get('cryptographic_parameters')), initialization_vector=derivation_parameters.get('initialization_vector'), derivation_data=derivation_parameters.get('derivation_data'), salt=derivation_parameters.get('salt'), iteration_count=derivation_parameters.get('iteration_count'))
    attributes = []
    if kwargs.get('cryptographic_length'):
        attributes.append(self.attribute_factory.create_attribute(enums.AttributeType.CRYPTOGRAPHIC_LENGTH, kwargs.get('cryptographic_length')))
    if kwargs.get('cryptographic_algorithm'):
        attributes.append(self.attribute_factory.create_attribute(enums.AttributeType.CRYPTOGRAPHIC_ALGORITHM, kwargs.get('cryptographic_algorithm')))
    template_attribute = cobjects.TemplateAttribute(attributes=attributes)
    result = self.proxy.derive_key(object_type, unique_identifiers, derivation_method, derivation_parameters, template_attribute)
    status = result.get('result_status')
    if (status == enums.ResultStatus.SUCCESS):
        return result.get('unique_identifier')
    else:
        raise exceptions.KmipOperationFailure(status, result.get('result_reason'), result.get('result_message'))
Derive a new key or secret data from existing managed objects.

Args:
    object_type (ObjectType): An ObjectType enumeration specifying
        what type of object to derive. Only SymmetricKeys and
        SecretData can be specified. Required.
    unique_identifiers (list): A list of strings specifying the
        unique IDs of the existing managed objects to use for
        derivation. Multiple objects can be specified to fit the
        requirements of the given derivation method. Required.
    derivation_method (DerivationMethod): A DerivationMethod
        enumeration specifying how key derivation should be done.
        Required.
    derivation_parameters (dict): A dictionary containing various
        settings for the key derivation process. See Note below.
        Required.
    **kwargs (various): A placeholder for object attributes that
        should be set on the newly derived object. Currently
        supported attributes include:
            cryptographic_algorithm (enums.CryptographicAlgorithm)
            cryptographic_length (int)

Returns:
    string: The unique ID of the newly derived object.

Raises:
    ClientConnectionNotOpen: if the client connection is unusable
    KmipOperationFailure: if the operation result is a failure
    TypeError: if the input arguments are invalid

Notes:
    The derivation_parameters argument is a dictionary that can
    contain the following key/value pairs:

    Key                        | Value
    ---------------------------|---------------------------------------
    'cryptographic_parameters' | A dictionary containing additional
                               | cryptographic settings. See the
                               | decrypt method for more information.
    'initialization_vector'    | Bytes to be used to initialize the key
                               | derivation function, if needed.
    'derivation_data'          | Bytes to be used as the basis for the
                               | key derivation process (e.g., the
                               | bytes to be encrypted, hashed, etc).
    'salt'                     | Bytes to used as a salt value for the
                               | key derivation function, if needed.
                               | Usually used with PBKDF2.
    'iteration_count'          | An integer defining how many
                               | iterations should be used with the key
                               | derivation function, if needed.
                               | Usually used with PBKDF2.
@is_connected
def derive_key(self, object_type, unique_identifiers, derivation_method, derivation_parameters, **kwargs):
    "\n        Derive a new key or secret data from existing managed objects.\n\n        Args:\n            object_type (ObjectType): An ObjectType enumeration specifying\n                what type of object to derive. Only SymmetricKeys and\n                SecretData can be specified. Required.\n            unique_identifiers (list): A list of strings specifying the\n                unique IDs of the existing managed objects to use for\n                derivation. Multiple objects can be specified to fit the\n                requirements of the given derivation method. Required.\n            derivation_method (DerivationMethod): A DerivationMethod\n                enumeration specifying how key derivation should be done.\n                Required.\n            derivation_parameters (dict): A dictionary containing various\n                settings for the key derivation process. See Note below.\n                Required.\n            **kwargs (various): A placeholder for object attributes that\n                should be set on the newly derived object. Currently\n                supported attributes include:\n                    cryptographic_algorithm (enums.CryptographicAlgorithm)\n                    cryptographic_length (int)\n\n        Returns:\n            string: The unique ID of the newly derived object.\n\n        Raises:\n            ClientConnectionNotOpen: if the client connection is unusable\n            KmipOperationFailure: if the operation result is a failure\n            TypeError: if the input arguments are invalid\n\n        Notes:\n            The derivation_parameters argument is a dictionary that can\n            contain the following key/value pairs:\n\n            Key                        | Value\n            ---------------------------|---------------------------------------\n            'cryptographic_parameters' | A dictionary containing additional\n                                       | cryptographic settings. See the\n                                       | decrypt method for more information.\n            'initialization_vector'    | Bytes to be used to initialize the key\n                                       | derivation function, if needed.\n            'derivation_data'          | Bytes to be used as the basis for the\n                                       | key derivation process (e.g., the\n                                       | bytes to be encrypted, hashed, etc).\n            'salt'                     | Bytes to used as a salt value for the\n                                       | key derivation function, if needed.\n                                       | Usually used with PBKDF2.\n            'iteration_count'          | An integer defining how many\n                                       | iterations should be used with the key\n                                       | derivation function, if needed.\n                                       | Usually used with PBKDF2.\n        "
    if (not isinstance(object_type, enums.ObjectType)):
        raise TypeError('Object type must be an ObjectType enumeration.')
    if (not isinstance(unique_identifiers, list)):
        raise TypeError('Unique identifiers must be a list of strings.')
    else:
        for unique_identifier in unique_identifiers:
            if (not isinstance(unique_identifier, six.string_types)):
                raise TypeError('Unique identifiers must be a list of strings.')
    if (not isinstance(derivation_method, enums.DerivationMethod)):
        raise TypeError('Derivation method must be a DerivationMethod enumeration.')
    if (not isinstance(derivation_parameters, dict)):
        raise TypeError('Derivation parameters must be a dictionary.')
    derivation_parameters = DerivationParameters(cryptographic_parameters=self._build_cryptographic_parameters(derivation_parameters.get('cryptographic_parameters')), initialization_vector=derivation_parameters.get('initialization_vector'), derivation_data=derivation_parameters.get('derivation_data'), salt=derivation_parameters.get('salt'), iteration_count=derivation_parameters.get('iteration_count'))
    attributes = []
    if kwargs.get('cryptographic_length'):
        attributes.append(self.attribute_factory.create_attribute(enums.AttributeType.CRYPTOGRAPHIC_LENGTH, kwargs.get('cryptographic_length')))
    if kwargs.get('cryptographic_algorithm'):
        attributes.append(self.attribute_factory.create_attribute(enums.AttributeType.CRYPTOGRAPHIC_ALGORITHM, kwargs.get('cryptographic_algorithm')))
    template_attribute = cobjects.TemplateAttribute(attributes=attributes)
    result = self.proxy.derive_key(object_type, unique_identifiers, derivation_method, derivation_parameters, template_attribute)
    status = result.get('result_status')
    if (status == enums.ResultStatus.SUCCESS):
        return result.get('unique_identifier')
    else:
        raise exceptions.KmipOperationFailure(status, result.get('result_reason'), result.get('result_message'))