in src/aws_encryption_sdk_cli/internal/metadata.py [0:0]
def json_ready_header(header):
# type: (MessageHeader) -> Dict[str, Any]
"""Create a JSON-serializable representation of a :class:`aws_encryption_sdk.structures.MessageHeader`.
http://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/message-format.html#header-structure
:param header: header for which to create a JSON-serializable representation
:type header: aws_encryption_sdk.structures.MessageHeader
:rtype: dict
"""
dict_header = attr.asdict(header)
del dict_header["content_aad_length"]
dict_header["version"] = str(float(dict_header["version"].value))
dict_header["algorithm"] = dict_header["algorithm"].name
for key, value in dict_header.items():
if isinstance(value, Enum):
dict_header[key] = value.value
dict_header["message_id"] = unicode_b64_encode(dict_header["message_id"])
dict_header["encrypted_data_keys"] = sorted(
list(dict_header["encrypted_data_keys"]),
key=lambda x: six.b(x["key_provider"]["provider_id"]) + x["key_provider"]["key_info"],
)
for data_key in dict_header["encrypted_data_keys"]:
data_key["key_provider"]["provider_id"] = unicode_b64_encode(six.b(data_key["key_provider"]["provider_id"]))
data_key["key_provider"]["key_info"] = unicode_b64_encode(data_key["key_provider"]["key_info"])
data_key["encrypted_data_key"] = unicode_b64_encode(data_key["encrypted_data_key"])
if dict_header["commitment_key"]:
dict_header["commitment_key"] = unicode_b64_encode(dict_header["commitment_key"])
return dict_header