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

📄 decr_mgr.c

📁 IBM的Linux上的PKCS#11实现
💻 C
📖 第 1 页 / 共 3 页
字号:
      if (rc == FALSE){         st_err_log(85, __FILE__, __LINE__);         return CKR_KEY_FUNCTION_NOT_PERMITTED;      }      else      {         flag = *(CK_BBOOL *)attr->pValue;         if (flag != TRUE){            st_err_log(85, __FILE__, __LINE__);            return CKR_KEY_FUNCTION_NOT_PERMITTED;         }      }   }   else if (operation == OP_UNWRAP)   {      rc = object_mgr_find_in_map1( key_handle, &key_obj );      if (rc != CKR_OK){         st_err_log(62, __FILE__, __LINE__);         return CKR_WRAPPING_KEY_HANDLE_INVALID;      }      // is key allowed to unwrap other keys?      //      rc = template_attribute_find( key_obj->template, CKA_UNWRAP, &attr );      if (rc == FALSE){         st_err_log(4, __FILE__, __LINE__, __FUNCTION__);         return CKR_FUNCTION_FAILED; // Cryptoki doesn't define a better return code      }      else      {         flag = *(CK_BBOOL *)attr->pValue;         if (flag == FALSE){            st_err_log(4, __FILE__, __LINE__, __FUNCTION__);            return CKR_FUNCTION_FAILED;         }      }   }   else{      st_err_log(4, __FILE__, __LINE__, __FUNCTION__);      return CKR_FUNCTION_FAILED;   }   // is the mechanism supported?  is the key type correct?  is a   // parameter present if required?  is the key size allowed?   // does the key support decryption?   //   // Will the FCV allow the operation?   //   switch (mech->mechanism)   {      case CKM_DES_ECB:         {            if (mech->ulParameterLen != 0){               st_err_log(29, __FILE__, __LINE__);               return CKR_MECHANISM_PARAM_INVALID;            }            // is the key type correct?            //            rc = template_attribute_find( key_obj->template, CKA_KEY_TYPE, &attr );            if (rc == FALSE){               st_err_log(20, __FILE__, __LINE__);               return CKR_KEY_TYPE_INCONSISTENT;            }            else            {               keytype = *(CK_KEY_TYPE *)attr->pValue;               if (keytype != CKK_DES){                  st_err_log(20, __FILE__, __LINE__);                  return CKR_KEY_TYPE_INCONSISTENT;               }            }            // Check FCV            ////            if ((nv_FCV.FunctionCntlBytes[DES_FUNCTION_BYTE] & FCV_56_BIT_DES) == 0)//               return CKR_MECHANISM_INVALID;            ctx->context_len = sizeof(DES_CONTEXT);            ctx->context     = (CK_BYTE *)malloc(sizeof(DES_CONTEXT));            if (!ctx->context){               st_err_log(1, __FILE__, __LINE__);               return CKR_HOST_MEMORY;            }            memset( ctx->context, 0x0, sizeof(DES_CONTEXT) );         }         break;      case CKM_CDMF_ECB:         {            if (mech->ulParameterLen != 0){               st_err_log(29, __FILE__, __LINE__);               return CKR_MECHANISM_PARAM_INVALID;            }            // is the key type correct?            //            rc = template_attribute_find( key_obj->template, CKA_KEY_TYPE, &attr );            if (rc == FALSE){               st_err_log(20, __FILE__, __LINE__);               return CKR_KEY_TYPE_INCONSISTENT;            }            else            {               keytype = *(CK_KEY_TYPE *)attr->pValue;               if (keytype != CKK_CDMF){                  st_err_log(20, __FILE__, __LINE__);                  return CKR_KEY_TYPE_INCONSISTENT;               }            }            // Check FCV            ////            if ((nv_FCV.FunctionCntlBytes[DES_FUNCTION_BYTE] & FCV_CDMF_DES) == 0)//               return CKR_MECHANISM_INVALID;            ctx->context_len = sizeof(DES_CONTEXT);            ctx->context     = (CK_BYTE *)malloc(sizeof(DES_CONTEXT));            if (!ctx->context){               st_err_log(1, __FILE__, __LINE__);               return CKR_HOST_MEMORY;            }            memset( ctx->context, 0x0, sizeof(DES_CONTEXT) );         }         break;      case CKM_DES_CBC:      case CKM_DES_CBC_PAD:         {            if (mech->ulParameterLen != DES_BLOCK_SIZE){               st_err_log(29, __FILE__, __LINE__);               return CKR_MECHANISM_PARAM_INVALID;            }            // is the key type correct?            //            rc = template_attribute_find( key_obj->template, CKA_KEY_TYPE, &attr );            if (rc == FALSE){               st_err_log(20, __FILE__, __LINE__);               return CKR_KEY_TYPE_INCONSISTENT;            }            else            {               keytype = *(CK_KEY_TYPE *)attr->pValue;               if (keytype != CKK_DES){                  st_err_log(20, __FILE__, __LINE__);                  return CKR_KEY_TYPE_INCONSISTENT;               }            }            // Check FCV            ////            if ((nv_FCV.FunctionCntlBytes[DES_FUNCTION_BYTE] & FCV_56_BIT_DES) == 0)//               return CKR_MECHANISM_INVALID;            ctx->context_len = sizeof(DES_CONTEXT);            ctx->context     = (CK_BYTE *)malloc(sizeof(DES_CONTEXT));            if (!ctx->context){               st_err_log(1, __FILE__, __LINE__);               return CKR_HOST_MEMORY;            }            memset( ctx->context, 0x0, sizeof(DES_CONTEXT) );         }         break;      case CKM_CDMF_CBC:      case CKM_CDMF_CBC_PAD:         {            if (mech->ulParameterLen != DES_BLOCK_SIZE){               st_err_log(29, __FILE__, __LINE__);               return CKR_MECHANISM_PARAM_INVALID;            }            // is the key type correct?            //            rc = template_attribute_find( key_obj->template, CKA_KEY_TYPE, &attr );            if (rc == FALSE){               st_err_log(20, __FILE__, __LINE__);               return CKR_KEY_TYPE_INCONSISTENT;            }            else            {               keytype = *(CK_KEY_TYPE *)attr->pValue;               if (keytype != CKK_CDMF){                  st_err_log(20, __FILE__, __LINE__);                  return CKR_KEY_TYPE_INCONSISTENT;               }            }            ctx->context_len = sizeof(DES_CONTEXT);            ctx->context     = (CK_BYTE *)malloc(sizeof(DES_CONTEXT));            if (!ctx->context){               st_err_log(1, __FILE__, __LINE__);               return CKR_HOST_MEMORY;            }            memset( ctx->context, 0x0, sizeof(DES_CONTEXT) );         }         break;      case CKM_DES3_ECB:         {            if (mech->ulParameterLen != 0)               return CKR_MECHANISM_PARAM_INVALID;            // is the key type correct?            //            rc = template_attribute_find( key_obj->template, CKA_KEY_TYPE, &attr );            if (rc == FALSE){               st_err_log(20, __FILE__, __LINE__);               return CKR_KEY_TYPE_INCONSISTENT;            }            else            {               keytype = *(CK_KEY_TYPE *)attr->pValue;               if (keytype != CKK_DES3 && keytype != CKK_DES2){                  st_err_log(20, __FILE__, __LINE__);                  return CKR_KEY_TYPE_INCONSISTENT;               }            }            // Check FCV            ////            if ((nv_FCV.FunctionCntlBytes[DES_FUNCTION_BYTE] & FCV_TRIPLE_DES) == 0)//               return CKR_MECHANISM_INVALID;            ctx->context_len = sizeof(DES_CONTEXT);            ctx->context     = (CK_BYTE *)malloc(sizeof(DES_CONTEXT));            if (!ctx->context){               st_err_log(1, __FILE__, __LINE__);               return CKR_HOST_MEMORY;            }            memset( ctx->context, 0x0, sizeof(DES_CONTEXT) );         }         break;      case CKM_DES3_CBC:      case CKM_DES3_CBC_PAD:         {            if (mech->ulParameterLen != DES_BLOCK_SIZE)               return CKR_MECHANISM_PARAM_INVALID;            // is the key type correct?            //            rc = template_attribute_find( key_obj->template, CKA_KEY_TYPE, &attr );            if (rc == FALSE){               st_err_log(20, __FILE__, __LINE__);               return CKR_KEY_TYPE_INCONSISTENT;            }            else            {               keytype = *(CK_KEY_TYPE *)attr->pValue;               if (keytype != CKK_DES3 && keytype != CKK_DES2){                  st_err_log(20, __FILE__, __LINE__);                  return CKR_KEY_TYPE_INCONSISTENT;               }            }            // Check FCV            ////            if ((nv_FCV.FunctionCntlBytes[DES_FUNCTION_BYTE] & FCV_TRIPLE_DES) == 0)//               return CKR_MECHANISM_INVALID;            ctx->context_len = sizeof(DES_CONTEXT);            ctx->context     = (CK_BYTE *)malloc(sizeof(DES_CONTEXT));            if (!ctx->context){               st_err_log(1, __FILE__, __LINE__);               return CKR_HOST_MEMORY;            }            memset( ctx->context, 0x0, sizeof(DES_CONTEXT) );         }         break;      case CKM_RSA_X_509:      case CKM_RSA_PKCS:         {            if (mech->ulParameterLen != 0)               return CKR_MECHANISM_PARAM_INVALID;            rc = template_attribute_find( key_obj->template, CKA_KEY_TYPE, &attr );            if (rc == FALSE){               st_err_log(20, __FILE__, __LINE__);               return CKR_KEY_TYPE_INCONSISTENT;            }            else            {               keytype = *(CK_KEY_TYPE *)attr->pValue;               if (keytype != CKK_RSA){                  st_err_log(20, __FILE__, __LINE__);                  return CKR_KEY_TYPE_INCONSISTENT;               }            }            // Check FCV            ////            rc = template_attribute_find( key_obj->template, CKA_MODULUS, &attr );//            if (rc == FALSE ||//                nv_FCV.SymmetricModLength/8 < attr->value_length)//               return (operation == OP_DECRYPT_INIT ? CKR_KEY_SIZE_RANGE : CKR_UNWRAPPING_KEY_SIZE_RANGE );            // RSA cannot be used for multi-part operations            //            ctx->context_len = 0;            ctx->context     = NULL;         }         break;      case CKM_AES_ECB:	 {	    // XXX Copied from DES3, should be verified - KEY		             if (mech->ulParameterLen != 0)               return CKR_MECHANISM_PARAM_INVALID;            // is the key type correct?            //            rc = template_attribute_find( key_obj->template, CKA_KEY_TYPE, &attr );            if (rc == FALSE){               st_err_log(20, __FILE__, __LINE__);               return CKR_KEY_TYPE_INCONSISTENT;            }            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;      case CKM_AES_CBC:      case CKM_AES_CBC_PAD:	 {	    // XXX Copied from DES3, should be verified - KEY		             if (mech->ulParameterLen != AES_INIT_VECTOR_SIZE)               return CKR_MECHANISM_PARAM_INVALID;            // is the key type correct?            //            rc = template_attribute_find( key_obj->template, CKA_KEY_TYPE, &attr );            if (rc == FALSE){               st_err_log(20, __FILE__, __LINE__);               return CKR_KEY_TYPE_INCONSISTENT;            }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -