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

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

?? ec_vlong.c

?? 加密算法實現 Pegwit is a program for performing public key file encryption and authentication. Encr
?? C
字號:
/*
 * Multiple-precision ("very long") integer arithmetic
 *
 * This public domain software was written by Paulo S.L.M. Barreto
 * <pbarreto@uninet.com.br> based on original C++ software written by
 * George Barwood <george.barwood@dial.pipex.com>
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ''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 AUTHORS 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.
 *
 * References:
 *
 * 1.	Knuth, D. E.: "The Art of Computer Programming",
 *		2nd ed. (1981), vol. II (Seminumerical Algorithms), p. 257-258.
 *		Addison Wesley Publishing Company.
 *
 * 2.	Hansen, P. B.: "Multiple-length Division Revisited: a Tour of the Minefield".
 *		Software - Practice and Experience 24:6 (1994), 579-601.
 *
 * 3.	Menezes, A. J., van Oorschot, P. C., Vanstone, S. A.:
 *		"Handbook of Applied Cryptography", CRC Press (1997), section 14.2.5.
 */

#include <assert.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

#include "ec_param.h"
#include "ec_vlong.h"


#ifdef SELF_TESTING

void vlPrint (FILE *out, const char *tag, const vlPoint k)
	/* printf prefix tag and the contents of k to file out */
{
	word16 i;

	assert (k != NULL);
	fprintf (out, "%s", tag);
	for (i = k[0]; i > 0; i--) {
		fprintf (out, "%04x", k[i]);
	}
	fprintf (out, "\n");
} /* vlPrint */


void vlRandom (vlPoint k)
	/* sets k := <random very long integer value> */
{
	int i;

	assert (k != NULL);
	for (i = 1; i <= VL_UNITS; i++) {
		k[i] = (word16)rand();
	}
	for (i = VL_UNITS; i > 0; i--) {
		if (k[i]) {
			break;
		}
	}
	k[0] = i;
} /* vlRandom */

#endif /* ?SELF_TESTING */


int vlEqual (const vlPoint p, const vlPoint q)
{
	assert (p != NULL);
	assert (q != NULL);
	return memcmp (p, q, (p[0] + 1) * sizeof (word16)) == 0 ? 1 : 0;
} /* vlEqual */


void vlClear (vlPoint p)
{
	assert (p != NULL);
	memset (p, 0, sizeof (vlPoint));
} /* vlClear */


void vlCopy (vlPoint p, const vlPoint q)
	/* sets p := q */
{
	assert (p != NULL);
	assert (q != NULL);
	memcpy (p, q, (q[0] + 1) * sizeof (word16));
} /* vlCopy */


void vlShortSet (vlPoint p, word16 u)
	/* sets p := u */
{
	assert (p != NULL);
	p[0] = 1; p[1] = u;
} /* vlShortSet */


int vlNumBits (const vlPoint k)
	/* evaluates to the number of bits of k (index of most significant bit, plus one) */
{
	int i;
	word16 m, w;

	assert (k != NULL);
	if (k[0] == 0) {
		return 0;
	}
	w = k[k[0]]; /* last unit of k */
	for (i = (int)(k[0] << 4), m = 0x8000U; m; i--, m >>= 1) {
		if (w & m) {
			return i;
		}
	}
	return 0;
} /* vlNumBits */


int vlTakeBit (const vlPoint k, word16 i)
	/* evaluates to the i-th bit of k */
{
	assert (k != NULL);
	if (i >= (k[0] << 4)) {
		return 0;
	}
	return (int)((k[(i >> 4) + 1] >> (i & 15)) & 1);
} /* vlTakeBit */


void vlAdd (vlPoint u, const vlPoint v)
{
	word16 i;
	word32 t;

	assert (u != NULL);
	assert (v != NULL);
	/* clear high words of u if necessary: */
	for (i = u[0] + 1; i <= v[0]; i++) {
		u[i] = 0;
	}
    if (u[0] < v[0])
      u[0] = v[0];
	t = 0L;
	for (i = 1; i <= v[0]; i++) {
		t = t + (word32)u[i] + (word32)v[i];
		u[i] = (word16) (t & 0xFFFFUL);
		t >>= 16;
	}
    i = v[0]+1;
	while (t) {
        if ( i > u[0] )
        {
          u[i] = 0;
          u[0] += 1;
        }
        t = (word32)u[i] + 1;
		u[i] = (word16) (t & 0xFFFFUL);
        t >>= 16;
        i += 1;
	}
} /* vlAdd */


void vlSubtract (vlPoint u, const vlPoint v)
{
	/* Assume u >= v */
	word32 carry = 0, tmp;
	int i;

	assert (u != NULL);
	assert (v != NULL);
	for (i = 1; i <= v[0]; i++) {
		tmp = 0x10000UL + (word32)u[i] - (word32)v[i] - carry;
		carry = 1;
		if (tmp >= 0x10000UL) {
			tmp -= 0x10000UL;
			carry = 0;
		}
		u[i] = (word16) tmp;
	}
	if (carry) {
		while (u[i] == 0) {
			i++;
		}
		u[i]--;
	}
	while (u[u[0]] == 0 && u[0]) {
		u[0]--;
	}
} /* vlSubtract */


void vlShortLshift (vlPoint p, int n)
{
	word16 i, T=0;

	assert (p != NULL);
	if (p[0] == 0) {
		return;
	}
	/* this will only work if 0 <= n <= 16 */
	if (p[p[0]] >> (16 - n)) {
		/* check if there is enough space for an extra unit: */
		if (p[0] <= VL_UNITS + 1) {
			++p[0];
			p[p[0]] = 0; /* just make room for one more unit */
		}
	}
	for (i = p[0]; i > 1; i--) {
		p[i] = (p[i] << n) | (p[i - 1] >> (16 - n));
	}
	p[1] <<= n;
} /* vlShortLshift */


void vlShortRshift (vlPoint p, int n)
{
	word16 i;

	assert (p != NULL);
	if (p[0] == 0) {
		return;
	}
	/* this will only work if 0 <= n <= 16 */
	for (i = 1; i < p[0]; i++) {
		p[i] = (p[i + 1] << (16 - n)) | (p[i] >> n);
	}
	p[p[0]] >>= n;
	if (p[p[0]] == 0) {
		--p[0];
	}
} /* vlShortRshift */


int vlShortMultiply (vlPoint p, const vlPoint q, word16 d)
	/* sets p = q * d, where d is a single digit */
{
	int i;
	word32 t;

	assert (p != NULL);
	assert (q != NULL);
	if (q[0] > VL_UNITS) {
		puts ("ERROR: not enough room for multiplication\n");
		return -1;
	}
	if (d > 1) {
		t = 0L;
		for (i = 1; i <= q[0]; i++) {
			t += (word32)q[i] * (word32)d;
			p[i] = (word16) (t & 0xFFFFUL);
			t >>= 16;
		}
		if (t) {
			p[0] = q[0] + 1;
			p[p[0]] = (word16) (t & 0xFFFFUL);
		} else {
			p[0] = q[0];
		}
	} else if (d) { /* d == 1 */
		vlCopy (p, q);
	} else { /* d == 0 */
		p[0] = 0;
	}
	return 0;
} /* vlShortMultiply */


int vlGreater (const vlPoint p, const vlPoint q)
{
	int i;

	assert (p != NULL);
	assert (q != NULL);
	if (p[0] > q[0]) return 1;
	if (p[0] < q[0]) return 0;
	for (i = p[0]; i > 0; i--) {
		if (p[i] > q[i]) return 1;
		if (p[i] < q[i]) return 0;
	}
	return 0;
} /* vlGreater */


void vlRemainder (vlPoint u, const vlPoint v)
{
	vlPoint t;
	int shift = 0;

	assert (u != NULL);
	assert (v != NULL);
	assert (v[0] != 0);
	vlCopy( t, v );
	while ( vlGreater( u, t ) )
	{
		vlShortLshift( t, 1 );
		shift += 1;
	}
	while ( 1 )
	{
		if ( vlGreater( t, u ) )
		{
			if (shift)
			{
				vlShortRshift( t, 1 );
				shift -= 1;
			}
			else
				break;
		}
		else
			vlSubtract( u, t );
	}
} /* vlRemainder */


#if 0
/*********************************************************************/
/* >>> CAVEAT: THIS IS WORK IN PROGRESS; SKIP THIS WHOLE SECTION <<< */
/*********************************************************************/

void vlMod (vlPoint u, const vlPoint v)
	/* sets u := u mod v */
{
	int i; word16 ud, vd;
	word32 phat, qhat, v1, v2;
	static word16 d, U[2*VL_UNITS], V[VL_UNITS], t[VL_UNITS];

	if (v[0] == 1) {
		/* short division: divide u[1...u[0]] by v[1] */
		v1 = (word32)v[1]; v2 = 0L;
		for (i = u[0]; i > 0; i--) {
			v2 = ((v2 << 16) + (word32)u[i]) % v1;
		}
		u[0] = 1; u[1] = (word16)v2;
	} else if (u[0] >= v[0]) { /* nothing to do if u[0] < v[0] (u is already reduced mod v) */
		/* long division: */
		ud = u[0]; vd = v[0];
		/* normalize: */
		d = (word16) (0x10000UL / ((word32)v[vd] + 1L));
		vlShortMultiply (U, u, d); U[ud + 1] = 0;
		vlShortMultiply (V, v, d); V[vd + 1] = 0;
		v1 = (word32) V[vd];
		v2 = (word32) V[vd - 1];
		/* loop on i: */
		for (i = ud + 1; i > vd; i--) {
			/* calculate qhat as a trial quotient digit: */
			phat = ((word32) U[i] << 16) + (word32) U[i - 1];
			qhat = ((word32) U[i] == v1) ? 0xFFFFUL : phat / v1;
			while (v2 * qhat > ((phat - v1 * qhat) << 16) + (word32) U[i - 2]) {
				qhat--;
			}
			/* multiply, subtract, and check result: */
			vlSmallMultiply (t, V, (word16) qhat);
			if (t[0] < vd) {
				t[vd] = 0;
			}
			if (vlPartialSub (U + i - vd, t, vd + 1)) {
				qhat--;
				vlPartialAdd (U + i - vd, V, vd + 1);
			}
		}
		/* unnormalize to evaluate the remainder (divide U[1...vd] by d): */
		v1 = 0L; v2 = (word32)d;
		for (i = vd; i > 0; i--) {
			v1 = (v1 << 16) + (word32)U[i];
			u[i] = (word16) (v1 / v2);
			v1 %= v2;
		}
		u[0] = vd;
	}
} /* vlMod */
#endif /* OMIT */


void vlMulMod (vlPoint u, const vlPoint v, const vlPoint w, const vlPoint m)
{
	vlPoint t;
	int i,j;
	
	assert (u != NULL);
	assert (v != NULL);
	assert (w != NULL);
	assert (m != NULL);
	assert (m[0] != 0);
	vlClear( u );
	vlCopy( t, w );
	for (i=1;i<=v[0];i+=1)
	{
		for (j=0;j<16;j+=1)
		{
			if ( v[i] & (1u<<j) )
			{
				vlAdd( u, t );
				vlRemainder( u, m );
			}
			vlShortLshift( t, 1 );
			vlRemainder( t, m );
		}
	}
} /* vlMulMod */


#ifdef SELF_TESTING

int vlSelfTest (int test_count)
{
	int i, tfail = 0, sfail = 0, afail = 0;
	vlPoint m, p, q;
	clock_t elapsed;

	srand ((unsigned)(time(NULL) % 65521U));
	printf ("Executing %d vlong self tests...", test_count);
	elapsed = -clock ();
	for (i = 0; i < test_count; i++) {
		vlRandom (m);
		/* scalar triplication test: 3*m = m + m + m */
		vlShortMultiply (p, m, 3);
		vlClear (q); vlAdd (q, m); vlAdd (q, m); vlAdd (q, m);
		if (!vlEqual (p, q)) {
			tfail++;
			/* printf ("Triplication test #%d failed!\n", i); */
		}
		/* shift test: (m << k) >> k = m */
		vlCopy (p, m);
		vlShortLshift (p, i%17);
		vlShortRshift (p, i%17);
		if (!vlEqual (p, m)) {
			sfail++;
			/* printf ("Shift test #%d failed!\n", i); */
		}
		/* addition vs. shift test: m + m = m << 1 */
		vlCopy (p, m); vlAdd (p, p);
		vlCopy (q, m); vlShortLshift (q, 1);
		if (!vlEqual (p, q)) {
			afail++;
			/* printf ("Addition test #%d failed!\n", i); */
		}
      
	}
	elapsed += clock ();
	printf (" done, elapsed time = %.1f s.\n", (float)elapsed/CLOCKS_PER_SEC);
	if (tfail) printf ("---> %d triplications failed <---\n", tfail);
	if (sfail) printf ("---> %d shifts failed <---\n", sfail);
	if (afail) printf ("---> %d additions failed <---\n", afail);
	return tfail || sfail || afail;
} /* vlSelfTest */

#endif /* ?SELF_TESTING */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品中文字幕乱码三区| 成人综合婷婷国产精品久久蜜臀 | 欧美精品一区二区高清在线观看| 欧美成人福利视频| 亚洲精品视频在线观看免费| 狠狠色综合播放一区二区| 欧美日韩一区在线| 亚洲男人的天堂av| 成人听书哪个软件好| 欧美精品一区二区精品网| 亚洲国产精品久久一线不卡| 99久久精品一区| 国产日韩欧美麻豆| 久久国产精品99精品国产| 欧美日韩三级一区| 亚洲一区二区美女| 色94色欧美sute亚洲线路一ni| 欧美国产综合色视频| 韩国毛片一区二区三区| 日韩亚洲欧美成人一区| 日韩av电影一区| 欧美亚洲动漫精品| 玉足女爽爽91| 色偷偷久久人人79超碰人人澡| 国产精品久久久久aaaa樱花| 国产 欧美在线| 久久精品人人做人人爽97| 国产一区二区三区日韩| 亚洲精品一线二线三线无人区| 日本不卡视频在线| 日韩午夜电影在线观看| 蜜桃一区二区三区四区| 欧美xxx久久| 国产一区二区三区视频在线播放| 精品国产91亚洲一区二区三区婷婷| 免费欧美日韩国产三级电影| 欧美草草影院在线视频| 国产综合久久久久久久久久久久| 精品91自产拍在线观看一区| 国内精品免费**视频| 久久久综合九色合综国产精品| 激情成人午夜视频| 一区二区三区在线免费播放| 在线观看国产一区二区| 亚洲18女电影在线观看| 日韩一级二级三级精品视频| 国产麻豆9l精品三级站| 国产精品嫩草影院com| 91丨porny丨户外露出| 亚洲综合自拍偷拍| 91精品国产乱| 国产一区二区三区在线观看免费视频| 国产日韩精品一区二区三区| 91免费观看视频| 日韩和欧美一区二区三区| 精品精品国产高清a毛片牛牛| 大桥未久av一区二区三区中文| ...xxx性欧美| 这里只有精品电影| 成人福利视频在线| 视频一区在线视频| 国产欧美一区二区精品性色| 在线视频一区二区三区| 久久99精品久久久久婷婷| 亚洲欧洲av在线| 欧美一级欧美一级在线播放| 国产成人免费网站| 五月天欧美精品| 国产区在线观看成人精品| 欧美三片在线视频观看| 国产美女在线观看一区| 亚洲综合无码一区二区| 久久久亚洲精华液精华液精华液| 日本二三区不卡| 国产一区二区三区精品视频 | 精品国产一区二区三区av性色| 成人精品视频网站| 99久久精品国产毛片| 麻豆91小视频| 一区二区在线观看视频| 国产欧美视频一区二区| 777a∨成人精品桃花网| 99久久亚洲一区二区三区青草| 蜜臀av性久久久久蜜臀aⅴ | 色婷婷国产精品综合在线观看| 久久99精品一区二区三区 | 国产主播一区二区| 亚洲影院理伦片| 国产精品欧美一区二区三区| 日韩免费视频一区| 欧美日本免费一区二区三区| 国产91对白在线观看九色| 久久精品国产在热久久| 亚洲电影激情视频网站| 亚洲欧美视频在线观看视频| 亚洲h在线观看| 亚洲三级久久久| 国产精品丝袜久久久久久app| 精品国产乱码久久久久久久久| 在线电影院国产精品| 欧美午夜视频网站| 色婷婷亚洲一区二区三区| 99在线视频精品| 成人午夜视频免费看| 国产不卡在线一区| 国产一区二区网址| 国产老妇另类xxxxx| 国产一区二区女| 韩日av一区二区| 国产一区二区三区在线观看免费| 卡一卡二国产精品| 精品制服美女丁香| 国产最新精品免费| 精品一区二区在线免费观看| 老司机精品视频线观看86| 日韩高清不卡一区二区三区| 日本午夜精品视频在线观看| 日韩av一区二区三区四区| 免费欧美在线视频| 激情综合亚洲精品| 国产精品一级在线| 成人午夜免费视频| 色婷婷av一区二区三区软件| 欧美在线|欧美| 在线播放视频一区| 精品日韩一区二区| 欧美韩日一区二区三区| 亚洲欧美另类综合偷拍| 一区二区成人在线视频| 日韩成人精品在线观看| 久久99精品一区二区三区三区| 国产成人啪免费观看软件| 99精品国产99久久久久久白柏| 91极品视觉盛宴| 欧美一卡二卡在线观看| 欧美精品一区二| 国产精品久久影院| 亚洲成a人v欧美综合天堂| 蜜桃视频在线观看一区| 国产91精品入口| 欧美性高清videossexo| 亚洲精品一线二线三线| 亚洲人成网站在线| 麻豆精品在线观看| 成人午夜精品一区二区三区| 在线观看av一区| 久久久www免费人成精品| 日韩理论片中文av| 蜜臀久久99精品久久久久宅男| 国产99久久久国产精品潘金| 欧美日韩亚洲综合一区二区三区| 精品国产一二三| 亚洲精品国产一区二区三区四区在线 | 三级久久三级久久| 大尺度一区二区| 欧美军同video69gay| 国产精品无码永久免费888| 亚洲国产日韩a在线播放| 国产一区二区伦理片| 欧洲精品在线观看| 美女视频黄a大片欧美| 粉嫩欧美一区二区三区高清影视| 欧美日韩一区二区在线视频| 久久精品这里都是精品| 视频一区国产视频| 91麻豆成人久久精品二区三区| 欧美电影免费观看高清完整版在线 | 91免费视频网址| 久久综合av免费| 婷婷国产在线综合| 91视视频在线观看入口直接观看www | 国产成人在线电影| 欧美一区二区精品在线| 亚洲免费视频成人| 国产不卡免费视频| 日韩视频国产视频| 天天综合网天天综合色| 色香蕉成人二区免费| 亚洲欧洲精品天堂一级| 国产大陆精品国产| 久久亚洲私人国产精品va媚药| 日韩成人av影视| 欧美午夜精品一区| 亚洲精品视频免费看| 9久草视频在线视频精品| 久久亚洲精品小早川怜子| 免费高清在线视频一区·| 国产欧美一区二区精品秋霞影院| 日本伊人色综合网| 欧美精品18+| 午夜一区二区三区视频| 欧美日韩亚洲另类| 亚洲精品视频自拍| 91成人看片片| 一个色综合网站| 欧美亚州韩日在线看免费版国语版| 亚洲人成伊人成综合网小说| 99re成人在线| 一级特黄大欧美久久久| 欧美三级电影网站|