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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? readtoken.c

?? cryptoboot is set of tools for disk encryption on Unix. It is especially suited to encrypt root par
?? C
字號(hào):
#include "all.h"#include "util.h"#include "tokencommon.h"#include "globalvars.h"/* These GUI variables are used in almost every function * - so they are global for convenience */CDKSCREEN *cdkscreen = (CDKSCREEN*) NULL;WINDOW *cursesWin = (WINDOW*) NULL;CDKLABEL *helpLabel = (CDKLABEL*) NULL;voidsetHelpLabel(str)	char* str;{	setCDKLabel(helpLabel, &str, 1, FALSE);}intdecryptUserTokenKeyWindow(out_userTokenKey, passphrase, userNode)	u_int8_t** out_userTokenKey;	char* passphrase;	xmlNodePtr userNode;{	CDKLABEL* label;	char* msg[3];	u_int8_t* ukey; /* decrypted userTokenKey */	int ret;	msg[0] = "";	msg[1] = "  Checking passphrase...  ";	msg[2] = "";		label = newCDKLabel(cdkscreen, CENTER, CENTER, msg, 3,										 TRUE, FALSE);	if (label == (CDKLABEL*) NULL) 	{		printf("Internal error.\n"); exit(1);	}	setCDKLabelBackgroundColor(label, "</5>");	drawCDKLabel(label, TRUE);	setHelpLabel("Please wait, it may take some time depending on iteration count.            ");	ret = getUserTokenKey(&ukey, NULL, userNode, passphrase);	if (ret != -1)		*out_userTokenKey = ukey;	setCDKLabelBackgroundColor(label, "</0>");	destroyCDKLabel(label);	return ret;}intokWindow(msg, lineCount)	char** msg;	int lineCount;{	CDKDIALOG* dialog;	char* button="OK";	dialog = newCDKDialog(cdkscreen, CENTER, CENTER, msg, lineCount,												&button, 1, A_REVERSE, FALSE, TRUE, FALSE);	if (dialog == (CDKDIALOG*) NULL)	{		return -100;	}	setCDKDialogBackgroundColor(dialog, "</5>");	drawCDKDialog(dialog, TRUE);	activateCDKDialog(dialog, (chtype*) NULL);	setCDKDialogBackgroundColor(dialog, "</0>");	destroyCDKDialog(dialog);	return 1;}intmsgWindow(msg, lineCount, timeout)	char** msg;	int lineCount;	int timeout;{	CDKLABEL* label;	label = newCDKLabel(cdkscreen, CENTER, CENTER, msg, lineCount,										 TRUE, FALSE);	if (label == (CDKLABEL*) NULL)	{		return -100;	}	setCDKLabelBackgroundColor(label, "</5>");	drawCDKLabel(label, TRUE);	sleep(timeout);	setCDKLabelBackgroundColor(label, "</0>");	destroyCDKLabel(label);	return 1;}intpassphraseEntryWindow(out_passphrase, userNode)	char** out_passphrase;	xmlNodePtr userNode;{	char* titleLeft = "Enter passphrase for user </B>";	char* titleTmp;	char* title;	char* userName;	CDKMENTRY* entry;	char* passphrase;	int ret;	userName = xmlGetProp(userNode, "name");	xstrcat(&titleTmp, titleLeft, (char*) userName);	xmlFree(userName);	xstrcat(&title, titleTmp, "<!B>: ");	free(titleTmp);		entry = newCDKMentry(cdkscreen, CENTER, CENTER, title, "",									  	 A_NORMAL, ' ', vHMIXED,											 45, 2, 20, 0, TRUE, FALSE);	if (entry == (CDKMENTRY*) NULL)	{		printf("CDK error.\n"); exit(1);	}	setHelpLabel("Press ENTER to accept passphrase, press ESC to return to user selection.    ");	setCDKMentryBackgroundColor(entry, "</5>");	passphrase = activateCDKMentry(entry, (chtype*) NULL);	if (entry->exitType == vNORMAL)	{		*out_passphrase = strdup(passphrase);		ret = 1;	}	else		ret = -1;	setCDKMentryBackgroundColor(entry, "</0>");	destroyCDKMentry(entry);	free(title);	return ret;}intinsertTokenWindow(ctoken, timeout)	xmlDocPtr* ctoken;	int timeout;{	char* text[5];	char* tokenStateText = "unknown";	char tsline[80];	char toline[80];	CDKLABEL* label;	int input;	WINDOW* tmpWin;	int timeLeft, sec;	int ret;	xmlNodePtr cur;		xmlChar* tokenDev;	xmlChar* tokenFS;	xmlChar* tokenDir;	xmlChar* tokenFile;		/* Get token info from config file */	cur = xmlDocGetRootElement(ctab);		for (cur = cur->xmlChildrenNode; cur != NULL; cur = cur->next)	{		if (0 == xmlStrcmp(cur->name, (const char*) "token"))		{			tokenDev = xmlGetProp(cur, "dev");			tokenFS = xmlGetProp(cur, "fstype");			tokenDir = xmlGetProp(cur, "mnt");			tokenFile = xmlGetProp(cur, "file");			break;		}	}		sprintf(tsline, "Token state: </B>%s<!B>", tokenStateText);		if (timeout != -1)	{		sprintf(toline, "%2d seconds remaining...", timeout);		setHelpLabel("Press C to cancel timeout, press Q to quit.                                 ");	}	else	{		sprintf(toline, "Token detection in progress...");		setHelpLabel("Press Q to quit.                                                            ");	}	text[0] = "Please insert security token.          ";	text[1] = "";	text[2] = tsline;	text[3] = "";	text[4] = toline;		label = newCDKLabel(cdkscreen, CENTER, CENTER, text, 5,									  	TRUE, FALSE);	if (label == (CDKLABEL *)NULL)	{		printf("CDK error.\n");		exit(1);	}	setCDKLabelBackgroundColor(label, "</5>");	drawCDKLabel(label, TRUE);		/* Need to create invisible window, to do wgetch;	 * New window creation is needed, because wgetch erases cdk window	 * otherwise. */	tmpWin = newwin(1,1,0,0);	curs_set(0); /* hide cursor */	nodelay(tmpWin, TRUE);	timeLeft = timeout;	sec = 10;	while(1)	{		input = wgetch(tmpWin);		if ((input == 'q') || (input == 'Q')) break;		if ((input == 'c') || (input == 'C'))		{			timeout = -1;			sprintf(toline, "Token detection in progress...");			setHelpLabel("Press Q to quit.                                                            ");		}				usleep(100000);				if (sec == 0)		{			if (timeout != -1)			{				timeLeft--;			}			sec = 10;		}		sec--;		if (timeLeft == 0) break;		if ((sec == 0) || (sec == 5))		{			ret = getTokenConfig(tokenDev, tokenFS,													 tokenDir, tokenFile, &tokenStateText);						/* Update display */			sprintf(tsline, "Token state: </B>%s<!B>", tokenStateText); 			if (-1 != timeout)				sprintf(toline, "%2d seconds remaining...", timeLeft);			else				sprintf(toline, "Token detection in progress...");			setCDKLabelMessage(label, text, 5);						if (-1 == ret)			{				sleep(3);				exit(1);			}			else if (1 == ret)			{				sleep(1);				break;			}		}	}		nodelay(tmpWin, FALSE);	delwin(tmpWin);	curs_set(1); /* show cursor */		setCDKLabelBackgroundColor(label, "</0>");	destroyCDKLabel(label);	/* Free memory used by xml strings */	xmlFree(tokenDev);	xmlFree(tokenFS);	xmlFree(tokenDir);	xmlFree(tokenFile);	return ret;}voidcreateUserTab(out_userTab, nodeTab, userCount, size)	char*** out_userTab;	xmlNodePtr* nodeTab;	int userCount;	int size;{	char** tab;	int i, len, marg;	char* line;	char* name;		tab = malloc(sizeof(char*) * userCount);	for (i = 0; i < userCount; i++)	{		name = (char*) xmlGetProp(nodeTab[i], "name");		tab[i] = name;	}	for (i = 0; i < userCount; i++)	{		name = tab[i];		line = malloc(sizeof(char) * (size + 1));		len = strlen(name);		if (len > size)			len = size;		/* Fill string with spaces */		memset(line, ' ', size);		line[size] = '\0';		marg = (size - len) / 2;		memcpy(line + marg, name, len);		free(name);		tab[i] = line;	}		*out_userTab = tab;	return;}/* FIXME: check if there is at least one user defined in cryptotab *        at begining of readtoken - if not bail out with error */intuserSelectWindow(out_tUserNode, out_dUserNode, out_oneUserFlag)	xmlNodePtr* out_tUserNode;	xmlNodePtr* out_dUserNode;	int* out_oneUserFlag;{	/* Declare variables. */	CDKSCROLL *scrollList	= (CDKSCROLL *)NULL;	char* title			= "Select your username";	char** userTab;	char* msg[3];	int selection, userCount, ret, i;	xmlNodePtr* dUNodeTab;	xmlNodePtr* tUNodeTab;	xmlNodePtr* diskTab;	xmlNodePtr* tokenTab;		fillUserTab(&tokenTab, ctoken);	fillUserTab(&diskTab, ctab);	userCount = joinUNodeTabs(&tUNodeTab, &dUNodeTab, tokenTab, diskTab);	if (0 == userCount)	{		for (i = 0; NULL != tokenTab[i]; i++);		if (0 == i)		{			msg[0] = "No users on token found.";			okWindow(msg, 1);			ret = -1;		}		else		{			msg[0] = "No user on token is allowed";			msg[1] = "to access this machine.";			okWindow(msg, 2);			ret = -1;		}	}	else if (1 == userCount)	{		/* Only one user - we can skip user selection */		*out_tUserNode = tUNodeTab[0];		*out_dUserNode = dUNodeTab[0];		*out_oneUserFlag = 1;		ret = 1;	}	else	{		/* Create string array for CDK scrollList */		createUserTab(&userTab, tUNodeTab, userCount, strlen(title));			/* Create the scrolling list. */		scrollList = newCDKScroll (cdkscreen, CENTER, CENTER, NONE,								 userCount + 3, 1, title, userTab, userCount,								 FALSE, A_REVERSE, TRUE, FALSE);		if (scrollList == (CDKSCROLL *)NULL)		{			printf("CDK errror.\n");			exit(1);		}					setCDKScrollBackgroundColor(scrollList, "</5>");		drawCDKScroll (scrollList, 1);				setHelpLabel("Select user with arrows, then press ENTER. Press ESC to go back.             "); 				/* Activate the scrolling list. */		selection = activateCDKScroll (scrollList, (chtype *)NULL);		setCDKScrollBackgroundColor(scrollList, "</0>");			if (scrollList->exitType == vNORMAL)		{			*out_tUserNode = tUNodeTab[selection];			*out_dUserNode = dUNodeTab[selection];			ret = 1;		}		else			ret = -1;		/* Free memory used by userTab */		for (i = 0; i < userCount; i++)			free(userTab[i]);		free(userTab);		destroyCDKScroll (scrollList);	}	/* Free xml node arrays */	free(tokenTab);	free(diskTab);	free(tUNodeTab);	free(dUNodeTab);	return ret;}intmain(){	char* dummyHelp = "                                                                            ";	char* cryptoBootTitle = {"                 </B>Cryptoboot/readToken 1.0</!B> by Pawel Pokrywka                 "};	char* msg[10]; /* for ok messages */	CDKLABEL* titleLabel = (CDKLABEL *)NULL;	int i, ret;	xmlNodePtr tUserNode;	xmlNodePtr dUserNode;	char* passphrase;	u_int8_t* userTokenKey;	u_int8_t* masterKey;	int loopTokenInsertionPhase;	int loopUserSelectionPhase;	int insertTokenTimeout = 5;	int ouflag;	int successFlag;	int shm;		/* Load configuration */	ctab = xmlParseFile(CONFIG_FILE);	if (ctab == NULL)	{		fprintf(stderr, "Config file parsing error.\n");		exit(1);	}									/* Get shared memory segment for masterKey */	shm = getAuthdata(1);	if (shm == -1)	{		perror("Shared memory error");		exit(1);	}	/* Set up ncurses */ 	cursesWin = initscr();	/* Set up CDK */	cdkscreen = initCDKScreen (cursesWin);	/* Set up CDK Colors. */	initCDKColor();	/* NCurses variable - time after single ESC works	 * - by default it is 1000 = 1s	 */	ESCDELAY = 50;		/* Title window */	titleLabel = newCDKLabel(cdkscreen, LEFT, TOP, &cryptoBootTitle, 1,									  			 FALSE, FALSE);	setCDKLabelBackgroundColor(titleLabel, "</5>");	/* Help window */	helpLabel = newCDKLabel(cdkscreen, LEFT, BOTTOM, &dummyHelp, 1,													FALSE, FALSE);	setCDKLabelBackgroundColor(helpLabel, "</5>");	drawCDKLabel(titleLabel, FALSE);	drawCDKLabel(helpLabel, FALSE);	successFlag = 0;	do	{		/* Prompt for the token initially only one time */		loopTokenInsertionPhase = 0;		ret = insertTokenWindow(&ctoken, insertTokenTimeout);		if (ret == 1)		{			do			{				/* Prompt for username initially only one time */				loopUserSelectionPhase = 0;				ouflag = 0;				ret = userSelectWindow(&tUserNode, &dUserNode, &ouflag);				if (ret == 1)				{					/* Get passphrase */					ret = passphraseEntryWindow(&passphrase, tUserNode);					if (ret == 1)					{						/* Derive userTokenKey */						ret = decryptUserTokenKeyWindow(&userTokenKey, passphrase,																						tUserNode);						free(passphrase); /* passphrase is not needed now */						if (ret == 1)						{							/* Decrypt masterKey using userTokenKey */							ret = decryptMasterKey(&masterKey, userTokenKey,																		 dUserNode);							free(userTokenKey); /* user key not needed now */							if (ret == 1)							{								/* Copy masterKey to shared memory segment */								for (i = 0; i < 128/8; i++)									authdata[i] = masterKey[i];																	/* Free masterKey memory */								free(masterKey);																	msg[0]="";								msg[1]="  Login successfull.  ";								msg[2]="";								setHelpLabel("Decrypted Master Key placed in shared memory.");								msgWindow(msg, 3, 2);								successFlag = 1;							}							else							{								msg[0]="Master key decryption failure.";								okWindow(msg, 1);								loopUserSelectionPhase = 1;							}						}						else						{							msg[0]="Incorrect passphrase.";							okWindow(msg, 1);							loopUserSelectionPhase = 1;						}					}					else if (ouflag == 1)					{						/* User wants to get back to token insertion phase */						loopTokenInsertionPhase = 1;						insertTokenTimeout = -1;					}					else					{						/* User wants to get back to user selection */						loopUserSelectionPhase = 1;					}				}				else				{					/* User wants to get back to token insertion */					loopTokenInsertionPhase = 1;					insertTokenTimeout = -1;				}			}			while(loopUserSelectionPhase == 1);			/* Free token xml file */			xmlFreeDoc(ctoken);			}	}	while(loopTokenInsertionPhase == 1);	/* Free config file */	xmlFreeDoc(ctab);		/* Clean up cdk */	destroyCDKLabel(titleLabel);	destroyCDKLabel(helpLabel);	destroyCDKScreen(cdkscreen);	delwin (cursesWin);	endCDK();	if (1 != successFlag)	{		/* Destroy shm segment */		ret = shmdt(authdata);		if (ret == -1)		{			perror("shmdt");			exit(2);		}		ret = shmctl(shm, IPC_RMID, NULL);		if (ret == -1)		{			perror("shmctl");			exit(3);		}		return 1;	}	else		return 0;}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美精品一区二区三区很污很色的| 日本韩国精品在线| 成人免费在线观看入口| 欧美久久久久中文字幕| 国产成人午夜99999| 天天综合色天天综合色h| 国产午夜亚洲精品午夜鲁丝片| 欧美日韩另类一区| 成人av网址在线观看| 精品在线你懂的| 亚洲国产成人高清精品| 成人欧美一区二区三区视频网页| 日韩免费一区二区三区在线播放| 在线欧美日韩精品| 成人免费视频一区| 久久国产夜色精品鲁鲁99| 亚洲成人av中文| 亚洲人成影院在线观看| 亚洲国产成人自拍| 久久亚洲精精品中文字幕早川悠里 | 亚洲欧洲综合另类| 国产欧美一区二区三区在线看蜜臀 | eeuss鲁片一区二区三区| 国产综合久久久久影院| 免费人成精品欧美精品| 亚洲va欧美va人人爽午夜| 国产一区 二区| 免费成人在线观看| 午夜精品久久一牛影视| 亚洲综合无码一区二区| 亚洲精品视频在线看| 国产精品灌醉下药二区| 中文字幕一区不卡| 亚洲欧美福利一区二区| 中文字幕日本不卡| 日韩一区中文字幕| 亚洲欧美日韩国产手机在线| 1区2区3区欧美| 亚洲男人天堂av网| 一区二区三区精品| 亚洲成av人片在www色猫咪| 亚洲午夜一区二区三区| 午夜亚洲福利老司机| 婷婷久久综合九色国产成人| 香蕉影视欧美成人| 视频在线观看一区二区三区| 五月天激情综合| 美腿丝袜在线亚洲一区| 国产麻豆一精品一av一免费 | 一本久久a久久精品亚洲| 94-欧美-setu| 欧美在线看片a免费观看| 欧美日韩在线亚洲一区蜜芽| 欧美裸体一区二区三区| 日韩欧美另类在线| 国产视频一区在线播放| 亚洲视频你懂的| 亚洲高清在线视频| 美国十次综合导航| 国产成人精品免费| 日本福利一区二区| 欧美一区二区日韩| 国产欧美一区二区精品久导航| 中文字幕在线观看不卡| 一级精品视频在线观看宜春院| 天天免费综合色| 国产伦精品一区二区三区视频青涩| 成人精品免费视频| 欧美日韩午夜在线视频| 精品日韩99亚洲| 亚洲欧洲中文日韩久久av乱码| 亚洲国产精品一区二区www| 美国三级日本三级久久99| 国产成人亚洲精品狼色在线| 91国偷自产一区二区三区成为亚洲经典| 在线视频欧美精品| 久久久久久久久蜜桃| 亚洲日本在线天堂| 老汉av免费一区二区三区| 成人av在线看| 在线91免费看| 中文字幕一区二区三区色视频| 三级在线观看一区二区| 国产91精品久久久久久久网曝门| 欧美中文字幕不卡| 欧美激情在线一区二区三区| 性做久久久久久| 成人精品国产福利| 日韩欧美一级二级三级久久久 | 久久精品国产成人一区二区三区 | 亚洲国产综合在线| 盗摄精品av一区二区三区| 欧美日韩精品免费观看视频| 国产亚洲精品bt天堂精选| 日韩精品91亚洲二区在线观看 | 日韩午夜av一区| 亚洲欧美视频在线观看| 国产在线播放一区三区四| 精品婷婷伊人一区三区三| 国产欧美精品一区二区色综合朱莉| 亚洲第一精品在线| 99国产精品久久久久| 久久伊人蜜桃av一区二区| 亚洲午夜三级在线| 91在线观看地址| 国产日产欧美一区二区三区| 日本不卡一二三| 91久久一区二区| 中文字幕一区在线观看视频| 精品一区二区免费看| 在线成人免费视频| 一区二区三区精品视频在线| www.综合网.com| 国产亚洲一区字幕| 精品一区二区三区蜜桃| 欧美一激情一区二区三区| 亚洲午夜精品一区二区三区他趣| 成人精品视频一区二区三区| 欧美精品一区二区三区一线天视频| 亚洲3atv精品一区二区三区| 色哦色哦哦色天天综合| 国产精品乱人伦| 久久久九九九九| av综合在线播放| 久久精品国产精品亚洲精品| 欧美日韩1区2区| 亚洲国产一区二区a毛片| 精品国产乱码久久久久久闺蜜| 93久久精品日日躁夜夜躁欧美| 91日韩一区二区三区| 国产精品欧美一区二区三区| 黄色日韩网站视频| 精品久久人人做人人爽| 美女视频一区二区三区| 欧美一区二区三区婷婷月色| 天天色综合成人网| 日韩亚洲欧美成人一区| 欧美aaaaaa午夜精品| 日韩女优毛片在线| 国产一区91精品张津瑜| 欧美经典一区二区| 成人ar影院免费观看视频| 亚洲欧洲精品天堂一级| 色欧美片视频在线观看| 亚洲国产一二三| 日韩一级大片在线| 国产一区久久久| 亚洲国产精品精华液2区45| 成人av动漫在线| 亚洲一级二级在线| 日韩欧美国产综合在线一区二区三区 | 色综合久久中文综合久久牛| 亚洲综合在线电影| 91精品国模一区二区三区| 久久成人麻豆午夜电影| 国产欧美一区二区精品性色超碰 | 国产一区二区在线视频| 国产视频一区二区在线| 91麻豆国产福利精品| 亚洲成人精品影院| 欧美一区二区三区喷汁尤物| 精品一区二区综合| 日韩伦理av电影| 欧美顶级少妇做爰| 国产麻豆精品视频| 一区二区三区在线播放| 91精品国产综合久久精品图片| 国产一区二区调教| 亚洲色图视频免费播放| 91精品国产综合久久久久久久 | 日本韩国欧美一区二区三区| 日韩中文欧美在线| 亚洲国产电影在线观看| 欧美性感一类影片在线播放| 精品午夜一区二区三区在线观看| 欧美国产乱子伦 | 日本精品视频一区二区| 免费成人在线观看| 亚洲欧美日本韩国| 欧美大黄免费观看| 一本色道a无线码一区v| 另类小说视频一区二区| 一区二区欧美视频| 久久久国产综合精品女国产盗摄| 91福利视频网站| 国产精品91一区二区| 亚洲一区二区三区四区在线| 久久奇米777| 欧美日韩国产影片| av在线不卡观看免费观看| 日韩vs国产vs欧美| 亚洲女人小视频在线观看| 欧美精品一区二区三区视频| 欧美亚洲自拍偷拍| 成人美女视频在线观看18| 免费亚洲电影在线| 亚洲国产成人tv| 亚洲视频每日更新| 国产欧美一二三区| 欧美成人性战久久|