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

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

?? tokencfgcommands.c

?? cryptoboot is set of tools for disk encryption on Unix. It is especially suited to encrypt root par
?? C
字號:
#include "all.h"#include <stdio.h>#include <readline/readline.h>#include <readline/history.h>#include <stdlib.h>#include "shell.h"#include "cryptokencfg.h"#include "tokencommon.h"#include "globalvars.h"intcreateNewTUser(out_userNode, name)	xmlNodePtr* out_userNode;	char* name;{	xmlNodePtr cur, userNode;		cur = xmlDocGetRootElement(ctoken);	for (cur = cur->xmlChildrenNode; cur != NULL; cur = cur->next)	{		if (0 == xmlStrcmp(cur->name, "users"))		{			userNode = xmlNewChild(cur, NULL, "user", NULL);			xmlSetProp(userNode, "name", name);			*out_userNode = userNode;			return 1;		}	}	return -1;}voidremoveAuthEntry(userNode)	xmlNodePtr userNode;{	xmlNodePtr cur;	/* Remove pbkdf2 and userkey nodes */	for (cur = userNode->xmlChildrenNode; cur != NULL; cur = cur->next)	{		if (0 == xmlStrcmp(cur->name, "pbkdf2"))		{			xmlUnlinkNode(cur);			xmlFreeNode(cur);			break;		}	}	for (cur = userNode->xmlChildrenNode; cur != NULL; cur = cur->next)	{		if (0 == xmlStrcmp(cur->name, "userkey"))		{			xmlUnlinkNode(cur);			xmlFreeNode(cur);			break;		}	}	return;}/* Called by createAuthEntry to write prepared data to xml */intaddAuthEntryXML(userNode, count, salt, key, magic)	xmlNodePtr userNode;	unsigned long count;	u_int8_t* salt;	u_int8_t* key;	u_int8_t* magic;{	char* keyText;	char* magicText;	char* saltText;	char* countText;	xmlNodePtr userkeyNode, key128Node, pbkdf2Node, saltNode, magicNode;	/* Convert encrypted key, magic and salt to hex */	byte2hex(&keyText, key, 128/8);	byte2hex(&saltText, salt, 64/8);	byte2hex(&magicText, magic, 128/8);	/* Convert iteration count to string */	num2str(&countText, count);		pbkdf2Node = xmlNewChild(userNode, NULL, "pbkdf2", NULL);	xmlSetProp(pbkdf2Node, "iterations", countText);	saltNode = xmlNewTextChild(pbkdf2Node, NULL, "salt", saltText);	userkeyNode = xmlNewChild(userNode, NULL, "userkey", NULL);	key128Node = xmlNewTextChild(userkeyNode, NULL, "key128", keyText);	magicNode = xmlNewTextChild(userkeyNode, NULL, "encmagic", magicText);	free(countText);	free(saltText);	free(keyText);	return 1;}voidcreateAuthEntry(dkey, userNode, passphrase, count)	u_int8_t* dkey;	xmlNodePtr userNode;	unsigned long count;	char* passphrase;{	u_int8_t* salt;	u_int8_t* ekey;	u_int8_t* pkey;	u_int8_t* emagic;	int ret;	AES_KEY ik;		salt = malloc(64/8);	ret = RAND_bytes(salt, 64/8);	if (0 == ret)	{		printf("RAND_bytes: %lu\n", ERR_get_error());		exit(1);	}	/* Derive passphrase key - pkey */	ret = pkcs5_pbkdf2(&pkey, 128/8, passphrase,										 strlen(passphrase), salt, 64/8, count);	if (ret != 0)	{		printf("pbkdf2 error.\n");		exit(1);	}	else	{		ekey = (u_int8_t*) malloc(128/8);		/* Encrypt user token key with pkey */		AES_set_encrypt_key(pkey, 128, &ik);		AES_ecb_encrypt(dkey, ekey, &ik, AES_ENCRYPT);								free(pkey);				/* Encrypt magic string with dkey */		emagic = (u_int8_t*) malloc(128/8);		AES_set_encrypt_key(dkey, 128, &ik);		AES_ecb_encrypt(MAGIC_STRING, emagic, &ik, AES_ENCRYPT);			addAuthEntryXML(userNode, count, salt, ekey, emagic);		free(emagic);		free(salt);		free(ekey);	}	return;}intcAdd(arg)	char* arg;{	char* rawName;	char* name;	char* rawICountText;	char* iCountText;	char* passphrase;	char* passphraseVer;	char answer;	unsigned long iCount;	u_int8_t* dkey;	int ret, stop;	xmlNodePtr userNode;		printf("Please enter new user's information.\n");	rawName = readline("User name: ");	if ((NULL == rawName) || (0 == strcmp("", name = trim(rawName))))	{		printf("User name could not be empty.\n");	}	else	{		rawICountText = readline("Iteration count [65536]: ");		stop = 0;		if ((NULL == rawICountText) ||				(0 == strcmp("", iCountText = trim(rawICountText))))		{			iCount = 65536;		}		else		{			ret = str2num(&iCount, iCountText);			if (ret == -1)			{				printf("Bad format of iteration count.\n");				stop = 1;			}		}		free(rawICountText);		if (stop != 1)		{			getPassphrase(&passphrase, "Passphrase: ");			getPassphrase(&passphraseVer, "Verify passphrase: ");			if (0 != strcmp(passphrase, passphraseVer))			{				printf("Passphrases do not match.\n");			}			else			{				answer=ynQuestion("Do you want to manually enter the key?",'n');				if ('y' == answer)				{					printf("FIXME: Sorry, not yet implemented.\n");				}				/* else FIXME */				{					dkey = malloc(128/8);					ret = RAND_bytes(dkey, 128/8);					if (0 == ret)					{						printf("RAND_bytes: %lu\n", ERR_get_error());						exit(1);					}					printf("Creating user... ");					fflush(stdout);					createNewTUser(&userNode, name);					createAuthEntry(dkey, userNode, passphrase, iCount);					printf("done.\n");					free(dkey);				}			}			free(passphrase);			free(passphraseVer);		}	}	free(rawName);		return 1;}intcPasswd(arg)	char* arg;{	unsigned long ui;	int ret;	xmlNodePtr* utab;	xmlNodePtr user;	xmlChar* name;	char* oldPassphrase;	char* newPassphrase;	char* newPassphraseVer;	unsigned long count;	u_int8_t* dkey;		if (NULL == arg)	{		printf("User number as argument required.\n");		return 1;	}	ret = str2num(&ui, arg);	if (-1 == ret)	{		printf("Bad index '%s'.\n", arg);		return 1;	}		fillUserTab(&utab, ctoken);		ret = getNode(&user, utab, ui);	if (-1 == ret)	{		printf("No such user.\n");	}	else	{		name = xmlGetProp(user, "name");		printf("Changing passphrase for user '%s'.\n", name);		getPassphrase(&oldPassphrase, "Old passphrase: ");		printf("Checking passphrase... ");		fflush(stdout);		ret = getUserTokenKey(&dkey, &count, user, oldPassphrase);		if (-1 == ret)		{			printf("bad.\n");		}		else		{			printf(" correct.\n");			getPassphrase(&newPassphrase, "New passphrase: ");			getPassphrase(&newPassphraseVer, "Verify new passphrase: ");			if (0 != strcmp(newPassphrase, newPassphraseVer))			{				printf("New passphrases don't match.\n");			}			else			{				printf("Updating passphrase... ");				fflush(stdout);				removeAuthEntry(user);				createAuthEntry(dkey, user, newPassphrase, count);				printf("done.\n");			}			free(newPassphrase);			free(newPassphraseVer);			free(dkey);		}		free(oldPassphrase);		xmlFree(name);	}	free(utab);	return 1;}intcShowkey(arg)	char* arg;{	unsigned long ui;	int ret, i;	xmlNodePtr* utab;	xmlNodePtr user;	xmlChar* name;	char* prompt;	char* tmp;	char* passphrase;	u_int8_t* dkey;		if (NULL == arg)	{		printf("User number as argument required.\n");		return 1;	}	ret = str2num(&ui, arg);	if (-1 == ret)	{		printf("Bad index '%s'.\n", arg);		return 1;	}		fillUserTab(&utab, ctoken);		ret = getNode(&user, utab, ui);	if (-1 == ret)	{		printf("No such user.\n");	}	else	{		name = xmlGetProp(user, "name");		xstrcat(&tmp, "Enter passphrase for user '", name);		xstrcat(&prompt, tmp, "': ");		free(tmp);		getPassphrase(&passphrase, prompt);		free(prompt);		printf("Checking passphrase... ");		fflush(stdout);		ret = getUserTokenKey(&dkey, NULL, user, passphrase);		if (-1 == ret)		{			printf("bad.\n"); 		}		else		{			printf("correct.\n");			printf("Token key for user '%s':\n\t", name);			for (i = 0; i < 128/8; i++)			{				if (i == 128/8/2)					printf(" ");				printf(" %.2x", dkey[i]);			}			printf("\n");			free(dkey);		}				free(passphrase);		xmlFree(name);	}	free(utab);	return 1;}intcRemove(arg)	char* arg;{	unsigned long ui;	int ret;	xmlNodePtr* utab;	xmlNodePtr user;	char answer;	xmlChar* name;		if (NULL == arg)	{		printf("User number as argument required.\n");		return 1;	}	ret = str2num(&ui, arg);	if (-1 == ret)	{		printf("Bad index '%s'.\n", arg);		return 1;	}		fillUserTab(&utab, ctoken);		ret = getNode(&user, utab, ui);	if (-1 == ret)	{		printf("No such user.\n");	}	else	{		name = xmlGetProp(user, "name");		printf("You are going to remove user '%s' from token.\n", name);		answer = ynQuestion("Are you sure?", 'n');		if ('y' == answer)		{			xmlUnlinkNode(user);			xmlFreeNode(user);			printf("User '%s' removed from token.\n", name);		}		xmlFree(name);	}	free(utab);	return 1;}intcList(arg)	char* arg;{	xmlNodePtr* utab;	int i;	fillUserTab(&utab, ctoken);	if (NULL == utab[0])		printf("No user entries in token configuration file.\n");	else	{		printf("  #\r");		printf(" \tName\r\n");		for (i = 0; NULL != utab[i]; i++)		{			printUserLine(i, utab[i]);		}	}	free(utab);	return 1;}intcSave(arg)	char* arg;{	int ret;	char* file;	char answer;	if (NULL != arg)		file = arg;	else		file = ctokenFile;		printf("Configuration will be written to '%s'.\n", file);	answer = ynQuestion("Are you sure?", 'n');	if (answer == 'y')	{		ret = xmlSaveFormatFile(file, ctoken, 1);		if (-1 == ret)			printf("Writing configuration to file '%s' failed.\n", file);		else			printf("Configuration saved to '%s'\n", file);	}	return 1;}intcHelp(arg)	char* arg;{	int i;	printf("Possible commands:\n");	for(i = 0; NULL != commands[i].name; i++)		printf("\t%s %s\r\t\t\t%s\n", commands[i].name, commands[i].args,																		commands[i].doc);	return 1;}intcQuit(arg)	char* arg;{	return -1;}Command commands[] ={	{"showkey", cShowkey, "Show key for user n", "n"},	{"passwd", cPasswd, "Change passphrase for user n", "n"},	{"remove", cRemove, "Remove user entry", "n"},	{"add", cAdd, "Add new user", ""},	{"list", cList, "List user entries", ""},	{"save", cSave, "Save token configuration", "[file]"},	{"help", cHelp, "Display help", ""},	{"quit", cQuit, "Quit program", ""},	{(char*) NULL, (rl_icpfunc_t*) NULL, (char*) NULL}};

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美成人三级电影在线| 6080日韩午夜伦伦午夜伦| 色一情一乱一乱一91av| 欧美丰满美乳xxx高潮www| 国产天堂亚洲国产碰碰| 日韩1区2区日韩1区2区| 91小视频在线观看| 久久久久久久久久久电影| 亚洲成人第一页| 91免费精品国自产拍在线不卡| 日韩欧美精品三级| 亚洲va国产va欧美va观看| av动漫一区二区| 日韩av一区二区三区| 色综合久久综合| 欧美激情综合网| 久久国产成人午夜av影院| 色久优优欧美色久优优| 亚洲视频香蕉人妖| 成人丝袜18视频在线观看| 欧美精品一区二区三区久久久| 午夜日韩在线观看| 欧美日韩中文一区| 丝袜美腿亚洲综合| 精品视频一区三区九区| 一区二区不卡在线播放 | 不卡电影免费在线播放一区| 日韩免费在线观看| 久久精品噜噜噜成人av农村| 日韩一级黄色片| 视频一区二区不卡| 欧美一区二区三区视频| 奇米色一区二区| 日韩一卡二卡三卡| 国内精品在线播放| 欧美韩日一区二区三区| 成人福利视频网站| 国产精品久久久久影院亚瑟| 成人精品gif动图一区| 国产精品福利影院| 91小视频在线观看| 亚洲国产wwwccc36天堂| 欧美亚洲国产一区在线观看网站| 一区二区高清视频在线观看| 欧美色图在线观看| 蜜臀99久久精品久久久久久软件| 欧美一区二区网站| 国产在线精品一区二区夜色 | 自拍偷自拍亚洲精品播放| 91麻豆自制传媒国产之光| 亚洲自拍偷拍欧美| 日韩欧美国产午夜精品| 国产精品香蕉一区二区三区| 国产欧美一区二区精品仙草咪| 国产a视频精品免费观看| 亚洲少妇最新在线视频| 欧美酷刑日本凌虐凌虐| 国产一区二区三区精品视频| 国产精品欧美一区喷水| 欧美视频在线不卡| 国内精品第一页| 国产精品嫩草影院com| 欧美私人免费视频| 色婷婷国产精品| 日韩不卡在线观看日韩不卡视频| 日韩精品中文字幕一区二区三区| 成人听书哪个软件好| 亚洲午夜久久久| 久久久久一区二区三区四区| 91欧美一区二区| 久久爱www久久做| 一区二区免费看| 欧美精品一区在线观看| 日本二三区不卡| 国产一区二区三区综合| 亚洲一区二区影院| 久久九九国产精品| 欧美一区二区视频在线观看| 本田岬高潮一区二区三区| 青青国产91久久久久久 | 国产日韩欧美在线一区| 欧美日韩一二三| 成人激情视频网站| 麻豆91在线播放| 亚洲成人免费在线| 亚洲日本电影在线| 久久精品人人做| 日韩一区二区电影网| 在线观看精品一区| 成人黄动漫网站免费app| 美女脱光内衣内裤视频久久影院| 一区二区三区四区视频精品免费| 久久久久久一二三区| 欧美精品日韩一本| 在线一区二区观看| 97国产精品videossex| 国产精品亚洲第一| 精品亚洲成a人| 蜜桃av一区二区| 亚洲高清免费观看 | 欧美视频三区在线播放| 99久久夜色精品国产网站| 国产不卡在线一区| 国产宾馆实践打屁股91| 国产尤物一区二区在线| 激情成人午夜视频| 久久成人麻豆午夜电影| 日韩高清在线观看| 天天综合网天天综合色| 五月婷婷综合网| 日韩不卡手机在线v区| 日韩电影一区二区三区四区| 亚洲va国产天堂va久久en| 婷婷中文字幕一区三区| 手机精品视频在线观看| 日韩和欧美一区二区| 日本成人在线电影网| 日本va欧美va瓶| 美腿丝袜亚洲一区| 极品销魂美女一区二区三区| 久久99久久久欧美国产| 精品一二三四在线| 久久99热狠狠色一区二区| 国产一区二区在线视频| 成人综合婷婷国产精品久久蜜臀| 国产suv精品一区二区6| av电影在线观看完整版一区二区| 99精品桃花视频在线观看| 色综合久久综合网欧美综合网| 在线免费观看一区| 欧美精品xxxxbbbb| 精品美女一区二区| 国产欧美精品一区二区色综合| 中文字幕制服丝袜一区二区三区 | 欧美亚洲国产bt| 日韩天堂在线观看| 久久久久久久性| 国产精品毛片久久久久久久| 一区二区三区四区在线播放 | 亚洲影院理伦片| 精品在线视频一区| 成人午夜激情视频| 欧美视频一区二区| 久久精品一区二区三区不卡| 亚洲视频在线一区观看| 香蕉成人伊视频在线观看| 国产麻豆视频一区二区| 在线精品视频一区二区三四 | 欧美男人的天堂一二区| 久久免费看少妇高潮| 亚洲码国产岛国毛片在线| 天堂一区二区在线免费观看| 国产精品一区二区在线播放| 91免费视频网址| 精品噜噜噜噜久久久久久久久试看| 中文字幕免费观看一区| 午夜精品123| av欧美精品.com| 日韩一卡二卡三卡| 亚洲黄色免费网站| 国产一区二区三区四| 欧美日韩在线播放一区| 欧美激情综合在线| 久久狠狠亚洲综合| 日本韩国欧美国产| 亚洲国产精品精华液2区45| 日韩激情一区二区| 一本大道久久a久久精品综合| 精品国产伦一区二区三区观看方式| 亚洲欧美一区二区三区孕妇| 国产精品资源网| 5566中文字幕一区二区电影| 亚洲视频在线一区二区| 国产999精品久久久久久绿帽| 制服丝袜亚洲色图| 亚洲黄色性网站| 99国产精品久久久久久久久久 | 欧美一区二区三区电影| 亚洲精品老司机| 成人综合在线网站| 日韩免费观看2025年上映的电影| 亚洲一区在线视频观看| 色综合久久六月婷婷中文字幕| 久久久精品一品道一区| 美女视频第一区二区三区免费观看网站| 91日韩在线专区| 亚洲欧美成人一区二区三区| 成人在线视频一区| 国产精品系列在线| 国产精品99久久久久久久女警| 91精品欧美一区二区三区综合在| 亚洲国产精品久久久男人的天堂| 91视频你懂的| 亚洲色图第一区| 色激情天天射综合网| 亚洲一本大道在线| 在线成人av影院| 日韩高清在线不卡| 欧美不卡一区二区三区| 麻豆精品国产91久久久久久|