// KeyContext.h -- Key Context class declaration // (c) Copyright Schlumberger Technology Corp., unpublished work, created // 1999. This computer program includes Confidential, Proprietary // Information and is a Trade Secret of Schlumberger Technology Corp. All // use, disclosure, and/or reproduction is prohibited unless authorized // in writing. All Rights Reserved. #if !defined(SLBCSP_KEYCONTEXT_H) #define SLBCSP_KEYCONTEXT_H #include // for auto_ptr #include #include #include #include "AlignedBlob.h" #include "RsaKey.h" #define KT_UNDEFINED static_cast(0x00000000) #define KT_PUBLICKEY static_cast(PUBLICKEYBLOB) #define KT_SESSIONKEY static_cast(SIMPLEBLOB) class CKeyContext : public CHandle { public: // Types typedef RsaKey::StrengthType StrengthType; enum { Symmetric, RsaKeyPair } KeyClass; // C'tors/D'tors virtual ~CKeyContext(); // Operators // Operations virtual std::auto_ptr Clone(DWORD const *pdwReserved, DWORD dwFlags) const = 0; virtual void Close(); virtual void Decrypt(HCRYPTHASH hAuxHash, BOOL fFinal, DWORD dwFlags, BYTE *pbData, DWORD *pdwDataLen); virtual void Encrypt(HCRYPTHASH hAuxHash, BOOL fFinal, DWORD dwFlags, BYTE *pbData, DWORD *pdwDataLen, DWORD dwBufLen); virtual void Generate(ALG_ID AlgoId, DWORD dwFlags) = 0; virtual void ImportToAuxCSP() = 0; // Access virtual AlignedBlob AsAlignedBlob(HCRYPTKEY hcryptkey, DWORD dwBlobType) const = 0; HCRYPTKEY GetKey() const; virtual HCRYPTKEY KeyHandleInAuxCSP(); virtual StrengthType MaxStrength() const = 0; virtual StrengthType MinStrength() const = 0; virtual DWORD TypeOfKey() const; // Predicates protected: // Types // C'tors/D'tors CKeyContext(HCRYPTPROV hProv, DWORD dwTypeOfKey = KT_UNDEFINED); // Duplicate the key and its state CKeyContext(CKeyContext const &rhs, DWORD const *pdwReserved, DWORD dwFlags); // Operators // Operations // Access HCRYPTPROV AuxProvider() const; // Predicates // Variables HCRYPTKEY m_hKey; std::auto_ptr m_apabKey; private: // Types // C'tors/D'tors // not defined, copying not allowed CKeyContext(CKeyContext const &rkctx); // Operators // not defined, initializing not allowed CKeyContext & operator=(CKeyContext const &rkctx); // Operations // Access // Predicates // Variables DWORD const m_dwTypeOfKey; HCRYPTPROV const m_hAuxProvider; }; #endif // SLBCSP_KEYCONTEXT_H