CertificateRequest.h [plain text]
#ifndef _SECURITY_CERTIFICATEREQUEST_H_
#define _SECURITY_CERTIFICATEREQUEST_H_
#include <Security/SecCertificateRequest.h>
#include <security_utilities/seccfobject.h>
#include "SecCFTypes.h"
#include <security_utilities/alloc.h>
#include <security_cdsa_utilities/cssmdata.h>
#include <security_cdsa_client/tpclient.h>
#include <security_cdsa_client/clclient.h>
#include <security_utilities/debugging.h>
#include <CoreFoundation/CoreFoundation.h>
#define certReqDbg(args...) secdebug("certReq", ## args)
namespace Security
{
namespace KeychainCore
{
class CertificateRequest : public SecCFObject
{
NOCOPY(CertificateRequest)
public:
SECCFFUNCTIONS(CertificateRequest, SecCertificateRequestRef, errSecInvalidItemRef, gTypes().CertificateRequest)
CertificateRequest(const CSSM_OID &policy,
CSSM_CERT_TYPE certificateType,
CSSM_TP_AUTHORITY_REQUEST_TYPE requestType,
SecKeyRef privateKeyItemRef, SecKeyRef publicKeyItemRef, const SecCertificateRequestAttributeList *attributeList,
bool isNew = true);
virtual ~CertificateRequest() throw();
void submit(
sint32 *estimatedTime);
void getResult(
sint32 *estimatedTime, CssmData &certData);
void getReturnData(
CssmData &rtnData);
CSSM_CERT_TYPE certType() { return mCertType; }
CSSM_TP_AUTHORITY_REQUEST_TYPE reqType() { return mReqType; }
private:
void submitDotMac(
sint32 *estimatedTime);
void getResultDotMac(
sint32 *estimatedTime, CssmData &certData);
void postPendingRequest();
CFStringRef createUserKey();
CFStringRef createPolicyKey();
CFDictionaryRef getPolicyDictionary(
CFDictionaryRef prefsDict);
CFDictionaryRef getUserDictionary(
CFDictionaryRef policyDict);
OSStatus storeResults(
const CSSM_DATA *refId, const CSSM_DATA *certDat); void retrieveResults();
void removeResults();
typedef enum {
CRS_New = 0, CRS_Reconstructed, CRS_HaveCert, CRS_HaveRefId, CRS_HaveOtherData } CertReqState;
Allocator &mAlloc;
CssmClient::TP mTP;
CssmClient::CL mCL;
CssmAutoData mPolicy;
CSSM_CERT_TYPE mCertType;
CSSM_TP_AUTHORITY_REQUEST_TYPE mReqType;
SecKeyRef mPrivKey;
SecKeyRef mPubKey;
sint32 mEstTime;
CssmAutoData mRefId;
CertReqState mCertState;
CssmAutoData mCertData;
CssmAutoData mUserName;
CssmAutoData mPassword;
CssmAutoData mHostName;
CssmAutoData mDomain;
bool mDoRenew;
bool mIsAsync;
Mutex mMutex;
};
}
}
#endif // !_SECURITY_CERTIFICATEREQUEST_H_