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.
|
|
// ACont.cpp -- CAbstractContainer implementation
// (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.
#include "cciCont.h"
#include "TransactionWrap.h"
#include "cciCert.h"
#include "cciKeyPair.h"
#include "cciPriKey.h"
#include "cciPubKey.h"
using namespace std; using namespace cci;
/////////////////////////// LOCAL/HELPER /////////////////////////////////
namespace { void Clear(CKeyPair const &rkp) { CPublicKey pubKey(rkp->PublicKey()); if (pubKey) pubKey->Delete();
CPrivateKey priKey(rkp->PrivateKey()); if (priKey) priKey->Delete();
CCertificate cert(rkp->Certificate()); if (cert) cert->Delete(); }
} // namespace
/////////////////////////// PUBLIC /////////////////////////////////
// Types
// C'tors/D'tors
CAbstractContainer::~CAbstractContainer() {}
// Operators
bool CAbstractContainer::operator==(CAbstractContainer const &rhs) const { CTransactionWrap wrap(m_hcard); CTransactionWrap rhswrap(rhs.m_hcard);
return CCryptObject::operator==(rhs) && DoEquals(rhs); }
bool CAbstractContainer::operator!=(CAbstractContainer const &rhs) const { return !(*this == rhs); }
// Operations
void CAbstractContainer::Delete() { CTransactionWrap wrap(m_hcard);
// Delete all objects in this container
Clear(ExchangeKeyPair()); Clear(SignatureKeyPair());
// If this container is the default container, re-set the default container
if(m_hcard->DefaultContainer()) { if (CContainer(this) == m_hcard->DefaultContainer()) m_hcard->DefaultContainer(CContainer()); }
DoDelete();
}
// Access
CKeyPair CAbstractContainer::ExchangeKeyPair() { CTransactionWrap wrap(m_hcard); CContainer cont(this); return CKeyPair(m_hcard, cont, ksExchange); }
CKeyPair CAbstractContainer::GetKeyPair(KeySpec ks) { CKeyPair kp;
CTransactionWrap wrap(m_hcard); CContainer cont(this); switch (ks) { case ksExchange: kp = CKeyPair(m_hcard, cont, ksExchange); break; case ksSignature: kp = CKeyPair(m_hcard, cont, ksSignature); break; default: throw Exception(ccBadKeySpec); } return kp; }
CKeyPair CAbstractContainer::SignatureKeyPair() { CTransactionWrap wrap(m_hcard); CContainer cont(this); return CKeyPair(m_hcard, cont, ksSignature); }
// Predicates
bool CAbstractContainer::KeyPairExists(KeySpec ks) {
bool fResult = true;
CTransactionWrap wrap(m_hcard);
CKeyPair kp(GetKeyPair(ks));
if (!kp->PublicKey() && !kp->PrivateKey() && !kp->Certificate()) fResult = false;
return fResult;
}
// Static Variables
/////////////////////////// PROTECTED /////////////////////////////////
// C'tors/D'tors
CAbstractContainer::CAbstractContainer(CAbstractCard const &racard)
: slbRefCnt::RCObject(), CCryptObject(racard) {} // Operators
// Operations
// Access
// Predicates
// Static Variables
/////////////////////////// PRIVATE /////////////////////////////////
// C'tors/D'tors
// Operators
// Operations
// Access
// Predicates
// Static Variables
|