struct ccrng_state * ccDevRandomGetRngState(void) { cc_globals_t globals = _cc_globals(); dispatch_once(&globals->dev_random_init, ^{ globals->dev_random.rngtype = rng_devrandom; globals->dev_random.state.devrandom.devrandom = (struct ccrng_system_state *)CC_XMALLOC(sizeof(struct ccrng_system_state)); globals->dev_random.status=ccrng_system_init(globals->dev_random.state.devrandom.devrandom); if (globals->dev_random.status<0) { CC_XFREE(globals->dev_random.state.devrandom.devrandom,sizeof(struct ccrng_system_state)); globals->dev_random.state.devrandom.devrandom=NULL; } });
static double perf_ccrng_system_oneshot(unsigned long loops, size_t nbytes) { struct ccrng_system_state system_ctx; CC_UNUSED int status; uint8_t results[nbytes]; double time; perf_start(); do { status = ccrng_system_init(&system_ctx); cc_assert(status==0); status = ccrng_generate((struct ccrng_state *)&system_ctx, nbytes, results); cc_assert(status==0); ccrng_system_done(&system_ctx); } while (--loops != 0); time=perf_time(); return time; }
static int ECDSA_POST() { // Pair wise consistency test size_t keySize = 256; int iResult = 0; struct ccrng_system_state system_rng; struct ccrng_state *rng = (struct ccrng_state *)&system_rng; ccrng_system_init(&system_rng); ccec_const_cp_t cp = ccec_get_cp(keySize); ccec_full_ctx_decl_cp(cp, full_ec_key); size_t signedDataLen = ccec_sign_max_size(cp); uint8_t signedData[signedDataLen]; cc_zero(signedDataLen, signedData); iResult = ccec_generate_key_fips(cp, rng, full_ec_key); ccec_full_ctx_clear_cp(cp, full_ec_key); ccrng_system_done(&system_rng); return iResult; }
static int tests_rng(const char *seed) { byteBuffer entropyBuffer; int status=-1; // Allocation error; if (seed==NULL || strlen(seed)<=0) { // If the seed is not in the argument, we generate one struct ccrng_system_state system_rng; size_t entropy_size=16; // Default size of the seed cc_require((entropyBuffer=mallocByteBuffer(entropy_size))!=NULL,errOut); cc_require((status=ccrng_system_init(&system_rng))==0, errOut); cc_require((status=ccrng_generate((struct ccrng_state *)&system_rng, entropyBuffer->len, entropyBuffer->bytes))==0, errOut); ccrng_system_done(&system_rng); cc_print("random seed value:",entropyBuffer->len,entropyBuffer->bytes); } else { // Otherwise, take the value from the arguments entropyBuffer = hexStringToBytes(seed); cc_print("input seed value:",entropyBuffer->len,entropyBuffer->bytes); } cc_require((status=ccrng_test_init(&test_rng, entropyBuffer->len,entropyBuffer->bytes))==0, errOut); return status; errOut: printf("Error initializing test rng: %d\n",status); return -1; }
static void register_algs(void) { ccrng_seckey = (struct ccrng_state *)&ccrng_system_state_seckey; ccrng_system_init(&ccrng_system_state_seckey); }