bn_copy(char* bn1, char* bn2) { int i = 0; strcpy(bn1, bn2); i = bn_length(bn1); while(i++<=DIGITS) *(bn1+i) = 0; }
OutputBigNum(char* bn) { int i = bn_length(bn) - 1; while(i+1) { putchar('0'+*(bn+i)-1); i--; } }
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; }
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; }