SourceForge.jp

dkutilEncrypt.h

説明を見る。
00001 
00002 
00013 #ifndef _dkutil_Encrypt_h__
00014 #define _dkutil_Encrypt_h__
00015 
00016 #include "blowfish.h"
00017 #include "../dkutilBuffer.h"
00018 
00019 namespace dkutil{
00020 
00021 namespace policy{
00022 
00024 class BlowFishCrypt{
00025 protected:
00026     bool mInited;
00027     CBlowFish mBlowFish;
00028 public:
00030     size_t key_max()const{return MAXKEYBYTES;}
00031     BlowFishCrypt(const BYTE *key,size_t keysize){
00032         
00033         if(init(key,keysize)) return;
00034         mInited = false;
00035     }
00036     virtual ~BlowFishCrypt(){end();}
00041 
00042     bool init(const BYTE *key,size_t keysize){
00043         if(keysize > key_max())return false;
00044         BYTE buff[MAXKEYBYTES + 1];
00045         NULL_CHAR_ARRAY(buff);
00046         if(DKUTIL_FAILED(dkmemcpy(buff,sizeof(buff),key,keysize)))
00047         {
00048             return false;
00049         }
00050         mBlowFish.Initialize(buff,keysize);
00051         mInited = true;
00052         return true;
00053     }
00062     bool encode(BYTE *src,size_t srcsize,byte_buffer &dest,DWORD *result = NULL){
00063         if(src==NULL || srcsize == 0) return false;
00064         if(false==mInited) return false;
00065 
00066 
00067         size_t realsize = mBlowFish.GetOutputLength(srcsize);
00068         //dest.clear();
00069         dest.resize(realsize);// + 1した方がいいのかなぁ?(いや駄目か。)
00070         DWORD r = mBlowFish.Encode((BYTE *)src,dest.data(),dest.size());
00071         if(result){
00072             *result = r;
00073         }
00074         return true;
00075     }
00082     bool decode(BYTE *src,size_t srcsize,byte_buffer &dest){
00083         if(src==NULL || srcsize==0) return false;
00084         if(false==mInited) return false;
00085 
00086         size_t realsize = mBlowFish.GetOutputLength(srcsize);
00087         dest.resize(realsize);
00088         mBlowFish.Decode((BYTE *)src,dest.data(),dest.size());
00089         return true;//(maybe...)
00090     }
00092     void end(){
00093         if(mInited==true){
00094             mInited=false;
00095         }
00096     }
00097 };
00098 
00099 
00100 }//end of policy namespace
00101 
00102 
00103 }//end of dkutil namespace
00104 
00105 #endif

dkutil 1.02リリース前 d金魚専用マニュアルバージョンに対してSun Dec 28 21:23:07 2003に生成されました。 doxygen 1.3.5