Blame include/openssl/rand_drbg.h

Packit c4476c
/*
Packit c4476c
 * Copyright 2017-2018 The OpenSSL Project Authors. All Rights Reserved.
Packit c4476c
 *
Packit c4476c
 * Licensed under the OpenSSL license (the "License").  You may not use
Packit c4476c
 * this file except in compliance with the License.  You can obtain a copy
Packit c4476c
 * in the file LICENSE in the source distribution or at
Packit c4476c
 * https://www.openssl.org/source/license.html
Packit c4476c
 */
Packit c4476c
Packit c4476c
#ifndef HEADER_DRBG_RAND_H
Packit c4476c
# define HEADER_DRBG_RAND_H
Packit c4476c
Packit c4476c
# include <time.h>
Packit c4476c
# include <openssl/ossl_typ.h>
Packit c4476c
# include <openssl/obj_mac.h>
Packit c4476c
Packit c4476c
/*
Packit c4476c
 * RAND_DRBG  flags
Packit c4476c
 *
Packit c4476c
 * Note: if new flags are added, the constant `rand_drbg_used_flags`
Packit c4476c
 *       in drbg_lib.c needs to be updated accordingly.
Packit c4476c
 */
Packit c4476c
Packit c4476c
/* In CTR mode, disable derivation function ctr_df */
Packit c4476c
# define RAND_DRBG_FLAG_CTR_NO_DF            0x1
Packit c4476c
Packit c4476c
Packit c4476c
# if OPENSSL_API_COMPAT < 0x10200000L
Packit c4476c
/* This #define was replaced by an internal constant and should not be used. */
Packit c4476c
#  define RAND_DRBG_USED_FLAGS  (RAND_DRBG_FLAG_CTR_NO_DF)
Packit c4476c
# endif
Packit c4476c
Packit c4476c
/*
Packit c4476c
 * Default security strength (in the sense of [NIST SP 800-90Ar1])
Packit c4476c
 *
Packit c4476c
 * NIST SP 800-90Ar1 supports the strength of the DRBG being smaller than that
Packit c4476c
 * of the cipher by collecting less entropy. The current DRBG implementation
Packit c4476c
 * does not take RAND_DRBG_STRENGTH into account and sets the strength of the
Packit c4476c
 * DRBG to that of the cipher.
Packit c4476c
 *
Packit c4476c
 * RAND_DRBG_STRENGTH is currently only used for the legacy RAND
Packit c4476c
 * implementation.
Packit c4476c
 *
Packit c4476c
 * Currently supported ciphers are: NID_aes_128_ctr, NID_aes_192_ctr and
Packit c4476c
 * NID_aes_256_ctr
Packit c4476c
 */
Packit c4476c
# define RAND_DRBG_STRENGTH             256
Packit c4476c
/* Default drbg type */
Packit c4476c
# define RAND_DRBG_TYPE                 NID_aes_256_ctr
Packit c4476c
/* Default drbg flags */
Packit c4476c
# define RAND_DRBG_FLAGS                0
Packit c4476c
Packit c4476c
Packit c4476c
# ifdef  __cplusplus
Packit c4476c
extern "C" {
Packit c4476c
# endif
Packit c4476c
Packit c4476c
/*
Packit c4476c
 * Object lifetime functions.
Packit c4476c
 */
Packit c4476c
RAND_DRBG *RAND_DRBG_new(int type, unsigned int flags, RAND_DRBG *parent);
Packit c4476c
RAND_DRBG *RAND_DRBG_secure_new(int type, unsigned int flags, RAND_DRBG *parent);
Packit c4476c
int RAND_DRBG_set(RAND_DRBG *drbg, int type, unsigned int flags);
Packit c4476c
int RAND_DRBG_set_defaults(int type, unsigned int flags);
Packit c4476c
int RAND_DRBG_instantiate(RAND_DRBG *drbg,
Packit c4476c
                          const unsigned char *pers, size_t perslen);
Packit c4476c
int RAND_DRBG_uninstantiate(RAND_DRBG *drbg);
Packit c4476c
void RAND_DRBG_free(RAND_DRBG *drbg);
Packit c4476c
Packit c4476c
/*
Packit c4476c
 * Object "use" functions.
Packit c4476c
 */
Packit c4476c
int RAND_DRBG_reseed(RAND_DRBG *drbg,
Packit c4476c
                     const unsigned char *adin, size_t adinlen,
Packit c4476c
                     int prediction_resistance);
Packit c4476c
int RAND_DRBG_generate(RAND_DRBG *drbg, unsigned char *out, size_t outlen,
Packit c4476c
                       int prediction_resistance,
Packit c4476c
                       const unsigned char *adin, size_t adinlen);
Packit c4476c
int RAND_DRBG_bytes(RAND_DRBG *drbg, unsigned char *out, size_t outlen);
Packit c4476c
Packit c4476c
int RAND_DRBG_set_reseed_interval(RAND_DRBG *drbg, unsigned int interval);
Packit c4476c
int RAND_DRBG_set_reseed_time_interval(RAND_DRBG *drbg, time_t interval);
Packit c4476c
Packit c4476c
int RAND_DRBG_set_reseed_defaults(
Packit c4476c
                                  unsigned int master_reseed_interval,
Packit c4476c
                                  unsigned int slave_reseed_interval,
Packit c4476c
                                  time_t master_reseed_time_interval,
Packit c4476c
                                  time_t slave_reseed_time_interval
Packit c4476c
                                  );
Packit c4476c
Packit c4476c
RAND_DRBG *RAND_DRBG_get0_master(void);
Packit c4476c
RAND_DRBG *RAND_DRBG_get0_public(void);
Packit c4476c
RAND_DRBG *RAND_DRBG_get0_private(void);
Packit c4476c
Packit c4476c
/*
Packit c4476c
 * EXDATA
Packit c4476c
 */
Packit c4476c
# define RAND_DRBG_get_ex_new_index(l, p, newf, dupf, freef) \
Packit c4476c
    CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_DRBG, l, p, newf, dupf, freef)
Packit c4476c
int RAND_DRBG_set_ex_data(RAND_DRBG *drbg, int idx, void *arg);
Packit c4476c
void *RAND_DRBG_get_ex_data(const RAND_DRBG *drbg, int idx);
Packit c4476c
Packit c4476c
/*
Packit c4476c
 * Callback function typedefs
Packit c4476c
 */
Packit c4476c
typedef size_t (*RAND_DRBG_get_entropy_fn)(RAND_DRBG *drbg,
Packit c4476c
                                           unsigned char **pout,
Packit c4476c
                                           int entropy, size_t min_len,
Packit c4476c
                                           size_t max_len,
Packit c4476c
                                           int prediction_resistance);
Packit c4476c
typedef void (*RAND_DRBG_cleanup_entropy_fn)(RAND_DRBG *ctx,
Packit c4476c
                                             unsigned char *out, size_t outlen);
Packit c4476c
typedef size_t (*RAND_DRBG_get_nonce_fn)(RAND_DRBG *drbg, unsigned char **pout,
Packit c4476c
                                         int entropy, size_t min_len,
Packit c4476c
                                         size_t max_len);
Packit c4476c
typedef void (*RAND_DRBG_cleanup_nonce_fn)(RAND_DRBG *drbg,
Packit c4476c
                                           unsigned char *out, size_t outlen);
Packit c4476c
Packit c4476c
int RAND_DRBG_set_callbacks(RAND_DRBG *drbg,
Packit c4476c
                            RAND_DRBG_get_entropy_fn get_entropy,
Packit c4476c
                            RAND_DRBG_cleanup_entropy_fn cleanup_entropy,
Packit c4476c
                            RAND_DRBG_get_nonce_fn get_nonce,
Packit c4476c
                            RAND_DRBG_cleanup_nonce_fn cleanup_nonce);
Packit c4476c
Packit c4476c
Packit c4476c
# ifdef  __cplusplus
Packit c4476c
}
Packit c4476c
# endif
Packit c4476c
Packit c4476c
#endif