| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- /* SPDX-License-Identifier: GPL-2.0 */
- /*
- * NIST SP800-90A DRBG derivation function
- *
- * Copyright (C) 2014, Stephan Mueller <smueller@chronox.de>
- */
- #ifndef _INTERNAL_DRBG_H
- #define _INTERNAL_DRBG_H
- /*
- * Convert an integer into a byte representation of this integer.
- * The byte representation is big-endian
- *
- * @val value to be converted
- * @buf buffer holding the converted integer -- caller must ensure that
- * buffer size is at least 32 bit
- */
- static inline void drbg_cpu_to_be32(__u32 val, unsigned char *buf)
- {
- struct s {
- __be32 conv;
- };
- struct s *conversion = (struct s *)buf;
- conversion->conv = cpu_to_be32(val);
- }
- /*
- * Concatenation Helper and string operation helper
- *
- * SP800-90A requires the concatenation of different data. To avoid copying
- * buffers around or allocate additional memory, the following data structure
- * is used to point to the original memory with its size. In addition, it
- * is used to build a linked list. The linked list defines the concatenation
- * of individual buffers. The order of memory block referenced in that
- * linked list determines the order of concatenation.
- */
- struct drbg_string {
- const unsigned char *buf;
- size_t len;
- struct list_head list;
- };
- static inline void drbg_string_fill(struct drbg_string *string,
- const unsigned char *buf, size_t len)
- {
- string->buf = buf;
- string->len = len;
- INIT_LIST_HEAD(&string->list);
- }
- #endif //_INTERNAL_DRBG_H
|