00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00014
00021 #if !defined(ZIPARCHIVE_ZIPCRYPTOGRAPH_DOT_H)
00022 #define ZIPARCHIVE_ZIPCRYPTOGRAPH_DOT_H
00023
00024 #if _MSC_VER > 1000
00025 #pragma once
00026 #pragma warning( push )
00027 #pragma warning (disable : 4100) // unreferenced formal parameter
00028 #endif // _MSC_VER > 1000
00029
00030 #include "ZipAutoBuffer.h"
00031 #include "ZipStorage.h"
00032
00033 class CZipFileHeader;
00034
00041 class ZIP_API CZipCryptograph
00042 {
00043 public:
00044
00051 enum EncryptionMethod
00052 {
00053 encStandard,
00054 encWinZipAes128,
00055 encWinZipAes192,
00056 encWinZipAes256,
00057 encNone = 0xFF
00058 };
00059
00070 static CZipCryptograph* CreateCryptograph(int iEncryptionMethod);
00071
00081 static bool IsWinZipAesEncryption(int iEncryptionMethod)
00082 {
00083 return iEncryptionMethod == encWinZipAes128 || iEncryptionMethod == encWinZipAes192 || iEncryptionMethod == encWinZipAes256;
00084 }
00085
00096 static DWORD GetEncryptedInfoSize(int iEncryptionMethod);
00097
00108 static DWORD GetEncryptedInfoSizeBeforeData(int iEncryptionMethod);
00109
00120 static DWORD GetEncryptedInfoSizeAfterData(int iEncryptionMethod);
00121
00131 static bool IsEncryptionSupported(int iEncryptionMethod)
00132 {
00133 return iEncryptionMethod == encStandard;
00134 }
00135
00151 virtual bool InitDecode(CZipAutoBuffer& password, CZipFileHeader& currentFile, CZipStorage& storage) = 0;
00152
00165 virtual void InitEncode(CZipAutoBuffer& password, CZipFileHeader& currentFile, CZipStorage& storage) = 0;
00166
00176 virtual void Decode(char* pBuffer, DWORD uSize) = 0;
00177
00187 virtual void Encode(char* pBuffer, DWORD uSize) = 0;
00188
00198 virtual void FinishDecode(CZipFileHeader& currentFile, CZipStorage& storage){};
00199
00209 virtual void FinishEncode(CZipFileHeader& currentFile, CZipStorage& storage){};
00210
00220 virtual bool CanHandle(int iEncryptionMethod)
00221 {
00222 return false;
00223 }
00224 virtual ~CZipCryptograph(){}
00225 };
00226
00227 #if _MSC_VER > 1000
00228 #pragma warning( pop )
00229 #endif // _MSC_VER > 1000
00230
00231 #endif