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

📄 ipp_cipher_blf.cpp

📁 这是在PCA下的基于IPP库示例代码例子,在网上下了IPP的库之后,设置相关参数就可以编译该代码.
💻 CPP
字号:
/*
//
//               INTEL CORPORATION PROPRIETARY INFORMATION
//  This software is supplied under the terms of a license agreement or
//  nondisclosure agreement with Intel Corporation and may not be copied
//  or disclosed except in accordance with the terms of that agreement.
//        Copyright (c) 2005 Intel Corporation. All Rights Reserved.
//
*/

#include "ipp_cipher_blf.h"
#include <string.h>

//////////////////////////////////////////////////
//
// cipher: Blowfish
//
BLF::BLF(const Ipp8u* pKey, int keyLen)
{
   algoBlockSize = BLF_BLKLEN;

   int ctxSize;
   ippsBlowfishGetSize(&ctxSize); 
   pCtx = (IppsBlowfishSpec*)( new Ipp8u [ctxSize] );

   ResetKey(pKey, keyLen);
}

void BLF::ResetKey(const Ipp8u* pKey, int keyLen)
{
   if(keyLen*8 > BF_KEYSIZE_MAX)
      keyLen = BF_KEYSIZE_MAX/8;

   ippsBlowfishInit(pKey, keyLen, pCtx);
}

BLF::~BLF()
{
   delete [] (Ipp8u*)pCtx;
}

int BLF::doCipher(Ipp8u* pDst, const Ipp8u* pSrc, int srcLen)
{
   Ipp8u newIV[BLF_BLKLEN];

   switch (mode) {
      case ECB:
         status = ENCRYPT==operation?
                  ippsBlowfishEncryptECB(pSrc, pDst, srcLen, pCtx, NONE):
                  ippsBlowfishDecryptECB(pSrc, pDst, srcLen, pCtx, NONE);
         break;
      case CBC:
         if(ENCRYPT==operation) {
            status = ippsBlowfishEncryptCBC(pSrc, pDst, srcLen, pCtx, iv, NONE);
            memcpy(iv, pDst+srcLen-BLF_BLKLEN, BLF_BLKLEN);
         }
         else {
            memcpy(newIV, pSrc+srcLen-BLF_BLKLEN, BLF_BLKLEN);
            status = ippsBlowfishDecryptCBC(pSrc, pDst, srcLen, pCtx, iv, NONE);
            memcpy(iv, newIV, BLF_BLKLEN);
         }
         break;
      case CFB:
         if(ENCRYPT==operation) {
            status = ippsBlowfishEncryptCFB(pSrc, pDst, srcLen, param, pCtx, iv, NONE);
            if(srcLen<BLF_BLKLEN) {
               memcpy(iv, iv+srcLen, BLF_BLKLEN-srcLen);
               memcpy(iv+BLF_BLKLEN-srcLen, pDst, srcLen);
            }
            else
               memcpy(iv, pDst+srcLen-BLF_BLKLEN, BLF_BLKLEN);
         }
         else {
            if(srcLen<BLF_BLKLEN) {
               memcpy(newIV, iv+srcLen, BLF_BLKLEN-srcLen);
               memcpy(newIV+BLF_BLKLEN-srcLen, pSrc, srcLen);
            }
            else
               memcpy(newIV, pSrc+srcLen-BLF_BLKLEN, BLF_BLKLEN);
            status = ippsBlowfishDecryptCFB(pSrc, pDst, srcLen, param, pCtx, iv, NONE);
            memcpy(iv, newIV, BLF_BLKLEN);
         }
         break;
      case CTR:
         status = ENCRYPT==operation?
                  ippsBlowfishEncryptCTR(pSrc, pDst, srcLen, pCtx, iv, param):
                  ippsBlowfishDecryptCTR(pSrc, pDst, srcLen, pCtx, iv, param);
         break;
      default:
         return 0; // unsupported mode
   }
   return ippStsNoErr==status;
}

⌨️ 快捷键说明

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