int noncecnt;
} TEST_ENT;
-static size_t test_entropy(DRBG_CTX *dctx, unsigned char *out,
+static size_t test_entropy(DRBG_CTX *dctx, unsigned char **pout,
int entropy, size_t min_len, size_t max_len)
{
TEST_ENT *t = FIPS_drbg_get_app_data(dctx);
- memcpy(out, t->ent, t->entlen);
+ *pout = (unsigned char *)t->ent;
t->entcnt++;
return t->entlen;
}
-static size_t test_nonce(DRBG_CTX *dctx, unsigned char *out,
+static size_t test_nonce(DRBG_CTX *dctx, unsigned char **pout,
int entropy, size_t min_len, size_t max_len)
{
TEST_ENT *t = FIPS_drbg_get_app_data(dctx);
- memcpy(out, t->nonce, t->noncelen);
+ *pout = (unsigned char *)t->nonce;
t->noncecnt++;
return t->noncelen;
}
unsigned char randout[1024];
if (!FIPS_drbg_init(dctx, td->nid, td->flags))
return 0;
- if (!FIPS_drbg_set_callbacks(dctx, test_entropy, test_nonce))
+ if (!FIPS_drbg_set_callbacks(dctx, test_entropy, 0, test_nonce, 0))
return 0;
FIPS_drbg_set_app_data(dctx, &t);
rv = 1;
err:
+ if (rv == 0)
+ FIPSerr(FIPS_F_FIPS_DRBG_SINGLE_KAT, FIPS_R_SELFTEST_FAILED);
FIPS_drbg_uninstantiate(dctx);
return rv;
if (!FIPS_drbg_init(dctx, td->nid, td->flags))
goto err;
- if (!FIPS_drbg_set_callbacks(dctx, test_entropy, test_nonce))
+ if (!FIPS_drbg_set_callbacks(dctx, test_entropy, 0, test_nonce, 0))
goto err;
FIPS_drbg_set_app_data(dctx, &t);
/* Instantiate with valid data. NB: errors now reported again */
if (!FIPS_drbg_init(dctx, td->nid, td->flags))
goto err;
- if (!FIPS_drbg_set_callbacks(dctx, test_entropy, test_nonce))
+ if (!FIPS_drbg_set_callbacks(dctx, test_entropy, 0, test_nonce, 0))
goto err;
FIPS_drbg_set_app_data(dctx, &t);
if (!FIPS_drbg_init(dctx, td->nid, td->flags))
goto err;
- if (!FIPS_drbg_set_callbacks(dctx, test_entropy, test_nonce))
+ if (!FIPS_drbg_set_callbacks(dctx, test_entropy, 0, test_nonce, 0))
goto err;
FIPS_drbg_set_app_data(dctx, &t);