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

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

?? twofish.c

?? PGP8.0源碼 請認真閱讀您的文件包然后寫出其具體功能
?? C
?? 第 1 頁 / 共 3 頁
字號:
	int i;
#if VALIDATE_PARMS				/* first, sanity check on parameters */
	if (cipher == NULL)			
		return BAD_PARAMS;		/* must have a cipherInstance to initialize */
	if ((mode != MODE_ECB) && (mode != MODE_CBC) && (mode != MODE_CFB1))
		return BAD_CIPHER_MODE;	/* must have valid cipher mode */
	if ((mode != MODE_ECB) && (IV == NULL))
		return BAD_PARAMS;		/* must have IV for CBC and CFB modes */
	cipher->cipherSig	=	VALID_SIG;
  #if ALIGN32
	if ((((int)cipher) & 3) || (((int)cipher->IV) & 3) || (((int)cipher->iv32) & 3))
		return BAD_ALIGN32;
  #endif
#endif

	if (mode != MODE_ECB)		/* parse the IV */
		{
		if (ParseHexDword(BLOCK_SIZE,IV,cipher->iv32,NULL))
			return BAD_IV_MAT;
		for (i=0;i<BLOCK_SIZE/32;i++)	/* make byte-oriented copy for CFB1 */
			((DWORD *)cipher->IV)[i] = Bswap(cipher->iv32[i]);
		}

	cipher->mode		=	mode;

	return TRUE;
}

/*
+*****************************************************************************
*
* Function Name:	blockEncrypt
*
* Function:			Encrypt block(s) of data using Twofish
*
* Arguments:		cipher		=	ptr to already initialized cipherInstance
*					key			=	ptr to already initialized keyInstance
*					input		=	ptr to data blocks to be encrypted
*					inputLen	=	# bits to encrypt (multiple of blockSize)
*					outBuffer	=	ptr to where to put encrypted blocks
*
* Return:			# bits ciphered (>= 0)
*					else error code (e.g., BAD_CIPHER_STATE, BAD_KEY_MATERIAL)
*
* Notes: The only supported block size for ECB/CBC modes is BLOCK_SIZE bits.
*		 If inputLen is not a multiple of BLOCK_SIZE bits in those modes,
*		 an error BAD_INPUT_LEN is returned.  In CFB1 mode, all block 
*		 sizes can be supported.
*
-****************************************************************************/
int blockEncrypt(cipherInstance *cipher, keyInstance *key,CONST BYTE *input,
				int inputLen, BYTE *outBuffer)
{
	int   i,n;						/* loop counters */
	DWORD x[BLOCK_SIZE/32];			/* block being encrypted */
	DWORD t0,t1;					/* temp variables */
	int	  rounds=key->numRounds;	/* number of rounds */
	BYTE  bit,ctBit,carry;			/* temps for CFB */
#if ALIGN32
	BYTE  dummyAlign = 0;				/* keep dword alignment on stack */
#endif
	/* make local copies of things for faster access */
	int	  mode = cipher->mode;
	DWORD sk[TOTAL_SUBKEYS];
	DWORD IV[BLOCK_SIZE/32];

	GetSboxKey;

#if ALIGN32
	(void) dummyAlign;
#endif

#if VALIDATE_PARMS
	if ((cipher == NULL) || (cipher->cipherSig != VALID_SIG))
		return BAD_CIPHER_STATE;
	if ((key == NULL) || (key->keySig != VALID_SIG))
		return BAD_KEY_INSTANCE;
	if ((rounds < 2) || (rounds > MAX_ROUNDS) || (rounds&1))
		return BAD_KEY_INSTANCE;
	if ((mode != MODE_CFB1) && (inputLen % BLOCK_SIZE))
		return BAD_INPUT_LEN;
  #if ALIGN32
	if ( (((int)cipher) & 3) || (((int)key      ) & 3) ||
		 (((int)input ) & 3) || (((int)outBuffer) & 3))
		return BAD_ALIGN32;
  #endif
#endif

	if (mode == MODE_CFB1)
		{	/* use recursion here to handle CFB, one block at a time */
		cipher->mode = MODE_ECB;	/* do encryption in ECB */
		for (n=0;n<inputLen;n++)
			{
			blockEncrypt(cipher,key,cipher->IV,BLOCK_SIZE,(BYTE *)x);
			bit	  = 0x80 >> (n & 7);/* which bit position in byte */
			ctBit = (input[n/8] & bit) ^ ((((BYTE *) x)[0] & 0x80) >> (n&7));
			outBuffer[n/8] = (outBuffer[n/8] & ~ bit) | ctBit;
			carry = ctBit >> (7 - (n&7));
			for (i=BLOCK_SIZE/8-1;i>=0;i--)
				{
				bit = cipher->IV[i] >> 7;	/* save next "carry" from shift */
				cipher->IV[i] = (cipher->IV[i] << 1) ^ carry;
				carry = bit;
				}
			}
		cipher->mode = MODE_CFB1;	/* restore mode for next time */
		return inputLen;
		}

	/* here for ECB, CBC modes */
	if (key->direction != DIR_ENCRYPT)
		ReverseRoundSubkeys(key,DIR_ENCRYPT);	/* reverse the round subkey order */

#ifdef USE_ASM
	if ((useAsm & 1) && (inputLen))
  #ifdef COMPILE_KEY
		if (key->keySig == VALID_SIG)
			return ((CipherProc *)(key->encryptFuncPtr))(cipher,key,input,inputLen,outBuffer);
  #else	
		return (*blockEncrypt_86)(cipher,key,input,inputLen,outBuffer);
  #endif
#endif
	/* make local copy of subkeys for speed */
	memcpy(sk,key->subKeys,sizeof(DWORD)*(ROUND_SUBKEYS+2*rounds));
	if (mode == MODE_CBC)
		BlockCopy(IV,cipher->iv32)
	else
		IV[0]=IV[1]=IV[2]=IV[3]=0;

	for (n=0;n<inputLen;n+=BLOCK_SIZE,input+=BLOCK_SIZE/8,outBuffer+=BLOCK_SIZE/8)
		{
#ifdef DEBUG
		DebugDump(input,"\n",-1,0,0,0,1);
		if (cipher->mode == MODE_CBC)
			DebugDump(cipher->iv32,"",IV_ROUND,0,0,0,0);
#endif
#define	LoadBlockE(N)  x[N]=Bswap(((DWORD *)input)[N]) ^ sk[INPUT_WHITEN+N] ^ IV[N]
		LoadBlockE(0);	LoadBlockE(1);	LoadBlockE(2);	LoadBlockE(3);
		DebugDump(x,"",0,0,0,0,0);
#define	EncryptRound(K,R,id)	\
			t0	   = Fe32##id(x[K  ],0);					\
			t1	   = Fe32##id(x[K^1],3);					\
			x[K^3] = ROL(x[K^3],1);							\
			x[K^2]^= t0 +   t1 + sk[ROUND_SUBKEYS+2*(R)  ];	\
			x[K^3]^= t0 + 2*t1 + sk[ROUND_SUBKEYS+2*(R)+1];	\
			x[K^2] = ROR(x[K^2],1);							\
			DebugDump(x,"",rounds-(R),0,0,1,0);
#define		Encrypt2(R,id)	{ EncryptRound(0,R+1,id); EncryptRound(2,R,id); }

#if defined(ZERO_KEY)
		switch (key->keyLen)
			{
			case 128:
				for (i=rounds-2;i>=0;i-=2)
					Encrypt2(i,_128);
				break;
			case 192:
				for (i=rounds-2;i>=0;i-=2)
					Encrypt2(i,_192);
				break;
			case 256:
				for (i=rounds-2;i>=0;i-=2)
					Encrypt2(i,_256);
				break;
			}
#else
		Encrypt2(14,_);
		Encrypt2(12,_);
		Encrypt2(10,_);
		Encrypt2( 8,_);
		Encrypt2( 6,_);
		Encrypt2( 4,_);
		Encrypt2( 2,_);
		Encrypt2( 0,_);
#endif

		/* need to do (or undo, depending on your point of view) final swap */
#if LittleEndian
#define	StoreBlockE(N)	((DWORD *)outBuffer)[N]=x[N^2] ^ sk[OUTPUT_WHITEN+N]
#else
#define	StoreBlockE(N)	{ t0=x[N^2] ^ sk[OUTPUT_WHITEN+N]; ((DWORD *)outBuffer)[N]=Bswap(t0); }
#endif
		StoreBlockE(0);	StoreBlockE(1);	StoreBlockE(2);	StoreBlockE(3);
		if (mode == MODE_CBC)
			{
			IV[0]=Bswap(((DWORD *)outBuffer)[0]);
			IV[1]=Bswap(((DWORD *)outBuffer)[1]);
			IV[2]=Bswap(((DWORD *)outBuffer)[2]);
			IV[3]=Bswap(((DWORD *)outBuffer)[3]);
			}
#ifdef DEBUG
		DebugDump(outBuffer,"",rounds+1,0,0,0,1);
		if (cipher->mode == MODE_CBC)
			DebugDump(cipher->iv32,"",IV_ROUND,0,0,0,0);
#endif
		}

	if (mode == MODE_CBC)
		BlockCopy(cipher->iv32,IV);

	return inputLen;
}

/*
+*****************************************************************************
*
* Function Name:	blockDecrypt
*
* Function:			Decrypt block(s) of data using Twofish
*
* Arguments:		cipher		=	ptr to already initialized cipherInstance
*					key			=	ptr to already initialized keyInstance
*					input		=	ptr to data blocks to be decrypted
*					inputLen	=	# bits to encrypt (multiple of blockSize)
*					outBuffer	=	ptr to where to put decrypted blocks
*
* Return:			# bits ciphered (>= 0)
*					else error code (e.g., BAD_CIPHER_STATE, BAD_KEY_MATERIAL)
*
* Notes: The only supported block size for ECB/CBC modes is BLOCK_SIZE bits.
*		 If inputLen is not a multiple of BLOCK_SIZE bits in those modes,
*		 an error BAD_INPUT_LEN is returned.  In CFB1 mode, all block 
*		 sizes can be supported.
*
-****************************************************************************/
int blockDecrypt(cipherInstance *cipher, keyInstance *key,CONST BYTE *input,
				int inputLen, BYTE *outBuffer)
{
	int   i,n;						/* loop counters */
	DWORD x[BLOCK_SIZE/32];			/* block being encrypted */
	DWORD t0,t1;					/* temp variables */
	int	  rounds=key->numRounds;	/* number of rounds */
	BYTE  bit,ctBit,carry;			/* temps for CFB */
#if ALIGN32
	BYTE  dummyAlign = 0;			/* keep dword alignment on stack */
#endif
	/* make local copies of things for faster access */
	int	  mode = cipher->mode;
	DWORD sk[TOTAL_SUBKEYS];
	DWORD IV[BLOCK_SIZE/32];

	GetSboxKey;

#if ALIGN32
	(void) dummyAlign;
#endif

#if VALIDATE_PARMS
	if ((cipher == NULL) || (cipher->cipherSig != VALID_SIG))
		return BAD_CIPHER_STATE;
	if ((key == NULL) || (key->keySig != VALID_SIG))
		return BAD_KEY_INSTANCE;
	if ((rounds < 2) || (rounds > MAX_ROUNDS) || (rounds&1))
		return BAD_KEY_INSTANCE;
	if ((cipher->mode != MODE_CFB1) && (inputLen % BLOCK_SIZE))
		return BAD_INPUT_LEN;
  #if ALIGN32
	if ( (((int)cipher) & 3) || (((int)key      ) & 3) ||
		 (((int)input)  & 3) || (((int)outBuffer) & 3))
		return BAD_ALIGN32;
  #endif
#endif

	if (cipher->mode == MODE_CFB1)
		{	/* use blockEncrypt here to handle CFB, one block at a time */
		cipher->mode = MODE_ECB;	/* do encryption in ECB */
		for (n=0;n<inputLen;n++)
			{
			blockEncrypt(cipher,key,cipher->IV,BLOCK_SIZE,(BYTE *)x);
			bit	  = 0x80 >> (n & 7);
			ctBit = input[n/8] & bit;
			outBuffer[n/8] = (outBuffer[n/8] & ~ bit) |
							 (ctBit ^ ((((BYTE *) x)[0] & 0x80) >> (n&7)));
			carry = ctBit >> (7 - (n&7));
			for (i=BLOCK_SIZE/8-1;i>=0;i--)
				{
				bit = cipher->IV[i] >> 7;	/* save next "carry" from shift */
				cipher->IV[i] = (cipher->IV[i] << 1) ^ carry;
				carry = bit;
				}
			}
		cipher->mode = MODE_CFB1;	/* restore mode for next time */
		return inputLen;
		}

	/* here for ECB, CBC modes */
	if (key->direction != DIR_DECRYPT)
		ReverseRoundSubkeys(key,DIR_DECRYPT);	/* reverse the round subkey order */
#ifdef USE_ASM
	if ((useAsm & 2) && (inputLen))
  #ifdef COMPILE_KEY
		if (key->keySig == VALID_SIG)
			return ((CipherProc *)(key->decryptFuncPtr))(cipher,key,input,inputLen,outBuffer);
  #else	
		return (*blockDecrypt_86)(cipher,key,input,inputLen,outBuffer);
  #endif
#endif
	/* make local copy of subkeys for speed */
	memcpy(sk,key->subKeys,sizeof(DWORD)*(ROUND_SUBKEYS+2*rounds));
	if (mode == MODE_CBC)
		BlockCopy(IV,cipher->iv32)
	else
		IV[0]=IV[1]=IV[2]=IV[3]=0;

	for (n=0;n<inputLen;n+=BLOCK_SIZE,input+=BLOCK_SIZE/8,outBuffer+=BLOCK_SIZE/8)
		{
		DebugDump(input,"\n",rounds+1,0,0,0,1);
#define LoadBlockD(N) x[N^2]=Bswap(((DWORD *)input)[N]) ^ sk[OUTPUT_WHITEN+N]
		LoadBlockD(0);	LoadBlockD(1);	LoadBlockD(2);	LoadBlockD(3);

#define	DecryptRound(K,R,id)								\
			t0	   = Fe32##id(x[K  ],0);					\
			t1	   = Fe32##id(x[K^1],3);					\
			DebugDump(x,"",(R)+1,0,0,1,0);					\
			x[K^2] = ROL (x[K^2],1);						\
			x[K^2]^= t0 +   t1 + sk[ROUND_SUBKEYS+2*(R)  ];	\
			x[K^3]^= t0 + 2*t1 + sk[ROUND_SUBKEYS+2*(R)+1];	\
			x[K^3] = ROR (x[K^3],1);						\

#define		Decrypt2(R,id)	{ DecryptRound(2,R+1,id); DecryptRound(0,R,id); }

#if defined(ZERO_KEY)
		switch (key->keyLen)
			{
			case 128:
				for (i=rounds-2;i>=0;i-=2)
					Decrypt2(i,_128);
				break;
			case 192:
				for (i=rounds-2;i>=0;i-=2)
					Decrypt2(i,_192);
				break;
			case 256:
				for (i=rounds-2;i>=0;i-=2)
					Decrypt2(i,_256);
				break;
			}
#else
		{
		Decrypt2(14,_);
		Decrypt2(12,_);
		Decrypt2(10,_);
		Decrypt2( 8,_);
		Decrypt2( 6,_);
		Decrypt2( 4,_);
		Decrypt2( 2,_);
		Decrypt2( 0,_);
		}
#endif
		DebugDump(x,"",0,0,0,0,0);
		if (cipher->mode == MODE_ECB)
			{
#if LittleEndian
#define	StoreBlockD(N)	((DWORD *)outBuffer)[N] = x[N] ^ sk[INPUT_WHITEN+N]
#else
#define	StoreBlockD(N)	{ t0=x[N]^sk[INPUT_WHITEN+N]; ((DWORD *)outBuffer)[N] = Bswap(t0); }
#endif
			StoreBlockD(0);	StoreBlockD(1);	StoreBlockD(2);	StoreBlockD(3);
#undef  StoreBlockD
			DebugDump(outBuffer,"",-1,0,0,0,1);
			continue;
			}
		else
			{
#define	StoreBlockD(N)	x[N]   ^= sk[INPUT_WHITEN+N] ^ IV[N];	\
						IV[N]   = Bswap(((DWORD *)input)[N]);	\
						((DWORD *)outBuffer)[N] = Bswap(x[N]);
			StoreBlockD(0);	StoreBlockD(1);	StoreBlockD(2);	StoreBlockD(3);
#undef  StoreBlockD
			DebugDump(outBuffer,"",-1,0,0,0,1);
			}
		}
	return inputLen;
}

static DWORD TwofishCodeSize(void)
{
	DWORD x= Here(0);
#ifdef USE_ASM
	if (useAsm & 3)
		return TwofishAsmCodeSize();
#endif
	return x - TwofishCodeStart();
}

/*
// PGP-added variables and functions
*/

#ifdef	USE_ASM
int	useAsm	= 7;	/* enable everything */
#else	/* !USE_ASM */
int	useAsm	= 0;
#endif	/* USE_ASM */

int 
TwofishGetNumRounds(unsigned int keyBits)
{
	return numRounds[(keyBits - 1)/64];
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美福利视频导航| 精品久久久久一区二区国产| 日韩成人av影视| 久久久精品综合| 欧美三级电影在线看| 成人中文字幕在线| 奇米四色…亚洲| 一区二区三区中文在线观看| 26uuu欧美| 国产日韩欧美精品电影三级在线| 欧洲在线/亚洲| 成人福利电影精品一区二区在线观看 | 亚洲视频1区2区| 精品国产3级a| 4438x成人网最大色成网站| 99re视频这里只有精品| 久88久久88久久久| 日本不卡一区二区| 亚洲国产精品自拍| 亚洲激情一二三区| 中文字幕久久午夜不卡| 精品国产第一区二区三区观看体验| 欧美中文字幕一区| 不卡欧美aaaaa| 黑人巨大精品欧美一区| 日韩国产一区二| 亚洲电影中文字幕在线观看| 亚洲视频精选在线| 亚洲欧洲av色图| 中国av一区二区三区| 久久久久久毛片| 久久久久久久久蜜桃| 久久亚洲综合色一区二区三区| 日韩视频在线你懂得| 欧美日韩激情一区| 欧美另类一区二区三区| 欧美日韩不卡视频| 9191成人精品久久| 欧美一区二区黄| 日韩欧美在线观看一区二区三区| 欧美一区中文字幕| 日韩欧美综合在线| 精品国产a毛片| 久久免费看少妇高潮| 久久中文字幕电影| 国产日韩av一区二区| 欧美国产视频在线| 亚洲三级电影网站| 亚洲综合男人的天堂| 性做久久久久久免费观看| 午夜精品久久久久久久久久久 | 国产激情精品久久久第一区二区 | 国产精品一区二区在线播放| 国产在线一区观看| 成人理论电影网| 久久亚洲一区二区三区明星换脸| 精品国产精品网麻豆系列| 欧美精品一区二区三区四区| 久久久久久一二三区| 国产精品女主播av| 亚洲一二三区视频在线观看| 丝瓜av网站精品一区二区| 免费成人在线观看| 国产福利不卡视频| 一本大道久久精品懂色aⅴ| 欧美视频在线一区| 精品美女一区二区| 国产精品久久午夜夜伦鲁鲁| 亚洲精品国产无天堂网2021| 日韩精品一级二级 | 国产视频一区不卡| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆 | 欧美四级电影网| 日韩视频123| 中日韩免费视频中文字幕| 香蕉加勒比综合久久| 国内精品不卡在线| 欧洲日韩一区二区三区| 精品国内二区三区| 亚洲素人一区二区| 久久国产尿小便嘘嘘尿| 99精品视频在线观看| 欧美一二三区在线观看| 国产精品久久久久一区二区三区 | 欧美精品一区二区三区蜜桃| 国产精品萝li| 美女一区二区视频| 波多野结衣91| 欧美大度的电影原声| 成人免费视频在线观看| 久久av资源网| 日本久久电影网| 久久久国产精品午夜一区ai换脸| 尤物视频一区二区| 国产精品一区二区三区网站| 欧美日韩一区在线观看| 日本一区二区三区国色天香 | 97se亚洲国产综合在线| 日韩欧美一区二区不卡| 亚洲人妖av一区二区| 九色综合狠狠综合久久| 欧美制服丝袜第一页| 国产午夜精品在线观看| 日韩有码一区二区三区| 欧美变态凌虐bdsm| 一区二区高清免费观看影视大全 | 欧美一区二区视频免费观看| 欧美韩国日本不卡| 精品一区二区三区香蕉蜜桃 | 欧美日韩精品电影| 自拍偷拍亚洲激情| 国产一区二区三区久久悠悠色av | 欧美美女bb生活片| 欧美极品aⅴ影院| 免费视频一区二区| 色综合久久久久久久久久久| 欧美系列在线观看| 成人精品在线视频观看| 奇米亚洲午夜久久精品| 精品制服美女丁香| 欧美日韩精品福利| 久久99久国产精品黄毛片色诱| 精品日韩一区二区三区| 国产麻豆精品久久一二三| 国产日韩精品久久久| 91麻豆成人久久精品二区三区| 亚洲男人电影天堂| 欧美午夜精品一区二区蜜桃 | 日韩av高清在线观看| 欧美成人激情免费网| 国产麻豆视频一区| 国产精品超碰97尤物18| 欧美影院一区二区三区| 日韩精品一二三四| 欧美精品一区二区精品网| 丁香婷婷综合色啪| 一区二区三区日本| 日韩一区二区中文字幕| 成人精品国产免费网站| 亚洲激情av在线| 日韩三级伦理片妻子的秘密按摩| 国产精品88av| 亚洲一区在线观看免费| 日韩欧美视频一区| 99久久99久久综合| 蜜臀av性久久久久蜜臀av麻豆| 欧美激情在线一区二区三区| 在线免费观看日韩欧美| 精品在线你懂的| 综合色天天鬼久久鬼色| 欧美一二三在线| 99久久精品国产一区二区三区 | 成人av在线资源网| 亚洲一区二区三区四区在线观看| 亚洲自拍偷拍网站| 久久综合色鬼综合色| 色悠悠亚洲一区二区| 久久99精品国产.久久久久久| 综合久久综合久久| 亚洲精品一区二区三区福利| 色综合激情五月| 国产精品综合一区二区| 亚洲成人一区在线| 国产精品久久久久一区| 日韩免费观看2025年上映的电影 | 欧美美女直播网站| av电影在线不卡| 韩国女主播成人在线观看| 一区二区三区中文字幕精品精品| 久久精品一区蜜桃臀影院| 欧美久久久一区| 色av成人天堂桃色av| 成人网页在线观看| 韩国午夜理伦三级不卡影院| 亚洲一级片在线观看| 国产精品视频线看| 久久亚洲春色中文字幕久久久| 欧美日本国产视频| 色婷婷久久久亚洲一区二区三区| 丁香六月综合激情| 久久精品久久久精品美女| 亚洲一卡二卡三卡四卡| 亚洲欧美一区二区在线观看| 久久久久久影视| 欧美成人一区二区三区片免费| 欧美视频一区在线| 91年精品国产| 成人av影视在线观看| 国产成人自拍网| 国内精品伊人久久久久影院对白| 日韩av电影免费观看高清完整版在线观看 | 欧美国产一区二区在线观看 | 日韩专区一卡二卡| 亚洲伊人色欲综合网| 亚洲欧美日韩国产综合| 国产精品美女久久久久久久久久久| 精品盗摄一区二区三区| 欧美第一区第二区| 日韩免费一区二区| 日韩三级中文字幕|