Пример #1
0
/*------------------------------------------------------------------
 * Func : MCP_get_digestbyname
 *
 * Desc : get MCP_MD by name
 *
 * Parm : name : name of the algorithm
 *         
 * Retn : handle of MCP MD
 *------------------------------------------------------------------*/
MCP_CIPHER* MCP_get_cipherbyname(const char* name)
{        
    if (strcmp(name,"aes_128_ecb")==0)                
        return MCP_aes_128_ecb();
     
    if (strcmp(name,"aes_128_cbc")==0)           
        return MCP_aes_128_cbc();        
    
    if (strcmp(name,"des_ecb")==0)           
        return MCP_des_ecb();        
        
    if (strcmp(name,"des_cbc")==0)           
        return MCP_des_cbc();        
    
    if (strcmp(name,"tdes_ecb")==0)           
        return MCP_tdes_ecb();        
        
    if (strcmp(name,"tdes_cbc")==0)           
        return MCP_tdes_cbc();        
                                
    return NULL;
}
Пример #2
0
/*------------------------------------------------------------------
 * Func : mcp_cipher_do_update
 *
 * Desc : open function of md dev
 *
 * Parm : inode : inode of dev
 *        file  : context of file
 *         
 * Retn : 0 : success, others fail  
 *------------------------------------------------------------------*/
static 
int mcp_cipher_do_init(
    MCP_CIPHER_CTX*         ctx, 
    MCP_CIPHER_PARAM*       param
    )
{     
    MCP_CIPHER* cipher = NULL;        
    unsigned char buff[MAX_CIPHER_KEY_SIZE + MAX_CIPHER_IV_SIZE];
    
    switch (param->type) 
    {                                 
    case MCP_CIPHER_AES_128_ECB:    cipher = MCP_aes_128_ecb();     break;        
    case MCP_CIPHER_AES_128_CBC:    cipher = MCP_aes_128_cbc();     break;    
    case MCP_CIPHER_DES_ECB:        cipher = MCP_des_ecb();         break;        
    case MCP_CIPHER_DES_CBC:        cipher = MCP_des_cbc();         break;        
    case MCP_CIPHER_TDES_ECB:       cipher = MCP_tdes_ecb();        break;        
    case MCP_CIPHER_TDES_CBC:       cipher = MCP_tdes_cbc();        break;                                    
    default:    
        printk("[MCP][CIPHER] do cipher init failed, unknow cipher\n");            
        return -EFAULT;
    }  
    
    memset(buff, 0, sizeof(buff));        
    
    if (param->key && param->key_len)
    {        
        if (param->key_len > MAX_CIPHER_KEY_SIZE)
            param->key_len = MAX_CIPHER_KEY_SIZE;
            
        if (copy_from_user((void *) buff, (void __user *)param->key, param->key_len))    
        {
            printk("[MCP][CIPHER] do cipher init failed, copy key from user space failed\n");            
            return -EFAULT;
        }                  
        param->key = buff;
    }        
    else
    {        
        param->key = NULL;
    }        
    
    if (param->iv && param->iv_len)
    {        
        if (param->iv_len > MAX_CIPHER_IV_SIZE)
            param->iv_len = MAX_CIPHER_IV_SIZE;
            
        if (copy_from_user((void *) &buff[MAX_CIPHER_KEY_SIZE], (void __user *)param->iv, param->iv_len))    
        {
            printk("[MCP][CIPHER] do cipher init failed, copy iv from user space failed\n");            
            return -EFAULT;
        }                  
                         
        param->iv = &buff[MAX_CIPHER_KEY_SIZE];
    }        
    else
    {        
        param->iv = NULL;
    }        
                                    
    return MCP_CipherInit(ctx, cipher, param->key, param->iv, param->enc);        
}