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 
7 #ifndef _INC_CRYPTXML
8 #define _INC_CRYPTXML
9 
10 #ifdef __cplusplus
11 extern "C" {
12 #endif
13 
14 #ifndef DECLSPEC_IMPORT
15 #ifndef __WIDL__
16 #define DECLSPEC_IMPORT __declspec(dllimport)
17 #else
18 #define DECLSPEC_IMPORT
19 #endif
20 #endif
21 
22 #ifndef CRYPTXMLAPI
23 #define CRYPTXMLAPI DECLSPEC_IMPORT
24 #endif
25 
26 #ifndef __HCRYPTPROV_OR_NCRYPT_KEY_HANDLE_DEFINED__
27 #define __HCRYPTPROV_OR_NCRYPT_KEY_HANDLE_DEFINED__
28 /*Also in wincrypth*/
29 typedef ULONG_PTR HCRYPTPROV_OR_NCRYPT_KEY_HANDLE;
30 #endif /*__HCRYPTPROV_OR_NCRYPT_KEY_HANDLE_DEFINED__*/
31 
32 #ifndef __BCRYPT_KEY_HANDLE_DEFINED__
33 #define __BCRYPT_KEY_HANDLE_DEFINED__
34 /*also in bcrypt.h*/
35 typedef LPVOID BCRYPT_KEY_HANDLE;
36 #endif /*__BCRYPT_KEY_HANDLE_DEFINED__*/
37 
38 typedef HANDLE HCRYPTXML;
39 
40 #if (_WIN32_WINNT >= 0x0601)
41 
42 typedef enum tagCRYPT_XML_CHARSET {
43   CRYPT_XML_CHARSET_AUTO      = 0,
44   CRYPT_XML_CHARSET_UTF8      = 1,
45   CRYPT_XML_CHARSET_UTF16LE   = 2,
46   CRYPT_XML_CHARSET_UTF16BE   = 3
47 } CRYPT_XML_CHARSET;
48 
49 typedef enum tagCRYPT_XML_KEYINFO_SPEC {
50   CRYPT_XML_KEYINFO_SPEC_NONE      = 0,
51   CRYPT_XML_KEYINFO_SPEC_ENCODED   = 1,
52   CRYPT_XML_KEYINFO_SPEC_PARAM     = 2
53 } CRYPT_XML_KEYINFO_SPEC;
54 
55 typedef enum tagCRYPT_XML_PROPERTY_ID {
56   CRYPT_XML_PROPERTY_MAX_HEAP_SIZE        = 1,
57   CRYPT_XML_PROPERTY_SIGNATURE_LOCATION   = 2,
58   CRYPT_XML_PROPERTY_MAX_SIGNATURES       = 3,
59   CRYPT_XML_PROPERTY_DOC_DECLARATION      = 4,
60   CRYPT_XML_PROPERTY_XML_OUTPUT_CHARSET   = 5,
61   CRYPT_XML_PROPERTY_HMAC_OUTPUT_LENGTH   = 6
62 } CRYPT_XML_PROPERTY_ID;
63 
64 typedef struct _CRYPT_XML_BLOB {
65   CRYPT_XML_CHARSET dwCharset;
66   ULONG             cbData;
67   BYTE              *pbData;
68 } CRYPT_XML_BLOB, *PCRYPT_XML_BLOB;
69 
70 #define CRYPT_XML_BLOB_MAX 0x7FFFFFF8
71 
72 typedef struct _CRYPT_XML_ALGORITHM {
73   ULONG          cbSize;
74   LPCWSTR        wszAlgorithm;
75   CRYPT_XML_BLOB Encoded;
76 } CRYPT_XML_ALGORITHM, *PCRYPT_XML_ALGORITHM;
77 
78 typedef struct _CRYPT_XML_ALGORITHM_INFO {
79   DWORD cbSize;
80   WCHAR *wszAlgorithmURI;
81   WCHAR *wszName;
82   DWORD dwGroupId;
83   WCHAR *wszCNGAlgid;
84   WCHAR wszCNGExtraAlgid;
85   DWORD dwSignFlags;
86   DWORD dwVerifyFlags;
87   void  pvPaddingInfo;
88   void  pvExtraInfo;
89 } CRYPT_XML_ALGORITHM_INFO, *PCRYPT_XML_ALGORITHM_INFO;
90 
91 #define CRYPT_XML_GROUP_ID_HASH 1
92 #define CRYPT_XML_GROUP_ID_SIGN 2
93 
94 typedef HRESULT (CALLBACK *PFN_CRYPT_XML_WRITE_CALLBACK)(
95   void *pvCallbackState,
96   BYTE pbData,
97   ULONG cbData
98 );
99 
100 typedef HRESULT ( WINAPI *CryptXmlDllEncodeAlgorithm )(
101   CRYPT_XML_ALGORITHM_INFO *pAlgInfo,
102   CRYPT_XML_CHARSET dwCharset,
103   void *pvCallbackState,
104   PFN_CRYPT_XML_WRITE_CALLBACK pfnWrite
105 );
106 
107 typedef HANDLE CRYPT_XML_DIGEST;
108 
109 typedef HRESULT ( WINAPI *CryptXmlDllCreateDigest )(
110   const CRYPT_XML_ALGORITHM *pDigestMethod,
111   ULONG *pcbSize,
112   CRYPT_XML_DIGEST *phDigest
113 );
114 
115 typedef HRESULT ( WINAPI *CryptXmlDllDigestData )(
116     CRYPT_XML_DIGEST hDigest,
117     BYTE *pbData,
118     ULONG cbDigest
119 );
120 
121 typedef HRESULT ( WINAPI *CryptXmlDllFinalizeDigest )(
122   CRYPT_XML_DIGEST hDigest,
123   BYTE *pbDigest,
124   ULONG cbDigest
125 );
126 
127 typedef HRESULT ( WINAPI *CryptXmlDllCloseDigest )(
128   CRYPT_XML_DIGEST hDigest
129 );
130 
131 typedef HRESULT ( WINAPI *CryptXmlDllSignData )(
132   const CRYPT_XML_ALGORITHM *pSignatureMethod,
133   HCRYPTPROV_OR_NCRYPT_KEY_HANDLE hCryptProvOrNCryptKey,
134   DWORD dwKeySpec,
135   const BYTE *pbInput,
136   ULONG cbInput,
137   BYTE *pbOutput,
138   ULONG cbOutput,
139   ULONG *pcbResult
140 );
141 
142 typedef HRESULT ( WINAPI *CryptXmlDllVerifySignature )(
143   const CRYPT_XML_ALGORITHM *pSignatureMethod,
144   HCRYPTXML_PROV hCryptProv,
145   HCRYPTXML_KEY hKey,
146   const BYTE *pbInput,
147   ULONG cbInput,
148   const BYTE *pbSignature,
149   ULONG cbSignature
150 );
151 
152 typedef HRESULT ( WINAPI *CryptXmlDllCreateKey )(
153   CRYPT_XML_BLOB *pEncoded,
154   const BCRYPT_KEY_HANDLE *phKey
155 );
156 
157 typedef HRESULT ( WINAPI *CryptXmlDllEncodeKeyValue )(
158   NCRYPT_KEY_HANDLE hKey,
159   CRYPT_XML_CHARSET dwCharset,
160   void *pvCallbackState,
161   PFN_CRYPT_XML_WRITE_CALLBACK pfnWrite
162 );
163 
164 typedef struct _CRYPT_XML_CRYPTOGRAPHIC_INTERFACE {
165   ULONG                       cbSize;
166   CryptXmlDllEncodeAlgorithm  fpCryptXmlEncodeAlgorithm;
167   CryptXmlDllCreateDigest     fpCryptXmlCreateDigest;
168   CryptXmlDllDigestData       fpCryptXmlDigestData;
169   CryptXmlDllFinalizeDigest   fpCryptXmlFinalizeDigest;
170   CryptXmlDllCloseDigest      fpCryptXmlCloseDigest;
171   CryptXmlDllSignData         fpCryptXmlSignData;
172   CryptXmlDllVerifySignature  fpCryptXmlVerifySignature;
173   CryptXmlDllGetAlgorithmInfo fpCryptXmlGetAlgorithmInfo;
174 } CRYPT_XML_CRYPTOGRAPHIC_INTERFACE, *PCRYPT_XML_CRYPTOGRAPHIC_INTERFACE;
175 
176 typedef HRESULT ( WINAPI *CryptXmlDllGetInterface )(
177   DWORD dwFlags,
178   const CRYPT_XML_ALGORITHM_INFO *pMethod,
179   CRYPT_XML_CRYPTOGRAPHIC_INTERFACE *pInterface
180 );
181 
182 typedef struct _CRYPT_XML_DATA_BLOB {
183   ULONG cbData;
184   BYTE  *pbData;
185 } CRYPT_XML_DATA_BLOB, *PCRYPT_XML_DATA_BLOB;
186 
187 typedef HRESULT (CALLBACK *PFN_CRYPT_XML_DATA_PROVIDER_READ)(
188   void *pvCallbackState,
189   BYTE *pbData,
190   ULONG cbData,
191   ULONG *pcbRead
192 );
193 
194 typedef HRESULT (CALLBACK *PFN_CRYPT_XML_DATA_PROVIDER_CLOSE)(
195   void *pvCallbackState
196 );
197 
198 typedef struct _CRYPT_XML_DATA_PROVIDER {
199   void                              *pvCallbackState;
200   ULONG                             cbBufferSize;
201   PFN_CRYPT_XML_DATA_PROVIDER_READ  pfnRead;
202   PFN_CRYPT_XML_DATA_PROVIDER_CLOSE pfnClose;
203 } CRYPT_XML_DATA_PROVIDER, *PCRYPT_XML_DATA_PROVIDER;
204 
205 typedef HRESULT (CALLBACK *PFN_CRYPT_XML_CREATE_TRANSFORM)(
206   const CRYPT_XML_ALGORITHM *pTransform,
207   CRYPT_XML_DATA_PROVIDER *pProviderIn,
208   CRYPT_XML_DATA_PROVIDER *pProviderOut
209 );
210 
211 typedef struct _CRYPT_XML_TRANSFORM_INFO {
212   ULONG                          cbSize;
213   LPCWSTR                        wszAlgorithm;
214   ULONG                          cbBufferSize;
215   DWORD                          dwFlags;
216   PFN_CRYPT_XML_CREATE_TRANSFORM pfnCreateTransform;
217 } CRYPT_XML_TRANSFORM_INFO, *PCRYPT_XML_TRANSFORM_INFO;
218 
219 #define CRYPT_XML_TRANSFORM_ON_STREAM 0x00000001
220 #define CRYPT_XML_TRANSFORM_ON_NODESET 0x00000002
221 #define CRYPT_XML_TRANSFORM_URI_QUERY_STRING 0x00000003
222 
223 typedef struct _CRYPT_XML_TRANSFORM_CHAIN_CONFIG {
224   ULONG                     cbSize;
225   ULONG                     cTransformInfo;
226   PCRYPT_XML_TRANSFORM_INFO *rgpTransformInfo;
227 } CRYPT_XML_TRANSFORM_CHAIN_CONFIG, *PCRYPT_XML_TRANSFORM_CHAIN_CONFIG;
228 
229 typedef struct _CRYPT_XML_REFERENCE {
230   ULONG               cbSize;
231   HCRYPTXML           hReference;
232   LPCWSTR             wszId;
233   LPCWSTR             wszUri;
234   LPCWSTR             wszType;
235   CRYPT_XML_ALGORITHM DigestMethod;
236   CRYPT_DATA_BLOB     DigestValue;
237   ULONG               cTransform;
238   CRYPT_XML_ALGORITHM *rgTransform;
239 } CRYPT_XML_REFERENCE, *PCRYPT_XML_REFERENCE;
240 
241 typedef struct _CRYPT_XML_REFERENCES {
242   ULONG                cReference;
243   PCRYPT_XML_REFERENCE *rgpReference;
244 } CRYPT_XML_REFERENCES, *PCRYPT_XML_REFERENCES;
245 
246 typedef struct _CRYPT_XML_SIGNED_INFO {
247   ULONG                cbSize;
248   LPCWSTR              wszId;
249   CRYPT_XML_ALGORITHM  Canonicalization;
250   CRYPT_XML_ALGORITHM  SignatureMethod;
251   ULONG                cReference;
252   PCRYPT_XML_REFERENCE *rgpReference;
253   CRYPT_XML_BLOB       Encoded;
254 } CRYPT_XML_SIGNED_INFO, *PCRYPT_XML_SIGNED_INFO;
255 
256 typedef struct _CRYPT_XML_ISSUER_SERIAL {
257   LPCWSTR wszIssuer ;
258   LPCWSTR wszSerial;
259 } CRYPT_XML_ISSUER_SERIAL;
260 
261 typedef struct _CRYPT_XML_X509DATA_ITEM {
262   DWORD dwType;
263   __C89_NAMELESS union {
264     CRYPT_XML_ISSUER_SERIAL IssuerSerial;
265     CRYPT_XML_DATA_BLOB     SKI;
266     LPCWSTR                 wszSubjectName;
267     CRYPT_XML_DATA_BLOB     Certificate;
268     CRYPT_XML_DATA_BLOB     CRL;
269     CRYPT_XML_BLOB          Custom;
270   } ;
271 } CRYPT_XML_X509DATA_ITEM;
272 
273 #define CRYPT_XML_X509DATA_TYPE_ISSUER_SERIAL 0x00000001
274 #define CRYPT_XML_X509DATA_TYPE_SKI 0x00000002
275 #define CRYPT_XML_X509DATA_TYPE_SUBJECT_NAME 0x00000003
276 #define CRYPT_XML_X509DATA_TYPE_CERTIFICATE 0x00000004
277 #define CRYPT_XML_X509DATA_TYPE_CRL 0x00000005
278 #define CRYPT_XML_X509DATA_TYPE_CUSTOM 0x00000006
279 
280 typedef struct _CRYPT_XML_X509DATA {
281   UINT                    cX509Data;
282   CRYPT_XML_X509DATA_ITEM *rgX509Data;
283 } CRYPT_XML_X509DATA, *PCRYPT_XML_X509DATA;
284 
285 typedef struct _CRYPT_XML_KEY_INFO_ITEM {
286   DWORD dwType;
287   __C89_NAMELESS union {
288     LPCWSTR             wszKeyName;
289     CRYPT_XML_KEY_VALUE KeyValue;
290     CRYPT_XML_BLOB      RetrievalMethod;
291     CRYPT_XML_X509DATA  X509Data;
292     CRYPT_XML_BLOB      Custom;
293   } ;
294 } CRYPT_XML_KEY_INFO_ITEM;
295 
296 #define CRYPT_XML_KEYINFO_TYPE_KEYNAME 0x00000001
297 #define CRYPT_XML_KEYINFO_TYPE_KEYVALUE 0x00000002
298 #define CRYPT_XML_KEYINFO_TYPE_RETRIEVAL 0x00000003
299 #define CRYPT_XML_KEYINFO_TYPE_X509DATA 0x00000004
300 #define CRYPT_XML_KEYINFO_TYPE_CUSTOM 0x00000005
301 
302 typedef struct _CRYPT_XML_KEY_DSA_KEY_VALUE {
303   CRYPT_XML_DATA_BLOB P;
304   CRYPT_XML_DATA_BLOB Q;
305   CRYPT_XML_DATA_BLOB G;
306   CRYPT_XML_DATA_BLOB Y;
307   CRYPT_XML_DATA_BLOB J;
308   CRYPT_XML_DATA_BLOB Seed;
309   CRYPT_XML_DATA_BLOB Counter;
310 } CRYPT_XML_KEY_DSA_KEY_VALUE;
311 
312 typedef struct _CRYPT_XML_KEY_RSA_KEY_VALUE {
313   CRYPT_XML_DATA_BLOB Modulus;
314   CRYPT_XML_DATA_BLOB Exponent;
315 } CRYPT_XML_KEY_RSA_KEY_VALUE;
316 
317 typedef struct _CRYPT_XML_KEY_ECDSA_KEY_VALUE {
318   LPCWSTR                  wszNamedCurve;
319   CRYPT_XML_DATA_BLOB      X;
320   CRYPT_XML_DATA_BLOB      Y;
321   CRYPT_XML_BLOB           ExplicitPara;
322 } CRYPT_XML_KEY_ECDSA_KEY_VALUE;
323 
324 typedef struct _CRYPT_XML_KEY_VALUE {
325   DWORD dwType;
326   __C89_NAMELESS union {
327     CRYPT_XML_KEY_DSA_KEY_VALUE   DSAKeyValue;
328     CRYPT_XML_KEY_RSA_KEY_VALUE   RSAKeyValue;
329     CRYPT_XML_KEY_ECDSA_KEY_VALUE ECDSAKeyValue;
330     CRYPT_XML_BLOB                Custom;
331   } ;
332 } CRYPT_XML_KEY_VALUE;
333 
334 #define CRYPT_XML_KEY_VALUE_TYPE_DSA 0x00000001
335 #define CRYPT_XML_KEY_VALUE_TYPE_RSA 0x00000002
336 #define CRYPT_XML_KEY_VALUE_TYPE_ECDSA 0x00000003
337 #define CRYPT_XML_KEY_VALUE_TYPE_CUSTOM 0x00000004
338 
339 typedef struct _CRYPT_XML_KEY_INFO {
340   ULONG                   cbSize;
341   LPCWSTR                 wszId;
342   UINT                    cKeyInfo;
343   CRYPT_XML_KEY_INFO_ITEM *rgKeyInfo;
344   BCRYPT_KEY_HANDLE       hVerifyKey;
345 } CRYPT_XML_KEY_INFO;
346 
347 typedef struct _CRYPT_XML_OBJECT {
348   ULONG                cbSize;
349   HCRYPTXML            hObject;
350   LPCWSTR              wszId;
351   LPCWSTR              wszMimeType;
352   LPCWSTR              wszEncoding;
353   CRYPT_XML_REFERENCES Manifest;
354   CRYPT_XML_BLOB       Encoded;
355 } CRYPT_XML_OBJECT, *PCRYPT_XML_OBJECT;
356 
357 typedef struct _CRYPT_XML_SIGNATURE {
358   ULONG                 cbSize;
359   HCRYPTXML             hSignature;
360   LPCWSTR               wszId;
361   CRYPT_XML_SIGNED_INFO SignedInfo;
362   CRYPT_DATA_BLOB       SignatureValue;
363   CRYPT_XML_KEY_INFO    *pKeyInfo;
364   ULONG                 cObject;
365   PCRYPT_XML_OBJECT     *rgpObject;
366 } CRYPT_XML_SIGNATURE, *PCRYPT_XML_SIGNATURE;
367 
368 typedef struct _CRYPT_XML_DOC_CTXT {
369   ULONG                            cbSize;
370   HCRYPTXML                        hDocCtxt;
371   CRYPT_XML_TRANSFORM_CHAIN_CONFIG *pTransformsConfig;
372   ULONG                            cSignature;
373   PCRYPT_XML_SIGNATURE             *rgpSignature;
374 } CRYPT_XML_DOC_CTXT, *PCRYPT_XML_DOC_CTXT;
375 
376 typedef struct _CRYPT_XML_KEYINFO_PARAM {
377   LPCWSTR   wszId;
378   LPCWSTR   wszKeyName;
379   CERT_BLOB SKI;
380   LPCWSTR   wszSubjectName;
381   ULONG     cCertificate;
382   CERT_BLOB *rgCertificate;
383   ULONG     cCRL;
384   CERT_BLOB *rgCRL;
385 } CRYPT_XML_KEYINFO_PARAM;
386 
387 typedef struct _CRYPT_XML_PROPERTY {
388   CRYPT_XML_PROPERTY_ID dwPropId;
389   const void            *pvValue;
390   ULONG                 cbValue;
391 } CRYPT_XML_PROPERTY, *PCRYPT_XML_PROPERTY;
392 
393 typedef struct _CRYPT_XML_STATUS {
394   ULONG cbSize;
395   DWORD dwErrorStatus;
396   DWORD dwInfoStatus;
397 } CRYPT_XML_STATUS, *PCRYPT_XML_STATUS;
398 
399 #define CRYPT_XML_STATUS_ERROR_NOT_RESOLVED 0x00000001
400 #define CRYPT_XML_STATUS_ERROR_DIGEST_INVALID 0x00000002
401 #define CRYPT_XML_STATUS_ERROR_NOT_SUPPORTED_ALGORITHM 0x00000005
402 #define CRYPT_XML_STATUS_ERROR_NOT_SUPPORTED_TRANSFORM 0x00000008
403 #define CRYPT_XML_STATUS_ERROR_SIGNATURE_INVALID 0x00010000
404 #define CRYPT_XML_STATUS_ERROR_KEYINFO_NOT_PARSED 0x00020000
405 
406 #define CRYPT_XML_STATUS_INTERNAL_REFERENCE 0x00000001
407 #define CRYPT_XML_STATUS_KEY_AVAILABLE 0x00000002
408 #define CRYPT_XML_STATUS_DIGESTING 0x00000004
409 #define CRYPT_XML_STATUS_DIGEST_VALID 0x00000008
410 #define CRYPT_XML_STATUS_SIGNATURE_VALID 0x00010000
411 #define CRYPT_XML_STATUS_OPENED_TO_ENCODE 0x80000000
412 
413 CRYPTXMLAPI HRESULT WINAPI CryptXmlAddObject(
414   HCRYPTXML hSignatureOrObject,
415   DWORD dwFlags,
416   const CRYPT_XML_PROPERTY *rgProperty,
417   ULONG cProperty,
418   const PCRYPT_XML_BLOB pEncoded,
419   const CRYPT_XML_OBJECT **ppObject
420 );
421 
422 CRYPTXMLAPI HRESULT WINAPI CryptXmlClose(
423   HCRYPTXML hCryptXml
424 );
425 
426 CRYPTXMLAPI HRESULT WINAPI CryptXmlCreateReference(
427   HCRYPTXML hCryptXml,
428   DWORD dwFlags,
429   LPCWSTR wszId,
430   LPCWSTR wszURI,
431   LPCWSTR wszType,
432   const CRYPT_XML_ALGORITHM *pDigestMethod,
433   ULONG cTransform,
434   const CRYPT_XML_ALGORITHM *rgTransform,
435   HCRYPTXML *phReference
436 );
437 
438 #define CRYPT_XML_FLAG_CREATE_REFERENCE_AS_OBJECT 0x00000001
439 
440 CRYPTXMLAPI HRESULT WINAPI CryptXmlDigestReference(
441   HCRYPTXML hReference,
442   DWORD dwFlags,
443   CRYPT_XML_DATA_PROVIDER *pDataProviderIn
444 );
445 
446 #define CRYPT_XML_REFERENCE_DATA_TRANSFORMED 0x00000001
447 
448 CRYPTXMLAPI HRESULT WINAPI CryptXmlEncode(
449   HCRYPTXML hCryptXml,
450   CRYPT_XML_CHARSET dwCharset,
451   const CRYPT_XML_PROPERTY *rgProperty,
452   ULONG cProperty,
453   void *pvCallbackState,
454   PFN_CRYPT_XML_WRITE_CALLBACK pfnWrite
455 );
456 
457 CRYPTXMLAPI HRESULT WINAPI CryptXmlGetAlgorithmInfo(
458   const CRYPT_XML_ALGORITHM *pXmlAlgorithm,
459   DWORD dwFlags,
460   CRYPT_XML_ALGORITHM_INFO **ppAlgInfo
461 );
462 
463 CRYPTXMLAPI HRESULT WINAPI CryptXmlGetDocContext(
464   HCRYPTXML hCryptXml,
465   const CRYPT_XML_DOC_CTXT **ppStruct
466 );
467 
468 CRYPTXMLAPI HRESULT WINAPI CryptXmlGetReference(
469   HCRYPTXML HCRYPTXML,
470   const CRYPT_XML_REFERENCE **ppStruct
471 );
472 
473 CRYPTXMLAPI HRESULT WINAPI CryptXmlGetSignature(
474   HCRYPTXML hCryptXml,
475   const PCRYPT_XML_SIGNATURE **ppStruct
476 );
477 
478 CRYPTXMLAPI HRESULT WINAPI CryptXmlGetStatus(
479   HCRYPTXML hCryptXml,
480   CRYPT_XML_STATUS *pStatus
481 );
482 
483 CRYPTXMLAPI HRESULT WINAPI CryptXmlGetTransforms(
484   PCRYPT_XML_TRANSFORM_CHAIN_CONFIG **pConfig
485 );
486 
487 CRYPTXMLAPI HRESULT WINAPI CryptXmlImportPublicKey(
488   DWORD dwFlags,
489   CRYPT_XML_KEY_VALUE *pKeyValue,
490   BCRYPT_KEY_HANDLE *phKey
491 );
492 
493 #define CRYPT_XML_FLAG_DISABLE_EXTENSIONS 0x10000000
494 
495 CRYPTXMLAPI HRESULT WINAPI CryptXmlOpenToDecode(
496   CRYPT_XML_TRANSFORM_CHAIN_CONFIG *pConfig,
497   DWORD dwFlags,
498   const CRYPT_XML_PROPERTY *rgProperty,
499   ULONG cProperty,
500   const CRYPT_XML_BLOB *pEncoded,
501   HCRYPTXML phCryptXml
502 );
503 
504 #define CRYPT_XML_FLAG_NO_SERIALIZE 0x80000000
505 #define CRYPT_XML_FLAG_DISABLE_EXTENSION 0x10000000
506 
507 CRYPTXMLAPI HRESULT WINAPI CryptXmlOpenToEncode(
508   CRYPT_XML_TRANSFORM_CHAIN_CONFIG *pConfig,
509   DWORD dwFlags,
510   LPCWSTR wszId,
511   CRYPT_XML_PROPERTY *rgProperty,
512   ULONG cProperty,
513   CRYPT_XML_BLOB *pEncoded,
514   HCRYPTXML *phSignature
515 );
516 
517 #define CRYPT_XML_FLAG_NO_SERIALIZE 0x80000000
518 #define CRYPT_XML_FLAG_DISABLE_EXTENSIONS 0x10000000
519 
520 CRYPTXMLAPI HRESULT WINAPI CryptXmlSetHMACSecret(
521   HCRYPTXML hSignature,
522   const BYTE *pbSecret,
523   ULONG cbSecret
524 );
525 
526 CRYPTXMLAPI HRESULT WINAPI CryptXmlSign(
527   HCRYPTXML hSignature,
528   HCRYPTPROV_OR_NCRYPT_KEY_HANDLE hKey,
529   DWORD dwKeySpec,
530   DWORD dwFlags,
531   CRYPT_XML_KEYINFO_SPEC dwKeyInfoSpec,
532   const void pvKeyInfoSpec,
533   const CRYPT_XML_ALGORITHM pSignatureMethod,
534   const CRYPT_XML_ALGORITHM pCanonicalization
535 );
536 
537 #define AT_KEYEXCHANGE 1
538 #define AT_SIGNATURE 2
539 #define CERT_NCRYPT_KEY_SPEC 0xFFFFFFFF
540 
541 #define CRYPT_XML_SIGN_ADD_KEYVALUE 0x00000001
542 #define CRYPT_XML_FLAG_DISABLE_EXTENSIONS 0x10000000
543 
544 CRYPTXMLAPI HRESULT WINAPI CryptXmlVerifySignature(
545   HCRYPTXML hSignature,
546   BCRYPT_KEY_HANDLE hKey,
547   DWORD dwFlags
548 );
549 
550 #endif /*(_WIN32_WINNT >= 0x0601)*/
551 
552 #ifdef __cplusplus
553 }
554 #endif
555 #endif /*_INC_CRYPTXML*/
556