blob: 5b864838ba5668a58e6636e0136061d1953f0a5d [file] [log] [blame]
/**
* This file has no copyright assigned and is placed in the Public Domain.
* This file is part of the w64 mingw-runtime package.
* No warranty is given; refer to the file DISCLAIMER.PD within this package.
*/
#ifndef _INC_BCRYPT
#define _INC_BCRYPT
#if (_WIN32_WINNT >= 0x0600)
#if !defined (_NTDEF_) && !defined (_NTSTATUS_PSDK)
#define _NTSTATUS_PSDK
typedef LONG NTSTATUS,*PNTSTATUS;
#endif
#define BCRYPT_CIPHER_OPERATION 0x00000001
#define BCRYPT_HASH_OPERATION 0x00000002
#define BCRYPT_ASYMMETRIC_ENCRYPTION_OPERATION 0x00000004
#define BCRYPT_SECRET_AGREEMENT_OPERATION 0x00000008
#define BCRYPT_SIGNATURE_OPERATION 0x00000010
#define BCRYPT_RNG_OPERATION 0x00000020
#define BCRYPT_KEY_DATA_BLOB_MAGIC 0x4d42444b
#define BCRYPT_KEY_DATA_BLOB_VERSION1 1
#define BCRYPT_DH_PARAMETERS_MAGIC 0x4d504844
#define BCRYPT_DSA_PUBLIC_MAGIC 0x42505344
#define BCRYPT_DSA_PRIVATE_MAGIC 0x56505344
#define BCRYPT_DSA_PARAMETERS_MAGIC 0x4d505344
#define BCRYPT_ALGORITHM_NAME L"AlgorithmName"
#define BCRYPT_AUTH_TAG_LENGTH L"AuthTagLength"
#define BCRYPT_BLOCK_LENGTH L"BlockLength"
#define BCRYPT_BLOCK_SIZE_LIST L"BlockSizeList"
#define BCRYPT_CHAINING_MODE L"ChainingMode"
#define BCRYPT_CHAIN_MODE_CBC L"ChainingModeCBC"
#define BCRYPT_CHAIN_MODE_CCM L"ChainingModeCCM"
#define BCRYPT_CHAIN_MODE_CFB L"ChainingModeCFB"
#define BCRYPT_CHAIN_MODE_ECB L"ChainingModeECB"
#define BCRYPT_CHAIN_MODE_GCM L"ChainingModeGCM"
#define BCRYPT_CHAIN_MODE_NA L"ChainingModeN/A"
#define BCRYPT_DH_PARAMETERS L"DHParameters"
#define BCRYPT_DSA_PARAMETERS L"DSAParameters"
#define BCRYPT_EFFECTIVE_KEY_LENGTH L"EffectiveKeyLength"
#define BCRYPT_HASH_BLOCK_LENGTH L"HashBlockLength"
#define BCRYPT_HASH_LENGTH L"HashDigestLength"
#define BCRYPT_HASH_OID_LIST L"HashOIDList"
#define BCRYPT_INITIALIZATION_VECTOR L"IV"
#define BCRYPT_KEY_LENGTH L"KeyLength"
#define BCRYPT_KEY_LENGTHS L"KeyLengths"
#define BCRYPT_KEY_OBJECT_LENGTH L"KeyObjectLength"
#define BCRYPT_KEY_STRENGTH L"KeyStrength"
#define BCRYPT_OBJECT_LENGTH L"ObjectLength"
#define BCRYPT_PADDING_SCHEMES L"PaddingSchemes"
#define BCRYPT_SUPPORTED_PAD_ROUTER 0x00000001
#define BCRYPT_SUPPORTED_PAD_PKCS1_ENC 0x00000002
#define BCRYPT_SUPPORTED_PAD_PKCS1_SIG 0x00000004
#define BCRYPT_SUPPORTED_PAD_OAEP 0x00000008
#define BCRYPT_SUPPORTED_PAD_PSS 0x00000010
#define BCRYPT_PROVIDER_HANDLE L"ProviderHandle"
#define BCRYPT_SIGNATURE_LENGTH L"SignatureLength"
#define KDF_HASH_ALGORITHM 0
#define KDF_SECRET_PREPEND 1
#define KDF_SECRET_APPEND 2
#define KDF_HMAC_KEY 3
#define KDF_TLS_PRF_LABEL 4
#define KDF_TLS_PRF_SEED 5
#define KDF_SECRET_HANDLE 6
#define BCRYPT_KDF_HASH (L"HASH")
#define BCRYPT_KDF_HASH (L"HASH")
#define BCRYPT_KDF_TLS_PRF (L"TLS_PRF")
#define BCRYPT_KDF_SP80056A_CONCAT (L"SP800_56A_CONCAT")
#define CRYPT_ALL_FUNCTIONS 1
#define CRYPT_ALL_PROVIDERS 2
#ifndef __BCRYPT_KEY_HANDLE_DEFINED__
#define __BCRYPT_KEY_HANDLE_DEFINED__
/*also in cryptxml.h*/
typedef LPVOID BCRYPT_KEY_HANDLE;
#endif /*__BCRYPT_KEY_HANDLE_DEFINED__*/
typedef LPVOID BCRYPT_ALG_HANDLE;
typedef LPVOID BCRYPT_HASH_HANDLE;
typedef LPVOID BCRYPT_SECRET_HANDLE;
typedef LPVOID BCRYPT_HANDLE;
typedef struct _BCRYPT_ALGORITHM_IDENTIFIER {
LPWSTR pszName;
ULONG dwClass;
ULONG dwFlags;
} BCRYPT_ALGORITHM_IDENTIFIER;
typedef struct _BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO {
ULONG cbSize;
ULONG dwInfoVersion;
PUCHAR pbNonce;
ULONG cbNonce;
PUCHAR pbAuthData;
ULONG cbAuthData;
PUCHAR pbTag;
ULONG cbTag;
PUCHAR pbMacContext;
ULONG cbMacContext;
ULONG cbAAD;
ULONGLONG cbData;
ULONG dwFlags;
} BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO, *PBCRYPT_AUTHENTICATED_CIPHER_MODE_INFO;
typedef struct _BCRYPT_DH_KEY_BLOB {
ULONG dwMagic;
ULONG cbKey;
} BCRYPT_DH_KEY_BLOB, *PBCRYPT_DH_KEY_BLOB;
typedef struct _BCRYPT_DH_PARAMETER_HEADER {
ULONG cbLength;
ULONG dwMagic;
ULONG cbKeyLength;
} BCRYPT_DH_PARAMETER_HEADER;
typedef struct _BCRYPT_DSA_KEY_BLOB {
ULONG dwMagic;
ULONG cbKey;
UCHAR Count[4];
UCHAR Seed[20];
UCHAR q[20];
} BCRYPT_DSA_KEY_BLOB, *PBCRYPT_DSA_KEY_BLOB;
typedef struct _BCRYPT_DSA_PARAMETER_HEADER {
ULONG cbLength;
ULONG dwMagic;
ULONG cbKeyLength;
UCHAR Count[4];
UCHAR Seed[20];
UCHAR q[20];
} BCRYPT_DSA_PARAMETER_HEADER, *PBCRYPT_DSA_PARAMETER_HEADER;
typedef struct _BCRYPT_ECCKEY_BLOB {
ULONG Magic;
ULONG cbKey;
} BCRYPT_ECCKEY_BLOB, *PBCRYPT_ECCKEY_BLOB;
typedef struct _BCRYPT_INTERFACE_VERSION {
USHORT MajorVersion;
USHORT MinorVersion;
} BCRYPT_INTERFACE_VERSION, *PBCRYPT_INTERFACE_VERSION;
typedef struct _BCRYPT_KEY_BLOB {
ULONG Magic;
} BCRYPT_KEY_BLOB;
typedef struct _BCRYPT_KEY_DATA_BLOB_HEADER {
ULONG dwMagic;
ULONG dwVersion;
ULONG cbKeyData;
} BCRYPT_KEY_DATA_BLOB_HEADER, *PBCRYPT_KEY_DATA_BLOB_HEADER;
typedef struct __BCRYPT_KEY_LENGTHS_STRUCT {
ULONG dwMinLength;
ULONG dwMaxLength;
ULONG dwIncrement;
} BCRYPT_KEY_LENGTHS_STRUCT, BCRYPT_AUTH_TAG_LENGTHS_STRUCT;
typedef struct _BCRYPT_OAEP_PADDING_INFO {
LPCWSTR pszAlgId;
PUCHAR pbLabel;
ULONG cbLabel;
} BCRYPT_OAEP_PADDING_INFO;
typedef struct _BCRYPT_OID {
ULONG cbOID;
PUCHAR pbOID;
} BCRYPT_OID;
typedef struct _BCRYPT_OID_LIST {
ULONG dwOIDCount;
BCRYPT_OID *pOIDs;
} BCRYPT_OID_LIST;
typedef struct _BCRYPT_PKCS1_PADDING_INFO {
LPCWSTR pszAlgId;
} BCRYPT_PKCS1_PADDING_INFO;
typedef struct _BCRYPT_PROVIDER_NAME {
LPWSTR pszProviderName;
} BCRYPT_PROVIDER_NAME;
typedef struct _BCRYPT_PSS_PADDING_INFO {
LPCWSTR pszAlgId;
ULONG cbSalt;
} BCRYPT_PSS_PADDING_INFO;
typedef struct _BCRYPT_RSAKEY_BLOB {
ULONG Magic;
ULONG BitLength;
ULONG cbPublicExp;
ULONG cbModulus;
ULONG cbPrime1;
ULONG cbPrime2;
} BCRYPT_RSAKEY_BLOB;
typedef struct _BCryptBuffer {
ULONG cbBuffer;
ULONG BufferType;
PVOID pvBuffer;
} BCryptBuffer, *PBCryptBuffer;
typedef struct _BCryptBufferDesc {
ULONG ulVersion;
ULONG cBuffers;
PBCryptBuffer pBuffers;
} BCryptBufferDesc, *PBCryptBufferDesc;
typedef struct _CRYPT_CONTEXTS {
ULONG cContexts;
PWSTR rgpszContexts;
} CRYPT_CONTEXTS, *PCRYPT_CONTEXTS;
typedef struct _CRYPT_CONTEXT_CONFIG {
ULONG dwFlags;
} CRYPT_CONTEXT_CONFIG, *PCRYPT_CONTEXT_CONFIG;
typedef struct _CRYPT_CONTEXT_FUNCTIONS {
ULONG cFunctions;
PWSTR rgpszFunctions;
} CRYPT_CONTEXT_FUNCTIONS, *PCRYPT_CONTEXT_FUNCTIONS;
typedef struct _CRYPT_CONTEXT_FUNCTION_CONFIG {
ULONG dwFlags;
} CRYPT_CONTEXT_FUNCTION_CONFIG, *PCRYPT_CONTEXT_FUNCTION_CONFIG;
typedef struct _CRYPT_CONTEXT_FUNCTION_PROVIDERS {
ULONG cProviders;
PWSTR *rgpszProviders;
} CRYPT_CONTEXT_FUNCTION_PROVIDERS, *PCRYPT_CONTEXT_FUNCTION_PROVIDERS;
typedef struct _CRYPT_INTERFACE_REG {
ULONG dwInterface;
ULONG dwFlags;
ULONG cFunctions;
PWSTR *rgpszFunctions;
} CRYPT_INTERFACE_REG, *PCRYPT_INTERFACE_REG;
typedef struct _CRYPT_IMAGE_REG {
PWSTR pszImage;
ULONG cInterfaces;
PCRYPT_INTERFACE_REG *rgpInterfaces;
} CRYPT_IMAGE_REG, *PCRYPT_IMAGE_REG;
typedef struct _CRYPT_IMAGE_REF {
PWSTR pszImage;
ULONG dwFlags;
} CRYPT_IMAGE_REF, *PCRYPT_IMAGE_REF;
typedef struct _CRYPT_PROPERTY_REF {
PWSTR pszProperty;
ULONG cbValue;
PUCHAR pbValue;
} CRYPT_PROPERTY_REF, *PCRYPT_PROPERTY_REF;
typedef struct _CRYPT_PROVIDERS {
ULONG cProviders;
PWSTR *rgpszProviders;
} CRYPT_PROVIDERS, *PCRYPT_PROVIDERS;
typedef struct _CRYPT_PROVIDER_REG {
ULONG cAliases;
PWSTR *rgpszAliases;
PCRYPT_IMAGE_REG pUM;
PCRYPT_IMAGE_REG pKM;
} CRYPT_PROVIDER_REG, *PCRYPT_PROVIDER_REG;
typedef struct _CRYPT_PROVIDER_REF {
ULONG dwInterface;
PWSTR pszFunction;
PWSTR pszProvider;
ULONG cProperties;
PCRYPT_PROPERTY_REF *rgpProperties;
PCRYPT_IMAGE_REF pUM;
PCRYPT_IMAGE_REF pKM;
} CRYPT_PROVIDER_REF, *PCRYPT_PROVIDER_REF;
typedef struct _CRYPT_PROVIDER_REFS {
ULONG cProviders;
PCRYPT_PROVIDER_REF *rgpProviders;
} CRYPT_PROVIDER_REFS, *PCRYPT_PROVIDER_REFS;
NTSTATUS WINAPI BCryptAddContextFunction(
ULONG dwTable,
LPCWSTR pszContext,
ULONG dwInterface,
LPCWSTR pszFunction,
ULONG dwPosition
);
NTSTATUS WINAPI BCryptCloseAlgorithmProvider(
BCRYPT_ALG_HANDLE hAlgorithm,
ULONG dwFlags
);
NTSTATUS WINAPI BCryptConfigureContext(
ULONG dwTable,
LPCWSTR pszContext,
PCRYPT_CONTEXT_CONFIG pConfig
);
NTSTATUS WINAPI BCryptConfigureContextFunction(
ULONG dwTable,
LPCWSTR pszContext,
ULONG dwInterface,
LPCWSTR pszFunction,
PCRYPT_CONTEXT_FUNCTION_CONFIG pConfig
);
NTSTATUS WINAPI BCryptCreateContext(
ULONG dwTable,
LPCWSTR pszContext,
PCRYPT_CONTEXT_CONFIG pConfig
);
NTSTATUS WINAPI BCryptCreateHash(
BCRYPT_ALG_HANDLE hAlgorithm,
BCRYPT_HASH_HANDLE *phHash,
PUCHAR pbHashObject,
ULONG cbHashObject,
PUCHAR pbSecret,
ULONG cbSecret,
ULONG dwFlags
);
NTSTATUS WINAPI BCryptDecrypt(
BCRYPT_KEY_HANDLE hKey,
PUCHAR pbInput,
ULONG cbInput,
VOID *pPaddingInfo,
PUCHAR pbIV,
ULONG cbIV,
PUCHAR pbOutput,
ULONG cbOutput,
ULONG *pcbResult,
ULONG dwFlags
);
NTSTATUS WINAPI BCryptDeleteContext(
ULONG dwTable,
LPCWSTR pszContext
);
NTSTATUS WINAPI BCryptDeriveKey(
BCRYPT_SECRET_HANDLE hSharedSecret,
LPCWSTR pwszKDF,
BCryptBufferDesc *pParameterList,
PUCHAR pbDerivedKey,
ULONG cbDerivedKey,
ULONG *pcbResult,
ULONG dwFlags
);
NTSTATUS WINAPI BCryptDestroyHash(
BCRYPT_HASH_HANDLE hHash
);
NTSTATUS WINAPI BCryptDestroyKey(
BCRYPT_KEY_HANDLE hKey
);
NTSTATUS WINAPI BCryptDuplicateHash(
BCRYPT_HASH_HANDLE hHash,
BCRYPT_HASH_HANDLE *phNewHash,
PUCHAR pbHashObject,
ULONG cbHashObject,
ULONG dwFlags
);
NTSTATUS WINAPI BCryptDuplicateKey(
BCRYPT_KEY_HANDLE hKey,
BCRYPT_KEY_HANDLE *phNewKey,
PUCHAR pbKeyObject,
ULONG cbKeyObject,
ULONG dwFlags
);
NTSTATUS WINAPI BCryptEnumAlgorithms(
ULONG dwAlgOperations,
ULONG *pAlgCount,
BCRYPT_ALGORITHM_IDENTIFIER **ppAlgList,
ULONG dwFlags
);
NTSTATUS WINAPI BCryptEnumContexts(
ULONG dwTable,
ULONG *pcbBuffer,
PCRYPT_CONTEXTS *ppBuffer
);
NTSTATUS WINAPI BCryptEnumContextFunctions(
ULONG dwTable,
LPCWSTR pszContext,
ULONG dwInterface,
ULONG *pcbBuffer,
PCRYPT_CONTEXT_FUNCTIONS *ppBuffer
);
NTSTATUS WINAPI BCryptEnumContextFunctionProviders(
ULONG dwTable,
LPCWSTR pszContext,
ULONG dwInterface,
LPCWSTR pszFunction,
ULONG *pcbBuffer,
PCRYPT_CONTEXT_FUNCTION_PROVIDERS *ppBuffer
);
NTSTATUS WINAPI BCryptEnumProviders(
LPCWSTR pszAlgId,
ULONG *pImplCount,
BCRYPT_PROVIDER_NAME **ppImplList,
ULONG dwFlags
);
NTSTATUS WINAPI BCryptEnumRegisteredProviders(
ULONG *pcbBuffer,
PCRYPT_PROVIDERS *ppBuffer
);
NTSTATUS WINAPI BCryptEncrypt(
BCRYPT_KEY_HANDLE hKey,
PUCHAR pbInput,
ULONG cbInput,
VOID *pPaddingInfo,
PUCHAR pbIV,
ULONG cbIV,
PUCHAR pbOutput,
ULONG cbOutput,
ULONG *pcbResult,
ULONG dwFlags
);
NTSTATUS WINAPI BCryptExportKey(
BCRYPT_KEY_HANDLE hKey,
BCRYPT_KEY_HANDLE hExportKey,
LPCWSTR pszBlobType,
PUCHAR pbOutput,
ULONG cbOutput,
ULONG *pcbResult,
ULONG dwFlags
);
NTSTATUS WINAPI BCryptFinishHash(
BCRYPT_HASH_HANDLE hHash,
PUCHAR pbOutput,
ULONG cbOutput,
ULONG dwFlags
);
VOID WINAPI BCryptFreeBuffer(
PVOID pvBuffer
);
NTSTATUS WINAPI BCryptGenerateKeyPair(
BCRYPT_ALG_HANDLE hAlgorithm,
BCRYPT_KEY_HANDLE *phKey,
ULONG dwLength,
ULONG dwFlags
);
NTSTATUS WINAPI BCryptGenerateSymmetricKey(
BCRYPT_ALG_HANDLE hAlgorithm,
BCRYPT_KEY_HANDLE *phKey,
PUCHAR pbKeyObject,
ULONG cbKeyObject,
PUCHAR pbSecret,
ULONG cbSecret,
ULONG dwFlags
);
NTSTATUS WINAPI BCryptGenRandom(
BCRYPT_ALG_HANDLE hAlgorithm,
PUCHAR pbBuffer,
ULONG cbBuffer,
ULONG dwFlags
);
NTSTATUS WINAPI BCryptGetFipsAlgorithmMode(
BOOLEAN *pfEnabled
);
NTSTATUS WINAPI BCryptGetProperty(
BCRYPT_HANDLE hObject,
LPCWSTR pszProperty,
PUCHAR pbOutput,
ULONG cbOutput,
ULONG *pcbResult,
ULONG dwFlags
);
NTSTATUS WINAPI BCryptHashData(
BCRYPT_HASH_HANDLE hHash,
PUCHAR pbInput,
ULONG cbInput,
ULONG dwFlags
);
NTSTATUS WINAPI BCryptImportKey(
BCRYPT_ALG_HANDLE hAlgorithm,
BCRYPT_KEY_HANDLE hImportKey,
LPCWSTR pszBlobType,
BCRYPT_KEY_HANDLE *phKey,
PUCHAR pbKeyObject,
ULONG cbKeyObject,
PUCHAR pbInput,
ULONG cbInput,
ULONG dwFlags
);
NTSTATUS WINAPI BCryptImportKeyPair(
BCRYPT_ALG_HANDLE hAlgorithm,
BCRYPT_KEY_HANDLE hImportKey,
LPCWSTR pszBlobType,
BCRYPT_KEY_HANDLE *phKey,
PUCHAR pbInput,
ULONG cbInput,
ULONG dwFlags
);
NTSTATUS WINAPI BCryptFinalizeKeyPair(
BCRYPT_KEY_HANDLE hKey,
ULONG dwFlags
);
NTSTATUS WINAPI BCryptOpenAlgorithmProvider(
BCRYPT_ALG_HANDLE *phAlgorithm,
LPCWSTR pszAlgId,
LPCWSTR pszImplementation,
DWORD dwFlags
);
NTSTATUS WINAPI BCryptQueryContextConfiguration(
ULONG dwTable,
LPCWSTR pszContext,
ULONG *pcbBuffer,
PCRYPT_CONTEXT_CONFIG *ppBuffer
);
NTSTATUS WINAPI BCryptQueryContextFunctionConfiguration(
ULONG dwTable,
LPCWSTR pszContext,
ULONG dwInterface,
LPCWSTR pszFunction,
ULONG *pcbBuffer,
PCRYPT_CONTEXT_FUNCTION_CONFIG *ppBuffer
);
NTSTATUS WINAPI BCryptQueryContextFunctionProperty(
ULONG dwTable,
LPCWSTR pszContext,
ULONG dwInterface,
LPCWSTR pszFunction,
LPCWSTR pszProperty,
ULONG *pcbValue,
PUCHAR *ppbValue
);
NTSTATUS WINAPI BCryptQueryProviderRegistration(
LPCWSTR pszProvider,
ULONG dwMode,
ULONG dwInterface,
ULONG *pcbBuffer,
PCRYPT_PROVIDER_REG *ppBuffer
);
/* Kernel mode
NTSTATUS WINAPI BCryptRegisterConfigChangeNotify(
PRKEVENT phEvent
);
NTSTATUS WINAPI BCryptUnregisterConfigChangeNotify(
PRKEVENT hEvent
);
*/
NTSTATUS WINAPI BCryptRegisterConfigChangeNotify(
HANDLE *phEvent
);
NTSTATUS WINAPI BCryptUnregisterConfigChangeNotify(
HANDLE hEvent
);
NTSTATUS WINAPI BCryptRemoveContextFunction(
ULONG dwTable,
LPCWSTR pszContext,
ULONG dwInterface,
LPCWSTR pszFunction
);
NTSTATUS WINAPI BCryptResolveProviders(
LPCWSTR pszContext,
ULONG dwInterface,
LPCWSTR pszFunction,
LPCWSTR pszProvider,
ULONG dwMode,
ULONG dwFlags,
ULONG *pcbBuffer,
PCRYPT_PROVIDER_REFS *ppBuffer
);
NTSTATUS WINAPI BCryptSecretAgreement(
BCRYPT_KEY_HANDLE hPrivKey,
BCRYPT_KEY_HANDLE hPubKey,
BCRYPT_SECRET_HANDLE *phSecret,
ULONG dwFlags
);
NTSTATUS WINAPI BCryptSetContextFunctionProperty(
ULONG dwTable,
LPCWSTR pszContext,
ULONG dwInterface,
LPCWSTR pszFunction,
LPCWSTR pszProperty,
ULONG cbValue,
PUCHAR pbValue
);
NTSTATUS WINAPI BCryptSetProperty(
BCRYPT_HANDLE hObject,
LPCWSTR pszProperty,
PUCHAR pbInput,
ULONG cbInput,
ULONG dwFlags
);
NTSTATUS WINAPI BCryptSignHash(
BCRYPT_KEY_HANDLE hKey,
VOID *pPaddingInfo,
PBYTE pbInput,
DWORD cbInput,
PBYTE pbOutput,
DWORD cbOutput,
DWORD *pcbResult,
ULONG dwFlags
);
NTSTATUS WINAPI BCryptVerifySignature(
BCRYPT_KEY_HANDLE hKey,
VOID *pPaddingInfo,
PUCHAR pbHash,
ULONG cbHash,
PUCHAR pbSignature,
ULONG cbSignature,
ULONG dwFlags
);
#endif /*(_WIN32_WINNT >= 0x0600)*/
#endif /*_INC_BCRYPT*/