251 lines
6.7 KiB
C++
251 lines
6.7 KiB
C++
// ACard.h: interface for the CAbstractCard class.
|
|
//
|
|
// (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.
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
// Note: This file should only be included by the CCI, not directly
|
|
// by the client.
|
|
|
|
#if !defined(SLBCCI_ACARD_H)
|
|
#define SLBCCI_ACARD_H
|
|
|
|
|
|
#include <functional>
|
|
#include <string>
|
|
#include <memory> // for auto_ptr
|
|
#include <vector>
|
|
#include <utility> // for pair
|
|
#include <stddef.h> // for size_t
|
|
|
|
#include <iop.h>
|
|
#include <slbRCObj.h>
|
|
|
|
#include "slbCci.h"
|
|
#include "CryptFctry.h"
|
|
#include "Marker.h"
|
|
|
|
namespace cci
|
|
{
|
|
|
|
class CCard;
|
|
class CCertificate;
|
|
class CContainer;
|
|
class CDataObject;
|
|
class CPrivateKey;
|
|
class CPublicKey;
|
|
|
|
class CAbstractCard
|
|
: public slbRefCnt::RCObject,
|
|
protected CCryptFactory
|
|
{
|
|
// To access factory methods
|
|
friend class CContainer;
|
|
friend class CCertificate;
|
|
friend class CDataObject;
|
|
friend class CKeyPair;
|
|
friend class CPrivateKey;
|
|
friend class CPublicKey;
|
|
|
|
public:
|
|
// Types
|
|
// C'tors/D'tors
|
|
virtual
|
|
~CAbstractCard() throw();
|
|
|
|
// Operators
|
|
virtual bool
|
|
operator==(CAbstractCard const &rhs) const;
|
|
// TO DO: this should be superceded by implementing singletons
|
|
|
|
virtual bool
|
|
operator!=(CAbstractCard const &rhs) const;
|
|
// TO DO: this should be superceded by implementing singletons
|
|
|
|
|
|
// Operations
|
|
void
|
|
AuthenticateUser(std::string const &rstrPIN);
|
|
|
|
virtual void
|
|
ChangePIN(std::string const &rstrOldPIN,
|
|
std::string const &rstrNewPIN);
|
|
|
|
virtual void
|
|
DefaultContainer(CContainer const &rcont) = 0;
|
|
|
|
virtual std::pair<std::string, // interpreted as the public modulus
|
|
cci::CPrivateKey>
|
|
GenerateKeyPair(KeyType kt,
|
|
std::string const &rsExponent,
|
|
ObjectAccess oaPrivateKey = oaPrivateAccess) = 0;
|
|
|
|
virtual void
|
|
InitCard() = 0;
|
|
|
|
virtual void
|
|
InvalidateCache() = 0;
|
|
|
|
virtual void
|
|
Label(std::string const &rstrLabel) = 0;
|
|
|
|
void
|
|
Logout();
|
|
|
|
static CAbstractCard *
|
|
Make(std::string const &rstrReader);
|
|
|
|
virtual void
|
|
SetUserPIN(std::string const &rstrPin);
|
|
|
|
virtual void
|
|
VerifyKey(std::string const &rstrKey,
|
|
BYTE bKeyNum);
|
|
|
|
virtual void
|
|
VerifyTransportKey(std::string const &rstrKey);
|
|
|
|
void
|
|
GenRandom(DWORD dwNumBytes, BYTE *bpRand);
|
|
|
|
// Access
|
|
virtual size_t
|
|
AvailableStringSpace(ObjectAccess oa) const = 0;
|
|
|
|
SCardType
|
|
CardType();
|
|
|
|
virtual CContainer
|
|
DefaultContainer() const = 0;
|
|
|
|
std::vector<CCertificate>
|
|
EnumCertificates() const;
|
|
|
|
virtual std::vector<CContainer>
|
|
EnumContainers() const = 0;
|
|
|
|
std::vector<CDataObject>
|
|
EnumDataObjects() const;
|
|
|
|
std::vector<CPrivateKey>
|
|
EnumPrivateKeys() const;
|
|
|
|
std::vector<CPublicKey>
|
|
EnumPublicKeys() const;
|
|
|
|
virtual std::vector<CCertificate>
|
|
EnumCertificates(ObjectAccess access) const = 0;
|
|
|
|
virtual std::vector<CPublicKey>
|
|
EnumPublicKeys(ObjectAccess access) const = 0;
|
|
|
|
virtual std::vector<CPrivateKey>
|
|
EnumPrivateKeys(ObjectAccess access) const = 0;
|
|
|
|
virtual std::vector<CDataObject>
|
|
EnumDataObjects(ObjectAccess access) const = 0;
|
|
|
|
virtual std::string
|
|
Label() const = 0;
|
|
|
|
iop::CMarker
|
|
Marker(iop::CMarker::MarkerType const &Type) const;
|
|
|
|
virtual BYTE
|
|
MaxKeys(KeyType kt) const = 0;
|
|
|
|
virtual size_t
|
|
MaxStringSpace(ObjectAccess oa) const = 0;
|
|
|
|
std::string
|
|
ReaderName() const;
|
|
|
|
iop::CSmartCard &
|
|
SmartCard() const; // this should be protected
|
|
|
|
virtual bool
|
|
SupportedKeyFunction(KeyType kt,
|
|
CardOperation oper) const = 0;
|
|
|
|
// Predicates
|
|
virtual bool
|
|
IsCAPIEnabled() const = 0;
|
|
|
|
bool
|
|
IsAvailable() const;
|
|
|
|
virtual bool
|
|
IsPKCS11Enabled() const = 0;
|
|
|
|
virtual bool
|
|
IsEntrustEnabled() const = 0;
|
|
|
|
virtual bool
|
|
IsProtectedMode() const = 0;
|
|
|
|
virtual bool
|
|
IsKeyGenEnabled() const = 0;
|
|
|
|
virtual BYTE
|
|
MajorVersion() const = 0;
|
|
|
|
|
|
protected:
|
|
// Types
|
|
// C'tors/D'tors
|
|
CAbstractCard(std::string const &rstrReaderName,
|
|
std::auto_ptr<iop::CIOP> &rapiop,
|
|
std::auto_ptr<iop::CSmartCard> &rapSmartCard);
|
|
// Note: To avoid memory leaks in the event of an exception,
|
|
// CIOP and CSmartCard are passed as a reference to a
|
|
// non-const auto_ptr so the constructed object can take
|
|
// ownership responsibilities of the resource.
|
|
|
|
// Operators
|
|
// Operations
|
|
virtual void
|
|
DoSetup();
|
|
|
|
static std::auto_ptr<CAbstractCard>
|
|
DoMake(std::string const &rstrReaderName,
|
|
std::auto_ptr<iop::CIOP> &rapiop,
|
|
std::auto_ptr<iop::CSmartCard> &rapSmartCard);
|
|
// not defined, should be defined by specializations
|
|
// See note on constructor regarding rapiop and rapSmartCard.
|
|
|
|
// Access
|
|
// Predicates
|
|
// Variables
|
|
|
|
private:
|
|
// Types
|
|
// C'tors/D'tors
|
|
CAbstractCard(CAbstractCard const &rhs);
|
|
// not defined, copy not allowed.
|
|
|
|
// Operators
|
|
CAbstractCard &
|
|
operator=(CAbstractCard const &rhs);
|
|
// not defined, initialization not allowed.
|
|
|
|
// Operations
|
|
void
|
|
Setup();
|
|
|
|
// Access
|
|
// Predicates
|
|
// Variables
|
|
|
|
std::string m_strReaderName;
|
|
std::auto_ptr<iop::CIOP> m_apiop;
|
|
std::auto_ptr<iop::CSmartCard> m_apSmartCard;
|
|
|
|
};
|
|
|
|
}
|
|
|
|
#endif // !defined(SLBCCI_ACARD_H)
|