/* * After the test case has been processed by the DUT, the results * need to be JSON formated to be included in the vector set results * file that will be uploaded to the server. This routine handles * the JSON processing for a single test case. */ static ACVP_RESULT acvp_cmac_output_tc(ACVP_CTX *ctx, ACVP_CMAC_TC *stc, JSON_Object *tc_rsp) { ACVP_RESULT rv = ACVP_SUCCESS; char *tmp = NULL; tmp = calloc(ACVP_CMAC_MACLEN_MAX + 1, sizeof(char)); if (!tmp) { ACVP_LOG_ERR("Unable to malloc in acvp_cmac_output_tc"); return ACVP_MALLOC_FAIL; } if (stc->verify) { json_object_set_boolean(tc_rsp, "testPassed", stc->ver_disposition); } else { rv = acvp_bin_to_hexstr(stc->mac, stc->mac_len, tmp, ACVP_CMAC_MACLEN_MAX); if (rv != ACVP_SUCCESS) { ACVP_LOG_ERR("hex conversion failure (mac)"); goto end; } json_object_set_string(tc_rsp, "mac", tmp); } end: if (tmp) free(tmp); return rv; }
/* * Forward prototypes for local functions */ static ACVP_RESULT acvp_kdf135_ikev1_output_tc(ACVP_CTX *ctx, ACVP_KDF135_IKEV1_TC *stc, JSON_Object *tc_rsp) { ACVP_RESULT rv; char *tmp = NULL; tmp = calloc(ACVP_KDF135_IKEV1_SKEY_STR_MAX + 1, sizeof(char)); if (!tmp) { ACVP_LOG_ERR("Unable to malloc in acvp_kdf135 tpm_output_tc"); return ACVP_MALLOC_FAIL; } rv = acvp_bin_to_hexstr(stc->s_key_id, stc->s_key_id_len, tmp, ACVP_KDF135_IKEV1_SKEY_STR_MAX); if (rv != ACVP_SUCCESS) { ACVP_LOG_ERR("hex conversion failure (s_key_id)"); goto err; } json_object_set_string(tc_rsp, "sKeyId", (const char *)tmp); memzero_s(tmp, ACVP_KDF135_IKEV1_SKEY_STR_MAX); rv = acvp_bin_to_hexstr(stc->s_key_id_d, stc->s_key_id_d_len, tmp, ACVP_KDF135_IKEV1_SKEY_STR_MAX); if (rv != ACVP_SUCCESS) { ACVP_LOG_ERR("hex conversion failure (s_key_id_d)"); goto err; } json_object_set_string(tc_rsp, "sKeyIdD", (const char *)tmp); memzero_s(tmp, ACVP_KDF135_IKEV1_SKEY_STR_MAX); rv = acvp_bin_to_hexstr(stc->s_key_id_a, stc->s_key_id_a_len, tmp, ACVP_KDF135_IKEV1_SKEY_STR_MAX); if (rv != ACVP_SUCCESS) { ACVP_LOG_ERR("hex conversion failure (s_key_id_a)"); goto err; } json_object_set_string(tc_rsp, "sKeyIdA", (const char *)tmp); memzero_s(tmp, ACVP_KDF135_IKEV1_SKEY_STR_MAX); rv = acvp_bin_to_hexstr(stc->s_key_id_e, stc->s_key_id_e_len, tmp, ACVP_KDF135_IKEV1_SKEY_STR_MAX); if (rv != ACVP_SUCCESS) { ACVP_LOG_ERR("hex conversion failure (s_key_id_e)"); goto err; } json_object_set_string(tc_rsp, "sKeyIdE", (const char *)tmp); memzero_s(tmp, ACVP_KDF135_IKEV1_SKEY_STR_MAX); err: free(tmp); return rv; }
/* * After the test case has been processed by the DUT, the results * need to be JSON formated to be included in the vector set results * file that will be uploaded to the server. This routine handles * the JSON processing for a single test case. */ static ACVP_RESULT acvp_kdf135_srtp_output_tc(ACVP_CTX *ctx, ACVP_KDF135_SRTP_TC *stc, JSON_Object *tc_rsp) { ACVP_RESULT rv = ACVP_SUCCESS; char *tmp = NULL; tmp = calloc(ACVP_KDF135_SRTP_OUTPUT_MAX + 1, sizeof(char)); if (!tmp) { return ACVP_MALLOC_FAIL; } rv = acvp_bin_to_hexstr(stc->srtp_ke, stc->aes_keylen / 8, tmp, ACVP_KDF135_SRTP_OUTPUT_MAX); if (rv != ACVP_SUCCESS) { ACVP_LOG_ERR("hex conversion failure (srtp_ke)"); goto err; } json_object_set_string(tc_rsp, "srtpKe", (const char *)tmp); memzero_s(tmp, ACVP_KDF135_SRTP_OUTPUT_MAX); rv = acvp_bin_to_hexstr(stc->srtp_ka, 160 / 8, tmp, ACVP_KDF135_SRTP_OUTPUT_MAX); if (rv != ACVP_SUCCESS) { ACVP_LOG_ERR("hex conversion failure (srtp_ka)"); goto err; } json_object_set_string(tc_rsp, "srtpKa", (const char *)tmp); memzero_s(tmp, ACVP_KDF135_SRTP_OUTPUT_MAX); rv = acvp_bin_to_hexstr(stc->srtp_ks, 112 / 8, tmp, ACVP_KDF135_SRTP_OUTPUT_MAX); if (rv != ACVP_SUCCESS) { ACVP_LOG_ERR("hex conversion failure (srtp_ks)"); goto err; } json_object_set_string(tc_rsp, "srtpKs", (const char *)tmp); memzero_s(tmp, ACVP_KDF135_SRTP_OUTPUT_MAX); rv = acvp_bin_to_hexstr(stc->srtcp_ke, stc->aes_keylen / 8, tmp, ACVP_KDF135_SRTP_OUTPUT_MAX); if (rv != ACVP_SUCCESS) { ACVP_LOG_ERR("hex conversion failure (srtcp_ke)"); goto err; } json_object_set_string(tc_rsp, "srtcpKe", (const char *)tmp); memzero_s(tmp, ACVP_KDF135_SRTP_OUTPUT_MAX); rv = acvp_bin_to_hexstr(stc->srtcp_ka, 160 / 8, tmp, ACVP_KDF135_SRTP_OUTPUT_MAX); if (rv != ACVP_SUCCESS) { ACVP_LOG_ERR("hex conversion failure (srtcp_ka)"); goto err; } json_object_set_string(tc_rsp, "srtcpKa", (const char *)tmp); memzero_s(tmp, ACVP_KDF135_SRTP_OUTPUT_MAX); rv = acvp_bin_to_hexstr(stc->srtcp_ks, 112 / 8, tmp, ACVP_KDF135_SRTP_OUTPUT_MAX); if (rv != ACVP_SUCCESS) { ACVP_LOG_ERR("hex conversion failure (srtcp_ks)"); goto err; } json_object_set_string(tc_rsp, "srtcpKs", (const char *)tmp); memzero_s(tmp, ACVP_KDF135_SRTP_OUTPUT_MAX); err: free(tmp); return rv; }
/* * After the test case has been processed by the DUT, the results * need to be JSON formated to be included in the vector set results * file that will be uploaded to the server. This routine handles * the JSON processing for a single test case. */ static ACVP_RESULT acvp_kdf135_ssh_output_tc(ACVP_CTX *ctx, ACVP_KDF135_SSH_TC *stc, JSON_Object *tc_rsp) { char *tmp = NULL; ACVP_RESULT rv = ACVP_SUCCESS; if ((stc->iv_len * 2) > ACVP_KDF135_SSH_STR_OUT_MAX || (stc->e_key_len * 2) > ACVP_KDF135_SSH_STR_OUT_MAX || (stc->i_key_len * 2) > ACVP_KDF135_SSH_STR_OUT_MAX) { ACVP_LOG_ERR("iv_len*2(%u) || e_key_len*2(%u) || i_key_len*2(%u) > ACVP_KDF135_SSH_STR_OUT_MAX(%u)", (stc->iv_len * 2), (stc->e_key_len * 2), (stc->i_key_len * 2), ACVP_KDF135_SSH_STR_OUT_MAX); ACVP_LOG_ERR("Hint, make sure user isn't modifying those field values"); return ACVP_DATA_TOO_LARGE; } tmp = calloc(ACVP_KDF135_SSH_STR_OUT_MAX + 1, sizeof(char)); if (!tmp) { ACVP_LOG_ERR("Unable to malloc"); return ACVP_MALLOC_FAIL; } rv = acvp_bin_to_hexstr(stc->cs_init_iv, stc->iv_len, tmp, ACVP_KDF135_SSH_STR_OUT_MAX); if (rv != ACVP_SUCCESS) { ACVP_LOG_ERR("acvp_bin_to_hexstr() failure"); goto err; } json_object_set_string(tc_rsp, "initialIvClient", tmp); memzero_s(tmp, ACVP_KDF135_SSH_STR_OUT_MAX); rv = acvp_bin_to_hexstr(stc->cs_encrypt_key, stc->e_key_len, tmp, ACVP_KDF135_SSH_STR_OUT_MAX); if (rv != ACVP_SUCCESS) { ACVP_LOG_ERR("acvp_bin_to_hexstr() failure"); goto err; } json_object_set_string(tc_rsp, "encryptionKeyClient", tmp); memzero_s(tmp, ACVP_KDF135_SSH_STR_OUT_MAX); rv = acvp_bin_to_hexstr(stc->cs_integrity_key, stc->i_key_len, tmp, ACVP_KDF135_SSH_STR_OUT_MAX); if (rv != ACVP_SUCCESS) { ACVP_LOG_ERR("acvp_bin_to_hexstr() failure"); goto err; } json_object_set_string(tc_rsp, "integrityKeyClient", tmp); memzero_s(tmp, ACVP_KDF135_SSH_STR_OUT_MAX); rv = acvp_bin_to_hexstr(stc->sc_init_iv, stc->iv_len, tmp, ACVP_KDF135_SSH_STR_OUT_MAX); if (rv != ACVP_SUCCESS) { ACVP_LOG_ERR("acvp_bin_to_hexstr() failure"); goto err; } json_object_set_string(tc_rsp, "initialIvServer", tmp); memzero_s(tmp, ACVP_KDF135_SSH_STR_OUT_MAX); rv = acvp_bin_to_hexstr(stc->sc_encrypt_key, stc->e_key_len, tmp, ACVP_KDF135_SSH_STR_OUT_MAX); if (rv != ACVP_SUCCESS) { ACVP_LOG_ERR("acvp_bin_to_hexstr() failure"); goto err; } json_object_set_string(tc_rsp, "encryptionKeyServer", tmp); memzero_s(tmp, ACVP_KDF135_SSH_STR_OUT_MAX); rv = acvp_bin_to_hexstr(stc->sc_integrity_key, stc->i_key_len, tmp, ACVP_KDF135_SSH_STR_OUT_MAX); if (rv != ACVP_SUCCESS) { ACVP_LOG_ERR("acvp_bin_to_hexstr() failure"); goto err; } json_object_set_string(tc_rsp, "integrityKeyServer", tmp); err: free(tmp); return rv; }