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