diff --git a/kmip/tests/integration/services/test_integration.py b/kmip/tests/integration/services/test_integration.py index 06bb7b0..3c7c7c2 100644 --- a/kmip/tests/integration/services/test_integration.py +++ b/kmip/tests/integration/services/test_integration.py @@ -27,6 +27,7 @@ from kmip.core.enums import KeyFormatType as KeyFormatTypeEnum from kmip.core.enums import CertificateTypeEnum from kmip.core.enums import NameType from kmip.core.enums import ObjectType +from kmip.core.enums import SecretDataType from kmip.core.enums import ResultStatus from kmip.core.enums import ResultReason from kmip.core.enums import QueryFunction as QueryFunctionEnum @@ -52,6 +53,7 @@ from kmip.core.secrets import SymmetricKey from kmip.core.secrets import PrivateKey from kmip.core.secrets import PublicKey from kmip.core.secrets import Certificate +from kmip.core.secrets import SecretData import pytest @@ -946,3 +948,111 @@ class TestIntegration(TestCase): cert_observed = type(cert_result_destroyed_result.result_reason.enum) self.assertEqual(expected, cert_observed) + + def test_passphrase_register_get_destroy(self): + """ + Tests that passphrases can be properly registered, retrieved, + and destroyed + """ + + # properties copied from test case example : + # http://docs.oasis-open.org/kmip/testcases/v1.1/cn01/kmip-testcases-v1.1-cn01.html#_Toc333488777 + + pass_obj_type = ObjectType.SECRET_DATA + + mask_flags = [CryptographicUsageMask.VERIFY] + attribute_type = AttributeType.CRYPTOGRAPHIC_USAGE_MASK + usage_mask = self.attr_factory.create_attribute(attribute_type, + mask_flags) + + name = Attribute.AttributeName('Name') + pass_name = 'Integration Test - Register-Get-Destroy Passphrase' + + pass_name_value = Name.NameValue(pass_name) + + name_type = Name.NameType(NameType.UNINTERPRETED_TEXT_STRING) + pass_value = Name(name_value=pass_name_value, name_type=name_type) + + pass_name_attr = Attribute(attribute_name=name, + attribute_value=pass_value) + + pass_attributes = [usage_mask, pass_name_attr] + + pass_template_attribute = TemplateAttribute( + attributes=pass_attributes) + + pass_format_type = SecretData.SecretDataType( + SecretDataType.PASSWORD) + + key_format_type = KeyFormatType(KeyFormatTypeEnum.OPAQUE) + key_data = b'\x70\x65\x65\x6b\x2d\x61\x2d\x62\x6f\x6f\x21\x21' + + key_material = KeyMaterial(key_data) + key_value = KeyValue(key_material) + + key_block = KeyBlock( + key_format_type=key_format_type, + key_compression_type=None, + key_value=key_value, + key_wrapping_data=None) + + pass_obj = SecretData(secret_data_type=pass_format_type, + key_block=key_block) + + pass_result = self.client.register(pass_obj_type, + pass_template_attribute, + pass_obj, credential=None) + + self._check_result_status(pass_result, ResultStatus, + ResultStatus.SUCCESS) + + self._check_uuid(pass_result.uuid.value, str) + + # Check that the returned key bytes match what was provided + pass_uuid = pass_result.uuid.value + + pass_result = self.client.get(uuid=pass_uuid, credential=None) + + self._check_result_status(pass_result, ResultStatus, + ResultStatus.SUCCESS) + + self._check_object_type(pass_result.object_type.enum, ObjectType, + ObjectType.SECRET_DATA) + + self._check_uuid(pass_result.uuid.value, str) + + # Check the secret type + pass_secret = pass_result.secret + + pass_secret_expected = SecretData + + self.assertIsInstance(pass_secret, pass_secret_expected) + + pass_material = pass_result.secret.key_block.key_value.key_material\ + .value + + expected = key_data + + self.assertEqual(expected, pass_material) + + self.logger.debug('Destroying cert: ' + pass_name + + '\nWith " "UUID: ' + pass_result.uuid.value) + + pass_result = self.client.destroy(pass_result.uuid.value) + + self._check_result_status(pass_result, ResultStatus, + ResultStatus.SUCCESS) + + self._check_uuid(pass_result.uuid.value, str) + + # Verify the secret was destroyed + pass_result_destroyed_result = self.client.get(uuid=pass_uuid, + credential=None) + + self._check_result_status(pass_result_destroyed_result, ResultStatus, + ResultStatus.OPERATION_FAILED) + + expected = ResultReason + pass_observed = type(pass_result_destroyed_result.result_reason.enum) + + self.assertEqual(expected, pass_observed)