Coverage Report

Created: 2024-06-20 06:28

/src/gnutls/lib/algorithms/ciphersuites.c
Line
Count
Source (jump to first uncovered line)
1
/*
2
 * Copyright (C) 2011-2012 Free Software Foundation, Inc.
3
 * Copyright (C) 2017 Red Hat, Inc.
4
 *
5
 * Author: Nikos Mavrogiannopoulos
6
 *
7
 * This file is part of GnuTLS.
8
 *
9
 * The GnuTLS is free software; you can redistribute it and/or
10
 * modify it under the terms of the GNU Lesser General Public License
11
 * as published by the Free Software Foundation; either version 2.1 of
12
 * the License, or (at your option) any later version.
13
 *
14
 * This library is distributed in the hope that it will be useful, but
15
 * WITHOUT ANY WARRANTY; without even the implied warranty of
16
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
17
 * Lesser General Public License for more details.
18
 *
19
 * You should have received a copy of the GNU Lesser General Public License
20
 * along with this program.  If not, see <https://www.gnu.org/licenses/>
21
 *
22
 */
23
24
#include "gnutls_int.h"
25
#include "algorithms.h"
26
#include "errors.h"
27
#include "dh.h"
28
#include "state.h"
29
#include "x509/common.h"
30
#include "auth/cert.h"
31
#include "auth/anon.h"
32
#include "auth/psk.h"
33
#include "ext/safe_renegotiation.h"
34
35
#ifndef ENABLE_SSL3
36
#define GNUTLS_SSL3 GNUTLS_TLS1
37
#endif
38
39
/* Cipher SUITES */
40
#define ENTRY(name, canonical_name, block_algorithm, kx_algorithm,          \
41
        mac_algorithm, min_version, dtls_version)                     \
42
  {                                                                   \
43
    #name, name, canonical_name, block_algorithm, kx_algorithm, \
44
      mac_algorithm, min_version, GNUTLS_TLS1_2,          \
45
      dtls_version, GNUTLS_DTLS1_2, GNUTLS_MAC_SHA256     \
46
  }
47
#define ENTRY_PRF(name, canonical_name, block_algorithm, kx_algorithm,      \
48
      mac_algorithm, min_version, dtls_version, prf)            \
49
  {                                                                   \
50
    #name, name, canonical_name, block_algorithm, kx_algorithm, \
51
      mac_algorithm, min_version, GNUTLS_TLS1_2,          \
52
      dtls_version, GNUTLS_DTLS1_2, prf                   \
53
  }
54
#define ENTRY_TLS13(name, canonical_name, block_algorithm, min_version, prf) \
55
  {                                                                    \
56
    #name, name, canonical_name, block_algorithm, 0,             \
57
      GNUTLS_MAC_AEAD, min_version, GNUTLS_TLS1_3,         \
58
      GNUTLS_VERSION_UNKNOWN, GNUTLS_VERSION_UNKNOWN, prf  \
59
  }
60
61
/* TLS 1.3 ciphersuites */
62
#define GNUTLS_AES_128_GCM_SHA256 \
63
  {                         \
64
    0x13, 0x01        \
65
  }
66
#define GNUTLS_AES_256_GCM_SHA384 \
67
  {                         \
68
    0x13, 0x02        \
69
  }
70
#define GNUTLS_CHACHA20_POLY1305_SHA256 \
71
  {                               \
72
    0x13, 0x03              \
73
  }
74
#define GNUTLS_AES_128_CCM_SHA256 \
75
  {                         \
76
    0x13, 0x04        \
77
  }
78
#define GNUTLS_AES_128_CCM_8_SHA256 \
79
  {                           \
80
    0x13, 0x05          \
81
  }
82
83
/* RSA with NULL cipher and MD5 MAC
84
 * for test purposes.
85
 */
86
#define GNUTLS_RSA_NULL_MD5 \
87
  {                   \
88
    0x00, 0x01  \
89
  }
90
#define GNUTLS_RSA_NULL_SHA1 \
91
  {                    \
92
    0x00, 0x02   \
93
  }
94
#define GNUTLS_RSA_NULL_SHA256 \
95
  {                      \
96
    0x00, 0x3B     \
97
  }
98
99
/* ANONymous cipher suites.
100
 */
101
102
#define GNUTLS_DH_ANON_3DES_EDE_CBC_SHA1 \
103
  {                                \
104
    0x00, 0x1B               \
105
  }
106
#define GNUTLS_DH_ANON_ARCFOUR_128_MD5 \
107
  {                              \
108
    0x00, 0x18             \
109
  }
110
111
/* rfc3268: */
112
#define GNUTLS_DH_ANON_AES_128_CBC_SHA1 \
113
  {                               \
114
    0x00, 0x34              \
115
  }
116
#define GNUTLS_DH_ANON_AES_256_CBC_SHA1 \
117
  {                               \
118
    0x00, 0x3A              \
119
  }
120
121
/* rfc4132 */
122
#define GNUTLS_DH_ANON_CAMELLIA_128_CBC_SHA1 \
123
  {                                    \
124
    0x00, 0x46                   \
125
  }
126
#define GNUTLS_DH_ANON_CAMELLIA_256_CBC_SHA1 \
127
  {                                    \
128
    0x00, 0x89                   \
129
  }
130
131
/* rfc5932 */
132
#define GNUTLS_RSA_CAMELLIA_128_CBC_SHA256 \
133
  {                                  \
134
    0x00, 0xBA                 \
135
  }
136
#define GNUTLS_DHE_DSS_CAMELLIA_128_CBC_SHA256 \
137
  {                                      \
138
    0x00, 0xBD                     \
139
  }
140
#define GNUTLS_DHE_RSA_CAMELLIA_128_CBC_SHA256 \
141
  {                                      \
142
    0x00, 0xBE                     \
143
  }
144
#define GNUTLS_DH_ANON_CAMELLIA_128_CBC_SHA256 \
145
  {                                      \
146
    0x00, 0xBF                     \
147
  }
148
#define GNUTLS_RSA_CAMELLIA_256_CBC_SHA256 \
149
  {                                  \
150
    0x00, 0xC0                 \
151
  }
152
#define GNUTLS_DHE_DSS_CAMELLIA_256_CBC_SHA256 \
153
  {                                      \
154
    0x00, 0xC3                     \
155
  }
156
#define GNUTLS_DHE_RSA_CAMELLIA_256_CBC_SHA256 \
157
  {                                      \
158
    0x00, 0xC4                     \
159
  }
160
#define GNUTLS_DH_ANON_CAMELLIA_256_CBC_SHA256 \
161
  {                                      \
162
    0x00, 0xC5                     \
163
  }
164
165
/* rfc6367 */
166
#define GNUTLS_ECDHE_ECDSA_CAMELLIA_128_CBC_SHA256 \
167
  {                                          \
168
    0xC0, 0x72                         \
169
  }
170
#define GNUTLS_ECDHE_ECDSA_CAMELLIA_256_CBC_SHA384 \
171
  {                                          \
172
    0xC0, 0x73                         \
173
  }
174
#define GNUTLS_ECDHE_RSA_CAMELLIA_128_CBC_SHA256 \
175
  {                                        \
176
    0xC0, 0x76                       \
177
  }
178
#define GNUTLS_ECDHE_RSA_CAMELLIA_256_CBC_SHA384 \
179
  {                                        \
180
    0xC0, 0x77                       \
181
  }
182
#define GNUTLS_PSK_CAMELLIA_128_CBC_SHA256 \
183
  {                                  \
184
    0xC0, 0x94                 \
185
  }
186
#define GNUTLS_PSK_CAMELLIA_256_CBC_SHA384 \
187
  {                                  \
188
    0xC0, 0x95                 \
189
  }
190
#define GNUTLS_DHE_PSK_CAMELLIA_128_CBC_SHA256 \
191
  {                                      \
192
    0xC0, 0x96                     \
193
  }
194
#define GNUTLS_DHE_PSK_CAMELLIA_256_CBC_SHA384 \
195
  {                                      \
196
    0xC0, 0x97                     \
197
  }
198
#define GNUTLS_RSA_PSK_CAMELLIA_128_CBC_SHA256 \
199
  {                                      \
200
    0xC0, 0x98                     \
201
  }
202
#define GNUTLS_RSA_PSK_CAMELLIA_256_CBC_SHA384 \
203
  {                                      \
204
    0xC0, 0x99                     \
205
  }
206
#define GNUTLS_ECDHE_PSK_CAMELLIA_128_CBC_SHA256 \
207
  {                                        \
208
    0xC0, 0x9A                       \
209
  }
210
#define GNUTLS_ECDHE_PSK_CAMELLIA_256_CBC_SHA384 \
211
  {                                        \
212
    0xC0, 0x9B                       \
213
  }
214
215
#define GNUTLS_RSA_CAMELLIA_128_GCM_SHA256 \
216
  {                                  \
217
    0xC0, 0x7A                 \
218
  }
219
#define GNUTLS_RSA_CAMELLIA_256_GCM_SHA384 \
220
  {                                  \
221
    0xC0, 0x7B                 \
222
  }
223
#define GNUTLS_DHE_RSA_CAMELLIA_128_GCM_SHA256 \
224
  {                                      \
225
    0xC0, 0x7C                     \
226
  }
227
#define GNUTLS_DHE_RSA_CAMELLIA_256_GCM_SHA384 \
228
  {                                      \
229
    0xC0, 0x7D                     \
230
  }
231
#define GNUTLS_DHE_DSS_CAMELLIA_128_GCM_SHA256 \
232
  {                                      \
233
    0xC0, 0x80                     \
234
  }
235
#define GNUTLS_DHE_DSS_CAMELLIA_256_GCM_SHA384 \
236
  {                                      \
237
    0xC0, 0x81                     \
238
  }
239
#define GNUTLS_DH_ANON_CAMELLIA_128_GCM_SHA256 \
240
  {                                      \
241
    0xC0, 0x84                     \
242
  }
243
#define GNUTLS_DH_ANON_CAMELLIA_256_GCM_SHA384 \
244
  {                                      \
245
    0xC0, 0x85                     \
246
  }
247
#define GNUTLS_ECDHE_ECDSA_CAMELLIA_128_GCM_SHA256 \
248
  {                                          \
249
    0xC0, 0x86                         \
250
  }
251
#define GNUTLS_ECDHE_ECDSA_CAMELLIA_256_GCM_SHA384 \
252
  {                                          \
253
    0xC0, 0x87                         \
254
  }
255
#define GNUTLS_ECDHE_RSA_CAMELLIA_128_GCM_SHA256 \
256
  {                                        \
257
    0xC0, 0x8A                       \
258
  }
259
#define GNUTLS_ECDHE_RSA_CAMELLIA_256_GCM_SHA384 \
260
  {                                        \
261
    0xC0, 0x8B                       \
262
  }
263
#define GNUTLS_PSK_CAMELLIA_128_GCM_SHA256 \
264
  {                                  \
265
    0xC0, 0x8E                 \
266
  }
267
#define GNUTLS_PSK_CAMELLIA_256_GCM_SHA384 \
268
  {                                  \
269
    0xC0, 0x8F                 \
270
  }
271
#define GNUTLS_DHE_PSK_CAMELLIA_128_GCM_SHA256 \
272
  {                                      \
273
    0xC0, 0x90                     \
274
  }
275
#define GNUTLS_DHE_PSK_CAMELLIA_256_GCM_SHA384 \
276
  {                                      \
277
    0xC0, 0x91                     \
278
  }
279
#define GNUTLS_RSA_PSK_CAMELLIA_128_GCM_SHA256 \
280
  {                                      \
281
    0xC0, 0x92                     \
282
  }
283
#define GNUTLS_RSA_PSK_CAMELLIA_256_GCM_SHA384 \
284
  {                                      \
285
    0xC0, 0x93                     \
286
  }
287
288
#define GNUTLS_DH_ANON_AES_128_CBC_SHA256 \
289
  {                                 \
290
    0x00, 0x6C                \
291
  }
292
#define GNUTLS_DH_ANON_AES_256_CBC_SHA256 \
293
  {                                 \
294
    0x00, 0x6D                \
295
  }
296
297
/* draft-ietf-tls-chacha20-poly1305-02 */
298
#define GNUTLS_ECDHE_RSA_CHACHA20_POLY1305 \
299
  {                                  \
300
    0xCC, 0xA8                 \
301
  }
302
#define GNUTLS_ECDHE_ECDSA_CHACHA20_POLY1305 \
303
  {                                    \
304
    0xCC, 0xA9                   \
305
  }
306
#define GNUTLS_DHE_RSA_CHACHA20_POLY1305 \
307
  {                                \
308
    0xCC, 0xAA               \
309
  }
310
311
#define GNUTLS_PSK_CHACHA20_POLY1305 \
312
  {                            \
313
    0xCC, 0xAB           \
314
  }
315
#define GNUTLS_ECDHE_PSK_CHACHA20_POLY1305 \
316
  {                                  \
317
    0xCC, 0xAC                 \
318
  }
319
#define GNUTLS_DHE_PSK_CHACHA20_POLY1305 \
320
  {                                \
321
    0xCC, 0xAD               \
322
  }
323
#define GNUTLS_RSA_PSK_CHACHA20_POLY1305 \
324
  {                                \
325
    0xCC, 0xAE               \
326
  }
327
328
/* PSK (not in TLS 1.0)
329
 * draft-ietf-tls-psk:
330
 */
331
#define GNUTLS_PSK_ARCFOUR_128_SHA1 \
332
  {                           \
333
    0x00, 0x8A          \
334
  }
335
#define GNUTLS_PSK_3DES_EDE_CBC_SHA1 \
336
  {                            \
337
    0x00, 0x8B           \
338
  }
339
#define GNUTLS_PSK_AES_128_CBC_SHA1 \
340
  {                           \
341
    0x00, 0x8C          \
342
  }
343
#define GNUTLS_PSK_AES_256_CBC_SHA1 \
344
  {                           \
345
    0x00, 0x8D          \
346
  }
347
348
#define GNUTLS_DHE_PSK_ARCFOUR_128_SHA1 \
349
  {                               \
350
    0x00, 0x8E              \
351
  }
352
#define GNUTLS_DHE_PSK_3DES_EDE_CBC_SHA1 \
353
  {                                \
354
    0x00, 0x8F               \
355
  }
356
#define GNUTLS_DHE_PSK_AES_128_CBC_SHA1 \
357
  {                               \
358
    0x00, 0x90              \
359
  }
360
#define GNUTLS_DHE_PSK_AES_256_CBC_SHA1 \
361
  {                               \
362
    0x00, 0x91              \
363
  }
364
365
#define GNUTLS_RSA_PSK_ARCFOUR_128_SHA1 \
366
  {                               \
367
    0x00, 0x92              \
368
  }
369
#define GNUTLS_RSA_PSK_3DES_EDE_CBC_SHA1 \
370
  {                                \
371
    0x00, 0x93               \
372
  }
373
#define GNUTLS_RSA_PSK_AES_128_CBC_SHA1 \
374
  {                               \
375
    0x00, 0x94              \
376
  }
377
#define GNUTLS_RSA_PSK_AES_256_CBC_SHA1 \
378
  {                               \
379
    0x00, 0x95              \
380
  }
381
382
#ifdef ENABLE_SRP
383
/* SRP (rfc5054)
384
 */
385
#define GNUTLS_SRP_SHA_3DES_EDE_CBC_SHA1 \
386
  {                                \
387
    0xC0, 0x1A               \
388
  }
389
#define GNUTLS_SRP_SHA_RSA_3DES_EDE_CBC_SHA1 \
390
  {                                    \
391
    0xC0, 0x1B                   \
392
  }
393
#define GNUTLS_SRP_SHA_DSS_3DES_EDE_CBC_SHA1 \
394
  {                                    \
395
    0xC0, 0x1C                   \
396
  }
397
398
#define GNUTLS_SRP_SHA_AES_128_CBC_SHA1 \
399
  {                               \
400
    0xC0, 0x1D              \
401
  }
402
#define GNUTLS_SRP_SHA_RSA_AES_128_CBC_SHA1 \
403
  {                                   \
404
    0xC0, 0x1E                  \
405
  }
406
#define GNUTLS_SRP_SHA_DSS_AES_128_CBC_SHA1 \
407
  {                                   \
408
    0xC0, 0x1F                  \
409
  }
410
411
#define GNUTLS_SRP_SHA_AES_256_CBC_SHA1 \
412
  {                               \
413
    0xC0, 0x20              \
414
  }
415
#define GNUTLS_SRP_SHA_RSA_AES_256_CBC_SHA1 \
416
  {                                   \
417
    0xC0, 0x21                  \
418
  }
419
#define GNUTLS_SRP_SHA_DSS_AES_256_CBC_SHA1 \
420
  {                                   \
421
    0xC0, 0x22                  \
422
  }
423
#endif
424
425
/* RSA
426
 */
427
#define GNUTLS_RSA_ARCFOUR_128_SHA1 \
428
  {                           \
429
    0x00, 0x05          \
430
  }
431
#define GNUTLS_RSA_ARCFOUR_128_MD5 \
432
  {                          \
433
    0x00, 0x04         \
434
  }
435
#define GNUTLS_RSA_3DES_EDE_CBC_SHA1 \
436
  {                            \
437
    0x00, 0x0A           \
438
  }
439
440
/* rfc3268:
441
 */
442
#define GNUTLS_RSA_AES_128_CBC_SHA1 \
443
  {                           \
444
    0x00, 0x2F          \
445
  }
446
#define GNUTLS_RSA_AES_256_CBC_SHA1 \
447
  {                           \
448
    0x00, 0x35          \
449
  }
450
451
/* rfc4132 */
452
#define GNUTLS_RSA_CAMELLIA_128_CBC_SHA1 \
453
  {                                \
454
    0x00, 0x41               \
455
  }
456
#define GNUTLS_RSA_CAMELLIA_256_CBC_SHA1 \
457
  {                                \
458
    0x00, 0x84               \
459
  }
460
461
#define GNUTLS_RSA_AES_128_CBC_SHA256 \
462
  {                             \
463
    0x00, 0x3C            \
464
  }
465
#define GNUTLS_RSA_AES_256_CBC_SHA256 \
466
  {                             \
467
    0x00, 0x3D            \
468
  }
469
470
/* DHE DSS
471
 */
472
#define GNUTLS_DHE_DSS_3DES_EDE_CBC_SHA1 \
473
  {                                \
474
    0x00, 0x13               \
475
  }
476
477
/* draft-ietf-tls-56-bit-ciphersuites-01:
478
 */
479
#define GNUTLS_DHE_DSS_ARCFOUR_128_SHA1 \
480
  {                               \
481
    0x00, 0x66              \
482
  }
483
484
/* rfc3268:
485
 */
486
#define GNUTLS_DHE_DSS_AES_256_CBC_SHA1 \
487
  {                               \
488
    0x00, 0x38              \
489
  }
490
#define GNUTLS_DHE_DSS_AES_128_CBC_SHA1 \
491
  {                               \
492
    0x00, 0x32              \
493
  }
494
495
/* rfc4132 */
496
#define GNUTLS_DHE_DSS_CAMELLIA_128_CBC_SHA1 \
497
  {                                    \
498
    0x00, 0x44                   \
499
  }
500
#define GNUTLS_DHE_DSS_CAMELLIA_256_CBC_SHA1 \
501
  {                                    \
502
    0x00, 0x87                   \
503
  }
504
505
#define GNUTLS_DHE_DSS_AES_128_CBC_SHA256 \
506
  {                                 \
507
    0x00, 0x40                \
508
  }
509
#define GNUTLS_DHE_DSS_AES_256_CBC_SHA256 \
510
  {                                 \
511
    0x00, 0x6A                \
512
  }
513
514
/* DHE RSA
515
 */
516
#define GNUTLS_DHE_RSA_3DES_EDE_CBC_SHA1 \
517
  {                                \
518
    0x00, 0x16               \
519
  }
520
521
/* rfc3268:
522
 */
523
#define GNUTLS_DHE_RSA_AES_128_CBC_SHA1 \
524
  {                               \
525
    0x00, 0x33              \
526
  }
527
#define GNUTLS_DHE_RSA_AES_256_CBC_SHA1 \
528
  {                               \
529
    0x00, 0x39              \
530
  }
531
532
/* rfc4132 */
533
#define GNUTLS_DHE_RSA_CAMELLIA_128_CBC_SHA1 \
534
  {                                    \
535
    0x00, 0x45                   \
536
  }
537
#define GNUTLS_DHE_RSA_CAMELLIA_256_CBC_SHA1 \
538
  {                                    \
539
    0x00, 0x88                   \
540
  }
541
542
#define GNUTLS_DHE_RSA_AES_128_CBC_SHA256 \
543
  {                                 \
544
    0x00, 0x67                \
545
  }
546
#define GNUTLS_DHE_RSA_AES_256_CBC_SHA256 \
547
  {                                 \
548
    0x00, 0x6B                \
549
  }
550
551
/* GCM: RFC5288 */
552
#define GNUTLS_RSA_AES_128_GCM_SHA256 \
553
  {                             \
554
    0x00, 0x9C            \
555
  }
556
#define GNUTLS_DHE_RSA_AES_128_GCM_SHA256 \
557
  {                                 \
558
    0x00, 0x9E                \
559
  }
560
#define GNUTLS_DHE_DSS_AES_128_GCM_SHA256 \
561
  {                                 \
562
    0x00, 0xA2                \
563
  }
564
#define GNUTLS_DH_ANON_AES_128_GCM_SHA256 \
565
  {                                 \
566
    0x00, 0xA6                \
567
  }
568
#define GNUTLS_RSA_AES_256_GCM_SHA384 \
569
  {                             \
570
    0x00, 0x9D            \
571
  }
572
#define GNUTLS_DHE_RSA_AES_256_GCM_SHA384 \
573
  {                                 \
574
    0x00, 0x9F                \
575
  }
576
#define GNUTLS_DHE_DSS_AES_256_GCM_SHA384 \
577
  {                                 \
578
    0x00, 0xA3                \
579
  }
580
#define GNUTLS_DH_ANON_AES_256_GCM_SHA384 \
581
  {                                 \
582
    0x00, 0xA7                \
583
  }
584
585
/* CCM: RFC6655/7251 */
586
#define GNUTLS_RSA_AES_128_CCM \
587
  {                      \
588
    0xC0, 0x9C     \
589
  }
590
#define GNUTLS_RSA_AES_256_CCM \
591
  {                      \
592
    0xC0, 0x9D     \
593
  }
594
#define GNUTLS_DHE_RSA_AES_128_CCM \
595
  {                          \
596
    0xC0, 0x9E         \
597
  }
598
#define GNUTLS_DHE_RSA_AES_256_CCM \
599
  {                          \
600
    0xC0, 0x9F         \
601
  }
602
603
#define GNUTLS_ECDHE_ECDSA_AES_128_CCM \
604
  {                              \
605
    0xC0, 0xAC             \
606
  }
607
#define GNUTLS_ECDHE_ECDSA_AES_256_CCM \
608
  {                              \
609
    0xC0, 0xAD             \
610
  }
611
612
#define GNUTLS_PSK_AES_128_CCM \
613
  {                      \
614
    0xC0, 0xA4     \
615
  }
616
#define GNUTLS_PSK_AES_256_CCM \
617
  {                      \
618
    0xC0, 0xA5     \
619
  }
620
#define GNUTLS_DHE_PSK_AES_128_CCM \
621
  {                          \
622
    0xC0, 0xA6         \
623
  }
624
#define GNUTLS_DHE_PSK_AES_256_CCM \
625
  {                          \
626
    0xC0, 0xA7         \
627
  }
628
629
/* CCM-8: RFC6655/7251 */
630
#define GNUTLS_RSA_AES_128_CCM_8 \
631
  {                        \
632
    0xC0, 0xA0       \
633
  }
634
#define GNUTLS_RSA_AES_256_CCM_8 \
635
  {                        \
636
    0xC0, 0xA1       \
637
  }
638
#define GNUTLS_DHE_RSA_AES_128_CCM_8 \
639
  {                            \
640
    0xC0, 0xA2           \
641
  }
642
#define GNUTLS_DHE_RSA_AES_256_CCM_8 \
643
  {                            \
644
    0xC0, 0xA3           \
645
  }
646
647
#define GNUTLS_ECDHE_ECDSA_AES_128_CCM_8 \
648
  {                                \
649
    0xC0, 0xAE               \
650
  }
651
#define GNUTLS_ECDHE_ECDSA_AES_256_CCM_8 \
652
  {                                \
653
    0xC0, 0xAF               \
654
  }
655
656
#define GNUTLS_PSK_AES_128_CCM_8 \
657
  {                        \
658
    0xC0, 0xA8       \
659
  }
660
#define GNUTLS_PSK_AES_256_CCM_8 \
661
  {                        \
662
    0xC0, 0xA9       \
663
  }
664
#define GNUTLS_DHE_PSK_AES_128_CCM_8 \
665
  {                            \
666
    0xC0, 0xAA           \
667
  }
668
#define GNUTLS_DHE_PSK_AES_256_CCM_8 \
669
  {                            \
670
    0xC0, 0xAB           \
671
  }
672
673
/* RFC 5487 */
674
/* GCM-PSK */
675
#define GNUTLS_PSK_AES_128_GCM_SHA256 \
676
  {                             \
677
    0x00, 0xA8            \
678
  }
679
#define GNUTLS_DHE_PSK_AES_128_GCM_SHA256 \
680
  {                                 \
681
    0x00, 0xAA                \
682
  }
683
#define GNUTLS_PSK_AES_256_GCM_SHA384 \
684
  {                             \
685
    0x00, 0xA9            \
686
  }
687
#define GNUTLS_DHE_PSK_AES_256_GCM_SHA384 \
688
  {                                 \
689
    0x00, 0xAB                \
690
  }
691
692
#define GNUTLS_PSK_AES_256_CBC_SHA384 \
693
  {                             \
694
    0x00, 0xAF            \
695
  }
696
#define GNUTLS_PSK_NULL_SHA384 \
697
  {                      \
698
    0x00, 0xB1     \
699
  }
700
#define GNUTLS_DHE_PSK_AES_256_CBC_SHA384 \
701
  {                                 \
702
    0x00, 0xB3                \
703
  }
704
#define GNUTLS_DHE_PSK_NULL_SHA384 \
705
  {                          \
706
    0x00, 0xB5         \
707
  }
708
709
#define GNUTLS_PSK_NULL_SHA1 \
710
  {                    \
711
    0x00, 0x2C   \
712
  }
713
#define GNUTLS_DHE_PSK_NULL_SHA1 \
714
  {                        \
715
    0x00, 0x2D       \
716
  }
717
#define GNUTLS_RSA_PSK_NULL_SHA1 \
718
  {                        \
719
    0x00, 0x2E       \
720
  }
721
#define GNUTLS_ECDHE_PSK_NULL_SHA1 \
722
  {                          \
723
    0xC0, 0x39         \
724
  }
725
726
#define GNUTLS_RSA_PSK_AES_128_GCM_SHA256 \
727
  {                                 \
728
    0x00, 0xAC                \
729
  }
730
#define GNUTLS_RSA_PSK_AES_256_GCM_SHA384 \
731
  {                                 \
732
    0x00, 0xAD                \
733
  }
734
#define GNUTLS_RSA_PSK_AES_128_CBC_SHA256 \
735
  {                                 \
736
    0x00, 0xB6                \
737
  }
738
#define GNUTLS_RSA_PSK_AES_256_CBC_SHA384 \
739
  {                                 \
740
    0x00, 0xB7                \
741
  }
742
#define GNUTLS_RSA_PSK_NULL_SHA256 \
743
  {                          \
744
    0x00, 0xB8         \
745
  }
746
#define GNUTLS_RSA_PSK_NULL_SHA384 \
747
  {                          \
748
    0x00, 0xB9         \
749
  }
750
751
/* PSK - SHA256 HMAC */
752
#define GNUTLS_PSK_AES_128_CBC_SHA256 \
753
  {                             \
754
    0x00, 0xAE            \
755
  }
756
#define GNUTLS_DHE_PSK_AES_128_CBC_SHA256 \
757
  {                                 \
758
    0x00, 0xB2                \
759
  }
760
761
#define GNUTLS_PSK_NULL_SHA256 \
762
  {                      \
763
    0x00, 0xB0     \
764
  }
765
#define GNUTLS_DHE_PSK_NULL_SHA256 \
766
  {                          \
767
    0x00, 0xB4         \
768
  }
769
770
/* ECC */
771
#define GNUTLS_ECDH_ANON_NULL_SHA1 \
772
  {                          \
773
    0xC0, 0x15         \
774
  }
775
#define GNUTLS_ECDH_ANON_3DES_EDE_CBC_SHA1 \
776
  {                                  \
777
    0xC0, 0x17                 \
778
  }
779
#define GNUTLS_ECDH_ANON_AES_128_CBC_SHA1 \
780
  {                                 \
781
    0xC0, 0x18                \
782
  }
783
#define GNUTLS_ECDH_ANON_AES_256_CBC_SHA1 \
784
  {                                 \
785
    0xC0, 0x19                \
786
  }
787
#define GNUTLS_ECDH_ANON_ARCFOUR_128_SHA1 \
788
  {                                 \
789
    0xC0, 0x16                \
790
  }
791
792
/* ECC-RSA */
793
#define GNUTLS_ECDHE_RSA_NULL_SHA1 \
794
  {                          \
795
    0xC0, 0x10         \
796
  }
797
#define GNUTLS_ECDHE_RSA_3DES_EDE_CBC_SHA1 \
798
  {                                  \
799
    0xC0, 0x12                 \
800
  }
801
#define GNUTLS_ECDHE_RSA_AES_128_CBC_SHA1 \
802
  {                                 \
803
    0xC0, 0x13                \
804
  }
805
#define GNUTLS_ECDHE_RSA_AES_256_CBC_SHA1 \
806
  {                                 \
807
    0xC0, 0x14                \
808
  }
809
#define GNUTLS_ECDHE_RSA_ARCFOUR_128_SHA1 \
810
  {                                 \
811
    0xC0, 0x11                \
812
  }
813
814
/* ECC-ECDSA */
815
#define GNUTLS_ECDHE_ECDSA_NULL_SHA1 \
816
  {                            \
817
    0xC0, 0x06           \
818
  }
819
#define GNUTLS_ECDHE_ECDSA_3DES_EDE_CBC_SHA1 \
820
  {                                    \
821
    0xC0, 0x08                   \
822
  }
823
#define GNUTLS_ECDHE_ECDSA_AES_128_CBC_SHA1 \
824
  {                                   \
825
    0xC0, 0x09                  \
826
  }
827
#define GNUTLS_ECDHE_ECDSA_AES_256_CBC_SHA1 \
828
  {                                   \
829
    0xC0, 0x0A                  \
830
  }
831
#define GNUTLS_ECDHE_ECDSA_ARCFOUR_128_SHA1 \
832
  {                                   \
833
    0xC0, 0x07                  \
834
  }
835
836
/* RFC5289 */
837
/* ECC with SHA2 */
838
#define GNUTLS_ECDHE_ECDSA_AES_128_CBC_SHA256 \
839
  {                                     \
840
    0xC0, 0x23                    \
841
  }
842
#define GNUTLS_ECDHE_RSA_AES_128_CBC_SHA256 \
843
  {                                   \
844
    0xC0, 0x27                  \
845
  }
846
#define GNUTLS_ECDHE_RSA_AES_256_CBC_SHA384 \
847
  {                                   \
848
    0xC0, 0x28                  \
849
  }
850
851
/* ECC with AES-GCM */
852
#define GNUTLS_ECDHE_ECDSA_AES_128_GCM_SHA256 \
853
  {                                     \
854
    0xC0, 0x2B                    \
855
  }
856
#define GNUTLS_ECDHE_RSA_AES_128_GCM_SHA256 \
857
  {                                   \
858
    0xC0, 0x2F                  \
859
  }
860
#define GNUTLS_ECDHE_RSA_AES_256_GCM_SHA384 \
861
  {                                   \
862
    0xC0, 0x30                  \
863
  }
864
865
/* SuiteB */
866
#define GNUTLS_ECDHE_ECDSA_AES_256_GCM_SHA384 \
867
  {                                     \
868
    0xC0, 0x2C                    \
869
  }
870
#define GNUTLS_ECDHE_ECDSA_AES_256_CBC_SHA384 \
871
  {                                     \
872
    0xC0, 0x24                    \
873
  }
874
875
/* ECC with PSK */
876
#define GNUTLS_ECDHE_PSK_3DES_EDE_CBC_SHA1 \
877
  {                                  \
878
    0xC0, 0x34                 \
879
  }
880
#define GNUTLS_ECDHE_PSK_AES_128_CBC_SHA1 \
881
  {                                 \
882
    0xC0, 0x35                \
883
  }
884
#define GNUTLS_ECDHE_PSK_AES_256_CBC_SHA1 \
885
  {                                 \
886
    0xC0, 0x36                \
887
  }
888
#define GNUTLS_ECDHE_PSK_AES_128_CBC_SHA256 \
889
  {                                   \
890
    0xC0, 0x37                  \
891
  }
892
#define GNUTLS_ECDHE_PSK_AES_256_CBC_SHA384 \
893
  {                                   \
894
    0xC0, 0x38                  \
895
  }
896
#define GNUTLS_ECDHE_PSK_ARCFOUR_128_SHA1 \
897
  {                                 \
898
    0xC0, 0x33                \
899
  }
900
#define GNUTLS_ECDHE_PSK_NULL_SHA256 \
901
  {                            \
902
    0xC0, 0x3A           \
903
  }
904
#define GNUTLS_ECDHE_PSK_NULL_SHA384 \
905
  {                            \
906
    0xC0, 0x3B           \
907
  }
908
909
/* draft-smyshlyaev-tls12-gost-suites */
910
#ifdef ENABLE_GOST
911
#define GNUTLS_GOSTR341112_256_28147_CNT_IMIT \
912
  {                                     \
913
    0xc1, 0x02                    \
914
  }
915
#endif
916
917
#define CIPHER_SUITES_COUNT \
918
0
  (sizeof(cs_algorithms) / sizeof(gnutls_cipher_suite_entry_st) - 1)
919
920
/* The following is a potential list of ciphersuites. For the options to be
921
 * available, the ciphers and MACs must be available to gnutls as well.
922
 */
923
static const gnutls_cipher_suite_entry_st cs_algorithms[] = {
924
  /* TLS 1.3 */
925
  ENTRY_TLS13(GNUTLS_AES_128_GCM_SHA256, "TLS_AES_128_GCM_SHA256",
926
        GNUTLS_CIPHER_AES_128_GCM, GNUTLS_TLS1_3,
927
        GNUTLS_MAC_SHA256),
928
929
  ENTRY_TLS13(GNUTLS_AES_256_GCM_SHA384, "TLS_AES_256_GCM_SHA384",
930
        GNUTLS_CIPHER_AES_256_GCM, GNUTLS_TLS1_3,
931
        GNUTLS_MAC_SHA384),
932
933
  ENTRY_TLS13(GNUTLS_CHACHA20_POLY1305_SHA256,
934
        "TLS_CHACHA20_POLY1305_SHA256",
935
        GNUTLS_CIPHER_CHACHA20_POLY1305, GNUTLS_TLS1_3,
936
        GNUTLS_MAC_SHA256),
937
938
  ENTRY_TLS13(GNUTLS_AES_128_CCM_SHA256, "TLS_AES_128_CCM_SHA256",
939
        GNUTLS_CIPHER_AES_128_CCM, GNUTLS_TLS1_3,
940
        GNUTLS_MAC_SHA256),
941
942
  ENTRY_TLS13(GNUTLS_AES_128_CCM_8_SHA256, "TLS_AES_128_CCM_8_SHA256",
943
        GNUTLS_CIPHER_AES_128_CCM_8, GNUTLS_TLS1_3,
944
        GNUTLS_MAC_SHA256),
945
946
  /* RSA-NULL */
947
  ENTRY(GNUTLS_RSA_NULL_MD5, "TLS_RSA_WITH_NULL_MD5", GNUTLS_CIPHER_NULL,
948
        GNUTLS_KX_RSA, GNUTLS_MAC_MD5, GNUTLS_SSL3,
949
        GNUTLS_DTLS_VERSION_MIN),
950
  ENTRY(GNUTLS_RSA_NULL_SHA1, "TLS_RSA_WITH_NULL_SHA", GNUTLS_CIPHER_NULL,
951
        GNUTLS_KX_RSA, GNUTLS_MAC_SHA1, GNUTLS_SSL3,
952
        GNUTLS_DTLS_VERSION_MIN),
953
  ENTRY(GNUTLS_RSA_NULL_SHA256, "TLS_RSA_WITH_NULL_SHA256",
954
        GNUTLS_CIPHER_NULL, GNUTLS_KX_RSA, GNUTLS_MAC_SHA256,
955
        GNUTLS_TLS1_2, GNUTLS_DTLS1_2),
956
957
  /* RSA */
958
  ENTRY(GNUTLS_RSA_ARCFOUR_128_SHA1, "TLS_RSA_WITH_RC4_128_SHA",
959
        GNUTLS_CIPHER_ARCFOUR_128, GNUTLS_KX_RSA, GNUTLS_MAC_SHA1,
960
        GNUTLS_SSL3, GNUTLS_VERSION_UNKNOWN),
961
  ENTRY(GNUTLS_RSA_ARCFOUR_128_MD5, "TLS_RSA_WITH_RC4_128_MD5",
962
        GNUTLS_CIPHER_ARCFOUR_128, GNUTLS_KX_RSA, GNUTLS_MAC_MD5,
963
        GNUTLS_SSL3, GNUTLS_VERSION_UNKNOWN),
964
  ENTRY(GNUTLS_RSA_3DES_EDE_CBC_SHA1, "TLS_RSA_WITH_3DES_EDE_CBC_SHA",
965
        GNUTLS_CIPHER_3DES_CBC, GNUTLS_KX_RSA, GNUTLS_MAC_SHA1,
966
        GNUTLS_SSL3, GNUTLS_DTLS_VERSION_MIN),
967
  ENTRY(GNUTLS_RSA_AES_128_CBC_SHA1, "TLS_RSA_WITH_AES_128_CBC_SHA",
968
        GNUTLS_CIPHER_AES_128_CBC, GNUTLS_KX_RSA, GNUTLS_MAC_SHA1,
969
        GNUTLS_SSL3, GNUTLS_DTLS_VERSION_MIN),
970
  ENTRY(GNUTLS_RSA_AES_256_CBC_SHA1, "TLS_RSA_WITH_AES_256_CBC_SHA",
971
        GNUTLS_CIPHER_AES_256_CBC, GNUTLS_KX_RSA, GNUTLS_MAC_SHA1,
972
        GNUTLS_SSL3, GNUTLS_DTLS_VERSION_MIN),
973
974
  ENTRY(GNUTLS_RSA_CAMELLIA_128_CBC_SHA256,
975
        "TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256",
976
        GNUTLS_CIPHER_CAMELLIA_128_CBC, GNUTLS_KX_RSA, GNUTLS_MAC_SHA256,
977
        GNUTLS_TLS1_2, GNUTLS_DTLS1_2),
978
  ENTRY(GNUTLS_RSA_CAMELLIA_256_CBC_SHA256,
979
        "TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256",
980
        GNUTLS_CIPHER_CAMELLIA_256_CBC, GNUTLS_KX_RSA, GNUTLS_MAC_SHA256,
981
        GNUTLS_TLS1_2, GNUTLS_DTLS1_2),
982
  ENTRY(GNUTLS_RSA_CAMELLIA_128_CBC_SHA1,
983
        "TLS_RSA_WITH_CAMELLIA_128_CBC_SHA",
984
        GNUTLS_CIPHER_CAMELLIA_128_CBC, GNUTLS_KX_RSA, GNUTLS_MAC_SHA1,
985
        GNUTLS_SSL3, GNUTLS_DTLS_VERSION_MIN),
986
  ENTRY(GNUTLS_RSA_CAMELLIA_256_CBC_SHA1,
987
        "TLS_RSA_WITH_CAMELLIA_256_CBC_SHA",
988
        GNUTLS_CIPHER_CAMELLIA_256_CBC, GNUTLS_KX_RSA, GNUTLS_MAC_SHA1,
989
        GNUTLS_SSL3, GNUTLS_DTLS_VERSION_MIN),
990
  ENTRY(GNUTLS_RSA_AES_128_CBC_SHA256, "TLS_RSA_WITH_AES_128_CBC_SHA256",
991
        GNUTLS_CIPHER_AES_128_CBC, GNUTLS_KX_RSA, GNUTLS_MAC_SHA256,
992
        GNUTLS_TLS1_2, GNUTLS_DTLS1_2),
993
  ENTRY(GNUTLS_RSA_AES_256_CBC_SHA256, "TLS_RSA_WITH_AES_256_CBC_SHA256",
994
        GNUTLS_CIPHER_AES_256_CBC, GNUTLS_KX_RSA, GNUTLS_MAC_SHA256,
995
        GNUTLS_TLS1_2, GNUTLS_DTLS1_2),
996
997
  /* GCM */
998
  ENTRY(GNUTLS_RSA_AES_128_GCM_SHA256, "TLS_RSA_WITH_AES_128_GCM_SHA256",
999
        GNUTLS_CIPHER_AES_128_GCM, GNUTLS_KX_RSA, GNUTLS_MAC_AEAD,
1000
        GNUTLS_TLS1_2, GNUTLS_DTLS1_2),
1001
  ENTRY_PRF(GNUTLS_RSA_AES_256_GCM_SHA384,
1002
      "TLS_RSA_WITH_AES_256_GCM_SHA384", GNUTLS_CIPHER_AES_256_GCM,
1003
      GNUTLS_KX_RSA, GNUTLS_MAC_AEAD, GNUTLS_TLS1_2, GNUTLS_DTLS1_2,
1004
      GNUTLS_MAC_SHA384),
1005
  ENTRY(GNUTLS_RSA_CAMELLIA_128_GCM_SHA256,
1006
        "TLS_RSA_WITH_CAMELLIA_128_GCM_SHA256",
1007
        GNUTLS_CIPHER_CAMELLIA_128_GCM, GNUTLS_KX_RSA, GNUTLS_MAC_AEAD,
1008
        GNUTLS_TLS1_2, GNUTLS_DTLS1_2),
1009
  ENTRY_PRF(GNUTLS_RSA_CAMELLIA_256_GCM_SHA384,
1010
      "TLS_RSA_WITH_CAMELLIA_256_GCM_SHA384",
1011
      GNUTLS_CIPHER_CAMELLIA_256_GCM, GNUTLS_KX_RSA,
1012
      GNUTLS_MAC_AEAD, GNUTLS_TLS1_2, GNUTLS_DTLS1_2,
1013
      GNUTLS_MAC_SHA384),
1014
1015
  /* CCM */
1016
  ENTRY(GNUTLS_RSA_AES_128_CCM, "TLS_RSA_WITH_AES_128_CCM",
1017
        GNUTLS_CIPHER_AES_128_CCM, GNUTLS_KX_RSA, GNUTLS_MAC_AEAD,
1018
        GNUTLS_TLS1_2, GNUTLS_DTLS1_2),
1019
  ENTRY(GNUTLS_RSA_AES_256_CCM, "TLS_RSA_WITH_AES_256_CCM",
1020
        GNUTLS_CIPHER_AES_256_CCM, GNUTLS_KX_RSA, GNUTLS_MAC_AEAD,
1021
        GNUTLS_TLS1_2, GNUTLS_DTLS1_2),
1022
1023
  /* CCM_8 */
1024
  ENTRY(GNUTLS_RSA_AES_128_CCM_8, "TLS_RSA_WITH_AES_128_CCM_8",
1025
        GNUTLS_CIPHER_AES_128_CCM_8, GNUTLS_KX_RSA, GNUTLS_MAC_AEAD,
1026
        GNUTLS_TLS1_2, GNUTLS_DTLS1_2),
1027
  ENTRY(GNUTLS_RSA_AES_256_CCM_8, "TLS_RSA_WITH_AES_256_CCM_8",
1028
        GNUTLS_CIPHER_AES_256_CCM_8, GNUTLS_KX_RSA, GNUTLS_MAC_AEAD,
1029
        GNUTLS_TLS1_2, GNUTLS_DTLS1_2),
1030
1031
/* DHE_DSS */
1032
#ifdef ENABLE_DHE
1033
  ENTRY(GNUTLS_DHE_DSS_ARCFOUR_128_SHA1, "TLS_DHE_DSS_RC4_128_SHA",
1034
        GNUTLS_CIPHER_ARCFOUR_128, GNUTLS_KX_DHE_DSS, GNUTLS_MAC_SHA1,
1035
        GNUTLS_SSL3, GNUTLS_VERSION_UNKNOWN),
1036
  ENTRY(GNUTLS_DHE_DSS_3DES_EDE_CBC_SHA1,
1037
        "TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA", GNUTLS_CIPHER_3DES_CBC,
1038
        GNUTLS_KX_DHE_DSS, GNUTLS_MAC_SHA1, GNUTLS_SSL3,
1039
        GNUTLS_DTLS_VERSION_MIN),
1040
  ENTRY(GNUTLS_DHE_DSS_AES_128_CBC_SHA1,
1041
        "TLS_DHE_DSS_WITH_AES_128_CBC_SHA", GNUTLS_CIPHER_AES_128_CBC,
1042
        GNUTLS_KX_DHE_DSS, GNUTLS_MAC_SHA1, GNUTLS_SSL3,
1043
        GNUTLS_DTLS_VERSION_MIN),
1044
  ENTRY(GNUTLS_DHE_DSS_AES_256_CBC_SHA1,
1045
        "TLS_DHE_DSS_WITH_AES_256_CBC_SHA", GNUTLS_CIPHER_AES_256_CBC,
1046
        GNUTLS_KX_DHE_DSS, GNUTLS_MAC_SHA1, GNUTLS_SSL3,
1047
        GNUTLS_DTLS_VERSION_MIN),
1048
  ENTRY(GNUTLS_DHE_DSS_CAMELLIA_128_CBC_SHA256,
1049
        "TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256",
1050
        GNUTLS_CIPHER_CAMELLIA_128_CBC, GNUTLS_KX_DHE_DSS,
1051
        GNUTLS_MAC_SHA256, GNUTLS_TLS1_2, GNUTLS_DTLS1_2),
1052
  ENTRY(GNUTLS_DHE_DSS_CAMELLIA_256_CBC_SHA256,
1053
        "TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256",
1054
        GNUTLS_CIPHER_CAMELLIA_256_CBC, GNUTLS_KX_DHE_DSS,
1055
        GNUTLS_MAC_SHA256, GNUTLS_TLS1_2, GNUTLS_DTLS1_2),
1056
1057
  ENTRY(GNUTLS_DHE_DSS_CAMELLIA_128_CBC_SHA1,
1058
        "TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA",
1059
        GNUTLS_CIPHER_CAMELLIA_128_CBC, GNUTLS_KX_DHE_DSS,
1060
        GNUTLS_MAC_SHA1, GNUTLS_SSL3, GNUTLS_DTLS_VERSION_MIN),
1061
  ENTRY(GNUTLS_DHE_DSS_CAMELLIA_256_CBC_SHA1,
1062
        "TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA",
1063
        GNUTLS_CIPHER_CAMELLIA_256_CBC, GNUTLS_KX_DHE_DSS,
1064
        GNUTLS_MAC_SHA1, GNUTLS_SSL3, GNUTLS_DTLS_VERSION_MIN),
1065
  ENTRY(GNUTLS_DHE_DSS_AES_128_CBC_SHA256,
1066
        "TLS_DHE_DSS_WITH_AES_128_CBC_SHA256", GNUTLS_CIPHER_AES_128_CBC,
1067
        GNUTLS_KX_DHE_DSS, GNUTLS_MAC_SHA256, GNUTLS_TLS1_2,
1068
        GNUTLS_DTLS1_2),
1069
  ENTRY(GNUTLS_DHE_DSS_AES_256_CBC_SHA256,
1070
        "TLS_DHE_DSS_WITH_AES_256_CBC_SHA256", GNUTLS_CIPHER_AES_256_CBC,
1071
        GNUTLS_KX_DHE_DSS, GNUTLS_MAC_SHA256, GNUTLS_TLS1_2,
1072
        GNUTLS_DTLS1_2),
1073
  /* GCM */
1074
  ENTRY(GNUTLS_DHE_DSS_AES_128_GCM_SHA256,
1075
        "TLS_DHE_DSS_WITH_AES_128_GCM_SHA256", GNUTLS_CIPHER_AES_128_GCM,
1076
        GNUTLS_KX_DHE_DSS, GNUTLS_MAC_AEAD, GNUTLS_TLS1_2,
1077
        GNUTLS_DTLS1_2),
1078
  ENTRY_PRF(GNUTLS_DHE_DSS_AES_256_GCM_SHA384,
1079
      "TLS_DHE_DSS_WITH_AES_256_GCM_SHA384",
1080
      GNUTLS_CIPHER_AES_256_GCM, GNUTLS_KX_DHE_DSS, GNUTLS_MAC_AEAD,
1081
      GNUTLS_TLS1_2, GNUTLS_DTLS1_2, GNUTLS_MAC_SHA384),
1082
  ENTRY(GNUTLS_DHE_DSS_CAMELLIA_128_GCM_SHA256,
1083
        "TLS_DHE_DSS_WITH_CAMELLIA_128_GCM_SHA256",
1084
        GNUTLS_CIPHER_CAMELLIA_128_GCM, GNUTLS_KX_DHE_DSS,
1085
        GNUTLS_MAC_AEAD, GNUTLS_TLS1_2, GNUTLS_DTLS1_2),
1086
  ENTRY_PRF(GNUTLS_DHE_DSS_CAMELLIA_256_GCM_SHA384,
1087
      "TLS_DHE_DSS_WITH_CAMELLIA_256_GCM_SHA384",
1088
      GNUTLS_CIPHER_CAMELLIA_256_GCM, GNUTLS_KX_DHE_DSS,
1089
      GNUTLS_MAC_AEAD, GNUTLS_TLS1_2, GNUTLS_DTLS1_2,
1090
      GNUTLS_MAC_SHA384),
1091
1092
  /* DHE_RSA */
1093
  ENTRY(GNUTLS_DHE_RSA_3DES_EDE_CBC_SHA1,
1094
        "TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA", GNUTLS_CIPHER_3DES_CBC,
1095
        GNUTLS_KX_DHE_RSA, GNUTLS_MAC_SHA1, GNUTLS_SSL3,
1096
        GNUTLS_DTLS_VERSION_MIN),
1097
  ENTRY(GNUTLS_DHE_RSA_AES_128_CBC_SHA1,
1098
        "TLS_DHE_RSA_WITH_AES_128_CBC_SHA", GNUTLS_CIPHER_AES_128_CBC,
1099
        GNUTLS_KX_DHE_RSA, GNUTLS_MAC_SHA1, GNUTLS_SSL3,
1100
        GNUTLS_DTLS_VERSION_MIN),
1101
  ENTRY(GNUTLS_DHE_RSA_AES_256_CBC_SHA1,
1102
        "TLS_DHE_RSA_WITH_AES_256_CBC_SHA", GNUTLS_CIPHER_AES_256_CBC,
1103
        GNUTLS_KX_DHE_RSA, GNUTLS_MAC_SHA1, GNUTLS_SSL3,
1104
        GNUTLS_DTLS_VERSION_MIN),
1105
  ENTRY(GNUTLS_DHE_RSA_CAMELLIA_128_CBC_SHA256,
1106
        "TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256",
1107
        GNUTLS_CIPHER_CAMELLIA_128_CBC, GNUTLS_KX_DHE_RSA,
1108
        GNUTLS_MAC_SHA256, GNUTLS_TLS1_2, GNUTLS_DTLS1_2),
1109
  ENTRY(GNUTLS_DHE_RSA_CAMELLIA_256_CBC_SHA256,
1110
        "TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256",
1111
        GNUTLS_CIPHER_CAMELLIA_256_CBC, GNUTLS_KX_DHE_RSA,
1112
        GNUTLS_MAC_SHA256, GNUTLS_TLS1_2, GNUTLS_DTLS1_2),
1113
  ENTRY(GNUTLS_DHE_RSA_CAMELLIA_128_CBC_SHA1,
1114
        "TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA",
1115
        GNUTLS_CIPHER_CAMELLIA_128_CBC, GNUTLS_KX_DHE_RSA,
1116
        GNUTLS_MAC_SHA1, GNUTLS_SSL3, GNUTLS_DTLS_VERSION_MIN),
1117
  ENTRY(GNUTLS_DHE_RSA_CAMELLIA_256_CBC_SHA1,
1118
        "TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA",
1119
        GNUTLS_CIPHER_CAMELLIA_256_CBC, GNUTLS_KX_DHE_RSA,
1120
        GNUTLS_MAC_SHA1, GNUTLS_SSL3, GNUTLS_DTLS_VERSION_MIN),
1121
  ENTRY(GNUTLS_DHE_RSA_AES_128_CBC_SHA256,
1122
        "TLS_DHE_RSA_WITH_AES_128_CBC_SHA256", GNUTLS_CIPHER_AES_128_CBC,
1123
        GNUTLS_KX_DHE_RSA, GNUTLS_MAC_SHA256, GNUTLS_TLS1_2,
1124
        GNUTLS_DTLS1_2),
1125
  ENTRY(GNUTLS_DHE_RSA_AES_256_CBC_SHA256,
1126
        "TLS_DHE_RSA_WITH_AES_256_CBC_SHA256", GNUTLS_CIPHER_AES_256_CBC,
1127
        GNUTLS_KX_DHE_RSA, GNUTLS_MAC_SHA256, GNUTLS_TLS1_2,
1128
        GNUTLS_DTLS1_2),
1129
  /* GCM */
1130
  ENTRY(GNUTLS_DHE_RSA_AES_128_GCM_SHA256,
1131
        "TLS_DHE_RSA_WITH_AES_128_GCM_SHA256", GNUTLS_CIPHER_AES_128_GCM,
1132
        GNUTLS_KX_DHE_RSA, GNUTLS_MAC_AEAD, GNUTLS_TLS1_2,
1133
        GNUTLS_DTLS1_2),
1134
  ENTRY_PRF(GNUTLS_DHE_RSA_AES_256_GCM_SHA384,
1135
      "TLS_DHE_RSA_WITH_AES_256_GCM_SHA384",
1136
      GNUTLS_CIPHER_AES_256_GCM, GNUTLS_KX_DHE_RSA, GNUTLS_MAC_AEAD,
1137
      GNUTLS_TLS1_2, GNUTLS_DTLS1_2, GNUTLS_MAC_SHA384),
1138
  ENTRY(GNUTLS_DHE_RSA_CAMELLIA_128_GCM_SHA256,
1139
        "TLS_DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256",
1140
        GNUTLS_CIPHER_CAMELLIA_128_GCM, GNUTLS_KX_DHE_RSA,
1141
        GNUTLS_MAC_AEAD, GNUTLS_TLS1_2, GNUTLS_DTLS1_2),
1142
  ENTRY_PRF(GNUTLS_DHE_RSA_CAMELLIA_256_GCM_SHA384,
1143
      "TLS_DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384",
1144
      GNUTLS_CIPHER_CAMELLIA_256_GCM, GNUTLS_KX_DHE_RSA,
1145
      GNUTLS_MAC_AEAD, GNUTLS_TLS1_2, GNUTLS_DTLS1_2,
1146
      GNUTLS_MAC_SHA384),
1147
1148
  ENTRY(GNUTLS_DHE_RSA_CHACHA20_POLY1305,
1149
        "TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256",
1150
        GNUTLS_CIPHER_CHACHA20_POLY1305, GNUTLS_KX_DHE_RSA,
1151
        GNUTLS_MAC_AEAD, GNUTLS_TLS1_2, GNUTLS_DTLS1_2),
1152
1153
  /* CCM */
1154
  ENTRY(GNUTLS_DHE_RSA_AES_128_CCM, "TLS_DHE_RSA_WITH_AES_128_CCM",
1155
        GNUTLS_CIPHER_AES_128_CCM, GNUTLS_KX_DHE_RSA, GNUTLS_MAC_AEAD,
1156
        GNUTLS_TLS1_2, GNUTLS_DTLS1_2),
1157
  ENTRY(GNUTLS_DHE_RSA_AES_256_CCM, "TLS_DHE_RSA_WITH_AES_256_CCM",
1158
        GNUTLS_CIPHER_AES_256_CCM, GNUTLS_KX_DHE_RSA, GNUTLS_MAC_AEAD,
1159
        GNUTLS_TLS1_2, GNUTLS_DTLS1_2),
1160
  ENTRY(GNUTLS_DHE_RSA_AES_128_CCM_8, "TLS_DHE_RSA_WITH_AES_128_CCM_8",
1161
        GNUTLS_CIPHER_AES_128_CCM_8, GNUTLS_KX_DHE_RSA, GNUTLS_MAC_AEAD,
1162
        GNUTLS_TLS1_2, GNUTLS_DTLS1_2),
1163
  ENTRY(GNUTLS_DHE_RSA_AES_256_CCM_8, "TLS_DHE_RSA_WITH_AES_256_CCM_8",
1164
        GNUTLS_CIPHER_AES_256_CCM_8, GNUTLS_KX_DHE_RSA, GNUTLS_MAC_AEAD,
1165
        GNUTLS_TLS1_2, GNUTLS_DTLS1_2),
1166
1167
#endif /* DHE */
1168
#ifdef ENABLE_ECDHE
1169
  /* ECC-RSA */
1170
  ENTRY(GNUTLS_ECDHE_RSA_NULL_SHA1, "TLS_ECDHE_RSA_WITH_NULL_SHA",
1171
        GNUTLS_CIPHER_NULL, GNUTLS_KX_ECDHE_RSA, GNUTLS_MAC_SHA1,
1172
        GNUTLS_SSL3, GNUTLS_DTLS_VERSION_MIN),
1173
  ENTRY(GNUTLS_ECDHE_RSA_3DES_EDE_CBC_SHA1,
1174
        "TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA", GNUTLS_CIPHER_3DES_CBC,
1175
        GNUTLS_KX_ECDHE_RSA, GNUTLS_MAC_SHA1, GNUTLS_SSL3,
1176
        GNUTLS_DTLS_VERSION_MIN),
1177
  ENTRY(GNUTLS_ECDHE_RSA_AES_128_CBC_SHA1,
1178
        "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA", GNUTLS_CIPHER_AES_128_CBC,
1179
        GNUTLS_KX_ECDHE_RSA, GNUTLS_MAC_SHA1, GNUTLS_SSL3,
1180
        GNUTLS_DTLS_VERSION_MIN),
1181
  ENTRY(GNUTLS_ECDHE_RSA_AES_256_CBC_SHA1,
1182
        "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA", GNUTLS_CIPHER_AES_256_CBC,
1183
        GNUTLS_KX_ECDHE_RSA, GNUTLS_MAC_SHA1, GNUTLS_SSL3,
1184
        GNUTLS_DTLS_VERSION_MIN),
1185
  ENTRY_PRF(GNUTLS_ECDHE_RSA_AES_256_CBC_SHA384,
1186
      "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384",
1187
      GNUTLS_CIPHER_AES_256_CBC, GNUTLS_KX_ECDHE_RSA,
1188
      GNUTLS_MAC_SHA384, GNUTLS_TLS1_2, GNUTLS_DTLS1_2,
1189
      GNUTLS_MAC_SHA384),
1190
  ENTRY(GNUTLS_ECDHE_RSA_ARCFOUR_128_SHA1,
1191
        "TLS_ECDHE_RSA_WITH_RC4_128_SHA", GNUTLS_CIPHER_ARCFOUR,
1192
        GNUTLS_KX_ECDHE_RSA, GNUTLS_MAC_SHA1, GNUTLS_SSL3,
1193
        GNUTLS_VERSION_UNKNOWN),
1194
  ENTRY(GNUTLS_ECDHE_RSA_CAMELLIA_128_CBC_SHA256,
1195
        "TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256",
1196
        GNUTLS_CIPHER_CAMELLIA_128_CBC, GNUTLS_KX_ECDHE_RSA,
1197
        GNUTLS_MAC_SHA256, GNUTLS_TLS1_2, GNUTLS_DTLS1_2),
1198
  ENTRY_PRF(GNUTLS_ECDHE_RSA_CAMELLIA_256_CBC_SHA384,
1199
      "TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384",
1200
      GNUTLS_CIPHER_CAMELLIA_256_CBC, GNUTLS_KX_ECDHE_RSA,
1201
      GNUTLS_MAC_SHA384, GNUTLS_TLS1_2, GNUTLS_DTLS1_2,
1202
      GNUTLS_MAC_SHA384),
1203
1204
  /* ECDHE-ECDSA */
1205
  ENTRY(GNUTLS_ECDHE_ECDSA_NULL_SHA1, "TLS_ECDHE_ECDSA_WITH_NULL_SHA",
1206
        GNUTLS_CIPHER_NULL, GNUTLS_KX_ECDHE_ECDSA, GNUTLS_MAC_SHA1,
1207
        GNUTLS_SSL3, GNUTLS_DTLS_VERSION_MIN),
1208
  ENTRY(GNUTLS_ECDHE_ECDSA_3DES_EDE_CBC_SHA1,
1209
        "TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA", GNUTLS_CIPHER_3DES_CBC,
1210
        GNUTLS_KX_ECDHE_ECDSA, GNUTLS_MAC_SHA1, GNUTLS_SSL3,
1211
        GNUTLS_DTLS_VERSION_MIN),
1212
  ENTRY(GNUTLS_ECDHE_ECDSA_AES_128_CBC_SHA1,
1213
        "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA", GNUTLS_CIPHER_AES_128_CBC,
1214
        GNUTLS_KX_ECDHE_ECDSA, GNUTLS_MAC_SHA1, GNUTLS_SSL3,
1215
        GNUTLS_DTLS_VERSION_MIN),
1216
  ENTRY(GNUTLS_ECDHE_ECDSA_AES_256_CBC_SHA1,
1217
        "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA", GNUTLS_CIPHER_AES_256_CBC,
1218
        GNUTLS_KX_ECDHE_ECDSA, GNUTLS_MAC_SHA1, GNUTLS_SSL3,
1219
        GNUTLS_DTLS_VERSION_MIN),
1220
  ENTRY(GNUTLS_ECDHE_ECDSA_ARCFOUR_128_SHA1,
1221
        "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA", GNUTLS_CIPHER_ARCFOUR,
1222
        GNUTLS_KX_ECDHE_ECDSA, GNUTLS_MAC_SHA1, GNUTLS_SSL3,
1223
        GNUTLS_VERSION_UNKNOWN),
1224
  ENTRY(GNUTLS_ECDHE_ECDSA_CAMELLIA_128_CBC_SHA256,
1225
        "TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256",
1226
        GNUTLS_CIPHER_CAMELLIA_128_CBC, GNUTLS_KX_ECDHE_ECDSA,
1227
        GNUTLS_MAC_SHA256, GNUTLS_TLS1_2, GNUTLS_DTLS1_2),
1228
  ENTRY_PRF(GNUTLS_ECDHE_ECDSA_CAMELLIA_256_CBC_SHA384,
1229
      "TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384",
1230
      GNUTLS_CIPHER_CAMELLIA_256_CBC, GNUTLS_KX_ECDHE_ECDSA,
1231
      GNUTLS_MAC_SHA384, GNUTLS_TLS1_2, GNUTLS_DTLS1_2,
1232
      GNUTLS_MAC_SHA384),
1233
1234
  /* More ECC */
1235
1236
  ENTRY(GNUTLS_ECDHE_ECDSA_AES_128_CBC_SHA256,
1237
        "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256",
1238
        GNUTLS_CIPHER_AES_128_CBC, GNUTLS_KX_ECDHE_ECDSA,
1239
        GNUTLS_MAC_SHA256, GNUTLS_TLS1_2, GNUTLS_DTLS1_2),
1240
  ENTRY(GNUTLS_ECDHE_RSA_AES_128_CBC_SHA256,
1241
        "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256",
1242
        GNUTLS_CIPHER_AES_128_CBC, GNUTLS_KX_ECDHE_RSA, GNUTLS_MAC_SHA256,
1243
        GNUTLS_TLS1_2, GNUTLS_DTLS1_2),
1244
  ENTRY(GNUTLS_ECDHE_ECDSA_CAMELLIA_128_GCM_SHA256,
1245
        "TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256",
1246
        GNUTLS_CIPHER_CAMELLIA_128_GCM, GNUTLS_KX_ECDHE_ECDSA,
1247
        GNUTLS_MAC_AEAD, GNUTLS_TLS1_2, GNUTLS_DTLS1_2),
1248
  ENTRY_PRF(GNUTLS_ECDHE_ECDSA_CAMELLIA_256_GCM_SHA384,
1249
      "TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384",
1250
      GNUTLS_CIPHER_CAMELLIA_256_GCM, GNUTLS_KX_ECDHE_ECDSA,
1251
      GNUTLS_MAC_AEAD, GNUTLS_TLS1_2, GNUTLS_DTLS1_2,
1252
      GNUTLS_MAC_SHA384),
1253
  ENTRY(GNUTLS_ECDHE_ECDSA_AES_128_GCM_SHA256,
1254
        "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256",
1255
        GNUTLS_CIPHER_AES_128_GCM, GNUTLS_KX_ECDHE_ECDSA, GNUTLS_MAC_AEAD,
1256
        GNUTLS_TLS1_2, GNUTLS_DTLS1_2),
1257
  ENTRY_PRF(GNUTLS_ECDHE_ECDSA_AES_256_GCM_SHA384,
1258
      "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384",
1259
      GNUTLS_CIPHER_AES_256_GCM, GNUTLS_KX_ECDHE_ECDSA,
1260
      GNUTLS_MAC_AEAD, GNUTLS_TLS1_2, GNUTLS_DTLS1_2,
1261
      GNUTLS_MAC_SHA384),
1262
  ENTRY(GNUTLS_ECDHE_RSA_AES_128_GCM_SHA256,
1263
        "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256",
1264
        GNUTLS_CIPHER_AES_128_GCM, GNUTLS_KX_ECDHE_RSA, GNUTLS_MAC_AEAD,
1265
        GNUTLS_TLS1_2, GNUTLS_DTLS1_2),
1266
  ENTRY_PRF(GNUTLS_ECDHE_RSA_AES_256_GCM_SHA384,
1267
      "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384",
1268
      GNUTLS_CIPHER_AES_256_GCM, GNUTLS_KX_ECDHE_RSA,
1269
      GNUTLS_MAC_AEAD, GNUTLS_TLS1_2, GNUTLS_DTLS1_2,
1270
      GNUTLS_MAC_SHA384),
1271
  ENTRY_PRF(GNUTLS_ECDHE_ECDSA_AES_256_CBC_SHA384,
1272
      "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384",
1273
      GNUTLS_CIPHER_AES_256_CBC, GNUTLS_KX_ECDHE_ECDSA,
1274
      GNUTLS_MAC_SHA384, GNUTLS_TLS1_2, GNUTLS_DTLS1_2,
1275
      GNUTLS_MAC_SHA384),
1276
1277
  ENTRY(GNUTLS_ECDHE_RSA_CAMELLIA_128_GCM_SHA256,
1278
        "TLS_ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256",
1279
        GNUTLS_CIPHER_CAMELLIA_128_GCM, GNUTLS_KX_ECDHE_RSA,
1280
        GNUTLS_MAC_AEAD, GNUTLS_TLS1_2, GNUTLS_DTLS1_2),
1281
  ENTRY_PRF(GNUTLS_ECDHE_RSA_CAMELLIA_256_GCM_SHA384,
1282
      "TLS_ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384",
1283
      GNUTLS_CIPHER_CAMELLIA_256_GCM, GNUTLS_KX_ECDHE_RSA,
1284
      GNUTLS_MAC_AEAD, GNUTLS_TLS1_2, GNUTLS_DTLS1_2,
1285
      GNUTLS_MAC_SHA384),
1286
1287
  ENTRY(GNUTLS_ECDHE_RSA_CHACHA20_POLY1305,
1288
        "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256",
1289
        GNUTLS_CIPHER_CHACHA20_POLY1305, GNUTLS_KX_ECDHE_RSA,
1290
        GNUTLS_MAC_AEAD, GNUTLS_TLS1_2, GNUTLS_DTLS1_2),
1291
1292
  ENTRY(GNUTLS_ECDHE_ECDSA_CHACHA20_POLY1305,
1293
        "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256",
1294
        GNUTLS_CIPHER_CHACHA20_POLY1305, GNUTLS_KX_ECDHE_ECDSA,
1295
        GNUTLS_MAC_AEAD, GNUTLS_TLS1_2, GNUTLS_DTLS1_2),
1296
1297
  ENTRY(GNUTLS_ECDHE_ECDSA_AES_128_CCM,
1298
        "TLS_ECDHE_ECDSA_WITH_AES_128_CCM", GNUTLS_CIPHER_AES_128_CCM,
1299
        GNUTLS_KX_ECDHE_ECDSA, GNUTLS_MAC_AEAD, GNUTLS_TLS1_2,
1300
        GNUTLS_DTLS1_2),
1301
  ENTRY(GNUTLS_ECDHE_ECDSA_AES_256_CCM,
1302
        "TLS_ECDHE_ECDSA_WITH_AES_256_CCM", GNUTLS_CIPHER_AES_256_CCM,
1303
        GNUTLS_KX_ECDHE_ECDSA, GNUTLS_MAC_AEAD, GNUTLS_TLS1_2,
1304
        GNUTLS_DTLS1_2),
1305
  ENTRY(GNUTLS_ECDHE_ECDSA_AES_128_CCM_8,
1306
        "TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8", GNUTLS_CIPHER_AES_128_CCM_8,
1307
        GNUTLS_KX_ECDHE_ECDSA, GNUTLS_MAC_AEAD, GNUTLS_TLS1_2,
1308
        GNUTLS_DTLS1_2),
1309
  ENTRY(GNUTLS_ECDHE_ECDSA_AES_256_CCM_8,
1310
        "TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8", GNUTLS_CIPHER_AES_256_CCM_8,
1311
        GNUTLS_KX_ECDHE_ECDSA, GNUTLS_MAC_AEAD, GNUTLS_TLS1_2,
1312
        GNUTLS_DTLS1_2),
1313
#endif
1314
#ifdef ENABLE_PSK
1315
  /* ECC - PSK */
1316
  ENTRY(GNUTLS_ECDHE_PSK_3DES_EDE_CBC_SHA1,
1317
        "TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA", GNUTLS_CIPHER_3DES_CBC,
1318
        GNUTLS_KX_ECDHE_PSK, GNUTLS_MAC_SHA1, GNUTLS_SSL3,
1319
        GNUTLS_DTLS_VERSION_MIN),
1320
  ENTRY(GNUTLS_ECDHE_PSK_AES_128_CBC_SHA1,
1321
        "TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA", GNUTLS_CIPHER_AES_128_CBC,
1322
        GNUTLS_KX_ECDHE_PSK, GNUTLS_MAC_SHA1, GNUTLS_SSL3,
1323
        GNUTLS_DTLS_VERSION_MIN),
1324
  ENTRY(GNUTLS_ECDHE_PSK_AES_256_CBC_SHA1,
1325
        "TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA", GNUTLS_CIPHER_AES_256_CBC,
1326
        GNUTLS_KX_ECDHE_PSK, GNUTLS_MAC_SHA1, GNUTLS_SSL3,
1327
        GNUTLS_DTLS_VERSION_MIN),
1328
  ENTRY(GNUTLS_ECDHE_PSK_AES_128_CBC_SHA256,
1329
        "TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256",
1330
        GNUTLS_CIPHER_AES_128_CBC, GNUTLS_KX_ECDHE_PSK, GNUTLS_MAC_SHA256,
1331
        GNUTLS_TLS1_2, GNUTLS_DTLS1_2),
1332
  ENTRY_PRF(GNUTLS_ECDHE_PSK_AES_256_CBC_SHA384,
1333
      "TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384",
1334
      GNUTLS_CIPHER_AES_256_CBC, GNUTLS_KX_ECDHE_PSK,
1335
      GNUTLS_MAC_SHA384, GNUTLS_TLS1_2, GNUTLS_DTLS1_2,
1336
      GNUTLS_MAC_SHA384),
1337
  ENTRY(GNUTLS_ECDHE_PSK_ARCFOUR_128_SHA1,
1338
        "TLS_ECDHE_PSK_WITH_RC4_128_SHA", GNUTLS_CIPHER_ARCFOUR,
1339
        GNUTLS_KX_ECDHE_PSK, GNUTLS_MAC_SHA1, GNUTLS_SSL3,
1340
        GNUTLS_VERSION_UNKNOWN),
1341
  ENTRY(GNUTLS_ECDHE_PSK_NULL_SHA1, "TLS_ECDHE_PSK_WITH_NULL_SHA",
1342
        GNUTLS_CIPHER_NULL, GNUTLS_KX_ECDHE_PSK, GNUTLS_MAC_SHA1,
1343
        GNUTLS_SSL3, GNUTLS_DTLS_VERSION_MIN),
1344
  ENTRY(GNUTLS_ECDHE_PSK_NULL_SHA256, "TLS_ECDHE_PSK_WITH_NULL_SHA256",
1345
        GNUTLS_CIPHER_NULL, GNUTLS_KX_ECDHE_PSK, GNUTLS_MAC_SHA256,
1346
        GNUTLS_TLS1_2, GNUTLS_DTLS1_2),
1347
  ENTRY_PRF(GNUTLS_ECDHE_PSK_NULL_SHA384,
1348
      "TLS_ECDHE_PSK_WITH_NULL_SHA384", GNUTLS_CIPHER_NULL,
1349
      GNUTLS_KX_ECDHE_PSK, GNUTLS_MAC_SHA384, GNUTLS_TLS1,
1350
      GNUTLS_DTLS1_2, GNUTLS_MAC_SHA384),
1351
  ENTRY(GNUTLS_ECDHE_PSK_CAMELLIA_128_CBC_SHA256,
1352
        "TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256",
1353
        GNUTLS_CIPHER_CAMELLIA_128_CBC, GNUTLS_KX_ECDHE_PSK,
1354
        GNUTLS_MAC_SHA256, GNUTLS_TLS1_2, GNUTLS_DTLS1_2),
1355
  ENTRY_PRF(GNUTLS_ECDHE_PSK_CAMELLIA_256_CBC_SHA384,
1356
      "TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384",
1357
      GNUTLS_CIPHER_CAMELLIA_256_CBC, GNUTLS_KX_ECDHE_PSK,
1358
      GNUTLS_MAC_SHA384, GNUTLS_TLS1_2, GNUTLS_DTLS1_2,
1359
      GNUTLS_MAC_SHA384),
1360
1361
  /* PSK */
1362
  ENTRY(GNUTLS_PSK_ARCFOUR_128_SHA1, "TLS_PSK_WITH_RC4_128_SHA",
1363
        GNUTLS_CIPHER_ARCFOUR, GNUTLS_KX_PSK, GNUTLS_MAC_SHA1,
1364
        GNUTLS_SSL3, GNUTLS_VERSION_UNKNOWN),
1365
  ENTRY(GNUTLS_PSK_3DES_EDE_CBC_SHA1, "TLS_PSK_WITH_3DES_EDE_CBC_SHA",
1366
        GNUTLS_CIPHER_3DES_CBC, GNUTLS_KX_PSK, GNUTLS_MAC_SHA1,
1367
        GNUTLS_SSL3, GNUTLS_DTLS_VERSION_MIN),
1368
  ENTRY(GNUTLS_PSK_AES_128_CBC_SHA1, "TLS_PSK_WITH_AES_128_CBC_SHA",
1369
        GNUTLS_CIPHER_AES_128_CBC, GNUTLS_KX_PSK, GNUTLS_MAC_SHA1,
1370
        GNUTLS_SSL3, GNUTLS_DTLS_VERSION_MIN),
1371
  ENTRY(GNUTLS_PSK_AES_256_CBC_SHA1, "TLS_PSK_WITH_AES_256_CBC_SHA",
1372
        GNUTLS_CIPHER_AES_256_CBC, GNUTLS_KX_PSK, GNUTLS_MAC_SHA1,
1373
        GNUTLS_SSL3, GNUTLS_DTLS_VERSION_MIN),
1374
  ENTRY(GNUTLS_PSK_AES_128_CBC_SHA256, "TLS_PSK_WITH_AES_128_CBC_SHA256",
1375
        GNUTLS_CIPHER_AES_128_CBC, GNUTLS_KX_PSK, GNUTLS_MAC_SHA256,
1376
        GNUTLS_TLS1_2, GNUTLS_DTLS1_2),
1377
  ENTRY_PRF(GNUTLS_PSK_AES_256_GCM_SHA384,
1378
      "TLS_PSK_WITH_AES_256_GCM_SHA384", GNUTLS_CIPHER_AES_256_GCM,
1379
      GNUTLS_KX_PSK, GNUTLS_MAC_AEAD, GNUTLS_TLS1_2, GNUTLS_DTLS1_2,
1380
      GNUTLS_MAC_SHA384),
1381
  ENTRY(GNUTLS_PSK_CAMELLIA_128_GCM_SHA256,
1382
        "TLS_PSK_WITH_CAMELLIA_128_GCM_SHA256",
1383
        GNUTLS_CIPHER_CAMELLIA_128_GCM, GNUTLS_KX_PSK, GNUTLS_MAC_AEAD,
1384
        GNUTLS_TLS1_2, GNUTLS_DTLS1_2),
1385
  ENTRY_PRF(GNUTLS_PSK_CAMELLIA_256_GCM_SHA384,
1386
      "TLS_PSK_WITH_CAMELLIA_256_GCM_SHA384",
1387
      GNUTLS_CIPHER_CAMELLIA_256_GCM, GNUTLS_KX_PSK,
1388
      GNUTLS_MAC_AEAD, GNUTLS_TLS1_2, GNUTLS_DTLS1_2,
1389
      GNUTLS_MAC_SHA384),
1390
1391
  ENTRY(GNUTLS_PSK_AES_128_GCM_SHA256, "TLS_PSK_WITH_AES_128_GCM_SHA256",
1392
        GNUTLS_CIPHER_AES_128_GCM, GNUTLS_KX_PSK, GNUTLS_MAC_AEAD,
1393
        GNUTLS_TLS1_2, GNUTLS_DTLS1_2),
1394
  ENTRY(GNUTLS_PSK_NULL_SHA1, "TLS_PSK_WITH_NULL_SHA", GNUTLS_CIPHER_NULL,
1395
        GNUTLS_KX_PSK, GNUTLS_MAC_SHA1, GNUTLS_SSL3,
1396
        GNUTLS_DTLS_VERSION_MIN),
1397
  ENTRY(GNUTLS_PSK_NULL_SHA256, "TLS_PSK_WITH_NULL_SHA256",
1398
        GNUTLS_CIPHER_NULL, GNUTLS_KX_PSK, GNUTLS_MAC_SHA256,
1399
        GNUTLS_TLS1_2, GNUTLS_DTLS1_2),
1400
  ENTRY(GNUTLS_PSK_CAMELLIA_128_CBC_SHA256,
1401
        "TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256",
1402
        GNUTLS_CIPHER_CAMELLIA_128_CBC, GNUTLS_KX_PSK, GNUTLS_MAC_SHA256,
1403
        GNUTLS_TLS1_2, GNUTLS_DTLS1_2),
1404
  ENTRY_PRF(GNUTLS_PSK_CAMELLIA_256_CBC_SHA384,
1405
      "TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384",
1406
      GNUTLS_CIPHER_CAMELLIA_256_CBC, GNUTLS_KX_PSK,
1407
      GNUTLS_MAC_SHA384, GNUTLS_TLS1_2, GNUTLS_DTLS1_2,
1408
      GNUTLS_MAC_SHA384),
1409
1410
  ENTRY_PRF(GNUTLS_PSK_AES_256_CBC_SHA384,
1411
      "TLS_PSK_WITH_AES_256_CBC_SHA384", GNUTLS_CIPHER_AES_256_CBC,
1412
      GNUTLS_KX_PSK, GNUTLS_MAC_SHA384, GNUTLS_TLS1_2,
1413
      GNUTLS_DTLS1_2, GNUTLS_MAC_SHA384),
1414
  ENTRY_PRF(GNUTLS_PSK_NULL_SHA384, "TLS_PSK_WITH_NULL_SHA384",
1415
      GNUTLS_CIPHER_NULL, GNUTLS_KX_PSK, GNUTLS_MAC_SHA384,
1416
      GNUTLS_TLS1_2, GNUTLS_DTLS1_2, GNUTLS_MAC_SHA384),
1417
1418
  /* RSA-PSK */
1419
  ENTRY(GNUTLS_RSA_PSK_ARCFOUR_128_SHA1, "TLS_RSA_PSK_WITH_RC4_128_SHA",
1420
        GNUTLS_CIPHER_ARCFOUR, GNUTLS_KX_RSA_PSK, GNUTLS_MAC_SHA1,
1421
        GNUTLS_TLS1, GNUTLS_VERSION_UNKNOWN),
1422
  ENTRY(GNUTLS_RSA_PSK_3DES_EDE_CBC_SHA1,
1423
        "TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA", GNUTLS_CIPHER_3DES_CBC,
1424
        GNUTLS_KX_RSA_PSK, GNUTLS_MAC_SHA1, GNUTLS_TLS1,
1425
        GNUTLS_DTLS_VERSION_MIN),
1426
  ENTRY(GNUTLS_RSA_PSK_AES_128_CBC_SHA1,
1427
        "TLS_RSA_PSK_WITH_AES_128_CBC_SHA", GNUTLS_CIPHER_AES_128_CBC,
1428
        GNUTLS_KX_RSA_PSK, GNUTLS_MAC_SHA1, GNUTLS_TLS1,
1429
        GNUTLS_DTLS_VERSION_MIN),
1430
  ENTRY(GNUTLS_RSA_PSK_AES_256_CBC_SHA1,
1431
        "TLS_RSA_PSK_WITH_AES_256_CBC_SHA", GNUTLS_CIPHER_AES_256_CBC,
1432
        GNUTLS_KX_RSA_PSK, GNUTLS_MAC_SHA1, GNUTLS_TLS1,
1433
        GNUTLS_DTLS_VERSION_MIN),
1434
  ENTRY(GNUTLS_RSA_PSK_CAMELLIA_128_GCM_SHA256,
1435
        "TLS_RSA_PSK_WITH_CAMELLIA_128_GCM_SHA256",
1436
        GNUTLS_CIPHER_CAMELLIA_128_GCM, GNUTLS_KX_RSA_PSK,
1437
        GNUTLS_MAC_AEAD, GNUTLS_TLS1_2, GNUTLS_DTLS1_2),
1438
  ENTRY_PRF(GNUTLS_RSA_PSK_CAMELLIA_256_GCM_SHA384,
1439
      "TLS_RSA_PSK_WITH_CAMELLIA_256_GCM_SHA384",
1440
      GNUTLS_CIPHER_CAMELLIA_256_GCM, GNUTLS_KX_RSA_PSK,
1441
      GNUTLS_MAC_AEAD, GNUTLS_TLS1_2, GNUTLS_DTLS1_2,
1442
      GNUTLS_MAC_SHA384),
1443
1444
  ENTRY(GNUTLS_RSA_PSK_AES_128_GCM_SHA256,
1445
        "TLS_RSA_PSK_WITH_AES_128_GCM_SHA256", GNUTLS_CIPHER_AES_128_GCM,
1446
        GNUTLS_KX_RSA_PSK, GNUTLS_MAC_AEAD, GNUTLS_TLS1_2,
1447
        GNUTLS_DTLS1_2),
1448
  ENTRY(GNUTLS_RSA_PSK_AES_128_CBC_SHA256,
1449
        "TLS_RSA_PSK_WITH_AES_128_CBC_SHA256", GNUTLS_CIPHER_AES_128_CBC,
1450
        GNUTLS_KX_RSA_PSK, GNUTLS_MAC_SHA256, GNUTLS_TLS1_2,
1451
        GNUTLS_DTLS1_2),
1452
  ENTRY(GNUTLS_RSA_PSK_NULL_SHA1, "TLS_RSA_PSK_WITH_NULL_SHA",
1453
        GNUTLS_CIPHER_NULL, GNUTLS_KX_RSA_PSK, GNUTLS_MAC_SHA1,
1454
        GNUTLS_TLS1, GNUTLS_DTLS_VERSION_MIN),
1455
  ENTRY(GNUTLS_RSA_PSK_NULL_SHA256, "TLS_RSA_PSK_WITH_NULL_SHA256",
1456
        GNUTLS_CIPHER_NULL, GNUTLS_KX_RSA_PSK, GNUTLS_MAC_SHA256,
1457
        GNUTLS_TLS1_2, GNUTLS_DTLS1_2),
1458
  ENTRY_PRF(GNUTLS_RSA_PSK_AES_256_GCM_SHA384,
1459
      "TLS_RSA_PSK_WITH_AES_256_GCM_SHA384",
1460
      GNUTLS_CIPHER_AES_256_GCM, GNUTLS_KX_RSA_PSK, GNUTLS_MAC_AEAD,
1461
      GNUTLS_TLS1_2, GNUTLS_DTLS1_2, GNUTLS_MAC_SHA384),
1462
  ENTRY_PRF(GNUTLS_RSA_PSK_AES_256_CBC_SHA384,
1463
      "TLS_RSA_PSK_WITH_AES_256_CBC_SHA384",
1464
      GNUTLS_CIPHER_AES_256_CBC, GNUTLS_KX_RSA_PSK,
1465
      GNUTLS_MAC_SHA384, GNUTLS_TLS1_2, GNUTLS_DTLS1_2,
1466
      GNUTLS_MAC_SHA384),
1467
  ENTRY_PRF(GNUTLS_RSA_PSK_NULL_SHA384, "TLS_RSA_PSK_WITH_NULL_SHA384",
1468
      GNUTLS_CIPHER_NULL, GNUTLS_KX_RSA_PSK, GNUTLS_MAC_SHA384,
1469
      GNUTLS_TLS1_2, GNUTLS_DTLS1_2, GNUTLS_MAC_SHA384),
1470
  ENTRY(GNUTLS_RSA_PSK_CAMELLIA_128_CBC_SHA256,
1471
        "TLS_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256",
1472
        GNUTLS_CIPHER_CAMELLIA_128_CBC, GNUTLS_KX_RSA_PSK,
1473
        GNUTLS_MAC_SHA256, GNUTLS_TLS1_2, GNUTLS_DTLS1_2),
1474
  ENTRY_PRF(GNUTLS_RSA_PSK_CAMELLIA_256_CBC_SHA384,
1475
      "TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384",
1476
      GNUTLS_CIPHER_CAMELLIA_256_CBC, GNUTLS_KX_RSA_PSK,
1477
      GNUTLS_MAC_SHA384, GNUTLS_TLS1_2, GNUTLS_DTLS1_2,
1478
      GNUTLS_MAC_SHA384),
1479
1480
  /* DHE-PSK */
1481
  ENTRY(GNUTLS_DHE_PSK_ARCFOUR_128_SHA1, "TLS_DHE_PSK_WITH_RC4_128_SHA",
1482
        GNUTLS_CIPHER_ARCFOUR, GNUTLS_KX_DHE_PSK, GNUTLS_MAC_SHA1,
1483
        GNUTLS_SSL3, GNUTLS_VERSION_UNKNOWN),
1484
  ENTRY(GNUTLS_DHE_PSK_3DES_EDE_CBC_SHA1,
1485
        "TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA", GNUTLS_CIPHER_3DES_CBC,
1486
        GNUTLS_KX_DHE_PSK, GNUTLS_MAC_SHA1, GNUTLS_SSL3,
1487
        GNUTLS_DTLS_VERSION_MIN),
1488
  ENTRY(GNUTLS_DHE_PSK_AES_128_CBC_SHA1,
1489
        "TLS_DHE_PSK_WITH_AES_128_CBC_SHA", GNUTLS_CIPHER_AES_128_CBC,
1490
        GNUTLS_KX_DHE_PSK, GNUTLS_MAC_SHA1, GNUTLS_SSL3,
1491
        GNUTLS_DTLS_VERSION_MIN),
1492
  ENTRY(GNUTLS_DHE_PSK_AES_256_CBC_SHA1,
1493
        "TLS_DHE_PSK_WITH_AES_256_CBC_SHA", GNUTLS_CIPHER_AES_256_CBC,
1494
        GNUTLS_KX_DHE_PSK, GNUTLS_MAC_SHA1, GNUTLS_SSL3,
1495
        GNUTLS_DTLS_VERSION_MIN),
1496
  ENTRY(GNUTLS_DHE_PSK_AES_128_CBC_SHA256,
1497
        "TLS_DHE_PSK_WITH_AES_128_CBC_SHA256", GNUTLS_CIPHER_AES_128_CBC,
1498
        GNUTLS_KX_DHE_PSK, GNUTLS_MAC_SHA256, GNUTLS_TLS1_2,
1499
        GNUTLS_DTLS1_2),
1500
  ENTRY(GNUTLS_DHE_PSK_AES_128_GCM_SHA256,
1501
        "TLS_DHE_PSK_WITH_AES_128_GCM_SHA256", GNUTLS_CIPHER_AES_128_GCM,
1502
        GNUTLS_KX_DHE_PSK, GNUTLS_MAC_AEAD, GNUTLS_TLS1_2,
1503
        GNUTLS_DTLS1_2),
1504
  ENTRY(GNUTLS_DHE_PSK_NULL_SHA1, "TLS_DHE_PSK_WITH_NULL_SHA",
1505
        GNUTLS_CIPHER_NULL, GNUTLS_KX_DHE_PSK, GNUTLS_MAC_SHA1,
1506
        GNUTLS_SSL3, GNUTLS_DTLS_VERSION_MIN),
1507
  ENTRY(GNUTLS_DHE_PSK_NULL_SHA256, "TLS_DHE_PSK_WITH_NULL_SHA256",
1508
        GNUTLS_CIPHER_NULL, GNUTLS_KX_DHE_PSK, GNUTLS_MAC_SHA256,
1509
        GNUTLS_TLS1_2, GNUTLS_DTLS1_2),
1510
  ENTRY_PRF(GNUTLS_DHE_PSK_NULL_SHA384, "TLS_DHE_PSK_WITH_NULL_SHA384",
1511
      GNUTLS_CIPHER_NULL, GNUTLS_KX_DHE_PSK, GNUTLS_MAC_SHA384,
1512
      GNUTLS_TLS1_2, GNUTLS_DTLS1_2, GNUTLS_MAC_SHA384),
1513
  ENTRY_PRF(GNUTLS_DHE_PSK_AES_256_CBC_SHA384,
1514
      "TLS_DHE_PSK_WITH_AES_256_CBC_SHA384",
1515
      GNUTLS_CIPHER_AES_256_CBC, GNUTLS_KX_DHE_PSK,
1516
      GNUTLS_MAC_SHA384, GNUTLS_TLS1_2, GNUTLS_DTLS1_2,
1517
      GNUTLS_MAC_SHA384),
1518
  ENTRY_PRF(GNUTLS_DHE_PSK_AES_256_GCM_SHA384,
1519
      "TLS_DHE_PSK_WITH_AES_256_GCM_SHA384",
1520
      GNUTLS_CIPHER_AES_256_GCM, GNUTLS_KX_DHE_PSK, GNUTLS_MAC_AEAD,
1521
      GNUTLS_TLS1_2, GNUTLS_DTLS1_2, GNUTLS_MAC_SHA384),
1522
  ENTRY(GNUTLS_DHE_PSK_CAMELLIA_128_CBC_SHA256,
1523
        "TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256",
1524
        GNUTLS_CIPHER_CAMELLIA_128_CBC, GNUTLS_KX_DHE_PSK,
1525
        GNUTLS_MAC_SHA256, GNUTLS_TLS1_2, GNUTLS_DTLS1_2),
1526
  ENTRY_PRF(GNUTLS_DHE_PSK_CAMELLIA_256_CBC_SHA384,
1527
      "TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384",
1528
      GNUTLS_CIPHER_CAMELLIA_256_CBC, GNUTLS_KX_DHE_PSK,
1529
      GNUTLS_MAC_SHA384, GNUTLS_TLS1_2, GNUTLS_DTLS1_2,
1530
      GNUTLS_MAC_SHA384),
1531
  ENTRY(GNUTLS_DHE_PSK_CAMELLIA_128_GCM_SHA256,
1532
        "TLS_DHE_PSK_WITH_CAMELLIA_128_GCM_SHA256",
1533
        GNUTLS_CIPHER_CAMELLIA_128_GCM, GNUTLS_KX_DHE_PSK,
1534
        GNUTLS_MAC_AEAD, GNUTLS_TLS1_2, GNUTLS_DTLS1_2),
1535
  ENTRY_PRF(GNUTLS_DHE_PSK_CAMELLIA_256_GCM_SHA384,
1536
      "TLS_DHE_PSK_WITH_CAMELLIA_256_GCM_SHA384",
1537
      GNUTLS_CIPHER_CAMELLIA_256_GCM, GNUTLS_KX_DHE_PSK,
1538
      GNUTLS_MAC_AEAD, GNUTLS_TLS1_2, GNUTLS_DTLS1_2,
1539
      GNUTLS_MAC_SHA384),
1540
1541
  ENTRY(GNUTLS_PSK_AES_128_CCM, "TLS_PSK_WITH_AES_128_CCM",
1542
        GNUTLS_CIPHER_AES_128_CCM, GNUTLS_KX_PSK, GNUTLS_MAC_AEAD,
1543
        GNUTLS_TLS1_2, GNUTLS_DTLS1_2),
1544
  ENTRY(GNUTLS_PSK_AES_256_CCM, "TLS_PSK_WITH_AES_256_CCM",
1545
        GNUTLS_CIPHER_AES_256_CCM, GNUTLS_KX_PSK, GNUTLS_MAC_AEAD,
1546
        GNUTLS_TLS1_2, GNUTLS_DTLS1_2),
1547
  ENTRY(GNUTLS_DHE_PSK_AES_128_CCM, "TLS_DHE_PSK_WITH_AES_128_CCM",
1548
        GNUTLS_CIPHER_AES_128_CCM, GNUTLS_KX_DHE_PSK, GNUTLS_MAC_AEAD,
1549
        GNUTLS_TLS1_2, GNUTLS_DTLS1_2),
1550
  ENTRY(GNUTLS_DHE_PSK_AES_256_CCM, "TLS_DHE_PSK_WITH_AES_256_CCM",
1551
        GNUTLS_CIPHER_AES_256_CCM, GNUTLS_KX_DHE_PSK, GNUTLS_MAC_AEAD,
1552
        GNUTLS_TLS1_2, GNUTLS_DTLS1_2),
1553
  ENTRY(GNUTLS_PSK_AES_128_CCM_8, "TLS_PSK_WITH_AES_128_CCM_8",
1554
        GNUTLS_CIPHER_AES_128_CCM_8, GNUTLS_KX_PSK, GNUTLS_MAC_AEAD,
1555
        GNUTLS_TLS1_2, GNUTLS_DTLS1_2),
1556
  ENTRY(GNUTLS_PSK_AES_256_CCM_8, "TLS_PSK_WITH_AES_256_CCM_8",
1557
        GNUTLS_CIPHER_AES_256_CCM_8, GNUTLS_KX_PSK, GNUTLS_MAC_AEAD,
1558
        GNUTLS_TLS1_2, GNUTLS_DTLS1_2),
1559
  ENTRY(GNUTLS_DHE_PSK_AES_128_CCM_8, "TLS_PSK_DHE_WITH_AES_128_CCM_8",
1560
        GNUTLS_CIPHER_AES_128_CCM_8, GNUTLS_KX_DHE_PSK, GNUTLS_MAC_AEAD,
1561
        GNUTLS_TLS1_2, GNUTLS_DTLS1_2),
1562
  ENTRY(GNUTLS_DHE_PSK_AES_256_CCM_8, "TLS_PSK_DHE_WITH_AES_256_CCM_8",
1563
        GNUTLS_CIPHER_AES_256_CCM_8, GNUTLS_KX_DHE_PSK, GNUTLS_MAC_AEAD,
1564
        GNUTLS_TLS1_2, GNUTLS_DTLS1_2),
1565
  ENTRY(GNUTLS_DHE_PSK_CHACHA20_POLY1305,
1566
        "TLS_DHE_PSK_WITH_CHACHA20_POLY1305_SHA256",
1567
        GNUTLS_CIPHER_CHACHA20_POLY1305, GNUTLS_KX_DHE_PSK,
1568
        GNUTLS_MAC_AEAD, GNUTLS_TLS1_2, GNUTLS_DTLS1_2),
1569
  ENTRY(GNUTLS_ECDHE_PSK_CHACHA20_POLY1305,
1570
        "TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256",
1571
        GNUTLS_CIPHER_CHACHA20_POLY1305, GNUTLS_KX_ECDHE_PSK,
1572
        GNUTLS_MAC_AEAD, GNUTLS_TLS1_2, GNUTLS_DTLS1_2),
1573
1574
  ENTRY(GNUTLS_RSA_PSK_CHACHA20_POLY1305,
1575
        "TLS_RSA_PSK_WITH_CHACHA20_POLY1305_SHA256",
1576
        GNUTLS_CIPHER_CHACHA20_POLY1305, GNUTLS_KX_RSA_PSK,
1577
        GNUTLS_MAC_AEAD, GNUTLS_TLS1_2, GNUTLS_DTLS1_2),
1578
1579
  ENTRY(GNUTLS_PSK_CHACHA20_POLY1305,
1580
        "TLS_PSK_WITH_CHACHA20_POLY1305_SHA256",
1581
        GNUTLS_CIPHER_CHACHA20_POLY1305, GNUTLS_KX_PSK, GNUTLS_MAC_AEAD,
1582
        GNUTLS_TLS1_2, GNUTLS_DTLS1_2),
1583
1584
#endif
1585
#ifdef ENABLE_ANON
1586
  /* DH_ANON */
1587
  ENTRY(GNUTLS_DH_ANON_ARCFOUR_128_MD5, "TLS_DH_anon_WITH_RC4_128_MD5",
1588
        GNUTLS_CIPHER_ARCFOUR_128, GNUTLS_KX_ANON_DH, GNUTLS_MAC_MD5,
1589
        GNUTLS_SSL3, GNUTLS_VERSION_UNKNOWN),
1590
  ENTRY(GNUTLS_DH_ANON_3DES_EDE_CBC_SHA1,
1591
        "TLS_DH_anon_WITH_3DES_EDE_CBC_SHA", GNUTLS_CIPHER_3DES_CBC,
1592
        GNUTLS_KX_ANON_DH, GNUTLS_MAC_SHA1, GNUTLS_SSL3,
1593
        GNUTLS_DTLS_VERSION_MIN),
1594
  ENTRY(GNUTLS_DH_ANON_AES_128_CBC_SHA1,
1595
        "TLS_DH_anon_WITH_AES_128_CBC_SHA", GNUTLS_CIPHER_AES_128_CBC,
1596
        GNUTLS_KX_ANON_DH, GNUTLS_MAC_SHA1, GNUTLS_SSL3,
1597
        GNUTLS_DTLS_VERSION_MIN),
1598
  ENTRY(GNUTLS_DH_ANON_AES_256_CBC_SHA1,
1599
        "TLS_DH_anon_WITH_AES_256_CBC_SHA", GNUTLS_CIPHER_AES_256_CBC,
1600
        GNUTLS_KX_ANON_DH, GNUTLS_MAC_SHA1, GNUTLS_SSL3,
1601
        GNUTLS_DTLS_VERSION_MIN),
1602
  ENTRY(GNUTLS_DH_ANON_CAMELLIA_128_CBC_SHA256,
1603
        "TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA256",
1604
        GNUTLS_CIPHER_CAMELLIA_128_CBC, GNUTLS_KX_ANON_DH,
1605
        GNUTLS_MAC_SHA256, GNUTLS_TLS1_2, GNUTLS_DTLS1_2),
1606
  ENTRY(GNUTLS_DH_ANON_CAMELLIA_256_CBC_SHA256,
1607
        "TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA256",
1608
        GNUTLS_CIPHER_CAMELLIA_256_CBC, GNUTLS_KX_ANON_DH,
1609
        GNUTLS_MAC_SHA256, GNUTLS_TLS1_2, GNUTLS_DTLS1_2),
1610
  ENTRY(GNUTLS_DH_ANON_CAMELLIA_128_CBC_SHA1,
1611
        "TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA",
1612
        GNUTLS_CIPHER_CAMELLIA_128_CBC, GNUTLS_KX_ANON_DH,
1613
        GNUTLS_MAC_SHA1, GNUTLS_SSL3, GNUTLS_DTLS_VERSION_MIN),
1614
  ENTRY(GNUTLS_DH_ANON_CAMELLIA_256_CBC_SHA1,
1615
        "TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA",
1616
        GNUTLS_CIPHER_CAMELLIA_256_CBC, GNUTLS_KX_ANON_DH,
1617
        GNUTLS_MAC_SHA1, GNUTLS_SSL3, GNUTLS_DTLS_VERSION_MIN),
1618
  ENTRY(GNUTLS_DH_ANON_AES_128_CBC_SHA256,
1619
        "TLS_DH_anon_WITH_AES_128_CBC_SHA256", GNUTLS_CIPHER_AES_128_CBC,
1620
        GNUTLS_KX_ANON_DH, GNUTLS_MAC_SHA256, GNUTLS_TLS1_2,
1621
        GNUTLS_DTLS1_2),
1622
  ENTRY(GNUTLS_DH_ANON_AES_256_CBC_SHA256,
1623
        "TLS_DH_anon_WITH_AES_256_CBC_SHA256", GNUTLS_CIPHER_AES_256_CBC,
1624
        GNUTLS_KX_ANON_DH, GNUTLS_MAC_SHA256, GNUTLS_TLS1_2,
1625
        GNUTLS_DTLS1_2),
1626
  ENTRY(GNUTLS_DH_ANON_AES_128_GCM_SHA256,
1627
        "TLS_DH_anon_WITH_AES_128_GCM_SHA256", GNUTLS_CIPHER_AES_128_GCM,
1628
        GNUTLS_KX_ANON_DH, GNUTLS_MAC_AEAD, GNUTLS_TLS1_2,
1629
        GNUTLS_DTLS1_2),
1630
  ENTRY_PRF(GNUTLS_DH_ANON_AES_256_GCM_SHA384,
1631
      "TLS_DH_anon_WITH_AES_256_GCM_SHA384",
1632
      GNUTLS_CIPHER_AES_256_GCM, GNUTLS_KX_ANON_DH, GNUTLS_MAC_AEAD,
1633
      GNUTLS_TLS1_2, GNUTLS_DTLS1_2, GNUTLS_MAC_SHA384),
1634
  ENTRY(GNUTLS_DH_ANON_CAMELLIA_128_GCM_SHA256,
1635
        "TLS_DH_anon_WITH_CAMELLIA_128_GCM_SHA256",
1636
        GNUTLS_CIPHER_CAMELLIA_128_GCM, GNUTLS_KX_ANON_DH,
1637
        GNUTLS_MAC_AEAD, GNUTLS_TLS1_2, GNUTLS_DTLS1_2),
1638
  ENTRY_PRF(GNUTLS_DH_ANON_CAMELLIA_256_GCM_SHA384,
1639
      "TLS_DH_anon_WITH_CAMELLIA_256_GCM_SHA384",
1640
      GNUTLS_CIPHER_CAMELLIA_256_GCM, GNUTLS_KX_ANON_DH,
1641
      GNUTLS_MAC_AEAD, GNUTLS_TLS1_2, GNUTLS_DTLS1_2,
1642
      GNUTLS_MAC_SHA384),
1643
1644
  /* ECC-ANON */
1645
  ENTRY(GNUTLS_ECDH_ANON_NULL_SHA1, "TLS_ECDH_anon_WITH_NULL_SHA",
1646
        GNUTLS_CIPHER_NULL, GNUTLS_KX_ANON_ECDH, GNUTLS_MAC_SHA1,
1647
        GNUTLS_SSL3, GNUTLS_DTLS_VERSION_MIN),
1648
  ENTRY(GNUTLS_ECDH_ANON_3DES_EDE_CBC_SHA1,
1649
        "TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA", GNUTLS_CIPHER_3DES_CBC,
1650
        GNUTLS_KX_ANON_ECDH, GNUTLS_MAC_SHA1, GNUTLS_SSL3,
1651
        GNUTLS_DTLS_VERSION_MIN),
1652
  ENTRY(GNUTLS_ECDH_ANON_AES_128_CBC_SHA1,
1653
        "TLS_ECDH_anon_WITH_AES_128_CBC_SHA", GNUTLS_CIPHER_AES_128_CBC,
1654
        GNUTLS_KX_ANON_ECDH, GNUTLS_MAC_SHA1, GNUTLS_SSL3,
1655
        GNUTLS_DTLS_VERSION_MIN),
1656
  ENTRY(GNUTLS_ECDH_ANON_AES_256_CBC_SHA1,
1657
        "TLS_ECDH_anon_WITH_AES_256_CBC_SHA", GNUTLS_CIPHER_AES_256_CBC,
1658
        GNUTLS_KX_ANON_ECDH, GNUTLS_MAC_SHA1, GNUTLS_SSL3,
1659
        GNUTLS_DTLS_VERSION_MIN),
1660
  ENTRY(GNUTLS_ECDH_ANON_ARCFOUR_128_SHA1,
1661
        "TLS_ECDH_anon_WITH_RC4_128_SHA", GNUTLS_CIPHER_ARCFOUR,
1662
        GNUTLS_KX_ANON_ECDH, GNUTLS_MAC_SHA1, GNUTLS_SSL3,
1663
        GNUTLS_VERSION_UNKNOWN),
1664
#endif
1665
#ifdef ENABLE_SRP
1666
  /* SRP */
1667
  ENTRY(GNUTLS_SRP_SHA_3DES_EDE_CBC_SHA1,
1668
        "TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA", GNUTLS_CIPHER_3DES_CBC,
1669
        GNUTLS_KX_SRP, GNUTLS_MAC_SHA1, GNUTLS_SSL3,
1670
        GNUTLS_DTLS_VERSION_MIN),
1671
  ENTRY(GNUTLS_SRP_SHA_AES_128_CBC_SHA1,
1672
        "TLS_SRP_SHA_WITH_AES_128_CBC_SHA", GNUTLS_CIPHER_AES_128_CBC,
1673
        GNUTLS_KX_SRP, GNUTLS_MAC_SHA1, GNUTLS_SSL3,
1674
        GNUTLS_DTLS_VERSION_MIN),
1675
  ENTRY(GNUTLS_SRP_SHA_AES_256_CBC_SHA1,
1676
        "TLS_SRP_SHA_WITH_AES_256_CBC_SHA", GNUTLS_CIPHER_AES_256_CBC,
1677
        GNUTLS_KX_SRP, GNUTLS_MAC_SHA1, GNUTLS_SSL3,
1678
        GNUTLS_DTLS_VERSION_MIN),
1679
1680
  ENTRY(GNUTLS_SRP_SHA_DSS_3DES_EDE_CBC_SHA1,
1681
        "TLS_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA", GNUTLS_CIPHER_3DES_CBC,
1682
        GNUTLS_KX_SRP_DSS, GNUTLS_MAC_SHA1, GNUTLS_SSL3,
1683
        GNUTLS_DTLS_VERSION_MIN),
1684
1685
  ENTRY(GNUTLS_SRP_SHA_RSA_3DES_EDE_CBC_SHA1,
1686
        "TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA", GNUTLS_CIPHER_3DES_CBC,
1687
        GNUTLS_KX_SRP_RSA, GNUTLS_MAC_SHA1, GNUTLS_SSL3,
1688
        GNUTLS_DTLS_VERSION_MIN),
1689
1690
  ENTRY(GNUTLS_SRP_SHA_DSS_AES_128_CBC_SHA1,
1691
        "TLS_SRP_SHA_DSS_WITH_AES_128_CBC_SHA", GNUTLS_CIPHER_AES_128_CBC,
1692
        GNUTLS_KX_SRP_DSS, GNUTLS_MAC_SHA1, GNUTLS_SSL3,
1693
        GNUTLS_DTLS_VERSION_MIN),
1694
1695
  ENTRY(GNUTLS_SRP_SHA_RSA_AES_128_CBC_SHA1,
1696
        "TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA", GNUTLS_CIPHER_AES_128_CBC,
1697
        GNUTLS_KX_SRP_RSA, GNUTLS_MAC_SHA1, GNUTLS_SSL3,
1698
        GNUTLS_DTLS_VERSION_MIN),
1699
1700
  ENTRY(GNUTLS_SRP_SHA_DSS_AES_256_CBC_SHA1,
1701
        "TLS_SRP_SHA_DSS_WITH_AES_256_CBC_SHA", GNUTLS_CIPHER_AES_256_CBC,
1702
        GNUTLS_KX_SRP_DSS, GNUTLS_MAC_SHA1, GNUTLS_SSL3,
1703
        GNUTLS_DTLS_VERSION_MIN),
1704
1705
  ENTRY(GNUTLS_SRP_SHA_RSA_AES_256_CBC_SHA1,
1706
        "TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA", GNUTLS_CIPHER_AES_256_CBC,
1707
        GNUTLS_KX_SRP_RSA, GNUTLS_MAC_SHA1, GNUTLS_SSL3,
1708
        GNUTLS_DTLS_VERSION_MIN),
1709
#endif
1710
1711
#ifdef ENABLE_GOST
1712
  ENTRY_PRF(GNUTLS_GOSTR341112_256_28147_CNT_IMIT,
1713
      "TLS_GOSTR341112_256_WITH_28147_CNT_IMIT",
1714
      GNUTLS_CIPHER_GOST28147_TC26Z_CNT, GNUTLS_KX_VKO_GOST_12,
1715
      GNUTLS_MAC_GOST28147_TC26Z_IMIT, GNUTLS_TLS1_2,
1716
      GNUTLS_VERSION_UNKNOWN, GNUTLS_MAC_STREEBOG_256),
1717
#endif
1718
1719
  { 0, { 0, 0 }, 0, 0, 0, 0, 0, 0 }
1720
};
1721
1722
#define CIPHER_SUITE_LOOP(b)                                    \
1723
0
  {                                                       \
1724
0
    const gnutls_cipher_suite_entry_st *p;          \
1725
0
    for (p = cs_algorithms; p->name != NULL; p++) { \
1726
0
      b;                                      \
1727
0
    }                                               \
1728
0
  }
1729
1730
#define CIPHER_SUITE_ALG_LOOP(a, suite)                                 \
1731
0
  CIPHER_SUITE_LOOP(                                              \
1732
0
    if ((p->id[0] == suite[0]) && (p->id[1] == suite[1])) { \
1733
0
      a;                                              \
1734
0
      break;                                          \
1735
0
    })
1736
1737
/* Cipher Suite's functions */
1738
const gnutls_cipher_suite_entry_st *ciphersuite_to_entry(const uint8_t suite[2])
1739
0
{
1740
0
  CIPHER_SUITE_ALG_LOOP(return p, suite);
1741
0
  return NULL;
1742
0
}
1743
1744
gnutls_kx_algorithm_t _gnutls_cipher_suite_get_kx_algo(const uint8_t suite[2])
1745
0
{
1746
0
  gnutls_kx_algorithm_t ret = GNUTLS_KX_UNKNOWN;
1747
1748
0
  CIPHER_SUITE_ALG_LOOP(ret = p->kx_algorithm, suite);
1749
0
  return ret;
1750
0
}
1751
1752
const char *_gnutls_cipher_suite_get_name(const uint8_t suite[2])
1753
0
{
1754
0
  const char *ret = NULL;
1755
1756
  /* avoid prefix */
1757
0
  CIPHER_SUITE_ALG_LOOP(ret = p->name + sizeof("GNUTLS_") - 1, suite);
1758
1759
0
  return ret;
1760
0
}
1761
1762
const gnutls_cipher_suite_entry_st *
1763
cipher_suite_get(gnutls_kx_algorithm_t kx_algorithm,
1764
     gnutls_cipher_algorithm_t cipher_algorithm,
1765
     gnutls_mac_algorithm_t mac_algorithm)
1766
0
{
1767
0
  const gnutls_cipher_suite_entry_st *ret = NULL;
1768
1769
0
  CIPHER_SUITE_LOOP(if (kx_algorithm == p->kx_algorithm &&
1770
0
            cipher_algorithm == p->block_algorithm &&
1771
0
            mac_algorithm == p->mac_algorithm) {
1772
0
    ret = p;
1773
0
    break;
1774
0
  });
1775
1776
0
  return ret;
1777
0
}
1778
1779
/* Returns 0 if the given KX has not the corresponding parameters
1780
 * (DH or RSA) set up. Otherwise returns 1.
1781
 */
1782
static unsigned check_server_dh_params(gnutls_session_t session,
1783
               unsigned cred_type,
1784
               gnutls_kx_algorithm_t kx)
1785
0
{
1786
0
  unsigned have_dh_params = 0;
1787
1788
0
  if (!_gnutls_kx_needs_dh_params(kx)) {
1789
0
    return 1;
1790
0
  }
1791
1792
0
  if (session->internals.hsk_flags & HSK_HAVE_FFDHE) {
1793
    /* if the client has advertised FFDHE then it doesn't matter
1794
     * whether we have server DH parameters. They are no good. */
1795
0
    gnutls_assert();
1796
0
    return 0;
1797
0
  }
1798
1799
  /* Read the Diffie-Hellman parameters, if any.
1800
   */
1801
0
  if (cred_type == GNUTLS_CRD_CERTIFICATE) {
1802
0
    gnutls_certificate_credentials_t x509_cred =
1803
0
      (gnutls_certificate_credentials_t)_gnutls_get_cred(
1804
0
        session, cred_type);
1805
1806
0
    if (x509_cred != NULL &&
1807
0
        (x509_cred->dh_params || x509_cred->params_func ||
1808
0
         x509_cred->dh_sec_param)) {
1809
0
      have_dh_params = 1;
1810
0
    }
1811
1812
0
#ifdef ENABLE_ANON
1813
0
  } else if (cred_type == GNUTLS_CRD_ANON) {
1814
0
    gnutls_anon_server_credentials_t anon_cred =
1815
0
      (gnutls_anon_server_credentials_t)_gnutls_get_cred(
1816
0
        session, cred_type);
1817
1818
0
    if (anon_cred != NULL &&
1819
0
        (anon_cred->dh_params || anon_cred->params_func ||
1820
0
         anon_cred->dh_sec_param)) {
1821
0
      have_dh_params = 1;
1822
0
    }
1823
0
#endif
1824
0
#ifdef ENABLE_PSK
1825
0
  } else if (cred_type == GNUTLS_CRD_PSK) {
1826
0
    gnutls_psk_server_credentials_t psk_cred =
1827
0
      (gnutls_psk_server_credentials_t)_gnutls_get_cred(
1828
0
        session, cred_type);
1829
1830
0
    if (psk_cred != NULL &&
1831
0
        (psk_cred->dh_params || psk_cred->params_func ||
1832
0
         psk_cred->dh_sec_param)) {
1833
0
      have_dh_params = 1;
1834
0
    }
1835
0
#endif
1836
0
  } else {
1837
0
    return 1; /* no need for params */
1838
0
  }
1839
1840
0
  return have_dh_params;
1841
0
}
1842
1843
/**
1844
 * gnutls_cipher_suite_get_name:
1845
 * @kx_algorithm: is a Key exchange algorithm
1846
 * @cipher_algorithm: is a cipher algorithm
1847
 * @mac_algorithm: is a MAC algorithm
1848
 *
1849
 * This function returns the ciphersuite name under TLS1.2 or earlier
1850
 * versions when provided with individual algorithms. The full cipher suite
1851
 * name must be prepended by TLS or SSL depending of the protocol in use.
1852
 *
1853
 * To get a description of the current ciphersuite across versions, it
1854
 * is recommended to use gnutls_session_get_desc().
1855
 *
1856
 * Returns: a string that contains the name of a TLS cipher suite,
1857
 * specified by the given algorithms, or %NULL.
1858
 **/
1859
const char *
1860
gnutls_cipher_suite_get_name(gnutls_kx_algorithm_t kx_algorithm,
1861
           gnutls_cipher_algorithm_t cipher_algorithm,
1862
           gnutls_mac_algorithm_t mac_algorithm)
1863
0
{
1864
0
  const gnutls_cipher_suite_entry_st *ce;
1865
1866
0
  ce = cipher_suite_get(kx_algorithm, cipher_algorithm, mac_algorithm);
1867
0
  if (ce == NULL)
1868
0
    return NULL;
1869
0
  else
1870
0
    return ce->name + sizeof("GNUTLS_") - 1;
1871
0
}
1872
1873
/*-
1874
 * _gnutls_cipher_suite_get_id:
1875
 * @kx_algorithm: is a Key exchange algorithm
1876
 * @cipher_algorithm: is a cipher algorithm
1877
 * @mac_algorithm: is a MAC algorithm
1878
 * @suite: The id to be returned
1879
 *
1880
 * This function returns the ciphersuite ID in @suite, under TLS1.2 or earlier
1881
 * versions when provided with individual algorithms.
1882
 *
1883
 * Returns: 0 on success or a negative error code otherwise.
1884
 -*/
1885
int _gnutls_cipher_suite_get_id(gnutls_kx_algorithm_t kx_algorithm,
1886
        gnutls_cipher_algorithm_t cipher_algorithm,
1887
        gnutls_mac_algorithm_t mac_algorithm,
1888
        uint8_t suite[2])
1889
0
{
1890
0
  const gnutls_cipher_suite_entry_st *ce;
1891
1892
0
  ce = cipher_suite_get(kx_algorithm, cipher_algorithm, mac_algorithm);
1893
0
  if (ce == NULL)
1894
0
    return GNUTLS_E_INVALID_REQUEST;
1895
0
  else {
1896
0
    suite[0] = ce->id[0];
1897
0
    suite[1] = ce->id[1];
1898
0
  }
1899
0
  return 0;
1900
0
}
1901
1902
/**
1903
 * gnutls_cipher_suite_info:
1904
 * @idx: index of cipher suite to get information about, starts on 0.
1905
 * @cs_id: output buffer with room for 2 bytes, indicating cipher suite value
1906
 * @kx: output variable indicating key exchange algorithm, or %NULL.
1907
 * @cipher: output variable indicating cipher, or %NULL.
1908
 * @mac: output variable indicating MAC algorithm, or %NULL.
1909
 * @min_version: output variable indicating TLS protocol version, or %NULL.
1910
 *
1911
 * Get information about supported cipher suites.  Use the function
1912
 * iteratively to get information about all supported cipher suites.
1913
 * Call with idx=0 to get information about first cipher suite, then
1914
 * idx=1 and so on until the function returns NULL.
1915
 *
1916
 * Returns: the name of @idx cipher suite, and set the information
1917
 * about the cipher suite in the output variables.  If @idx is out of
1918
 * bounds, %NULL is returned.
1919
 **/
1920
const char *gnutls_cipher_suite_info(size_t idx, unsigned char *cs_id,
1921
             gnutls_kx_algorithm_t *kx,
1922
             gnutls_cipher_algorithm_t *cipher,
1923
             gnutls_mac_algorithm_t *mac,
1924
             gnutls_protocol_t *min_version)
1925
0
{
1926
0
  if (idx >= CIPHER_SUITES_COUNT)
1927
0
    return NULL;
1928
1929
0
  if (cs_id)
1930
0
    memcpy(cs_id, cs_algorithms[idx].id, 2);
1931
0
  if (kx)
1932
0
    *kx = cs_algorithms[idx].kx_algorithm;
1933
0
  if (cipher)
1934
0
    *cipher = cs_algorithms[idx].block_algorithm;
1935
0
  if (mac)
1936
0
    *mac = cs_algorithms[idx].mac_algorithm;
1937
0
  if (min_version)
1938
0
    *min_version = cs_algorithms[idx].min_version;
1939
1940
0
  return cs_algorithms[idx].name + sizeof("GNU") - 1;
1941
0
}
1942
1943
#define VERSION_CHECK(entry)                                             \
1944
0
  if (is_dtls) {                                                   \
1945
0
    if (entry->min_dtls_version == GNUTLS_VERSION_UNKNOWN || \
1946
0
        version->id < entry->min_dtls_version ||             \
1947
0
        version->id > entry->max_dtls_version)               \
1948
0
      continue;                                        \
1949
0
  } else {                                                         \
1950
0
    if (entry->min_version == GNUTLS_VERSION_UNKNOWN ||      \
1951
0
        version->id < entry->min_version ||                  \
1952
0
        version->id > entry->max_version)                    \
1953
0
      continue;                                        \
1954
0
  }
1955
1956
#define CIPHER_CHECK(algo)                                           \
1957
0
  if (session->internals.priorities->force_etm && !have_etm) { \
1958
0
    const cipher_entry_st *_cipher;                      \
1959
0
    _cipher = cipher_to_entry(algo);                     \
1960
0
    if (_cipher == NULL ||                               \
1961
0
        _gnutls_cipher_type(_cipher) == CIPHER_BLOCK)    \
1962
0
      continue;                                    \
1963
0
  }
1964
1965
#define KX_SRP_CHECKS(kx, action)                                 \
1966
0
  if (kx == GNUTLS_KX_SRP_RSA || kx == GNUTLS_KX_SRP_DSS) { \
1967
0
    if (!_gnutls_get_cred(session, GNUTLS_CRD_SRP)) { \
1968
0
      action;                                   \
1969
0
    }                                                 \
1970
0
  }
1971
1972
static unsigned kx_is_ok(gnutls_session_t session, gnutls_kx_algorithm_t kx,
1973
       unsigned cred_type,
1974
       const gnutls_group_entry_st **sgroup)
1975
0
{
1976
0
  if (_gnutls_kx_is_ecc(kx)) {
1977
0
    if (session->internals.cand_ec_group == NULL) {
1978
0
      return 0;
1979
0
    } else {
1980
0
      *sgroup = session->internals.cand_ec_group;
1981
0
    }
1982
0
  } else if (_gnutls_kx_is_dhe(kx)) {
1983
0
    if (session->internals.cand_dh_group == NULL) {
1984
0
      if (!check_server_dh_params(session, cred_type, kx)) {
1985
0
        return 0;
1986
0
      }
1987
0
    } else {
1988
0
      *sgroup = session->internals.cand_dh_group;
1989
0
    }
1990
0
  }
1991
0
  KX_SRP_CHECKS(kx, return 0);
1992
1993
0
  return 1;
1994
0
}
1995
1996
/* Called on server-side only */
1997
int _gnutls_figure_common_ciphersuite(gnutls_session_t session,
1998
              const ciphersuite_list_st *peer_clist,
1999
              const gnutls_cipher_suite_entry_st **ce)
2000
0
{
2001
0
  unsigned int i, j;
2002
0
  int ret;
2003
0
  const version_entry_st *version = get_version(session);
2004
0
  unsigned int is_dtls = IS_DTLS(session);
2005
0
  gnutls_kx_algorithm_t kx;
2006
0
  gnutls_credentials_type_t cred_type =
2007
0
    GNUTLS_CRD_CERTIFICATE; /* default for TLS1.3 */
2008
0
  const gnutls_group_entry_st *sgroup = NULL;
2009
0
  gnutls_ext_priv_data_t epriv;
2010
0
  unsigned have_etm = 0;
2011
2012
0
  if (version == NULL) {
2013
0
    return gnutls_assert_val(GNUTLS_E_NO_CIPHER_SUITES);
2014
0
  }
2015
2016
  /* we figure whether etm is negotiated by checking the raw extension data
2017
   * because we only set (security_params) EtM to true only after the ciphersuite is
2018
   * negotiated. */
2019
0
  ret = _gnutls_hello_ext_get_priv(session, GNUTLS_EXTENSION_ETM, &epriv);
2020
0
  if (ret >= 0 && ((intptr_t)epriv) != 0)
2021
0
    have_etm = 1;
2022
2023
  /* If we didn't receive the supported_groups extension, then
2024
   * we should assume that SECP256R1 is supported; that is required
2025
   * by RFC4492, probably to allow SSLv2 hellos negotiate elliptic curve
2026
   * ciphersuites */
2027
0
  if (!version->tls13_sem && session->internals.cand_ec_group == NULL &&
2028
0
      !_gnutls_hello_ext_is_present(session,
2029
0
            GNUTLS_EXTENSION_SUPPORTED_GROUPS)) {
2030
0
    session->internals.cand_ec_group =
2031
0
      _gnutls_id_to_group(DEFAULT_EC_GROUP);
2032
0
  }
2033
2034
0
  if (session->internals.priorities->server_precedence == 0) {
2035
0
    for (i = 0; i < peer_clist->size; i++) {
2036
0
      _gnutls_debug_log(
2037
0
        "checking %.2x.%.2x (%s) for compatibility\n",
2038
0
        (unsigned)peer_clist->entry[i]->id[0],
2039
0
        (unsigned)peer_clist->entry[i]->id[1],
2040
0
        peer_clist->entry[i]->name);
2041
0
      VERSION_CHECK(peer_clist->entry[i]);
2042
2043
0
      kx = peer_clist->entry[i]->kx_algorithm;
2044
2045
0
      CIPHER_CHECK(peer_clist->entry[i]->block_algorithm);
2046
2047
0
      if (!version->tls13_sem)
2048
0
        cred_type = _gnutls_map_kx_get_cred(kx, 1);
2049
2050
0
      for (j = 0; j < session->internals.priorities->cs.size;
2051
0
           j++) {
2052
0
        if (session->internals.priorities->cs.entry[j] ==
2053
0
            peer_clist->entry[i]) {
2054
0
          sgroup = NULL;
2055
0
          if (!kx_is_ok(session, kx, cred_type,
2056
0
                  &sgroup))
2057
0
            continue;
2058
2059
          /* if we have selected PSK, we need a ciphersuites which matches
2060
           * the selected binder */
2061
0
          if (session->internals.hsk_flags &
2062
0
              HSK_PSK_SELECTED) {
2063
0
            if (session->key.binders[0]
2064
0
                  .prf->id !=
2065
0
                session->internals
2066
0
                  .priorities->cs
2067
0
                  .entry[j]
2068
0
                  ->prf)
2069
0
              continue;
2070
0
          } else if (cred_type ==
2071
0
               GNUTLS_CRD_CERTIFICATE) {
2072
0
            ret = _gnutls_select_server_cert(
2073
0
              session,
2074
0
              peer_clist->entry[i]);
2075
0
            if (ret < 0) {
2076
              /* couldn't select cert with this ciphersuite */
2077
0
              gnutls_assert();
2078
0
              break;
2079
0
            }
2080
0
          }
2081
2082
          /* select the group based on the selected ciphersuite */
2083
0
          if (sgroup)
2084
0
            _gnutls_session_group_set(
2085
0
              session, sgroup);
2086
0
          *ce = peer_clist->entry[i];
2087
0
          return 0;
2088
0
        }
2089
0
      }
2090
0
    }
2091
0
  } else {
2092
0
    for (j = 0; j < session->internals.priorities->cs.size; j++) {
2093
0
      VERSION_CHECK(
2094
0
        session->internals.priorities->cs.entry[j]);
2095
2096
0
      CIPHER_CHECK(session->internals.priorities->cs.entry[j]
2097
0
               ->block_algorithm);
2098
2099
0
      for (i = 0; i < peer_clist->size; i++) {
2100
0
        _gnutls_debug_log(
2101
0
          "checking %.2x.%.2x (%s) for compatibility\n",
2102
0
          (unsigned)peer_clist->entry[i]->id[0],
2103
0
          (unsigned)peer_clist->entry[i]->id[1],
2104
0
          peer_clist->entry[i]->name);
2105
2106
0
        if (session->internals.priorities->cs.entry[j] ==
2107
0
            peer_clist->entry[i]) {
2108
0
          sgroup = NULL;
2109
0
          kx = peer_clist->entry[i]->kx_algorithm;
2110
2111
0
          if (!version->tls13_sem)
2112
0
            cred_type =
2113
0
              _gnutls_map_kx_get_cred(
2114
0
                kx, 1);
2115
2116
0
          if (!kx_is_ok(session, kx, cred_type,
2117
0
                  &sgroup))
2118
0
            break;
2119
2120
          /* if we have selected PSK, we need a ciphersuites which matches
2121
           * the selected binder */
2122
0
          if (session->internals.hsk_flags &
2123
0
              HSK_PSK_SELECTED) {
2124
0
            if (session->key.binders[0]
2125
0
                  .prf->id !=
2126
0
                session->internals
2127
0
                  .priorities->cs
2128
0
                  .entry[j]
2129
0
                  ->prf)
2130
0
              break;
2131
0
          } else if (cred_type ==
2132
0
               GNUTLS_CRD_CERTIFICATE) {
2133
0
            ret = _gnutls_select_server_cert(
2134
0
              session,
2135
0
              peer_clist->entry[i]);
2136
0
            if (ret < 0) {
2137
              /* couldn't select cert with this ciphersuite */
2138
0
              gnutls_assert();
2139
0
              break;
2140
0
            }
2141
0
          }
2142
2143
          /* select the group based on the selected ciphersuite */
2144
0
          if (sgroup)
2145
0
            _gnutls_session_group_set(
2146
0
              session, sgroup);
2147
0
          *ce = peer_clist->entry[i];
2148
0
          return 0;
2149
0
        }
2150
0
      }
2151
0
    }
2152
0
  }
2153
2154
  /* nothing in common */
2155
2156
0
  return gnutls_assert_val(GNUTLS_E_NO_CIPHER_SUITES);
2157
0
}
2158
2159
#define CLIENT_VERSION_CHECK(minver, maxver, e)       \
2160
0
  if (is_dtls) {                                \
2161
0
    if (e->min_dtls_version > maxver->id) \
2162
0
      continue;                     \
2163
0
  } else {                                      \
2164
0
    if (e->min_version > maxver->id)      \
2165
0
      continue;                     \
2166
0
  }
2167
2168
#define RESERVED_CIPHERSUITES 4
2169
int _gnutls_get_client_ciphersuites(gnutls_session_t session,
2170
            gnutls_buffer_st *cdata,
2171
            const version_entry_st *vmin,
2172
            unsigned add_scsv)
2173
0
{
2174
0
  unsigned int j;
2175
0
  int ret;
2176
0
  unsigned int is_dtls = IS_DTLS(session);
2177
0
  gnutls_kx_algorithm_t kx;
2178
0
  gnutls_credentials_type_t cred_type;
2179
0
  uint8_t cipher_suites[MAX_CIPHERSUITE_SIZE * 2 + RESERVED_CIPHERSUITES];
2180
0
  unsigned cipher_suites_size = 0;
2181
0
  size_t init_length = cdata->length;
2182
0
  const version_entry_st *vmax;
2183
2184
0
  vmax = _gnutls_version_max(session);
2185
0
  if (vmax == NULL)
2186
0
    return gnutls_assert_val(GNUTLS_E_NO_PRIORITIES_WERE_SET);
2187
2188
0
  for (j = 0; j < session->internals.priorities->cs.size; j++) {
2189
0
    CLIENT_VERSION_CHECK(
2190
0
      vmin, vmax, session->internals.priorities->cs.entry[j]);
2191
2192
0
    kx = session->internals.priorities->cs.entry[j]->kx_algorithm;
2193
0
    if (kx !=
2194
0
        GNUTLS_KX_UNKNOWN) { /* In TLS 1.3 ciphersuites don't map to credentials */
2195
0
      cred_type = _gnutls_map_kx_get_cred(kx, 0);
2196
2197
0
      if (!session->internals.premaster_set &&
2198
0
          _gnutls_get_cred(session, cred_type) == NULL)
2199
0
        continue;
2200
2201
0
      KX_SRP_CHECKS(kx, continue);
2202
0
    }
2203
2204
0
    _gnutls_debug_log(
2205
0
      "Keeping ciphersuite %.2x.%.2x (%s)\n",
2206
0
      (unsigned)session->internals.priorities->cs.entry[j]
2207
0
        ->id[0],
2208
0
      (unsigned)session->internals.priorities->cs.entry[j]
2209
0
        ->id[1],
2210
0
      session->internals.priorities->cs.entry[j]->name);
2211
0
    cipher_suites[cipher_suites_size] =
2212
0
      session->internals.priorities->cs.entry[j]->id[0];
2213
0
    cipher_suites[cipher_suites_size + 1] =
2214
0
      session->internals.priorities->cs.entry[j]->id[1];
2215
0
    cipher_suites_size += 2;
2216
2217
0
    if (cipher_suites_size >= MAX_CIPHERSUITE_SIZE * 2)
2218
0
      break;
2219
0
  }
2220
#ifdef ENABLE_SSL3
2221
  if (add_scsv) {
2222
    cipher_suites[cipher_suites_size] = 0x00;
2223
    cipher_suites[cipher_suites_size + 1] = 0xff;
2224
    cipher_suites_size += 2;
2225
2226
    ret = _gnutls_ext_sr_send_cs(session);
2227
    if (ret < 0)
2228
      return gnutls_assert_val(ret);
2229
2230
    _gnutls_hello_ext_save_sr(session);
2231
  }
2232
#endif
2233
2234
0
  if (session->internals.priorities->fallback) {
2235
0
    cipher_suites[cipher_suites_size] = GNUTLS_FALLBACK_SCSV_MAJOR;
2236
0
    cipher_suites[cipher_suites_size + 1] =
2237
0
      GNUTLS_FALLBACK_SCSV_MINOR;
2238
0
    cipher_suites_size += 2;
2239
0
  }
2240
2241
0
  ret = _gnutls_buffer_append_data_prefix(cdata, 16, cipher_suites,
2242
0
            cipher_suites_size);
2243
0
  if (ret < 0)
2244
0
    return gnutls_assert_val(ret);
2245
2246
0
  return cdata->length - init_length;
2247
0
}
2248
2249
/**
2250
 * gnutls_priority_get_cipher_suite_index:
2251
 * @pcache: is a #gnutls_priority_t type.
2252
 * @idx: is an index number.
2253
 * @sidx: internal index of cipher suite to get information about.
2254
 *
2255
 * Provides the internal ciphersuite index to be used with
2256
 * gnutls_cipher_suite_info(). The index @idx provided is an
2257
 * index kept at the priorities structure. It might be that a valid
2258
 * priorities index does not correspond to a ciphersuite and in
2259
 * that case %GNUTLS_E_UNKNOWN_CIPHER_SUITE will be returned.
2260
 * Once the last available index is crossed then
2261
 * %GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE will be returned.
2262
 *
2263
 * Returns: On success it returns %GNUTLS_E_SUCCESS (0), or a negative error value otherwise.
2264
 *
2265
 * Since: 3.0.9
2266
 **/
2267
int gnutls_priority_get_cipher_suite_index(gnutls_priority_t pcache,
2268
             unsigned int idx, unsigned int *sidx)
2269
0
{
2270
0
  unsigned int i, j;
2271
0
  unsigned max_tls = 0;
2272
0
  unsigned max_dtls = 0;
2273
2274
0
  if (idx >= pcache->cs.size)
2275
0
    return GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE;
2276
2277
  /* find max_tls and max_dtls */
2278
0
  for (j = 0; j < pcache->protocol.num_priorities; j++) {
2279
0
    if (pcache->protocol.priorities[j] <= GNUTLS_TLS_VERSION_MAX &&
2280
0
        pcache->protocol.priorities[j] >= max_tls) {
2281
0
      max_tls = pcache->protocol.priorities[j];
2282
0
    } else if (pcache->protocol.priorities[j] <=
2283
0
           GNUTLS_DTLS_VERSION_MAX &&
2284
0
         pcache->protocol.priorities[j] >= max_dtls) {
2285
0
      max_dtls = pcache->protocol.priorities[j];
2286
0
    }
2287
0
  }
2288
2289
0
  for (i = 0; i < CIPHER_SUITES_COUNT; i++) {
2290
0
    if (pcache->cs.entry[idx] != &cs_algorithms[i])
2291
0
      continue;
2292
2293
0
    *sidx = i;
2294
0
    if (_gnutls_cipher_exists(cs_algorithms[i].block_algorithm) &&
2295
0
        _gnutls_mac_exists(cs_algorithms[i].mac_algorithm)) {
2296
0
      if (max_tls >= cs_algorithms[i].min_version) {
2297
0
        return 0;
2298
0
      } else if (max_dtls >=
2299
0
           cs_algorithms[i].min_dtls_version) {
2300
0
        return 0;
2301
0
      }
2302
0
    } else
2303
0
      break;
2304
0
  }
2305
2306
0
  return GNUTLS_E_UNKNOWN_CIPHER_SUITE;
2307
0
}