static void setup_retrieve_persisted_key_mocks(bool json_file_found) { if (json_file_found) { STRICT_EXPECTED_CALL(json_parse_file(IGNORED_PTR_ARG)) .IgnoreArgument_string(); STRICT_EXPECTED_CALL(json_value_get_object(IGNORED_PTR_ARG)) .IgnoreArgument_value(); STRICT_EXPECTED_CALL(json_object_get_value(IGNORED_PTR_ARG, IGNORED_PTR_ARG)) .IgnoreArgument_name() .IgnoreArgument_object(); STRICT_EXPECTED_CALL(json_object_get_value(IGNORED_PTR_ARG, IGNORED_PTR_ARG)) .IgnoreArgument_name() .IgnoreArgument_object(); STRICT_EXPECTED_CALL(json_object_get_value(IGNORED_PTR_ARG, IGNORED_PTR_ARG)) .IgnoreArgument_name() .IgnoreArgument_object(); STRICT_EXPECTED_CALL(json_object_get_value(IGNORED_PTR_ARG, IGNORED_PTR_ARG)) .IgnoreArgument_name() .IgnoreArgument_object(); STRICT_EXPECTED_CALL(json_value_get_string(IGNORED_PTR_ARG)) .IgnoreArgument_value(); STRICT_EXPECTED_CALL(Azure_Base64_Decode(IGNORED_PTR_ARG)) .IgnoreArgument_source(); STRICT_EXPECTED_CALL(json_value_get_string(IGNORED_PTR_ARG)) .IgnoreArgument_value(); STRICT_EXPECTED_CALL(Azure_Base64_Decode(IGNORED_PTR_ARG)) .IgnoreArgument_source(); STRICT_EXPECTED_CALL(json_value_get_string(IGNORED_PTR_ARG)) .IgnoreArgument_value(); STRICT_EXPECTED_CALL(mallocAndStrcpy_s(IGNORED_PTR_ARG, IGNORED_PTR_ARG)) .IgnoreArgument_destination() .IgnoreArgument_source(); STRICT_EXPECTED_CALL(json_value_get_string(IGNORED_PTR_ARG)) .IgnoreArgument_value(); STRICT_EXPECTED_CALL(Azure_Base64_Decode(IGNORED_PTR_ARG)) .IgnoreArgument_source(); STRICT_EXPECTED_CALL(BUFFER_u_char(IGNORED_PTR_ARG)) .IgnoreArgument_handle(); STRICT_EXPECTED_CALL(BUFFER_length(IGNORED_PTR_ARG)) .IgnoreArgument_handle(); STRICT_EXPECTED_CALL(BIO_new_mem_buf(IGNORED_PTR_ARG, IGNORED_NUM_ARG)) .IgnoreArgument_buf() .IgnoreArgument_len(); STRICT_EXPECTED_CALL(PEM_read_bio_RSA_PUBKEY(IGNORED_PTR_ARG, IGNORED_NUM_ARG, IGNORED_PTR_ARG, IGNORED_NUM_ARG)) .IgnoreAllArguments(); STRICT_EXPECTED_CALL(BUFFER_u_char(IGNORED_PTR_ARG)) .IgnoreArgument_handle(); STRICT_EXPECTED_CALL(BUFFER_length(IGNORED_PTR_ARG)) .IgnoreArgument_handle(); STRICT_EXPECTED_CALL(BIO_new_mem_buf(IGNORED_PTR_ARG, IGNORED_NUM_ARG)) .IgnoreArgument_buf() .IgnoreArgument_len(); STRICT_EXPECTED_CALL(PEM_read_bio_RSAPrivateKey(IGNORED_PTR_ARG, IGNORED_NUM_ARG, IGNORED_PTR_ARG, IGNORED_NUM_ARG)) .IgnoreAllArguments(); STRICT_EXPECTED_CALL(BUFFER_delete(IGNORED_PTR_ARG)) .IgnoreArgument_handle(); STRICT_EXPECTED_CALL(BUFFER_delete(IGNORED_PTR_ARG)) .IgnoreArgument_handle(); } else { STRICT_EXPECTED_CALL(json_parse_file(IGNORED_PTR_ARG)) .IgnoreArgument_string() .SetReturn(NULL); } }
static int sign_sas_data(PROV_AUTH_INFO* auth_info, const char* payload, unsigned char** output, size_t* len) { int result; size_t payload_len = strlen(payload); if (auth_info->sec_type == PROV_AUTH_TYPE_TPM) { if (auth_info->hsm_client_sign_data(auth_info->hsm_client_handle, (const unsigned char*)payload, strlen(payload), output, len) != 0) { LogError("Failed signing data"); result = MU_FAILURE; } else { result = 0; } } else { char* symmetrical_key = auth_info->hsm_client_get_symm_key(auth_info->hsm_client_handle); if (symmetrical_key == NULL) { LogError("Failed getting asymmetrical key"); result = MU_FAILURE; } else { BUFFER_HANDLE decoded_key; BUFFER_HANDLE output_hash; if ((decoded_key = Azure_Base64_Decode(symmetrical_key)) == NULL) { LogError("Failed decoding symmetrical key"); result = MU_FAILURE; } else if ((output_hash = BUFFER_new()) == NULL) { LogError("Failed allocating output hash buffer"); BUFFER_delete(decoded_key); result = MU_FAILURE; } else { size_t decoded_key_len = BUFFER_length(decoded_key); const unsigned char* decoded_key_bytes = BUFFER_u_char(decoded_key); if (HMACSHA256_ComputeHash(decoded_key_bytes, decoded_key_len, (const unsigned char*)payload, payload_len, output_hash) != HMACSHA256_OK) { LogError("Failed computing HMAC Hash"); result = MU_FAILURE; } else { *len = BUFFER_length(output_hash); if ((*output = malloc(*len)) == NULL) { LogError("Failed allocating output buffer"); result = MU_FAILURE; } else { const unsigned char* output_data = BUFFER_u_char(output_hash); memcpy(*output, output_data, *len); result = 0; } } BUFFER_delete(decoded_key); BUFFER_delete(output_hash); } } free(symmetrical_key); } return result; }