Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

149 lines
4.0 KiB

  1. // KeyContext.h -- Key Context class declaration
  2. // (c) Copyright Schlumberger Technology Corp., unpublished work, created
  3. // 1999. This computer program includes Confidential, Proprietary
  4. // Information and is a Trade Secret of Schlumberger Technology Corp. All
  5. // use, disclosure, and/or reproduction is prohibited unless authorized
  6. // in writing. All Rights Reserved.
  7. #if !defined(SLBCSP_KEYCONTEXT_H)
  8. #define SLBCSP_KEYCONTEXT_H
  9. #include <memory> // for auto_ptr
  10. #include <wincrypt.h>
  11. #include <winscard.h>
  12. #include <handles.h>
  13. #include <iopPriBlob.h>
  14. #include "AlignedBlob.h"
  15. #include "RsaKey.h"
  16. #define KT_UNDEFINED static_cast<DWORD>(0x00000000)
  17. #define KT_PUBLICKEY static_cast<DWORD>(PUBLICKEYBLOB)
  18. #define KT_SESSIONKEY static_cast<DWORD>(SIMPLEBLOB)
  19. class CKeyContext
  20. : public CHandle
  21. {
  22. public:
  23. // Types
  24. typedef RsaKey::StrengthType StrengthType;
  25. enum
  26. {
  27. Symmetric,
  28. RsaKeyPair
  29. } KeyClass;
  30. // C'tors/D'tors
  31. virtual
  32. ~CKeyContext();
  33. // Operators
  34. // Operations
  35. virtual std::auto_ptr<CKeyContext>
  36. Clone(DWORD const *pdwReserved,
  37. DWORD dwFlags) const = 0;
  38. virtual void
  39. Close();
  40. virtual void
  41. Decrypt(HCRYPTHASH hAuxHash,
  42. BOOL fFinal,
  43. DWORD dwFlags,
  44. BYTE *pbData,
  45. DWORD *pdwDataLen);
  46. virtual void
  47. Encrypt(HCRYPTHASH hAuxHash,
  48. BOOL fFinal,
  49. DWORD dwFlags,
  50. BYTE *pbData,
  51. DWORD *pdwDataLen,
  52. DWORD dwBufLen);
  53. virtual void
  54. Generate(ALG_ID AlgoId,
  55. DWORD dwFlags) = 0;
  56. virtual void
  57. ImportToAuxCSP() = 0;
  58. // Access
  59. virtual scu::SecureArray<BYTE>
  60. AsAlignedBlob(HCRYPTKEY hcryptkey,
  61. DWORD dwBlobType) const = 0;
  62. HCRYPTKEY
  63. GetKey() const;
  64. virtual HCRYPTKEY
  65. KeyHandleInAuxCSP();
  66. virtual StrengthType
  67. MaxStrength() const = 0;
  68. virtual StrengthType
  69. MinStrength() const = 0;
  70. virtual DWORD
  71. TypeOfKey() const;
  72. // Predicates
  73. protected:
  74. // Types
  75. // C'tors/D'tors
  76. CKeyContext(HCRYPTPROV hProv,
  77. DWORD dwTypeOfKey = KT_UNDEFINED);
  78. // Duplicate the key and its state
  79. CKeyContext(CKeyContext const &rhs,
  80. DWORD const *pdwReserved,
  81. DWORD dwFlags);
  82. // Operators
  83. // Operations
  84. // Access
  85. HCRYPTPROV
  86. AuxProvider() const;
  87. // Predicates
  88. // Variables
  89. HCRYPTKEY m_hKey;
  90. scu::SecureArray<BYTE> m_apabKey;
  91. private:
  92. // Types
  93. // C'tors/D'tors
  94. // not defined, copying not allowed
  95. CKeyContext(CKeyContext const &rkctx);
  96. // Operators
  97. // not defined, initializing not allowed
  98. CKeyContext &
  99. operator=(CKeyContext const &rkctx);
  100. // Operations
  101. // Access
  102. // Predicates
  103. // Variables
  104. DWORD const m_dwTypeOfKey;
  105. HCRYPTPROV const m_hAuxProvider;
  106. };
  107. #endif // SLBCSP_KEYCONTEXT_H