+ int r;
+ size_t n;
+ unsigned char *p;
+ CRNG_TEST_GLOBAL *crngt_glob
+ = openssl_ctx_get_data(ctx, OPENSSL_CTX_RAND_CRNGT_INDEX,
+ &rand_crng_ossl_ctx_method);
+
+ if (crngt_glob == NULL)
+ return 0;
+
+ n = rand_pool_acquire_entropy(crngt_glob->crngt_pool);
+ if (n >= CRNGT_BUFSIZ) {
+ p = rand_pool_detach(crngt_glob->crngt_pool);
+ r = EVP_Digest(p, CRNGT_BUFSIZ, md, md_size, EVP_sha256(), NULL);
+ if (r != 0)
+ memcpy(buf, p, CRNGT_BUFSIZ);
+ rand_pool_reattach(crngt_glob->crngt_pool, p);
+ return r;
+ }
+ return 0;