// PubKeyCtx.h -- declaration of CPublicKeyContext // (c) Copyright Schlumberger Technology Corp., unpublished work, created // 2000. 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_PUBKEYCTX_H) #define SLBCSP_PUBKEYCTX_H #include #include #include "KeyContext.h" #include "MsRsaPriKB.h" #include "MsRsaPubKB.h" class CryptContext; class CHashContext; class Pkcs11Attributes; class CPublicKeyContext : public CKeyContext { public: // Types // C'tors/D'tors CPublicKeyContext(HCRYPTPROV hProv, CryptContext &rcryptctx, ALG_ID algid = 0, bool fVerifyKeyExists = true); ~CPublicKeyContext(); // Operators // Operations virtual std::auto_ptr Clone(DWORD const *pdwReserved, DWORD dwFlags) const; virtual void AuxPublicKey(AlignedBlob const &rabMsPublicKey); void ClearAuxPublicKey(); virtual void Certificate(BYTE *pbData); virtual Blob Decrypt(Blob const &rblbCipher); virtual void Decrypt(HCRYPTHASH hAuxHash, BOOL Final, DWORD dwFlags, BYTE *pbData, DWORD *pdwDataLen); virtual void Generate(ALG_ID AlgoId, DWORD dwFlags); virtual void ImportPrivateKey(MsRsaPrivateKeyBlob const &rmsprikb, bool fExportable); virtual void ImportPublicKey(MsRsaPublicKeyBlob const &rmspubkb); virtual void Permissions(BYTE bPermissions); virtual Blob Sign(CHashContext *pHash, bool fNoHashOid); // Auxiliary CSP communication virtual void ImportToAuxCSP(void); void VerifyKeyExists() const; void VerifySignature(HCRYPTHASH hHash, BYTE const *pbSignature, DWORD dwSigLen, LPCTSTR sDescription, DWORD dwFlags); // Access virtual AlignedBlob AsAlignedBlob(HCRYPTKEY hDummy, DWORD dwBlobType) const; virtual DWORD KeySpec() const; virtual StrengthType MaxStrength() const; virtual StrengthType MinStrength() const; virtual BYTE Permissions() const; virtual StrengthType Strength() const; virtual Blob Certificate(); // Predicates bool AuxKeyLoaded() const; protected: // Types // C'tors/D'tors // Duplicate key context and its current state CPublicKeyContext(CPublicKeyContext const &rhs, DWORD const *pdwReserved, DWORD dwFlags); // Operators // Operations // Access // Predicates // Variables private: // Types enum { // These constants are defined as enums since VC 6.0 doesn't // support use of initializer specified in const declarations. MaxKeyStrength = 1024, // US Export // restricted, do // not change MinKeyStrength = 1024, // Only support one // strength }; // C'tors/D'tors // Operators // Operations void ClearCertificate(cci::CCertificate &rhcert) const; void OkReplacingCredentials() const; void PrepToStoreKey(cci::CKeyPair &rkp) const; void SetAttributes(cci::CPublicKey &rhpubkey, // always non-zero cci::CPrivateKey &rhprikey, bool fLocal, bool fExportable) const; void SetCertDerivedPkcs11Attributes(cci::CKeyPair const &rkp, Pkcs11Attributes &rPkcsAttr) const; void SetPkcs11Attributes(cci::CPublicKey &rpubkey, cci::CPrivateKey &rprikey) const; // Access cci::CKeyPair KeyPair() const; Blob Pkcs11Id(Blob const &rbModulus) const; Blob Pkcs11CredentialId(Blob const &rbModulus) const; // Predicates bool AreLogonCredentials() const; // Variables CryptContext &m_rcryptctx; cci::KeySpec m_ks; }; #endif // SLBCSP_PUBKEYCTX_H