📄 app_general_che.c
字号:
/*****************************************************************************
* Copyright Statement:
* --------------------
* This software is protected by Copyright and the information contained
* herein is confidential. The software may not be copied and the information
* contained herein may not be used or disclosed except with the written
* permission of MediaTek Inc. (C) 2005
*
* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
*
* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
*
* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
*
*****************************************************************************/
/*****************************************************************************
*
* Filename:
* ---------
* app_general_che.c
*
* Project:
* --------
* MAUI
*
* Description:
* ------------
* This file contains general-used cipher/hash functions.
*
* Author:
* -------
* -------
*
*============================================================================
* HISTORY
* Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
*------------------------------------------------------------------------------
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
*------------------------------------------------------------------------------
* Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
*============================================================================
****************************************************************************/
#ifndef _APP_GENERAL_CHE_C
#define _APP_GENERAL_CHE_C
/*****************************************************************************
* Include
*****************************************************************************/
#include "app_general_che.h"
#include "kal_trace.h"
/*****************************************************************************
* Define
*****************************************************************************/
/*****************************************************************************
* Typedef
*****************************************************************************/
/*****************************************************************************
* Local Variable
*****************************************************************************/
/*
* The size of this arrary must be the same as the size of
* CHE_CB_DATA_STRUCT.che_glb_handle
*/
static kal_uint8 *CHE_HANDLE[32];
static kal_mutexid app_che_mutex;
/*****************************************************************************
* Local Function
*****************************************************************************/
/*****************************************************************************
* Global Variable
*****************************************************************************/
/*****************************************************************************
* Global Function
*****************************************************************************/
extern void che_get_ckey(kal_uint8 handle, kal_uint8 *ckey, kal_uint8 *key, CHE_TYPE che_type);
/*****************************************************************************
* FUNCTION
* app_get_che_key
* DESCRIPTION
* Get cipher key via hardware cipher/hash device
* PARAMETERS
* handle [IN]
* ckey [OUT] Ciphered key
* key [IN] Original key sequence
* key_len [IN]
* che_type [IN]
* RETURNS
* void
*****************************************************************************/
kal_bool app_get_che_key(kal_uint8 handle, kal_uint8 *ckey, kal_uint8 *key, kal_uint8 key_len, CHE_TYPE che_type)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
/* ckey must be 4-byte alignment */
//if((ckey%4)!=0)
// return KAL_FALSE;
if ((CHE_HANDLE[handle] > (kal_uint8*) 1) && (CHE_HANDLE[handle] != ckey))
{
/* the handle is already registered to another application */
return KAL_FALSE;
}
/* check the key length */
switch (che_type)
{
case CHE_MD5:
case CHE_SHA1:
/* unknow length */
break;
case CHE_DES_ECB_DEC:
case CHE_DES_CBC_DEC:
case CHE_DES_ECB_ENC:
case CHE_DES_CBC_ENC:
if (key_len != 8)
{
return KAL_FALSE;
}
break;
case CHE_3DES_ECB_DEC:
case CHE_3DES_CBC_DEC:
case CHE_3DES_ECB_ENC:
case CHE_3DES_CBC_ENC:
if (key_len != 24)
{
return KAL_FALSE;
}
break;
case CHE_AES_CBC_DEC_128:
case CHE_AES_ECB_DEC_128:
case CHE_AES_CBC_ENC_128:
case CHE_AES_ECB_ENC_128:
if (key_len != 16)
{
return KAL_FALSE;
}
break;
case CHE_AES_CBC_DEC_192:
case CHE_AES_ECB_DEC_192:
case CHE_AES_CBC_ENC_192:
case CHE_AES_ECB_ENC_192:
if (key_len != 24)
{
return KAL_FALSE;
}
break;
case CHE_AES_CBC_DEC_256:
case CHE_AES_ECB_DEC_256:
case CHE_AES_CBC_ENC_256:
case CHE_AES_ECB_ENC_256:
if (key_len != 32)
{
return KAL_FALSE;
}
break;
default:
return KAL_FALSE;
}
kal_take_mutex(app_che_mutex);
che_get_ckey(handle, ckey, key, che_type);
kal_give_mutex(app_che_mutex);
CHE_HANDLE[handle] = ckey;
return KAL_TRUE;
} /* end of app_get_che_key */
/*****************************************************************************
* FUNCTION
* app_get_che_handle
* DESCRIPTION
* Get a driver handle
* PARAMETERS
* void
* RETURNS
* 0 ~ 31.
*****************************************************************************/
kal_uint8 app_get_che_handle(void)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
kal_uint8 handle;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
if (!app_che_mutex)
app_che_mutex = kal_create_mutex("app_che_mutex");
handle = che_get_handle();
if (CHE_HANDLE[handle] == NULL)
{
CHE_HANDLE[handle] = (kal_uint8*) 1;
return handle;
}
else
{
return APP_CHE_INVALID_NUM;
}
} /* end of app_get_che_handle */
/*****************************************************************************
* FUNCTION
* app_free_che_handle
* DESCRIPTION
* Free the driver handle
* PARAMETERS
* handle [IN]
* RETURNS
* 0 ~ 31.(?)
*****************************************************************************/
void app_free_che_handle(kal_uint8 handle)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
if (CHE_HANDLE[handle] != 0)
{
CHE_HANDLE[handle] = 0;
che_free_handle(handle);
}
} /* end of app_free_che_handle */
/*****************************************************************************
* FUNCTION
* app_drv_cipher
* DESCRIPTION
* cipher interface between the application level and CHE driver
* PARAMETERS
* handle [IN]
* type [IN]
* init_vector [?]
* iv_len [IN]
* ciphered_key [?]
* key_len [IN]
* source [?]
* dest [?]
* data_size [?]
* round [IN]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -