472 lines
6.9 KiB
C
472 lines
6.9 KiB
C
|
/*++
|
||
|
|
||
|
Copyright (c) 1997 Microsoft Corporation
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
iiscrypt.h
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
This include file contains public constants, type definitions, and
|
||
|
function prototypes for the IIS cryptographic routines.
|
||
|
|
||
|
Author:
|
||
|
|
||
|
Keith Moore (keithmo) 02-Dec-1996
|
||
|
|
||
|
Revision History:
|
||
|
|
||
|
--*/
|
||
|
|
||
|
|
||
|
#ifndef _IISCRYPT_H_
|
||
|
#define _IISCRYPT_H_
|
||
|
|
||
|
|
||
|
//
|
||
|
// Get the dependent include files.
|
||
|
//
|
||
|
|
||
|
#include <windows.h>
|
||
|
#include <wincrypt.h>
|
||
|
#include <iiscblob.h>
|
||
|
|
||
|
|
||
|
//
|
||
|
// Define API decoration, should we ever move these routines into a DLL.
|
||
|
//
|
||
|
|
||
|
#define IIS_CRYPTO_API
|
||
|
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C" {
|
||
|
#endif // __cplusplus
|
||
|
|
||
|
|
||
|
//
|
||
|
// A NULL crypto handle, mysteriously absent from wincrypt.h.
|
||
|
//
|
||
|
|
||
|
#define CRYPT_NULL 0
|
||
|
|
||
|
|
||
|
//
|
||
|
// Initialization/termination functions.
|
||
|
//
|
||
|
|
||
|
IIS_CRYPTO_API
|
||
|
HRESULT
|
||
|
WINAPI
|
||
|
IISCryptoInitialize(
|
||
|
VOID
|
||
|
);
|
||
|
|
||
|
IIS_CRYPTO_API
|
||
|
HRESULT
|
||
|
WINAPI
|
||
|
IISCryptoTerminate(
|
||
|
VOID
|
||
|
);
|
||
|
|
||
|
|
||
|
|
||
|
// special function for programatically disabling encryption for French case
|
||
|
VOID
|
||
|
WINAPI
|
||
|
IISCryptoInitializeOverride(
|
||
|
BOOL flag
|
||
|
);
|
||
|
|
||
|
|
||
|
|
||
|
//
|
||
|
// Memory allocation functions. Clients may provide their own
|
||
|
// definitions of these routines if necessary.
|
||
|
//
|
||
|
|
||
|
PVOID
|
||
|
WINAPI
|
||
|
IISCryptoAllocMemory(
|
||
|
IN DWORD Size
|
||
|
);
|
||
|
|
||
|
VOID
|
||
|
WINAPI
|
||
|
IISCryptoFreeMemory(
|
||
|
IN PVOID Buffer
|
||
|
);
|
||
|
|
||
|
|
||
|
//
|
||
|
// Container functions.
|
||
|
//
|
||
|
|
||
|
IIS_CRYPTO_API
|
||
|
HRESULT
|
||
|
WINAPI
|
||
|
IISCryptoGetStandardContainer(
|
||
|
OUT HCRYPTPROV * phProv,
|
||
|
IN DWORD dwAdditionalFlags
|
||
|
);
|
||
|
|
||
|
IIS_CRYPTO_API
|
||
|
HRESULT
|
||
|
WINAPI
|
||
|
IISCryptoGetStandardContainer2(
|
||
|
OUT HCRYPTPROV * phProv
|
||
|
);
|
||
|
|
||
|
IIS_CRYPTO_API
|
||
|
HRESULT
|
||
|
WINAPI
|
||
|
IISCryptoGetContainerByName(
|
||
|
OUT HCRYPTPROV * phProv,
|
||
|
IN LPTSTR pszContainerName,
|
||
|
IN DWORD dwAdditionalFlags,
|
||
|
IN BOOL fApplyAcl
|
||
|
);
|
||
|
|
||
|
IIS_CRYPTO_API
|
||
|
HRESULT
|
||
|
WINAPI
|
||
|
IISCryptoDeleteStandardContainer(
|
||
|
IN DWORD dwAdditionalFlags
|
||
|
);
|
||
|
|
||
|
IIS_CRYPTO_API
|
||
|
HRESULT
|
||
|
WINAPI
|
||
|
IISCryptoDeleteContainerByName(
|
||
|
IN LPTSTR pszContainerName,
|
||
|
IN DWORD dwAdditionalFlags
|
||
|
);
|
||
|
|
||
|
IIS_CRYPTO_API
|
||
|
HRESULT
|
||
|
WINAPI
|
||
|
IISCryptoCloseContainer(
|
||
|
IN HCRYPTPROV hProv
|
||
|
);
|
||
|
|
||
|
|
||
|
//
|
||
|
// Key manipulation functions.
|
||
|
//
|
||
|
IIS_CRYPTO_API
|
||
|
HRESULT
|
||
|
WINAPI
|
||
|
IISCryptoGetKeyDeriveKey2(
|
||
|
OUT HCRYPTKEY * phKey,
|
||
|
IN HCRYPTPROV hProv,
|
||
|
IN HCRYPTHASH hHash
|
||
|
);
|
||
|
|
||
|
IIS_CRYPTO_API
|
||
|
HRESULT
|
||
|
WINAPI
|
||
|
IISCryptoGetKeyExchangeKey(
|
||
|
OUT HCRYPTKEY * phKey,
|
||
|
IN HCRYPTPROV hProv
|
||
|
);
|
||
|
|
||
|
IIS_CRYPTO_API
|
||
|
HRESULT
|
||
|
WINAPI
|
||
|
IISCryptoGetSignatureKey(
|
||
|
OUT HCRYPTKEY * phKey,
|
||
|
IN HCRYPTPROV hProv
|
||
|
);
|
||
|
|
||
|
IIS_CRYPTO_API
|
||
|
HRESULT
|
||
|
WINAPI
|
||
|
IISCryptoGenerateSessionKey(
|
||
|
OUT HCRYPTKEY * phKey,
|
||
|
IN HCRYPTPROV hProv
|
||
|
);
|
||
|
|
||
|
IIS_CRYPTO_API
|
||
|
HRESULT
|
||
|
WINAPI
|
||
|
IISCryptoCloseKey(
|
||
|
IN HCRYPTKEY hKey
|
||
|
);
|
||
|
|
||
|
|
||
|
//
|
||
|
// Hash manipulation functions.
|
||
|
//
|
||
|
|
||
|
IIS_CRYPTO_API
|
||
|
HRESULT
|
||
|
WINAPI
|
||
|
IISCryptoCreateHash(
|
||
|
OUT HCRYPTHASH * phHash,
|
||
|
IN HCRYPTPROV hProv
|
||
|
);
|
||
|
|
||
|
IIS_CRYPTO_API
|
||
|
HRESULT
|
||
|
WINAPI
|
||
|
IISCryptoDestroyHash(
|
||
|
IN HCRYPTHASH hHash
|
||
|
);
|
||
|
|
||
|
IIS_CRYPTO_API
|
||
|
HRESULT
|
||
|
WINAPI
|
||
|
IISCryptoHashData(
|
||
|
IN HCRYPTHASH hHash,
|
||
|
IN PVOID pBuffer,
|
||
|
IN DWORD dwBufferLength
|
||
|
);
|
||
|
|
||
|
IIS_CRYPTO_API
|
||
|
HRESULT
|
||
|
WINAPI
|
||
|
IISCryptoHashSessionKey(
|
||
|
IN HCRYPTHASH hHash,
|
||
|
IN HCRYPTKEY hSessionKey
|
||
|
);
|
||
|
|
||
|
|
||
|
//
|
||
|
// Generic blob manipulators.
|
||
|
//
|
||
|
|
||
|
#define IISCryptoGetBlobLength(p) (((p)->BlobDataLength) + sizeof(*(p)))
|
||
|
|
||
|
IIS_CRYPTO_API
|
||
|
HRESULT
|
||
|
WINAPI
|
||
|
IISCryptoReadBlobFromRegistry(
|
||
|
OUT PIIS_CRYPTO_BLOB * ppBlob,
|
||
|
IN HKEY hRegistryKey,
|
||
|
IN LPCTSTR pszRegistryValueName
|
||
|
);
|
||
|
|
||
|
IIS_CRYPTO_API
|
||
|
HRESULT
|
||
|
WINAPI
|
||
|
IISCryptoWriteBlobToRegistry(
|
||
|
IN PIIS_CRYPTO_BLOB pBlob,
|
||
|
IN HKEY hRegistryKey,
|
||
|
IN LPCTSTR pszRegistryValueName
|
||
|
);
|
||
|
|
||
|
IIS_CRYPTO_API
|
||
|
BOOL
|
||
|
WINAPI
|
||
|
IISCryptoIsValidBlob(
|
||
|
IN PIIS_CRYPTO_BLOB pBlob
|
||
|
);
|
||
|
|
||
|
IIS_CRYPTO_API
|
||
|
BOOL
|
||
|
WINAPI
|
||
|
IISCryptoIsValidBlob2(
|
||
|
IN PIIS_CRYPTO_BLOB pBlob
|
||
|
);
|
||
|
|
||
|
IIS_CRYPTO_API
|
||
|
HRESULT
|
||
|
WINAPI
|
||
|
IISCryptoFreeBlob(
|
||
|
IN PIIS_CRYPTO_BLOB pBlob
|
||
|
);
|
||
|
|
||
|
IIS_CRYPTO_API
|
||
|
HRESULT
|
||
|
WINAPI
|
||
|
IISCryptoFreeBlob2(
|
||
|
IN PIIS_CRYPTO_BLOB pBlob
|
||
|
);
|
||
|
|
||
|
IIS_CRYPTO_API
|
||
|
BOOL
|
||
|
WINAPI
|
||
|
IISCryptoCompareBlobs(
|
||
|
IN PIIS_CRYPTO_BLOB pBlob1,
|
||
|
IN PIIS_CRYPTO_BLOB pBlob2
|
||
|
);
|
||
|
|
||
|
IIS_CRYPTO_API
|
||
|
HRESULT
|
||
|
WINAPI
|
||
|
IISCryptoCloneBlobFromRawData(
|
||
|
OUT PIIS_CRYPTO_BLOB * ppBlob,
|
||
|
IN PBYTE pRawBlob,
|
||
|
IN DWORD dwRawBlobLength
|
||
|
);
|
||
|
|
||
|
IIS_CRYPTO_API
|
||
|
HRESULT
|
||
|
WINAPI
|
||
|
IISCryptoCloneBlobFromRawData2(
|
||
|
OUT PIIS_CRYPTO_BLOB * ppBlob,
|
||
|
IN PBYTE pRawBlob,
|
||
|
IN DWORD dwRawBlobLength
|
||
|
);
|
||
|
|
||
|
IIS_CRYPTO_API
|
||
|
HRESULT
|
||
|
WINAPI
|
||
|
IISCryptoCreateCleartextBlob(
|
||
|
OUT PIIS_CRYPTO_BLOB * ppBlob,
|
||
|
IN PVOID pBlobData,
|
||
|
IN DWORD dwBlobDataLength
|
||
|
);
|
||
|
|
||
|
|
||
|
//
|
||
|
// Key blob functions.
|
||
|
//
|
||
|
|
||
|
IIS_CRYPTO_API
|
||
|
HRESULT
|
||
|
WINAPI
|
||
|
IISCryptoExportSessionKeyBlob(
|
||
|
OUT PIIS_CRYPTO_BLOB * ppSessionKeyBlob,
|
||
|
IN HCRYPTPROV hProv,
|
||
|
IN HCRYPTKEY hSessionKey,
|
||
|
IN HCRYPTKEY hKeyExchangeKey
|
||
|
);
|
||
|
|
||
|
IIS_CRYPTO_API
|
||
|
HRESULT
|
||
|
WINAPI
|
||
|
IISCryptoExportSessionKeyBlob2(
|
||
|
OUT PIIS_CRYPTO_BLOB * ppSessionKeyBlob,
|
||
|
IN HCRYPTPROV hProv,
|
||
|
IN HCRYPTKEY hSessionKey,
|
||
|
IN LPSTR pszPasswd
|
||
|
);
|
||
|
|
||
|
IIS_CRYPTO_API
|
||
|
HRESULT
|
||
|
WINAPI
|
||
|
IISCryptoImportSessionKeyBlob(
|
||
|
OUT HCRYPTKEY * phSessionKey,
|
||
|
IN PIIS_CRYPTO_BLOB pSessionKeyBlob,
|
||
|
IN HCRYPTPROV hProv,
|
||
|
IN HCRYPTKEY hSignatureKey
|
||
|
);
|
||
|
|
||
|
IIS_CRYPTO_API
|
||
|
HRESULT
|
||
|
WINAPI
|
||
|
IISCryptoImportSessionKeyBlob2(
|
||
|
OUT HCRYPTKEY * phSessionKey,
|
||
|
IN PIIS_CRYPTO_BLOB pSessionKeyBlob,
|
||
|
IN HCRYPTPROV hProv,
|
||
|
IN LPSTR pszPasswd
|
||
|
);
|
||
|
|
||
|
IIS_CRYPTO_API
|
||
|
HRESULT
|
||
|
WINAPI
|
||
|
IISCryptoExportPublicKeyBlob(
|
||
|
OUT PIIS_CRYPTO_BLOB * ppPublicKeyBlob,
|
||
|
IN HCRYPTPROV hProv,
|
||
|
IN HCRYPTKEY hPublicKey
|
||
|
);
|
||
|
|
||
|
IIS_CRYPTO_API
|
||
|
HRESULT
|
||
|
WINAPI
|
||
|
IISCryptoImportPublicKeyBlob(
|
||
|
OUT HCRYPTKEY * phPublicKey,
|
||
|
IN PIIS_CRYPTO_BLOB pPublicKeyBlob,
|
||
|
IN HCRYPTPROV hProv
|
||
|
);
|
||
|
|
||
|
|
||
|
//
|
||
|
// Data blob functions.
|
||
|
//
|
||
|
|
||
|
IIS_CRYPTO_API
|
||
|
HRESULT
|
||
|
WINAPI
|
||
|
IISCryptoEncryptDataBlob(
|
||
|
OUT PIIS_CRYPTO_BLOB * ppDataBlob,
|
||
|
IN PVOID pBuffer,
|
||
|
IN DWORD dwBufferLength,
|
||
|
IN DWORD dwRegType,
|
||
|
IN HCRYPTPROV hProv,
|
||
|
IN HCRYPTKEY hSessionKey
|
||
|
);
|
||
|
|
||
|
IIS_CRYPTO_API
|
||
|
HRESULT
|
||
|
WINAPI
|
||
|
IISCryptoEncryptDataBlob2(
|
||
|
OUT PIIS_CRYPTO_BLOB * ppDataBlob,
|
||
|
IN PVOID pBuffer,
|
||
|
IN DWORD dwBufferLength,
|
||
|
IN DWORD dwRegType,
|
||
|
IN HCRYPTPROV hProv,
|
||
|
IN HCRYPTKEY hSessionKey
|
||
|
);
|
||
|
|
||
|
IIS_CRYPTO_API
|
||
|
HRESULT
|
||
|
WINAPI
|
||
|
IISCryptoDecryptDataBlob(
|
||
|
OUT PVOID * ppBuffer,
|
||
|
OUT LPDWORD pdwBufferLength,
|
||
|
OUT LPDWORD pdwRegType,
|
||
|
IN PIIS_CRYPTO_BLOB pDataBlob,
|
||
|
IN HCRYPTPROV hProv,
|
||
|
IN HCRYPTKEY hSessionKey,
|
||
|
IN HCRYPTKEY hSignatureKey
|
||
|
);
|
||
|
|
||
|
IIS_CRYPTO_API
|
||
|
HRESULT
|
||
|
WINAPI
|
||
|
IISCryptoDecryptDataBlob2(
|
||
|
OUT PVOID * ppBuffer,
|
||
|
OUT LPDWORD pdwBufferLength,
|
||
|
OUT LPDWORD pdwRegType,
|
||
|
IN PIIS_CRYPTO_BLOB pDataBlob,
|
||
|
IN HCRYPTPROV hProv,
|
||
|
IN HCRYPTKEY hSessionKey
|
||
|
);
|
||
|
|
||
|
|
||
|
//
|
||
|
// Hash blob functions.
|
||
|
//
|
||
|
|
||
|
IIS_CRYPTO_API
|
||
|
HRESULT
|
||
|
WINAPI
|
||
|
IISCryptoExportHashBlob(
|
||
|
OUT PIIS_CRYPTO_BLOB * ppHashBlob,
|
||
|
IN HCRYPTHASH hHash
|
||
|
);
|
||
|
|
||
|
|
||
|
|
||
|
//
|
||
|
// Simple check function for some special French case
|
||
|
//
|
||
|
|
||
|
BOOL
|
||
|
WINAPI
|
||
|
IISCryptoIsClearTextSignature (
|
||
|
IIS_CRYPTO_BLOB UNALIGNED *pBlob
|
||
|
);
|
||
|
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
} // extern "C"
|
||
|
#endif // __cplusplus
|
||
|
|
||
|
|
||
|
#endif // _IISCRYPT_H_
|
||
|
|