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

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

?? bn_lib.c

?? openssl包含TLS
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* crypto/bn/bn_lib.c *//* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. *  * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to.  The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code.  The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). *  * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. *  * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the copyright *    notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in the *    documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software *    must display the following acknowledgement: *    "This product includes cryptographic software written by *     Eric Young (eay@cryptsoft.com)" *    The word 'cryptographic' can be left out if the rouines from the library *    being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from  *    the apps directory (application code) you must include an acknowledgement: *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" *  * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. *  * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed.  i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */#ifndef BN_DEBUG# undef NDEBUG /* avoid conflicting definitions */# define NDEBUG#endif#include <assert.h>#include <limits.h>#include <stdio.h>#include "cryptlib.h"#include "bn_lcl.h"const char *BN_version="Big Number" OPENSSL_VERSION_PTEXT;/* For a 32 bit machine * 2 -   4 ==  128 * 3 -   8 ==  256 * 4 -  16 ==  512 * 5 -  32 == 1024 * 6 -  64 == 2048 * 7 - 128 == 4096 * 8 - 256 == 8192 */static int bn_limit_bits=0;static int bn_limit_num=8;        /* (1<<bn_limit_bits) */static int bn_limit_bits_low=0;static int bn_limit_num_low=8;    /* (1<<bn_limit_bits_low) */static int bn_limit_bits_high=0;static int bn_limit_num_high=8;   /* (1<<bn_limit_bits_high) */static int bn_limit_bits_mont=0;static int bn_limit_num_mont=8;   /* (1<<bn_limit_bits_mont) */void BN_set_params(int mult, int high, int low, int mont)	{	if (mult >= 0)		{		if (mult > (sizeof(int)*8)-1)			mult=sizeof(int)*8-1;		bn_limit_bits=mult;		bn_limit_num=1<<mult;		}	if (high >= 0)		{		if (high > (sizeof(int)*8)-1)			high=sizeof(int)*8-1;		bn_limit_bits_high=high;		bn_limit_num_high=1<<high;		}	if (low >= 0)		{		if (low > (sizeof(int)*8)-1)			low=sizeof(int)*8-1;		bn_limit_bits_low=low;		bn_limit_num_low=1<<low;		}	if (mont >= 0)		{		if (mont > (sizeof(int)*8)-1)			mont=sizeof(int)*8-1;		bn_limit_bits_mont=mont;		bn_limit_num_mont=1<<mont;		}	}int BN_get_params(int which)	{	if      (which == 0) return(bn_limit_bits);	else if (which == 1) return(bn_limit_bits_high);	else if (which == 2) return(bn_limit_bits_low);	else if (which == 3) return(bn_limit_bits_mont);	else return(0);	}const BIGNUM *BN_value_one(void)	{	static BN_ULONG data_one=1L;	static BIGNUM const_one={&data_one,1,1,0};	return(&const_one);	}char *BN_options(void)	{	static int init=0;	static char data[16];	if (!init)		{		init++;#ifdef BN_LLONG		BIO_snprintf(data,sizeof data,"bn(%d,%d)",			     (int)sizeof(BN_ULLONG)*8,(int)sizeof(BN_ULONG)*8);#else		BIO_snprintf(data,sizeof data,"bn(%d,%d)",			     (int)sizeof(BN_ULONG)*8,(int)sizeof(BN_ULONG)*8);#endif		}	return(data);	}int BN_num_bits_word(BN_ULONG l)	{	static const char bits[256]={		0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4,		5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,		6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,		6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,		7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,		7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,		7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,		7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,		8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,		8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,		8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,		8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,		8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,		8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,		8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,		8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,		};#if defined(SIXTY_FOUR_BIT_LONG)	if (l & 0xffffffff00000000L)		{		if (l & 0xffff000000000000L)			{			if (l & 0xff00000000000000L)				{				return(bits[(int)(l>>56)]+56);				}			else	return(bits[(int)(l>>48)]+48);			}		else			{			if (l & 0x0000ff0000000000L)				{				return(bits[(int)(l>>40)]+40);				}			else	return(bits[(int)(l>>32)]+32);			}		}	else#else#ifdef SIXTY_FOUR_BIT	if (l & 0xffffffff00000000LL)		{		if (l & 0xffff000000000000LL)			{			if (l & 0xff00000000000000LL)				{				return(bits[(int)(l>>56)]+56);				}			else	return(bits[(int)(l>>48)]+48);			}		else			{			if (l & 0x0000ff0000000000LL)				{				return(bits[(int)(l>>40)]+40);				}			else	return(bits[(int)(l>>32)]+32);			}		}	else#endif#endif		{#if defined(THIRTY_TWO_BIT) || defined(SIXTY_FOUR_BIT) || defined(SIXTY_FOUR_BIT_LONG)		if (l & 0xffff0000L)			{			if (l & 0xff000000L)				return(bits[(int)(l>>24L)]+24);			else	return(bits[(int)(l>>16L)]+16);			}		else#endif			{#if defined(SIXTEEN_BIT) || defined(THIRTY_TWO_BIT) || defined(SIXTY_FOUR_BIT) || defined(SIXTY_FOUR_BIT_LONG)			if (l & 0xff00L)				return(bits[(int)(l>>8)]+8);			else	#endif				return(bits[(int)(l   )]  );			}		}	}int BN_num_bits(const BIGNUM *a)	{	BN_ULONG l;	int i;	bn_check_top(a);	if (a->top == 0) return(0);	l=a->d[a->top-1];	assert(l != 0);	i=(a->top-1)*BN_BITS2;	return(i+BN_num_bits_word(l));	}void BN_clear_free(BIGNUM *a)	{	int i;	if (a == NULL) return;	if (a->d != NULL)		{		OPENSSL_cleanse(a->d,a->dmax*sizeof(a->d[0]));		if (!(BN_get_flags(a,BN_FLG_STATIC_DATA)))			OPENSSL_free(a->d);		}	i=BN_get_flags(a,BN_FLG_MALLOCED);	OPENSSL_cleanse(a,sizeof(BIGNUM));	if (i)		OPENSSL_free(a);	}void BN_free(BIGNUM *a)	{	if (a == NULL) return;	if ((a->d != NULL) && !(BN_get_flags(a,BN_FLG_STATIC_DATA)))		OPENSSL_free(a->d);	a->flags|=BN_FLG_FREE; /* REMOVE? */	if (a->flags & BN_FLG_MALLOCED)		OPENSSL_free(a);	}void BN_init(BIGNUM *a)	{	memset(a,0,sizeof(BIGNUM));	}BIGNUM *BN_new(void)	{	BIGNUM *ret;	if ((ret=(BIGNUM *)OPENSSL_malloc(sizeof(BIGNUM))) == NULL)		{		BNerr(BN_F_BN_NEW,ERR_R_MALLOC_FAILURE);		return(NULL);		}	ret->flags=BN_FLG_MALLOCED;	ret->top=0;	ret->neg=0;	ret->dmax=0;	ret->d=NULL;	return(ret);	}/* This is used both by bn_expand2() and bn_dup_expand() *//* The caller MUST check that words > b->dmax before calling this */static BN_ULONG *bn_expand_internal(const BIGNUM *b, int words)	{	BN_ULONG *A,*a = NULL;	const BN_ULONG *B;	int i;	if (words > (INT_MAX/(4*BN_BITS2)))		{		BNerr(BN_F_BN_EXPAND_INTERNAL,BN_R_BIGNUM_TOO_LONG);		return NULL;		}	bn_check_top(b);		if (BN_get_flags(b,BN_FLG_STATIC_DATA))		{		BNerr(BN_F_BN_EXPAND_INTERNAL,BN_R_EXPAND_ON_STATIC_BIGNUM_DATA);		return(NULL);		}	a=A=(BN_ULONG *)OPENSSL_malloc(sizeof(BN_ULONG)*(words+1));	if (A == NULL)		{		BNerr(BN_F_BN_EXPAND_INTERNAL,ERR_R_MALLOC_FAILURE);		return(NULL);		}#if 1	B=b->d;	/* Check if the previous number needs to be copied */	if (B != NULL)		{		for (i=b->top>>2; i>0; i--,A+=4,B+=4)			{			/*			 * The fact that the loop is unrolled			 * 4-wise is a tribute to Intel. It's			 * the one that doesn't have enough			 * registers to accomodate more data.			 * I'd unroll it 8-wise otherwise:-)			 *			 *		<appro@fy.chalmers.se>			 */			BN_ULONG a0,a1,a2,a3;			a0=B[0]; a1=B[1]; a2=B[2]; a3=B[3];			A[0]=a0; A[1]=a1; A[2]=a2; A[3]=a3;			}		switch (b->top&3)			{		case 3:	A[2]=B[2];		case 2:	A[1]=B[1];		case 1:	A[0]=B[0];		case 0: /* workaround for ultrix cc: without 'case 0', the optimizer does		         * the switch table by doing a=top&3; a--; goto jump_table[a];		         * which fails for top== 0 */			;			}		}	/* Now need to zero any data between b->top and b->max */	/* XXX Why? */	A= &(a[b->top]);	for (i=(words - b->top)>>3; i>0; i--,A+=8)		{		A[0]=0; A[1]=0; A[2]=0; A[3]=0;		A[4]=0; A[5]=0; A[6]=0; A[7]=0;		}	for (i=(words - b->top)&7; i>0; i--,A++)		A[0]=0;#else	memset(A,0,sizeof(BN_ULONG)*(words+1));	memcpy(A,b->d,sizeof(b->d[0])*b->top);#endif			return(a);	}/* This is an internal function that can be used instead of bn_expand2() * when there is a need to copy BIGNUMs instead of only expanding the * data part, while still expanding them. * Especially useful when needing to expand BIGNUMs that are declared * 'const' and should therefore not be changed. * The reason to use this instead of a BN_dup() followed by a bn_expand2() * is memory allocation overhead.  A BN_dup() followed by a bn_expand2() * will allocate new memory for the BIGNUM data twice, and free it once, * while bn_dup_expand() makes sure allocation is made only once. */BIGNUM *bn_dup_expand(const BIGNUM *b, int words)	{	BIGNUM *r = NULL;	/* This function does not work if	 *      words <= b->dmax && top < words	 * because BN_dup() does not preserve 'dmax'!	 * (But bn_dup_expand() is not used anywhere yet.)	 */		if (words > b->dmax)		{		BN_ULONG *a = bn_expand_internal(b, words);		if (a)			{			r = BN_new();			if (r)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
捆绑变态av一区二区三区| 欧美在线观看18| 91啪九色porn原创视频在线观看| 欧美日韩电影一区| 国产精品理论在线观看| 美女一区二区视频| 欧美色区777第一页| 国产日韩欧美综合在线| 日本女人一区二区三区| 91在线观看美女| 欧美激情一二三区| 国产福利一区二区三区视频在线| 欧美视频一区二区三区在线观看| 国产精品久久久久影院| 狠狠色丁香九九婷婷综合五月| 欧美日韩国产在线播放网站| 亚洲免费色视频| 99精品一区二区三区| 国产女人aaa级久久久级| 精品一区二区久久| 日韩精品一区二| 日本伊人色综合网| 欧美日韩在线直播| 亚洲一区中文日韩| 在线欧美日韩国产| 一区二区三区四区不卡在线| 成人黄色av电影| 国产精品乱人伦一区二区| 国产成人av福利| 国产欧美一区二区精品性| 国产一区二区在线免费观看| 日韩欧美一级片| 国产一区二区三区四区五区入口 | 午夜精品一区二区三区三上悠亚| 99re这里都是精品| 一级特黄大欧美久久久| 色哟哟一区二区在线观看| 亚洲摸摸操操av| 欧洲中文字幕精品| 日韩高清中文字幕一区| 这里只有精品视频在线观看| 日本成人在线看| 欧美成人性战久久| 成人免费高清视频| 亚洲黄色尤物视频| 欧美另类高清zo欧美| 精品无人区卡一卡二卡三乱码免费卡| 精品卡一卡二卡三卡四在线| 国产精品一区三区| 亚洲欧洲一区二区三区| 欧美色偷偷大香| 久草这里只有精品视频| 国产视频亚洲色图| 99精品在线免费| 婷婷激情综合网| 久久精品亚洲国产奇米99| 99久久国产综合精品女不卡| 亚洲妇熟xx妇色黄| 精品国产91乱码一区二区三区| 国产v综合v亚洲欧| 一区二区三区在线视频免费| 欧美高清视频一二三区 | www国产精品av| 成人avav影音| 日韩激情视频网站| 久久久欧美精品sm网站| 色老汉一区二区三区| 美腿丝袜亚洲色图| 综合网在线视频| 日韩一区二区麻豆国产| 97精品国产露脸对白| 美女视频黄 久久| 亚洲精品国产一区二区精华液 | 99天天综合性| 久热成人在线视频| 一区二区三区小说| 精品国产一区二区三区四区四| 91丝袜美女网| 国产麻豆欧美日韩一区| 日韩黄色在线观看| 成人免费一区二区三区在线观看| 69av一区二区三区| 一本大道久久a久久综合| 国内不卡的二区三区中文字幕 | 欧美久久久久久久久中文字幕| 国产不卡高清在线观看视频| 亚洲777理论| 一区免费观看视频| 久久伊99综合婷婷久久伊| 欧美日韩色综合| 91美女蜜桃在线| 国产经典欧美精品| 麻豆一区二区99久久久久| 一区二区三区四区av| 国产精品动漫网站| 久久久久99精品一区| 日韩一区二区三区电影在线观看| 欧美日韩在线精品一区二区三区激情| 风间由美一区二区三区在线观看| 麻豆精品国产91久久久久久| 亚洲国产成人91porn| 亚洲欧美一区二区三区极速播放 | 亚洲一区二区三区中文字幕在线| 中文字幕一区视频| 国产婷婷一区二区| 久久精品一区二区| 国产亚洲欧美色| 久久久蜜桃精品| 久久精子c满五个校花| 久久午夜电影网| 久久免费看少妇高潮| 久久精子c满五个校花| 久久久久久久久久看片| 久久久精品黄色| 中文一区二区在线观看| 日本一区二区动态图| 国产精品久久久久精k8| 欧美国产1区2区| 椎名由奈av一区二区三区| 国产精品久久久久久久久久久免费看| 久久精品一区二区三区不卡牛牛| 欧美激情一区二区| 亚洲色图制服丝袜| 一区二区三区日韩欧美精品| 亚洲九九爱视频| 亚洲午夜久久久久久久久电影院| 亚洲国产成人av| 麻豆免费精品视频| 国产成人午夜视频| 99久久综合国产精品| 欧美性受xxxx| 日韩欧美一二区| 国产亚洲精品bt天堂精选| 国产亚洲综合色| 亚洲精品日韩综合观看成人91| 午夜精品福利一区二区三区蜜桃| 视频在线观看91| 国产成人免费在线观看| 91麻豆123| 91精品国产综合久久精品| 欧美精品一区二区三区在线播放| 国产亲近乱来精品视频| 一区二区三区四区乱视频| 奇米综合一区二区三区精品视频| 国产一二精品视频| 一本大道综合伊人精品热热| 日韩午夜中文字幕| 国产精品毛片高清在线完整版| 亚洲专区一二三| 精品一区二区三区的国产在线播放| 成人动漫一区二区三区| 欧美三区在线视频| 久久婷婷成人综合色| 夜夜操天天操亚洲| 激情伊人五月天久久综合| 色综合网色综合| 欧美mv和日韩mv国产网站| 亚洲人成电影网站色mp4| 久久99精品久久久| 色婷婷综合激情| 久久久久亚洲综合| 日日夜夜免费精品视频| 成人久久久精品乱码一区二区三区 | 极品销魂美女一区二区三区| www.66久久| 欧美精品一区二区三区蜜桃视频| 亚洲欧美一区二区不卡| 国产一区在线精品| 91精品国产综合久久久久久久久久| 国产精品欧美久久久久一区二区| 免费成人性网站| 欧美亚洲动漫精品| 国产精品全国免费观看高清| 麻豆成人av在线| 欧美美女网站色| 一区二区三区在线观看欧美| 成人妖精视频yjsp地址| 欧美精品一区二区精品网| 日韩—二三区免费观看av| 在线观看www91| 亚洲美女精品一区| 成人高清av在线| 中文字幕免费观看一区| 激情深爱一区二区| 日韩欧美中文字幕制服| 午夜精品国产更新| 精品视频全国免费看| 亚洲午夜久久久久久久久电影网| 91丨九色丨蝌蚪富婆spa| 亚洲欧美一区二区在线观看| 成人永久免费视频| 欧美激情一区在线观看| 国产91丝袜在线播放| 久久久噜噜噜久噜久久综合| 国产精品资源网站| 国产喷白浆一区二区三区| 国产福利一区二区| 国产精品久久久久久福利一牛影视| 国产成人免费高清| 国产精品国产馆在线真实露脸|