/*------------------------------------------------------------------ * 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; }
/*------------------------------------------------------------------ * 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); }