00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00037 #ifndef __CPCA15_REQUEST_H__
00038 #define __CPCA15_REQUEST_H__
00039 #include "UnixRequestImpl.h"
00040 #include "CPCA15UserInfo.h"
00041
00066 class CPCA15Request: public UnixRequestImpl
00067 {
00068 protected:
00069 std::string RequestId;
00070 std::string CertHTMLId;
00071 std::string strCertificate;
00072 std::string strSerial;
00073 HCERTSTORE hUserStore;
00074 PCCERT_CONTEXT pUserCert;
00075 BOOL fNeedFreeProv;
00076 DWORD dwCertKeySpec;
00077 HCRYPTPROV hUserProv;
00078 BSTR bstrCertHTML;
00079 BSTR bstrRequestHTML;
00080
00081 public:
00082 CPCA15Request():RequestId("-1"),
00083 CertHTMLId("-1"),
00084 strCertificate(),
00085 strSerial(),
00086 hUserStore(0),
00087 pUserCert(0),
00088 fNeedFreeProv(FALSE),
00089 dwCertKeySpec(0),
00090 hUserProv(0),
00091 bstrCertHTML(0),
00092 bstrRequestHTML(0)
00093 {
00094
00095 };
00096 virtual HRESULT SetCredential(
00097 UserCallbacks *pCallbacks,
00098 X509EnrollmentAuthFlags AuthType,
00099 X509EnrollmentCheckChainFlags CheckChainType,
00100 const BSTR strCredential,
00101 CSecurePin *sbPassword,
00102 BOOL UseLocalMachineCert);
00103
00104 virtual HRESULT SetCredential(
00105 LONG hWnd,
00106 X509EnrollmentAuthFlags anAuthType,
00107 BSTR strCredential,
00108 BSTR strPassword)
00109 {
00110 return UnixRequestImpl::SetCredential(hWnd,anAuthType,strCredential,strPassword);
00111 };
00112
00113 virtual HRESULT GetRequestParams(
00114 BSTR strConfig,
00115 BSTR strTemplate,
00116 BSTR *pstrRDN,
00117 BSTR *pstrEKUsage,
00118 DWORD *pKeySpec,
00119 std::vector<AttrTriple> *pAttrs
00120 );
00121
00122 virtual HRESULT Submit(
00123 LONG Flags,
00124 const BSTR strRequest,
00125 const BSTR strAttributes,
00126 const BSTR strConfig,
00127 LONG *pDisposition);
00128
00129 virtual HRESULT ListRequests(
00130 BSTR strConfig,
00131 RequestMap & Request
00132 );
00133
00134 virtual HRESULT ListRequestsEx(BSTR strConfig,
00135 RequestMapEx & rMap,
00136 ReqType type = CA15Request);
00137
00138 virtual HRESULT GetRequestId(
00139 LONG* pRequestId
00140 );
00141
00142 virtual HRESULT GetCertificate(
00143 LONG Flags,
00144 BSTR* pstrCertificate
00145 );
00146
00147 virtual HRESULT GetRequest(
00148 LONG Flags,
00149 BSTR* pstrRequest
00150 );
00151
00152 virtual HRESULT GetCACertificate(
00153 LONG fExchangeCertificate,
00154 const BSTR strConfig,
00155 LONG Flags,
00156 BSTR *pstrCertificate) ;
00157
00158 #if 0
00159 virtual HRESULT GetDispositionMessage(
00160 BSTR *pstrDispositionMessage);
00161 #endif
00162
00163 virtual HRESULT RetrievePending(
00164 LONG RequestId,
00165 const BSTR strConfig,
00166 LONG *pDisposition);
00167
00168 virtual HRESULT GetCAProperty(
00169 const BSTR strConfig,
00170 LONG PropId,
00171 LONG PropIndex,
00172 LONG PropType,
00173 LONG Flags,
00174 VARIANT *pvarPropertyValue);
00175
00176 virtual HRESULT AcknowledgeInstallCert(
00177 LONG RequestId,
00178 const BSTR strConfig
00179 );
00180
00181 virtual HRESULT RegisterUser(
00182 BSTR bstrConfig,
00183 void * pUserInfo
00184 );
00185
00186 virtual HRESULT GetUserRegisterInfo(
00187 BSTR bstrConfig,
00188 void * pUserInfo
00189 );
00190
00191 virtual HRESULT GetUserRegisterStatus(
00192 BSTR bstrConfig,
00193 LONG * pUserRegisterId,
00194 LONG * pUserReqisterStatus
00195 );
00196
00197 virtual ~CPCA15Request()
00198 {
00199 if (fNeedFreeProv && hUserProv)
00200 CryptReleaseContext(hUserProv,0);
00201 if (pUserCert)
00202 CertFreeCertificateContext(pUserCert);
00203 if (hUserStore)
00204 CertCloseStore(hUserStore,0);
00205 if (bstrCertHTML)
00206 SysFreeString(bstrCertHTML);
00207 if (bstrRequestHTML)
00208 SysFreeString(bstrRequestHTML);
00209 };
00210
00211 protected:
00212 virtual HRESULT CA15GetEnrollParams(const std::string & UIURL,
00213 std::vector<std::string> &templates,
00214 std::vector<std::string> &EKUs,
00215 std::vector<std::string> &keySpecs,
00216 std::string & strDN);
00217
00218 virtual HRESULT GetTokenStr(std::string & strToken);
00219 virtual HRESULT CredPreValidate()
00220 {
00221 if (AuthType != X509AuthUsername && AuthType != X509AuthCertificate)
00222 return NTE_PERM;
00223 if ((CheckChainType & ~X509CC_NoHostNameCheck) != X509CC_TLS)
00224 return NTE_PERM;
00225 return S_OK;
00226 };
00227
00228 virtual HRESULT RetrieveIssued( const BSTR strConfig);
00229 virtual HRESULT PKCS10ToRequestId(BSTR bstrConfig, const std::string & PKCS10);
00230 virtual HRESULT MakePKCS7x2(BSTR Source,BSTR * Dest);
00231 virtual PCCERT_CONTEXT GetCertContext(HCERTSTORE hStore);
00232
00233 virtual HRESULT encodeRequestToPKCS7(std::vector<BYTE>& Request);
00234 virtual HRESULT decodeRequestFromPKCS7(std::vector<BYTE>& Request);
00235
00236 virtual HRESULT GetPubKeyFromPKCS7(const std::string & strPKCS7,
00237 PCERT_REQUEST_INFO * pReqInfo, LONG Disp);
00238 virtual HRESULT GetRequestIdFromPKCS7(BSTR bstrConfig,
00239 BSTR bstrRequest);
00240
00241 virtual HRESULT GetHTML(BSTR bstrConfig, bool get_cert,
00242 const std::string & PKCS = "");
00243
00244 virtual HRESULT ListRequestsAllEx(BSTR strConfig,
00245 RequestMapEx & rCertMap,
00246 RequestMapEx & rRequestMap,
00247 RequestMapEx & rRevokedMap
00248 );
00249 virtual void ClearCertificateData(void);
00250 };
00251 #endif
00252