typedef struct drbg_ctx_st DRBG_CTX;
+/* Flag for CTR mode only: use derivation function ctr_df */
+#define DRBG_FLAG_CTR_USE_DF 0x1
+/* PRNG is in test state */
+#define DRBG_FLAG_TEST 0x2
+
DRBG_CTX *FIPS_drbg_new(int type, unsigned int flags);
-int FIPS_drbg_instantiate(DRBG_CTX *dctx, int strength,
+int FIPS_drbg_init(DRBG_CTX *dctx, int type, unsigned int flags);
+int FIPS_drbg_instantiate(DRBG_CTX *dctx,
const unsigned char *pers, size_t perslen);
int FIPS_drbg_reseed(DRBG_CTX *dctx, const unsigned char *adin, size_t adinlen);
int FIPS_drbg_generate(DRBG_CTX *dctx, unsigned char *out, size_t outlen,
- int prediction_resistance,
+ int strength, int prediction_resistance,
const unsigned char *adin, size_t adinlen);
+int FIPS_drbg_uninstantiate(DRBG_CTX *dctx);
+void FIPS_drbg_free(DRBG_CTX *dctx);
+
+int FIPS_drbg_set_callbacks(DRBG_CTX *dctx,
+ size_t (*get_entropy)(DRBG_CTX *ctx, unsigned char **pout,
+ int entropy, size_t min_len, size_t max_len),
+ void (*cleanup_entropy)(DRBG_CTX *ctx, unsigned char *out, size_t olen),
+ size_t (*get_nonce)(DRBG_CTX *ctx, unsigned char **pout,
+ int entropy, size_t min_len, size_t max_len),
+ void (*cleanup_nonce)(DRBG_CTX *ctx, unsigned char *out, size_t olen));
+
+void *FIPS_drbg_get_app_data(DRBG_CTX *ctx);
+void FIPS_drbg_set_app_data(DRBG_CTX *ctx, void *app_data);
+size_t FIPS_drbg_get_blocklength(DRBG_CTX *dctx);
+int FIPS_drbg_get_strength(DRBG_CTX *dctx);
+
#ifdef __cplusplus
}
#endif