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

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

?? puttygen.c

?? 遠(yuǎn)程登陸工具軟件源碼 用于遠(yuǎn)程登陸unix
?? C
?? 第 1 頁 / 共 3 頁
字號:
/*
 * PuTTY key generation front end (Windows).
 */

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

#define PUTTY_DO_GLOBALS

#include "putty.h"
#include "ssh.h"

#include <commctrl.h>

#ifdef MSVC4
#define ICON_BIG        1
#endif

#define WM_DONEKEY (WM_XUSER + 1)

#define DEFAULT_KEYSIZE 1024

static int requested_help;

static char *cmdline_keyfile = NULL;

/*
 * Print a modal (Really Bad) message box and perform a fatal exit.
 */
void modalfatalbox(char *fmt, ...)
{
    va_list ap;
    char *stuff;

    va_start(ap, fmt);
    stuff = dupvprintf(fmt, ap);
    va_end(ap);
    MessageBox(NULL, stuff, "PuTTYgen Fatal Error",
	       MB_SYSTEMMODAL | MB_ICONERROR | MB_OK);
    sfree(stuff);
    exit(1);
}

/* ----------------------------------------------------------------------
 * Progress report code. This is really horrible :-)
 */
#define PROGRESSRANGE 65535
#define MAXPHASE 5
struct progress {
    int nphases;
    struct {
	int exponential;
	unsigned startpoint, total;
	unsigned param, current, n;    /* if exponential */
	unsigned mult;		       /* if linear */
    } phases[MAXPHASE];
    unsigned total, divisor, range;
    HWND progbar;
};

static void progress_update(void *param, int action, int phase, int iprogress)
{
    struct progress *p = (struct progress *) param;
    unsigned progress = iprogress;
    int position;

    if (action < PROGFN_READY && p->nphases < phase)
	p->nphases = phase;
    switch (action) {
      case PROGFN_INITIALISE:
	p->nphases = 0;
	break;
      case PROGFN_LIN_PHASE:
	p->phases[phase-1].exponential = 0;
	p->phases[phase-1].mult = p->phases[phase].total / progress;
	break;
      case PROGFN_EXP_PHASE:
	p->phases[phase-1].exponential = 1;
	p->phases[phase-1].param = 0x10000 + progress;
	p->phases[phase-1].current = p->phases[phase-1].total;
	p->phases[phase-1].n = 0;
	break;
      case PROGFN_PHASE_EXTENT:
	p->phases[phase-1].total = progress;
	break;
      case PROGFN_READY:
	{
	    unsigned total = 0;
	    int i;
	    for (i = 0; i < p->nphases; i++) {
		p->phases[i].startpoint = total;
		total += p->phases[i].total;
	    }
	    p->total = total;
	    p->divisor = ((p->total + PROGRESSRANGE - 1) / PROGRESSRANGE);
	    p->range = p->total / p->divisor;
	    SendMessage(p->progbar, PBM_SETRANGE, 0, MAKELPARAM(0, p->range));
	}
	break;
      case PROGFN_PROGRESS:
	if (p->phases[phase-1].exponential) {
	    while (p->phases[phase-1].n < progress) {
		p->phases[phase-1].n++;
		p->phases[phase-1].current *= p->phases[phase-1].param;
		p->phases[phase-1].current /= 0x10000;
	    }
	    position = (p->phases[phase-1].startpoint +
			p->phases[phase-1].total - p->phases[phase-1].current);
	} else {
	    position = (p->phases[phase-1].startpoint +
			progress * p->phases[phase-1].mult);
	}
	SendMessage(p->progbar, PBM_SETPOS, position / p->divisor, 0);
	break;
    }
}

extern char ver[];

#define PASSPHRASE_MAXLEN 512

struct PassphraseProcStruct {
    char *passphrase;
    char *comment;
};

/*
 * Dialog-box function for the passphrase box.
 */
static int CALLBACK PassphraseProc(HWND hwnd, UINT msg,
				   WPARAM wParam, LPARAM lParam)
{
    static char *passphrase = NULL;
    struct PassphraseProcStruct *p;

    switch (msg) {
      case WM_INITDIALOG:
	SetForegroundWindow(hwnd);
	SetWindowPos(hwnd, HWND_TOP, 0, 0, 0, 0,
		     SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW);

	/*
	 * Centre the window.
	 */
	{			       /* centre the window */
	    RECT rs, rd;
	    HWND hw;

	    hw = GetDesktopWindow();
	    if (GetWindowRect(hw, &rs) && GetWindowRect(hwnd, &rd))
		MoveWindow(hwnd,
			   (rs.right + rs.left + rd.left - rd.right) / 2,
			   (rs.bottom + rs.top + rd.top - rd.bottom) / 2,
			   rd.right - rd.left, rd.bottom - rd.top, TRUE);
	}

	p = (struct PassphraseProcStruct *) lParam;
	passphrase = p->passphrase;
	if (p->comment)
	    SetDlgItemText(hwnd, 101, p->comment);
	*passphrase = 0;
	SetDlgItemText(hwnd, 102, passphrase);
	return 0;
      case WM_COMMAND:
	switch (LOWORD(wParam)) {
	  case IDOK:
	    if (*passphrase)
		EndDialog(hwnd, 1);
	    else
		MessageBeep(0);
	    return 0;
	  case IDCANCEL:
	    EndDialog(hwnd, 0);
	    return 0;
	  case 102:		       /* edit box */
	    if ((HIWORD(wParam) == EN_CHANGE) && passphrase) {
		GetDlgItemText(hwnd, 102, passphrase,
			       PASSPHRASE_MAXLEN - 1);
		passphrase[PASSPHRASE_MAXLEN - 1] = '\0';
	    }
	    return 0;
	}
	return 0;
      case WM_CLOSE:
	EndDialog(hwnd, 0);
	return 0;
    }
    return 0;
}

/*
 * Prompt for a key file. Assumes the filename buffer is of size
 * FILENAME_MAX.
 */
static int prompt_keyfile(HWND hwnd, char *dlgtitle,
			  char *filename, int save, int ppk)
{
    OPENFILENAME of;
    memset(&of, 0, sizeof(of));
#ifdef OPENFILENAME_SIZE_VERSION_400
    of.lStructSize = OPENFILENAME_SIZE_VERSION_400;
#else
    of.lStructSize = sizeof(of);
#endif
    of.hwndOwner = hwnd;
    if (ppk) {
	of.lpstrFilter = "PuTTY Private Key Files (*.ppk)\0*.ppk\0"
	    "All Files (*.*)\0*\0\0\0";
	of.lpstrDefExt = ".ppk";
    } else {
	of.lpstrFilter = "All Files (*.*)\0*\0\0\0";
    }
    of.lpstrCustomFilter = NULL;
    of.nFilterIndex = 1;
    of.lpstrFile = filename;
    *filename = '\0';
    of.nMaxFile = FILENAME_MAX;
    of.lpstrFileTitle = NULL;
    of.lpstrInitialDir = NULL;
    of.lpstrTitle = dlgtitle;
    of.Flags = 0;
    if (save)
	return GetSaveFileName(&of);
    else
	return GetOpenFileName(&of);
}

/*
 * Dialog-box function for the Licence box.
 */
static int CALLBACK LicenceProc(HWND hwnd, UINT msg,
				WPARAM wParam, LPARAM lParam)
{
    switch (msg) {
      case WM_INITDIALOG:
	/*
	 * Centre the window.
	 */
	{			       /* centre the window */
	    RECT rs, rd;
	    HWND hw;

	    hw = GetDesktopWindow();
	    if (GetWindowRect(hw, &rs) && GetWindowRect(hwnd, &rd))
		MoveWindow(hwnd,
			   (rs.right + rs.left + rd.left - rd.right) / 2,
			   (rs.bottom + rs.top + rd.top - rd.bottom) / 2,
			   rd.right - rd.left, rd.bottom - rd.top, TRUE);
	}

	return 1;
      case WM_COMMAND:
	switch (LOWORD(wParam)) {
	  case IDOK:
	    EndDialog(hwnd, 1);
	    return 0;
	}
	return 0;
      case WM_CLOSE:
	EndDialog(hwnd, 1);
	return 0;
    }
    return 0;
}

/*
 * Dialog-box function for the About box.
 */
static int CALLBACK AboutProc(HWND hwnd, UINT msg,
			      WPARAM wParam, LPARAM lParam)
{
    switch (msg) {
      case WM_INITDIALOG:
	/*
	 * Centre the window.
	 */
	{			       /* centre the window */
	    RECT rs, rd;
	    HWND hw;

	    hw = GetDesktopWindow();
	    if (GetWindowRect(hw, &rs) && GetWindowRect(hwnd, &rd))
		MoveWindow(hwnd,
			   (rs.right + rs.left + rd.left - rd.right) / 2,
			   (rs.bottom + rs.top + rd.top - rd.bottom) / 2,
			   rd.right - rd.left, rd.bottom - rd.top, TRUE);
	}

	SetDlgItemText(hwnd, 100, ver);
	return 1;
      case WM_COMMAND:
	switch (LOWORD(wParam)) {
	  case IDOK:
	    EndDialog(hwnd, 1);
	    return 0;
	  case 101:
	    EnableWindow(hwnd, 0);
	    DialogBox(hinst, MAKEINTRESOURCE(214), hwnd, LicenceProc);
	    EnableWindow(hwnd, 1);
	    SetActiveWindow(hwnd);
	    return 0;
	}
	return 0;
      case WM_CLOSE:
	EndDialog(hwnd, 1);
	return 0;
    }
    return 0;
}

/*
 * Thread to generate a key.
 */
struct rsa_key_thread_params {
    HWND progressbar;		       /* notify this with progress */
    HWND dialog;		       /* notify this on completion */
    int keysize;		       /* bits in key */
    int is_dsa;
    struct RSAKey *key;
    struct dss_key *dsskey;
};
static DWORD WINAPI generate_rsa_key_thread(void *param)
{
    struct rsa_key_thread_params *params =
	(struct rsa_key_thread_params *) param;
    struct progress prog;
    prog.progbar = params->progressbar;

    progress_update(&prog, PROGFN_INITIALISE, 0, 0);

    if (params->is_dsa)
	dsa_generate(params->dsskey, params->keysize, progress_update, &prog);
    else
	rsa_generate(params->key, params->keysize, progress_update, &prog);

    PostMessage(params->dialog, WM_DONEKEY, 0, 0);

    sfree(params);
    return 0;
}

struct MainDlgState {
    int collecting_entropy;
    int generation_thread_exists;
    int key_exists;
    int entropy_got, entropy_required, entropy_size;
    int keysize;
    int ssh2, is_dsa;
    char **commentptr;		       /* points to key.comment or ssh2key.comment */
    struct ssh2_userkey ssh2key;
    unsigned *entropy;
    struct RSAKey key;
    struct dss_key dsskey;
    HMENU filemenu, keymenu, cvtmenu;
};

static void hidemany(HWND hwnd, const int *ids, int hideit)
{
    while (*ids) {
	ShowWindow(GetDlgItem(hwnd, *ids++), (hideit ? SW_HIDE : SW_SHOW));
    }
}

static void setupbigedit1(HWND hwnd, int id, int idstatic, struct RSAKey *key)
{
    char *buffer;
    char *dec1, *dec2;

    dec1 = bignum_decimal(key->exponent);
    dec2 = bignum_decimal(key->modulus);
    buffer = dupprintf("%d %s %s %s", bignum_bitcount(key->modulus),
		       dec1, dec2, key->comment);
    SetDlgItemText(hwnd, id, buffer);
    SetDlgItemText(hwnd, idstatic,
		   "&Public key for pasting into authorized_keys file:");
    sfree(dec1);
    sfree(dec2);
    sfree(buffer);
}

static void setupbigedit2(HWND hwnd, int id, int idstatic,
			  struct ssh2_userkey *key)
{
    unsigned char *pub_blob;
    char *buffer, *p;
    int pub_len;
    int i;

    pub_blob = key->alg->public_blob(key->data, &pub_len);
    buffer = snewn(strlen(key->alg->name) + 4 * ((pub_len + 2) / 3) +
		   strlen(key->comment) + 3, char);
    strcpy(buffer, key->alg->name);
    p = buffer + strlen(buffer);
    *p++ = ' ';
    i = 0;
    while (i < pub_len) {
	int n = (pub_len - i < 3 ? pub_len - i : 3);
	base64_encode_atom(pub_blob + i, n, p);
	i += n;
	p += 4;
    }
    *p++ = ' ';
    strcpy(p, key->comment);
    SetDlgItemText(hwnd, id, buffer);
    SetDlgItemText(hwnd, idstatic, "&Public key for pasting into "
		   "OpenSSH authorized_keys file:");
    sfree(pub_blob);
    sfree(buffer);
}

static int save_ssh1_pubkey(char *filename, struct RSAKey *key)
{
    char *dec1, *dec2;
    FILE *fp;

    dec1 = bignum_decimal(key->exponent);
    dec2 = bignum_decimal(key->modulus);
    fp = fopen(filename, "wb");
    if (!fp)
	return 0;
    fprintf(fp, "%d %s %s %s\n",
	    bignum_bitcount(key->modulus), dec1, dec2, key->comment);
    fclose(fp);
    sfree(dec1);
    sfree(dec2);
    return 1;
}

/*
 * Warn about the obsolescent key file format.
 */
void old_keyfile_warning(void)
{
    static const char mbtitle[] = "PuTTY Key File Warning";
    static const char message[] =
	"You are loading an SSH 2 private key which has an\n"
	"old version of the file format. This means your key\n"
	"file is not fully tamperproof. Future versions of\n"
	"PuTTY may stop supporting this private key format,\n"
	"so we recommend you convert your key to the new\n"
	"format.\n"
	"\n"
	"Once the key is loaded into PuTTYgen, you can perform\n"
	"this conversion simply by saving it again.";

    MessageBox(NULL, message, mbtitle, MB_OK);
}

static int save_ssh2_pubkey(char *filename, struct ssh2_userkey *key)
{
    unsigned char *pub_blob;
    char *p;
    int pub_len;
    int i, column;
    FILE *fp;

    pub_blob = key->alg->public_blob(key->data, &pub_len);

    fp = fopen(filename, "wb");
    if (!fp)
	return 0;

    fprintf(fp, "---- BEGIN SSH2 PUBLIC KEY ----\n");

    fprintf(fp, "Comment: \"");
    for (p = key->comment; *p; p++) {
	if (*p == '\\' || *p == '\"')
	    fputc('\\', fp);
	fputc(*p, fp);
    }
    fprintf(fp, "\"\n");

    i = 0;
    column = 0;
    while (i < pub_len) {
	char buf[5];
	int n = (pub_len - i < 3 ? pub_len - i : 3);
	base64_encode_atom(pub_blob + i, n, buf);
	i += n;
	buf[4] = '\0';
	fputs(buf, fp);
	if (++column >= 16) {
	    fputc('\n', fp);

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜电影一区二区三区| 一区免费观看视频| 裸体健美xxxx欧美裸体表演| 日韩一级高清毛片| 麻豆成人91精品二区三区| 久久夜色精品国产欧美乱极品| 国产在线精品免费| 国产精品高清亚洲| 欧美三级日韩在线| 东方欧美亚洲色图在线| 精品国产亚洲在线| 不卡视频免费播放| 一区二区三区免费看视频| 欧美高清视频在线高清观看mv色露露十八 | 亚洲成人免费观看| 欧美一区二区免费观在线| 国产乱对白刺激视频不卡| 中文字幕在线观看不卡视频| 欧美日韩中文精品| 国产在线不卡视频| 亚洲乱码日产精品bd | 欧美一级高清片| 国产精品1024| 亚洲一区二区欧美| 国产日韩欧美制服另类| 91国产免费观看| 国产在线看一区| 亚洲午夜电影网| 国产日韩精品一区二区三区在线| 在线亚洲一区二区| 国产乱码精品一品二品| 一区二区三区日韩| 精品久久久三级丝袜| 91在线观看成人| 激情综合五月婷婷| 亚洲制服丝袜av| 国产亚洲短视频| 欧美日韩成人激情| 99视频热这里只有精品免费| 男女男精品视频网| 亚洲色图欧美偷拍| 久久九九99视频| 91麻豆精品国产自产在线| 91香蕉视频mp4| 国产美女精品一区二区三区| 亚洲大型综合色站| 中文字幕一区不卡| 久久蜜臀精品av| 在线播放/欧美激情| 91蜜桃在线观看| 国产91精品免费| 国产一区二区三区久久悠悠色av| 午夜伊人狠狠久久| 亚洲一区免费观看| 亚洲免费观看视频| 欧美国产综合一区二区| 久久综合九色综合97婷婷女人| 中文字幕欧美一| 久久人人爽人人爽| 日韩欧美一级在线播放| 欧美福利视频一区| 欧美三区免费完整视频在线观看| av影院午夜一区| av亚洲产国偷v产偷v自拍| 国产.欧美.日韩| 国产成人免费网站| 国产99久久久国产精品潘金| 六月丁香综合在线视频| 欧美bbbbb| 蜜臀va亚洲va欧美va天堂| 日韩成人免费在线| 男女激情视频一区| 精品在线播放午夜| 黄色精品一二区| 国产一区二区三区高清播放| 国产一区激情在线| 国产高清精品久久久久| 国产黄人亚洲片| 成人免费视频网站在线观看| 处破女av一区二区| 99久久精品99国产精品| 色偷偷一区二区三区| 欧美在线视频全部完| 欧美福利电影网| 精品少妇一区二区三区| 精品国产乱码久久| 国产欧美一区二区三区沐欲| 国产精品乱人伦| 亚洲精品乱码久久久久久| 亚洲午夜一区二区| 免费的成人av| 国产成人亚洲精品青草天美| 成人午夜激情视频| 91精彩视频在线| 88在线观看91蜜桃国自产| 日韩欧美另类在线| 日本一区二区三区在线观看| 亚洲男人天堂av网| 日韩不卡在线观看日韩不卡视频| 老司机午夜精品| 波多野结衣亚洲| 欧美欧美欧美欧美首页| 久久综合色天天久久综合图片| 日本一区二区三区dvd视频在线| 亚洲美女屁股眼交3| 日本不卡一二三| 成人午夜电影网站| 欧美日韩免费高清一区色橹橹 | 久久久午夜精品理论片中文字幕| 国产精品无码永久免费888| 一区二区三区加勒比av| 久久国产精品区| 99国产精品久久久久久久久久久| 欧美亚洲国产怡红院影院| 欧美成人三级在线| 亚洲欧美一区二区三区极速播放| 青娱乐精品视频在线| 成人综合激情网| 欧美久久久久久蜜桃| 欧美激情一区在线观看| 亚洲18女电影在线观看| 国产精品一区二区久久不卡| 91美女福利视频| 久久亚洲私人国产精品va媚药| 亚洲激情一二三区| 国内精品国产三级国产a久久| 91久久精品一区二区| 国产午夜精品久久| 日韩二区三区四区| 色综合天天综合网国产成人综合天 | 丝袜亚洲另类欧美| 不卡影院免费观看| 欧美成人精品1314www| 夜夜嗨av一区二区三区四季av| 精品一区二区精品| 欧美喷水一区二区| 亚洲精品中文在线影院| 国产精品一级片| 欧美精品电影在线播放| 亚洲嫩草精品久久| 成人黄色一级视频| 欧美三级乱人伦电影| 国产精品久久福利| 国产精品66部| 精品少妇一区二区三区日产乱码| 亚洲一区二区综合| 99在线精品一区二区三区| 久久综合国产精品| 另类小说欧美激情| 69堂国产成人免费视频| 一区二区三国产精华液| 99久久免费视频.com| 国产精品无码永久免费888| 国产麻豆9l精品三级站| 精品久久久久久久人人人人传媒| 亚洲成人免费在线观看| 色www精品视频在线观看| 成人免费小视频| 99精品欧美一区二区三区小说| 国产精品网曝门| 成人av网站在线观看免费| 久久久久久久久久久99999| 精品在线播放午夜| 2020国产成人综合网| 国产揄拍国内精品对白| 亚洲精品在线电影| 国产一区二区三区四区五区美女 | 欧美男人的天堂一二区| 亚洲一区在线播放| 精品视频资源站| 日韩中文字幕91| 日韩女优av电影| 国产一区二区三区在线观看免费视频| 精品国产sm最大网站免费看| 久久99久久精品| 久久久久久电影| 99热精品一区二区| 一区二区三区国产豹纹内裤在线| 日韩欧美国产1| 激情欧美一区二区三区在线观看| 久久久精品国产99久久精品芒果 | 一区二区三区四区精品在线视频 | 日韩国产高清影视| 日韩精品在线网站| 福利一区二区在线| 亚洲欧美一区二区三区久本道91| 在线看日本不卡| 麻豆成人久久精品二区三区红| 久久伊人中文字幕| 色综合中文综合网| 国产日韩欧美麻豆| 菠萝蜜视频在线观看一区| 亚洲男人的天堂网| 欧美日韩一卡二卡| 久久精品噜噜噜成人88aⅴ| 国产亚洲欧美日韩俺去了| 波多野洁衣一区| 水蜜桃久久夜色精品一区的特点| 精品少妇一区二区三区日产乱码| 成人午夜av电影|