亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? pgppassphrasecl.cpp

?? vc環境下的pgp源碼
?? CPP
字號:
/*____________________________________________________________________________
	Copyright (C) 1997 Network Associates Inc. and affiliated companies.
	All rights reserved.
	
	$Id: PGPPassphraseCL.cpp,v 1.4 1999/03/10 02:54:01 heller Exp $
____________________________________________________________________________*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include "pgpDialogs.h"
#include "pgpPassphraseUtils.h"
#include "pgpErrors.h"
#include "pgpCLUtils.h"
#include "pgpKeys.h"

#define MAXDECRYPTIONNAMECHAR		36

// global variable structure for re-entrancy
typedef struct _GPP
{
	char *				pszPassPhrase;
	char *				pszPassPhraseConf;
	PGPInt32 iNextTabControl;
	PGPBoolean				bHideText;
	PGPContextRef		context;
	const CPGPPassphraseDialogOptions *options;
} GPP;

// internal prototypes
static PGPError PGPsdkCLError(PGPError);
static void *secAlloc(PGPContextRef, PGPUInt32);
static void secFree(void*);
static void FreePassphrases(GPP *gpp);
static void ClearPassphrases(GPP *gpp);

static PGPError
PGPsdkUIErrorBox(PGPError error) 
{
	PGPError	err				= kPGPError_NoErr;
	char		szMessage[512];
	
	if (IsPGPError (error) && (error!=kPGPError_UserAbort)) {
		PGPGetErrorString (error, sizeof(szMessage), szMessage);
		printf("%s: PGP Error", szMessage);
	}

	return err;
}

//___________________________
//
// Secure memory allocation routines
//

static void * 
secAlloc (PGPContextRef context, PGPUInt32 uBytes) 
{
	PGPMemoryMgrRef	memmgr;
	
	memmgr = PGPGetContextMemoryMgr (context);
	return (PGPNewSecureData (memmgr, uBytes, 0));
}

static void 
secFree (void* p) 
{
	if (p) {
		memset ((char *)p, '\0', strlen((char *)p));
		PGPFreeData ((char *)p);
	}
}

static void
FreePassphrases(GPP *gpp)
{
	if (gpp->pszPassPhrase) {
		secFree(gpp->pszPassPhrase);
		gpp->pszPassPhrase=NULL;
	}

	if (gpp->pszPassPhraseConf) {
		secFree(gpp->pszPassPhraseConf);
		gpp->pszPassPhraseConf=NULL;
	}

}

static void
ClearPassphrases(GPP *gpp)
{
	if(gpp->pszPassPhraseConf) {
		secFree(gpp->pszPassPhraseConf);
		gpp->pszPassPhraseConf=NULL;
	}

}

static void
GetKeyString(PGPKeyRef Key,char *szNameFinal)
{
	char			sz1[32],sz2[32];
	char			szName[kPGPMaxUserIDSize];
	PGPUInt32		uAlgorithm,uKeyBits;
	PGPUInt32			u;

	PGPGetKeyNumber (Key, kPGPKeyPropAlgID, (int *)&uAlgorithm);

	// get key type / size info to append to name
	strcpy (sz2, "   (");
	switch (uAlgorithm) 
	{
	case kPGPPublicKeyAlgorithm_RSA :
		strcat (sz2, "RSA/");
		PGPGetKeyNumber (Key, kPGPKeyPropBits, (int *)&uKeyBits);
		sprintf (sz1, "%i", uKeyBits);
		strcat (sz2, sz1);
		break;
		
	case kPGPPublicKeyAlgorithm_DSA :
		strcat (sz2, "DSS/");
		PGPGetKeyNumber (Key, kPGPKeyPropBits, (int *)&uKeyBits);
		sprintf (sz1, "%i", uKeyBits);
		strcat (sz2, sz1);
		break;
		
	default :
		strcat (sz2, "Unknown/Unknown");
		break;
	}
	
	strcat (sz2, ")");

	// get name on key
	PGPGetPrimaryUserIDNameBuffer (Key, sizeof(szName),szName, &u);

	strcpy(szNameFinal, szName);
	strcat(szNameFinal, sz2);
	
	//TruncateKeyText (hdc, szName, sz2, iComboWidth, szNameFinal);
}


//	____________________________
//
//  setup keyselection list o' keys
//

PGPBoolean 
InitSigningKeyComboBox (CPGPKeySetPassphraseDialogOptions *options) 
{
	PGPKeyListRef	KeyList;
	PGPKeyIterRef	KeyIter;
	PGPKeyRef		Key;
	PGPBoolean		bSecret, bRevoked, bExpired, bCanSign;
	PGPBoolean		bAtLeastOneSecretKey;
	char			szNameFinal[kPGPMaxUserIDSize];

	PGPOrderKeySet (options->mKeySet, kPGPValidityOrdering, &KeyList);
	PGPNewKeyIter (KeyList, &KeyIter);

	bAtLeastOneSecretKey = FALSE;

	PGPKeyIterNext (KeyIter, &Key);
	while (Key) {
		PGPGetKeyBoolean (Key, kPGPKeyPropIsSecret, &bSecret);
		if (bSecret) {
			PGPGetKeyBoolean (Key, kPGPKeyPropIsRevoked,
							  (unsigned char *)&bRevoked);
			PGPGetKeyBoolean (Key, kPGPKeyPropIsExpired,
							  (unsigned char *)&bExpired);
			PGPGetKeyBoolean (Key, kPGPKeyPropCanSign,
							  (unsigned char *)&bCanSign);
			if (!bRevoked && !bExpired && bCanSign) {
				bAtLeastOneSecretKey = TRUE;

				GetKeyString(Key,szNameFinal);

				fprintf(stdout, "\n%s\n", szNameFinal);
			}
		}
		PGPKeyIterNext (KeyIter, &Key);
	}
	PGPFreeKeyIter (KeyIter);
	PGPFreeKeyList (KeyList);

	return (bAtLeastOneSecretKey);

}

PGPBoolean
PassphraseLengthAndQualityOK(
	CPGPPassphraseDialogOptions	*options,
	char 						*Passphrase)
{
	if (options->mMinPassphraseLength != 0) {
		if(strlen(Passphrase) < options->mMinPassphraseLength) {
			printf("Passphrase is not of sufficient length. Please choose another.");
			return FALSE;
		}
	}
	
	if (options->mMinPassphraseQuality != 0) {
		if(PGPEstimatePassphraseQuality(Passphrase) < options->mMinPassphraseQuality) {
			printf("Passphrase is not of sufficient quality. Please choose another.");
			return FALSE;
		}
	}

	return TRUE;
}

//	____________________________
//
//  search keys for matching phrase

PGPError 
ValidateSigningPhrase (GPP *gpp, char * pszPhrase, PGPKeyRef key) 
{
	char	szName[kPGPMaxUserIDSize];
	char	sz[128];
	char	sz2[kPGPMaxUserIDSize + 128];
	PGPSize	size;
	CPGPSigningPassphraseDialogOptions *options;

	options = (CPGPSigningPassphraseDialogOptions *)gpp->options;

	// does phrase match selected key ?
	if (PGPPassphraseIsValid (key, 
			PGPOPassphrase (gpp->context, pszPhrase),
			PGPOLastOption (gpp->context))) {
		*(options->mPassphraseKeyPtr) = key;
		return kPGPError_NoErr;
	}

	if (options->mFindMatchingKey) {
		// does phrase match any private key ?
		key=GetKeyForPassphrase(options->mKeySet,pszPhrase,TRUE);

		if (key != NULL) {
			// ask user to use other key
			PGPGetPrimaryUserIDNameBuffer (key, sizeof(szName), szName, &size);
			sprintf (sz2, sz, szName);
			return kPGPError_BadPassphrase;
		}
	}

	// phrase doesn't match any key
	printf("Bad Passphrase: Please re-enter\n");
	
	return kPGPError_BadPassphrase;

}

// ****************************************************************************
// ****************************************************************************

#define KEYSIZE 256		// hard-coded key size XXX

// Signer combo box
PGPError
pgpSigningPassphraseCL(
	PGPContextRef						context,
	CPGPSigningPassphraseDialogOptions 	*options)
{
	PGPError err = 0;
	GPP	gpp;

	memset(&gpp,0x00,sizeof(GPP));
	gpp.context=context;
	gpp.options=options;

	/*
	 * XXX
	 * Currently expects to display only *ONE* key.
	 * The caller must set the keyset in the options to consist
	 * of the signing key that the caller wants this routine
	 * to verify
	 */
	
	// Initialize stuff
	if (!InitSigningKeyComboBox (options)) {
		return kPGPError_UserAbort; // kPGPError_Win32_NoSecret_Key
	}
	
	if (options->mPrompt)
		puts(options->mPrompt);
	else
		printf("Need a pass phrase to use this key\n");
	
	// Need to ask and get Passphrase
	
	PGPKeyListRef	KeyList;
	PGPKeyIterRef	KeyIter;
	PGPKeyRef		key;
	PGPOrderKeySet (options->mKeySet,kPGPValidityOrdering,&KeyList);
	PGPNewKeyIter (KeyList, &KeyIter);
	PGPKeyIterNext (KeyIter, &key);

	while (1) {
		FreePassphrases(&gpp);
		gpp.pszPassPhrase = (char *)secAlloc (gpp.context, KEYSIZE);
		if (gpp.pszPassPhrase) {
			PGPBoolean  bShared;
			
			PGPInt32 len = pgpCLGetPass(stdout, gpp.pszPassPhrase, KEYSIZE);
			if (len < 0) {
				err = kPGPError_UserAbort;
				break;
			}
			
			*(options->mPassphrasePtr) = gpp.pszPassPhrase;
			
			// Check Shared status
			err = PGPGetKeyBoolean(key, kPGPKeyPropIsSecretShared, &bShared);
			
			if (IsntPGPError(err) && bShared) {
				// So, they want to do a shared key
				*(options->mPassphraseKeyPtr) = key;
				err = kPGPError_KeyUnusableForSignature;
				break;
			}
			
			if (PassphraseLengthAndQualityOK(options,gpp.pszPassPhrase)) {
				if (!options->mVerifyPassphrase) {
					err = kPGPError_NoErr;
					break;
				}
				
				err = ValidateSigningPhrase(&gpp,gpp.pszPassPhrase,key);
				
				if (IsntPGPError(err)) {
					err = kPGPError_NoErr;
					break;
				}
			} else {
				ClearPassphrases(&gpp);
				FreePassphrases(&gpp);
				break;
			}
		} else {
			err = kPGPError_OutOfMemory;
			break;
		}
	}
	
	PGPFreeKeyIter(KeyIter);
	PGPFreeKeyList(KeyList);
	ClearPassphrases(&gpp);
	if (err != kPGPError_NoErr)
		FreePassphrases(&gpp);
	return(err);
}

PGPError
pgpPassphraseCL(
	PGPContextRef 				context,
	CPGPPassphraseDialogOptions	*options)
{
	PGPError	err = 0;
	GPP			gpp;

	if (options->mPrompt)
		puts(options->mPrompt);
	else
		printf("Please enter pass phrase for secret key\n");

	memset(&gpp,0x00,sizeof(GPP));
	gpp.context=context;
	gpp.options=options;
	
	while (1) {
		FreePassphrases(&gpp);
		gpp.pszPassPhrase = (char *)secAlloc (gpp.context, KEYSIZE);
		if (gpp.pszPassPhrase) {
			PGPInt32 len = pgpCLGetPass(stdout, gpp.pszPassPhrase, KEYSIZE);
			if (len < 0) {
				err = kPGPError_UserAbort;
				break;
			}
			
			*(options->mPassphrasePtr) = gpp.pszPassPhrase;
			
			if (PassphraseLengthAndQualityOK(options,gpp.pszPassPhrase)) {
				err = kPGPError_NoErr;
				break;
			} else {
				ClearPassphrases(&gpp);
				FreePassphrases(&gpp);
			}
		} else {
			err = kPGPError_OutOfMemory;
			break;
		}
	}

	ClearPassphrases(&gpp);
	if (err != kPGPError_NoErr)
		FreePassphrases(&gpp);
	return(err);
}

PGPError
pgpKeyPassphraseCL(
	PGPContextRef					context,
	CPGPKeyPassphraseDialogOptions	*options)
{
	PGPError err;
	GPP	gpp;
	
	memset(&gpp,0x00,sizeof(GPP));
	gpp.context=context;
	gpp.options=options;

	char szNameFinal[kPGPMaxUserIDSize];
	GetKeyString(options->mDefaultKey, szNameFinal);
	fprintf(stdout, "\n%s\n", szNameFinal);

	while (1) {
		FreePassphrases(&gpp);
		gpp.pszPassPhrase = (char *)secAlloc (gpp.context, KEYSIZE);
		if (gpp.pszPassPhrase) {
			PGPInt32 len = pgpCLGetPass(stdout, gpp.pszPassPhrase, KEYSIZE);
			if (len < 0) {
				err = kPGPError_UserAbort;
				break;
			}
			
			*(options->mPassphrasePtr) = gpp.pszPassPhrase;
			
			if (PassphraseLengthAndQualityOK(options,gpp.pszPassPhrase)) {
				PGPBoolean PassValid;
				PassValid = PGPPassphraseIsValid(options->mDefaultKey,
									PGPOPassphrase(context, gpp.pszPassPhrase),
									PGPOLastOption(context));
				if (PassValid) {
					err = kPGPError_NoErr;
					break;
				} else {
					fprintf(stdout, "Wrong passphrase, reenter\n");
				}
			} else {
				ClearPassphrases(&gpp);
				FreePassphrases(&gpp);
			}
		} else {
			err = kPGPError_OutOfMemory;
			break;
		}
	}

	ClearPassphrases(&gpp);
	if (err != kPGPError_NoErr)
		FreePassphrases(&gpp);
	return(err);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
2023国产精品自拍| 91免费视频观看| 婷婷国产在线综合| 久久黄色级2电影| 日韩美女啊v在线免费观看| 蜜桃av一区二区三区| 亚洲一区影音先锋| 亚洲视频电影在线| 亚洲男人的天堂av| 亚洲一区二区三区四区五区中文| 亚洲欧美日韩综合aⅴ视频| 中文字幕第一区第二区| 国产精品乱子久久久久| 中文字幕在线不卡一区二区三区| 亚洲欧洲www| 一区二区三区四区在线播放| 亚洲午夜精品一区二区三区他趣| 一区二区成人在线| 亚洲va天堂va国产va久| 日本伊人精品一区二区三区观看方式| 视频一区免费在线观看| 国产综合色产在线精品| 国产高清亚洲一区| 欧美日韩卡一卡二| 国产剧情av麻豆香蕉精品| 国产精品69毛片高清亚洲| 95精品视频在线| 777a∨成人精品桃花网| 久久一区二区视频| 亚洲精品美腿丝袜| 久久国产精品72免费观看| 欧美日韩国产高清一区| 99国产精品久久| 欧美日本不卡视频| 国产无一区二区| 亚洲一区二区三区在线播放| 精品一区二区三区免费观看| 99re这里都是精品| 日韩欧美三级在线| 最新国产成人在线观看| 久久狠狠亚洲综合| 欧美经典三级视频一区二区三区| 欧美无砖专区一中文字| 午夜精品福利一区二区三区av| 男人操女人的视频在线观看欧美| 懂色av一区二区夜夜嗨| 欧美视频在线一区二区三区| 久久精品视频在线看| 亚洲国产成人va在线观看天堂| 国产很黄免费观看久久| 欧美色男人天堂| 中文字幕五月欧美| 国产精品影视天天线| 欧美精品免费视频| 亚洲免费在线视频一区 二区| 国产自产视频一区二区三区| 欧美午夜一区二区三区| 1区2区3区精品视频| 国产成人午夜视频| wwwwxxxxx欧美| 日韩精品三区四区| 欧美在线你懂得| 亚洲蜜臀av乱码久久精品蜜桃| 国产一区二区三区不卡在线观看| 69堂成人精品免费视频| 亚洲色图.com| 波多野结衣欧美| 国产日韩欧美在线一区| 国产精品一区二区在线看| 日韩你懂的在线播放| 美腿丝袜亚洲色图| 欧美另类变人与禽xxxxx| 亚洲国产一二三| 在线观看av一区二区| 亚洲国产婷婷综合在线精品| 91福利精品第一导航| 亚洲综合免费观看高清完整版 | 国产激情视频一区二区三区欧美 | 1区2区3区国产精品| 国产a久久麻豆| 国产偷国产偷亚洲高清人白洁| 免费看欧美女人艹b| 欧美一级免费观看| 美女精品一区二区| 日本视频中文字幕一区二区三区| 久久99蜜桃精品| 久久综合视频网| 国产成a人亚洲精品| 中文字幕色av一区二区三区| 99久久久免费精品国产一区二区 | 色中色一区二区| 亚洲蜜桃精久久久久久久| 色老汉av一区二区三区| 一区二区三区国产豹纹内裤在线| 欧美在线短视频| 另类的小说在线视频另类成人小视频在线| 欧洲精品在线观看| 日本在线播放一区二区三区| 日韩免费一区二区| 国产资源在线一区| 亚洲欧美国产77777| 3atv一区二区三区| 国产成人av电影在线播放| 中文字幕在线观看不卡| 91在线播放网址| 亚洲伦理在线免费看| 日本伊人午夜精品| 国产精品久久久久一区二区三区共| 99re在线视频这里只有精品| 亚洲va国产天堂va久久en| 久久亚洲二区三区| 91福利资源站| 国产成人啪免费观看软件| 亚洲在线免费播放| 久久众筹精品私拍模特| 日本韩国欧美在线| 极品少妇xxxx偷拍精品少妇| 国产精品剧情在线亚洲| 欧美精品丝袜中出| 成人精品gif动图一区| 首页国产欧美久久| 亚洲视频在线一区观看| 精品日本一线二线三线不卡| 色国产综合视频| 狠狠久久亚洲欧美| 亚洲va韩国va欧美va| 国产精品国产三级国产aⅴ中文| 欧美男同性恋视频网站| 99久久精品费精品国产一区二区| 日本va欧美va瓶| 亚洲免费观看高清在线观看| 国产日韩在线不卡| 日韩免费电影一区| 在线中文字幕一区| 99精品国产视频| 成人免费高清在线| 国产福利一区在线观看| 美女性感视频久久| 日韩不卡一二三区| 亚洲丶国产丶欧美一区二区三区| 17c精品麻豆一区二区免费| 国产午夜精品久久久久久免费视 | 国产mv日韩mv欧美| 蜜桃精品在线观看| 免费人成黄页网站在线一区二区| 玉足女爽爽91| 亚洲精品国产a久久久久久| 国产精品卡一卡二| 中文字幕在线一区二区三区| 国产精品欧美久久久久一区二区| 2023国产精品自拍| 久久午夜羞羞影院免费观看| 日韩视频国产视频| 日韩欧美资源站| 欧美成人免费网站| 欧美成人精精品一区二区频| 精品国产乱码久久久久久老虎 | 久久69国产一区二区蜜臀| 日本免费新一区视频| 久久精品99久久久| 国产一区二区三区四区在线观看| 激情成人午夜视频| 成人av在线播放网址| 99精品视频在线免费观看| 91女神在线视频| 777xxx欧美| 久久综合久久久久88| 国产精品丝袜一区| 综合欧美亚洲日本| 亚洲成人黄色小说| 精品一区二区三区香蕉蜜桃| 国产精品456| 99精品久久只有精品| 欧美体内she精高潮| 日韩欧美一级二级三级久久久| 欧美精品一区二区三区视频| 国产精品毛片高清在线完整版| 亚洲一区电影777| 久久精品国产精品亚洲红杏| 成人免费视频一区| 欧美性生交片4| 久久综合一区二区| 亚洲黄色片在线观看| 精品在线免费观看| 99久久免费视频.com| 日韩欧美区一区二| 亚洲欧美综合在线精品| 美女视频黄免费的久久| 波波电影院一区二区三区| 欧美一区二区三区日韩| 中文字幕日韩一区二区| 久久99久久99小草精品免视看| av在线综合网| 久久综合九色综合欧美就去吻| 一区二区三区精品视频| 国产成人精品免费视频网站| 欧美日韩在线三级| 亚洲日本免费电影| 国内精品国产成人国产三级粉色| 欧美性极品少妇|