147 lines
3.8 KiB
C
147 lines
3.8 KiB
C
|
// 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 <memory> // for auto_ptr
|
||
|
|
||
|
#include <wincrypt.h>
|
||
|
#include <winscard.h>
|
||
|
#include <handles.h>
|
||
|
|
||
|
#include "AlignedBlob.h"
|
||
|
#include "RsaKey.h"
|
||
|
|
||
|
#define KT_UNDEFINED static_cast<DWORD>(0x00000000)
|
||
|
#define KT_PUBLICKEY static_cast<DWORD>(PUBLICKEYBLOB)
|
||
|
#define KT_SESSIONKEY static_cast<DWORD>(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<CKeyContext>
|
||
|
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<AlignedBlob> 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
|