def read(self, input_buffer, kmip_version=enums.KMIPVersion.KMIP_1_0): """ Read the data encoding the Locate request payload and decode it into its constituent parts. Args: input_buffer (stream): A data buffer containing encoded object data, supporting a read method. kmip_version (KMIPVersion): An enumeration defining the KMIP version with which the object will be decoded. Optional, defaults to KMIP 1.0. Raises: InvalidKmipEncoding: Raised if the attributes structure is missing from the encoded payload for KMIP 2.0+ encodings. """ super(LocateRequestPayload, self).read(input_buffer, kmip_version=kmip_version) local_buffer = utils.BytearrayStream(input_buffer.read(self.length)) if self.is_tag_next(enums.Tags.MAXIMUM_ITEMS, local_buffer): self._maximum_items = primitives.Integer( tag=enums.Tags.MAXIMUM_ITEMS) self._maximum_items.read(local_buffer, kmip_version=kmip_version) if self.is_tag_next(enums.Tags.OFFSET_ITEMS, local_buffer): self._offset_items = primitives.Integer( tag=enums.Tags.OFFSET_ITEMS) self._offset_items.read(local_buffer, kmip_version=kmip_version) if self.is_tag_next(enums.Tags.STORAGE_STATUS_MASK, local_buffer): self._storage_status_mask = primitives.Integer( tag=enums.Tags.STORAGE_STATUS_MASK) self._storage_status_mask.read(local_buffer, kmip_version=kmip_version) if self.is_tag_next(enums.Tags.OBJECT_GROUP_MEMBER, local_buffer): self._object_group_member = primitives.Enumeration( enums.ObjectGroupMember, tag=enums.Tags.OBJECT_GROUP_MEMBER) self._object_group_member.read(local_buffer, kmip_version=kmip_version) if kmip_version < enums.KMIPVersion.KMIP_2_0: while self.is_tag_next(enums.Tags.ATTRIBUTE, local_buffer): attribute = objects.Attribute() attribute.read(local_buffer, kmip_version=kmip_version) self._attributes.append(attribute) else: if self.is_tag_next(enums.Tags.ATTRIBUTES, local_buffer): attributes = objects.Attributes() attributes.read(local_buffer, kmip_version=kmip_version) # TODO (ph) Add a new utility to avoid using TemplateAttributes temp_attr = objects.convert_attributes_to_template_attribute( attributes) self._attributes = temp_attr.attributes else: raise exceptions.InvalidKmipEncoding( "The Locate request payload encoding is missing the " "attributes structure.")
def read(self, input_buffer, kmip_version=enums.KMIPVersion.KMIP_1_0): """ Read the data encoding the Create request payload and decode it into its constituent parts. Args: input_buffer (stream): A data buffer containing encoded object data, supporting a read method. kmip_version (KMIPVersion): An enumeration defining the KMIP version with which the object will be decoded. Optional, defaults to KMIP 1.0. Raises: InvalidKmipEncoding: Raised if the object type or template attribute is missing from the encoded payload. """ super(CreateRequestPayload, self).read(input_buffer, kmip_version=kmip_version) local_buffer = utils.BytearrayStream(input_buffer.read(self.length)) if self.is_tag_next(enums.Tags.OBJECT_TYPE, local_buffer): self._object_type = primitives.Enumeration( enums.ObjectType, tag=enums.Tags.OBJECT_TYPE) self._object_type.read(local_buffer, kmip_version=kmip_version) else: raise exceptions.InvalidKmipEncoding( "The Create request payload encoding is missing the object " "type.") if kmip_version < enums.KMIPVersion.KMIP_2_0: if self.is_tag_next(enums.Tags.TEMPLATE_ATTRIBUTE, local_buffer): self._template_attribute = objects.TemplateAttribute() self._template_attribute.read(local_buffer, kmip_version=kmip_version) else: raise exceptions.InvalidKmipEncoding( "The Create request payload encoding is missing the " "template attribute.") else: # NOTE (ph) For now, leave attributes natively in TemplateAttribute # form and just convert to the KMIP 2.0 Attributes form as needed # for encoding/decoding purposes. Changing the payload to require # the new Attributes structure will trigger a bunch of second-order # effects across the client and server codebases that is beyond # the scope of updating the Create payloads to support KMIP 2.0. if self.is_tag_next(enums.Tags.ATTRIBUTES, local_buffer): attributes = objects.Attributes() attributes.read(local_buffer, kmip_version=kmip_version) value = objects.convert_attributes_to_template_attribute( attributes) self._template_attribute = value else: raise exceptions.InvalidKmipEncoding( "The Create request payload encoding is missing the " "attributes structure.") self.is_oversized(local_buffer)
def read(self, input_buffer, kmip_version=enums.KMIPVersion.KMIP_1_0): """ Read the data encoding the GetAttributes response payload and decode it into its constituent parts. Args: input_buffer (stream): A data stream containing encoded object data, supporting a read method; usually a BytearrayStream object. kmip_version (KMIPVersion): An enumeration defining the KMIP version with which the object will be decoded. Optional, defaults to KMIP 1.0. """ super(GetAttributesResponsePayload, self).read( input_buffer, kmip_version=kmip_version ) local_buffer = utils.BytearrayStream(input_buffer.read(self.length)) if self.is_tag_next(enums.Tags.UNIQUE_IDENTIFIER, local_buffer): unique_identifier = primitives.TextString( tag=enums.Tags.UNIQUE_IDENTIFIER ) unique_identifier.read(local_buffer, kmip_version=kmip_version) self.unique_identifier = unique_identifier.value else: raise exceptions.InvalidKmipEncoding( "The GetAttributes response payload encoding is missing the " "unique identifier." ) if kmip_version < enums.KMIPVersion.KMIP_2_0: self._attributes = list() while self.is_tag_next(enums.Tags.ATTRIBUTE, local_buffer): attribute = objects.Attribute() attribute.read(local_buffer, kmip_version=kmip_version) self._attributes.append(attribute) else: if self.is_tag_next(enums.Tags.ATTRIBUTES, local_buffer): attributes = objects.Attributes() attributes.read(local_buffer, kmip_version=kmip_version) # TODO (ph) Add a new utility to avoid using TemplateAttributes temp_attr = objects.convert_attributes_to_template_attribute( attributes ) self._attributes = temp_attr.attributes else: raise exceptions.InvalidKmipEncoding( "The GetAttributes response payload encoding is missing " "the attributes structure." ) self.is_oversized(local_buffer)
def read(self, input_buffer, kmip_version=enums.KMIPVersion.KMIP_1_0): """ Read the data encoding the CreateKeyPair request payload and decode it into its constituent parts. Args: input_buffer (stream): A data buffer containing encoded object data, supporting a read method. kmip_version (KMIPVersion): An enumeration defining the KMIP version with which the object will be decoded. Optional, defaults to KMIP 1.0. """ super(CreateKeyPairRequestPayload, self).read(input_buffer, kmip_version=kmip_version) local_buffer = utils.BytearrayStream(input_buffer.read(self.length)) if kmip_version < enums.KMIPVersion.KMIP_2_0: if self.is_tag_next(enums.Tags.COMMON_TEMPLATE_ATTRIBUTE, local_buffer): self._common_template_attribute = objects.TemplateAttribute( tag=enums.Tags.COMMON_TEMPLATE_ATTRIBUTE) self._common_template_attribute.read(local_buffer, kmip_version=kmip_version) else: if self.is_tag_next(enums.Tags.COMMON_ATTRIBUTES, local_buffer): attributes = objects.Attributes( tag=enums.Tags.COMMON_ATTRIBUTES) attributes.read(local_buffer, kmip_version=kmip_version) self._common_template_attribute = \ objects.convert_attributes_to_template_attribute( attributes ) if kmip_version < enums.KMIPVersion.KMIP_2_0: if self.is_tag_next(enums.Tags.PRIVATE_KEY_TEMPLATE_ATTRIBUTE, local_buffer): self._private_key_template_attribute = \ objects.TemplateAttribute( tag=enums.Tags.PRIVATE_KEY_TEMPLATE_ATTRIBUTE ) self._private_key_template_attribute.read( local_buffer, kmip_version=kmip_version) else: if self.is_tag_next(enums.Tags.PRIVATE_KEY_ATTRIBUTES, local_buffer): attributes = objects.Attributes( tag=enums.Tags.PRIVATE_KEY_ATTRIBUTES) attributes.read(local_buffer, kmip_version=kmip_version) self._private_key_template_attribute = \ objects.convert_attributes_to_template_attribute( attributes ) if kmip_version < enums.KMIPVersion.KMIP_2_0: if self.is_tag_next(enums.Tags.PUBLIC_KEY_TEMPLATE_ATTRIBUTE, local_buffer): self._public_key_template_attribute = \ objects.TemplateAttribute( tag=enums.Tags.PUBLIC_KEY_TEMPLATE_ATTRIBUTE ) self._public_key_template_attribute.read( local_buffer, kmip_version=kmip_version) else: if self.is_tag_next(enums.Tags.PUBLIC_KEY_ATTRIBUTES, local_buffer): attributes = objects.Attributes( tag=enums.Tags.PUBLIC_KEY_ATTRIBUTES) attributes.read(local_buffer, kmip_version=kmip_version) self._public_key_template_attribute = \ objects.convert_attributes_to_template_attribute( attributes ) if kmip_version >= enums.KMIPVersion.KMIP_2_0: if self.is_tag_next(enums.Tags.COMMON_PROTECTION_STORAGE_MASKS, local_buffer): storage_masks = objects.ProtectionStorageMasks( tag=enums.Tags.COMMON_PROTECTION_STORAGE_MASKS) storage_masks.read(local_buffer, kmip_version=kmip_version) self._common_protection_storage_masks = storage_masks if self.is_tag_next(enums.Tags.PRIVATE_PROTECTION_STORAGE_MASKS, local_buffer): storage_masks = objects.ProtectionStorageMasks( tag=enums.Tags.PRIVATE_PROTECTION_STORAGE_MASKS) storage_masks.read(local_buffer, kmip_version=kmip_version) self._private_protection_storage_masks = storage_masks if self.is_tag_next(enums.Tags.PUBLIC_PROTECTION_STORAGE_MASKS, local_buffer): storage_masks = objects.ProtectionStorageMasks( tag=enums.Tags.PUBLIC_PROTECTION_STORAGE_MASKS) storage_masks.read(local_buffer, kmip_version=kmip_version) self._public_protection_storage_masks = storage_masks self.is_oversized(local_buffer)
def read(self, input_buffer, kmip_version=enums.KMIPVersion.KMIP_1_0): """ Read the data encoding the DeriveKey request payload and decode it into its constituent parts. Args: input_buffer (stream): A data stream containing encoded object data, supporting a read method; usually a BytearrayStream object. kmip_version (KMIPVersion): An enumeration defining the KMIP version with which the object will be decoded. Optional, defaults to KMIP 1.0. Raises: ValueError: Raised if the data attribute is missing from the encoded payload. """ super(DeriveKeyRequestPayload, self).read( input_buffer, kmip_version=kmip_version ) local_buffer = utils.BytearrayStream(input_buffer.read(self.length)) if self.is_tag_next(enums.Tags.OBJECT_TYPE, local_buffer): self._object_type = primitives.Enumeration( enums.ObjectType, tag=enums.Tags.OBJECT_TYPE ) self._object_type.read(local_buffer, kmip_version=kmip_version) else: raise exceptions.InvalidKmipEncoding( "The DeriveKey request payload encoding is missing the object " "type." ) unique_identifiers = [] while self.is_tag_next(enums.Tags.UNIQUE_IDENTIFIER, local_buffer): unique_identifier = primitives.TextString( tag=enums.Tags.UNIQUE_IDENTIFIER ) unique_identifier.read(local_buffer, kmip_version=kmip_version) unique_identifiers.append(unique_identifier) if not unique_identifiers: raise exceptions.InvalidKmipEncoding( "The DeriveKey request payload encoding is missing the unique " "identifiers." ) else: self._unique_identifiers = unique_identifiers if self.is_tag_next(enums.Tags.DERIVATION_METHOD, local_buffer): self._derivation_method = primitives.Enumeration( enums.DerivationMethod, tag=enums.Tags.DERIVATION_METHOD ) self._derivation_method.read( local_buffer, kmip_version=kmip_version ) else: raise exceptions.InvalidKmipEncoding( "The DeriveKey request payload encoding is missing the " "derivation method." ) if self.is_tag_next(enums.Tags.DERIVATION_PARAMETERS, local_buffer): self._derivation_parameters = attributes.DerivationParameters() self._derivation_parameters.read( local_buffer, kmip_version=kmip_version ) else: raise exceptions.InvalidKmipEncoding( "The DeriveKey request payload encoding is missing the " "derivation parameters." ) if kmip_version < enums.KMIPVersion.KMIP_2_0: if self.is_tag_next(enums.Tags.TEMPLATE_ATTRIBUTE, local_buffer): self._template_attribute = objects.TemplateAttribute() self._template_attribute.read( local_buffer, kmip_version=kmip_version ) else: raise exceptions.InvalidKmipEncoding( "The DeriveKey request payload encoding is missing the " "template attribute." ) else: if self.is_tag_next(enums.Tags.ATTRIBUTES, local_buffer): attrs = objects.Attributes() attrs.read(local_buffer, kmip_version=kmip_version) value = objects.convert_attributes_to_template_attribute( attrs ) self._template_attribute = value else: raise exceptions.InvalidKmipEncoding( "The DeriveKey request payload encoding is missing the " "attributes structure." ) self.is_oversized(local_buffer)