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

📄 decr_mgr.c

📁 IBM的Linux上的PKCS#11实现
💻 C
📖 第 1 页 / 共 3 页
字号:
            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 + -