📄 inet_msg_util.c
字号:
j = *(in + i) & 0xf;
if (j <= 9)
{
*(out + i * 2 + 1) = (j + '0');
}
else
{
*(out + i * 2 + 1) = (j + 'a' - 10);
}
};
out[out_len - 1] = '\0';
return KAL_TRUE;
}
/*****************************************************************************
* FUNCTION
* inet_auth_calc_hentity
* DESCRIPTION
*
* PARAMETERS
* mod_id [IN]
* mem_func [?]
* body_data [?]
* body_data_size [IN]
* body_data_filepath [?]
* hentity_md5_array [?]
* sessionKey [IN]
* RETURNS
*
*****************************************************************************/
inet_result_enum inet_auth_calc_hentity(
module_type mod_id,
inet_mem_func_struct *mem_func,
kal_uint8 *body_data,
kal_uint32 body_data_size,
kal_wchar *body_data_filepath,
kal_uint8 *hentity_md5_array,
kal_char **sessionKey)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
kal_uint8 hentity[MD5_SIGNATURE_SIZE];
applib_md5_ctx mdContext;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
if (body_data == NULL && body_data_filepath == NULL && hentity_md5_array == NULL)
{
return INET_RESULT_INVALID_PARAM;
}
if (hentity_md5_array == NULL)
{
applib_md5_init(&mdContext);
if (body_data)
{
applib_md5_update(&mdContext, body_data, body_data_size);
}
else if (body_data_filepath != NULL)
{
/* read file */
if (applib_md5_file_update(&mdContext, body_data_filepath) == KAL_FALSE)
{
return INET_RESULT_FS_ERROR;
}
}
applib_md5_final(hentity, &mdContext);
}
*sessionKey = (kal_char*) inet_malloc(mem_func, MD5_HEX_SIGNATURE_SIZE + 1);
if (*sessionKey == NULL)
{
return INET_RESULT_NO_MEMORY;
}
if (inet_cvt_hex
((hentity_md5_array == NULL) ? (hentity) : (hentity_md5_array), MD5_SIGNATURE_SIZE, (kal_uint8*) * sessionKey,
MD5_HEX_SIGNATURE_SIZE + 1))
{
return INET_RESULT_OK;
}
else
{
inet_mfree(mem_func, *sessionKey);
*sessionKey = NULL;
return INET_RESULT_ERROR;
}
}
/*****************************************************************************
* FUNCTION
* inet_auth_calc_ha1
* DESCRIPTION
*
* PARAMETERS
* mem_func [?]
* algo [IN]
* username [?]
* realm [?]
* password [?]
* nonce [?]
* cnonce [?]
* sessionKey [IN]
* RETURNS
*
*****************************************************************************/
inet_result_enum inet_auth_calc_ha1(
inet_mem_func_struct *mem_func,
inet_auth_algorithm_enum algo,
kal_char *username,
kal_char *realm,
kal_char *password,
kal_char *nonce,
kal_char *cnonce,
kal_char **sessionKey)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
kal_uint8 HA1[MD5_SIGNATURE_SIZE];
applib_md5_ctx mdContext;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
if (username == NULL || realm == NULL ||
sessionKey == NULL || (algo == INET_AUTH_ALGO_MD5_SESS && (nonce == NULL || cnonce == NULL)))
{
return INET_RESULT_INVALID_PARAM;
}
applib_md5_init(&mdContext);
applib_md5_update(&mdContext, (kal_uint8*) username, strlen(username));
applib_md5_update(&mdContext, (kal_uint8*) ":", 1);
applib_md5_update(&mdContext, (kal_uint8*) realm, strlen(realm));
applib_md5_update(&mdContext, (kal_uint8*) ":", 1);
if (password != NULL)
{
applib_md5_update(&mdContext, (kal_uint8*) password, strlen(password));
}
applib_md5_final(HA1, &mdContext);
if (algo == INET_AUTH_ALGO_MD5_SESS)
{
applib_md5_init(&mdContext);
applib_md5_update(&mdContext, HA1, MD5_SIGNATURE_SIZE);
applib_md5_update(&mdContext, (kal_uint8*) ":", 1);
applib_md5_update(&mdContext, (kal_uint8*) nonce, strlen(nonce));
applib_md5_update(&mdContext, (kal_uint8*) ":", 1);
applib_md5_update(&mdContext, (kal_uint8*) cnonce, strlen(cnonce));
applib_md5_final(HA1, &mdContext);
}
*sessionKey = (kal_char*) inet_malloc(mem_func, MD5_HEX_SIGNATURE_SIZE + 1);
if (*sessionKey == NULL)
{
return INET_RESULT_NO_MEMORY;
}
if (inet_cvt_hex(HA1, MD5_SIGNATURE_SIZE, (kal_uint8*) * sessionKey, MD5_HEX_SIGNATURE_SIZE + 1))
{
return INET_RESULT_OK;
}
else
{
inet_mfree(mem_func, *sessionKey);
*sessionKey = NULL;
return INET_RESULT_ERROR;
}
}
/*****************************************************************************
* FUNCTION
* inet_auth_calc_digest_response
* DESCRIPTION
*
* PARAMETERS
* mem_func [?]
* HA1 [IN]
* nonce [IN]
* nonce_count [IN]
* cnonce [IN]
* qop [IN]
* method [IN]
* digest_uri [IN]
* HEntity [IN]
* digest_in_authorization [IN]
* digest_in_authentication_info [IN]
* RETURNS
*
*****************************************************************************/
inet_result_enum inet_auth_calc_digest_response(
inet_mem_func_struct *mem_func,
const kal_uint8 *HA1,
const kal_char *nonce,
const kal_char *nonce_count,
const kal_char *cnonce,
const inet_auth_qop_enum qop,
const kal_char *method,
const kal_char *digest_uri,
const kal_uint8 *HEntity,
kal_char **digest_in_authorization,
kal_char **digest_in_authentication_info)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
kal_uint8 HA2[MD5_SIGNATURE_SIZE];
kal_uint8 HA2HEX[MD5_HEX_SIGNATURE_SIZE + 1];
kal_uint8 HA2_in_rspauth[MD5_SIGNATURE_SIZE];
kal_uint8 HA2HEX_in_rspauth[MD5_HEX_SIGNATURE_SIZE + 1];
kal_uint8 Resp[MD5_SIGNATURE_SIZE];
applib_md5_ctx mdContext;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
if (nonce == NULL || digest_uri == NULL)
{
return INET_RESULT_INVALID_PARAM;
}
/* Calculate H(A2) */
applib_md5_init(&mdContext);
applib_md5_update(&mdContext, (kal_uint8*) method, strlen(method));
applib_md5_update(&mdContext, (kal_uint8*) ":", 1);
applib_md5_update(&mdContext, (kal_uint8*) digest_uri, strlen(digest_uri));
if (qop == INET_AUTH_QOP_AUTH_INT)
{
applib_md5_update(&mdContext, (kal_uint8*) ":", 1);
applib_md5_update(&mdContext, HEntity, MD5_SIGNATURE_SIZE);
}
applib_md5_final(HA2, &mdContext);
if (inet_cvt_hex(HA2, MD5_SIGNATURE_SIZE, HA2HEX, MD5_HEX_SIGNATURE_SIZE + 1) == KAL_FALSE)
{
return INET_RESULT_ERROR;
}
/* Calculate H(A2) used in rspauth */
applib_md5_init(&mdContext);
applib_md5_update(&mdContext, (kal_uint8*) ":", 1);
applib_md5_update(&mdContext, (kal_uint8*) digest_uri, strlen(digest_uri));
if (qop == INET_AUTH_QOP_AUTH_INT)
{
applib_md5_update(&mdContext, (kal_uint8*) ":", 1);
applib_md5_update(&mdContext, HEntity, MD5_SIGNATURE_SIZE);
}
applib_md5_final(HA2_in_rspauth, &mdContext);
if (inet_cvt_hex(HA2_in_rspauth, MD5_SIGNATURE_SIZE, HA2HEX_in_rspauth, MD5_HEX_SIGNATURE_SIZE + 1) == KAL_FALSE)
{
return INET_RESULT_ERROR;
}
/* Calculate digest_in_authorization */
applib_md5_init(&mdContext);
applib_md5_update(&mdContext, HA1, MD5_HEX_SIGNATURE_SIZE);
applib_md5_update(&mdContext, (kal_uint8*) ":", 1);
applib_md5_update(&mdContext, (kal_uint8*) nonce, strlen(nonce));
applib_md5_update(&mdContext, (kal_uint8*) ":", 1);
if (qop == INET_AUTH_QOP_AUTH_INT || qop == INET_AUTH_QOP_AUTH)
{
applib_md5_update(&mdContext, (kal_uint8*) nonce_count, strlen(nonce_count));
applib_md5_update(&mdContext, (kal_uint8*) ":", 1);
applib_md5_update(&mdContext, (kal_uint8*) cnonce, strlen(cnonce));
applib_md5_update(&mdContext, (kal_uint8*) ":", 1);
if (qop == INET_AUTH_QOP_AUTH)
{
applib_md5_update(&mdContext, (kal_uint8*) "auth", 4);
}
else
{
applib_md5_update(&mdContext, (kal_uint8*) "auth-int", 8);
}
applib_md5_update(&mdContext, (kal_uint8*) ":", 1);
}
applib_md5_update(&mdContext, HA2HEX, MD5_HEX_SIGNATURE_SIZE);
applib_md5_final(Resp, &mdContext);
*digest_in_authorization = (kal_char*) inet_malloc(mem_func, MD5_HEX_SIGNATURE_SIZE + 1);
if (*digest_in_authorization == NULL)
{
return INET_RESULT_NO_MEMORY;
}
if (inet_cvt_hex(Resp, MD5_SIGNATURE_SIZE, (kal_uint8*) * digest_in_authorization, MD5_HEX_SIGNATURE_SIZE + 1))
{
if (digest_in_authentication_info == NULL)
{
return INET_RESULT_OK;
}
}
else
{
inet_mfree(mem_func, *digest_in_authorization);
*digest_in_authorization = NULL;
return INET_RESULT_ERROR;
}
/* Calculate digest_in_authentication_info */
applib_md5_init(&mdContext);
applib_md5_update(&mdContext, HA1, MD5_HEX_SIGNATURE_SIZE);
applib_md5_update(&mdContext, (kal_uint8*) ":", 1);
applib_md5_update(&mdContext, (kal_uint8*) nonce, strlen(nonce));
applib_md5_update(&mdContext, (kal_uint8*) ":", 1);
if (qop == INET_AUTH_QOP_AUTH_INT || qop == INET_AUTH_QOP_AUTH)
{
applib_md5_update(&mdContext, (kal_uint8*) nonce_count, strlen(nonce_count));
applib_md5_update(&mdContext, (kal_uint8*) ":", 1);
applib_md5_update(&mdContext, (kal_uint8*) cnonce, strlen(cnonce));
applib_md5_update(&mdContext, (kal_uint8*) ":", 1);
if (qop == INET_AUTH_QOP_AUTH)
{
applib_md5_update(&mdContext, (kal_uint8*) "auth", 4);
}
else
{
applib_md5_update(&mdContext, (kal_uint8*) "auth-int", 8);
}
applib_md5_update(&mdContext, (kal_uint8*) ":", 1);
}
applib_md5_update(&mdContext, HA2HEX_in_rspauth, MD5_HEX_SIGNATURE_SIZE);
applib_md5_final(Resp, &mdContext);
*digest_in_authentication_info = (kal_char*) inet_malloc(mem_func, MD5_HEX_SIGNATURE_SIZE + 1);
if (*digest_in_authentication_info == NULL)
{
return INET_RESULT_NO_MEMORY;
}
if (inet_cvt_hex
(Resp, MD5_SIGNATURE_SIZE, (kal_uint8*) * digest_in_authentication_info, MD5_HEX_SIGNATURE_SIZE + 1))
{
return INET_RESULT_OK;
}
else
{
inet_mfree(mem_func, *digest_in_authentication_info);
*digest_in_authentication_info = NULL;
return INET_RESULT_ERROR;
}
}
/*****************************************************************************
* FUNCTION
* inet_msg_check_value_in_int_list
* DESCRIPTION
*
* PARAMETERS
* list [?]
* int_val [IN]
* RETURNS
*
*****************************************************************************/
kal_bool inet_msg_check_value_in_int_list(inet_int_list_struct *list, kal_int32 int_val)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
while (list)
{
if (list->value == int_val)
{
return KAL_TRUE;
}
list = list->next;
}
return KAL_FALSE;
}
/*****************************************************************************
* FUNCTION
* inet_msg_add_param_object_to_list
* DESCRIPTION
*
* PARAMETERS
* mem_func [?]
* list [IN]
* name [?]
* value [?]
* RETURNS
*
*****************************************************************************/
kal_bool inet_msg_add_param_object_to_list(
inet_mem_func_struct *mem_func,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -