Merge pull request #350 from OpenKMIP/feat/update-key-wrapping-structs

Update key wrapping data structures to support dict arguments
This commit is contained in:
Peter Hamilton 2017-10-04 17:31:41 -04:00 committed by GitHub
commit b3d4ffb03f
2 changed files with 120 additions and 4 deletions

View File

@ -715,8 +715,10 @@ class EncryptionKeyInformation(Struct):
@cryptographic_parameters.setter @cryptographic_parameters.setter
def cryptographic_parameters(self, value): def cryptographic_parameters(self, value):
if value is None: if not value:
self._cryptographic_parameters = None self._cryptographic_parameters = None
elif isinstance(value, dict):
self._cryptographic_parameters = CryptographicParameters(**value)
elif isinstance(value, CryptographicParameters): elif isinstance(value, CryptographicParameters):
self._cryptographic_parameters = value self._cryptographic_parameters = value
else: else:
@ -871,8 +873,10 @@ class MACSignatureKeyInformation(primitives.Struct):
@cryptographic_parameters.setter @cryptographic_parameters.setter
def cryptographic_parameters(self, value): def cryptographic_parameters(self, value):
if value is None: if not value:
self._cryptographic_parameters = None self._cryptographic_parameters = None
elif isinstance(value, dict):
self._cryptographic_parameters = CryptographicParameters(**value)
elif isinstance(value, CryptographicParameters): elif isinstance(value, CryptographicParameters):
self._cryptographic_parameters = value self._cryptographic_parameters = value
else: else:
@ -1051,8 +1055,11 @@ class KeyWrappingData(Struct):
@encryption_key_information.setter @encryption_key_information.setter
def encryption_key_information(self, value): def encryption_key_information(self, value):
if value is None: if not value:
self._encryption_key_information = None self._encryption_key_information = None
elif isinstance(value, dict):
self._encryption_key_information = \
EncryptionKeyInformation(**value)
elif isinstance(value, EncryptionKeyInformation): elif isinstance(value, EncryptionKeyInformation):
self._encryption_key_information = value self._encryption_key_information = value
else: else:
@ -1067,8 +1074,11 @@ class KeyWrappingData(Struct):
@mac_signature_key_information.setter @mac_signature_key_information.setter
def mac_signature_key_information(self, value): def mac_signature_key_information(self, value):
if value is None: if not value:
self._mac_signature_key_information = None self._mac_signature_key_information = None
elif isinstance(value, dict):
self._mac_signature_key_information = \
MACSignatureKeyInformation(**value)
elif isinstance(value, MACSignatureKeyInformation): elif isinstance(value, MACSignatureKeyInformation):
self._mac_signature_key_information = value self._mac_signature_key_information = value
else: else:

View File

@ -385,6 +385,27 @@ class TestEncryptionKeyInformation(testtools.TestCase):
parameters.block_cipher_mode parameters.block_cipher_mode
) )
encryption_key_information = objects.EncryptionKeyInformation(
unique_identifier="00000000-1111-2222-3333-444444444444",
cryptographic_parameters={
'block_cipher_mode': enums.BlockCipherMode.CTR
}
)
self.assertEqual(
"00000000-1111-2222-3333-444444444444",
encryption_key_information.unique_identifier
)
self.assertIsInstance(
encryption_key_information.cryptographic_parameters,
attributes.CryptographicParameters
)
parameters = encryption_key_information.cryptographic_parameters
self.assertEqual(
enums.BlockCipherMode.CTR,
parameters.block_cipher_mode
)
def test_invalid_unique_identifier(self): def test_invalid_unique_identifier(self):
""" """
Test that a TypeError is raised when an invalid value is used to set Test that a TypeError is raised when an invalid value is used to set
@ -837,6 +858,27 @@ class TestMACSignatureKeyInformation(testtools.TestCase):
parameters.block_cipher_mode parameters.block_cipher_mode
) )
mac_signature_key_information = objects.MACSignatureKeyInformation(
unique_identifier="00000000-1111-2222-3333-444444444444",
cryptographic_parameters={
'block_cipher_mode': enums.BlockCipherMode.CTR
}
)
self.assertEqual(
"00000000-1111-2222-3333-444444444444",
mac_signature_key_information.unique_identifier
)
self.assertIsInstance(
mac_signature_key_information.cryptographic_parameters,
attributes.CryptographicParameters
)
parameters = mac_signature_key_information.cryptographic_parameters
self.assertEqual(
enums.BlockCipherMode.CTR,
parameters.block_cipher_mode
)
def test_invalid_unique_identifier(self): def test_invalid_unique_identifier(self):
""" """
Test that a TypeError is raised when an invalid value is used to set Test that a TypeError is raised when an invalid value is used to set
@ -1367,6 +1409,70 @@ class TestKeyWrappingData(testtools.TestCase):
key_wrapping_data.encoding_option key_wrapping_data.encoding_option
) )
key_wrapping_data = objects.KeyWrappingData(
wrapping_method=enums.WrappingMethod.ENCRYPT,
encryption_key_information={
'unique_identifier': "12345678-9012-3456-7890-123456789012",
'cryptographic_parameters': {
'block_cipher_mode': enums.BlockCipherMode.CTR
}
},
mac_signature_key_information={
'unique_identifier': "00000000-1111-2222-3333-444444444444",
'cryptographic_parameters': {
'block_cipher_mode': enums.BlockCipherMode.NIST_KEY_WRAP
}
},
mac_signature=b'\x01',
iv_counter_nonce=b'\x02',
encoding_option=enums.EncodingOption.TTLV_ENCODING
)
self.assertEqual(
enums.WrappingMethod.ENCRYPT,
key_wrapping_data.wrapping_method
)
self.assertIsInstance(
key_wrapping_data.encryption_key_information,
objects.EncryptionKeyInformation
)
e = key_wrapping_data.encryption_key_information
self.assertEqual(
"12345678-9012-3456-7890-123456789012",
e.unique_identifier
)
self.assertIsInstance(
e.cryptographic_parameters,
attributes.CryptographicParameters
)
self.assertEqual(
enums.BlockCipherMode.CTR,
e.cryptographic_parameters.block_cipher_mode
)
self.assertIsInstance(
key_wrapping_data.mac_signature_key_information,
objects.MACSignatureKeyInformation
)
m = key_wrapping_data.mac_signature_key_information
self.assertEqual(
"00000000-1111-2222-3333-444444444444",
m.unique_identifier
)
self.assertIsInstance(
m.cryptographic_parameters,
attributes.CryptographicParameters
)
self.assertEqual(
enums.BlockCipherMode.NIST_KEY_WRAP,
m.cryptographic_parameters.block_cipher_mode
)
self.assertEqual(b'\x01', key_wrapping_data.mac_signature)
self.assertEqual(b'\x02', key_wrapping_data.iv_counter_nonce)
self.assertEqual(
enums.EncodingOption.TTLV_ENCODING,
key_wrapping_data.encoding_option
)
def test_invalid_wrapping_method(self): def test_invalid_wrapping_method(self):
""" """
Test that a TypeError is raised when an invalid value is used to set Test that a TypeError is raised when an invalid value is used to set