1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- // IEncryption.h: interface for the IEncryption class.
- //
- //////////////////////////////////////////////////////////////////////
- #if !defined(AFX_IENCRYPTION_H__7741547B_BA15_4851_A41B_2B4EC1DC12D5__INCLUDED_)
- #define AFX_IENCRYPTION_H__7741547B_BA15_4851_A41B_2B4EC1DC12D5__INCLUDED_
- #if _MSC_VER > 1000
- #pragma once
- #endif // _MSC_VER > 1000
- // function to be exported from dll to create instance of interface
- #ifdef _EXPORTING // declare this in project settings for dll _only_
- # define DLL_DECLSPEC __declspec(dllexport)
- #else
- # define DLL_DECLSPEC __declspec(dllimport)
- #endif
- #define IENCRYPTION_VERSION 0x0000
- class IEncryption;
- typedef IEncryption* (*PFNCREATE)(); // function prototype
- extern "C" DLL_DECLSPEC IEncryption* CreateEncryptionInterface();
- typedef int (*PFNGETVERSION)(); // function prototype
- extern "C" DLL_DECLSPEC int GetInterfaceVersion();
- // helper method
- static IEncryption* CreateEncryptionInterface(const char* szDllPath)
- {
- IEncryption* pInterface = NULL;
- HMODULE hDll = LoadLibrary(szDllPath);
-
- if (hDll)
- {
- PFNCREATE pCreate = (PFNCREATE)GetProcAddress(hDll, "CreateEncryptionInterface");
-
- if (pCreate)
- {
- // check version
- PFNGETVERSION pVersion = (PFNGETVERSION)GetProcAddress(hDll, "GetInterfaceVersion");
- if (!IENCRYPTION_VERSION || (pVersion && pVersion() >= IENCRYPTION_VERSION))
- pInterface = pCreate();
- }
- }
-
- return pInterface;
- }
- static BOOL IsEncryptionDll(const char* szDllPath)
- {
- HMODULE hDll = LoadLibrary(szDllPath);
-
- if (hDll)
- {
- PFNCREATE pCreate = (PFNCREATE)GetProcAddress(hDll, "CreateEncryptionInterface");
- FreeLibrary(hDll);
- return (NULL != pCreate);
- }
- return FALSE;
- }
- class IEncryption
- {
- public:
- virtual void Release() = 0; // releases the interface
-
- // returns a dynamically allocated buffer to the encrypted text
- // caller responsible for calling FreeBuffer on the returned buffer
- virtual bool Encrypt(const unsigned char* pInput, int nLenInput, const char* szPassword,
- unsigned char*& pOutput, int& nLenOutput) = 0;
-
- // returns a dynamically allocated buffer to the decrypted text
- // caller responsible for calling FreeBuffer on the returned buffer
- virtual bool Decrypt(const unsigned char* pInput, int nLenInput, const char* szPassword,
- unsigned char*& pOutput, int& nLenOutput) = 0;
-
- // frees a previously returned buffer and sets the ptr to NULL
- // eg for buffer allocated with 'new' use 'delete []'
- // eg for buffer allocated with 'strdup' use 'free'
- virtual void FreeBuffer(unsigned char*& pBuffer) = 0;
-
- };
- static void ReleaseEncryptionInterface(IEncryption*& pInterface)
- {
- if (pInterface)
- {
- pInterface->Release();
- pInterface = NULL;
- }
- }
- #endif // !defined(AFX_IENCRYPTION_H__7741547B_BA15_4851_A41B_2B4EC1DC12D5__INCLUDED_)
|