windows-nt/Source/XPSP1/NT/ds/security/cryptoapi/pkitrust/mssip32/sipobjcb.hxx
2020-09-26 16:20:57 +08:00

93 lines
3 KiB
C++

//+-------------------------------------------------------------------------
//
// Microsoft Windows
//
// Copyright (C) Microsoft Corporation, 1996 - 1999
//
// File: sipobjcb.hxx (CAB)
//
// Contents: Microsoft SIP Provider
//
// History: 14-Feb-1997 pberkman created
//
//--------------------------------------------------------------------------
#ifndef SIPOBJCB_HXX
#define SIPOBJCB_HXX
#include "sipobj.hxx"
extern "C"
{
# include "cabinet.h"
};
#define RESERVE_LEN_ALIGN(Len) ((Len + 3) & ~3) // all abReserve is alligned @ 4
#define RESERVE_CNT_HDR_LEN (sizeof(USHORT) * 2) // cbJund & cbSig
#define RESERVE_CAB_FLAG 0x00000001
#define VERIFY_CAB_FLAG 0x00000002
typedef struct _CAB_HDR_PARA
{
CFHEADER cfheader;
CFRESERVE cfres;
USHORT cbcfres; // 0 or sizeof(CFRESERVE)
BYTE *pbReserve;
BYTE *pbStrings;
DWORD cbStrings;
USHORT cbJunk;
USHORT cbSig;
CABSignatureStruct_ *pCabSigStruct;
DWORD cbTotalHdr;
} CAB_HDR_PARA;
typedef struct _CAB_PARA
{
DWORD dwFlags;
CAB_HDR_PARA Hdr;
} CAB_PARA, *PCAB_PARA;
class SIPObjectCAB_ : public SIPObject_
{
public:
SIPObjectCAB_(DWORD id);
virtual ~SIPObjectCAB_(void);
BOOL CreateIndirectData(SIP_SUBJECTINFO *pSI,DWORD *pdwDLen,
SIP_INDIRECT_DATA *psData);
virtual BOOL RemoveSignedDataMsg(SIP_SUBJECTINFO *pSI,DWORD dwIdx);
virtual char *GetDataObjectID(void) { return(SPC_CAB_DATA_OBJID); }
virtual char *GetDataOIDHint(void) { return((char *)SPC_CAB_DATA_STRUCT); }
protected:
virtual BOOL PutMessageInFile(SIP_SUBJECTINFO *pSI,WIN_CERTIFICATE *pWinCert,
DWORD *pdwIndex);
virtual BOOL GetMessageFromFile(SIP_SUBJECTINFO *pSI,WIN_CERTIFICATE *pWinCert,
DWORD dwIndex,DWORD *pcbCert);
virtual BOOL GetDigestStream(DIGEST_DATA *pDigestData,
DIGEST_FUNCTION pfnCallBack, DWORD dwFlags);
private:
CAB_PARA Para;
BOOL fUseV1Sig;
BOOL ReadHeader(void);
BOOL ReadSignedData(BYTE *pbRet);
BOOL WriteSignedData(BYTE *pbSig, DWORD cbSig);
BOOL WriteSignedDataV1(BYTE *pbSignedData, DWORD cbSignedData);
BOOL WriteHeader(void);
void FreeHeader(void);
BOOL RemoveCertificate(DWORD Index);
BOOL ShiftFileBytes(LONG lbShift); // this may be needed in SIPObject_ (base)
BOOL ReserveSignedData(DWORD cbSignedData);
BOOL DigestHeader(DIGEST_FUNCTION pfnDigestData, DIGEST_HANDLE hDigestData);
void ChecksumHeader(void);
};
#endif // SIPOBJCB_HXX