File: cryptlib_aead.h

package info (click to toggle)
nvidia-open-gpu-kernel-modules 550.163.01-4
  • links: PTS, VCS
  • area: contrib
  • in suites: forky, sid
  • size: 87,488 kB
  • sloc: ansic: 1,143,669; cpp: 22,547; sh: 3,721; makefile: 627; python: 315
file content (211 lines) | stat: -rw-r--r-- 11,368 bytes parent folder | download | duplicates (16)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
/**
 *  Copyright Notice:
 *  Copyright 2021-2022 DMTF. All rights reserved.
 *  License: BSD 3-Clause License. For full text see link: https://github.com/DMTF/libspdm/blob/main/LICENSE.md
 **/

#ifndef CRYPTLIB_AEAD_H
#define CRYPTLIB_AEAD_H

/*=====================================================================================
 *    Authenticated Encryption with Associated data (AEAD) Cryptography Primitives
 *=====================================================================================
 */

#if LIBSPDM_AEAD_GCM_SUPPORT
/**
 * Performs AEAD AES-GCM authenticated encryption on a data buffer and additional authenticated
 * data.
 *
 * iv_size must be 12, otherwise false is returned.
 * key_size must be 16 or 32, otherwise false is returned.
 * tag_size must be 12, 13, 14, 15, 16, otherwise false is returned.
 *
 * @param[in]   key            Pointer to the encryption key.
 * @param[in]   key_size       Size of the encryption key in bytes.
 * @param[in]   iv             Pointer to the IV value.
 * @param[in]   iv_size        Size of the IV value in bytes.
 * @param[in]   a_data         Pointer to the additional authenticated data.
 * @param[in]   a_data_size    Size of the additional authenticated data in bytes.
 * @param[in]   data_in        Pointer to the input data buffer to be encrypted.
 * @param[in]   data_in_size   Size of the input data buffer in bytes.
 * @param[out]  tag_out        Pointer to a buffer that receives the authentication tag output.
 * @param[in]   tag_size       Size of the authentication tag in bytes.
 * @param[out]  data_out       Pointer to a buffer that receives the encryption output.
 * @param[out]  data_out_size  Size of the output data buffer in bytes.
 *
 * @retval true   AEAD AES-GCM authenticated encryption succeeded.
 * @retval false  AEAD AES-GCM authenticated encryption failed.
 **/
extern bool libspdm_aead_aes_gcm_encrypt(const uint8_t *key, size_t key_size,
                                         const uint8_t *iv, size_t iv_size,
                                         const uint8_t *a_data, size_t a_data_size,
                                         const uint8_t *data_in, size_t data_in_size,
                                         uint8_t *tag_out, size_t tag_size,
                                         uint8_t *data_out, size_t *data_out_size);

/**
 * Performs AEAD AES-GCM authenticated decryption on a data buffer and additional authenticated
 * data.
 *
 * iv_size must be 12, otherwise false is returned.
 * key_size must be 16 or 32, otherwise false is returned.
 * tag_size must be 12, 13, 14, 15, 16, otherwise false is returned.
 *
 * If data verification fails, false is returned.
 *
 * @param[in]   key            Pointer to the encryption key.
 * @param[in]   key_size       Size of the encryption key in bytes.
 * @param[in]   iv             Pointer to the IV value.
 * @param[in]   iv_size        Size of the IV value in bytes.
 * @param[in]   a_data         Pointer to the additional authenticated data.
 * @param[in]   a_data_size    Size of the additional authenticated data in bytes.
 * @param[in]   data_in        Pointer to the input data buffer to be decrypted.
 * @param[in]   data_in_size   Size of the input data buffer in bytes.
 * @param[in]   tag            Pointer to a buffer that contains the authentication tag.
 * @param[in]   tag_size       Size of the authentication tag in bytes.
 * @param[out]  data_out       Pointer to a buffer that receives the decryption output.
 * @param[out]  data_out_size  Size of the output data buffer in bytes.
 *
 * @retval true   AEAD AES-GCM authenticated decryption succeeded.
 * @retval false  AEAD AES-GCM authenticated decryption failed.
 **/
extern bool libspdm_aead_aes_gcm_decrypt(const uint8_t *key, size_t key_size,
                                         const uint8_t *iv, size_t iv_size,
                                         const uint8_t *a_data, size_t a_data_size,
                                         const uint8_t *data_in, size_t data_in_size,
                                         const uint8_t *tag, size_t tag_size,
                                         uint8_t *data_out, size_t *data_out_size);
#endif /* LIBSPDM_AEAD_GCM_SUPPORT */

#if LIBSPDM_AEAD_CHACHA20_POLY1305_SUPPORT
/**
 * Performs AEAD ChaCha20Poly1305 authenticated encryption on a data buffer and additional
 * authenticated data.
 *
 * iv_size must be 12, otherwise false is returned.
 * key_size must be 32, otherwise false is returned.
 * tag_size must be 16, otherwise false is returned.
 *
 * @param[in]   key            Pointer to the encryption key.
 * @param[in]   key_size       Size of the encryption key in bytes.
 * @param[in]   iv             Pointer to the IV value.
 * @param[in]   iv_size        Size of the IV value in bytes.
 * @param[in]   a_data         Pointer to the additional authenticated data.
 * @param[in]   a_data_size    Size of the additional authenticated data in bytes.
 * @param[in]   data_in        Pointer to the input data buffer to be encrypted.
 * @param[in]   data_in_size   Size of the input data buffer in bytes.
 * @param[out]  tag_out        Pointer to a buffer that receives the authentication tag output.
 * @param[in]   tag_size       Size of the authentication tag in bytes.
 * @param[out]  data_out       Pointer to a buffer that receives the encryption output.
 * @param[out]  data_out_size  Size of the output data buffer in bytes.
 *
 * @retval true   AEAD ChaCha20Poly1305 authenticated encryption succeeded.
 * @retval false  AEAD ChaCha20Poly1305 authenticated encryption failed.
 **/
extern bool libspdm_aead_chacha20_poly1305_encrypt(
    const uint8_t *key, size_t key_size, const uint8_t *iv,
    size_t iv_size, const uint8_t *a_data, size_t a_data_size,
    const uint8_t *data_in, size_t data_in_size, uint8_t *tag_out,
    size_t tag_size, uint8_t *data_out, size_t *data_out_size);

/**
 * Performs AEAD ChaCha20Poly1305 authenticated decryption on a data buffer and additional authenticated data (AAD).
 *
 * iv_size must be 12, otherwise false is returned.
 * key_size must be 32, otherwise false is returned.
 * tag_size must be 16, otherwise false is returned.
 *
 * If data verification fails, false is returned.
 *
 * @param[in]   key            Pointer to the encryption key.
 * @param[in]   key_size       Size of the encryption key in bytes.
 * @param[in]   iv             Pointer to the IV value.
 * @param[in]   iv_size        Size of the IV value in bytes.
 * @param[in]   a_data         Pointer to the additional authenticated data.
 * @param[in]   a_data_size    Size of the additional authenticated data in bytes.
 * @param[in]   data_in        Pointer to the input data buffer to be decrypted.
 * @param[in]   data_in_size   Size of the input data buffer in bytes.
 * @param[in]   tag            Pointer to a buffer that contains the authentication tag.
 * @param[in]   tag_size       Size of the authentication tag in bytes.
 * @param[out]  data_out       Pointer to a buffer that receives the decryption output.
 * @param[out]  data_out_size  Size of the output data buffer in bytes.
 *
 * @retval true   AEAD ChaCha20Poly1305 authenticated decryption succeeded.
 * @retval false  AEAD ChaCha20Poly1305 authenticated decryption failed.
 *
 **/
extern bool libspdm_aead_chacha20_poly1305_decrypt(
    const uint8_t *key, size_t key_size, const uint8_t *iv,
    size_t iv_size, const uint8_t *a_data, size_t a_data_size,
    const uint8_t *data_in, size_t data_in_size, const uint8_t *tag,
    size_t tag_size, uint8_t *data_out, size_t *data_out_size);
#endif /* LIBSPDM_AEAD_CHACHA20_POLY1305_SUPPORT */

#if LIBSPDM_AEAD_SM4_SUPPORT
/**
 * Performs AEAD SM4-GCM authenticated encryption on a data buffer and additional authenticated
 * data.
 *
 * iv_size must be 12, otherwise false is returned.
 * key_size must be 16, otherwise false is returned.
 * tag_size must be 16, otherwise false is returned.
 *
 * @param[in]   key            Pointer to the encryption key.
 * @param[in]   key_size       Size of the encryption key in bytes.
 * @param[in]   iv             Pointer to the IV value.
 * @param[in]   iv_size        Size of the IV value in bytes.
 * @param[in]   a_data         Pointer to the additional authenticated data.
 * @param[in]   a_data_size    Size of the additional authenticated data in bytes.
 * @param[in]   data_in        Pointer to the input data buffer to be encrypted.
 * @param[in]   data_in_size   Size of the input data buffer in bytes.
 * @param[out]  tag_out        Pointer to a buffer that receives the authentication tag output.
 * @param[in]   tag_size       Size of the authentication tag in bytes.
 * @param[out]  data_out       Pointer to a buffer that receives the encryption output.
 * @param[out]  data_out_size  Size of the output data buffer in bytes.
 *
 * @retval true   AEAD SM4-GCM authenticated encryption succeeded.
 * @retval false  AEAD SM4-GCM authenticated encryption failed.
 **/
extern bool libspdm_aead_sm4_gcm_encrypt(const uint8_t *key, size_t key_size,
                                         const uint8_t *iv, size_t iv_size,
                                         const uint8_t *a_data, size_t a_data_size,
                                         const uint8_t *data_in, size_t data_in_size,
                                         uint8_t *tag_out, size_t tag_size,
                                         uint8_t *data_out, size_t *data_out_size);

/**
 * Performs AEAD SM4-GCM authenticated decryption on a data buffer and additional authenticated
 * data.
 *
 * iv_size must be 12, otherwise false is returned.
 * key_size must be 16, otherwise false is returned.
 * tag_size must be 16, otherwise false is returned.
 *
 * If data verification fails, false is returned.
 *
 * @param[in]   key            Pointer to the encryption key.
 * @param[in]   key_size       Size of the encryption key in bytes.
 * @param[in]   iv             Pointer to the IV value.
 * @param[in]   iv_size        Size of the IV value in bytes.
 * @param[in]   a_data         Pointer to the additional authenticated data.
 * @param[in]   a_data_size    Size of the additional authenticated data in bytes.
 * @param[in]   data_in        Pointer to the input data buffer to be decrypted.
 * @param[in]   data_in_size   Size of the input data buffer in bytes.
 * @param[in]   tag            Pointer to a buffer that contains the authentication tag.
 * @param[in]   tag_size       Size of the authentication tag in bytes.
 * @param[out]  data_out       Pointer to a buffer that receives the decryption output.
 * @param[out]  data_out_size  Size of the output data buffer in bytes.
 *
 * @retval true   AEAD SM4-GCM authenticated decryption succeeded.
 * @retval false  AEAD SM4-GCM authenticated decryption failed.
 **/
extern bool libspdm_aead_sm4_gcm_decrypt(const uint8_t *key, size_t key_size,
                                         const uint8_t *iv, size_t iv_size,
                                         const uint8_t *a_data, size_t a_data_size,
                                         const uint8_t *data_in, size_t data_in_size,
                                         const uint8_t *tag, size_t tag_size,
                                         uint8_t *data_out, size_t *data_out_size);
#endif /* LIBSPDM_AEAD_SM4_SUPPORT */

#endif /* CRYPTLIB_AEAD_H */