⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cppapi.c

📁 windows的加密api源码
💻 C
📖 第 1 页 / 共 2 页
字号:
/////////////////////////////////////////////////////////////////////////////
//  FILE          : cppapi.c                                               //
//  DESCRIPTION   : Cryptography Provider Private APIs                     //
//  AUTHOR        :                                                        //
//  HISTORY       :                                                        //
//  May  9 1995 larrys  New                                                //
//                                                                         //
//  Copyright (C) 1993 Microsoft Corporation   All Rights Reserved         //
/////////////////////////////////////////////////////////////////////////////

#include <tchar.h>
#include "precomp.h"
#include "ntagimp1.h"
#include "cppapi.h"
#include "resource.h"

#define MAX_STRING_RSC_SIZE			512
#define	MAX_AT_KEY_RSC_SIZE			32

#define SIGN_TXT                    1
#define EXPORT_PRIV_TXT             2
#define GENKEY_NO_OVER_TXT          3
#define GENKEY_OVER_TXT             4
#define IMPORT_SIMPLE_TXT           5
#define IMPORT_PRIV_NO_OVER_TXT     6
#define IMPORT_PRIV_OVER_TXT        7
#define SETKEYPARAM_CHGPWD_TXT      8

extern HINSTANCE hInstance;

typedef struct _DIALOG_INFO
{
    DWORD	dwDialogType;
    LPCTSTR szContainer;
    DWORD	dwKeySpec;
} DIALOG_INFO, *PDIALOG_INFO;

DWORD GetShortFileName(
			HINSTANCE hInstance,
			LPTSTR szText,
			DWORD dwSize)
{
	DWORD dwText;
    TCHAR *psz;
    int i;
	dwText = GetModuleFileName(
		hInstance,
		szText,
		dwSize);

	psz = szText+dwText;		

	for (i=0; ( (*psz != '\\') && (psz != szText)); i++)
		psz--;

	// don't copy the first \, instead copy the end \n 
	MoveMemory(szText, psz+1, i*sizeof(TCHAR));
	return (i*sizeof(TCHAR));
}

/*
void WriteStuff(LPCSTR sz, DWORD dw, BOOL f)
{
    HANDLE hFile;
    DWORD dw1;
    BOOL fResult;

    if( INVALID_HANDLE_VALUE == (hFile = CreateFile("stuff", GENERIC_WRITE,
	    FILE_SHARE_READ | FILE_SHARE_WRITE,
	    NULL, OPEN_ALWAYS, 0, NULL)))
        goto Ret;
    if (f)
    {
	    if (!(fResult = WriteFile(hFile, sz, strlen(sz), &dw1, NULL)))
	        goto Ret;
    }
    else
    {
	    if (!(fResult = WriteFile(hFile, &dw, sizeof(DWORD), &dw1, NULL)))
	        goto Ret;
    }
Ret:
    if (hFile)
	    CloseHandle(hFile);
}
*/
#ifdef _USE_UI

BOOL GetDialogInfo(
                   IN PNTAGUserList pTmpUser,
                   IN DWORD dwDialogType,
                   IN DWORD dwKeySpec,
                   IN OUT PDIALOG_INFO pInfo
                   )
{
    pInfo->dwDialogType = dwDialogType;
    pInfo->dwKeySpec = dwKeySpec;
    pInfo->szContainer = pTmpUser->szUserName;
    return TRUE;
}

LRESULT CALLBACK DialogSolicitPassword(
                                       HWND hDlg,
                                       UINT message,
                                       WPARAM wParam,
                                       LPARAM lParam
                                       )
{
	TCHAR	szText[MAX_STRING_RSC_SIZE];
    TCHAR	szKeyType[MAX_AT_KEY_RSC_SIZE];
	TCHAR	szCallerName[MAX_PATH];
	TCHAR*	pszFinalText = NULL;
	TCHAR	szBoxText[MAX_STRING_RSC_SIZE];

	LPCTSTR list[3];

	UINT	uiKeyText = 0;
	UINT	uiBoxText = 0;
	PDIALOG_INFO pDlgInfo = (PDIALOG_INFO)lParam;

	switch (message)
    {
        case WM_INITDIALOG:
            ShowWindow (hDlg, SW_HIDE);

			switch(pDlgInfo->dwDialogType)
            {
                case SIGN_TXT:
					uiBoxText = IDS_SIGN_BOXTEXT;
                break;
                case EXPORT_PRIV_TXT:
					uiBoxText = IDS_EXPORT_PRIVATE_BOXTEXT;
                break;
                case IMPORT_SIMPLE_TXT:
					uiBoxText = IDS_IMPORT_SIMPLE_BOXTEXT;
                break;
            }

			// set boxtext
			{
				// Key type: KeyX or Sig?
				if (AT_SIGNATURE == pDlgInfo->dwKeySpec)
					uiKeyText = IDS_AT_SIGNATURE;
				else
					uiKeyText = IDS_AT_KEYEXCHANGE;

				LoadString(
						hInstance, 
						uiKeyText,
						szKeyType, 
						MAX_AT_KEY_RSC_SIZE);

				// Caller?
				GetShortFileName(
						NULL,
						szCallerName,
						MAX_PATH);

				LoadString(
						hInstance, 
						uiBoxText,
						szBoxText, 
						MAX_STRING_RSC_SIZE);

				list[0]=szCallerName;
				list[1]=pDlgInfo->szContainer;
				list[2]=szKeyType;

				if (0 != FormatMessage(
						FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_STRING|FORMAT_MESSAGE_ARGUMENT_ARRAY,	
						szBoxText,
						0,
					    MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), 
						(LPTSTR)&pszFinalText,	
						0,	
						(va_list*)&list
					   ))
				{
					SetWindowText(GetDlgItem(hDlg, IDC_BOXTEXT), pszFinalText);
					LocalFree(pszFinalText);
				}
			}

			// titlebar
			if (0 != LoadString(
					hInstance,
					IDS_SOLICIT_PASSWORD_TITLE,
					szText,
					MAX_STRING_RSC_SIZE))
				SetWindowText (hDlg, szText);

			// prompts
			if (0 != LoadString(
					hInstance,
					IDS_PASSWORD_PROMPT,
					szText, 
					MAX_STRING_RSC_SIZE))
				SetWindowText(GetDlgItem(hDlg, IDC_PASSWORD_STATICTEXT), szText);

			ShowWindow (hDlg, SW_SHOW);
			return (TRUE);

      case WM_COMMAND:
         if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
         {
            EndDialog(hDlg, (LOWORD(wParam) == IDOK));
            return TRUE;
         }
         break;
   }

    return FALSE;
}

LRESULT CALLBACK DialogNewPassword(
                                   HWND hDlg,
                                   UINT message,
                                   WPARAM wParam,
                                   LPARAM lParam
                                   )
{
    TCHAR	szText[MAX_STRING_RSC_SIZE];
    TCHAR	szKeyType[MAX_AT_KEY_RSC_SIZE];
	TCHAR	szCallerName[MAX_PATH];
	TCHAR*	pszFinalText = NULL;
	TCHAR	szBoxText[MAX_STRING_RSC_SIZE];

	LPCTSTR list[3];

	UINT	uiBoxText = 0;
	UINT	uiKeyText = 0;
	PDIALOG_INFO pDlgInfo = (PDIALOG_INFO)lParam;

    DWORD dw;

    switch (message)
    {
        case WM_INITDIALOG:
            ShowWindow (hDlg, SW_HIDE);

			switch(pDlgInfo->dwDialogType)
            {
                case GENKEY_NO_OVER_TXT:
					uiBoxText = IDS_GENKEY_BOXTEXT;
                break;
                case IMPORT_PRIV_NO_OVER_TXT:
					uiBoxText = IDS_IMPORT_PRIVATE_BOXTEXT;
                break;
            }
            
			// set boxtext
			{
				// Key type: KeyX or Sig?
				if (AT_SIGNATURE == pDlgInfo->dwKeySpec)
					uiKeyText = IDS_AT_SIGNATURE;
				else
					uiKeyText = IDS_AT_KEYEXCHANGE;

				LoadString(
						hInstance, 
						uiKeyText,
						szKeyType, 
						MAX_AT_KEY_RSC_SIZE);


				// Caller?
				GetShortFileName(
						NULL,
						szCallerName,
						MAX_PATH);

				LoadString(
						hInstance, 
						uiBoxText,
						szBoxText, 
						MAX_STRING_RSC_SIZE);

				list[0]=szCallerName;
				list[1]=pDlgInfo->szContainer;
				list[2]=szKeyType;

				if (0 != FormatMessage(
						FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_STRING|FORMAT_MESSAGE_ARGUMENT_ARRAY,	
						szBoxText,
						0,
					    MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), 
						(LPTSTR)&pszFinalText,	
						0,	
						(va_list*)&list
					   ))
                {

					SetWindowText(GetDlgItem(hDlg, IDC_BOXTEXT), pszFinalText);
					LocalFree(pszFinalText);
                }
			}

			// titlebar
			if (0 != LoadString(
					hInstance,
					IDS_NEW_PASSWORD_TITLE,
					szText,
					MAX_STRING_RSC_SIZE))
				SetWindowText (hDlg, szText);

			// prompts
			if (0 != LoadString(
					hInstance,
					IDS_PASSWORD_PROMPT,
					szText, 
					MAX_STRING_RSC_SIZE))
				SetWindowText(GetDlgItem(hDlg, IDC_PASSWORD_STATICTEXT), szText);

			if (0 != LoadString(
					hInstance,
					IDS_CONFIRM_PASSWORD_PROMPT,
					szText, 
					MAX_STRING_RSC_SIZE))
				SetWindowText(GetDlgItem(hDlg, IDC_CONFIRM_PASSWORD_STATICTEXT), szText);

			ShowWindow (hDlg, SW_SHOW);
            return (TRUE);

        case WM_COMMAND:
            if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
            {
                EndDialog(hDlg, (LOWORD(wParam) == IDOK));
                return TRUE;
            }
            break;
    }

    return FALSE;
}

LRESULT CALLBACK DialogOverwritePassword(
                                         HWND hDlg,
                                         UINT message,
                                         WPARAM wParam,
                                         LPARAM lParam
                                         )
{
    TCHAR	szText[MAX_STRING_RSC_SIZE];
    TCHAR	szKeyType[MAX_AT_KEY_RSC_SIZE];
	TCHAR	szCallerName[MAX_PATH];
	TCHAR*	pszFinalText = NULL;
	TCHAR	szBoxText[MAX_STRING_RSC_SIZE];

	LPCTSTR list[3];

	UINT	uiKeyText = 0;
	UINT	uiBoxText = 0;
	PDIALOG_INFO pDlgInfo = (PDIALOG_INFO)lParam;

    switch (message)
    {
        case WM_INITDIALOG:
            ShowWindow (hDlg, SW_HIDE);

			switch(pDlgInfo->dwDialogType)
            {
                case SETKEYPARAM_CHGPWD_TXT:
					uiBoxText = IDS_CHANGEPASS_BOXTEXT;
                break;
                case GENKEY_OVER_TXT:
					uiBoxText = IDS_GENKEY_OW_BOXTEXT;
                break;
                case IMPORT_PRIV_OVER_TXT:
					uiBoxText = IDS_IMPORT_PRIVATE_OW_BOXTEXT;
                break;
            }

			// set boxtext
			{
				// Key type: KeyX or Sig?
				if (AT_SIGNATURE == pDlgInfo->dwKeySpec)
					uiKeyText = IDS_AT_SIGNATURE;
				else
					uiKeyText = IDS_AT_KEYEXCHANGE;

				LoadString(
						hInstance, 
						uiKeyText,
						szKeyType, 
						MAX_AT_KEY_RSC_SIZE);

				// Caller?
				GetShortFileName(
						NULL,
						szCallerName,
						MAX_PATH);

				LoadString(
						hInstance, 
						uiBoxText,
						szBoxText, 
						MAX_STRING_RSC_SIZE);

				list[0]=szCallerName;
				list[1]=pDlgInfo->szContainer;
				list[2]=szKeyType;

				if (0 != FormatMessage(
						FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_STRING|FORMAT_MESSAGE_ARGUMENT_ARRAY,	
						szBoxText,
						0,
					    MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), 
						(LPTSTR)&pszFinalText,	
						0,	
						(va_list*)&list
					   ))
				{
					SetWindowText(GetDlgItem(hDlg, IDC_BOXTEXT), pszFinalText);
					LocalFree(pszFinalText);
				}
			}

			// titlebar
			if (0 != LoadString(
					hInstance,
					IDS_OVERWRITE_PASSWORD_TITLE,
					szText,
					MAX_STRING_RSC_SIZE))
				SetWindowText (hDlg, szText);

			// prompts
			if (0 != LoadString(
					hInstance,
					IDS_PASSWORD_PROMPT,
					szText, 
					MAX_STRING_RSC_SIZE))
				SetWindowText(GetDlgItem(hDlg, IDC_PASSWORD_STATICTEXT), szText);

			if (0 != LoadString(
					hInstance,
					IDS_CONFIRM_PASSWORD_PROMPT,
					szText, 
					MAX_STRING_RSC_SIZE))
				SetWindowText(GetDlgItem(hDlg, IDC_CONFIRM_PASSWORD_STATICTEXT), szText);

			if (0 != LoadString(
					hInstance,
					IDS_OLD_PASSWORD_PROMPT,
					szText, 
					MAX_STRING_RSC_SIZE))
				SetWindowText(GetDlgItem(hDlg, IDC_OLD_PASSWORD_STATICTEXT), szText);

            ShowWindow (hDlg, SW_SHOW);
            return (TRUE);

        case WM_COMMAND:
            if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
            {
                EndDialog(hDlg, (LOWORD(wParam) == IDOK));
                return TRUE;
            }
            break;
    }

    return FALSE;
}

#endif	// _USE_UI

/*
 -  CryptLogonVerify
 -
 *  Purpose:
 *                Used by CryptAcquireContext to verify logon password.
 *
 *
 *  Parameters:
 *               OUT     hPrivid -  Handle to the id of the user
 *
 *  Returns:
 */
BOOL CryptLogonVerify(OUT HPRIVUID *hUID)
{
#ifdef MESSAGEBOXES
    int     ret;

    ret = MessageBox(NULL, "Type Password", "CryptLogonVerify", MB_OK);

    *hUID = 0xdeadbeef;
#endif

    return CPPAPI_SUCCEED;

}

/*
 -  CryptGetUserData
 -
 *  Purpose:
 *                Get required data from user.
 *
 *
 *  Parameters:
 *               IN      hPrivid  -  Handle to the id of the user
 *               OUT     pbData   -  bufer containing user-supplied data
 *               OUT     dwBufLen -  lenght of user-supplied data
 *
 *  Returns:
 */
BOOL CryptGetUserData(IN  HPRIVUID hUID,
                      OUT BYTE **pbData,
                      OUT DWORD *dwBufLen)
{
#ifdef MESSAGEBOXES

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -