Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/include/crypto/internal/drbg.h
38184 views
1
/* SPDX-License-Identifier: GPL-2.0 */
2
3
/*
4
* NIST SP800-90A DRBG derivation function
5
*
6
* Copyright (C) 2014, Stephan Mueller <[email protected]>
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
*/
20
static 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
46
static 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
56