|
|
//Copyright (c) 1998 - 1999 Microsoft Corporation
#ifndef _GLOBALS_H_
#define _GLOBALS_H_
#include "winsock2.h"
#include "httpext.h"
#include "assert.h"
#pragma warning(disable:4200)
//
// Version Number for the CH Structs. (Build Number)
//
#define CH_STRUCTS_VERSION_RC1 11
#define CH_STRUCTS_CURRENT_VERSION 35
#define MAX_RETAILSPKCOUNT 20
#define LSSPK_LEN 96
#define PIN_LEN 96
#define REQUEST_ID_LEN 64
#define CA_CUSTMER_NAME_LEN 60
#define CA_ORG_UNIT_LEN 60
#define CA_ADDRESS_LEN 200
#define CA_CITY_LEN 30
#define CA_STATE_LEN 30
#define CA_COUNTRY_LEN 2
#define CA_ZIP_LEN 16
#define CA_NAME_LEN 30
#define CA_PHONE_LEN 64
#define CA_FAX_LEN 64
#define CA_EMAIL_LEN 64
#define CA_REVOKE_REASONCODE_LEN 4
#define CA_LSERVERID_LEN 32
#define PROGRAM_NAME_LEN 64
#define MAX_CERTTYPE_LEN 32
//Retail SPK Return Values
#define RETAIL_SPK_NULL ((TCHAR)'0')
#define RETAIL_SPK_OK ((TCHAR)'1')
#define RETAIL_SPK_INVALID_SIGNATURE ((TCHAR)'2')
#define RETAIL_SPK_INVALID_PRODUCT_TYPE ((TCHAR)'3')
#define RETAIL_SPK_INVALID_SERIAL_NUMBER ((TCHAR)'4')
#define RETAIL_SPK_ALREADY_REGISTERED ((TCHAR)'5')
#define RETAIL_MAX_LENGTH 25 //25 TCHARS
//Select/Open override
#define OVERRIDE_MAX_SIZE 10
typedef struct _CERTCUSTINFO_TAG_ { TCHAR OrgName[CA_CUSTMER_NAME_LEN+1]; TCHAR OrgUnit[CA_ORG_UNIT_LEN+1]; TCHAR Address[CA_ADDRESS_LEN+1]; TCHAR City[CA_CITY_LEN+1]; TCHAR State[CA_STATE_LEN+1]; TCHAR Country[CA_COUNTRY_LEN+1]; TCHAR Zip[CA_ZIP_LEN+1]; TCHAR LName[CA_NAME_LEN+1]; TCHAR FName[CA_NAME_LEN+1]; TCHAR Phone[CA_PHONE_LEN+1]; TCHAR Fax[CA_FAX_LEN+1]; TCHAR Email[CA_EMAIL_LEN+1]; TCHAR LSID[CA_LSERVERID_LEN+1]; TCHAR ProgramName[PROGRAM_NAME_LEN]; } CERTCUSTINFO, * PCERTCUSTINFO;
#define HydraContent "application/octet-stream"
/*********************************************************************************************************
* Hydra request header definitions * *********************************************************************************************************/ enum RequestTypes { PingRequest = 1, //ping upto isapi extension
CertificateRequest, //New Certificate request
CertificateDownload, //certificate download request
CertificateSignOnly, //convert from SPK to certificate
CertificateRevoke, //Revoke current certificate
CertificateReissue, //Reissue the certificate
CertificateDownloadAck, //Certificate download ack request
ValidateCert, //Validate Certificate Request
NewLicenseRequest, //new license request
ReturnLicenseRequest, //return license request
ReissueLicenseRequest, //reissue last license key pack
LKPDownloadAckRequest, //acknowledgement
NoOperation //unknown operation
};
enum ResponseTypes { Response_Invalid_Response = 0, Response_Success, Response_Failure, Response_InvalidData, Response_ServerError, Response_NotYetImplemented, Response_VersionMismatch, Response_Reg_Bad_SPK, Response_Reg_Bad_Cert, Response_Reg_Expired, Response_Reg_Revoked, Response_TDO_TDN_Failed, Response_License_Info_Failed, Response_Invalid_Conf_Num, Response_Conf_Num_Already_Used, Response_SelectMloLicense_NotValid, Response_NotASupervisor_NotValid, Response_Invalid_Transfer, Response_Denied_Other_Program_Id, Response_Invalid_Other_Program_Qty };
enum TransactionStates { Void = 0, NotValidated, Validated, LicenceRequestPending, LicenceRequestGranted, UpgradeRequestPending // ...
};
enum RegistrationMethods { Reg_Internet = 0, Reg_Telephone, Reg_Fax };
enum TransportTypes { Transport_Internet =1, //will be supported
Transport_Disk, Transport_Modem, Transport_FaxModem, Transport_Other //unknown transport yet!
};
typedef struct TCB_DISK_PARAM_TAG { char * pszFileName; char * pPostData; DWORD dwPostDataLen; }TCB_DISK_PARAM, * PTCB_DISK_PARAM;
typedef struct TCB_INTERNET_PARAM_TAG { char * pURL; char * pPostData; DWORD dwPostDataLen; }TCB_INTERNET_PARAM, *PTCB_INTERNET_PARAM;
/*
* This is the transport control block which is filled in prior to calling the * Send Request routine. * */ typedef struct TCB_TAG_ { RequestTypes RequestType; //request identifier
TransportTypes TransportType; //transport identifier
void * pvParam; //parameters based on the Transport Type
void * pvReserved; //should be set to null at request time and then left alone.
void * pvResponse; //void pointer to response
DWORD dwResponseLen; //response length
DWORD dwRetCode; //Return code from wait operation
}TCB, * PTCB;
/*
* This is the generic structure of the request header that goes on the wire */ class RequestHeader { public: RequestHeader() { SetRequestType(NoOperation); SetResponseType(Response_Invalid_Response); m_dwLanguageID = 0; SetVersion(CH_STRUCTS_CURRENT_VERSION); SetRegistrationMethod(Reg_Internet); };
void SetRequestType (enum RequestTypes Req) { m_Request = (enum RequestTypes)htonl(Req); };
enum RequestTypes GetRequestType() { return (enum RequestTypes) ntohl(m_Request); };
void SetResponseType (enum ResponseTypes eResp) { m_Response = (enum ResponseTypes)htonl(eResp); }; enum ResponseTypes GetResponseType() { return (enum ResponseTypes) ntohl(m_Response); };
void SetRegistrationMethod (enum RegistrationMethods eRegM) { m_RegistrationMethod = (enum RegistrationMethods)htonl(eRegM); }; enum RegistrationMethods GetRegistrationMethod() { return (enum RegistrationMethods) ntohl(m_RegistrationMethod); };
void SetLanguageId(DWORD dwLanguagwId) { m_dwLanguageID = htonl(dwLanguagwId); };
DWORD GetLanguageId() { return ntohl(m_dwLanguageID); };
void SetVersion(DWORD dwVersion) { m_dwVersion = htonl(dwVersion); };
DWORD GetVersion() { return ntohl(m_dwVersion); }
private: enum RequestTypes m_Request; //Request Interaction Code
enum ResponseTypes m_Response; //Response Type
enum RegistrationMethods m_RegistrationMethod; //Registration Method
DWORD m_dwLanguageID; //languageId
DWORD m_dwVersion; // Version for the Request Header
};
/*
* Validation request header */ class Validate_Request { public: Validate_Request() { RequestHeader.SetRequestType(ValidateCert); RequestHeader.SetLanguageId(GetSystemDefaultLangID()); };
~Validate_Request() {}; void SetSPK (PBYTE pbSPK, DWORD dwSPKLen ) { if (pbSPK != NULL) { memcpy ( m_szSPK, pbSPK, dwSPKLen ); } };
LPTSTR GetSPK () { return ( (LPTSTR) m_szSPK ); };
void SetCertBlobLen (DWORD dwCertBlobLen) { m_dwCertBlobLen = htonl(dwCertBlobLen); };
DWORD GetCertBlobLen () { return (ntohl(m_dwCertBlobLen)); };
DWORD GetDataLen() { return ntohl(m_dwDataLen); };
void SetDataLen(DWORD dwDataLen) { m_dwDataLen = htonl(dwDataLen); }; BYTE *data() { return (BYTE *)(&m_dwDataLen+1); };
RequestHeader RequestHeader; TCHAR m_szSPK[LSSPK_LEN]; //SPK
DWORD m_dwCertBlobLen; DWORD m_dwDataLen; //Length of the Body
//variable data part
//CErt Blob follows here
}; /*
* Validation response header */ class Validate_Response { public: Validate_Response() { RequestHeader.SetRequestType(ValidateCert); RequestHeader.SetLanguageId(GetSystemDefaultLangID()); memset(m_szCertType,0,sizeof(m_szCertType)); }; inline void SetCHExchCertLen (DWORD dwCertLen) { m_dwCHExchCertLen = htonl(dwCertLen); };
inline DWORD GetCHExchCertLen () { return ntohl(m_dwCHExchCertLen); };
inline void SetCHSignCertLen (DWORD dwCertLen) { m_dwCHSignCertLen = htonl(dwCertLen); };
inline DWORD GetCHSignCertLen () { return ntohl(m_dwCHSignCertLen); };
inline void SetCHRootCertLen(DWORD dwRootCertLen) { m_dwCHRootCertLen = htonl(dwRootCertLen); };
inline DWORD GetCHRootCertLen () { return ntohl(m_dwCHRootCertLen); };
DWORD GetDataLen() { return ntohl(m_dwDataLen); };
void SetDataLen(DWORD dwDataLen) { m_dwDataLen = htonl(dwDataLen); }; void SetRetCode (DWORD dwRetCode ) { m_dwRetCode = htonl(dwRetCode); } DWORD GetRetCode () { return ntohl(m_dwRetCode); } void SetCertType(PBYTE pbCertType, DWORD dwCertTypeLen ) { memcpy (m_szCertType, pbCertType, dwCertTypeLen ); } LPTSTR GetCertType() { return ((LPTSTR)m_szCertType); } BYTE *data() { return (BYTE *)(&m_dwDataLen+1); };
RequestHeader RequestHeader; DWORD m_dwRetCode; DWORD m_dwCHRootCertLen; DWORD m_dwCHExchCertLen; DWORD m_dwCHSignCertLen; TCHAR m_szCertType[MAX_CERTTYPE_LEN]; DWORD m_dwDataLen; //Length of the Body
//Variable length response
//1.CH Root Cert
//2.CH Exch cert
//3.CH Sign Cert
};
//Send the old certificate and SPK with this request and
//then get the response back
class CertRevoke_Request { public: CertRevoke_Request() { RequestHeader.SetRequestType(CertificateRevoke); RequestHeader.SetLanguageId(GetSystemDefaultLangID()); memset (m_szSPK,0,sizeof(m_szSPK)); memset (m_LName, 0, sizeof(m_LName)); memset (m_FName,0,sizeof(m_FName)); memset (m_Phone, 0, sizeof(m_Phone)); memset (m_FAX, 0, sizeof(m_FAX)); memset (m_EMail,0,sizeof(m_EMail)); memset (m_ReasonCode,0,sizeof(m_ReasonCode)); m_dwExchgCertLen = 0; m_dwSignCertLen = 0; }; DWORD GetDataLen() { return ntohl(m_dwDataLen); };
void SetDataLen(DWORD dwDataLen) { m_dwDataLen = htonl(dwDataLen); };
void SetSPK (PBYTE pbSPK, DWORD dwSPKLen ) { if (pbSPK != NULL) { memcpy ( m_szSPK, pbSPK, dwSPKLen ); } };
LPTSTR GetSPK () { return ( (LPTSTR) m_szSPK ); };
void SetExchgCertLen (DWORD dwExchgCertLen) { m_dwExchgCertLen = htonl(dwExchgCertLen); };
DWORD GetExchgCertLen () { return (ntohl(m_dwExchgCertLen)); };
void SetSignCertLen (DWORD dwSignCertLen) { m_dwSignCertLen = htonl(dwSignCertLen); };
DWORD GetSignCertLen () { return (ntohl(m_dwSignCertLen)); };
void SetLName ( PBYTE pbLName, DWORD dwLNameLen ) { memcpy ( m_LName, pbLName, dwLNameLen ); }; LPTSTR GetLName () { return ((LPTSTR)m_LName); };
void SetFName ( PBYTE pbFName, DWORD dwFNameLen ) { memcpy ( m_FName, pbFName, dwFNameLen ); }; LPTSTR GetFName () { return ((LPTSTR)m_FName); };
void SetPhone ( PBYTE pbPhone, DWORD dwPhoneLen ) { memcpy ( m_Phone, pbPhone, dwPhoneLen ); }; LPTSTR GetPhone () { return ((LPTSTR)m_Phone); };
void SetFax ( PBYTE pbFAX, DWORD dwFAXLen ) { memcpy ( m_FAX, pbFAX, dwFAXLen ); }; LPTSTR GetFax () { return ((LPTSTR)m_FAX); };
void SetEMail ( PBYTE pbEMail, DWORD dwEMailLen ) { memcpy ( m_EMail, pbEMail, dwEMailLen); }; LPTSTR GetEMail () { return ((LPTSTR)m_EMail); };
void SetReasonCode( PBYTE pbReasonCode, DWORD dwReasonCodeLen ) { memcpy ( m_ReasonCode, pbReasonCode, dwReasonCodeLen ); }; LPTSTR GetReasonCode () { return ((LPTSTR)m_ReasonCode); };
BYTE *data() { return (BYTE *)(&m_dwDataLen+1); }; RequestHeader RequestHeader; DWORD m_dwExchgCertLen; DWORD m_dwSignCertLen; TCHAR m_szSPK[LSSPK_LEN]; //SPK
TCHAR m_LName[CA_NAME_LEN+1]; //LName of the revoker
TCHAR m_FName[CA_NAME_LEN+1]; //FName of the revoker
TCHAR m_Phone[CA_PHONE_LEN+1]; //phone
TCHAR m_FAX[CA_FAX_LEN+1]; //FAX
TCHAR m_EMail[CA_EMAIL_LEN+1]; //email - optional of the revoker
TCHAR m_ReasonCode[CA_REVOKE_REASONCODE_LEN+1]; //reason for revokation
DWORD m_dwDataLen; //Length of the Body
//Variable length data
//1.Exchange Cert Blob
//2.Signature cert blob
};
//nothing to send back. Either the operation succeeds or fails.
class CertRevoke_Response { public: CertRevoke_Response() { RequestHeader.SetRequestType(CertificateRevoke); RequestHeader.SetLanguageId(GetSystemDefaultLangID()); m_dwDataLen = 0; } DWORD GetDataLen() { return ntohl(m_dwDataLen); };
void SetDataLen(DWORD dwDataLen) { m_dwDataLen = htonl(dwDataLen); };
BYTE *data() { return (BYTE *)(&m_dwDataLen+1); }; RequestHeader RequestHeader; DWORD m_dwDataLen; //Length of the Body
};
//reissue the certificate
//This is an online request. We dont go thru' the e-mail loop etc.
//This request accepts the old SPK and send the new SPK back.
//Then when the authenticate comes across, we do a signonly
//of this cert and deposit the new cert into the system
class CertReissue_Request { public: CertReissue_Request() { RequestHeader.SetRequestType(CertificateReissue); RequestHeader.SetLanguageId(GetSystemDefaultLangID()); memset (m_szSPK,0,sizeof(m_szSPK)); memset (m_LName,0,sizeof(m_LName)); memset (m_FName,0,sizeof(m_FName)); memset (m_Phone,0,sizeof(m_Phone)); memset (m_FAX,0,sizeof(m_FAX)); memset (m_EMail,0,sizeof(m_EMail)); memset (m_ReasonCode,0,sizeof(m_ReasonCode)); m_dwDataLen = 0; }; DWORD GetDataLen() { return ntohl(m_dwDataLen); };
void SetDataLen(DWORD dwDataLen) { m_dwDataLen = htonl(dwDataLen); };
void SetSPK (PBYTE pbSPK, DWORD dwSPKLen ) { memcpy ( m_szSPK, pbSPK, dwSPKLen ); };
LPTSTR GetSPK () { return ( (LPTSTR) m_szSPK ); };
void SetLName ( PBYTE pbLName, DWORD dwLNameLen ) { memcpy ( m_LName, pbLName, dwLNameLen ); }; LPTSTR GetLName () { return ((LPTSTR)m_LName); };
void SetFName ( PBYTE pbFName, DWORD dwFNameLen ) { memcpy ( m_FName, pbFName, dwFNameLen ); }; LPTSTR GetFName () { return ((LPTSTR)m_FName); };
void SetPhone ( PBYTE pbPhone, DWORD dwPhoneLen ) { memcpy ( m_Phone, pbPhone, dwPhoneLen ); }; LPTSTR GetPhone () { return ((LPTSTR)m_Phone); };
void SetFax ( PBYTE pbFAX, DWORD dwFAXLen ) { memcpy ( m_FAX, pbFAX, dwFAXLen ); }; LPTSTR GetFax () { return ((LPTSTR)m_FAX); };
void SetEMail ( PBYTE pbEMail, DWORD dwEMailLen ) { memcpy ( m_EMail, pbEMail, dwEMailLen); }; LPTSTR GetEMail () { return ((LPTSTR)m_EMail); };
void SetReasonCode( PBYTE pbReasonCode, DWORD dwReasonCodeLen ) { memcpy ( m_ReasonCode, pbReasonCode, dwReasonCodeLen ); }; LPTSTR GetReasonCode () { return ((LPTSTR)m_ReasonCode); }; BYTE *data() { return (BYTE *)(&m_dwDataLen+1); }; RequestHeader RequestHeader; //Request Header
TCHAR m_szSPK[LSSPK_LEN]; //SPK
TCHAR m_LName[CA_NAME_LEN+1]; //LName of the reissuer
TCHAR m_FName[CA_NAME_LEN+1]; //FName of the reissuer
TCHAR m_Phone[CA_PHONE_LEN+1]; //phone
TCHAR m_FAX[CA_FAX_LEN+1]; //FAX
TCHAR m_EMail[CA_EMAIL_LEN+1]; //email - optional of the reissuer
TCHAR m_ReasonCode[CA_REVOKE_REASONCODE_LEN+1]; //reason for reissue
DWORD m_dwDataLen; //Length of the Body
//Variable portion of this request
//no variable portion here
};
class CertReissue_Response { public: CertReissue_Response() { RequestHeader.SetRequestType(CertificateReissue); RequestHeader.SetLanguageId(GetSystemDefaultLangID()); memset ( m_szSPK,0,sizeof(m_szSPK)); m_dwDataLen = 0; }; DWORD GetDataLen() { return ntohl(m_dwDataLen); };
void SetDataLen(DWORD dwDataLen) { m_dwDataLen = htonl(dwDataLen); };
void SetRegRequestId ( PBYTE pbRegRequestId, DWORD dwRegRequestIdLen ) { if( pbRegRequestId != NULL ) { memcpy ( m_szRegRequestId, pbRegRequestId, dwRegRequestIdLen ); } };
LPTSTR GetRegRequestId ( ) { return ((LPTSTR)m_szRegRequestId); };
void SetSPK (PBYTE pbSPK, DWORD dwSPKLen ) { memcpy ( m_szSPK, pbSPK, dwSPKLen ); };
LPTSTR GetSPK () { return ( (LPTSTR) m_szSPK ); };
BYTE *data() { return (BYTE *)(&m_dwDataLen+1); }; RequestHeader RequestHeader; TCHAR m_szRegRequestId[REQUEST_ID_LEN]; //Registration Request Id
TCHAR m_szSPK[LSSPK_LEN]; //new SPK
DWORD m_dwDataLen; //Length of the Body
//Variable Portion of the response
//no variable portion here
};
/*
* NewLicense KeyPack Requests */ class ReissueLKP_Request { public: ReissueLKP_Request() { RequestHeader.SetLanguageId(GetSystemDefaultLangID()); RequestHeader.SetRequestType(ReissueLicenseRequest); memset (m_szSPK,0,sizeof(m_szSPK)); }; DWORD GetDataLen() { return ntohl(m_dwDataLen); };
void SetDataLen(DWORD dwDataLen) { m_dwDataLen = htonl(dwDataLen); }; void SetSPK (PBYTE pbSPK, DWORD dwSPKLen ) { memcpy ( m_szSPK, pbSPK, dwSPKLen ); };
LPTSTR GetSPK () { return ( (LPTSTR) m_szSPK ); }; void SetCertBlobLen (DWORD dwCertBlobLen) { m_dwCertBlobLen = htonl(dwCertBlobLen); };
DWORD GetCertBlobLen () { return (ntohl(m_dwCertBlobLen)); };
BYTE *data() { return (BYTE *)(&m_dwDataLen+1); }; RequestHeader RequestHeader; TCHAR m_szSPK[LSSPK_LEN]; //SPK
DWORD m_dwCertBlobLen; //certificate length
DWORD m_dwDataLen; //Length of the Body
//Variable portion of the request
//1.Cert Blob
};
class ReissueLKP_Response { public: ReissueLKP_Response() { RequestHeader.SetLanguageId(GetSystemDefaultLangID()); RequestHeader.SetRequestType(ReissueLicenseRequest);
} DWORD GetDataLen() { return ntohl(m_dwDataLen); };
void SetDataLen(DWORD dwDataLen) { m_dwDataLen = htonl(dwDataLen); }; void SetLKPLength(DWORD dwLKPLen) { m_dwLKPLen = htonl(dwLKPLen); };
DWORD GetLKPLength() { return ( ntohl(m_dwLKPLen)); };
BYTE *data() { return (BYTE *)(&m_dwDataLen+1); }; RequestHeader RequestHeader; DWORD m_dwLKPLen; DWORD m_dwDataLen; //Length of the Body
//Variable part of the request
//1. Last LKP issued
};
class NewLKP_Request { public: NewLKP_Request () { RequestHeader.SetLanguageId(GetSystemDefaultLangID()); RequestHeader.SetRequestType(NewLicenseRequest); memset (m_szSPK,0,sizeof(m_szSPK)); m_dwRetailSPKCount = 0; m_dwCertBlobLen = 0; m_dwNewLKPRequestLen = 0;
};
~NewLKP_Request () {};
void SetCertBlobLen ( DWORD dwCertBlobLen ) { m_dwCertBlobLen = htonl(dwCertBlobLen); };
DWORD GetCertBlobLen ( ) { return( ntohl(m_dwCertBlobLen)); };
void SetNewLKPRequestLen ( DWORD dwNewLKPRequestLen ) { m_dwNewLKPRequestLen = htonl(dwNewLKPRequestLen); };
DWORD GetNewLKPRequestLen ( ) { return( ntohl(m_dwNewLKPRequestLen )); };
DWORD GetDataLen() { return ntohl(m_dwDataLen); };
void SetDataLen(DWORD dwDataLen) { m_dwDataLen = htonl(dwDataLen); }; void SetSPK (PBYTE pbSPK, DWORD dwSPKLen ) { memcpy ( m_szSPK, pbSPK, dwSPKLen ); };
LPTSTR GetSPK () { return ( (LPTSTR) m_szSPK ); };
void SetRetailSPKCount (DWORD dwRetailSPKCount) { assert(dwRetailSPKCount <= MAX_RETAILSPKCOUNT ); m_dwRetailSPKCount = htonl(dwRetailSPKCount); };
DWORD GetRetailSPKCount() { return ntohl(m_dwRetailSPKCount); };
BYTE *data() { return (BYTE *)(&m_dwDataLen+1); };
RequestHeader RequestHeader; DWORD m_dwCertBlobLen; DWORD m_dwNewLKPRequestLen; DWORD m_dwRetailSPKCount; TCHAR m_szSPK[LSSPK_LEN]; //SPK
DWORD m_dwDataLen; //Length of the Body
//Variable length data here
//1.Cert Blob
//2. New LKP Request Blob
//3. As many 25 character Retail SPK items as specified in count above
};
class NewLKP_Response { public: NewLKP_Response() { RequestHeader.SetRequestType(NewLicenseRequest); RequestHeader.SetLanguageId(GetSystemDefaultLangID()); memset ( m_szRegRequestId,0,sizeof(m_szRegRequestId)); memset ( m_szLicenseReqId,0,sizeof(m_szLicenseReqId)); memset ( m_dwRetailSPKStatus, 0, sizeof(m_dwRetailSPKStatus)); }; void SetLKPLength(DWORD dwLKPLen) { m_dwLKPLen = htonl(dwLKPLen); };
DWORD GetLKPLength() { return ( ntohl(m_dwLKPLen)); };
void SetRegRequestId (PBYTE pbRegReqId, DWORD dwRegReqIdLen) { if( pbRegReqId != NULL ) { memcpy (m_szRegRequestId, pbRegReqId, dwRegReqIdLen ); } };
LPTSTR GetRegRequestId () { return ((LPTSTR)m_szRegRequestId); };
void SetLicenseReqId (PBYTE pbLicenseReqId, DWORD dwLicenseReqIdLen) { memcpy (m_szLicenseReqId, pbLicenseReqId, dwLicenseReqIdLen); };
LPTSTR GetLicenseReqId () { return ((LPTSTR)m_szLicenseReqId); }; DWORD GetDataLen() { return ntohl(m_dwDataLen); };
void SetDataLen(DWORD dwDataLen) { m_dwDataLen = htonl(dwDataLen); }; void SetRetailSPKStatus ( DWORD dwIndex, TCHAR dwStatus ) { assert ( dwIndex < MAX_RETAILSPKCOUNT ); m_dwRetailSPKStatus[dwIndex] = dwStatus; }; TCHAR GetRetailSPKStatus(DWORD dwIndex ) { assert ( dwIndex < MAX_RETAILSPKCOUNT ); return m_dwRetailSPKStatus[dwIndex]; };
BYTE *data() { return (BYTE *)(&m_dwDataLen+1); };
RequestHeader RequestHeader; DWORD m_dwLKPLen; TCHAR m_szRegRequestId[REQUEST_ID_LEN]; TCHAR m_szLicenseReqId[REQUEST_ID_LEN]; TCHAR m_dwRetailSPKStatus[MAX_RETAILSPKCOUNT]; DWORD m_dwDataLen; //Length of the Body
//LKP here
};
class NewLKP_AckRequest { public: NewLKP_AckRequest() { RequestHeader.SetRequestType(LKPDownloadAckRequest); RequestHeader.SetLanguageId(GetSystemDefaultLangID()); memset ( m_szRegRequestId,0,sizeof(m_szRegRequestId)); memset ( m_szLicenseReqId,0,sizeof(m_szLicenseReqId)); m_bAckType = 0; m_dwDataLen = 0; };
void SetRegRequestId (PBYTE pbReqId, DWORD dwReqIdLen) { if(pbReqId != NULL) { memcpy ( m_szRegRequestId, pbReqId, dwReqIdLen ); } };
LPTSTR GetRegRequestId () { return ( (LPTSTR)m_szRegRequestId); };
void SetAckType ( BYTE bAckType ) { m_bAckType = bAckType; };
BYTE GetAckType () { return m_bAckType; };
void SetLicenseReqId (PBYTE pbLicenseReqId, DWORD dwLicenseReqIdLen) { memcpy (m_szLicenseReqId, pbLicenseReqId, dwLicenseReqIdLen); };
LPTSTR GetLicenseReqId () { return ((LPTSTR)m_szLicenseReqId); };
DWORD GetDataLen() { return ntohl(m_dwDataLen); };
void SetDataLen(DWORD dwDataLen) { m_dwDataLen = htonl(dwDataLen); }; BYTE *data() { return (BYTE *)(&m_dwDataLen+1); };
RequestHeader RequestHeader; TCHAR m_szRegRequestId[REQUEST_ID_LEN]; TCHAR m_szLicenseReqId[REQUEST_ID_LEN]; BYTE m_bAckType; //1 = success 2 = fail
DWORD m_dwDataLen; //Length of the Body
};
class NewLKP_AckResponse { public: NewLKP_AckResponse() { RequestHeader.SetLanguageId(GetSystemDefaultLangID()); RequestHeader.SetRequestType(LKPDownloadAckRequest); m_dwDataLen = 0; }
DWORD GetDataLen() { return ntohl(m_dwDataLen); };
void SetDataLen(DWORD dwDataLen) { m_dwDataLen = htonl(dwDataLen); }; BYTE *data() { return (BYTE *)(&m_dwDataLen+1); };
RequestHeader RequestHeader; DWORD m_dwDataLen; //Length of the Body
//nothing here
};
/*
* Certificate Acknowledgement Request / Interactions */
class Certificate_AckRequest { public: Certificate_AckRequest () { RequestHeader.SetRequestType(CertificateDownloadAck); RequestHeader.SetLanguageId(GetSystemDefaultLangID()); memset (m_szRegRequestId,0,sizeof(m_szRegRequestId)); m_bAckType = 0; m_dwDataLen = 0; };
~Certificate_AckRequest () {}; void SetRegRequestId (PBYTE pbReqId, DWORD dwReqIdLen) { if(pbReqId != NULL) { memcpy ( m_szRegRequestId, pbReqId, dwReqIdLen ); } };
LPTSTR GetRegRequestId () { return ( (LPTSTR)m_szRegRequestId); };
void SetAckType ( BYTE bAckType ) { m_bAckType = bAckType; };
BYTE GetAckType () { return m_bAckType; };
DWORD GetDataLen() { return ntohl(m_dwDataLen); };
void SetDataLen(DWORD dwDataLen) { m_dwDataLen = htonl(dwDataLen); }; BYTE *data() { return (BYTE *)(&m_dwDataLen+1); };
RequestHeader RequestHeader; TCHAR m_szRegRequestId[REQUEST_ID_LEN]; BYTE m_bAckType; //1 = success 2 = fail
DWORD m_dwDataLen; //Length of the Body
//no variable data
};
class Certificate_AckResponse { public: Certificate_AckResponse () { RequestHeader.SetRequestType(CertificateDownloadAck); RequestHeader.SetLanguageId(GetSystemDefaultLangID()); m_dwDataLen = 0; };
~Certificate_AckResponse () {};
DWORD GetDataLen() { return ntohl(m_dwDataLen); };
void SetDataLen(DWORD dwDataLen) { m_dwDataLen = htonl(dwDataLen); }; BYTE *data() { return (BYTE *)(&m_dwDataLen+1); };
RequestHeader RequestHeader; DWORD m_dwDataLen; //Length of the Body
//no variable data
};
//Request for sendind the New CErt
class NewCert_Request {
public: NewCert_Request () { RequestHeader.SetRequestType(CertificateRequest); RequestHeader.SetLanguageId(GetSystemDefaultLangID()); };
~NewCert_Request () {};
DWORD GetExchgPKCS10Length() { return ( ntohl(m_dwExchPKCS10Length) ); };
void SetExchgPKCS10Length(DWORD dwExchPKCS10Length) { m_dwExchPKCS10Length = htonl(dwExchPKCS10Length); };
DWORD GetSignPKCS10Length() { return ( ntohl(m_dwSignPKCS10Length) ); };
void SetSignPKCS10Length(DWORD dwSignPKCS10Length) { m_dwSignPKCS10Length = htonl(dwSignPKCS10Length); };
DWORD GetDataLen() { return ntohl(m_dwDataLen); };
void SetDataLen(DWORD dwDataLen) { m_dwDataLen = htonl(dwDataLen); };
void SetServerName(TCHAR * tc) { _stprintf(m_szLServerName, _T("%.*s"), MAX_COMPUTERNAME_LENGTH + 4, tc); }
TCHAR * GetServerName(void) { return m_szLServerName; } BYTE *data() { return (BYTE *)(&m_dwDataLen+1); };
RequestHeader RequestHeader; DWORD m_dwExchPKCS10Length; DWORD m_dwSignPKCS10Length; CERTCUSTINFO stCertInfo; TCHAR m_szLServerName[MAX_COMPUTERNAME_LENGTH + 5];
DWORD m_dwDataLen; //Length of the Body
//Variable data goes here
//First Exchg PKCS10
//Second Sign PKCS10
};
//New Certificate request response structure
class NewCert_Response { public: NewCert_Response () { RequestHeader.SetRequestType(CertificateRequest); RequestHeader.SetLanguageId(GetSystemDefaultLangID()); memset ( m_szSPK, 0, sizeof(m_szSPK )); memset ( m_szRegRequestId, 0, sizeof(m_szRegRequestId) ); };
~NewCert_Response () {};
DWORD GetExchgPKCS7Length() { return ( ntohl(m_dwExchPKCS7Length) ); };
void SetExchgPKCS7Length(DWORD dwExchPKCS7Length) { m_dwExchPKCS7Length = htonl(dwExchPKCS7Length); };
DWORD GetSignPKCS7Length() { return ( ntohl(m_dwSignPKCS7Length) ); };
void SetSignPKCS10Length(DWORD dwSignPKCS7Length) { m_dwSignPKCS7Length = htonl(dwSignPKCS7Length); }; DWORD GetRootCertLength() { return ( ntohl(m_dwRootCertLength) ); };
void SetRootCertLength(DWORD dwRootCertLength) { m_dwRootCertLength = htonl(dwRootCertLength); };
void SetRegRequestId ( PBYTE pbRegRequestId, DWORD dwRegRequestIdLen ) { if( pbRegRequestId != NULL ) { memcpy ( m_szRegRequestId, pbRegRequestId, dwRegRequestIdLen ); } };
LPTSTR GetRegRequestId ( ) { return ((LPTSTR)m_szRegRequestId); };
void SetSPK ( PBYTE pbSPK, DWORD dwSPKLen) { memcpy ( m_szSPK, pbSPK, dwSPKLen ); };
LPTSTR GetSPK ( ) { return ((LPTSTR)m_szSPK); }; DWORD GetDataLen() { return ntohl(m_dwDataLen); };
void SetDataLen(DWORD dwDataLen) { m_dwDataLen = htonl(dwDataLen); }; BYTE *data() { return (BYTE *)(&m_dwDataLen+1); };
RequestHeader RequestHeader; DWORD m_dwExchPKCS7Length; DWORD m_dwSignPKCS7Length; DWORD m_dwRootCertLength; TCHAR m_szRegRequestId[REQUEST_ID_LEN]; TCHAR m_szSPK[LSSPK_LEN]; DWORD m_dwDataLen; //Length of the Body
//variable data part
//1.Exchange PKCS7
//2.Signature PKCS7
//3.Root Cert
};
//Certificate sign only request structure
class CertificateSignOnly_Request { public: CertificateSignOnly_Request() { RequestHeader.SetRequestType(CertificateSignOnly); memset (m_szSPK,0,sizeof(m_szSPK)); };
~CertificateSignOnly_Request(){};
DWORD GetExchgPKCS10Length() { return ( ntohl(m_dwExchPKCS10Length) ); };
void SetExchgPKCS10Length(DWORD dwExchPKCS10Length) { m_dwExchPKCS10Length = htonl(dwExchPKCS10Length); };
DWORD GetSignPKCS10Length() { return ( ntohl(m_dwSignPKCS10Length) ); };
void SetSignPKCS10Length(DWORD dwSignPKCS10Length) { m_dwSignPKCS10Length = htonl(dwSignPKCS10Length); };
DWORD GetDataLen() { return ntohl(m_dwDataLen); };
void SetDataLen(DWORD dwDataLen) { m_dwDataLen = htonl(dwDataLen); };
void SetSPK (PBYTE pbSPK, DWORD dwSPKLen ) { memcpy ( m_szSPK, pbSPK, dwSPKLen ); };
LPTSTR GetSPK () { return ( (LPTSTR) m_szSPK ); }; void SetServerName(TCHAR * tc) { _stprintf(m_szLServerName, _T("%.*s"), MAX_COMPUTERNAME_LENGTH + 4, tc); }
TCHAR * GetServerName(void) { return m_szLServerName; }
BYTE *data() { return (BYTE *)(&m_dwDataLen+1); };
RequestHeader RequestHeader; DWORD m_dwExchPKCS10Length; DWORD m_dwSignPKCS10Length; TCHAR m_szSPK[LSSPK_LEN]; //SPK
TCHAR m_szLServerName[MAX_COMPUTERNAME_LENGTH + 5]; DWORD m_dwDataLen; //Length of the Body
//variable data goes here
//First Exchg PKCS10
//Second Sign PKCS10
}; //Certificate sign only response structure
class CertificateSignOnly_Response { public: CertificateSignOnly_Response() { memset(m_szRegRequestId,0,sizeof(m_szRegRequestId)); RequestHeader.SetRequestType(CertificateSignOnly); };
~CertificateSignOnly_Response(){}; DWORD GetExchgPKCS7Length() { return ( ntohl(m_dwExchPKCS7Length) ); };
void SetExchgPKCS7Length(DWORD dwExchPKCS7Length) { m_dwExchPKCS7Length = htonl(dwExchPKCS7Length); };
DWORD GetSignPKCS7Length() { return ( ntohl(m_dwSignPKCS7Length) ); };
void SetSignPKCS7Length(DWORD dwSignPKCS7Length) { m_dwSignPKCS7Length = htonl(dwSignPKCS7Length); }; DWORD GetRootCertLength() { return ( ntohl(m_dwRootCertLength) ); };
void SetRootCertLength(DWORD dwRootCertLength) { m_dwRootCertLength = htonl(dwRootCertLength); };
void SetRegRequestId ( PBYTE pbRegRequestId, DWORD dwRegRequestIdLen ) { if( pbRegRequestId != NULL ) { memcpy ( m_szRegRequestId, pbRegRequestId, dwRegRequestIdLen ); } };
LPTSTR GetRegRequestId ( ) { return ((LPTSTR)m_szRegRequestId); }; DWORD GetDataLen() { return ntohl(m_dwDataLen); };
void SetDataLen(DWORD dwDataLen) { m_dwDataLen = htonl(dwDataLen); }; BYTE *data() { return (BYTE *)(&m_dwDataLen+1); };
RequestHeader RequestHeader; DWORD m_dwExchPKCS7Length; DWORD m_dwSignPKCS7Length; DWORD m_dwRootCertLength; TCHAR m_szRegRequestId[REQUEST_ID_LEN]; DWORD m_dwDataLen; //Length of the Body
//Variable data
//first ExchgPKCS7
//Second SignPKCS7
//third Root CErt
};
class CertificateDownload_Request { public: CertificateDownload_Request () { RequestHeader.SetRequestType(CertificateDownload); RequestHeader.SetLanguageId(GetSystemDefaultLangID()); m_dwDataLen = 0; memset ( m_szPIN,0,sizeof(m_szPIN)); };
~CertificateDownload_Request () {}; void SetPIN ( PBYTE pbPIN, DWORD dwPINLen ) { if( pbPIN != NULL ) { memcpy ( m_szPIN, pbPIN, dwPINLen ); } };
LPTSTR GetPIN ( ) { return ((LPTSTR)m_szPIN); };
DWORD GetDataLen() { return ntohl(m_dwDataLen); };
void SetDataLen(DWORD dwDataLen) { m_dwDataLen = htonl(dwDataLen); }; BYTE *data() { return (BYTE *)(&m_dwDataLen+1); };
RequestHeader RequestHeader; TCHAR m_szPIN[PIN_LEN]; DWORD m_dwDataLen; //Length of the Body
//no variable data part!!
};
class CertificateDownload_Response { public: CertificateDownload_Response () { RequestHeader.SetRequestType(CertificateDownload); RequestHeader.SetLanguageId(GetSystemDefaultLangID()); memset(m_szRegRequestId,0,sizeof(m_szRegRequestId)); memset(m_szSPK,0,sizeof(m_szSPK)); };
~CertificateDownload_Response () {};
DWORD GetExchgPKCS7Length() { return ( ntohl(m_dwExchPKCS7Length) ); };
void SetExchgPKCS7Length(DWORD dwExchPKCS7Length) { m_dwExchPKCS7Length = htonl(dwExchPKCS7Length); };
DWORD GetSignPKCS7Length() { return ( ntohl(m_dwSignPKCS7Length) ); };
void SetSignPKCS10Length(DWORD dwSignPKCS7Length) { m_dwSignPKCS7Length = htonl(dwSignPKCS7Length); }; DWORD GetRootCertLength() { return ( ntohl(m_dwRootCertLength) ); };
void SetRootCertLength(DWORD dwRootCertLength) { m_dwRootCertLength = htonl(dwRootCertLength); };
void SetRegRequestId ( PBYTE pbRegRequestId, DWORD dwRegRequestIdLen ) { if( pbRegRequestId != NULL ) { memcpy ( m_szRegRequestId, pbRegRequestId, dwRegRequestIdLen ); } };
LPTSTR GetRegRequestId ( ) { return ((LPTSTR)m_szRegRequestId); };
void SetSPK ( PBYTE pbSPK, DWORD dwSPKLen) { if(pbSPK != NULL) { memcpy ( m_szSPK, pbSPK, dwSPKLen ); } };
LPTSTR GetSPK ( ) { return ((LPTSTR)m_szSPK); }; DWORD GetDataLen() { return ntohl(m_dwDataLen); };
void SetDataLen(DWORD dwDataLen) { m_dwDataLen = htonl(dwDataLen); }; BYTE *data() { return (BYTE *)(&m_dwDataLen+1); };
RequestHeader RequestHeader; DWORD m_dwExchPKCS7Length; DWORD m_dwSignPKCS7Length; DWORD m_dwRootCertLength; TCHAR m_szRegRequestId[REQUEST_ID_LEN]; TCHAR m_szSPK[LSSPK_LEN]; DWORD m_dwDataLen; //Length of the Body
//variable data part
//1.Exchange PKCS7
//2.Signature PKCS7
//3.Root Cert
};
//ping request and response class
class Ping_Request { public: Ping_Request () { RequestHeader.SetRequestType(PingRequest); RequestHeader.SetLanguageId(GetSystemDefaultLangID()); m_dwDataLen = 0; _tcscpy ( tszPingReqData, _TEXT("Houston we have a problem")); };
~Ping_Request () {};
DWORD GetDataLen() { return ntohl(m_dwDataLen); };
void SetDataLen(DWORD dwDataLen) { m_dwDataLen = htonl(dwDataLen); }; BYTE *data() { return (BYTE *)(&m_dwDataLen+1); };
RequestHeader RequestHeader; TCHAR tszPingReqData[32]; //32 characters
DWORD m_dwDataLen; //Length of the Body
};
class Ping_Response { public: Ping_Response() { RequestHeader.SetRequestType(PingRequest); RequestHeader.SetLanguageId(GetSystemDefaultLangID()); _tcscpy ( tszPingResponse, _TEXT("Beam'er up Scottie!")); }
~Ping_Response() {}; DWORD GetDataLen() { return ntohl(m_dwDataLen); };
void SetDataLen(DWORD dwDataLen) { m_dwDataLen = htonl(dwDataLen); }; BYTE *data() { return (BYTE *)(&m_dwDataLen+1); };
RequestHeader RequestHeader; TCHAR tszPingResponse[32]; DWORD m_dwDataLen; //Length of the Body
};
//stream header declarations
#define BLOCK_TYPE_NAME 1
#define BLOCK_TYPE_VALUE 2
#define BLOCK_TYPE_PROP_PAIR 3
typedef struct { long m_wType; long m_lNameSize; long m_lValueSize;
void SetType (long lType) {m_wType = htonl(lType);}; long GetType (){return ntohl(m_wType);}; void SetNameSize(long lNameSize) {m_lNameSize = htonl(lNameSize);}; long GetNameSize(){return (ntohl(m_lNameSize));}; void SetValueSize(long lValueSize){m_lValueSize = htonl(lValueSize);}; long GetValueSize(){return (ntohl(m_lValueSize));}; } BLOCK_HDR;
#define STREAM_HDR_TITLE _TEXT("ICB") //header title
#define STREAM_HDR_TYPE 1 //header type
typedef struct { TCHAR m_szTitle[4]; //will be ICB for now
DWORD m_wHeader; //reserved for now will be implemented later
//set it to 0x0000
DWORD m_itemCount; //number of items in the stream!
void SetHeader ( DWORD wHeader ) {m_wHeader = htonl(wHeader);}; DWORD GetHeader (){return ntohl(m_wHeader);}; void SetItemCount ( DWORD ItemCount ) { m_itemCount = htonl(ItemCount);}; DWORD GetItemCount (){return ntohl(m_itemCount);};
} STREAM_HDR;
#endif
|