1 /**
2  * This file has no copyright assigned and is placed in the Public Domain.
3  * This file is part of the mingw-w64 runtime package.
4  * No warranty is given; refer to the file DISCLAIMER.PD within this package.
5  */
6 #ifndef MSSIP_H
7 #define MSSIP_H
8 
9 #ifdef __cplusplus
10 extern "C" {
11 #endif
12 
13 #pragma pack (8)
14 
15   typedef CRYPT_HASH_BLOB CRYPT_DIGEST_DATA;
16 
17 #define MSSIP_FLAGS_PROHIBIT_RESIZE_ON_CREATE 0x00010000
18 #define MSSIP_FLAGS_USE_CATALOG 0x00020000
19 
20 #define SPC_INC_PE_RESOURCES_FLAG 0x80
21 #define SPC_INC_PE_DEBUG_INFO_FLAG 0x40
22 #define SPC_INC_PE_IMPORT_ADDR_TABLE_FLAG 0x20
23 
24   typedef struct SIP_SUBJECTINFO_ {
25     DWORD cbSize;
26     GUID *pgSubjectType;
27     HANDLE hFile;
28     LPCWSTR pwsFileName;
29     LPCWSTR pwsDisplayName;
30     DWORD dwReserved1;
31     DWORD dwIntVersion;
32     HCRYPTPROV hProv;
33     CRYPT_ALGORITHM_IDENTIFIER DigestAlgorithm;
34     DWORD dwFlags;
35     DWORD dwEncodingType;
36     DWORD dwReserved2;
37     DWORD fdwCAPISettings;
38     DWORD fdwSecuritySettings;
39     DWORD dwIndex;
40     DWORD dwUnionChoice;
41 #define MSSIP_ADDINFO_NONE 0
42 #define MSSIP_ADDINFO_FLAT 1
43 #define MSSIP_ADDINFO_CATMEMBER 2
44 #define MSSIP_ADDINFO_BLOB 3
45 #define MSSIP_ADDINFO_NONMSSIP 500
46     __C89_NAMELESS union {
47       struct MS_ADDINFO_FLAT_ *psFlat;
48       struct MS_ADDINFO_CATALOGMEMBER_ *psCatMember;
49       struct MS_ADDINFO_BLOB_ *psBlob;
50     };
51     LPVOID pClientData;
52   } SIP_SUBJECTINFO,*LPSIP_SUBJECTINFO;
53 
54   typedef struct MS_ADDINFO_FLAT_ {
55     DWORD cbStruct;
56     struct SIP_INDIRECT_DATA_ *pIndirectData;
57   } MS_ADDINFO_FLAT,*PMS_ADDINFO_FLAT;
58 
59   typedef struct MS_ADDINFO_CATALOGMEMBER_ {
60     DWORD cbStruct;
61     struct CRYPTCATSTORE_ *pStore;
62     struct CRYPTCATMEMBER_ *pMember;
63   } MS_ADDINFO_CATALOGMEMBER,*PMS_ADDINFO_CATALOGMEMBER;
64 
65   typedef struct MS_ADDINFO_BLOB_ {
66     DWORD cbStruct;
67     DWORD cbMemObject;
68     BYTE *pbMemObject;
69     DWORD cbMemSignedMsg;
70     BYTE *pbMemSignedMsg;
71   } MS_ADDINFO_BLOB,*PMS_ADDINFO_BLOB;
72 
73   typedef struct SIP_INDIRECT_DATA_ {
74     CRYPT_ATTRIBUTE_TYPE_VALUE Data;
75     CRYPT_ALGORITHM_IDENTIFIER DigestAlgorithm;
76     CRYPT_HASH_BLOB Digest;
77   } SIP_INDIRECT_DATA,*PSIP_INDIRECT_DATA;
78 
79 #pragma pack()
80 
81   extern WINBOOL WINAPI CryptSIPGetSignedDataMsg(SIP_SUBJECTINFO *pSubjectInfo,DWORD *pdwEncodingType,DWORD dwIndex,DWORD *pcbSignedDataMsg,BYTE *pbSignedDataMsg);
82   typedef WINBOOL (WINAPI *pCryptSIPGetSignedDataMsg)(SIP_SUBJECTINFO *pSubjectInfo,DWORD *pdwEncodingType,DWORD dwIndex,DWORD *pcbSignedDataMsg,BYTE *pbSignedDataMsg);
83   extern WINBOOL WINAPI CryptSIPPutSignedDataMsg(SIP_SUBJECTINFO *pSubjectInfo,DWORD dwEncodingType,DWORD *pdwIndex,DWORD cbSignedDataMsg,BYTE *pbSignedDataMsg);
84   typedef WINBOOL (WINAPI *pCryptSIPPutSignedDataMsg)(SIP_SUBJECTINFO *pSubjectInfo,DWORD dwEncodingType,DWORD *pdwIndex,DWORD cbSignedDataMsg,BYTE *pbSignedDataMsg);
85   extern WINBOOL WINAPI CryptSIPCreateIndirectData(SIP_SUBJECTINFO *pSubjectInfo,DWORD *pcbIndirectData,SIP_INDIRECT_DATA *pIndirectData);
86   typedef WINBOOL (WINAPI *pCryptSIPCreateIndirectData)(SIP_SUBJECTINFO *pSubjectInfo,DWORD *pcbIndirectData,SIP_INDIRECT_DATA *pIndirectData);
87   extern WINBOOL WINAPI CryptSIPVerifyIndirectData(SIP_SUBJECTINFO *pSubjectInfo,SIP_INDIRECT_DATA *pIndirectData);
88   typedef WINBOOL (WINAPI *pCryptSIPVerifyIndirectData)(SIP_SUBJECTINFO *pSubjectInfo,SIP_INDIRECT_DATA *pIndirectData);
89   extern WINBOOL WINAPI CryptSIPRemoveSignedDataMsg(SIP_SUBJECTINFO *pSubjectInfo,DWORD dwIndex);
90   typedef WINBOOL (WINAPI *pCryptSIPRemoveSignedDataMsg)(SIP_SUBJECTINFO *pSubjectInfo,DWORD dwIndex);
91 
92 #pragma pack(8)
93 
94   typedef struct SIP_DISPATCH_INFO_ {
95     DWORD cbSize;
96     HANDLE hSIP;
97     pCryptSIPGetSignedDataMsg pfGet;
98     pCryptSIPPutSignedDataMsg pfPut;
99     pCryptSIPCreateIndirectData pfCreate;
100     pCryptSIPVerifyIndirectData pfVerify;
101     pCryptSIPRemoveSignedDataMsg pfRemove;
102   } SIP_DISPATCH_INFO,*LPSIP_DISPATCH_INFO;
103 
104   typedef WINBOOL (WINAPI *pfnIsFileSupported)(HANDLE hFile,GUID *pgSubject);
105   typedef WINBOOL (WINAPI *pfnIsFileSupportedName)(WCHAR *pwszFileName,GUID *pgSubject);
106 
107   typedef struct SIP_ADD_NEWPROVIDER_ {
108     DWORD cbStruct;
109     GUID *pgSubject;
110     WCHAR *pwszDLLFileName;
111     WCHAR *pwszMagicNumber;
112     WCHAR *pwszIsFunctionName;
113     WCHAR *pwszGetFuncName;
114     WCHAR *pwszPutFuncName;
115     WCHAR *pwszCreateFuncName;
116     WCHAR *pwszVerifyFuncName;
117     WCHAR *pwszRemoveFuncName;
118     WCHAR *pwszIsFunctionNameFmt2;
119   } SIP_ADD_NEWPROVIDER,*PSIP_ADD_NEWPROVIDER;
120 
121 #define SIP_MAX_MAGIC_NUMBER 4
122 
123 #pragma pack()
124 
125   extern WINBOOL WINAPI CryptSIPLoad(const GUID *pgSubject,DWORD dwFlags,SIP_DISPATCH_INFO *pSipDispatch);
126   extern WINBOOL WINAPI CryptSIPRetrieveSubjectGuid(LPCWSTR FileName,HANDLE hFileIn,GUID *pgSubject);
127   extern WINBOOL WINAPI CryptSIPRetrieveSubjectGuidForCatalogFile(LPCWSTR FileName,HANDLE hFileIn,GUID *pgSubject);
128   extern WINBOOL WINAPI CryptSIPAddProvider(SIP_ADD_NEWPROVIDER *psNewProv);
129   extern WINBOOL WINAPI CryptSIPRemoveProvider(GUID *pgProv);
130 
131 #ifdef __cplusplus
132 }
133 #endif
134 #endif
135