⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 inet_msg_util.c

📁 最新MTK手机软件源码
💻 C
📖 第 1 页 / 共 5 页
字号:
        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 + -