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

📄 kmprops.c

📁 vc环境下的pgp源码
💻 C
📖 第 1 页 / 共 5 页
字号:
	}

	EndPaint (hWnd, &ps);
} 


//	___________________________________________________
//
//  PhotoID subclass procedure

static LRESULT APIENTRY 
sPhotoIDSubclassProc (
		HWND	hWnd, 
		UINT	uMsg, 
		WPARAM	wParam, 
		LPARAM	lParam) 
{
	KMPROPSHEETSTRUCT* pkmpss;
	pkmpss = 
		(KMPROPSHEETSTRUCT*)GetWindowLong (GetParent (hWnd), GWL_USERDATA);

    switch (uMsg) {

	case WM_CONTEXTMENU :
		{
			HMENU	hMC;
			HMENU	hMenuTrackPopup;

			hMC = LoadMenu (g_hInst, MAKEINTRESOURCE (IDR_MENUPHOTOID));
			if (pkmpss->hbitmapPhotoID)
				EnableMenuItem (hMC, IDM_COPYBITMAP, 
										MF_BYCOMMAND|MF_ENABLED);
			else
				EnableMenuItem (hMC, IDM_COPYBITMAP, 
										MF_BYCOMMAND|MF_GRAYED);

			hMenuTrackPopup = GetSubMenu (hMC, 0);

			TrackPopupMenu (hMenuTrackPopup, TPM_LEFTALIGN|TPM_RIGHTBUTTON,
				LOWORD(lParam), HIWORD(lParam), 0, GetParent (hWnd), NULL);

			DestroyMenu (hMC);
		}
		break;

	default :
		return CallWindowProc (pkmpss->wpOrigPhotoIDProc, hWnd, uMsg, 
								wParam, lParam); 
	}
	return TRUE;
} 


//	___________________________________________________
//
//  update system palette

static BOOL
sUpdatePalette (
		HWND				hwnd,
		KMPROPSHEETSTRUCT*	pkmpss)
{
	BOOL		bretval		= FALSE;
	HDC			hdc;
	HPALETTE	hpaletteOld;

	if (pkmpss->hpalettePhotoID == NULL) return FALSE;

	hdc = GetDC (hwnd);

	hpaletteOld = SelectPalette (hdc, pkmpss->hpalettePhotoID, FALSE);
	if (RealizePalette (hdc)) {
		InvalidateRect (hwnd, NULL, TRUE); 
		bretval = TRUE;
	}

	SelectPalette (hdc, hpaletteOld, TRUE);
	RealizePalette (hdc);
	ReleaseDC (hwnd, hdc);

	return bretval;
}


//	___________________________________________________
//
//  Key Properties Dialog Message procedure - General panel

static BOOL CALLBACK 
sKeyPropDlgProcGeneral (
		HWND	hDlg, 
		UINT	uMsg, 
		WPARAM	wParam,
		LPARAM	lParam) 
{
	KMPROPSHEETSTRUCT*	pkmpss;
	CHAR				sz[kPGPMaxUserIDSize];
	INT					i;
	UINT				u, uTrust;
	PGPUInt32			prefAlg[6];
	PGPTime				tm;
	PGPUserIDRef		userid;
	HWND				hwndParent;
	RECT				rc;
	LPBITMAPINFO		lpbmi;

	pkmpss = (KMPROPSHEETSTRUCT*)GetWindowLong (hDlg, GWL_USERDATA);

	switch (uMsg) {

	case WM_INITDIALOG:
		// store pointer to data structure
		SetWindowLong (hDlg, GWL_USERDATA, ((PROPSHEETPAGE*)lParam)->lParam);
		pkmpss = (KMPROPSHEETSTRUCT*)GetWindowLong (hDlg, GWL_USERDATA);

		// save HWND to table
		pkmpss->pKM->hWndTable[pkmpss->iIndex] = hDlg;

		// center dialog on screen
		hwndParent = GetParent (hDlg);
		if (pkmpss->pKM->iNumberSheets == 1) {
			GetWindowRect (hwndParent, &rc);
			SetWindowPos (hwndParent, NULL,
				(GetSystemMetrics(SM_CXSCREEN) - (rc.right - rc.left)) / 2,
				(GetSystemMetrics(SM_CYSCREEN) - (rc.bottom - rc.top)) / 3,
				0, 0, SWP_NOSIZE | SWP_NOZORDER);
		}

		// subclass photoID control to handle dropping, dragging
		pkmpss->wpOrigPhotoIDProc = 
			(WNDPROC) SetWindowLong(GetDlgItem (hDlg, IDC_PHOTOID), 
						GWL_WNDPROC, (LONG) sPhotoIDSubclassProc); 

		// create smooth progress bar
		GetWindowRect (GetDlgItem (hDlg, IDC_VALIDITYBAR), &rc);
		MapWindowPoints (NULL, hDlg, (LPPOINT)&rc, 2);
		pkmpss->hwndValidity = 
			CreateWindowEx (0, PROGRESS_CLASS, (LPSTR) NULL, 
							WS_CHILD|WS_VISIBLE|PBS_SMOOTH, 
							rc.left, rc.top, 
							rc.right-rc.left, rc.bottom-rc.top, 
							hDlg, (HMENU) 0, g_hInst, NULL); 

		// disable and hide cancel button; and move "OK" button over
		SendMessage (hwndParent, PSM_CANCELTOCLOSE, 0, 0);
		GetWindowRect (GetDlgItem (hwndParent, IDCANCEL), &rc);
		MapWindowPoints (NULL, hwndParent, (LPPOINT)&rc, 2);
		SetWindowPos (GetDlgItem (hwndParent, IDOK), NULL, rc.left,
						rc.top, rc.right-rc.left, rc.bottom-rc.top,
						SWP_NOZORDER);
		ShowWindow (GetDlgItem (hwndParent, IDCANCEL), SW_HIDE);

		// initialize all controls
		PostMessage (hDlg, WM_APP, SERIALIZE, 0);
		return TRUE;

	case WM_APP :
		if (wParam == SERIALIZE)
			KMRequestSDKAccess (pkmpss->pKM);

		PGPGetKeyBoolean (pkmpss->key, kPGPKeyPropIsSecret,
													&pkmpss->bSecret);
		PGPGetKeyBoolean (pkmpss->key, kPGPKeyPropIsSecretShared,
													&pkmpss->bSplit);
		PGPGetKeyBoolean (pkmpss->key, kPGPKeyPropIsRevoked,
													&pkmpss->bRevoked);
		PGPGetKeyBoolean (pkmpss->key, kPGPKeyPropIsExpired,
													&pkmpss->bExpired);
		PGPGetKeyBoolean (pkmpss->key, kPGPKeyPropIsAxiomatic, 
													&pkmpss->bAxiomatic);

		// initialize key id edit control
		KMGetKeyIDFromKey (pkmpss->key, sz, sizeof(sz));
		SetDlgItemText (hDlg, IDC_KEYID, sz);

		// initialize key type edit control
		switch (pkmpss->algKey) {
		case kPGPPublicKeyAlgorithm_RSA :
			LoadString (g_hInst, IDS_RSA, sz, sizeof (sz));
			break;

		case kPGPPublicKeyAlgorithm_DSA :
			LoadString (g_hInst, IDS_DSA_ELGAMAL, sz, sizeof (sz));
			break;

		default :
			LoadString (g_hInst, IDS_UNKNOWN, sz, sizeof (sz));
			break;
		}
		SetDlgItemText (hDlg, IDC_KEYTYPE, sz);

		// initialize key size edit control
		KMGetKeyBitsString (pkmpss->keyset, 
							pkmpss->key, sz, sizeof(sz));
		SetDlgItemText (hDlg, IDC_KEYSIZE, sz);

		// initialize key creation date edit control
		PGPGetKeyTime (pkmpss->key, kPGPKeyPropCreation, &tm);
		KMConvertTimeToString (tm, sz, sizeof (sz));
		SetDlgItemText (hDlg, IDC_CREATEDATE, sz);

		// initialize key expiration date edit control
		PGPGetKeyTime (pkmpss->key, kPGPKeyPropExpiration, &tm);
		if (tm == kPGPExpirationTime_Never) {
			LoadString (g_hInst, IDS_NEVER, sz, sizeof (sz));
			pkmpss->iExpireDays = -1;
		}
		else {
			KMConvertTimeToDays (tm, &pkmpss->iExpireDays);
			KMConvertTimeToString (tm, sz, sizeof (sz));
		}
		SetDlgItemText (hDlg, IDC_EXPIREDATE, sz);

		// initialize preferred cipher edit control
		PGPGetKeyPropertyBuffer (pkmpss->key, kPGPKeyPropPreferredAlgorithms,
							sizeof(prefAlg), (PGPByte*)&prefAlg[0], &u);
		if (u < sizeof(PGPCipherAlgorithm)) 
			prefAlg[0] = kPGPCipherAlgorithm_IDEA;
		switch (prefAlg[0]) {
			case kPGPCipherAlgorithm_CAST5 :
				LoadString (g_hInst, IDS_CAST, sz, sizeof(sz));
				break;

			case kPGPCipherAlgorithm_3DES :
				LoadString (g_hInst, IDS_3DES, sz, sizeof(sz));
				break;

			default :
				LoadString (g_hInst, IDS_IDEA, sz, sizeof(sz));
				break;
		}
		SetDlgItemText (hDlg, IDC_CIPHER, sz);

		// initialize fingerprint edit control
		if (pkmpss->bShowHexFingerprint) 
			CheckDlgButton (hDlg, IDC_USEHEXFINGERPRINT, BST_CHECKED);
		else 
			CheckDlgButton (hDlg, IDC_USEHEXFINGERPRINT, BST_UNCHECKED);
		sSetFingerprintControls (hDlg, 
					pkmpss->bShowHexFingerprint, 
					pkmpss->key, pkmpss->algKey);

		// initialize validity edit and bar controls
		i = KMConvertFromPGPValidity (kPGPValidity_Complete);
		SendMessage (pkmpss->hwndValidity, PBM_SETRANGE, 
									0, MAKELPARAM (0,i));
		PGPGetKeyNumber (pkmpss->key, kPGPKeyPropValidity, 
								&pkmpss->uValidity);
		sSetValidityControls (hDlg, pkmpss, pkmpss->uValidity);

		// initialize "Axiomatic" checkbox control
		if (pkmpss->bAxiomatic) 
			CheckDlgButton (hDlg, IDC_AXIOMATIC, BST_CHECKED);
		else 
			CheckDlgButton (hDlg, IDC_AXIOMATIC, BST_UNCHECKED);

		if (pkmpss->bRevoked || pkmpss->bExpired || pkmpss->bReadOnly)
			EnableWindow (GetDlgItem (hDlg, IDC_AXIOMATIC), FALSE);
		else 
			EnableWindow (GetDlgItem (hDlg, IDC_AXIOMATIC), TRUE);

		if (!pkmpss->bSecret && !pkmpss->bAxiomatic) 
			ShowWindow (GetDlgItem (hDlg, IDC_AXIOMATIC), SW_HIDE);
		else
			ShowWindow (GetDlgItem (hDlg, IDC_AXIOMATIC), SW_SHOW);

		// initialize trust edit and slider controls
		i = KMConvertFromPGPTrust (kPGPKeyTrust_Complete);
		SendDlgItemMessage (hDlg, IDC_TRUSTSLIDER, TBM_SETRANGE, 
								0, MAKELPARAM (0, i));
		PGPGetKeyNumber (pkmpss->key, kPGPKeyPropTrust, &pkmpss->uTrust);
		sSetTrustControls (hDlg, pkmpss, pkmpss->uTrust);

		if (pkmpss->bAxiomatic || pkmpss->bRevoked || pkmpss->bReadOnly)
		{
			EnableWindow (GetDlgItem (hDlg, IDC_TRUSTSLIDER), FALSE);
			EnableWindow (GetDlgItem (hDlg, IDC_TRUSTTEXT1), FALSE);
			EnableWindow (GetDlgItem (hDlg, IDC_TRUSTTEXT2), FALSE);
		}
		else
		{
			EnableWindow (GetDlgItem (hDlg, IDC_TRUSTSLIDER), TRUE);
			EnableWindow (GetDlgItem (hDlg, IDC_TRUSTTEXT1), TRUE);
			EnableWindow (GetDlgItem (hDlg, IDC_TRUSTTEXT2), TRUE);
		}

		// initialize enable/disable checkbox
		PGPGetKeyBoolean (pkmpss->key, kPGPKeyPropIsDisabled, 
							&pkmpss->bDisabled);
		if (pkmpss->bDisabled) 
			CheckDlgButton (hDlg, IDC_ENABLED, BST_UNCHECKED);
		else 
			CheckDlgButton (hDlg, IDC_ENABLED, BST_CHECKED);

		if (pkmpss->bRevoked || pkmpss->bExpired || pkmpss->bReadOnly)
			EnableWindow (GetDlgItem (hDlg, IDC_ENABLED), FALSE);
		else
			EnableWindow (GetDlgItem (hDlg, IDC_ENABLED), TRUE);

		if (pkmpss->bSecret) {
			if (pkmpss->bAxiomatic) 
				EnableWindow (GetDlgItem (hDlg, IDC_ENABLED), FALSE);
			else
				EnableWindow (GetDlgItem (hDlg, IDC_ENABLED), TRUE);
		}

		// initialize change passphrase button
		if (pkmpss->bSplit) {
			aKeyPropIds[1] = IDH_PGPKM_JOINKEY;
			LoadString (g_hInst, IDS_RECONSTITUTEKEY, sz, sizeof(sz));
		}
		else {
			aKeyPropIds[1] = IDH_PGPKM_CHANGEPHRASE;
			LoadString (g_hInst, IDS_CHANGEPHRASE, sz, sizeof(sz));	
		}
		SetDlgItemText (hDlg, IDC_CHANGEPHRASE, sz);

		if (!pkmpss->bSecret) 
			ShowWindow (GetDlgItem (hDlg, IDC_CHANGEPHRASE), SW_HIDE);

		if (pkmpss->bReadOnly)
			EnableWindow (GetDlgItem (hDlg, IDC_CHANGEPHRASE), FALSE);
		else
			EnableWindow (GetDlgItem (hDlg, IDC_CHANGEPHRASE), TRUE);

		// display photo ID
		if (pkmpss->hbitmapPhotoID) {
			DeleteObject (pkmpss->hbitmapPhotoID);
			pkmpss->hbitmapPhotoID = NULL;
		}
		if (pkmpss->pPhotoBuffer) {
			KMFree (pkmpss->pPhotoBuffer);
			pkmpss->pPhotoBuffer = NULL;
		}
		if (pkmpss->hbitmapPhotoID) {
			DeleteObject (pkmpss->hbitmapPhotoID);
			pkmpss->hbitmapPhotoID = NULL;
		}
		if (pkmpss->hpalettePhotoID) {
			DeleteObject (pkmpss->hpalettePhotoID);
			pkmpss->hpalettePhotoID = NULL;
		}

		PGPGetPrimaryAttributeUserID (pkmpss->key, 
										kPGPAttribute_Image, &userid);
		if (userid == NULL) {
			ShowWindow (GetDlgItem (hDlg, IDC_PHOTOSCROLLBAR), SW_HIDE);
			pkmpss->iImageIndex = -1;
		}
		else {
			PGPKeyListRef	keylist;
			PGPKeyIterRef	keyiter;
			INT				iNumPhotoID;
			PGPUInt32		iType;
			PGPBoolean		bAttrib;
			SCROLLINFO		si;

			if (pkmpss->iImageIndex < 0)
				pkmpss->iImageIndex = 0;

			// get number of Photo IDs
			PGPOrderKeySet (pkmpss->pKM->KeySetDisp, 
								kPGPAnyOrdering, &keylist);
			PGPNewKeyIter (keylist, &keyiter);
			PGPKeyIterSeek (keyiter, pkmpss->key);
			PGPKeyIterNextUserID (keyiter, &userid);
			iNumPhotoID = 0;
			while (userid) {
				PGPGetUserIDBoolean (userid, 
						kPGPUserIDPropIsAttribute, &bAttrib);
				if (userid == pkmpss->userid)
					pkmpss->iImageIndex = iNumPhotoID;
				if (bAttrib) {
					PGPGetUserIDNumber (userid, 
								kPGPUserIDPropAttributeType, &iType);
					if (iType == kPGPAttribute_Image)
						iNumPhotoID++;
				}
				PGPKeyIterNextUserID (keyiter, &userid);
			}
			pkmpss->iNumPhotoIDs = iNumPhotoID;

			// setup photoid scrollbar
			if (iNumPhotoID <= 1) 
				ShowWindow (GetDlgItem (hDlg, IDC_PHOTOSCROLLBAR), SW_HIDE);
			else {
				si.cbSize = sizeof(SCROLLINFO);
				si.fMask = SIF_ALL;
				si.nMin = 0;
				si.nMax = iNumPhotoID-1;
				si.nPage = 1;
				si.nPos = pkmpss->iImageIndex;
				SetScrollInfo (GetDlgItem (hDlg, IDC_PHOTOSCROLLBAR), SB_CTL,
								&si, TRUE);
				ShowWindow (GetDlgItem (hDlg, IDC_PHOTOSCROLLBAR), SW_SHOW);
			}

			// reset userid to selected one
			PGPKeyIterSeek (keyiter, pkmpss->key);
			PGPKeyIterNextUserID (keyiter, &userid);
			iNumPhotoID = -1;
			while (userid) {
				PGPGetUserIDBoolean (userid, 
						kPGPUserIDPropIsAttribute, &bAttrib);
				if (bAttrib) {
					PGPGetUserIDNumber (userid, 
								kPGPUserIDPropAttributeType, &iType);
					if (iType == kPGPAttribute_Image)
						iNumPhotoID++;
				}
				if (pkmpss->iImageIndex == iNumPhotoID) {
					PGPGetUserIDNumber (userid,
						kPGPUserIDPropValidity, &u);
					u = KMConvertFromPGPValidity (u);
					if (u < (UINT)pkmpss->pKM->iValidityThreshold)
						pkmpss->bPhotoInvalid = TRUE;
					else
						pkmpss->bPhotoInvalid = FALSE;
					break;
				}
				PGPKeyIterNextUserID (keyiter, &userid);
			}
			PGPFreeKeyIter (keyiter);
			PGPFreeKeyList (keylist);

			// get length of photo id buffer
			PGPGetUserIDStringBuffer (userid, kPGPUserIDPropAttributeData, 
					1, NULL, &(pkmpss->iPhotoBufferLength));

			if (pkmpss->iPhotoBufferLength > 0) {
				// now actually get the buffer data
				pkmpss->pPhotoBuffer = KMAlloc (pkmpss->iPhotoBufferLength);
				PGPGetUserIDStringBuffer (userid, kPGPUserIDPropAttributeData,
						pkmpss->iPhotoBufferLength, pkmpss->pPhotoBuffer, 
						&(pkmpss->iPhotoBufferLength));

				// no more SDK calls, release to avoid palette-related lockup
				if (wParam == SERIALIZE) {
					wParam = NOSERIALIZE;
					KMReleaseSDKAccess (pkmpss->pKM);
				}

				if (IsntPGPError (KMDIBfromPhoto (pkmpss->pPhotoBuffer, 
						pkmpss->iPhotoBufferLength, TRUE, &lpbmi))) {
					if (lpbmi) {
						KMGetDIBSize (lpbmi, &(pkmpss->iwidthPhotoID),
								 &(pkmpss->iheightPhotoID));
						pkmpss->hbitmapPhotoID = KMDDBfromDIB (lpbmi, 
									&(pkmpss->hpalettePhotoID)); 

						KMFree (lpbmi);
					}
				}
			}
		}

		if (wParam == SERIALIZE)
			KMReleaseSDKAccess (pkmpss->pKM);

		if (pkmpss->hwndRevokerDlg) {
			SendMessage (pkmpss->hwndRevokerDlg, WM_APP, wParam, 0);
			InvalidateRect (pkmpss->hwndRevokers, NULL, TRUE);
			UpdateWindow (pkmpss->hwndRevokers);
		}
		
		pkmpss->bReadyToPaint = TRUE;
		InvalidateRect (hDlg, NULL, FALSE);
		break;

	case WM_APP+1 :
		EnableWindow (GetDlgItem (hDlg, IDC_TRUSTSLIDER), FALSE);
		EnableWindow (GetDlgItem (hDlg, IDC_TRUSTTEXT1), FALSE);
		EnableWindow (GetDlgItem (hDlg, IDC_TRUSTTEXT2), FALSE);
		EnableWindow (GetDlgItem (hDlg, IDC_AXIOMATIC), FALSE);
		EnableWindow (GetDlgItem (hDlg, IDC_ENABLED), FALSE);
		EnableWindow (GetDlgItem (hDlg, IDC_CHANGEPHRASE), FALSE);
		EnableWindow (GetDlgItem (GetParent(hDlg), IDOK), FALSE);
		break;

	case WM_APP+2 :
		pkmpss->userid = (PGPUserIDRef)lParam;
		PostMessage (hDlg, WM_APP, 0, 0);
		break;

	case WM_PAINT :
		if (pkmpss->bReadyToPaint)

⌨️ 快捷键说明

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