/** * This file has no copyright assigned and is placed in the Public Domain. * This file is part of the mingw-w64 runtime package. * No warranty is given; refer to the file DISCLAIMER.PD within this package. */ #ifndef _INC_CRYPTXML #define _INC_CRYPTXML #ifdef __cplusplus extern "C" { #endif #ifndef DECLSPEC_IMPORT #ifndef __WIDL__ #define DECLSPEC_IMPORT __declspec(dllimport) #else #define DECLSPEC_IMPORT #endif #endif #ifndef CRYPTXMLAPI #define CRYPTXMLAPI DECLSPEC_IMPORT #endif #ifndef __HCRYPTPROV_OR_NCRYPT_KEY_HANDLE_DEFINED__ #define __HCRYPTPROV_OR_NCRYPT_KEY_HANDLE_DEFINED__ /*Also in wincrypth*/ typedef ULONG_PTR HCRYPTPROV_OR_NCRYPT_KEY_HANDLE; #endif /*__HCRYPTPROV_OR_NCRYPT_KEY_HANDLE_DEFINED__*/ #ifndef __BCRYPT_KEY_HANDLE_DEFINED__ #define __BCRYPT_KEY_HANDLE_DEFINED__ /*also in bcrypt.h*/ typedef LPVOID BCRYPT_KEY_HANDLE; #endif /*__BCRYPT_KEY_HANDLE_DEFINED__*/ typedef HANDLE HCRYPTXML; #if (_WIN32_WINNT >= 0x0601) typedef enum tagCRYPT_XML_CHARSET { CRYPT_XML_CHARSET_AUTO = 0, CRYPT_XML_CHARSET_UTF8 = 1, CRYPT_XML_CHARSET_UTF16LE = 2, CRYPT_XML_CHARSET_UTF16BE = 3 } CRYPT_XML_CHARSET; typedef enum tagCRYPT_XML_KEYINFO_SPEC { CRYPT_XML_KEYINFO_SPEC_NONE = 0, CRYPT_XML_KEYINFO_SPEC_ENCODED = 1, CRYPT_XML_KEYINFO_SPEC_PARAM = 2 } CRYPT_XML_KEYINFO_SPEC; typedef enum tagCRYPT_XML_PROPERTY_ID { CRYPT_XML_PROPERTY_MAX_HEAP_SIZE = 1, CRYPT_XML_PROPERTY_SIGNATURE_LOCATION = 2, CRYPT_XML_PROPERTY_MAX_SIGNATURES = 3, CRYPT_XML_PROPERTY_DOC_DECLARATION = 4, CRYPT_XML_PROPERTY_XML_OUTPUT_CHARSET = 5, CRYPT_XML_PROPERTY_HMAC_OUTPUT_LENGTH = 6 } CRYPT_XML_PROPERTY_ID; typedef struct _CRYPT_XML_BLOB { CRYPT_XML_CHARSET dwCharset; ULONG cbData; BYTE *pbData; } CRYPT_XML_BLOB, *PCRYPT_XML_BLOB; #define CRYPT_XML_BLOB_MAX 0x7FFFFFF8 typedef struct _CRYPT_XML_ALGORITHM { ULONG cbSize; LPCWSTR wszAlgorithm; CRYPT_XML_BLOB Encoded; } CRYPT_XML_ALGORITHM, *PCRYPT_XML_ALGORITHM; typedef struct _CRYPT_XML_ALGORITHM_INFO { DWORD cbSize; WCHAR *wszAlgorithmURI; WCHAR *wszName; DWORD dwGroupId; WCHAR *wszCNGAlgid; WCHAR wszCNGExtraAlgid; DWORD dwSignFlags; DWORD dwVerifyFlags; void pvPaddingInfo; void pvExtraInfo; } CRYPT_XML_ALGORITHM_INFO, *PCRYPT_XML_ALGORITHM_INFO; #define CRYPT_XML_GROUP_ID_HASH 1 #define CRYPT_XML_GROUP_ID_SIGN 2 typedef HRESULT (CALLBACK *PFN_CRYPT_XML_WRITE_CALLBACK)( void *pvCallbackState, BYTE pbData, ULONG cbData ); typedef HRESULT ( WINAPI *CryptXmlDllEncodeAlgorithm )( CRYPT_XML_ALGORITHM_INFO *pAlgInfo, CRYPT_XML_CHARSET dwCharset, void *pvCallbackState, PFN_CRYPT_XML_WRITE_CALLBACK pfnWrite ); typedef HANDLE CRYPT_XML_DIGEST; typedef HRESULT ( WINAPI *CryptXmlDllCreateDigest )( const CRYPT_XML_ALGORITHM *pDigestMethod, ULONG *pcbSize, CRYPT_XML_DIGEST *phDigest ); typedef HRESULT ( WINAPI *CryptXmlDllDigestData )( CRYPT_XML_DIGEST hDigest, BYTE *pbData, ULONG cbDigest ); typedef HRESULT ( WINAPI *CryptXmlDllFinalizeDigest )( CRYPT_XML_DIGEST hDigest, BYTE *pbDigest, ULONG cbDigest ); typedef HRESULT ( WINAPI *CryptXmlDllCloseDigest )( CRYPT_XML_DIGEST hDigest ); typedef HRESULT ( WINAPI *CryptXmlDllSignData )( const CRYPT_XML_ALGORITHM *pSignatureMethod, HCRYPTPROV_OR_NCRYPT_KEY_HANDLE hCryptProvOrNCryptKey, DWORD dwKeySpec, const BYTE *pbInput, ULONG cbInput, BYTE *pbOutput, ULONG cbOutput, ULONG *pcbResult ); typedef HRESULT ( WINAPI *CryptXmlDllVerifySignature )( const CRYPT_XML_ALGORITHM *pSignatureMethod, HCRYPTXML_PROV hCryptProv, HCRYPTXML_KEY hKey, const BYTE *pbInput, ULONG cbInput, const BYTE *pbSignature, ULONG cbSignature ); typedef HRESULT ( WINAPI *CryptXmlDllCreateKey )( CRYPT_XML_BLOB *pEncoded, const BCRYPT_KEY_HANDLE *phKey ); typedef HRESULT ( WINAPI *CryptXmlDllEncodeKeyValue )( NCRYPT_KEY_HANDLE hKey, CRYPT_XML_CHARSET dwCharset, void *pvCallbackState, PFN_CRYPT_XML_WRITE_CALLBACK pfnWrite ); typedef struct _CRYPT_XML_CRYPTOGRAPHIC_INTERFACE { ULONG cbSize; CryptXmlDllEncodeAlgorithm fpCryptXmlEncodeAlgorithm; CryptXmlDllCreateDigest fpCryptXmlCreateDigest; CryptXmlDllDigestData fpCryptXmlDigestData; CryptXmlDllFinalizeDigest fpCryptXmlFinalizeDigest; CryptXmlDllCloseDigest fpCryptXmlCloseDigest; CryptXmlDllSignData fpCryptXmlSignData; CryptXmlDllVerifySignature fpCryptXmlVerifySignature; CryptXmlDllGetAlgorithmInfo fpCryptXmlGetAlgorithmInfo; } CRYPT_XML_CRYPTOGRAPHIC_INTERFACE, *PCRYPT_XML_CRYPTOGRAPHIC_INTERFACE; typedef HRESULT ( WINAPI *CryptXmlDllGetInterface )( DWORD dwFlags, const CRYPT_XML_ALGORITHM_INFO *pMethod, CRYPT_XML_CRYPTOGRAPHIC_INTERFACE *pInterface ); typedef struct _CRYPT_XML_DATA_BLOB { ULONG cbData; BYTE *pbData; } CRYPT_XML_DATA_BLOB, *PCRYPT_XML_DATA_BLOB; typedef HRESULT (CALLBACK *PFN_CRYPT_XML_DATA_PROVIDER_READ)( void *pvCallbackState, BYTE *pbData, ULONG cbData, ULONG *pcbRead ); typedef HRESULT (CALLBACK *PFN_CRYPT_XML_DATA_PROVIDER_CLOSE)( void *pvCallbackState ); typedef struct _CRYPT_XML_DATA_PROVIDER { void *pvCallbackState; ULONG cbBufferSize; PFN_CRYPT_XML_DATA_PROVIDER_READ pfnRead; PFN_CRYPT_XML_DATA_PROVIDER_CLOSE pfnClose; } CRYPT_XML_DATA_PROVIDER, *PCRYPT_XML_DATA_PROVIDER; typedef HRESULT (CALLBACK *PFN_CRYPT_XML_CREATE_TRANSFORM)( const CRYPT_XML_ALGORITHM *pTransform, CRYPT_XML_DATA_PROVIDER *pProviderIn, CRYPT_XML_DATA_PROVIDER *pProviderOut ); typedef struct _CRYPT_XML_TRANSFORM_INFO { ULONG cbSize; LPCWSTR wszAlgorithm; ULONG cbBufferSize; DWORD dwFlags; PFN_CRYPT_XML_CREATE_TRANSFORM pfnCreateTransform; } CRYPT_XML_TRANSFORM_INFO, *PCRYPT_XML_TRANSFORM_INFO; #define CRYPT_XML_TRANSFORM_ON_STREAM 0x00000001 #define CRYPT_XML_TRANSFORM_ON_NODESET 0x00000002 #define CRYPT_XML_TRANSFORM_URI_QUERY_STRING 0x00000003 typedef struct _CRYPT_XML_TRANSFORM_CHAIN_CONFIG { ULONG cbSize; ULONG cTransformInfo; PCRYPT_XML_TRANSFORM_INFO *rgpTransformInfo; } CRYPT_XML_TRANSFORM_CHAIN_CONFIG, *PCRYPT_XML_TRANSFORM_CHAIN_CONFIG; typedef struct _CRYPT_XML_REFERENCE { ULONG cbSize; HCRYPTXML hReference; LPCWSTR wszId; LPCWSTR wszUri; LPCWSTR wszType; CRYPT_XML_ALGORITHM DigestMethod; CRYPT_DATA_BLOB DigestValue; ULONG cTransform; CRYPT_XML_ALGORITHM *rgTransform; } CRYPT_XML_REFERENCE, *PCRYPT_XML_REFERENCE; typedef struct _CRYPT_XML_REFERENCES { ULONG cReference; PCRYPT_XML_REFERENCE *rgpReference; } CRYPT_XML_REFERENCES, *PCRYPT_XML_REFERENCES; typedef struct _CRYPT_XML_SIGNED_INFO { ULONG cbSize; LPCWSTR wszId; CRYPT_XML_ALGORITHM Canonicalization; CRYPT_XML_ALGORITHM SignatureMethod; ULONG cReference; PCRYPT_XML_REFERENCE *rgpReference; CRYPT_XML_BLOB Encoded; } CRYPT_XML_SIGNED_INFO, *PCRYPT_XML_SIGNED_INFO; typedef struct _CRYPT_XML_ISSUER_SERIAL { LPCWSTR wszIssuer ; LPCWSTR wszSerial; } CRYPT_XML_ISSUER_SERIAL; typedef struct _CRYPT_XML_X509DATA_ITEM { DWORD dwType; __C89_NAMELESS union { CRYPT_XML_ISSUER_SERIAL IssuerSerial; CRYPT_XML_DATA_BLOB SKI; LPCWSTR wszSubjectName; CRYPT_XML_DATA_BLOB Certificate; CRYPT_XML_DATA_BLOB CRL; CRYPT_XML_BLOB Custom; } ; } CRYPT_XML_X509DATA_ITEM; #define CRYPT_XML_X509DATA_TYPE_ISSUER_SERIAL 0x00000001 #define CRYPT_XML_X509DATA_TYPE_SKI 0x00000002 #define CRYPT_XML_X509DATA_TYPE_SUBJECT_NAME 0x00000003 #define CRYPT_XML_X509DATA_TYPE_CERTIFICATE 0x00000004 #define CRYPT_XML_X509DATA_TYPE_CRL 0x00000005 #define CRYPT_XML_X509DATA_TYPE_CUSTOM 0x00000006 typedef struct _CRYPT_XML_X509DATA { UINT cX509Data; CRYPT_XML_X509DATA_ITEM *rgX509Data; } CRYPT_XML_X509DATA, *PCRYPT_XML_X509DATA; typedef struct _CRYPT_XML_KEY_INFO_ITEM { DWORD dwType; __C89_NAMELESS union { LPCWSTR wszKeyName; CRYPT_XML_KEY_VALUE KeyValue; CRYPT_XML_BLOB RetrievalMethod; CRYPT_XML_X509DATA X509Data; CRYPT_XML_BLOB Custom; } ; } CRYPT_XML_KEY_INFO_ITEM; #define CRYPT_XML_KEYINFO_TYPE_KEYNAME 0x00000001 #define CRYPT_XML_KEYINFO_TYPE_KEYVALUE 0x00000002 #define CRYPT_XML_KEYINFO_TYPE_RETRIEVAL 0x00000003 #define CRYPT_XML_KEYINFO_TYPE_X509DATA 0x00000004 #define CRYPT_XML_KEYINFO_TYPE_CUSTOM 0x00000005 typedef struct _CRYPT_XML_KEY_DSA_KEY_VALUE { CRYPT_XML_DATA_BLOB P; CRYPT_XML_DATA_BLOB Q; CRYPT_XML_DATA_BLOB G; CRYPT_XML_DATA_BLOB Y; CRYPT_XML_DATA_BLOB J; CRYPT_XML_DATA_BLOB Seed; CRYPT_XML_DATA_BLOB Counter; } CRYPT_XML_KEY_DSA_KEY_VALUE; typedef struct _CRYPT_XML_KEY_RSA_KEY_VALUE { CRYPT_XML_DATA_BLOB Modulus; CRYPT_XML_DATA_BLOB Exponent; } CRYPT_XML_KEY_RSA_KEY_VALUE; typedef struct _CRYPT_XML_KEY_ECDSA_KEY_VALUE { LPCWSTR wszNamedCurve; CRYPT_XML_DATA_BLOB X; CRYPT_XML_DATA_BLOB Y; CRYPT_XML_BLOB ExplicitPara; } CRYPT_XML_KEY_ECDSA_KEY_VALUE; typedef struct _CRYPT_XML_KEY_VALUE { DWORD dwType; __C89_NAMELESS union { CRYPT_XML_KEY_DSA_KEY_VALUE DSAKeyValue; CRYPT_XML_KEY_RSA_KEY_VALUE RSAKeyValue; CRYPT_XML_KEY_ECDSA_KEY_VALUE ECDSAKeyValue; CRYPT_XML_BLOB Custom; } ; } CRYPT_XML_KEY_VALUE; #define CRYPT_XML_KEY_VALUE_TYPE_DSA 0x00000001 #define CRYPT_XML_KEY_VALUE_TYPE_RSA 0x00000002 #define CRYPT_XML_KEY_VALUE_TYPE_ECDSA 0x00000003 #define CRYPT_XML_KEY_VALUE_TYPE_CUSTOM 0x00000004 typedef struct _CRYPT_XML_KEY_INFO { ULONG cbSize; LPCWSTR wszId; UINT cKeyInfo; CRYPT_XML_KEY_INFO_ITEM *rgKeyInfo; BCRYPT_KEY_HANDLE hVerifyKey; } CRYPT_XML_KEY_INFO; typedef struct _CRYPT_XML_OBJECT { ULONG cbSize; HCRYPTXML hObject; LPCWSTR wszId; LPCWSTR wszMimeType; LPCWSTR wszEncoding; CRYPT_XML_REFERENCES Manifest; CRYPT_XML_BLOB Encoded; } CRYPT_XML_OBJECT, *PCRYPT_XML_OBJECT; typedef struct _CRYPT_XML_SIGNATURE { ULONG cbSize; HCRYPTXML hSignature; LPCWSTR wszId; CRYPT_XML_SIGNED_INFO SignedInfo; CRYPT_DATA_BLOB SignatureValue; CRYPT_XML_KEY_INFO *pKeyInfo; ULONG cObject; PCRYPT_XML_OBJECT *rgpObject; } CRYPT_XML_SIGNATURE, *PCRYPT_XML_SIGNATURE; typedef struct _CRYPT_XML_DOC_CTXT { ULONG cbSize; HCRYPTXML hDocCtxt; CRYPT_XML_TRANSFORM_CHAIN_CONFIG *pTransformsConfig; ULONG cSignature; PCRYPT_XML_SIGNATURE *rgpSignature; } CRYPT_XML_DOC_CTXT, *PCRYPT_XML_DOC_CTXT; typedef struct _CRYPT_XML_KEYINFO_PARAM { LPCWSTR wszId; LPCWSTR wszKeyName; CERT_BLOB SKI; LPCWSTR wszSubjectName; ULONG cCertificate; CERT_BLOB *rgCertificate; ULONG cCRL; CERT_BLOB *rgCRL; } CRYPT_XML_KEYINFO_PARAM; typedef struct _CRYPT_XML_PROPERTY { CRYPT_XML_PROPERTY_ID dwPropId; const void *pvValue; ULONG cbValue; } CRYPT_XML_PROPERTY, *PCRYPT_XML_PROPERTY; typedef struct _CRYPT_XML_STATUS { ULONG cbSize; DWORD dwErrorStatus; DWORD dwInfoStatus; } CRYPT_XML_STATUS, *PCRYPT_XML_STATUS; #define CRYPT_XML_STATUS_ERROR_NOT_RESOLVED 0x00000001 #define CRYPT_XML_STATUS_ERROR_DIGEST_INVALID 0x00000002 #define CRYPT_XML_STATUS_ERROR_NOT_SUPPORTED_ALGORITHM 0x00000005 #define CRYPT_XML_STATUS_ERROR_NOT_SUPPORTED_TRANSFORM 0x00000008 #define CRYPT_XML_STATUS_ERROR_SIGNATURE_INVALID 0x00010000 #define CRYPT_XML_STATUS_ERROR_KEYINFO_NOT_PARSED 0x00020000 #define CRYPT_XML_STATUS_INTERNAL_REFERENCE 0x00000001 #define CRYPT_XML_STATUS_KEY_AVAILABLE 0x00000002 #define CRYPT_XML_STATUS_DIGESTING 0x00000004 #define CRYPT_XML_STATUS_DIGEST_VALID 0x00000008 #define CRYPT_XML_STATUS_SIGNATURE_VALID 0x00010000 #define CRYPT_XML_STATUS_OPENED_TO_ENCODE 0x80000000 CRYPTXMLAPI HRESULT WINAPI CryptXmlAddObject( HCRYPTXML hSignatureOrObject, DWORD dwFlags, const CRYPT_XML_PROPERTY *rgProperty, ULONG cProperty, const PCRYPT_XML_BLOB pEncoded, const CRYPT_XML_OBJECT **ppObject ); CRYPTXMLAPI HRESULT WINAPI CryptXmlClose( HCRYPTXML hCryptXml ); CRYPTXMLAPI HRESULT WINAPI CryptXmlCreateReference( HCRYPTXML hCryptXml, DWORD dwFlags, LPCWSTR wszId, LPCWSTR wszURI, LPCWSTR wszType, const CRYPT_XML_ALGORITHM *pDigestMethod, ULONG cTransform, const CRYPT_XML_ALGORITHM *rgTransform, HCRYPTXML *phReference ); #define CRYPT_XML_FLAG_CREATE_REFERENCE_AS_OBJECT 0x00000001 CRYPTXMLAPI HRESULT WINAPI CryptXmlDigestReference( HCRYPTXML hReference, DWORD dwFlags, CRYPT_XML_DATA_PROVIDER *pDataProviderIn ); #define CRYPT_XML_REFERENCE_DATA_TRANSFORMED 0x00000001 CRYPTXMLAPI HRESULT WINAPI CryptXmlEncode( HCRYPTXML hCryptXml, CRYPT_XML_CHARSET dwCharset, const CRYPT_XML_PROPERTY *rgProperty, ULONG cProperty, void *pvCallbackState, PFN_CRYPT_XML_WRITE_CALLBACK pfnWrite ); CRYPTXMLAPI HRESULT WINAPI CryptXmlGetAlgorithmInfo( const CRYPT_XML_ALGORITHM *pXmlAlgorithm, DWORD dwFlags, CRYPT_XML_ALGORITHM_INFO **ppAlgInfo ); CRYPTXMLAPI HRESULT WINAPI CryptXmlGetDocContext( HCRYPTXML hCryptXml, const CRYPT_XML_DOC_CTXT **ppStruct ); CRYPTXMLAPI HRESULT WINAPI CryptXmlGetReference( HCRYPTXML HCRYPTXML, const CRYPT_XML_REFERENCE **ppStruct ); CRYPTXMLAPI HRESULT WINAPI CryptXmlGetSignature( HCRYPTXML hCryptXml, const PCRYPT_XML_SIGNATURE **ppStruct ); CRYPTXMLAPI HRESULT WINAPI CryptXmlGetStatus( HCRYPTXML hCryptXml, CRYPT_XML_STATUS *pStatus ); CRYPTXMLAPI HRESULT WINAPI CryptXmlGetTransforms( PCRYPT_XML_TRANSFORM_CHAIN_CONFIG **pConfig ); CRYPTXMLAPI HRESULT WINAPI CryptXmlImportPublicKey( DWORD dwFlags, CRYPT_XML_KEY_VALUE *pKeyValue, BCRYPT_KEY_HANDLE *phKey ); #define CRYPT_XML_FLAG_DISABLE_EXTENSIONS 0x10000000 CRYPTXMLAPI HRESULT WINAPI CryptXmlOpenToDecode( CRYPT_XML_TRANSFORM_CHAIN_CONFIG *pConfig, DWORD dwFlags, const CRYPT_XML_PROPERTY *rgProperty, ULONG cProperty, const CRYPT_XML_BLOB *pEncoded, HCRYPTXML phCryptXml ); #define CRYPT_XML_FLAG_NO_SERIALIZE 0x80000000 #define CRYPT_XML_FLAG_DISABLE_EXTENSION 0x10000000 CRYPTXMLAPI HRESULT WINAPI CryptXmlOpenToEncode( CRYPT_XML_TRANSFORM_CHAIN_CONFIG *pConfig, DWORD dwFlags, LPCWSTR wszId, CRYPT_XML_PROPERTY *rgProperty, ULONG cProperty, CRYPT_XML_BLOB *pEncoded, HCRYPTXML *phSignature ); #define CRYPT_XML_FLAG_NO_SERIALIZE 0x80000000 #define CRYPT_XML_FLAG_DISABLE_EXTENSIONS 0x10000000 CRYPTXMLAPI HRESULT WINAPI CryptXmlSetHMACSecret( HCRYPTXML hSignature, const BYTE *pbSecret, ULONG cbSecret ); CRYPTXMLAPI HRESULT WINAPI CryptXmlSign( HCRYPTXML hSignature, HCRYPTPROV_OR_NCRYPT_KEY_HANDLE hKey, DWORD dwKeySpec, DWORD dwFlags, CRYPT_XML_KEYINFO_SPEC dwKeyInfoSpec, const void pvKeyInfoSpec, const CRYPT_XML_ALGORITHM pSignatureMethod, const CRYPT_XML_ALGORITHM pCanonicalization ); #define AT_KEYEXCHANGE 1 #define AT_SIGNATURE 2 #define CERT_NCRYPT_KEY_SPEC 0xFFFFFFFF #define CRYPT_XML_SIGN_ADD_KEYVALUE 0x00000001 #define CRYPT_XML_FLAG_DISABLE_EXTENSIONS 0x10000000 CRYPTXMLAPI HRESULT WINAPI CryptXmlVerifySignature( HCRYPTXML hSignature, BCRYPT_KEY_HANDLE hKey, DWORD dwFlags ); #endif /*(_WIN32_WINNT >= 0x0601)*/ #ifdef __cplusplus } #endif #endif /*_INC_CRYPTXML*/