📄 decr_mgr.c
字号:
else { keytype = *(CK_KEY_TYPE *)attr->pValue; if (keytype != CKK_AES){ st_err_log(20, __FILE__, __LINE__); return CKR_KEY_TYPE_INCONSISTENT; } } ctx->context_len = sizeof(AES_CONTEXT); ctx->context = (CK_BYTE *)malloc(sizeof(AES_CONTEXT)); if (!ctx->context){ st_err_log(1, __FILE__, __LINE__); return CKR_HOST_MEMORY; } memset( ctx->context, 0x0, sizeof(AES_CONTEXT) ); } break; default: st_err_log(28, __FILE__, __LINE__); return CKR_MECHANISM_INVALID; } if (mech->ulParameterLen > 0) { ptr = (CK_BYTE *)malloc(mech->ulParameterLen); if (!ptr){ st_err_log(1, __FILE__, __LINE__); return CKR_HOST_MEMORY; } memcpy( ptr, mech->pParameter, mech->ulParameterLen ); } ctx->key = key_handle; ctx->mech.ulParameterLen = mech->ulParameterLen; ctx->mech.mechanism = mech->mechanism; ctx->mech.pParameter = ptr; ctx->multi = FALSE; ctx->active = TRUE; return CKR_OK;}////CK_RVdecr_mgr_cleanup( ENCR_DECR_CONTEXT *ctx ){ if (!ctx){ st_err_log(4, __FILE__, __LINE__, __FUNCTION__); return CKR_FUNCTION_FAILED; } ctx->key = 0; ctx->mech.ulParameterLen = 0; ctx->mech.mechanism = 0; ctx->multi = FALSE; ctx->active = FALSE; ctx->context_len = 0; if (ctx->mech.pParameter) { free( ctx->mech.pParameter ); ctx->mech.pParameter = NULL; } if (ctx->context) { free( ctx->context ); ctx->context = NULL; } return CKR_OK;}////CK_RVdecr_mgr_decrypt( SESSION *sess, CK_BBOOL length_only, ENCR_DECR_CONTEXT *ctx, CK_BYTE *in_data, CK_ULONG in_data_len, CK_BYTE *out_data, CK_ULONG *out_data_len ){ if (!sess || !ctx){ st_err_log(4, __FILE__, __LINE__, __FUNCTION__); return CKR_FUNCTION_FAILED; } if (ctx->active == FALSE){ st_err_log(32, __FILE__, __LINE__); return CKR_OPERATION_NOT_INITIALIZED; } // if the caller just wants the decrypted length, there is no reason to // specify the input data. I just need the data length // if ((length_only == FALSE) && (!in_data || !out_data)){ st_err_log(4, __FILE__, __LINE__, __FUNCTION__); return CKR_FUNCTION_FAILED; } if (ctx->multi == TRUE){ st_err_log(31, __FILE__, __LINE__); return CKR_OPERATION_ACTIVE; } switch (ctx->mech.mechanism) { case CKM_CDMF_ECB: case CKM_DES_ECB: return des_ecb_decrypt( sess, length_only, ctx, in_data, in_data_len, out_data, out_data_len ); case CKM_CDMF_CBC: case CKM_DES_CBC: return des_cbc_decrypt( sess, length_only, ctx, in_data, in_data_len, out_data, out_data_len ); case CKM_DES_CBC_PAD: case CKM_CDMF_CBC_PAD: return des_cbc_pad_decrypt( sess, length_only, ctx, in_data, in_data_len, out_data, out_data_len ); case CKM_DES3_ECB: return des3_ecb_decrypt( sess, length_only, ctx, in_data, in_data_len, out_data, out_data_len ); case CKM_DES3_CBC: return des3_cbc_decrypt( sess, length_only, ctx, in_data, in_data_len, out_data, out_data_len ); case CKM_DES3_CBC_PAD: return des3_cbc_pad_decrypt( sess, length_only, ctx, in_data, in_data_len, out_data, out_data_len ); case CKM_RSA_PKCS: return rsa_pkcs_decrypt( sess, length_only, ctx, in_data, in_data_len, out_data, out_data_len ); case CKM_RSA_X_509: return rsa_x509_decrypt( sess, length_only, ctx, in_data, in_data_len, out_data, out_data_len );#ifndef NOAES case CKM_AES_CBC: return aes_cbc_decrypt( sess, length_only, ctx, in_data, in_data_len, out_data, out_data_len ); case CKM_AES_ECB: return aes_ecb_decrypt( sess, length_only, ctx, in_data, in_data_len, out_data, out_data_len ); case CKM_AES_CBC_PAD: return aes_cbc_pad_decrypt( sess, length_only, ctx, in_data, in_data_len, out_data, out_data_len );#endif default: return CKR_MECHANISM_INVALID; } st_err_log(4, __FILE__, __LINE__, __FUNCTION__); return CKR_FUNCTION_FAILED;}////CK_RVdecr_mgr_decrypt_update( SESSION *sess, CK_BBOOL length_only, ENCR_DECR_CONTEXT *ctx, CK_BYTE *in_data, CK_ULONG in_data_len, CK_BYTE *out_data, CK_ULONG *out_data_len ){ if (!sess || !in_data || !out_data || !ctx){ st_err_log(4, __FILE__, __LINE__, __FUNCTION__); return CKR_FUNCTION_FAILED; } if (ctx->active == FALSE){ st_err_log(32, __FILE__, __LINE__); return CKR_OPERATION_NOT_INITIALIZED; } ctx->multi = TRUE; switch (ctx->mech.mechanism) { case CKM_CDMF_ECB: case CKM_DES_ECB: return des_ecb_decrypt_update( sess, length_only, ctx, in_data, in_data_len, out_data, out_data_len ); case CKM_CDMF_CBC: case CKM_DES_CBC: return des_cbc_decrypt_update( sess, length_only, ctx, in_data, in_data_len, out_data, out_data_len ); case CKM_DES_CBC_PAD: case CKM_CDMF_CBC_PAD: return des_cbc_pad_decrypt_update( sess, length_only, ctx, in_data, in_data_len, out_data, out_data_len ); case CKM_DES3_ECB: return des3_ecb_decrypt_update( sess, length_only, ctx, in_data, in_data_len, out_data, out_data_len ); case CKM_DES3_CBC: return des3_cbc_decrypt_update( sess, length_only, ctx, in_data, in_data_len, out_data, out_data_len ); case CKM_DES3_CBC_PAD: return des3_cbc_pad_decrypt_update( sess, length_only, ctx, in_data, in_data_len, out_data, out_data_len );#ifndef NOAES case CKM_AES_ECB: return aes_ecb_decrypt_update( sess, length_only, ctx, in_data, in_data_len, out_data, out_data_len ); case CKM_AES_CBC: return aes_cbc_decrypt_update( sess, length_only, ctx, in_data, in_data_len, out_data, out_data_len ); case CKM_AES_CBC_PAD: return aes_cbc_pad_decrypt_update( sess, length_only, ctx, in_data, in_data_len, out_data, out_data_len );#endif default: st_err_log(28, __FILE__, __LINE__); return CKR_MECHANISM_INVALID; } st_err_log(4, __FILE__, __LINE__, __FUNCTION__); return CKR_FUNCTION_FAILED;}////CK_RVdecr_mgr_decrypt_final( SESSION *sess, CK_BBOOL length_only, ENCR_DECR_CONTEXT *ctx, CK_BYTE *out_data, CK_ULONG *out_data_len ){ if (!sess || !ctx){ st_err_log(4, __FILE__, __LINE__, __FUNCTION__); return CKR_FUNCTION_FAILED; } if (ctx->active == FALSE){ st_err_log(28, __FILE__, __LINE__); return CKR_OPERATION_NOT_INITIALIZED; } switch (ctx->mech.mechanism) { case CKM_CDMF_ECB: case CKM_DES_ECB: return des_ecb_decrypt_final( sess, length_only, ctx, out_data, out_data_len ); case CKM_CDMF_CBC: case CKM_DES_CBC: return des_cbc_decrypt_final( sess, length_only, ctx, out_data, out_data_len ); case CKM_DES_CBC_PAD: case CKM_CDMF_CBC_PAD: return des_cbc_pad_decrypt_final( sess, length_only, ctx, out_data, out_data_len ); case CKM_DES3_ECB: return des3_ecb_decrypt_final( sess, length_only, ctx, out_data, out_data_len ); case CKM_DES3_CBC: return des3_cbc_decrypt_final( sess, length_only, ctx, out_data, out_data_len ); case CKM_DES3_CBC_PAD: return des3_cbc_pad_decrypt_final( sess, length_only, ctx, out_data, out_data_len );#ifndef NOAES case CKM_AES_ECB: return aes_ecb_decrypt_final( sess, length_only, ctx, out_data, out_data_len ); case CKM_AES_CBC: return aes_cbc_decrypt_final( sess, length_only, ctx, out_data, out_data_len ); case CKM_AES_CBC_PAD: return aes_cbc_pad_decrypt_final( sess, length_only, ctx, out_data, out_data_len );#endif default: st_err_log(28, __FILE__, __LINE__); return CKR_MECHANISM_INVALID; } st_err_log(4, __FILE__, __LINE__, __FUNCTION__); return CKR_FUNCTION_FAILED;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -