1 // Licensed under the Apache License, Version 2.0
2 // <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
3 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
4 // All files in the project carrying such notice may not be copied, modified, or distributed
5 // except according to those terms.
6 //! Microsoft SIP Provider Prototypes and Definitions
7 use shared
::guiddef
::GUID
;
8 use shared
::minwindef
::{BOOL, BYTE, DWORD, LPVOID}
;
9 use um
::mscat
::{CRYPTCATMEMBER, CRYPTCATSTORE}
;
11 CRYPT_ALGORITHM_IDENTIFIER
, CRYPT_ATTRIBUTE_TYPE_VALUE
, CRYPT_HASH_BLOB
, HCRYPTPROV
,
13 use um
::winnt
::{HANDLE, LPCWSTR, PWSTR, WCHAR}
;
14 pub type CRYPT_DIGEST_DATA
= CRYPT_HASH_BLOB
;
15 pub const MSSIP_FLAGS_PROHIBIT_RESIZE_ON_CREATE
: DWORD
= 0x00010000;
16 pub const MSSIP_FLAGS_USE_CATALOG
: DWORD
= 0x00020000;
17 pub const MSSIP_FLAGS_MULTI_HASH
: DWORD
= 0x00040000;
18 pub const SPC_INC_PE_RESOURCES_FLAG
: DWORD
= 0x80;
19 pub const SPC_INC_PE_DEBUG_INFO_FLAG
: DWORD
= 0x40;
20 pub const SPC_INC_PE_IMPORT_ADDR_TABLE_FLAG
: DWORD
= 0x20;
21 pub const SPC_EXC_PE_PAGE_HASHES_FLAG
: DWORD
= 0x10;
22 pub const SPC_INC_PE_PAGE_HASHES_FLAG
: DWORD
= 0x100;
23 pub const SPC_DIGEST_GENERATE_FLAG
: DWORD
= 0x200;
24 pub const SPC_DIGEST_SIGN_FLAG
: DWORD
= 0x400;
25 pub const SPC_RELAXED_PE_MARKER_CHECK
: DWORD
= 0x800;
26 pub const SPC_MARKER_CHECK_SKIP_SIP_INDIRECT_DATA_FLAG
: DWORD
= 0x00000001;
27 pub const SPC_MARKER_CHECK_CURRENTLY_SUPPORTED_FLAGS
: DWORD
28 = SPC_MARKER_CHECK_SKIP_SIP_INDIRECT_DATA_FLAG
;
29 pub const MSSIP_ADDINFO_NONE
: DWORD
= 0;
30 pub const MSSIP_ADDINFO_FLAT
: DWORD
= 1;
31 pub const MSSIP_ADDINFO_CATMEMBER
: DWORD
= 2;
32 pub const MSSIP_ADDINFO_BLOB
: DWORD
= 3;
33 pub const MSSIP_ADDINFO_NONMSSIP
: DWORD
= 500;
34 UNION
!{union SIP_SUBJECTINFO_u
{
36 psFlat psFlat_mut
: *mut MS_ADDINFO_FLAT
,
37 psCatMember psCatMember_mut
: *mut MS_ADDINFO_CATALOGMEMBER
,
38 psBlob psBlob_mut
: *mut MS_ADDINFO_BLOB
,
40 STRUCT
!{struct SIP_SUBJECTINFO
{
42 pgSubjectType
: *mut GUID
,
45 pwsDisplayName
: LPCWSTR
,
49 DigestAlgorithm
: CRYPT_ALGORITHM_IDENTIFIER
,
51 dwEncodingType
: DWORD
,
53 fdwCAPISettings
: DWORD
,
54 fdwSecuritySettings
: DWORD
,
60 pub type LPSIP_SUBJECTINFO
= *mut SIP_SUBJECTINFO
;
61 STRUCT
!{struct MS_ADDINFO_FLAT
{
63 pIndirectData
: *mut SIP_INDIRECT_DATA
,
65 pub type PMS_ADDINFO_FLAT
= *mut MS_ADDINFO_FLAT
;
66 STRUCT
!{struct MS_ADDINFO_CATALOGMEMBER
{
68 pStore
: *mut CRYPTCATSTORE
,
69 pMember
: *mut CRYPTCATMEMBER
,
71 pub type PMS_ADDINFO_CATALOGMEMBER
= *mut MS_ADDINFO_CATALOGMEMBER
;
72 STRUCT
!{struct MS_ADDINFO_BLOB
{
75 pbMemObject
: *mut BYTE
,
76 cbMemSignedMsg
: DWORD
,
77 pbMemSignedMsg
: *mut BYTE
,
79 pub type PMS_ADDINFO_BLOB
= *mut MS_ADDINFO_BLOB
;
80 STRUCT
!{struct SIP_CAP_SET_V2
{
86 pub type PSIP_CAP_SET_V2
= *mut SIP_CAP_SET_V2
;
87 UNION
!{union SIP_CAP_SET_V3_u
{
89 dwFlags dwFlags_mut
: DWORD
,
90 dwReserved dwReserved_mut
: DWORD
,
92 STRUCT
!{struct SIP_CAP_SET_V3
{
98 pub type PSIP_CAP_SET_V3
= *mut SIP_CAP_SET_V3
;
99 pub type SIP_CAP_SET
= SIP_CAP_SET_V3
;
100 pub type PSIP_CAP_SET
= PSIP_CAP_SET_V3
;
101 pub const SIP_CAP_SET_VERSION_2
: DWORD
= 2;
102 pub const SIP_CAP_SET_VERSION_3
: DWORD
= 3;
103 pub const SIP_CAP_SET_CUR_VER
: DWORD
= 3;
104 pub const SIP_CAP_FLAG_SEALING
: DWORD
= 0x00000001;
105 STRUCT
!{struct SIP_INDIRECT_DATA
{
106 Data
: CRYPT_ATTRIBUTE_TYPE_VALUE
,
107 DigestAlgorithm
: CRYPT_ALGORITHM_IDENTIFIER
,
108 Digest
: CRYPT_HASH_BLOB
,
110 pub type PSIP_INDIRECT_DATA
= *mut SIP_INDIRECT_DATA
;
112 pub fn CryptSIPGetSignedDataMsg(
113 pSubjectInfo
: *mut SIP_SUBJECTINFO
,
114 pdwEncodingType
: *mut DWORD
,
116 pcbSignedDataMsg
: *mut DWORD
,
117 pbSignedDataMsg
: *mut BYTE
,
120 FN
!{stdcall
pCryptSIPGetSignedDataMsg(
121 pSubjectInfo
: *mut SIP_SUBJECTINFO
,
122 pdwEncodingType
: *mut DWORD
,
124 pcbSignedDataMsg
: *mut DWORD
,
125 pbSignedDataMsg
: *mut BYTE
,
128 pub fn CryptSIPPutSignedDataMsg(
129 pSubjectInfo
: *mut SIP_SUBJECTINFO
,
130 dwEncodingType
: DWORD
,
131 pdwIndex
: *mut DWORD
,
132 cbSignedDataMsg
: DWORD
,
133 pbSignedDataMsg
: *mut BYTE
,
136 FN
!{stdcall
pCryptSIPPutSignedDataMsg(
137 pSubjectInfo
: *mut SIP_SUBJECTINFO
,
138 dwEncodingType
: DWORD
,
139 pdwIndex
: *mut DWORD
,
140 cbSignedDataMsg
: DWORD
,
141 pbSignedDataMsg
: *mut BYTE
,
144 pub fn CryptSIPCreateIndirectData(
145 pSubjectInfo
: *mut SIP_SUBJECTINFO
,
146 pcbIndirectData
: *mut DWORD
,
147 pIndirectData
: *mut SIP_INDIRECT_DATA
,
150 FN
!{stdcall
pCryptSIPCreateIndirectData(
151 pSubjectInfo
: *mut SIP_SUBJECTINFO
,
152 pcbIndirectData
: *mut DWORD
,
153 pIndirectData
: *mut SIP_INDIRECT_DATA
,
156 pub fn CryptSIPVerifyIndirectData(
157 pSubjectInfo
: *mut SIP_SUBJECTINFO
,
158 pIndirectData
: *mut SIP_INDIRECT_DATA
,
161 FN
!{stdcall
pCryptSIPVerifyIndirectData(
162 pSubjectInfo
: *mut SIP_SUBJECTINFO
,
163 pIndirectData
: *mut SIP_INDIRECT_DATA
,
166 pub fn CryptSIPRemoveSignedDataMsg(
167 pSubjectInfo
: *mut SIP_SUBJECTINFO
,
171 FN
!{stdcall
pCryptSIPRemoveSignedDataMsg(
172 pSubjectInfo
: *mut SIP_SUBJECTINFO
,
175 STRUCT
!{struct SIP_DISPATCH_INFO
{
178 pfGet
: pCryptSIPGetSignedDataMsg
,
179 pfPut
: pCryptSIPPutSignedDataMsg
,
180 pfCreate
: pCryptSIPCreateIndirectData
,
181 pfVerify
: pCryptSIPVerifyIndirectData
,
182 pfRemove
: pCryptSIPRemoveSignedDataMsg
,
184 pub type LPSIP_DISPATCH_INFO
= *mut SIP_DISPATCH_INFO
;
185 FN
!{stdcall
pfnIsFileSupported(
187 pgSubject
: *mut GUID
,
189 FN
!{stdcall
pfnIsFileSupportedName(
190 pwszFileName
: *mut WCHAR
,
191 pgSubject
: *mut GUID
,
193 STRUCT
!{struct SIP_ADD_NEWPROVIDER
{
195 pgSubject
: *mut GUID
,
196 pwszDLLFileName
: *mut WCHAR
,
197 pwszMagicNumber
: *mut WCHAR
,
198 pwszIsFunctionName
: *mut WCHAR
,
199 pwszGetFuncName
: *mut WCHAR
,
200 pwszPutFuncName
: *mut WCHAR
,
201 pwszCreateFuncName
: *mut WCHAR
,
202 pwszVerifyFuncName
: *mut WCHAR
,
203 pwszRemoveFuncName
: *mut WCHAR
,
204 pwszIsFunctionNameFmt2
: *mut WCHAR
,
205 pwszGetCapFuncName
: PWSTR
,
207 pub type PSIP_ADD_NEWPROVIDER
= *mut SIP_ADD_NEWPROVIDER
;
208 pub const SIP_MAX_MAGIC_NUMBER
: DWORD
= 4;
211 pgSubject
: *const GUID
,
213 pSipDispatch
: *mut SIP_DISPATCH_INFO
,
215 pub fn CryptSIPRetrieveSubjectGuid(
218 pgSubject
: *mut GUID
,
220 pub fn CryptSIPRetrieveSubjectGuidForCatalogFile(
223 pgSubject
: *mut GUID
,
225 pub fn CryptSIPAddProvider(
226 psNewProv
: *mut SIP_ADD_NEWPROVIDER
,
228 pub fn CryptSIPRemoveProvider(
231 pub fn CryptSIPGetCaps(
232 pSubjInfo
: *mut SIP_SUBJECTINFO
,
233 pCaps
: *mut SIP_CAP_SET
,
236 FN
!{stdcall
pCryptSIPGetCaps(
237 pSubjInfo
: *mut SIP_SUBJECTINFO
,
238 pCaps
: *mut SIP_CAP_SET
,
241 pub fn CryptSIPGetSealedDigest(
242 pSubjectInfo
: *mut SIP_SUBJECTINFO
,
246 pcbDigest
: *mut DWORD
,
249 FN
!{stdcall
pCryptSIPGetSealedDigest(
250 pSubjectInfo
: *mut SIP_SUBJECTINFO
,
254 pcbDigest
: *mut DWORD
,