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

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

?? serpent.c

?? 一個加密庫代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
	k_set(18,a,b,c,d);sb1(a,b,c,d,e,f,g,h);k_get(18,e,f,g,h);
	k_set(19,a,b,c,d);sb0(a,b,c,d,e,f,g,h);k_get(19,e,f,g,h);
	k_set(20,a,b,c,d);sb7(a,b,c,d,e,f,g,h);k_get(20,e,f,g,h);
	k_set(21,a,b,c,d);sb6(a,b,c,d,e,f,g,h);k_get(21,e,f,g,h);
	k_set(22,a,b,c,d);sb5(a,b,c,d,e,f,g,h);k_get(22,e,f,g,h);
	k_set(23,a,b,c,d);sb4(a,b,c,d,e,f,g,h);k_get(23,e,f,g,h);
	k_set(24,a,b,c,d);sb3(a,b,c,d,e,f,g,h);k_get(24,e,f,g,h);
	k_set(25,a,b,c,d);sb2(a,b,c,d,e,f,g,h);k_get(25,e,f,g,h);
	k_set(26,a,b,c,d);sb1(a,b,c,d,e,f,g,h);k_get(26,e,f,g,h);
	k_set(27,a,b,c,d);sb0(a,b,c,d,e,f,g,h);k_get(27,e,f,g,h);
	k_set(28,a,b,c,d);sb7(a,b,c,d,e,f,g,h);k_get(28,e,f,g,h);
	k_set(29,a,b,c,d);sb6(a,b,c,d,e,f,g,h);k_get(29,e,f,g,h);
	k_set(30,a,b,c,d);sb5(a,b,c,d,e,f,g,h);k_get(30,e,f,g,h);
	k_set(31,a,b,c,d);sb4(a,b,c,d,e,f,g,h);k_get(31,e,f,g,h);
	k_set(32,a,b,c,d);sb3(a,b,c,d,e,f,g,h);k_get(32,e,f,g,h);
}

void serpentEncrypt(SERPENTCTX* pCtx,
					const WORD32* pInBlock,
					WORD32* pOutBlock)
{
	WORD32 a,b,c,d,e,f,g,h;
	WORD32 t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13,t14,t15,t16;
	WORD32* l_key = pCtx->l_key;

	a = pInBlock[0];
	b = pInBlock[1];
	c = pInBlock[2];
	d = pInBlock[3];

	// perform 32 rounds of encryption
	k_xor( 0,a,b,c,d); sb0(a,b,c,d,e,f,g,h); rot(e,f,g,h);
	k_xor( 1,e,f,g,h); sb1(e,f,g,h,a,b,c,d); rot(a,b,c,d);
	k_xor( 2,a,b,c,d); sb2(a,b,c,d,e,f,g,h); rot(e,f,g,h);
	k_xor( 3,e,f,g,h); sb3(e,f,g,h,a,b,c,d); rot(a,b,c,d);
	k_xor( 4,a,b,c,d); sb4(a,b,c,d,e,f,g,h); rot(e,f,g,h);
	k_xor( 5,e,f,g,h); sb5(e,f,g,h,a,b,c,d); rot(a,b,c,d);
	k_xor( 6,a,b,c,d); sb6(a,b,c,d,e,f,g,h); rot(e,f,g,h);
	k_xor( 7,e,f,g,h); sb7(e,f,g,h,a,b,c,d); rot(a,b,c,d);
	k_xor( 8,a,b,c,d); sb0(a,b,c,d,e,f,g,h); rot(e,f,g,h);
	k_xor( 9,e,f,g,h); sb1(e,f,g,h,a,b,c,d); rot(a,b,c,d);
	k_xor(10,a,b,c,d); sb2(a,b,c,d,e,f,g,h); rot(e,f,g,h);
	k_xor(11,e,f,g,h); sb3(e,f,g,h,a,b,c,d); rot(a,b,c,d);
	k_xor(12,a,b,c,d); sb4(a,b,c,d,e,f,g,h); rot(e,f,g,h);
	k_xor(13,e,f,g,h); sb5(e,f,g,h,a,b,c,d); rot(a,b,c,d);
	k_xor(14,a,b,c,d); sb6(a,b,c,d,e,f,g,h); rot(e,f,g,h);
	k_xor(15,e,f,g,h); sb7(e,f,g,h,a,b,c,d); rot(a,b,c,d);
	k_xor(16,a,b,c,d); sb0(a,b,c,d,e,f,g,h); rot(e,f,g,h);
	k_xor(17,e,f,g,h); sb1(e,f,g,h,a,b,c,d); rot(a,b,c,d);
	k_xor(18,a,b,c,d); sb2(a,b,c,d,e,f,g,h); rot(e,f,g,h);
	k_xor(19,e,f,g,h); sb3(e,f,g,h,a,b,c,d); rot(a,b,c,d);
	k_xor(20,a,b,c,d); sb4(a,b,c,d,e,f,g,h); rot(e,f,g,h);
	k_xor(21,e,f,g,h); sb5(e,f,g,h,a,b,c,d); rot(a,b,c,d);
	k_xor(22,a,b,c,d); sb6(a,b,c,d,e,f,g,h); rot(e,f,g,h);
	k_xor(23,e,f,g,h); sb7(e,f,g,h,a,b,c,d); rot(a,b,c,d);
	k_xor(24,a,b,c,d); sb0(a,b,c,d,e,f,g,h); rot(e,f,g,h);
	k_xor(25,e,f,g,h); sb1(e,f,g,h,a,b,c,d); rot(a,b,c,d);
	k_xor(26,a,b,c,d); sb2(a,b,c,d,e,f,g,h); rot(e,f,g,h);
	k_xor(27,e,f,g,h); sb3(e,f,g,h,a,b,c,d); rot(a,b,c,d);
	k_xor(28,a,b,c,d); sb4(a,b,c,d,e,f,g,h); rot(e,f,g,h);
	k_xor(29,e,f,g,h); sb5(e,f,g,h,a,b,c,d); rot(a,b,c,d);
	k_xor(30,a,b,c,d); sb6(a,b,c,d,e,f,g,h); rot(e,f,g,h);
	k_xor(31,e,f,g,h); sb7(e,f,g,h,a,b,c,d); k_xor(32,a,b,c,d);

	pOutBlock[0] = a;
	pOutBlock[1] = b;
	pOutBlock[2] = c;
	pOutBlock[3] = d;
}

void serpentDecrypt(SERPENTCTX* pCtx,
					const WORD32* pInBlock,
					WORD32* pOutBlock)
{
	WORD32 a,b,c,d,e,f,g,h;
	WORD32 t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13,t14,t15,t16;
	WORD32* l_key = pCtx->l_key;

	a = pInBlock[0];
	b = pInBlock[1];
	c = pInBlock[2];
	d = pInBlock[3];

	k_xor(32,a,b,c,d); ib7(a,b,c,d,e,f,g,h); k_xor(31,e,f,g,h);
	irot(e,f,g,h); ib6(e,f,g,h,a,b,c,d); k_xor(30,a,b,c,d);
	irot(a,b,c,d); ib5(a,b,c,d,e,f,g,h); k_xor(29,e,f,g,h);
	irot(e,f,g,h); ib4(e,f,g,h,a,b,c,d); k_xor(28,a,b,c,d);
	irot(a,b,c,d); ib3(a,b,c,d,e,f,g,h); k_xor(27,e,f,g,h);
	irot(e,f,g,h); ib2(e,f,g,h,a,b,c,d); k_xor(26,a,b,c,d);
	irot(a,b,c,d); ib1(a,b,c,d,e,f,g,h); k_xor(25,e,f,g,h);
	irot(e,f,g,h); ib0(e,f,g,h,a,b,c,d); k_xor(24,a,b,c,d);
	irot(a,b,c,d); ib7(a,b,c,d,e,f,g,h); k_xor(23,e,f,g,h);
	irot(e,f,g,h); ib6(e,f,g,h,a,b,c,d); k_xor(22,a,b,c,d);
	irot(a,b,c,d); ib5(a,b,c,d,e,f,g,h); k_xor(21,e,f,g,h);
	irot(e,f,g,h); ib4(e,f,g,h,a,b,c,d); k_xor(20,a,b,c,d);
	irot(a,b,c,d); ib3(a,b,c,d,e,f,g,h); k_xor(19,e,f,g,h);
	irot(e,f,g,h); ib2(e,f,g,h,a,b,c,d); k_xor(18,a,b,c,d);
	irot(a,b,c,d); ib1(a,b,c,d,e,f,g,h); k_xor(17,e,f,g,h);
	irot(e,f,g,h); ib0(e,f,g,h,a,b,c,d); k_xor(16,a,b,c,d);
	irot(a,b,c,d); ib7(a,b,c,d,e,f,g,h); k_xor(15,e,f,g,h);
	irot(e,f,g,h); ib6(e,f,g,h,a,b,c,d); k_xor(14,a,b,c,d);
	irot(a,b,c,d); ib5(a,b,c,d,e,f,g,h); k_xor(13,e,f,g,h);
	irot(e,f,g,h); ib4(e,f,g,h,a,b,c,d); k_xor(12,a,b,c,d);
	irot(a,b,c,d); ib3(a,b,c,d,e,f,g,h); k_xor(11,e,f,g,h);
	irot(e,f,g,h); ib2(e,f,g,h,a,b,c,d); k_xor(10,a,b,c,d);
	irot(a,b,c,d); ib1(a,b,c,d,e,f,g,h); k_xor( 9,e,f,g,h);
	irot(e,f,g,h); ib0(e,f,g,h,a,b,c,d); k_xor( 8,a,b,c,d);
	irot(a,b,c,d); ib7(a,b,c,d,e,f,g,h); k_xor( 7,e,f,g,h);
	irot(e,f,g,h); ib6(e,f,g,h,a,b,c,d); k_xor( 6,a,b,c,d);
	irot(a,b,c,d); ib5(a,b,c,d,e,f,g,h); k_xor( 5,e,f,g,h);
	irot(e,f,g,h); ib4(e,f,g,h,a,b,c,d); k_xor( 4,a,b,c,d);
	irot(a,b,c,d); ib3(a,b,c,d,e,f,g,h); k_xor( 3,e,f,g,h);
	irot(e,f,g,h); ib2(e,f,g,h,a,b,c,d); k_xor( 2,a,b,c,d);
	irot(a,b,c,d); ib1(a,b,c,d,e,f,g,h); k_xor( 1,e,f,g,h);
	irot(e,f,g,h); ib0(e,f,g,h,a,b,c,d); k_xor( 0,a,b,c,d);

	pOutBlock[0] = a;
	pOutBlock[1] = b;
	pOutBlock[2] = c;
	pOutBlock[3] = d;
}


// public functions

WORD32 Serpent_GetCipherInfo(CIPHERINFOBLOCK* pInfo)
{
	WORD32 lI;
	WORD8* pSrc;
	WORD8* pDst;
	CIPHERINFOBLOCK tmpInfo;

	tmpInfo.lSizeOf = pInfo->lSizeOf;
	tmpInfo.lBlockSize = SERPENT_BLOCKSIZE;
	tmpInfo.lKeySize = SERPENT_KEYSIZE;
	tmpInfo.blOwnHasher = BOOL_FALSE;
	tmpInfo.lInitDataSize = SERPENT_BLOCKSIZE;
	tmpInfo.lContextSize = sizeof(SERPENTCTX);
	tmpInfo.bCipherIs = CIPHER_IS_BLOCKLINK;

	// copy as many bytes of the information block as possible
	pSrc = (WORD8*) &tmpInfo;
	pDst = (WORD8*) pInfo;
	for (lI = 0; lI < tmpInfo.lSizeOf; lI++)
		*pDst++ = *pSrc++;
	return CIPHER_ERROR_NOERROR;
}

WORD32 Serpent_SelfTest(void* pTestContext)
{
	/*
	* NOTE: These test vectors are NOT official test vectors.
	* I tested this implementation by comparing it with the outputs given
	* in ecb_e_m.txt (see the Serpent package for more details). The official
	* test implementation encrypts the plaintext vector 10,000 times, which
	* makes it fairly slow. That's why I decided to use my own test vectors.
	* However, this implementation was throughly tested and should work fine.
	*/

	const WORD8 testkey[32] =
	{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
	21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 };

	const WORD32 plaintext[4] =
	{ 0x01234567, 0xABCDEF01, 0xA0B1C2D3, 0xE4F58899 };

	const WORD32 cipher_must[4] =
	{ 0xB633567F, 0x52776204, 0x8D761E99, 0x6701200B };

	WORD32 testbuf[4];

	// Addition: test vector of the NIST reference, KEYSIZE=256
	
	const int NIST_LOOPS = 10000;

	// I=0
	// KEY=0000000000000000000000000000000000000000000000000000000000000000
	// PT=00000000000000000000000000000000
	// CT=92efa3ca9477794d31f4df7bce23e60a
	const WORD8 testKeyNist[SERPENT_KEYSIZE] = {
		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
		
	const WORD32 plaintextNist[4] = {
		 0x00000000, 0x00000000, 0x00000000, 0x00000000 };

	const WORD32 cipherMustNist[4] = {
		 0xce23e60a, 0x31f4df7b, 0x9477794d, 0x92efa3ca };

	SERPENTCTX* pCtx = (SERPENTCTX*) pTestContext;
	int nI;

	// initialize the cipher
	serpentSetKey(pCtx, testkey, 32);

	// encrypt the test vector
	serpentEncrypt(pCtx, plaintext, testbuf);

	// did it work correctly?
	for (nI = 0; nI < 4; nI++)
	{
		if (testbuf[nI] != cipher_must[nI])
			return CIPHER_ERROR_INVALID;
	}

	// test the decryption
	serpentDecrypt(pCtx, testbuf, testbuf);

	for (nI = 0; nI < 4; nI++)
	{
		if (testbuf[nI] != plaintext[nI])
			return CIPHER_ERROR_INVALID;
	}

	// now for the NIST vector (Monte Carlo test)

	serpentSetKey(pCtx, testKeyNist, sizeof(testKeyNist));

	testbuf[0] = plaintextNist[0];
	testbuf[1] = plaintextNist[1];
	testbuf[2] = plaintextNist[2];
	testbuf[3] = plaintextNist[3];

	for (nI = 0; nI < NIST_LOOPS; nI++)
		serpentEncrypt(pCtx, testbuf, testbuf);

	// did it work correctly?
	for (nI = 0; nI < 4; nI++)
		if (testbuf[nI] != cipherMustNist[nI])
			return CIPHER_ERROR_INVALID;

	return CIPHER_ERROR_NOERROR;
}

WORD32 Serpent_CreateWorkContext(void* pContext,
								 const WORD8* pKey,
								 WORD32 lKeyLen,
								 WORD32 lMode,
								 void* pInitData,
								 Cipher_RandomGenerator GetRndBytes,
								 const void* pRandGenData)
{
	SERPENTCTX* pCtx = (SERPENTCTX*) pContext;
	WORD8* pbInit;

	// legacy or standard?
	pCtx->blLegacy = (CIPHER_GETFLAGS(lMode) & CIPHER_MODE_FLAG_LEGACY) ? BOOL_TRUE : BOOL_FALSE;

	// do the key setup
	serpentSetKey(pCtx, pKey, lKeyLen);

	pbInit = (WORD8*) pInitData;
	if (CIPHER_GETMODE(lMode) == CIPHER_MODE_ENCRYPT)
		GetRndBytes(pbInit, SERPENT_BLOCKSIZE, pRandGenData);

	// set the CBC IV
	if (pCtx->blLegacy)
	{
		pCtx->cbc_iv[0] = BYTES_TO_WORD32_X86(pbInit);
		pCtx->cbc_iv[1] = BYTES_TO_WORD32_X86(pbInit + 4);
		pCtx->cbc_iv[2] = BYTES_TO_WORD32_X86(pbInit + 8);
		pCtx->cbc_iv[3] = BYTES_TO_WORD32_X86(pbInit + 12);
	}
	else
	{
		pCtx->cbc_iv[0] = BYTES_TO_WORD32(pbInit);
		pCtx->cbc_iv[1] = BYTES_TO_WORD32(pbInit + 4);
		pCtx->cbc_iv[2] = BYTES_TO_WORD32(pbInit + 8);
		pCtx->cbc_iv[3] = BYTES_TO_WORD32(pbInit + 12);
	}

	return CIPHER_ERROR_NOERROR;
}

void Serpent_ResetWorkContext(void* pContext,
							  WORD32 lMode,
							  void* pInitData,
							  Cipher_RandomGenerator GetRndBytes,
							  const void* pRandGenData)
{
	SERPENTCTX* pCtx = (SERPENTCTX*) pContext;
	WORD8* pbInit = (WORD8*) pInitData;

	if (CIPHER_GETMODE(lMode) == CIPHER_MODE_ENCRYPT)
		GetRndBytes(pbInit, SERPENT_BLOCKSIZE, pRandGenData);

	if (pCtx->blLegacy)
	{
		pCtx->cbc_iv[0] = BYTES_TO_WORD32_X86(pbInit);
		pCtx->cbc_iv[1] = BYTES_TO_WORD32_X86(pbInit + 4);
		pCtx->cbc_iv[2] = BYTES_TO_WORD32_X86(pbInit + 8);
		pCtx->cbc_iv[3] = BYTES_TO_WORD32_X86(pbInit + 12);
	}
	else
	{
		pCtx->cbc_iv[0] = BYTES_TO_WORD32(pbInit);
		pCtx->cbc_iv[1] = BYTES_TO_WORD32(pbInit + 4);
		pCtx->cbc_iv[2] = BYTES_TO_WORD32(pbInit + 8);
		pCtx->cbc_iv[3] = BYTES_TO_WORD32(pbInit + 12);
	}
}

WORD32 Serpent_DestroyWorkContext(void *pContext)
{
	int nI;
	WORD8* pCtxBuf = (WORD8*) pContext;

	for (nI = 0; nI < sizeof(SERPENTCTX); nI++)
		pCtxBuf[nI] = 0x00;

	return CIPHER_ERROR_NOERROR;
}

void Serpent_EncryptBuffer(void* pContext,
						   const void*  pSource,
						   void* pTarget,
						   WORD32 lNumOfBytes)
{
	WORD32 lNumOfBlocks;
	WORD32 blk[SERPENT_BLOCKSIZE / 4];
	WORD8* pbIn = (WORD8*) pSource;
	WORD8* pbOut = (WORD8*) pTarget;
	SERPENTCTX* pCtx = (SERPENTCTX*) pContext;

	lNumOfBlocks = lNumOfBytes / SERPENT_BLOCKSIZE;

	while (lNumOfBlocks--)
	{
		if (pCtx->blLegacy)
		{
			blk[0] = BYTES_TO_WORD32_X86(pbIn);
			blk[1] = BYTES_TO_WORD32_X86(pbIn + 4);
			blk[2] = BYTES_TO_WORD32_X86(pbIn + 8);
			blk[3] = BYTES_TO_WORD32_X86(pbIn + 12);
		}
		else
		{
			blk[0] = BYTES_TO_WORD32(pbIn);
			blk[1] = BYTES_TO_WORD32(pbIn + 4);
			blk[2] = BYTES_TO_WORD32(pbIn + 8);
			blk[3] = BYTES_TO_WORD32(pbIn + 12);
		}

		blk[0] ^= pCtx->cbc_iv[0];			
		blk[1] ^= pCtx->cbc_iv[1];			
		blk[2] ^= pCtx->cbc_iv[2];			
		blk[3] ^= pCtx->cbc_iv[3];			

		// encrypt the buffer
		serpentEncrypt(pCtx, blk, blk);

		// store the encrypted block
		if (pCtx->blLegacy)
		{
			WORD32_TO_BYTES_X86(blk[0], pbOut)
			WORD32_TO_BYTES_X86(blk[1], pbOut + 4)
			WORD32_TO_BYTES_X86(blk[2], pbOut + 8)
			WORD32_TO_BYTES_X86(blk[3], pbOut + 12)
		}
		else
		{
			WORD32_TO_BYTES(blk[0], pbOut)
			WORD32_TO_BYTES(blk[1], pbOut + 4)
			WORD32_TO_BYTES(blk[2], pbOut + 8)
			WORD32_TO_BYTES(blk[3], pbOut + 12)
		}

		// set the new IV
		pCtx->cbc_iv[0] = blk[0];
		pCtx->cbc_iv[1] = blk[1];
		pCtx->cbc_iv[2] = blk[2];
		pCtx->cbc_iv[3] = blk[3];

		pbIn += SERPENT_BLOCKSIZE;
		pbOut += SERPENT_BLOCKSIZE;
	}
}

void Serpent_DecryptBuffer(void* pContext,
						   const void* pSource,
						   void* pTarget,
						   WORD32 lNumOfBytes,
						   const void* pPreviousBlock)
{
	WORD32 lNumOfBlocks;
	WORD8* pbIn = (WORD8*) pSource;
	WORD8* pbOut = (WORD8*) pTarget;
	WORD8* pbPrev = (WORD8*) pPreviousBlock;
	WORD32 blk[4];
	WORD32 save_cbc_iv[4];
	SERPENTCTX* pCtx = (SERPENTCTX*) pContext;

	// load a new IV, if necessary
	if (pbPrev != CIPHER_NULL)
	{
		if (pCtx->blLegacy)
		{
			pCtx->cbc_iv[0] = BYTES_TO_WORD32_X86(pbPrev);
			pCtx->cbc_iv[1] = BYTES_TO_WORD32_X86(pbPrev + 4);
			pCtx->cbc_iv[2] = BYTES_TO_WORD32_X86(pbPrev + 8);
			pCtx->cbc_iv[3] = BYTES_TO_WORD32_X86(pbPrev + 12);
		}
		else
		{
			pCtx->cbc_iv[0] = BYTES_TO_WORD32(pbPrev);
			pCtx->cbc_iv[1] = BYTES_TO_WORD32(pbPrev + 4);
			pCtx->cbc_iv[2] = BYTES_TO_WORD32(pbPrev + 8);
			pCtx->cbc_iv[3] = BYTES_TO_WORD32(pbPrev + 12);
		}
	}

	lNumOfBlocks = lNumOfBytes / SERPENT_BLOCKSIZE;

	while (lNumOfBlocks--)
	{
		// load the block
		if (pCtx->blLegacy)
		{
			blk[0] = BYTES_TO_WORD32_X86(pbIn);
			blk[1] = BYTES_TO_WORD32_X86(pbIn + 4);
			blk[2] = BYTES_TO_WORD32_X86(pbIn + 8);
			blk[3] = BYTES_TO_WORD32_X86(pbIn + 12);
		}
		else
		{
			blk[0] = BYTES_TO_WORD32(pbIn);
			blk[1] = BYTES_TO_WORD32(pbIn + 4);
			blk[2] = BYTES_TO_WORD32(pbIn + 8);
			blk[3] = BYTES_TO_WORD32(pbIn + 12);
		}

		// save the current block for later
		save_cbc_iv[0] = blk[0];
		save_cbc_iv[1] = blk[1];
		save_cbc_iv[2] = blk[2];
		save_cbc_iv[3] = blk[3];
		
		// decrypt the block
		serpentDecrypt(pCtx, blk, blk);

		// unchain the block
		blk[0] ^= pCtx->cbc_iv[0];
		blk[1] ^= pCtx->cbc_iv[1];
		blk[2] ^= pCtx->cbc_iv[2];
		blk[3] ^= pCtx->cbc_iv[3];

		// and safe it
		if (pCtx->blLegacy)
		{
			WORD32_TO_BYTES_X86(blk[0], pbOut)
			WORD32_TO_BYTES_X86(blk[1], pbOut + 4)
			WORD32_TO_BYTES_X86(blk[2], pbOut + 8)
			WORD32_TO_BYTES_X86(blk[3], pbOut + 12)
		}
		else
		{
			WORD32_TO_BYTES(blk[0], pbOut)
			WORD32_TO_BYTES(blk[1], pbOut + 4)
			WORD32_TO_BYTES(blk[2], pbOut + 8)
			WORD32_TO_BYTES(blk[3], pbOut + 12)
		}

		// set the new IV
		pCtx->cbc_iv[0] = save_cbc_iv[0];
		pCtx->cbc_iv[1] = save_cbc_iv[1];
		pCtx->cbc_iv[2] = save_cbc_iv[2];
		pCtx->cbc_iv[3] = save_cbc_iv[3];

		pbIn += SERPENT_BLOCKSIZE;
		pbOut += SERPENT_BLOCKSIZE;
	}
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
综合电影一区二区三区| 精品粉嫩aⅴ一区二区三区四区| 亚洲国产日韩av| 久久综合九色综合97_久久久| 久久精品人人做人人综合| 色94色欧美sute亚洲线路一ni| 免费三级欧美电影| 亚洲欧美日韩成人高清在线一区| 精品国产制服丝袜高跟| 欧美三级韩国三级日本一级| 国产v综合v亚洲欧| 久久不见久久见免费视频7| 亚洲愉拍自拍另类高清精品| 久久理论电影网| 91精品国产一区二区三区| 91免费看`日韩一区二区| 国产一区二区三区在线看麻豆| 亚洲成av人片| 亚洲精品日产精品乱码不卡| 久久精品欧美一区二区三区不卡| 欧美一区二区三区在线观看| 欧美在线一二三| 色诱视频网站一区| 99视频一区二区三区| 国产sm精品调教视频网站| 久久99蜜桃精品| 免费三级欧美电影| 蜜桃免费网站一区二区三区| 无吗不卡中文字幕| 亚洲国产精品精华液网站| 亚洲日本在线看| 中文字幕一区二区三| 国产精品久久久久久久久久免费看| 精品久久久久久久久久久久久久久久久| 欧美性生活大片视频| 色噜噜狠狠成人网p站| 色婷婷综合久久久久中文一区二区 | 国产精品美女久久久久久久| 精品少妇一区二区三区视频免付费| 欧美日韩一区二区三区四区| 在线免费观看日本欧美| 欧洲av一区二区嗯嗯嗯啊| 91麻豆文化传媒在线观看| 色综合久久66| 欧美影院一区二区三区| 欧美日韩视频专区在线播放| 欧美乱熟臀69xxxxxx| 91麻豆精品国产综合久久久久久| 欧美日韩精品高清| 制服丝袜激情欧洲亚洲| 日韩欧美高清dvd碟片| 久久亚洲综合色| 国产精品女主播在线观看| 亚洲视频免费在线观看| 一二三四区精品视频| 视频一区二区欧美| 精品伊人久久久久7777人| 国产高清成人在线| av欧美精品.com| 欧美亚洲综合久久| 91精品国产免费| 久久精品在线免费观看| 国产精品久久久一本精品| 一区二区三区四区激情| 婷婷一区二区三区| 国产一区二区美女| 99免费精品在线| 欧美精品色综合| 久久精品无码一区二区三区| 1024成人网| 视频一区二区三区在线| 国产米奇在线777精品观看| 97国产精品videossex| 欧美日韩三级一区二区| 26uuu另类欧美| 日韩理论片在线| 免费精品99久久国产综合精品| 成人免费看视频| 欧美网站一区二区| 亚洲精品在线免费观看视频| 国产精品三级av| 日本怡春院一区二区| 成人性生交大片免费看中文| 欧美日韩中文一区| 久久九九全国免费| 亚洲国产精品人人做人人爽| 国产美女精品人人做人人爽| 91国偷自产一区二区开放时间| 精品卡一卡二卡三卡四在线| 亚洲欧美一区二区三区孕妇| 日本人妖一区二区| 99re8在线精品视频免费播放| 91精品国产入口| 亚洲天堂a在线| 国内精品视频666| 欧美精品乱码久久久久久| 国产精品色一区二区三区| 日韩成人精品视频| 不卡一区二区在线| 欧美不卡一区二区| 亚洲午夜久久久久久久久电影网| 国产一区二区三区久久悠悠色av| 中文字幕一区三区| 久久国产剧场电影| 欧美日本免费一区二区三区| 中文字幕一区二区三区在线不卡 | 亚洲女人小视频在线观看| 久久av资源站| 欧美精品18+| 一区二区三区在线高清| 豆国产96在线|亚洲| 欧美videos大乳护士334| 香蕉乱码成人久久天堂爱免费| 成人18视频在线播放| 久久免费视频一区| 日本va欧美va瓶| 欧美喷水一区二区| 亚洲最色的网站| 色综合天天综合色综合av| 国产女主播在线一区二区| 久久超碰97中文字幕| 日韩欧美一区二区免费| 日韩电影在线一区二区| 欧美日韩在线免费视频| 亚洲理论在线观看| 91免费视频网| 亚洲免费在线观看视频| 成人av电影在线网| 综合色中文字幕| 97精品国产露脸对白| 亚洲视频图片小说| 欧美做爰猛烈大尺度电影无法无天| 国产精品国产三级国产a| 成人av免费在线观看| 国产精品久久久久四虎| 波多野结衣一区二区三区| 国产精品久久久一本精品| 成人av中文字幕| |精品福利一区二区三区| 99久久综合色| 一区二区三区免费在线观看| 色噜噜夜夜夜综合网| 亚洲在线观看免费| 日韩一二三区不卡| 国产美女一区二区三区| 国产精品热久久久久夜色精品三区| 国产成人久久精品77777最新版本| 国产亚洲精久久久久久| 99麻豆久久久国产精品免费| 亚洲精品日韩一| 91精品国产91久久久久久最新毛片| 精一区二区三区| 欧美极品aⅴ影院| 97久久精品人人做人人爽| 亚洲第一电影网| 日韩欧美黄色影院| 国产99久久精品| 亚洲午夜久久久久久久久电影院| 3d动漫精品啪啪| 国产精品自拍一区| 亚洲欧洲精品天堂一级| 欧美吻胸吃奶大尺度电影| 免费不卡在线观看| 国产日韩综合av| 色婷婷久久久综合中文字幕| 日韩精品一二区| 国产欧美日韩精品a在线观看| 91视频.com| 日韩av高清在线观看| 国产欧美视频一区二区| 欧美日韩一区小说| 国产一区二区三区不卡在线观看 | 91传媒视频在线播放| 蜜臀91精品一区二区三区| 国产日本一区二区| 在线精品视频一区二区| 秋霞午夜鲁丝一区二区老狼| 中文字幕第一区综合| 欧美日韩和欧美的一区二区| 国产麻豆视频一区二区| 亚洲一区二区在线观看视频 | 丝袜国产日韩另类美女| 精品久久久久一区| 色综合久久久久综合体桃花网| 午夜精品久久久久久| 中文字幕乱码一区二区免费| 欧美久久久久久久久| 成人免费视频视频在线观看免费| 亚洲一二三区视频在线观看| 久久亚洲精品小早川怜子| 欧美在线观看视频在线| 国产精品羞羞答答xxdd| 日本亚洲一区二区| 中文字幕在线观看不卡| 日韩三级在线观看| 欧美自拍丝袜亚洲| 成a人片亚洲日本久久| 狠狠色综合色综合网络| 亚洲r级在线视频| 日韩美女视频一区二区|