static int Hash_DBRG_Reseed(RNG* rng, byte* entropy, word32 entropySz) { byte seed[DBRG_SEED_LEN]; Hash_df(rng, seed, sizeof(seed), dbrgInitV, rng->V, sizeof(rng->V), entropy, entropySz, NULL, 0); XMEMCPY(rng->V, seed, sizeof(rng->V)); XMEMSET(seed, 0, sizeof(seed)); Hash_df(rng, rng->C, sizeof(rng->C), dbrgInitC, rng->V, sizeof(rng->V), NULL, 0, NULL, 0); rng->reseed_ctr = 1; return 0; }
/* Returns: DRBG_SUCCESS or DRBG_FAILURE */ static int Hash_DRBG_Reseed(RNG* rng, const byte* entropy, word32 entropySz) { byte seed[DRBG_SEED_LEN]; if (Hash_df(rng, seed, sizeof(seed), drbgReseed, rng->V, sizeof(rng->V), entropy, entropySz) != DRBG_SUCCESS) { return DRBG_FAILURE; } XMEMCPY(rng->V, seed, sizeof(rng->V)); XMEMSET(seed, 0, sizeof(seed)); if (Hash_df(rng, rng->C, sizeof(rng->C), drbgInitC, rng->V, sizeof(rng->V), NULL, 0) != DRBG_SUCCESS) { return DRBG_FAILURE; } rng->reseedCtr = 1; return DRBG_SUCCESS; }
/* Returns: DRBG_SUCCESS or DRBG_FAILURE */ static int Hash_DRBG_Reseed(DRBG* drbg, const byte* entropy, word32 entropySz) { byte seed[DRBG_SEED_LEN]; if (Hash_df(drbg, seed, sizeof(seed), drbgReseed, drbg->V, sizeof(drbg->V), entropy, entropySz) != DRBG_SUCCESS) { return DRBG_FAILURE; } XMEMCPY(drbg->V, seed, sizeof(drbg->V)); ForceZero(seed, sizeof(seed)); if (Hash_df(drbg, drbg->C, sizeof(drbg->C), drbgInitC, drbg->V, sizeof(drbg->V), NULL, 0) != DRBG_SUCCESS) { return DRBG_FAILURE; } drbg->reseedCtr = 1; drbg->lastBlock = 0; drbg->matchCount = 0; return DRBG_SUCCESS; }