274 lines
12 KiB
C
274 lines
12 KiB
C
|
|
//+-------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
//
|
|
// Copyright (C) Microsoft Corporation, 1995 - 1999
|
|
//
|
|
// File: pvkhlpr.h
|
|
//
|
|
// Contents: Private Key Helper API Prototypes and Definitions
|
|
//
|
|
// Note: Base CSP also exports/imports the public key with the
|
|
// private key.
|
|
//
|
|
// APIs: PrivateKeyLoad
|
|
// PrivateKeySave
|
|
// PrivateKeyLoadFromMemory
|
|
// PrivateKeySaveToMemory
|
|
// PrivateKeyAcquireContext
|
|
// PrivateKeyAcquireContextFromMemory
|
|
// PrivateKeyReleaseContext
|
|
// PrivateKeyLoadA
|
|
// PrivateKeySaveA
|
|
// PrivateKeyLoadFromMemoryA
|
|
// PrivateKeySaveToMemoryA
|
|
// PrivateKeyAcquireContextA
|
|
// PrivateKeyAcquireContextFromMemoryA
|
|
// PrivateKeyReleaseContextA
|
|
//
|
|
// History: 10-May-96 philh created
|
|
//--------------------------------------------------------------------------
|
|
|
|
#ifndef __PVKHLPR_H__
|
|
#define __PVKHLPR_H__
|
|
|
|
#include "wincrypt.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#ifndef PRIVATEKEYBLOB
|
|
#define PRIVATEKEYBLOB 0x7
|
|
#endif
|
|
|
|
|
|
//+-------------------------------------------------------------------------
|
|
// Load the AT_SIGNATURE or AT_KEYEXCHANGE private key (and its public key)
|
|
// from the file into the cryptographic provider.
|
|
//
|
|
// If the private key was password encrypted, then, the user is first
|
|
// presented with a dialog box to enter the password.
|
|
//
|
|
// If pdwKeySpec is non-Null, then, if *pdwKeySpec is nonzero, verifies the
|
|
// key type before loading. Sets LastError to PVK_HELPER_WRONG_KEY_TYPE for
|
|
// a mismatch. *pdwKeySpec is updated with the key type.
|
|
//
|
|
// dwFlags is passed through to CryptImportKey.
|
|
//--------------------------------------------------------------------------
|
|
BOOL WINAPI
|
|
PvkPrivateKeyLoad(IN HCRYPTPROV hCryptProv,
|
|
IN HANDLE hFile,
|
|
IN HWND hwndOwner,
|
|
IN LPCWSTR pwszKeyName, // name used in dialog
|
|
IN DWORD dwFlags,
|
|
IN OUT OPTIONAL DWORD *pdwKeySpec);
|
|
|
|
BOOL WINAPI
|
|
PvkPrivateKeyLoadA(IN HCRYPTPROV hCryptProv,
|
|
IN HANDLE hFile,
|
|
IN HWND hwndOwner,
|
|
IN LPCTSTR pwszKeyName, // name used in dialog
|
|
IN DWORD dwFlags,
|
|
IN OUT OPTIONAL DWORD *pdwKeySpec);
|
|
|
|
//+-------------------------------------------------------------------------
|
|
// Save the AT_SIGNATURE or AT_KEYEXCHANGE private key (and its public key)
|
|
// to the specified file.
|
|
//
|
|
// The user is presented with a dialog box to enter an optional password to
|
|
// encrypt the private key.
|
|
//
|
|
// dwFlags is passed through to CryptExportKey.
|
|
//--------------------------------------------------------------------------
|
|
BOOL WINAPI
|
|
PvkPrivateKeySave(IN HCRYPTPROV hCryptProv,
|
|
IN HANDLE hFile,
|
|
IN DWORD dwKeySpec, // either AT_SIGNATURE or AT_KEYEXCHANGE
|
|
IN HWND hwndOwner,
|
|
IN LPCWSTR pwszKeyName, // name used in dialog
|
|
IN DWORD dwFlags);
|
|
|
|
BOOL WINAPI
|
|
PvkPrivateKeySaveA(IN HCRYPTPROV hCryptProv,
|
|
IN HANDLE hFile,
|
|
IN DWORD dwKeySpec, // either AT_SIGNATURE or AT_KEYEXCHANGE
|
|
IN HWND hwndOwner,
|
|
IN LPCTSTR pwszKeyName, // name used in dialog
|
|
IN DWORD dwFlags);
|
|
//+-------------------------------------------------------------------------
|
|
// Load the AT_SIGNATURE or AT_KEYEXCHANGE private key (and its public key)
|
|
// from memory into the cryptographic provider.
|
|
//
|
|
// Except for the key being loaded from memory, identical to PrivateKeyLoad.
|
|
//--------------------------------------------------------------------------
|
|
BOOL WINAPI
|
|
PvkPrivateKeyLoadFromMemory(IN HCRYPTPROV hCryptProv,
|
|
IN BYTE *pbData,
|
|
IN DWORD cbData,
|
|
IN HWND hwndOwner,
|
|
IN LPCWSTR pwszKeyName, // name used in dialog
|
|
IN DWORD dwFlags,
|
|
IN OUT OPTIONAL DWORD *pdwKeySpec);
|
|
|
|
BOOL WINAPI
|
|
PvkPrivateKeyLoadFromMemoryA(IN HCRYPTPROV hCryptProv,
|
|
IN BYTE *pbData,
|
|
IN DWORD cbData,
|
|
IN HWND hwndOwner,
|
|
IN LPCTSTR pwszKeyName, // name used in dialog
|
|
IN DWORD dwFlags,
|
|
IN OUT OPTIONAL DWORD *pdwKeySpec);
|
|
|
|
//+-------------------------------------------------------------------------
|
|
// Save the AT_SIGNATURE or AT_KEYEXCHANGE private key (and its public key)
|
|
// to memory.
|
|
//
|
|
// If pbData == NULL || *pcbData == 0, calculates the length and doesn't
|
|
// return an error (also, the user isn't prompted for a password).
|
|
//
|
|
// Except for the key being saved to memory, identical to PrivateKeySave.
|
|
//--------------------------------------------------------------------------
|
|
BOOL WINAPI
|
|
PvkPrivateKeySaveToMemory(IN HCRYPTPROV hCryptProv,
|
|
IN DWORD dwKeySpec, // either AT_SIGNATURE or AT_KEYEXCHANGE
|
|
IN HWND hwndOwner,
|
|
IN LPCWSTR pwszKeyName, // name used in dialog
|
|
IN DWORD dwFlags,
|
|
OUT BYTE *pbData,
|
|
IN OUT DWORD *pcbData);
|
|
|
|
BOOL WINAPI
|
|
PvkPrivateKeySaveToMemoryA(IN HCRYPTPROV hCryptProv,
|
|
IN DWORD dwKeySpec, // either AT_SIGNATURE or AT_KEYEXCHANGE
|
|
IN HWND hwndOwner,
|
|
IN LPCTSTR pwszKeyName, // name used in dialog
|
|
IN DWORD dwFlags,
|
|
OUT BYTE *pbData,
|
|
IN OUT DWORD *pcbData);
|
|
|
|
//+-------------------------------------------------------------------------
|
|
// Creates a temporary container in the provider and loads the private key
|
|
// from the specified file.
|
|
// For success, returns a handle to a cryptographic provider for the private
|
|
// key and the name of the temporary container. PrivateKeyReleaseContext must
|
|
// be called to release the hCryptProv and delete the temporary container.
|
|
//
|
|
// PrivateKeyLoad is called to load the private key into the temporary
|
|
// container.
|
|
//--------------------------------------------------------------------------
|
|
BOOL WINAPI
|
|
PvkPrivateKeyAcquireContext(IN LPCWSTR pwszProvName,
|
|
IN DWORD dwProvType,
|
|
IN HANDLE hFile,
|
|
IN HWND hwndOwner,
|
|
IN LPCWSTR pwszKeyName, // name used in dialog
|
|
IN OUT OPTIONAL DWORD *pdwKeySpec,
|
|
OUT HCRYPTPROV *phCryptProv,
|
|
OUT LPWSTR *ppwszTmpContainer
|
|
);
|
|
|
|
BOOL WINAPI
|
|
PvkPrivateKeyAcquireContextA(IN LPCTSTR pwszProvName,
|
|
IN DWORD dwProvType,
|
|
IN HANDLE hFile,
|
|
IN HWND hwndOwner,
|
|
IN LPCTSTR pwszKeyName, // name used in dialog
|
|
IN OUT OPTIONAL DWORD *pdwKeySpec,
|
|
OUT HCRYPTPROV *phCryptProv,
|
|
OUT LPTSTR *ppwszTmpContainer);
|
|
//+-------------------------------------------------------------------------
|
|
// Creates a temporary container in the provider and loads the private key
|
|
// from memory.
|
|
// For success, returns a handle to a cryptographic provider for the private
|
|
// key and the name of the temporary container. PrivateKeyReleaseContext must
|
|
// be called to release the hCryptProv and delete the temporary container.
|
|
//
|
|
// PrivateKeyLoadFromMemory is called to load the private key into the
|
|
// temporary container.
|
|
//--------------------------------------------------------------------------
|
|
BOOL WINAPI
|
|
PvkPrivateKeyAcquireContextFromMemory(IN LPCWSTR pwszProvName,
|
|
IN DWORD dwProvType,
|
|
IN BYTE *pbData,
|
|
IN DWORD cbData,
|
|
IN HWND hwndOwner,
|
|
IN LPCWSTR pwszKeyName, // name used in dialog
|
|
IN OUT OPTIONAL DWORD *pdwKeySpec,
|
|
OUT HCRYPTPROV *phCryptProv,
|
|
OUT LPWSTR *ppwszTmpContainer);
|
|
|
|
BOOL WINAPI
|
|
PvkPrivateKeyAcquireContextFromMemoryA(IN LPCTSTR pwszProvName,
|
|
IN DWORD dwProvType,
|
|
IN BYTE *pbData,
|
|
IN DWORD cbData,
|
|
IN HWND hwndOwner,
|
|
IN LPCTSTR pwszKeyName, // name used in dialog
|
|
IN OUT OPTIONAL DWORD *pdwKeySpec,
|
|
OUT HCRYPTPROV *phCryptProv,
|
|
OUT LPTSTR *ppwszTmpContainer);
|
|
|
|
//+-------------------------------------------------------------------------
|
|
// Releases the cryptographic provider and deletes the temporary container
|
|
// created by PrivateKeyAcquireContext or PrivateKeyAcquireContextFromMemory.
|
|
//--------------------------------------------------------------------------
|
|
BOOL WINAPI
|
|
PvkPrivateKeyReleaseContext(IN HCRYPTPROV hCryptProv,
|
|
IN LPCWSTR pwszProvName,
|
|
IN DWORD dwProvType,
|
|
IN LPWSTR pwszTmpContainer);
|
|
|
|
BOOL WINAPI
|
|
PvkPrivateKeyReleaseContextA(IN HCRYPTPROV hCryptProv,
|
|
IN LPCTSTR pwszProvName,
|
|
IN DWORD dwProvType,
|
|
IN LPTSTR pwszTmpContainer);
|
|
|
|
//+-------------------------------------------------------------------------
|
|
// Acquiring hprovs, Trys the file first and then the KeyContainer. Use
|
|
// PvkFreeCryptProv to release HCRYPTPROV and resources.
|
|
//--------------------------------------------------------------------------
|
|
HCRYPTPROV WINAPI
|
|
PvkGetCryptProvA(IN HWND hwnd,
|
|
IN LPCSTR pszCaption,
|
|
IN LPCSTR pszCapiProvider,
|
|
IN DWORD dwProviderType,
|
|
IN LPCSTR pszPrivKey,
|
|
OUT LPSTR *ppszTmpContainer);
|
|
|
|
void WINAPI
|
|
PvkFreeCryptProvA(IN HCRYPTPROV hProv,
|
|
IN LPCSTR pszCapiProvider,
|
|
IN DWORD dwProviderType,
|
|
IN LPSTR pszTmpContainer);
|
|
|
|
HCRYPTPROV WINAPI
|
|
PvkGetCryptProvU(IN HWND hwnd,
|
|
IN LPCWSTR pwszCaption,
|
|
IN LPCWSTR pwszCapiProvider,
|
|
IN DWORD dwProviderType,
|
|
IN LPCWSTR pwszPrivKey,
|
|
OUT LPWSTR *ppwszTmpContainer);
|
|
|
|
void WINAPI
|
|
PvkFreeCryptProvU(IN HCRYPTPROV hProv,
|
|
IN LPCWSTR pwszCapiProvider,
|
|
IN DWORD dwProviderType,
|
|
IN LPWSTR pwszTmpContainer);
|
|
|
|
//+-------------------------------------------------------------------------
|
|
// Private Key helper error codes
|
|
//--------------------------------------------------------------------------
|
|
#define PVK_HELPER_BAD_PARAMETER 0x80097001
|
|
#define PVK_HELPER_BAD_PVK_FILE 0x80097002
|
|
#define PVK_HELPER_WRONG_KEY_TYPE 0x80097003
|
|
#define PVK_HELPER_PASSWORD_CANCEL 0x80097004
|
|
|
|
#ifdef __cplusplus
|
|
} // Balance extern "C" above
|
|
#endif
|
|
|
|
#endif
|