static int testCreateFree() { CCStatus status; CCBigNumRef stress[STRESSSIZE]; for(size_t i=0; i<STRESSSIZE; i++) stress[i] = NULL; byteBuffer bb = hexStringToBytes("0102030405060708091011121314151617181920"); for(int i=0; i<100; i++) { for(int j=0; j<100; j++) { CCBigNumRef r = CCBigNumCreateRandom(&status, 31, 31, 0); ok(status == kCCSuccess, "Created Random Number"); size_t ri = CCBigNumGetI(&status, r); ok(status == kCCSuccess, "translated to int"); ri %= STRESSSIZE; if(stress[ri] == NULL) { int sel = ri % 3; switch(sel) { case 0: /* printf("(%lu) BigNum\n", ri); */ stress[ri] = CCCreateBigNum(&status); break; case 1: /* printf("(%lu) FromHex\n", ri); */ stress[ri] = CCBigNumFromHexString(&status, "0003"); break; case 2: /* printf("(%lu) FromData\n", ri); */ stress[ri] = CCBigNumFromData(&status, bb->bytes, bb->len); break; } ok(status == kCCSuccess, "BigNum Created"); } else { /* printf("(%lu) Freeing\n", ri); */ CCBigNumClear(stress[ri]); CCBigNumFree(stress[ri]); stress[ri] = NULL; } CCBigNumFree(r); } } return 0; }
static int testData() { CCStatus status; char *hexstring = "1002030405060708090021222324252627282920"; byteBuffer bb = hexStringToBytes(hexstring); CCBigNumRef num1 = CCBigNumFromData(&status, bb->bytes, bb->len); char *output; ok(status == 0, "BigNum Created"); output = CCBigNumToHexString(&status, num1); ok(status == 0, "Value retrieved"); ok(strcmp(output, hexstring) == 0, "strings are equal"); if(strcmp(output, hexstring)) { printf("output: %s\n", output); printf("input : %s\n", hexstring); } free(output); byteBuffer outbuf = mallocByteBuffer(64); outbuf->len = CCBigNumToData(&status, num1, outbuf->bytes); ok(status == 0, "Value retrieved 2"); ok(bytesAreEqual(bb, outbuf), "input == output"); free(bb); free(outbuf); CCBigNumFree(num1); return 0; }
CCBigNum::CCBigNum(const uint8_t* data, size_t size) { CCStatus status = kCCSuccess; m_number = CCBigNumFromData(&status, data, size); RELEASE_ASSERT(!status); }