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.

1684 lines
36 KiB

  1. //Copyright (c) 1998 - 1999 Microsoft Corporation
  2. #ifndef _CHSTRUCT_H_
  3. #define _CHSTRUCT_H_
  4. #include "winsock2.h"
  5. #include "httpext.h"
  6. #include "assert.h"
  7. #pragma warning(disable:4200)
  8. //
  9. // Version Number for the CH Structs. (Build Number)
  10. //
  11. #define CH_STRUCTS_VERSION_RC1 11
  12. #define CH_STRUCTS_CURRENT_VERSION 37
  13. #define MAX_RETAILSPKCOUNT 20
  14. #define LSSPK_LEN 96
  15. #define PIN_LEN 96
  16. #define REQUEST_ID_LEN 64
  17. #define CA_CUSTMER_NAME_LEN 60
  18. #define CA_COUNTRY_LEN 2
  19. #define CA_PHONE_LEN 64
  20. #define CA_FAX_LEN 64
  21. #define CA_REVOKE_REASONCODE_LEN 4
  22. #define CA_LSERVERID_LEN 32
  23. #define PROGRAM_NAME_LEN 64
  24. #define MAX_CERTTYPE_LEN 32
  25. //Retail SPK Return Values
  26. #define RETAIL_SPK_NULL ((TCHAR)'0')
  27. #define RETAIL_SPK_OK ((TCHAR)'1')
  28. #define RETAIL_SPK_INVALID_SIGNATURE ((TCHAR)'2')
  29. #define RETAIL_SPK_INVALID_PRODUCT_TYPE ((TCHAR)'3')
  30. #define RETAIL_SPK_INVALID_SERIAL_NUMBER ((TCHAR)'4')
  31. #define RETAIL_SPK_ALREADY_REGISTERED ((TCHAR)'5')
  32. #define RETAIL_MAX_LENGTH 25 //25 TCHARS
  33. //Select/Open override
  34. #define OVERRIDE_MAX_SIZE 10
  35. typedef struct _CERTCUSTINFO_TAG_
  36. {
  37. TCHAR OrgName[CA_CUSTMER_NAME_LEN+1];
  38. TCHAR OrgUnit[CA_ORG_UNIT_LEN+1];
  39. TCHAR Address[CA_ADDRESS_LEN+1];
  40. TCHAR City[CA_CITY_LEN+1];
  41. TCHAR State[CA_STATE_LEN+1];
  42. TCHAR Country[CA_COUNTRY_LEN+1];
  43. TCHAR Zip[CA_ZIP_LEN+1];
  44. TCHAR LName[CA_NAME_LEN+1];
  45. TCHAR FName[CA_NAME_LEN+1];
  46. TCHAR Phone[CA_PHONE_LEN+1];
  47. TCHAR Fax[CA_FAX_LEN+1];
  48. TCHAR Email[CA_EMAIL_LEN+1];
  49. TCHAR LSID[CA_LSERVERID_LEN+1];
  50. TCHAR ProgramName[PROGRAM_NAME_LEN];
  51. } CERTCUSTINFO, * PCERTCUSTINFO;
  52. #define HydraContent "application/octet-stream"
  53. /*********************************************************************************************************
  54. * Hydra request header definitions *
  55. *********************************************************************************************************/
  56. enum RequestTypes
  57. {
  58. PingRequest = 1, //ping upto isapi extension
  59. CertificateRequest, //New Certificate request
  60. CertificateDownload, //certificate download request
  61. CertificateSignOnly, //convert from SPK to certificate
  62. CertificateRevoke, //Revoke current certificate
  63. CertificateReissue, //Reissue the certificate
  64. CertificateDownloadAck, //Certificate download ack request
  65. ValidateCert, //Validate Certificate Request
  66. NewLicenseRequest, //new license request
  67. ReturnLicenseRequest, //return license request
  68. ReissueLicenseRequest, //reissue last license key pack
  69. LKPDownloadAckRequest, //acknowledgement
  70. NoOperation //unknown operation
  71. };
  72. enum ResponseTypes
  73. {
  74. Response_Invalid_Response = 0,
  75. Response_Success,
  76. Response_Failure,
  77. Response_InvalidData,
  78. Response_ServerError,
  79. Response_NotYetImplemented,
  80. Response_VersionMismatch,
  81. Response_Reg_Bad_SPK,
  82. Response_Reg_Bad_Cert,
  83. Response_Reg_Expired,
  84. Response_Reg_Revoked,
  85. Response_TDO_TDN_Failed,
  86. Response_License_Info_Failed,
  87. Response_Invalid_Conf_Num,
  88. Response_Conf_Num_Already_Used,
  89. Response_SelectMloLicense_NotValid,
  90. Response_NotASupervisor_NotValid,
  91. Response_Invalid_Transfer,
  92. Response_Denied_Other_Program_Id,
  93. Response_Invalid_Other_Program_Qty
  94. };
  95. enum TransactionStates
  96. {
  97. Void = 0,
  98. NotValidated,
  99. Validated,
  100. LicenceRequestPending,
  101. LicenceRequestGranted,
  102. UpgradeRequestPending
  103. // ...
  104. };
  105. enum RegistrationMethods
  106. {
  107. Reg_Internet = 0,
  108. Reg_Telephone,
  109. Reg_Fax
  110. };
  111. enum TransportTypes
  112. {
  113. Transport_Internet =1, //will be supported
  114. Transport_Disk,
  115. Transport_Modem,
  116. Transport_FaxModem,
  117. Transport_Other //unknown transport yet!
  118. };
  119. typedef struct TCB_DISK_PARAM_TAG
  120. {
  121. char * pszFileName;
  122. char * pPostData;
  123. DWORD dwPostDataLen;
  124. }TCB_DISK_PARAM, * PTCB_DISK_PARAM;
  125. typedef struct TCB_INTERNET_PARAM_TAG
  126. {
  127. char * pURL;
  128. char * pPostData;
  129. DWORD dwPostDataLen;
  130. }TCB_INTERNET_PARAM, *PTCB_INTERNET_PARAM;
  131. /*
  132. * This is the transport control block which is filled in prior to calling the
  133. * Send Request routine.
  134. *
  135. */
  136. typedef struct TCB_TAG_
  137. {
  138. RequestTypes RequestType; //request identifier
  139. TransportTypes TransportType; //transport identifier
  140. void * pvParam; //parameters based on the Transport Type
  141. void * pvReserved; //should be set to null at request time and then left alone.
  142. void * pvResponse; //void pointer to response
  143. DWORD dwResponseLen; //response length
  144. DWORD dwRetCode; //Return code from wait operation
  145. }TCB, * PTCB;
  146. /*
  147. * This is the generic structure of the request header that goes on the wire
  148. */
  149. class RequestHeader
  150. {
  151. public:
  152. RequestHeader()
  153. { SetRequestType(NoOperation);
  154. SetResponseType(Response_Invalid_Response);
  155. m_dwLanguageID = 0;
  156. SetVersion(CH_STRUCTS_CURRENT_VERSION);
  157. SetRegistrationMethod(Reg_Internet);
  158. };
  159. void SetRequestType (enum RequestTypes Req)
  160. {
  161. m_Request = (enum RequestTypes)htonl(Req);
  162. };
  163. enum RequestTypes GetRequestType()
  164. {
  165. return (enum RequestTypes) ntohl(m_Request);
  166. };
  167. void SetResponseType (enum ResponseTypes eResp)
  168. {
  169. m_Response = (enum ResponseTypes)htonl(eResp);
  170. };
  171. enum ResponseTypes GetResponseType()
  172. {
  173. return (enum ResponseTypes) ntohl(m_Response);
  174. };
  175. void SetRegistrationMethod (enum RegistrationMethods eRegM)
  176. {
  177. m_RegistrationMethod = (enum RegistrationMethods)htonl(eRegM);
  178. };
  179. enum RegistrationMethods GetRegistrationMethod()
  180. {
  181. return (enum RegistrationMethods) ntohl(m_RegistrationMethod);
  182. };
  183. void SetLanguageId(DWORD dwLanguagwId)
  184. {
  185. m_dwLanguageID = htonl(dwLanguagwId);
  186. };
  187. DWORD GetLanguageId()
  188. {
  189. return ntohl(m_dwLanguageID);
  190. };
  191. void SetVersion(DWORD dwVersion)
  192. {
  193. m_dwVersion = htonl(dwVersion);
  194. };
  195. DWORD GetVersion()
  196. {
  197. return ntohl(m_dwVersion);
  198. }
  199. private:
  200. enum RequestTypes m_Request; //Request Interaction Code
  201. enum ResponseTypes m_Response; //Response Type
  202. enum RegistrationMethods m_RegistrationMethod; //Registration Method
  203. DWORD m_dwLanguageID; //languageId
  204. DWORD m_dwVersion; // Version for the Request Header
  205. };
  206. /*
  207. * Validation request header
  208. */
  209. class Validate_Request
  210. {
  211. public:
  212. Validate_Request()
  213. {
  214. RequestHeader.SetRequestType(ValidateCert);
  215. RequestHeader.SetLanguageId(GetSystemDefaultLangID());
  216. };
  217. ~Validate_Request() {};
  218. void SetSPK (PBYTE pbSPK, DWORD dwSPKLen )
  219. {
  220. if (pbSPK != NULL)
  221. {
  222. memcpy ( m_szSPK, pbSPK, dwSPKLen );
  223. }
  224. };
  225. LPTSTR GetSPK ()
  226. {
  227. return ( (LPTSTR) m_szSPK );
  228. };
  229. void SetCertBlobLen (DWORD dwCertBlobLen)
  230. {
  231. m_dwCertBlobLen = htonl(dwCertBlobLen);
  232. };
  233. DWORD GetCertBlobLen ()
  234. {
  235. return (ntohl(m_dwCertBlobLen));
  236. };
  237. DWORD GetDataLen()
  238. {
  239. return ntohl(m_dwDataLen);
  240. };
  241. void SetDataLen(DWORD dwDataLen)
  242. {
  243. m_dwDataLen = htonl(dwDataLen);
  244. };
  245. BYTE *data() { return (BYTE *)(&m_dwDataLen+1); };
  246. RequestHeader RequestHeader;
  247. TCHAR m_szSPK[LSSPK_LEN]; //SPK
  248. DWORD m_dwCertBlobLen;
  249. DWORD m_dwDataLen; //Length of the Body
  250. //variable data part
  251. //CErt Blob follows here
  252. };
  253. /*
  254. * Validation response header
  255. */
  256. class Validate_Response
  257. {
  258. public:
  259. Validate_Response()
  260. {
  261. RequestHeader.SetRequestType(ValidateCert);
  262. RequestHeader.SetLanguageId(GetSystemDefaultLangID());
  263. memset(m_szCertType,0,sizeof(m_szCertType));
  264. };
  265. inline void SetCHExchCertLen (DWORD dwCertLen)
  266. {
  267. m_dwCHExchCertLen = htonl(dwCertLen);
  268. };
  269. inline DWORD GetCHExchCertLen ()
  270. {
  271. return ntohl(m_dwCHExchCertLen);
  272. };
  273. inline void SetCHSignCertLen (DWORD dwCertLen)
  274. {
  275. m_dwCHSignCertLen = htonl(dwCertLen);
  276. };
  277. inline DWORD GetCHSignCertLen ()
  278. {
  279. return ntohl(m_dwCHSignCertLen);
  280. };
  281. inline void SetCHRootCertLen(DWORD dwRootCertLen)
  282. {
  283. m_dwCHRootCertLen = htonl(dwRootCertLen);
  284. };
  285. inline DWORD GetCHRootCertLen ()
  286. {
  287. return ntohl(m_dwCHRootCertLen);
  288. };
  289. DWORD GetDataLen()
  290. {
  291. return ntohl(m_dwDataLen);
  292. };
  293. void SetDataLen(DWORD dwDataLen)
  294. {
  295. m_dwDataLen = htonl(dwDataLen);
  296. };
  297. void SetRetCode (DWORD dwRetCode )
  298. {
  299. m_dwRetCode = htonl(dwRetCode);
  300. }
  301. DWORD GetRetCode ()
  302. {
  303. return ntohl(m_dwRetCode);
  304. }
  305. void SetCertType(PBYTE pbCertType, DWORD dwCertTypeLen )
  306. {
  307. memcpy (m_szCertType, pbCertType, dwCertTypeLen );
  308. }
  309. LPTSTR GetCertType()
  310. {
  311. return ((LPTSTR)m_szCertType);
  312. }
  313. BYTE *data() { return (BYTE *)(&m_dwDataLen+1); };
  314. RequestHeader RequestHeader;
  315. DWORD m_dwRetCode;
  316. DWORD m_dwCHRootCertLen;
  317. DWORD m_dwCHExchCertLen;
  318. DWORD m_dwCHSignCertLen;
  319. TCHAR m_szCertType[MAX_CERTTYPE_LEN];
  320. DWORD m_dwDataLen; //Length of the Body
  321. //Variable length response
  322. //1.CH Root Cert
  323. //2.CH Exch cert
  324. //3.CH Sign Cert
  325. };
  326. //Send the old certificate and SPK with this request and
  327. //then get the response back
  328. class CertRevoke_Request
  329. {
  330. public:
  331. CertRevoke_Request()
  332. {
  333. RequestHeader.SetRequestType(CertificateRevoke);
  334. RequestHeader.SetLanguageId(GetSystemDefaultLangID());
  335. memset (m_szSPK,0,sizeof(m_szSPK));
  336. memset (m_LName, 0, sizeof(m_LName));
  337. memset (m_FName,0,sizeof(m_FName));
  338. memset (m_Phone, 0, sizeof(m_Phone));
  339. memset (m_FAX, 0, sizeof(m_FAX));
  340. memset (m_EMail,0,sizeof(m_EMail));
  341. memset (m_ReasonCode,0,sizeof(m_ReasonCode));
  342. m_dwExchgCertLen = 0;
  343. m_dwSignCertLen = 0;
  344. };
  345. DWORD GetDataLen()
  346. {
  347. return ntohl(m_dwDataLen);
  348. };
  349. void SetDataLen(DWORD dwDataLen)
  350. {
  351. m_dwDataLen = htonl(dwDataLen);
  352. };
  353. void SetSPK (PBYTE pbSPK, DWORD dwSPKLen )
  354. {
  355. if (pbSPK != NULL)
  356. {
  357. memcpy ( m_szSPK, pbSPK, dwSPKLen );
  358. }
  359. };
  360. LPTSTR GetSPK ()
  361. {
  362. return ( (LPTSTR) m_szSPK );
  363. };
  364. void SetExchgCertLen (DWORD dwExchgCertLen)
  365. {
  366. m_dwExchgCertLen = htonl(dwExchgCertLen);
  367. };
  368. DWORD GetExchgCertLen ()
  369. {
  370. return (ntohl(m_dwExchgCertLen));
  371. };
  372. void SetSignCertLen (DWORD dwSignCertLen)
  373. {
  374. m_dwSignCertLen = htonl(dwSignCertLen);
  375. };
  376. DWORD GetSignCertLen ()
  377. {
  378. return (ntohl(m_dwSignCertLen));
  379. };
  380. void SetLName ( PBYTE pbLName, DWORD dwLNameLen )
  381. {
  382. memcpy ( m_LName, pbLName, dwLNameLen );
  383. };
  384. LPTSTR GetLName ()
  385. {
  386. return ((LPTSTR)m_LName);
  387. };
  388. void SetFName ( PBYTE pbFName, DWORD dwFNameLen )
  389. {
  390. memcpy ( m_FName, pbFName, dwFNameLen );
  391. };
  392. LPTSTR GetFName ()
  393. {
  394. return ((LPTSTR)m_FName);
  395. };
  396. void SetPhone ( PBYTE pbPhone, DWORD dwPhoneLen )
  397. {
  398. memcpy ( m_Phone, pbPhone, dwPhoneLen );
  399. };
  400. LPTSTR GetPhone ()
  401. {
  402. return ((LPTSTR)m_Phone);
  403. };
  404. void SetFax ( PBYTE pbFAX, DWORD dwFAXLen )
  405. {
  406. memcpy ( m_FAX, pbFAX, dwFAXLen );
  407. };
  408. LPTSTR GetFax ()
  409. {
  410. return ((LPTSTR)m_FAX);
  411. };
  412. void SetEMail ( PBYTE pbEMail, DWORD dwEMailLen )
  413. {
  414. memcpy ( m_EMail, pbEMail, dwEMailLen);
  415. };
  416. LPTSTR GetEMail ()
  417. {
  418. return ((LPTSTR)m_EMail);
  419. };
  420. void SetReasonCode( PBYTE pbReasonCode, DWORD dwReasonCodeLen )
  421. {
  422. memcpy ( m_ReasonCode, pbReasonCode, dwReasonCodeLen );
  423. };
  424. LPTSTR GetReasonCode ()
  425. {
  426. return ((LPTSTR)m_ReasonCode);
  427. };
  428. BYTE *data() { return (BYTE *)(&m_dwDataLen+1); };
  429. RequestHeader RequestHeader;
  430. DWORD m_dwExchgCertLen;
  431. DWORD m_dwSignCertLen;
  432. TCHAR m_szSPK[LSSPK_LEN]; //SPK
  433. TCHAR m_LName[CA_NAME_LEN+1]; //LName of the revoker
  434. TCHAR m_FName[CA_NAME_LEN+1]; //FName of the revoker
  435. TCHAR m_Phone[CA_PHONE_LEN+1]; //phone
  436. TCHAR m_FAX[CA_FAX_LEN+1]; //FAX
  437. TCHAR m_EMail[CA_EMAIL_LEN+1]; //email - optional of the revoker
  438. TCHAR m_ReasonCode[CA_REVOKE_REASONCODE_LEN+1]; //reason for revokation
  439. DWORD m_dwDataLen; //Length of the Body
  440. //Variable length data
  441. //1.Exchange Cert Blob
  442. //2.Signature cert blob
  443. };
  444. //nothing to send back. Either the operation succeeds or fails.
  445. class CertRevoke_Response
  446. {
  447. public:
  448. CertRevoke_Response()
  449. {
  450. RequestHeader.SetRequestType(CertificateRevoke);
  451. RequestHeader.SetLanguageId(GetSystemDefaultLangID());
  452. m_dwDataLen = 0;
  453. }
  454. DWORD GetDataLen()
  455. {
  456. return ntohl(m_dwDataLen);
  457. };
  458. void SetDataLen(DWORD dwDataLen)
  459. {
  460. m_dwDataLen = htonl(dwDataLen);
  461. };
  462. BYTE *data() { return (BYTE *)(&m_dwDataLen+1); };
  463. RequestHeader RequestHeader;
  464. DWORD m_dwDataLen; //Length of the Body
  465. };
  466. //reissue the certificate
  467. //This is an online request. We dont go thru' the e-mail loop etc.
  468. //This request accepts the old SPK and send the new SPK back.
  469. //Then when the authenticate comes across, we do a signonly
  470. //of this cert and deposit the new cert into the system
  471. class CertReissue_Request
  472. {
  473. public:
  474. CertReissue_Request()
  475. {
  476. RequestHeader.SetRequestType(CertificateReissue);
  477. RequestHeader.SetLanguageId(GetSystemDefaultLangID());
  478. memset (m_szSPK,0,sizeof(m_szSPK));
  479. memset (m_LName,0,sizeof(m_LName));
  480. memset (m_FName,0,sizeof(m_FName));
  481. memset (m_Phone,0,sizeof(m_Phone));
  482. memset (m_FAX,0,sizeof(m_FAX));
  483. memset (m_EMail,0,sizeof(m_EMail));
  484. memset (m_ReasonCode,0,sizeof(m_ReasonCode));
  485. m_dwDataLen = 0;
  486. };
  487. DWORD GetDataLen()
  488. {
  489. return ntohl(m_dwDataLen);
  490. };
  491. void SetDataLen(DWORD dwDataLen)
  492. {
  493. m_dwDataLen = htonl(dwDataLen);
  494. };
  495. void SetSPK (PBYTE pbSPK, DWORD dwSPKLen )
  496. {
  497. memcpy ( m_szSPK, pbSPK, dwSPKLen );
  498. };
  499. LPTSTR GetSPK ()
  500. {
  501. return ( (LPTSTR) m_szSPK );
  502. };
  503. void SetLName ( PBYTE pbLName, DWORD dwLNameLen )
  504. {
  505. memcpy ( m_LName, pbLName, dwLNameLen );
  506. };
  507. LPTSTR GetLName ()
  508. {
  509. return ((LPTSTR)m_LName);
  510. };
  511. void SetFName ( PBYTE pbFName, DWORD dwFNameLen )
  512. {
  513. memcpy ( m_FName, pbFName, dwFNameLen );
  514. };
  515. LPTSTR GetFName ()
  516. {
  517. return ((LPTSTR)m_FName);
  518. };
  519. void SetPhone ( PBYTE pbPhone, DWORD dwPhoneLen )
  520. {
  521. memcpy ( m_Phone, pbPhone, dwPhoneLen );
  522. };
  523. LPTSTR GetPhone ()
  524. {
  525. return ((LPTSTR)m_Phone);
  526. };
  527. void SetFax ( PBYTE pbFAX, DWORD dwFAXLen )
  528. {
  529. memcpy ( m_FAX, pbFAX, dwFAXLen );
  530. };
  531. LPTSTR GetFax ()
  532. {
  533. return ((LPTSTR)m_FAX);
  534. };
  535. void SetEMail ( PBYTE pbEMail, DWORD dwEMailLen )
  536. {
  537. memcpy ( m_EMail, pbEMail, dwEMailLen);
  538. };
  539. LPTSTR GetEMail ()
  540. {
  541. return ((LPTSTR)m_EMail);
  542. };
  543. void SetReasonCode( PBYTE pbReasonCode, DWORD dwReasonCodeLen )
  544. {
  545. memcpy ( m_ReasonCode, pbReasonCode, dwReasonCodeLen );
  546. };
  547. LPTSTR GetReasonCode ()
  548. {
  549. return ((LPTSTR)m_ReasonCode);
  550. };
  551. BYTE *data() { return (BYTE *)(&m_dwDataLen+1); };
  552. RequestHeader RequestHeader; //Request Header
  553. TCHAR m_szSPK[LSSPK_LEN]; //SPK
  554. TCHAR m_LName[CA_NAME_LEN+1]; //LName of the reissuer
  555. TCHAR m_FName[CA_NAME_LEN+1]; //FName of the reissuer
  556. TCHAR m_Phone[CA_PHONE_LEN+1]; //phone
  557. TCHAR m_FAX[CA_FAX_LEN+1]; //FAX
  558. TCHAR m_EMail[CA_EMAIL_LEN+1]; //email - optional of the reissuer
  559. TCHAR m_ReasonCode[CA_REVOKE_REASONCODE_LEN+1]; //reason for reissue
  560. DWORD m_dwDataLen; //Length of the Body
  561. //Variable portion of this request
  562. //no variable portion here
  563. };
  564. class CertReissue_Response
  565. {
  566. public:
  567. CertReissue_Response()
  568. {
  569. RequestHeader.SetRequestType(CertificateReissue);
  570. RequestHeader.SetLanguageId(GetSystemDefaultLangID());
  571. memset ( m_szSPK,0,sizeof(m_szSPK));
  572. m_dwDataLen = 0;
  573. };
  574. DWORD GetDataLen()
  575. {
  576. return ntohl(m_dwDataLen);
  577. };
  578. void SetDataLen(DWORD dwDataLen)
  579. {
  580. m_dwDataLen = htonl(dwDataLen);
  581. };
  582. void SetRegRequestId ( PBYTE pbRegRequestId, DWORD dwRegRequestIdLen )
  583. {
  584. if( pbRegRequestId != NULL )
  585. {
  586. memcpy ( m_szRegRequestId, pbRegRequestId, dwRegRequestIdLen );
  587. }
  588. };
  589. LPTSTR GetRegRequestId ( )
  590. {
  591. return ((LPTSTR)m_szRegRequestId);
  592. };
  593. void SetSPK (PBYTE pbSPK, DWORD dwSPKLen )
  594. {
  595. memcpy ( m_szSPK, pbSPK, dwSPKLen );
  596. };
  597. LPTSTR GetSPK ()
  598. {
  599. return ( (LPTSTR) m_szSPK );
  600. };
  601. BYTE *data() { return (BYTE *)(&m_dwDataLen+1); };
  602. RequestHeader RequestHeader;
  603. TCHAR m_szRegRequestId[REQUEST_ID_LEN]; //Registration Request Id
  604. TCHAR m_szSPK[LSSPK_LEN]; //new SPK
  605. DWORD m_dwDataLen; //Length of the Body
  606. //Variable Portion of the response
  607. //no variable portion here
  608. };
  609. /*
  610. * NewLicense KeyPack Requests
  611. */
  612. class ReissueLKP_Request
  613. {
  614. public:
  615. ReissueLKP_Request()
  616. {
  617. RequestHeader.SetLanguageId(GetSystemDefaultLangID());
  618. RequestHeader.SetRequestType(ReissueLicenseRequest);
  619. memset (m_szSPK,0,sizeof(m_szSPK));
  620. };
  621. DWORD GetDataLen()
  622. {
  623. return ntohl(m_dwDataLen);
  624. };
  625. void SetDataLen(DWORD dwDataLen)
  626. {
  627. m_dwDataLen = htonl(dwDataLen);
  628. };
  629. void SetSPK (PBYTE pbSPK, DWORD dwSPKLen )
  630. {
  631. memcpy ( m_szSPK, pbSPK, dwSPKLen );
  632. };
  633. LPTSTR GetSPK ()
  634. {
  635. return ( (LPTSTR) m_szSPK );
  636. };
  637. void SetCertBlobLen (DWORD dwCertBlobLen)
  638. {
  639. m_dwCertBlobLen = htonl(dwCertBlobLen);
  640. };
  641. DWORD GetCertBlobLen ()
  642. {
  643. return (ntohl(m_dwCertBlobLen));
  644. };
  645. BYTE *data() { return (BYTE *)(&m_dwDataLen+1); };
  646. RequestHeader RequestHeader;
  647. TCHAR m_szSPK[LSSPK_LEN]; //SPK
  648. DWORD m_dwCertBlobLen; //certificate length
  649. DWORD m_dwDataLen; //Length of the Body
  650. //Variable portion of the request
  651. //1.Cert Blob
  652. };
  653. class ReissueLKP_Response
  654. {
  655. public:
  656. ReissueLKP_Response()
  657. {
  658. RequestHeader.SetLanguageId(GetSystemDefaultLangID());
  659. RequestHeader.SetRequestType(ReissueLicenseRequest);
  660. }
  661. DWORD GetDataLen()
  662. {
  663. return ntohl(m_dwDataLen);
  664. };
  665. void SetDataLen(DWORD dwDataLen)
  666. {
  667. m_dwDataLen = htonl(dwDataLen);
  668. };
  669. void SetLKPLength(DWORD dwLKPLen)
  670. {
  671. m_dwLKPLen = htonl(dwLKPLen);
  672. };
  673. DWORD GetLKPLength()
  674. {
  675. return ( ntohl(m_dwLKPLen));
  676. };
  677. BYTE *data() { return (BYTE *)(&m_dwDataLen+1); };
  678. RequestHeader RequestHeader;
  679. DWORD m_dwLKPLen;
  680. DWORD m_dwDataLen; //Length of the Body
  681. //Variable part of the request
  682. //1. Last LKP issued
  683. };
  684. class NewLKP_Request
  685. {
  686. public:
  687. NewLKP_Request ()
  688. {
  689. RequestHeader.SetLanguageId(GetSystemDefaultLangID());
  690. RequestHeader.SetRequestType(NewLicenseRequest);
  691. memset (m_szSPK,0,sizeof(m_szSPK));
  692. m_dwRetailSPKCount = 0;
  693. m_dwCertBlobLen = 0;
  694. m_dwNewLKPRequestLen = 0;
  695. };
  696. ~NewLKP_Request () {};
  697. void SetCertBlobLen ( DWORD dwCertBlobLen )
  698. {
  699. m_dwCertBlobLen = htonl(dwCertBlobLen);
  700. };
  701. DWORD GetCertBlobLen ( )
  702. {
  703. return( ntohl(m_dwCertBlobLen));
  704. };
  705. void SetNewLKPRequestLen ( DWORD dwNewLKPRequestLen )
  706. {
  707. m_dwNewLKPRequestLen = htonl(dwNewLKPRequestLen);
  708. };
  709. DWORD GetNewLKPRequestLen ( )
  710. {
  711. return( ntohl(m_dwNewLKPRequestLen ));
  712. };
  713. DWORD GetDataLen()
  714. {
  715. return ntohl(m_dwDataLen);
  716. };
  717. void SetDataLen(DWORD dwDataLen)
  718. {
  719. m_dwDataLen = htonl(dwDataLen);
  720. };
  721. void SetSPK (PBYTE pbSPK, DWORD dwSPKLen )
  722. {
  723. memcpy ( m_szSPK, pbSPK, dwSPKLen );
  724. };
  725. LPTSTR GetSPK ()
  726. {
  727. return ( (LPTSTR) m_szSPK );
  728. };
  729. void SetRetailSPKCount (DWORD dwRetailSPKCount)
  730. {
  731. assert(dwRetailSPKCount <= MAX_RETAILSPKCOUNT );
  732. m_dwRetailSPKCount = htonl(dwRetailSPKCount);
  733. };
  734. DWORD GetRetailSPKCount()
  735. {
  736. return ntohl(m_dwRetailSPKCount);
  737. };
  738. BYTE *data() { return (BYTE *)(&m_dwDataLen+1); };
  739. RequestHeader RequestHeader;
  740. DWORD m_dwCertBlobLen;
  741. DWORD m_dwNewLKPRequestLen;
  742. DWORD m_dwRetailSPKCount;
  743. TCHAR m_szSPK[LSSPK_LEN]; //SPK
  744. DWORD m_dwDataLen; //Length of the Body
  745. //Variable length data here
  746. //1.Cert Blob
  747. //2. New LKP Request Blob
  748. //3. As many 25 character Retail SPK items as specified in count above
  749. };
  750. class NewLKP_Response
  751. {
  752. public:
  753. NewLKP_Response()
  754. {
  755. RequestHeader.SetRequestType(NewLicenseRequest);
  756. RequestHeader.SetLanguageId(GetSystemDefaultLangID());
  757. memset ( m_szRegRequestId,0,sizeof(m_szRegRequestId));
  758. memset ( m_szLicenseReqId,0,sizeof(m_szLicenseReqId));
  759. memset ( m_dwRetailSPKStatus, 0, sizeof(m_dwRetailSPKStatus));
  760. };
  761. void SetLKPLength(DWORD dwLKPLen)
  762. {
  763. m_dwLKPLen = htonl(dwLKPLen);
  764. };
  765. DWORD GetLKPLength()
  766. {
  767. return ( ntohl(m_dwLKPLen));
  768. };
  769. void SetRegRequestId (PBYTE pbRegReqId, DWORD dwRegReqIdLen)
  770. {
  771. if( pbRegReqId != NULL )
  772. {
  773. memcpy (m_szRegRequestId, pbRegReqId, dwRegReqIdLen );
  774. }
  775. };
  776. LPTSTR GetRegRequestId ()
  777. {
  778. return ((LPTSTR)m_szRegRequestId);
  779. };
  780. void SetLicenseReqId (PBYTE pbLicenseReqId, DWORD dwLicenseReqIdLen)
  781. {
  782. memcpy (m_szLicenseReqId, pbLicenseReqId, dwLicenseReqIdLen);
  783. };
  784. LPTSTR GetLicenseReqId ()
  785. {
  786. return ((LPTSTR)m_szLicenseReqId);
  787. };
  788. DWORD GetDataLen()
  789. {
  790. return ntohl(m_dwDataLen);
  791. };
  792. void SetDataLen(DWORD dwDataLen)
  793. {
  794. m_dwDataLen = htonl(dwDataLen);
  795. };
  796. void SetRetailSPKStatus ( DWORD dwIndex, TCHAR dwStatus )
  797. {
  798. assert ( dwIndex < MAX_RETAILSPKCOUNT );
  799. m_dwRetailSPKStatus[dwIndex] = dwStatus;
  800. };
  801. TCHAR GetRetailSPKStatus(DWORD dwIndex )
  802. {
  803. assert ( dwIndex < MAX_RETAILSPKCOUNT );
  804. return m_dwRetailSPKStatus[dwIndex];
  805. };
  806. BYTE *data() { return (BYTE *)(&m_dwDataLen+1); };
  807. RequestHeader RequestHeader;
  808. DWORD m_dwLKPLen;
  809. TCHAR m_szRegRequestId[REQUEST_ID_LEN];
  810. TCHAR m_szLicenseReqId[REQUEST_ID_LEN];
  811. TCHAR m_dwRetailSPKStatus[MAX_RETAILSPKCOUNT];
  812. DWORD m_dwDataLen; //Length of the Body
  813. //LKP here
  814. };
  815. class NewLKP_AckRequest
  816. {
  817. public:
  818. NewLKP_AckRequest()
  819. {
  820. RequestHeader.SetRequestType(LKPDownloadAckRequest);
  821. RequestHeader.SetLanguageId(GetSystemDefaultLangID());
  822. memset ( m_szRegRequestId,0,sizeof(m_szRegRequestId));
  823. memset ( m_szLicenseReqId,0,sizeof(m_szLicenseReqId));
  824. m_bAckType = 0;
  825. m_dwDataLen = 0;
  826. };
  827. void SetRegRequestId (PBYTE pbReqId, DWORD dwReqIdLen)
  828. {
  829. if(pbReqId != NULL)
  830. {
  831. memcpy ( m_szRegRequestId, pbReqId, dwReqIdLen );
  832. }
  833. };
  834. LPTSTR GetRegRequestId ()
  835. {
  836. return ( (LPTSTR)m_szRegRequestId);
  837. };
  838. void SetAckType ( BYTE bAckType )
  839. {
  840. m_bAckType = bAckType;
  841. };
  842. BYTE GetAckType ()
  843. {
  844. return m_bAckType;
  845. };
  846. void SetLicenseReqId (PBYTE pbLicenseReqId, DWORD dwLicenseReqIdLen)
  847. {
  848. memcpy (m_szLicenseReqId, pbLicenseReqId, dwLicenseReqIdLen);
  849. };
  850. LPTSTR GetLicenseReqId ()
  851. {
  852. return ((LPTSTR)m_szLicenseReqId);
  853. };
  854. DWORD GetDataLen()
  855. {
  856. return ntohl(m_dwDataLen);
  857. };
  858. void SetDataLen(DWORD dwDataLen)
  859. {
  860. m_dwDataLen = htonl(dwDataLen);
  861. };
  862. BYTE *data() { return (BYTE *)(&m_dwDataLen+1); };
  863. RequestHeader RequestHeader;
  864. TCHAR m_szRegRequestId[REQUEST_ID_LEN];
  865. TCHAR m_szLicenseReqId[REQUEST_ID_LEN];
  866. BYTE m_bAckType; //1 = success 2 = fail
  867. DWORD m_dwDataLen; //Length of the Body
  868. };
  869. class NewLKP_AckResponse
  870. {
  871. public:
  872. NewLKP_AckResponse()
  873. {
  874. RequestHeader.SetLanguageId(GetSystemDefaultLangID());
  875. RequestHeader.SetRequestType(LKPDownloadAckRequest);
  876. m_dwDataLen = 0;
  877. }
  878. DWORD GetDataLen()
  879. {
  880. return ntohl(m_dwDataLen);
  881. };
  882. void SetDataLen(DWORD dwDataLen)
  883. {
  884. m_dwDataLen = htonl(dwDataLen);
  885. };
  886. BYTE *data() { return (BYTE *)(&m_dwDataLen+1); };
  887. RequestHeader RequestHeader;
  888. DWORD m_dwDataLen; //Length of the Body
  889. //nothing here
  890. };
  891. /*
  892. * Certificate Acknowledgement Request / Interactions
  893. */
  894. class Certificate_AckRequest
  895. {
  896. public:
  897. Certificate_AckRequest ()
  898. {
  899. RequestHeader.SetRequestType(CertificateDownloadAck);
  900. RequestHeader.SetLanguageId(GetSystemDefaultLangID());
  901. memset (m_szRegRequestId,0,sizeof(m_szRegRequestId));
  902. m_bAckType = 0;
  903. m_dwDataLen = 0;
  904. };
  905. ~Certificate_AckRequest () {};
  906. void SetRegRequestId (PBYTE pbReqId, DWORD dwReqIdLen)
  907. {
  908. if(pbReqId != NULL)
  909. {
  910. memcpy ( m_szRegRequestId, pbReqId, dwReqIdLen );
  911. }
  912. };
  913. LPTSTR GetRegRequestId ()
  914. {
  915. return ( (LPTSTR)m_szRegRequestId);
  916. };
  917. void SetAckType ( BYTE bAckType )
  918. {
  919. m_bAckType = bAckType;
  920. };
  921. BYTE GetAckType ()
  922. {
  923. return m_bAckType;
  924. };
  925. DWORD GetDataLen()
  926. {
  927. return ntohl(m_dwDataLen);
  928. };
  929. void SetDataLen(DWORD dwDataLen)
  930. {
  931. m_dwDataLen = htonl(dwDataLen);
  932. };
  933. BYTE *data() { return (BYTE *)(&m_dwDataLen+1); };
  934. RequestHeader RequestHeader;
  935. TCHAR m_szRegRequestId[REQUEST_ID_LEN];
  936. BYTE m_bAckType; //1 = success 2 = fail
  937. DWORD m_dwDataLen; //Length of the Body
  938. //no variable data
  939. };
  940. class Certificate_AckResponse
  941. {
  942. public:
  943. Certificate_AckResponse ()
  944. {
  945. RequestHeader.SetRequestType(CertificateDownloadAck);
  946. RequestHeader.SetLanguageId(GetSystemDefaultLangID());
  947. m_dwDataLen = 0;
  948. };
  949. ~Certificate_AckResponse () {};
  950. DWORD GetDataLen()
  951. {
  952. return ntohl(m_dwDataLen);
  953. };
  954. void SetDataLen(DWORD dwDataLen)
  955. {
  956. m_dwDataLen = htonl(dwDataLen);
  957. };
  958. BYTE *data() { return (BYTE *)(&m_dwDataLen+1); };
  959. RequestHeader RequestHeader;
  960. DWORD m_dwDataLen; //Length of the Body
  961. //no variable data
  962. };
  963. //Request for sendind the New CErt
  964. class NewCert_Request
  965. {
  966. public:
  967. NewCert_Request ()
  968. {
  969. RequestHeader.SetRequestType(CertificateRequest);
  970. RequestHeader.SetLanguageId(GetSystemDefaultLangID());
  971. };
  972. ~NewCert_Request () {};
  973. DWORD GetExchgPKCS10Length()
  974. {
  975. return ( ntohl(m_dwExchPKCS10Length) );
  976. };
  977. void SetExchgPKCS10Length(DWORD dwExchPKCS10Length)
  978. {
  979. m_dwExchPKCS10Length = htonl(dwExchPKCS10Length);
  980. };
  981. DWORD GetSignPKCS10Length()
  982. {
  983. return ( ntohl(m_dwSignPKCS10Length) );
  984. };
  985. void SetSignPKCS10Length(DWORD dwSignPKCS10Length)
  986. {
  987. m_dwSignPKCS10Length = htonl(dwSignPKCS10Length);
  988. };
  989. DWORD GetDataLen()
  990. {
  991. return ntohl(m_dwDataLen);
  992. };
  993. void SetDataLen(DWORD dwDataLen)
  994. {
  995. m_dwDataLen = htonl(dwDataLen);
  996. };
  997. void SetServerName(TCHAR * tc)
  998. {
  999. _stprintf(m_szLServerName, _T("%.*s"), MAX_COMPUTERNAME_LENGTH + 4, tc);
  1000. }
  1001. TCHAR * GetServerName(void)
  1002. {
  1003. return m_szLServerName;
  1004. }
  1005. BYTE *data() { return (BYTE *)(&m_dwDataLen+1); };
  1006. RequestHeader RequestHeader;
  1007. DWORD m_dwExchPKCS10Length;
  1008. DWORD m_dwSignPKCS10Length;
  1009. CERTCUSTINFO stCertInfo;
  1010. TCHAR m_szLServerName[MAX_COMPUTERNAME_LENGTH + 5];
  1011. DWORD m_dwDataLen; //Length of the Body
  1012. //Variable data goes here
  1013. //First Exchg PKCS10
  1014. //Second Sign PKCS10
  1015. };
  1016. //New Certificate request response structure
  1017. class NewCert_Response
  1018. {
  1019. public:
  1020. NewCert_Response ()
  1021. {
  1022. RequestHeader.SetRequestType(CertificateRequest);
  1023. RequestHeader.SetLanguageId(GetSystemDefaultLangID());
  1024. memset ( m_szSPK, 0, sizeof(m_szSPK ));
  1025. memset ( m_szRegRequestId, 0, sizeof(m_szRegRequestId) );
  1026. };
  1027. ~NewCert_Response () {};
  1028. DWORD GetExchgPKCS7Length()
  1029. {
  1030. return ( ntohl(m_dwExchPKCS7Length) );
  1031. };
  1032. void SetExchgPKCS7Length(DWORD dwExchPKCS7Length)
  1033. {
  1034. m_dwExchPKCS7Length = htonl(dwExchPKCS7Length);
  1035. };
  1036. DWORD GetSignPKCS7Length()
  1037. {
  1038. return ( ntohl(m_dwSignPKCS7Length) );
  1039. };
  1040. void SetSignPKCS10Length(DWORD dwSignPKCS7Length)
  1041. {
  1042. m_dwSignPKCS7Length = htonl(dwSignPKCS7Length);
  1043. };
  1044. DWORD GetRootCertLength()
  1045. {
  1046. return ( ntohl(m_dwRootCertLength) );
  1047. };
  1048. void SetRootCertLength(DWORD dwRootCertLength)
  1049. {
  1050. m_dwRootCertLength = htonl(dwRootCertLength);
  1051. };
  1052. void SetRegRequestId ( PBYTE pbRegRequestId, DWORD dwRegRequestIdLen )
  1053. {
  1054. if( pbRegRequestId != NULL )
  1055. {
  1056. memcpy ( m_szRegRequestId, pbRegRequestId, dwRegRequestIdLen );
  1057. }
  1058. };
  1059. LPTSTR GetRegRequestId ( )
  1060. {
  1061. return ((LPTSTR)m_szRegRequestId);
  1062. };
  1063. void SetSPK ( PBYTE pbSPK, DWORD dwSPKLen)
  1064. {
  1065. memcpy ( m_szSPK, pbSPK, dwSPKLen );
  1066. };
  1067. LPTSTR GetSPK ( )
  1068. {
  1069. return ((LPTSTR)m_szSPK);
  1070. };
  1071. DWORD GetDataLen()
  1072. {
  1073. return ntohl(m_dwDataLen);
  1074. };
  1075. void SetDataLen(DWORD dwDataLen)
  1076. {
  1077. m_dwDataLen = htonl(dwDataLen);
  1078. };
  1079. BYTE *data() { return (BYTE *)(&m_dwDataLen+1); };
  1080. RequestHeader RequestHeader;
  1081. DWORD m_dwExchPKCS7Length;
  1082. DWORD m_dwSignPKCS7Length;
  1083. DWORD m_dwRootCertLength;
  1084. TCHAR m_szRegRequestId[REQUEST_ID_LEN];
  1085. TCHAR m_szSPK[LSSPK_LEN];
  1086. DWORD m_dwDataLen; //Length of the Body
  1087. //variable data part
  1088. //1.Exchange PKCS7
  1089. //2.Signature PKCS7
  1090. //3.Root Cert
  1091. };
  1092. //Certificate sign only request structure
  1093. class CertificateSignOnly_Request
  1094. {
  1095. public:
  1096. CertificateSignOnly_Request()
  1097. {
  1098. RequestHeader.SetRequestType(CertificateSignOnly);
  1099. memset (m_szSPK,0,sizeof(m_szSPK));
  1100. };
  1101. ~CertificateSignOnly_Request(){};
  1102. DWORD GetExchgPKCS10Length()
  1103. {
  1104. return ( ntohl(m_dwExchPKCS10Length) );
  1105. };
  1106. void SetExchgPKCS10Length(DWORD dwExchPKCS10Length)
  1107. {
  1108. m_dwExchPKCS10Length = htonl(dwExchPKCS10Length);
  1109. };
  1110. DWORD GetSignPKCS10Length()
  1111. {
  1112. return ( ntohl(m_dwSignPKCS10Length) );
  1113. };
  1114. void SetSignPKCS10Length(DWORD dwSignPKCS10Length)
  1115. {
  1116. m_dwSignPKCS10Length = htonl(dwSignPKCS10Length);
  1117. };
  1118. DWORD GetDataLen()
  1119. {
  1120. return ntohl(m_dwDataLen);
  1121. };
  1122. void SetDataLen(DWORD dwDataLen)
  1123. {
  1124. m_dwDataLen = htonl(dwDataLen);
  1125. };
  1126. void SetSPK (PBYTE pbSPK, DWORD dwSPKLen )
  1127. {
  1128. memcpy ( m_szSPK, pbSPK, dwSPKLen );
  1129. };
  1130. LPTSTR GetSPK ()
  1131. {
  1132. return ( (LPTSTR) m_szSPK );
  1133. };
  1134. void SetServerName(TCHAR * tc)
  1135. {
  1136. _stprintf(m_szLServerName, _T("%.*s"), MAX_COMPUTERNAME_LENGTH + 4, tc);
  1137. }
  1138. TCHAR * GetServerName(void)
  1139. {
  1140. return m_szLServerName;
  1141. }
  1142. BYTE *data() { return (BYTE *)(&m_dwDataLen+1); };
  1143. RequestHeader RequestHeader;
  1144. DWORD m_dwExchPKCS10Length;
  1145. DWORD m_dwSignPKCS10Length;
  1146. TCHAR m_szSPK[LSSPK_LEN]; //SPK
  1147. TCHAR m_szLServerName[MAX_COMPUTERNAME_LENGTH + 5];
  1148. DWORD m_dwDataLen; //Length of the Body
  1149. //variable data goes here
  1150. //First Exchg PKCS10
  1151. //Second Sign PKCS10
  1152. };
  1153. //Certificate sign only response structure
  1154. class CertificateSignOnly_Response
  1155. {
  1156. public:
  1157. CertificateSignOnly_Response()
  1158. {
  1159. memset(m_szRegRequestId,0,sizeof(m_szRegRequestId));
  1160. RequestHeader.SetRequestType(CertificateSignOnly);
  1161. };
  1162. ~CertificateSignOnly_Response(){};
  1163. DWORD GetExchgPKCS7Length()
  1164. {
  1165. return ( ntohl(m_dwExchPKCS7Length) );
  1166. };
  1167. void SetExchgPKCS7Length(DWORD dwExchPKCS7Length)
  1168. {
  1169. m_dwExchPKCS7Length = htonl(dwExchPKCS7Length);
  1170. };
  1171. DWORD GetSignPKCS7Length()
  1172. {
  1173. return ( ntohl(m_dwSignPKCS7Length) );
  1174. };
  1175. void SetSignPKCS7Length(DWORD dwSignPKCS7Length)
  1176. {
  1177. m_dwSignPKCS7Length = htonl(dwSignPKCS7Length);
  1178. };
  1179. DWORD GetRootCertLength()
  1180. {
  1181. return ( ntohl(m_dwRootCertLength) );
  1182. };
  1183. void SetRootCertLength(DWORD dwRootCertLength)
  1184. {
  1185. m_dwRootCertLength = htonl(dwRootCertLength);
  1186. };
  1187. void SetRegRequestId ( PBYTE pbRegRequestId, DWORD dwRegRequestIdLen )
  1188. {
  1189. if( pbRegRequestId != NULL )
  1190. {
  1191. memcpy ( m_szRegRequestId, pbRegRequestId, dwRegRequestIdLen );
  1192. }
  1193. };
  1194. LPTSTR GetRegRequestId ( )
  1195. {
  1196. return ((LPTSTR)m_szRegRequestId);
  1197. };
  1198. DWORD GetDataLen()
  1199. {
  1200. return ntohl(m_dwDataLen);
  1201. };
  1202. void SetDataLen(DWORD dwDataLen)
  1203. {
  1204. m_dwDataLen = htonl(dwDataLen);
  1205. };
  1206. BYTE *data() { return (BYTE *)(&m_dwDataLen+1); };
  1207. RequestHeader RequestHeader;
  1208. DWORD m_dwExchPKCS7Length;
  1209. DWORD m_dwSignPKCS7Length;
  1210. DWORD m_dwRootCertLength;
  1211. TCHAR m_szRegRequestId[REQUEST_ID_LEN];
  1212. DWORD m_dwDataLen; //Length of the Body
  1213. //Variable data
  1214. //first ExchgPKCS7
  1215. //Second SignPKCS7
  1216. //third Root CErt
  1217. };
  1218. class CertificateDownload_Request
  1219. {
  1220. public:
  1221. CertificateDownload_Request ()
  1222. {
  1223. RequestHeader.SetRequestType(CertificateDownload);
  1224. RequestHeader.SetLanguageId(GetSystemDefaultLangID());
  1225. m_dwDataLen = 0;
  1226. memset ( m_szPIN,0,sizeof(m_szPIN));
  1227. };
  1228. ~CertificateDownload_Request () {};
  1229. void SetPIN ( PBYTE pbPIN, DWORD dwPINLen )
  1230. {
  1231. if( pbPIN != NULL )
  1232. {
  1233. memcpy ( m_szPIN, pbPIN, dwPINLen );
  1234. }
  1235. };
  1236. LPTSTR GetPIN ( )
  1237. {
  1238. return ((LPTSTR)m_szPIN);
  1239. };
  1240. DWORD GetDataLen()
  1241. {
  1242. return ntohl(m_dwDataLen);
  1243. };
  1244. void SetDataLen(DWORD dwDataLen)
  1245. {
  1246. m_dwDataLen = htonl(dwDataLen);
  1247. };
  1248. BYTE *data() { return (BYTE *)(&m_dwDataLen+1); };
  1249. RequestHeader RequestHeader;
  1250. TCHAR m_szPIN[PIN_LEN];
  1251. DWORD m_dwDataLen; //Length of the Body
  1252. //no variable data part!!
  1253. };
  1254. class CertificateDownload_Response
  1255. {
  1256. public:
  1257. CertificateDownload_Response ()
  1258. {
  1259. RequestHeader.SetRequestType(CertificateDownload);
  1260. RequestHeader.SetLanguageId(GetSystemDefaultLangID());
  1261. memset(m_szRegRequestId,0,sizeof(m_szRegRequestId));
  1262. memset(m_szSPK,0,sizeof(m_szSPK));
  1263. };
  1264. ~CertificateDownload_Response () {};
  1265. DWORD GetExchgPKCS7Length()
  1266. {
  1267. return ( ntohl(m_dwExchPKCS7Length) );
  1268. };
  1269. void SetExchgPKCS7Length(DWORD dwExchPKCS7Length)
  1270. {
  1271. m_dwExchPKCS7Length = htonl(dwExchPKCS7Length);
  1272. };
  1273. DWORD GetSignPKCS7Length()
  1274. {
  1275. return ( ntohl(m_dwSignPKCS7Length) );
  1276. };
  1277. void SetSignPKCS10Length(DWORD dwSignPKCS7Length)
  1278. {
  1279. m_dwSignPKCS7Length = htonl(dwSignPKCS7Length);
  1280. };
  1281. DWORD GetRootCertLength()
  1282. {
  1283. return ( ntohl(m_dwRootCertLength) );
  1284. };
  1285. void SetRootCertLength(DWORD dwRootCertLength)
  1286. {
  1287. m_dwRootCertLength = htonl(dwRootCertLength);
  1288. };
  1289. void SetRegRequestId ( PBYTE pbRegRequestId, DWORD dwRegRequestIdLen )
  1290. {
  1291. if( pbRegRequestId != NULL )
  1292. {
  1293. memcpy ( m_szRegRequestId, pbRegRequestId, dwRegRequestIdLen );
  1294. }
  1295. };
  1296. LPTSTR GetRegRequestId ( )
  1297. {
  1298. return ((LPTSTR)m_szRegRequestId);
  1299. };
  1300. void SetSPK ( PBYTE pbSPK, DWORD dwSPKLen)
  1301. {
  1302. if(pbSPK != NULL)
  1303. {
  1304. memcpy ( m_szSPK, pbSPK, dwSPKLen );
  1305. }
  1306. };
  1307. LPTSTR GetSPK ( )
  1308. {
  1309. return ((LPTSTR)m_szSPK);
  1310. };
  1311. DWORD GetDataLen()
  1312. {
  1313. return ntohl(m_dwDataLen);
  1314. };
  1315. void SetDataLen(DWORD dwDataLen)
  1316. {
  1317. m_dwDataLen = htonl(dwDataLen);
  1318. };
  1319. BYTE *data() { return (BYTE *)(&m_dwDataLen+1); };
  1320. RequestHeader RequestHeader;
  1321. DWORD m_dwExchPKCS7Length;
  1322. DWORD m_dwSignPKCS7Length;
  1323. DWORD m_dwRootCertLength;
  1324. TCHAR m_szRegRequestId[REQUEST_ID_LEN];
  1325. TCHAR m_szSPK[LSSPK_LEN];
  1326. DWORD m_dwDataLen; //Length of the Body
  1327. //variable data part
  1328. //1.Exchange PKCS7
  1329. //2.Signature PKCS7
  1330. //3.Root Cert
  1331. };
  1332. //ping request and response class
  1333. class Ping_Request
  1334. {
  1335. public:
  1336. Ping_Request ()
  1337. {
  1338. RequestHeader.SetRequestType(PingRequest);
  1339. RequestHeader.SetLanguageId(GetSystemDefaultLangID());
  1340. m_dwDataLen = 0;
  1341. _tcscpy ( tszPingReqData, _TEXT("Houston we have a problem"));
  1342. };
  1343. ~Ping_Request () {};
  1344. DWORD GetDataLen()
  1345. {
  1346. return ntohl(m_dwDataLen);
  1347. };
  1348. void SetDataLen(DWORD dwDataLen)
  1349. {
  1350. m_dwDataLen = htonl(dwDataLen);
  1351. };
  1352. BYTE *data() { return (BYTE *)(&m_dwDataLen+1); };
  1353. RequestHeader RequestHeader;
  1354. TCHAR tszPingReqData[32]; //32 characters
  1355. DWORD m_dwDataLen; //Length of the Body
  1356. };
  1357. class Ping_Response
  1358. {
  1359. public:
  1360. Ping_Response()
  1361. {
  1362. RequestHeader.SetRequestType(PingRequest);
  1363. RequestHeader.SetLanguageId(GetSystemDefaultLangID());
  1364. _tcscpy ( tszPingResponse, _TEXT("Beam'er up Scottie!"));
  1365. }
  1366. ~Ping_Response() {};
  1367. DWORD GetDataLen()
  1368. {
  1369. return ntohl(m_dwDataLen);
  1370. };
  1371. void SetDataLen(DWORD dwDataLen)
  1372. {
  1373. m_dwDataLen = htonl(dwDataLen);
  1374. };
  1375. BYTE *data() { return (BYTE *)(&m_dwDataLen+1); };
  1376. RequestHeader RequestHeader;
  1377. TCHAR tszPingResponse[32];
  1378. DWORD m_dwDataLen; //Length of the Body
  1379. };
  1380. //stream header declarations
  1381. #define BLOCK_TYPE_NAME 1
  1382. #define BLOCK_TYPE_VALUE 2
  1383. #define BLOCK_TYPE_PROP_PAIR 3
  1384. typedef struct
  1385. {
  1386. long m_wType;
  1387. long m_lNameSize;
  1388. long m_lValueSize;
  1389. void SetType (long lType) {m_wType = htonl(lType);};
  1390. long GetType (){return ntohl(m_wType);};
  1391. void SetNameSize(long lNameSize) {m_lNameSize = htonl(lNameSize);};
  1392. long GetNameSize(){return (ntohl(m_lNameSize));};
  1393. void SetValueSize(long lValueSize){m_lValueSize = htonl(lValueSize);};
  1394. long GetValueSize(){return (ntohl(m_lValueSize));};
  1395. } BLOCK_HDR;
  1396. #define STREAM_HDR_TITLE _TEXT("ICB") //header title
  1397. #define STREAM_HDR_TYPE 1 //header type
  1398. typedef struct
  1399. {
  1400. TCHAR m_szTitle[4]; //will be ICB for now
  1401. DWORD m_wHeader; //reserved for now will be implemented later
  1402. //set it to 0x0000
  1403. DWORD m_itemCount; //number of items in the stream!
  1404. void SetHeader ( DWORD wHeader ) {m_wHeader = htonl(wHeader);};
  1405. DWORD GetHeader (){return ntohl(m_wHeader);};
  1406. void SetItemCount ( DWORD ItemCount ) { m_itemCount = htonl(ItemCount);};
  1407. DWORD GetItemCount (){return ntohl(m_itemCount);};
  1408. } STREAM_HDR;
  1409. #endif