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 #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*/
     25 typedef 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*/
     31 typedef LPVOID BCRYPT_KEY_HANDLE;
     32 #endif /*__BCRYPT_KEY_HANDLE_DEFINED__*/
     33 
     34 typedef HANDLE HCRYPTXML;
     35 
     36 #if (_WIN32_WINNT >= 0x0601)
     37 
     38 typedef 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 
     45 typedef 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 
     51 typedef 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 
     60 typedef 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 
     68 typedef struct _CRYPT_XML_ALGORITHM {
     69   ULONG          cbSize;
     70   LPCWSTR        wszAlgorithm;
     71   CRYPT_XML_BLOB Encoded;
     72 } CRYPT_XML_ALGORITHM, *PCRYPT_XML_ALGORITHM;
     73 
     74 typedef 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 
     90 typedef HRESULT (CALLBACK *PFN_CRYPT_XML_WRITE_CALLBACK)(
     91   void *pvCallbackState,
     92   BYTE pbData,
     93   ULONG cbData
     94 );
     95 
     96 typedef 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 
    103 typedef HANDLE CRYPT_XML_DIGEST;
    104 
    105 typedef HRESULT ( WINAPI *CryptXmlDllCreateDigest )(
    106   const CRYPT_XML_ALGORITHM *pDigestMethod,
    107   ULONG *pcbSize,
    108   CRYPT_XML_DIGEST *phDigest
    109 );
    110 
    111 typedef HRESULT ( WINAPI *CryptXmlDllDigestData )(
    112     CRYPT_XML_DIGEST hDigest,
    113     BYTE *pbData,
    114     ULONG cbDigest
    115 );
    116 
    117 typedef HRESULT ( WINAPI *CryptXmlDllFinalizeDigest )(
    118   CRYPT_XML_DIGEST hDigest,
    119   BYTE *pbDigest,
    120   ULONG cbDigest
    121 );
    122 
    123 typedef HRESULT ( WINAPI *CryptXmlDllCloseDigest )(
    124   CRYPT_XML_DIGEST hDigest
    125 );
    126 
    127 typedef 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 
    138 typedef 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 
    148 typedef HRESULT ( WINAPI *CryptXmlDllCreateKey )(
    149   CRYPT_XML_BLOB *pEncoded,
    150   const BCRYPT_KEY_HANDLE *phKey
    151 );
    152 
    153 typedef 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 
    160 typedef 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 
    172 typedef HRESULT ( WINAPI *CryptXmlDllGetInterface )(
    173   DWORD dwFlags,
    174   const CRYPT_XML_ALGORITHM_INFO *pMethod,
    175   CRYPT_XML_CRYPTOGRAPHIC_INTERFACE *pInterface
    176 );
    177 
    178 typedef struct _CRYPT_XML_DATA_BLOB {
    179   ULONG cbData;
    180   BYTE  *pbData;
    181 } CRYPT_XML_DATA_BLOB, *PCRYPT_XML_DATA_BLOB;
    182 
    183 typedef HRESULT (CALLBACK *PFN_CRYPT_XML_DATA_PROVIDER_READ)(
    184   void *pvCallbackState,
    185   BYTE *pbData,
    186   ULONG cbData,
    187   ULONG *pcbRead
    188 );
    189 
    190 typedef HRESULT (CALLBACK *PFN_CRYPT_XML_DATA_PROVIDER_CLOSE)(
    191   void *pvCallbackState
    192 );
    193 
    194 typedef 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 
    201 typedef 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 
    207 typedef 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 
    219 typedef 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 
    225 typedef 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 
    237 typedef struct _CRYPT_XML_REFERENCES {
    238   ULONG                cReference;
    239   PCRYPT_XML_REFERENCE *rgpReference;
    240 } CRYPT_XML_REFERENCES, *PCRYPT_XML_REFERENCES;
    241 
    242 typedef 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 
    252 typedef struct _CRYPT_XML_ISSUER_SERIAL {
    253   LPCWSTR wszIssuer ;
    254   LPCWSTR wszSerial;
    255 } CRYPT_XML_ISSUER_SERIAL;
    256 
    257 typedef 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 
    276 typedef struct _CRYPT_XML_X509DATA {
    277   UINT                    cX509Data;
    278   CRYPT_XML_X509DATA_ITEM *rgX509Data;
    279 } CRYPT_XML_X509DATA, *PCRYPT_XML_X509DATA;
    280 
    281 typedef 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 
    298 typedef 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 
    308 typedef 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 
    313 typedef 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 
    320 typedef 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 
    335 typedef 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 
    343 typedef 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 
    353 typedef 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 
    364 typedef 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 
    372 typedef 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 
    383 typedef 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 
    389 typedef 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 
    409 CRYPTXMLAPI 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 
    418 CRYPTXMLAPI HRESULT WINAPI CryptXmlClose(
    419   HCRYPTXML hCryptXml
    420 );
    421 
    422 CRYPTXMLAPI 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 
    436 CRYPTXMLAPI 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 
    444 CRYPTXMLAPI 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 
    453 CRYPTXMLAPI HRESULT WINAPI CryptXmlGetAlgorithmInfo(
    454   const CRYPT_XML_ALGORITHM *pXmlAlgorithm,
    455   DWORD dwFlags,
    456   CRYPT_XML_ALGORITHM_INFO **ppAlgInfo
    457 );
    458 
    459 CRYPTXMLAPI HRESULT WINAPI CryptXmlGetDocContext(
    460   HCRYPTXML hCryptXml,
    461   const CRYPT_XML_DOC_CTXT **ppStruct
    462 );
    463 
    464 CRYPTXMLAPI HRESULT WINAPI CryptXmlGetReference(
    465   HCRYPTXML HCRYPTXML,
    466   const CRYPT_XML_REFERENCE **ppStruct
    467 );
    468 
    469 CRYPTXMLAPI HRESULT WINAPI CryptXmlGetSignature(
    470   HCRYPTXML hCryptXml,
    471   const PCRYPT_XML_SIGNATURE **ppStruct
    472 );
    473 
    474 CRYPTXMLAPI HRESULT WINAPI CryptXmlGetStatus(
    475   HCRYPTXML hCryptXml,
    476   CRYPT_XML_STATUS *pStatus
    477 );
    478 
    479 CRYPTXMLAPI HRESULT WINAPI CryptXmlGetTransforms(
    480   PCRYPT_XML_TRANSFORM_CHAIN_CONFIG **pConfig
    481 );
    482 
    483 CRYPTXMLAPI 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 
    491 CRYPTXMLAPI 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 
    503 CRYPTXMLAPI 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 
    516 CRYPTXMLAPI HRESULT WINAPI CryptXmlSetHMACSecret(
    517   HCRYPTXML hSignature,
    518   const BYTE *pbSecret,
    519   ULONG cbSecret
    520 );
    521 
    522 CRYPTXMLAPI 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 
    540 CRYPTXMLAPI 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