size_t deserialize(InputArchive& ar, SecuredMessage& message) { uint8_t protocol_version = 0; ar >> protocol_version; size_t length = sizeof(protocol_version); if (protocol_version == 2) { const size_t hdr_length = deserialize(ar, message.header_fields); length += hdr_length + length_coding_size(hdr_length); length += deserialize(ar, message.payload); const size_t trlr_length = deserialize(ar, message.trailer_fields); length += trlr_length + length_coding_size(trlr_length); } else { throw deserialization_error("Unsupported SecuredMessage protocol version"); } return length; }
size_t deserialize(InputArchive& ar, Certificate& cert) { uint8_t version = 0; deserialize(ar, version); size_t size = sizeof(cert.version()); if (2 == version) { size += deserialize(ar, cert.signer_info); size += deserialize(ar, cert.subject_info); size += deserialize(ar, cert.subject_attributes); size += length_coding_size(get_size(cert.subject_attributes)); size += deserialize(ar, cert.validity_restriction); size += length_coding_size(get_size(cert.validity_restriction)); size += deserialize(ar, cert.signature); } else { throw deserialization_error("Unsupported Certificate version"); } return size; }