1 /* SPDX-License-Identifier: GPL-2.0 */ 2 3 /* 4 * NIST SP800-90A DRBG derivation function 5 * 6 * Copyright (C) 2014, Stephan Mueller <smueller@chronox.de> 7 */ 8 9 #ifndef _INTERNAL_DRBG_H 10 #define _INTERNAL_DRBG_H 11 12 /* 13 * Convert an integer into a byte representation of this integer. 14 * The byte representation is big-endian 15 * 16 * @val value to be converted 17 * @buf buffer holding the converted integer -- caller must ensure that 18 * buffer size is at least 32 bit 19 */ drbg_cpu_to_be32(__u32 val,unsigned char * buf)20static inline void drbg_cpu_to_be32(__u32 val, unsigned char *buf) 21 { 22 struct s { 23 __be32 conv; 24 }; 25 struct s *conversion = (struct s *)buf; 26 27 conversion->conv = cpu_to_be32(val); 28 } 29 30 /* 31 * Concatenation Helper and string operation helper 32 * 33 * SP800-90A requires the concatenation of different data. To avoid copying 34 * buffers around or allocate additional memory, the following data structure 35 * is used to point to the original memory with its size. In addition, it 36 * is used to build a linked list. The linked list defines the concatenation 37 * of individual buffers. The order of memory block referenced in that 38 * linked list determines the order of concatenation. 39 */ 40 struct drbg_string { 41 const unsigned char *buf; 42 size_t len; 43 struct list_head list; 44 }; 45 drbg_string_fill(struct drbg_string * string,const unsigned char * buf,size_t len)46static inline void drbg_string_fill(struct drbg_string *string, 47 const unsigned char *buf, size_t len) 48 { 49 string->buf = buf; 50 string->len = len; 51 INIT_LIST_HEAD(&string->list); 52 } 53 54 #endif //_INTERNAL_DRBG_H 55