Home | History | Annotate | Download | only in include
      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