1/* 2 * ccdrbg_impl.h 3 * corecrypto 4 * 5 * Created by James Murphy on 12/9/11. 6 * Copyright (c) 2011 Apple Inc. All rights reserved. 7 * 8 */ 9 10#ifndef _CORECRYPTO_CCDRBG_IMPL_H_ 11#define _CORECRYPTO_CCDRBG_IMPL_H_ 12 13/* opaque drbg structure */ 14struct ccdrbg_state; 15 16struct ccdrbg_info { 17 /** Size of the DRBG state in bytes **/ 18 size_t size; 19 20 /** Instantiate the PRNG 21 @param prng The PRNG state 22 @param entropylen Length of entropy 23 @param entropy Entropy bytes 24 @param inlen Length of additional input 25 @param in Additional input bytes 26 @return 0 if successful 27 */ 28 int (*init)(const struct ccdrbg_info *info, struct ccdrbg_state *drbg, 29 unsigned long entropyLength, const void* entropy, 30 unsigned long nonceLength, const void* nonce, 31 unsigned long psLength, const void* ps); 32 33 /** Add entropy to the PRNG 34 @param prng The PRNG state 35 @param entropylen Length of entropy 36 @param entropy Entropy bytes 37 @param inlen Length of additional input 38 @param in Additional input bytes 39 @return 0 if successful 40 */ 41 int (*reseed)(struct ccdrbg_state *prng, 42 unsigned long entropylen, const void *entropy, 43 unsigned long inlen, const void *in); 44 45 /** Read from the PRNG in a FIPS Testing compliant manor 46 @param prng The PRNG state to read from 47 @param out [out] Where to store the data 48 @param outlen Length of data desired (octets) 49 @param inlen Length of additional input 50 @param in Additional input bytes 51 @return 0 if successfull 52 */ 53 int (*generate)(struct ccdrbg_state *prng, 54 unsigned long outlen, void *out, 55 unsigned long inlen, const void *in); 56 57 /** Terminate a PRNG state 58 @param prng The PRNG state to terminate 59 */ 60 void (*done)(struct ccdrbg_state *prng); 61 62 /** private parameters */ 63 const void *custom; 64}; 65 66 67 68#endif // _CORECRYPTO_CCDRBG_IMPL_H_ 69