Beispiel #1
0
bn_copy(char* bn1, char* bn2)
{
	int i = 0;
	strcpy(bn1, bn2);
	i = bn_length(bn1);
	while(i++<=DIGITS)
		*(bn1+i) = 0;
}
Beispiel #2
0
OutputBigNum(char* bn)
{
	int i = bn_length(bn) - 1;
	while(i+1)
	{
		putchar('0'+*(bn+i)-1);
		i--;
	}
}
Beispiel #3
0
int kx_get_sk(kx_t *kx, unsigned char *out, unsigned int n)
{
    if (n >= bn_length(&kx->Q))
        return FAILURE;

    if (bn_modexp(&kx->S, &kx->b, &kx->a, &kx->P) != SUCCESS)
        return FAILURE;

    bn_to_bytes(&kx->S, out, n / 8);
    return SUCCESS;
}
Beispiel #4
0
main(int argc, char** argv)
{
	int null = (char *)0x0;
	char* bigCharA = null;
	char* bigCharB = null;
	char* bigCharC = null;
	char* bigCharD = null;

	int count = 0;
	int term = 1000;

	int i;

	bigCharA = (char *)CreateBigNum();
	bigCharB = (char *)CreateBigNum();
	bigCharC = (char *)CreateBigNum();
	bigCharD = (char *)CreateBigNum();

	for (i = 0; i < DIGITS; ++i) {
		bigCharA[i] = 0;
		bigCharB[i] = 0;
		bigCharC[i] = 0;
		bigCharD[i] = 0;
	}

	if(!bigCharA || !bigCharB || !bigCharC || !bigCharD)
	{
		printf("Could not allocate memory !\n");
		return 0;
	}

	/* ------------------------------------------------- */

	*bigCharA = 2;	/* one */
	*bigCharB = 1;	/* zero */

	while(term--)
	{
		zerobuf(bigCharC);
		*bigCharC = 1;	/* zero */

		/* c = 2*a+b */
		AddBigNums(bigCharC, bigCharA);			
		AddBigNums(bigCharC, bigCharA);			
		AddBigNums(bigCharC, bigCharB);

		/* print c+a, "/" */
		zerobuf(bigCharD);
		*bigCharD = 1;		/* zero */
		AddBigNums(bigCharD, bigCharC);
		AddBigNums(bigCharD, bigCharA);
		if (VERBOSE) {
			OutputBigNum(bigCharD);
			printf(" / ");
		}

		/* print c */
		if (VERBOSE)
			OutputBigNum(bigCharC);

		/* count, newline */
		if(bn_length(bigCharD)>bn_length(bigCharC))
		{
			++count;
			if (VERBOSE)
				printf(" !! ");
		}

		if (VERBOSE)
			printf("\n");

		/* b = a */
		bn_copy(bigCharB, bigCharA);

		/* a = c */
		bn_copy(bigCharA, bigCharC);		
	}

	/* ------------------------------------------------- */

	/*
	 * XXX: the destroy() stuff segfaults on the wannabe
	 * compiler. not sure why. all it does is call free().
	 * anyway a modern unix/windows nt/donald operating system
	 * will automatically get rid of that stuff on exit.
	 */

	/*
	DestroyBigNum(bigCharA);
	DestroyBigNum(bigCharB);
	DestroyBigNum(bigCharC);
	DestroyBigNum(bigCharD);
	*/

	printf("%d\n", count);
	return 0;
}