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

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

?? chap.c

?? Ubuntu公司提供免費的iSCSI Target
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* * chap.c - support for (mutual) CHAP authentication. * (C) 2004 Xiranet Communications GmbH <arne.redlich@xiranet.com> * available under the terms of the GNU GPL v2.0 * * heavily based on code from iscsid.c: *   Copyright (C) 2002-2003 Ardis Technolgies <roman@ardistech.com>, *   licensed under the terms of the GNU GPL v2.0, * * and code taken from UNH iSCSI software: *   Copyright (C) 2001-2003 InterOperability Lab (IOL) *   University of New Hampshire (UNH) *   Durham, NH 03824 *   licensed under the terms of the GNU GPL v2.0 */#include <stdio.h>#include <stdlib.h>#include <string.h>#include <openssl/sha.h>#include <openssl/md5.h>#include "iscsid.h"#define HEX_FORMAT    0x01#define BASE64_FORMAT 0x02#define CHAP_DIGEST_ALG_MD5   5#define CHAP_DIGEST_ALG_SHA1  7#define CHAP_MD5_DIGEST_LEN  16#define CHAP_SHA1_DIGEST_LEN 20#define CHAP_INITIATOR_ERROR -1#define CHAP_AUTH_ERROR      -2#define CHAP_TARGET_ERROR    -3#define CHAP_AUTH_STATE_START     AUTH_STATE_START#define CHAP_AUTH_STATE_CHALLENGE 1#define CHAP_AUTH_STATE_RESPONSE  2#define CHAP_INITIATOR_AUTH 0#define CHAP_TARGET_AUTH    1#define CHAP_CHALLENGE_MAX	50static inline int decode_hex_digit(char c){	switch (c) {	case '0' ... '9':		return c - '0';	case 'a' ... 'f':		return c - 'a' + 10;	case 'A' ... 'F':		return c - 'A' + 10;	}	return 0;}static void decode_hex_string(char *hex_string, u8 *intnum, int intlen){	char *ptr;	int j;	j = strlen(hex_string);	ptr = hex_string + j;	j = --intlen;	do {		intnum[j] = decode_hex_digit(*--ptr);		intnum[j] |= decode_hex_digit(*--ptr) << 4;		j--;	} while (ptr > hex_string);	while (j >= 0)		intnum[j--] = 0;}/* Base64 decoding, taken from UNH-iSCSI "Base64codeToNumber()" */static u8 decode_base64_digit(char base64){	switch (base64) {	case '=':		return 64;	case '/':		return 63;	case '+':		return 62;	default:		if ((base64 >= 'A') && (base64 <= 'Z'))			return base64 - 'A';		else if ((base64 >= 'a') && (base64 <= 'z'))			return 26 + (base64 - 'a');		else if ((base64 >= '0') && (base64 <= '9'))			return 52 + (base64 - '0');		else			return -1;	}}/* Base64 decoding, taken from UNH-iSCSI "Base64StringToInteger()" */static void decode_base64_string(char *string, u8 *intnum, int int_len){	int len;	int count;	int intptr;	u8 num[4];	int octets;	if ((string == NULL) || (intnum == NULL))		return;	len = strlen(string);	if (len == 0)		return;	if ((len % 4) != 0)		return;	count = 0;	intptr = 0;	while (count < len - 4) {		num[0] = decode_base64_digit(string[count]);		num[1] = decode_base64_digit(string[count + 1]);		num[2] = decode_base64_digit(string[count + 2]);		num[3] = decode_base64_digit(string[count + 3]);		if ((num[0] == 65) || (num[1] == 65) || (num[2] == 65) || (num[3] == 65))			return;		count += 4;		octets =		    (num[0] << 18) | (num[1] << 12) | (num[2] << 6) | num[3];		intnum[intptr] = (octets & 0xFF0000) >> 16;		intnum[intptr + 1] = (octets & 0x00FF00) >> 8;		intnum[intptr + 2] = octets & 0x0000FF;		intptr += 3;	}	num[0] = decode_base64_digit(string[count]);	num[1] = decode_base64_digit(string[count + 1]);	num[2] = decode_base64_digit(string[count + 2]);	num[3] = decode_base64_digit(string[count + 3]);	if ((num[0] == 64) || (num[1] == 64))		return;	if (num[2] == 64) {		if (num[3] != 64)			return;		intnum[intptr] = (num[0] << 2) | (num[1] >> 4);	} else if (num[3] == 64) {		intnum[intptr] = (num[0] << 2) | (num[1] >> 4);		intnum[intptr + 1] = (num[1] << 4) | (num[2] >> 2);	} else {		octets =		    (num[0] << 18) | (num[1] << 12) | (num[2] << 6) | num[3];		intnum[intptr] = (octets & 0xFF0000) >> 16;		intnum[intptr + 1] = (octets & 0x00FF00) >> 8;		intnum[intptr + 2] = octets & 0x0000FF;	}}static inline void encode_hex_string(u8 *intnum, long length, char *string){	int i;	char *strptr;	strptr = string;	for (i = 0; i < length; i++, strptr += 2)			sprintf(strptr, "%.2hhx", intnum[i]);}/* Base64 encoding, taken from UNH iSCSI "IntegerToBase64String()" */static void encode_base64_string(u8 *intnum, long length, char *string){	int count, octets, strptr, delta;	static const char base64code[] = { 'A', 'B', 'C', 'D', 'E', 'F', 'G',					   'H', 'I', 'J', 'K', 'L', 'M', 'N',					   'O', 'P', 'Q', 'R', 'S', 'T', 'U',					   'V', 'W', 'X', 'Y', 'Z', 'a', 'b',					   'c', 'd', 'e', 'f', 'g', 'h', 'i',					   'j', 'k', 'l', 'm', 'n', 'o', 'p',					   'q', 'r', 's', 't', 'u', 'v', 'w',					   'x', 'y', 'z', '0', '1', '2', '3',					   '4', '5', '6', '7', '8', '9', '+',					   '/', '=' };	if ((!intnum) || (!string) || (!length))		return;	count = 0;	octets = 0;	strptr = 0;	while ((delta = (length - count)) > 2) {		octets = (intnum[count] << 16) | (intnum[count + 1] << 8) | intnum[count + 2];		string[strptr] = base64code[(octets & 0xfc0000) >> 18];		string[strptr + 1] = base64code[(octets & 0x03f000) >> 12];		string[strptr + 2] = base64code[(octets & 0x000fc0) >> 6];		string[strptr + 3] = base64code[octets & 0x00003f];		count += 3;		strptr += 4;	}	if (delta == 1) {		string[strptr] = base64code[(intnum[count] & 0xfc) >> 2];		string[strptr + 1] = base64code[(intnum[count] & 0x03) << 4];		string[strptr + 2] = base64code[64];		string[strptr + 3] = base64code[64];		strptr += 4;	} else if (delta == 2) {		string[strptr] = base64code[(intnum[count] & 0xfc) >> 2];		string[strptr + 1] = base64code[((intnum[count] & 0x03) << 4) | ((intnum[count + 1] & 0xf0) >> 4)];		string[strptr + 2] = base64code[(intnum[count + 1] & 0x0f) << 2];		string[strptr + 3] = base64code[64];		strptr += 4;	}	string[strptr] = '\0';}static inline int chap_check_encoding_format(char *encoded){	int encoding_fmt;	if (!encoded)		return -1;	if ((strlen(encoded) < 3) || (encoded[0] != '0'))		return -1;	if (encoded[1] == 'x' || encoded[1] == 'X')		encoding_fmt = HEX_FORMAT;	else if (encoded[1] == 'b' || encoded[1] == 'B')		encoding_fmt = BASE64_FORMAT;	else		return -1;	return encoding_fmt;}static int chap_alloc_decode_buffer(char *encoded, u8 **decode_buf, int encoding_fmt){	int i;	int decode_len = 0;	i = strlen(encoded);	i -= 2;	if (encoding_fmt == HEX_FORMAT)		decode_len = (i - 1) / 2 + 1;	else if (encoding_fmt == BASE64_FORMAT) {		if (i % 4)			return CHAP_INITIATOR_ERROR;		decode_len =  i / 4 * 3;		if (encoded[i + 1] == '=')			decode_len--;		if (encoded[i] == '=')			decode_len--;	}	if (!decode_len)		return CHAP_INITIATOR_ERROR;	*decode_buf = malloc(decode_len);	if (!*decode_buf)		return CHAP_TARGET_ERROR;	return decode_len;}static int chap_decode_string(char *encoded, u8 *decode_buf, int buf_len, int encoding_fmt){	if (encoding_fmt == HEX_FORMAT) {		if ((strlen(encoded) - 2) > (2 * buf_len)) {			log_error("%s(%d) BUG? "				  " buf[%d] !sufficient to decode string[%d]",				  __FUNCTION__, __LINE__, buf_len, (int) strlen(encoded));			return CHAP_TARGET_ERROR;		}		decode_hex_string(encoded + 2, decode_buf, buf_len);	} else if (encoding_fmt == BASE64_FORMAT) {		if ((strlen(encoded) - 2) > ((buf_len - 1) / 3 + 1) * 4) {			log_error("%s(%d) BUG? "				  " buf[%d] !sufficient to decode string[%d]",				  __FUNCTION__, __LINE__, buf_len, (int) strlen(encoded));			return CHAP_TARGET_ERROR;		}		decode_base64_string(encoded + 2, decode_buf, buf_len);	} else		return CHAP_INITIATOR_ERROR;	return 0;}static inline void chap_encode_string(u8 *intnum, int buf_len, char *encode_buf, int encoding_fmt){	encode_buf[0] = '0';	if (encoding_fmt == HEX_FORMAT) {		encode_buf[1] = 'x';		encode_hex_string(intnum, buf_len, encode_buf + 2);	} else if (encoding_fmt == BASE64_FORMAT) {		encode_buf[1] = 'b';		encode_base64_string(intnum, buf_len, encode_buf + 2);	}}static inline void chap_calc_digest_md5(char chap_id, char *secret, int secret_len, u8 *challenge, int challenge_len, u8 *digest){	MD5_CTX ctx;	MD5_Init(&ctx);	MD5_Update(&ctx, &chap_id, 1);	MD5_Update(&ctx, secret, secret_len);	MD5_Update(&ctx, challenge, challenge_len);	MD5_Final(digest, &ctx);}static inline void chap_calc_digest_sha1(char chap_id, char *secret, int secret_len, u8 *challenge, int challenge_len, u8 *digest){	SHA_CTX ctx;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲午夜视频在线观看| 一本色道综合亚洲| 99久久亚洲一区二区三区青草 | 欧美精品丝袜中出| 国产婷婷色一区二区三区在线| 亚洲国产精品久久不卡毛片 | 日韩国产在线一| 国产成人av电影在线播放| 91.xcao| 亚洲美女一区二区三区| 国产白丝精品91爽爽久久| 69p69国产精品| 一区二区在线免费| jlzzjlzz亚洲日本少妇| 一二三四区精品视频| 成人午夜激情视频| 久久久久久久久久看片| 秋霞影院一区二区| 欧美精品乱码久久久久久| 一区二区三区在线免费| av电影天堂一区二区在线| 久久久久久久久久久久久女国产乱| 婷婷开心激情综合| 欧美日韩国产精选| 亚洲一区二区三区激情| 欧美网站一区二区| 亚洲电影一区二区| 欧洲一区二区av| 亚洲国产毛片aaaaa无费看| 色成人在线视频| 亚洲精品日产精品乱码不卡| 成人av影院在线| 国产精品欧美经典| 成人精品鲁一区一区二区| 欧美—级在线免费片| 国产精品亚洲第一| 国产精品不卡在线| 一本色道综合亚洲| 亚洲五码中文字幕| 欧美精品自拍偷拍动漫精品| 日本不卡视频在线观看| 2023国产精品自拍| 成人小视频免费在线观看| 国产精品婷婷午夜在线观看| 91麻豆国产福利精品| 亚洲已满18点击进入久久| 欧美吞精做爰啪啪高潮| 日韩精品电影在线| 久久免费视频色| 成人黄色777网| 亚洲人成7777| 欧美一卡二卡在线| 国产不卡在线播放| 亚洲欧美激情一区二区| 欧美美女bb生活片| 久久66热re国产| 亚洲欧美日韩国产综合| 欧美日本一道本| 国产一区久久久| 亚洲柠檬福利资源导航| 欧美日韩aaaaaa| 国产福利精品一区二区| 亚洲一区在线观看网站| 久久―日本道色综合久久| av亚洲精华国产精华| 日韩高清欧美激情| 国产精品午夜在线观看| 欧美丰满美乳xxx高潮www| 国产在线精品一区二区| 亚洲另类色综合网站| 欧美电影精品一区二区| 99久久精品国产精品久久| 日本vs亚洲vs韩国一区三区二区| 国产精品视频免费看| 欧美日韩国产高清一区二区三区| 国产99精品视频| 亚洲成va人在线观看| 国产精品久久毛片| 成人免费在线播放视频| 欧美日韩1234| 97久久人人超碰| 国产精品一区二区三区乱码 | 91丨porny丨户外露出| 人禽交欧美网站| 亚洲欧美日韩成人高清在线一区| 精品国产一区二区三区四区四| 91成人在线精品| 国产成人综合亚洲网站| 日本不卡一区二区三区| 一区二区三区欧美日韩| 久久精品人人做人人爽97| 欧美一区二区视频在线观看2022| 97精品视频在线观看自产线路二| 国产美女在线精品| 日韩中文字幕亚洲一区二区va在线| 国产精品久久久久久久久久免费看 | 在线精品视频免费播放| 国产福利视频一区二区三区| 捆绑调教一区二区三区| 亚洲一区免费观看| 亚洲男同1069视频| 亚洲天堂av一区| 国产精品女同一区二区三区| 国产亚洲一区字幕| 日韩欧美视频在线| 91麻豆精品国产91久久久更新时间| 日本精品视频一区二区| 色综合久久久久综合体桃花网| 国产激情偷乱视频一区二区三区| 久久99精品国产麻豆婷婷洗澡| 视频一区在线视频| 日韩电影在线观看网站| 香蕉久久一区二区不卡无毒影院| 国产福利一区在线观看| 国产真实乱对白精彩久久| 国产一区 二区| 蓝色福利精品导航| 久久9热精品视频| 国产在线播精品第三| 激情综合色综合久久| 狠狠色丁香婷婷综合| 国产九九视频一区二区三区| 国产精品99久久久| 粉嫩绯色av一区二区在线观看| 粉嫩蜜臀av国产精品网站| 成人精品一区二区三区四区 | 欧美剧在线免费观看网站| 91福利小视频| 在线电影欧美成精品| 91精品在线麻豆| 精品国产sm最大网站| 国产欧美精品在线观看| 亚洲欧洲日产国码二区| 亚洲精品视频观看| 蜜臀a∨国产成人精品| 国产在线精品一区二区夜色| 国产激情视频一区二区在线观看| av资源网一区| 欧美日韩精品一区二区| 日韩欧美高清在线| 国产精品成人午夜| 成人午夜短视频| 不卡一区中文字幕| 欧美喷潮久久久xxxxx| 久久久亚洲欧洲日产国码αv| 1区2区3区欧美| 麻豆一区二区三区| 成人爱爱电影网址| 884aa四虎影成人精品一区| 久久综合国产精品| 亚洲一级二级在线| 国产成人免费视频一区| 在线免费观看一区| 精品国产一区二区在线观看| 亚洲色图一区二区| 久久精品噜噜噜成人88aⅴ| 99精品视频在线播放观看| 欧美一区二区播放| 亚洲天天做日日做天天谢日日欢| 亚洲成人免费视| 成人综合在线观看| 日韩一区二区在线观看| 中文字幕五月欧美| 美女网站一区二区| 91丨九色丨蝌蚪富婆spa| 欧美tickling网站挠脚心| 亚洲视频一二三| 国产老女人精品毛片久久| 欧美久久一二区| 亚洲天堂免费在线观看视频| 免费不卡在线观看| 91久久精品日日躁夜夜躁欧美| 精品国产污网站| 亚洲黄一区二区三区| 成人精品免费网站| 26uuu国产日韩综合| 五月婷婷久久综合| 91丨九色丨蝌蚪丨老版| 日本一区二区电影| 久久不见久久见免费视频1| 欧美视频完全免费看| 国产精品成人在线观看| 国产69精品久久久久毛片| 日韩一级二级三级| 三级不卡在线观看| 欧美日韩一区二区三区高清| 亚洲日韩欧美一区二区在线| 国产成人精品网址| 国产色一区二区| 国产一本一道久久香蕉| 精品日韩在线一区| 美女脱光内衣内裤视频久久网站| 911精品产国品一二三产区| 亚洲成人1区2区| 欧美疯狂性受xxxxx喷水图片| 亚洲va国产天堂va久久en| 欧美日本在线播放| 婷婷开心久久网| 欧美大胆人体bbbb| 激情欧美一区二区三区在线观看|