in verification/cbmc/proofs/derive_data_key/derive_data_key_harness.c [26:86]
int __CPROVER_file_local_session_decrypt_c_derive_data_key(
struct aws_cryptosdk_session *session, struct aws_cryptosdk_dec_materials *materials);
void derive_data_key_harness() {
/* Setup functions include nondet. allocation and common assumptions */
struct aws_cryptosdk_session *session =
session_setup(MAX_TABLE_SIZE, MAX_TRACE_LIST_ITEMS, MAX_EDK_LIST_ITEMS, MAX_BUFFER_SIZE, MAX_STRING_LEN);
struct aws_cryptosdk_dec_materials *materials =
dec_materials_setup(MAX_TRACE_LIST_ITEMS, MAX_BUFFER_SIZE, MAX_STRING_LEN);
/* Assumptions */
if (session->alg_props == NULL) {
struct aws_cryptosdk_alg_properties *props = ensure_alg_properties_attempt_allocation(MAX_STRING_LEN);
__CPROVER_assume(aws_cryptosdk_alg_properties_is_valid(props));
session->alg_props = props;
}
__CPROVER_assume(aws_cryptosdk_commitment_policy_is_valid(session->commitment_policy));
__CPROVER_assume(session->alg_props->commitment_len <= sizeof(session->key_commitment_arr));
/* Save current state of the data structures */
struct aws_byte_buf *old_message_id = &session->header.message_id;
struct store_byte_from_buffer old_byte_from_message_id;
save_byte_from_array(session->header.message_id.buffer, session->header.message_id.len, &old_byte_from_message_id);
struct aws_byte_buf *old_alg_suite_data = &session->header.alg_suite_data;
struct store_byte_from_buffer old_byte_from_alg_suite_data;
save_byte_from_array(
session->header.alg_suite_data.buffer, session->header.alg_suite_data.len, &old_byte_from_alg_suite_data);
struct aws_byte_buf *old_unencrypted_data_key = &materials->unencrypted_data_key;
struct store_byte_from_buffer old_byte_from_unencrypted_data_key;
save_byte_from_array(
materials->unencrypted_data_key.buffer,
materials->unencrypted_data_key.len,
&old_byte_from_unencrypted_data_key);
/* Operation under verification */
int rv = __CPROVER_file_local_session_decrypt_c_derive_data_key(session, materials);
/* Postconditions */
if (rv == AWS_OP_ERR) {
int last_err = aws_last_error();
if (session->alg_props->msg_format_version == AWS_CRYPTOSDK_HEADER_VERSION_1_0) {
if (last_err == AWS_CRYPTOSDK_ERR_UNSUPPORTED_FORMAT) {
assert(session->header.message_id.len != MSG_ID_LEN);
}
} else if (session->alg_props->msg_format_version == AWS_CRYPTOSDK_HEADER_VERSION_2_0) {
if (last_err == AWS_CRYPTOSDK_ERR_UNSUPPORTED_FORMAT) {
assert(
session->header.message_id.len != MSG_ID_LEN_V2 ||
aws_cryptosdk_which_sha(session->alg_props->alg_id) == AWS_CRYPTOSDK_NOSHA);
}
}
}
assert(aws_cryptosdk_session_is_valid(session));
assert(aws_cryptosdk_dec_materials_is_valid(materials));
assert_byte_buf_equivalence(&session->header.alg_suite_data, old_alg_suite_data, &old_byte_from_alg_suite_data);
assert_byte_buf_equivalence(&session->header.message_id, old_message_id, &old_byte_from_message_id);
assert_byte_buf_equivalence(
&materials->unencrypted_data_key, old_unencrypted_data_key, &old_byte_from_unencrypted_data_key);
}