xref: /xnu-10063.121.3/EXTERNAL_HEADERS/corecrypto/ccdrbg_impl.h (revision 2c2f96dc2b9a4408a43d3150ae9c105355ca3daa) !
1 /* Copyright (c) (2012,2015,2016,2019-2022) Apple Inc. All rights reserved.
2  *
3  * corecrypto is licensed under Apple Inc.’s Internal Use License Agreement (which
4  * is contained in the License.txt file distributed with corecrypto) and only to
5  * people who accept that license. IMPORTANT:  Any license rights granted to you by
6  * Apple Inc. (if any) are limited to internal use within your organization only on
7  * devices and computers you own or control, for the sole purpose of verifying the
8  * security characteristics and correct functioning of the Apple Software.  You may
9  * not, directly or indirectly, redistribute the Apple Software or any portions thereof.
10  */
11 
12 #ifndef _CORECRYPTO_CCDRBG_IMPL_H_
13 #define _CORECRYPTO_CCDRBG_IMPL_H_
14 
15 #include <corecrypto/cc.h>
16 
17 /* opaque drbg structure */
18 struct ccdrbg_state;
19 
20 struct ccdrbg_info {
21     /*! Size of the DRBG state in bytes **/
22     size_t size;
23 
24     /*! Instantiate the DRBG
25      @param drbg       The DRBG state
26      @param entropylen Length of entropy
27      @param entropy    Entropy bytes
28      @param inlen      Length of additional input
29      @param in         Additional input bytes
30      @return 0 if successful
31      */
32     int (*CC_SPTR(ccdrbg_info, init))(const struct ccdrbg_info *info, struct ccdrbg_state *drbg,
33                 size_t entropyLength, const void* entropy,
34                 size_t nonceLength, const void* nonce,
35                 size_t psLength, const void* ps);
36 
37     /*! Add entropy to the DRBG
38      @param drbg       The DRBG state
39      @param entropylen Length of entropy
40      @param entropy    Entropy bytes
41      @param inlen      Length of additional input
42      @param in         Additional input bytes
43      @return 0 if successful
44      */
45     int (*CC_SPTR(ccdrbg_info, reseed))(struct ccdrbg_state *drbg,
46                   size_t entropylen, const void *entropy,
47                   size_t inlen, const void *in);
48 
49     /*! Read from the DRBG in a FIPS Testing compliant manor
50      @param drbg    The DRBG state to read from
51      @param out     [out] Where to store the data
52      @param outlen  Length of data desired (octets)
53      @param inlen   Length of additional input
54      @param in      Additional input bytes
55      @return 0 if successfull
56      */
57     int (*CC_SPTR(ccdrbg_info, generate))(struct ccdrbg_state *drbg,
58                     size_t outlen, void *out,
59                     size_t inlen, const void *in);
60 
61     /*! Terminate a DRBG state
62      @param drbg   The DRBG state to terminate
63      */
64     void (*CC_SPTR(ccdrbg_info, done))(struct ccdrbg_state *drbg);
65 
66     /** private parameters */
67     const void *custom;
68 
69     /*! Whether the DRBG requires a reseed to continue generation
70      @param drbg    The DRBG state
71      @return true if the DRBG requires reseed; false otherwise
72      */
73     bool (*CC_SPTR(ccdrbg_info, must_reseed))(const struct ccdrbg_state *drbg);
74 };
75 
76 
77 
78 #endif // _CORECRYPTO_CCDRBG_IMPL_H_
79