00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00026 #ifndef OW32_CryptKey_h
00027 #define OW32_CryptKey_h
00028
00029 #include <OW32/XHCRYPTKEY.h>
00030
00031 namespace OW32
00032 {
00033
00035 class OW32_LIB_EXPORT CCryptKey
00036 {
00037 XHCRYPTKEY m_hCryptKey;
00038
00039 CCryptKey(const CCryptKey& );
00040 CCryptKey operator=(const CCryptKey& );
00041
00042 public:
00044 CCryptKey() {}
00045
00047 CCryptKey(HCRYPTKEY hCryptKey) {
00048 m_hCryptKey = hCryptKey;
00049 }
00050
00052 void Destroy()
00053 {
00054 m_hCryptKey.Close();
00055 }
00056
00063 BOOL Gen(HCRYPTPROV hProv, ALG_ID AlgId, DWORD dwFlags=0)
00064 {
00065 m_hCryptKey.Close();
00066 return CryptGenKey(hProv, AlgId, dwFlags, &m_hCryptKey);
00067 }
00068
00076 BOOL Derive(HCRYPTPROV hProv, ALG_ID AlgId, HCRYPTHASH hBaseData,
00077 DWORD dwFlags=0)
00078 {
00079 m_hCryptKey.Close();
00080 return CryptDeriveKey(hProv, AlgId, hBaseData, dwFlags, &m_hCryptKey);
00081 }
00082
00091 BOOL Import(HCRYPTPROV hProv, BYTE* pbData, DWORD dwDataLen,
00092 HCRYPTKEY hPubKey=0, DWORD dwFlags=0)
00093 {
00094 m_hCryptKey.Close();
00095 return CryptImportKey(hProv, pbData, dwDataLen,
00096 hPubKey, dwFlags, &m_hCryptKey);
00097 }
00098
00107 BOOL Decrypt(BYTE *pbData, DWORD *cbData,
00108 BOOL bFinal = TRUE, HCRYPTHASH hHash = NULL, DWORD dwFlags = 0)
00109 {
00110 return CryptDecrypt(m_hCryptKey, hHash, bFinal, dwFlags, pbData, cbData);
00111 }
00112
00123 BOOL Encrypt(BYTE *pbData, DWORD *cbData, DWORD cbBuf,
00124 BOOL bFinal = TRUE, HCRYPTHASH hHash = NULL, DWORD dwFlags = 0)
00125 {
00126 return CryptEncrypt(m_hCryptKey, hHash, bFinal, dwFlags, pbData, cbData, cbBuf);
00127 }
00128 };
00129
00130 }
00131
00132 #endif // OW32_CryptKey_h