This repository was archived by the owner on May 29, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathciphers.go
583 lines (557 loc) · 41.4 KB
/
ciphers.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
package sslprobe
import (
"fmt"
)
type TLSVersion uint16
const (
SSL_2_0 TLSVersion = 0x0002
SSL_2_99 = 0x02ff
SSL_3_0 = 0x0300
TLS_1_0 = 0x0301
TLS_1_1 = 0x0302
TLS_1_2 = 0x0303
TLS_1_3 = 0x0304
TLS_1_99 = 0x03ff
)
func (v TLSVersion) String() string {
if v == SSL_2_0 {
return "SSL2"
} else if v == SSL_3_0 {
return "SSL3"
} else if v == TLS_1_0 {
return "TLS1.0"
} else if v == TLS_1_1 {
return "TLS1.1"
} else if v == TLS_1_2 {
return "TLS1.2"
} else if v == TLS_1_3 {
return "TLS1.3"
} else if v == SSL_2_99 {
return "SSL2.99"
} else if v == TLS_1_99 {
return "TLS1.99"
}
return fmt.Sprintf("SSLVersion 0x%04x", uint16(v))
}
var AllVersions []TLSVersion = []TLSVersion{
SSL_2_0,
SSL_3_0,
TLS_1_0,
TLS_1_1,
TLS_1_2,
TLS_1_3}
type CipherInfo struct {
ID uint32
Name string
Kex CipherKeyExchangeInfo
Auth CipherAuthenticationInfo
Cipher CipherSymmetricInfo
MAC CipherMACInfo
}
type CipherKeyExchangeInfo struct {
Name string
ForwardSecure bool
Static bool
Broken bool
}
var (
KX_NULL CipherKeyExchangeInfo = CipherKeyExchangeInfo{"NULL", false, true, true}
KX_RSA = CipherKeyExchangeInfo{"xRSA", false, false, false}
KX_PSK = CipherKeyExchangeInfo{"PSK", false, false, false}
KX_KRB5_EXPORT = CipherKeyExchangeInfo{"KRB5_EXPORT", false, false, true}
KX_EXPORT = CipherKeyExchangeInfo{"EXPORT", false, false, true}
KX_EXPORT1024 = CipherKeyExchangeInfo{"EXPORT1024", false, false, true}
KX_FFDH_EXPORT = CipherKeyExchangeInfo{"FFDH_EXPORT", false, true, true}
KX_FFDHE_EXPORT = CipherKeyExchangeInfo{"FFDHE_EXPORT", true, false, true}
KX_KRB5 = CipherKeyExchangeInfo{"KRB5", false, false, true}
KX_SRP = CipherKeyExchangeInfo{"SRP", false, false, false}
KX_FFDHE = CipherKeyExchangeInfo{"FFDHE", true, false, false}
KX_FFDH = CipherKeyExchangeInfo{"FFDH", false, true, false}
KX_ECDH = CipherKeyExchangeInfo{"ECDH", false, true, false}
KX_ECDHE = CipherKeyExchangeInfo{"ECDHE", true, false, false}
)
type CipherAuthenticationInfo struct {
Name string
Broken bool
}
var (
AU_NULL CipherAuthenticationInfo = CipherAuthenticationInfo{"NULL", true}
AU_PSK = CipherAuthenticationInfo{"PSK", false}
AU_RSA = CipherAuthenticationInfo{"RSA", false}
AU_KRB5 = CipherAuthenticationInfo{"KRB5", true}
AU_DSA = CipherAuthenticationInfo{"DSA", true}
AU_ECDSA = CipherAuthenticationInfo{"ECDSA", false}
)
type CipherSymmetricInfo struct {
Name string
KeySize uint16
BlockSize uint16
Broken bool
}
var (
SC_NULL CipherSymmetricInfo = CipherSymmetricInfo{"NULL", 0, 0, true}
SC_RC2_40 = CipherSymmetricInfo{"RC2-40", 40, 64, true}
SC_RC4_40 = CipherSymmetricInfo{"RC4-40", 40, 1684, true}
SC_DES_40 = CipherSymmetricInfo{"DES-40", 40, 64, true}
SC_IDEA = CipherSymmetricInfo{"IDEA", 128, 64, true}
SC_DES = CipherSymmetricInfo{"DES", 56, 64, true}
SC_RC2 = CipherSymmetricInfo{"RC2", 64, 64, true}
SC_RC4 = CipherSymmetricInfo{"RC4", 128, 1684, true}
SC_SEED = CipherSymmetricInfo{"SEED", 128, 128, false}
SC_3DES = CipherSymmetricInfo{"3DES", 112, 64, false}
SC_ARIA128 = CipherSymmetricInfo{"ARIA128", 128, 128, false}
SC_ARIA256 = CipherSymmetricInfo{"ARIA256", 256, 128, false}
SC_AES128 = CipherSymmetricInfo{"AES128", 128, 128, false}
SC_AES256 = CipherSymmetricInfo{"AES256", 256, 128, false}
SC_CAMELLIA128 = CipherSymmetricInfo{"CAMELLIA128", 128, 128, false}
SC_CAMELLIA256 = CipherSymmetricInfo{"CAMELLIA256", 256, 128, false}
SC_CHACHA20 = CipherSymmetricInfo{"CHACHA20", 256, 256, false}
)
type CipherMACInfo struct {
Name string
TagSize uint16
AEAD bool
Broken bool
}
var (
MAC_NULL CipherMACInfo = CipherMACInfo{"NULL", 0, false, true}
MAC_MD5 = CipherMACInfo{"MD5", 128, false, true}
MAC_SHA1 = CipherMACInfo{"SHA", 160, false, false}
MAC_SHA256 = CipherMACInfo{"SHA256", 256, false, false}
MAC_SHA384 = CipherMACInfo{"SHA384", 384, false, false}
MAC_CCM = CipherMACInfo{"CCM", 128, true, false}
MAC_CCM_8 = CipherMACInfo{"CCM_8", 256, true, false}
MAC_GCM_SHA256 = CipherMACInfo{"GCM_SHA256", 256, true, false}
MAC_GCM_SHA384 = CipherMACInfo{"GCM_SHA384", 384, true, false}
MAC_POLY1305_SHA256 = CipherMACInfo{"POLY1305_SHA256", 256, true, false}
)
var TLS_NULL CipherInfo = CipherInfo{0x0000, "TLS_NULL_WITH_NULL_NULL", KX_NULL, AU_NULL, SC_NULL, MAC_NULL}
var TLS_FALLBACK_SCSV CipherInfo = CipherInfo{0x5600, "TLS_FALLBACK_SCSV", KX_NULL, AU_NULL, SC_NULL, MAC_NULL}
var AllCiphersIncludingSSL2 []CipherInfo = []CipherInfo{
CipherInfo{0x010080, "SSL_RC4_128_WITH_MD5", KX_NULL, AU_NULL, SC_NULL, MAC_NULL},
CipherInfo{0x020080, "SSL_RC4_128_EXPORT40_WITH_MD5", KX_NULL, AU_NULL, SC_NULL, MAC_NULL},
CipherInfo{0x030080, "SSL_RC2_CBC_128_CBC_WITH_MD5", KX_NULL, AU_NULL, SC_NULL, MAC_NULL},
CipherInfo{0x040080, "SSL_RC2_CBC_128_CBC_EXPORT40_WITH_MD5", KX_NULL, AU_NULL, SC_NULL, MAC_NULL},
CipherInfo{0x050080, "SSL_IDEA_128_CBC_WITH_MD5", KX_NULL, AU_NULL, SC_NULL, MAC_NULL},
CipherInfo{0x060040, "SSL_DES_64_CBC_WITH_MD5", KX_NULL, AU_NULL, SC_NULL, MAC_NULL},
CipherInfo{0x0700C0, "SSL_DES_192_EDE3_CBC_WITH_MD5", KX_NULL, AU_NULL, SC_NULL, MAC_NULL},
CipherInfo{0x0001, "TLS_RSA_WITH_NULL_MD5", KX_RSA, AU_RSA, SC_NULL, MAC_MD5},
CipherInfo{0x0002, "TLS_RSA_WITH_NULL_SHA", KX_RSA, AU_RSA, SC_NULL, MAC_SHA1},
CipherInfo{0x0003, "TLS_RSA_EXPORT_WITH_RC4_40_MD5", KX_EXPORT, AU_RSA, SC_RC4_40, MAC_MD5},
CipherInfo{0x0004, "TLS_RSA_WITH_RC4_128_MD5", KX_RSA, AU_RSA, SC_RC4, MAC_MD5},
CipherInfo{0x0005, "TLS_RSA_WITH_RC4_128_SHA", KX_RSA, AU_RSA, SC_RC4, MAC_SHA1},
CipherInfo{0x0006, "TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5", KX_EXPORT, AU_RSA, SC_RC2_40, MAC_MD5},
CipherInfo{0x0007, "TLS_RSA_WITH_IDEA_CBC_SHA", KX_RSA, AU_RSA, SC_IDEA, MAC_SHA1},
CipherInfo{0x0008, "TLS_RSA_EXPORT_WITH_DES40_CBC_SHA", KX_EXPORT, AU_RSA, SC_DES_40, MAC_SHA1},
CipherInfo{0x0009, "TLS_RSA_WITH_DES_CBC_SHA", KX_RSA, AU_RSA, SC_DES, MAC_SHA1},
CipherInfo{0x000A, "TLS_RSA_WITH_3DES_EDE_CBC_SHA", KX_RSA, AU_RSA, SC_3DES, MAC_SHA1},
CipherInfo{0x000B, "TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA", KX_FFDH_EXPORT, AU_DSA, SC_DES_40, MAC_SHA1},
CipherInfo{0x000C, "TLS_DH_DSS_WITH_DES_CBC_SHA", KX_FFDH, AU_DSA, SC_DES, MAC_SHA1},
CipherInfo{0x000D, "TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA", KX_FFDH, AU_DSA, SC_3DES, MAC_SHA1},
CipherInfo{0x000E, "TLS_DH_RSA_EXPORT_WITH_DES40_CBC_SHA", KX_FFDH_EXPORT, AU_RSA, SC_DES_40, MAC_SHA1},
CipherInfo{0x000F, "TLS_DH_RSA_WITH_DES_CBC_SHA", KX_FFDH, AU_RSA, SC_DES, MAC_SHA1},
CipherInfo{0x0010, "TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA", KX_FFDH, AU_RSA, SC_3DES, MAC_SHA1},
CipherInfo{0x0011, "TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA", KX_FFDHE_EXPORT, AU_DSA, SC_DES_40, MAC_SHA1},
CipherInfo{0x0012, "TLS_DHE_DSS_WITH_DES_CBC_SHA", KX_FFDHE, AU_DSA, SC_DES, MAC_SHA1},
CipherInfo{0x0013, "TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA", KX_FFDHE, AU_DSA, SC_3DES, MAC_SHA1},
CipherInfo{0x0014, "TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA", KX_FFDHE_EXPORT, AU_RSA, SC_DES_40, MAC_SHA1},
CipherInfo{0x0015, "TLS_DHE_RSA_WITH_DES_CBC_SHA", KX_FFDHE, AU_RSA, SC_DES, MAC_SHA1},
CipherInfo{0x0016, "TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA", KX_FFDHE, AU_RSA, SC_3DES, MAC_SHA1},
CipherInfo{0x0017, "TLS_DH_anon_EXPORT_WITH_RC4_40_MD5", KX_FFDH_EXPORT, AU_NULL, SC_RC4_40, MAC_MD5},
CipherInfo{0x0018, "TLS_DH_anon_WITH_RC4_128_MD5", KX_FFDH, AU_NULL, SC_RC4, MAC_MD5},
CipherInfo{0x0019, "TLS_DH_anon_EXPORT_WITH_DES40_CBC_SHA", KX_FFDH_EXPORT, AU_NULL, SC_DES_40, MAC_SHA1},
CipherInfo{0x001A, "TLS_DH_anon_WITH_DES_CBC_SHA", KX_FFDH, AU_NULL, SC_DES, MAC_SHA1},
CipherInfo{0x001B, "TLS_DH_anon_WITH_3DES_EDE_CBC_SHA", KX_FFDH, AU_NULL, SC_3DES, MAC_SHA1},
CipherInfo{0x001E, "TLS_KRB5_WITH_DES_CBC_SHA", KX_KRB5, AU_KRB5, SC_DES, MAC_SHA1},
CipherInfo{0x001F, "TLS_KRB5_WITH_3DES_EDE_CBC_SHA", KX_KRB5, AU_KRB5, SC_3DES, MAC_SHA1},
CipherInfo{0x0020, "TLS_KRB5_WITH_RC4_128_SHA", KX_KRB5, AU_KRB5, SC_RC4, MAC_SHA1},
CipherInfo{0x0021, "TLS_KRB5_WITH_IDEA_CBC_SHA", KX_KRB5, AU_KRB5, SC_IDEA, MAC_SHA1},
CipherInfo{0x0022, "TLS_KRB5_WITH_DES_CBC_MD5", KX_KRB5, AU_KRB5, SC_DES, MAC_MD5},
CipherInfo{0x0023, "TLS_KRB5_WITH_3DES_EDE_CBC_MD5", KX_KRB5, AU_KRB5, SC_3DES, MAC_MD5},
CipherInfo{0x0024, "TLS_KRB5_WITH_RC4_128_MD5", KX_KRB5, AU_KRB5, SC_RC4, MAC_MD5},
CipherInfo{0x0025, "TLS_KRB5_WITH_IDEA_CBC_MD5", KX_KRB5, AU_KRB5, SC_IDEA, MAC_MD5},
CipherInfo{0x0026, "TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA", KX_KRB5_EXPORT, AU_KRB5, SC_DES, MAC_SHA1},
CipherInfo{0x0027, "TLS_KRB5_EXPORT_WITH_RC2_CBC_40_SHA", KX_KRB5_EXPORT, AU_KRB5, SC_RC2_40, MAC_SHA1},
CipherInfo{0x0028, "TLS_KRB5_EXPORT_WITH_RC4_40_SHA", KX_KRB5_EXPORT, AU_KRB5, SC_RC4_40, MAC_SHA1},
CipherInfo{0x0029, "TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5", KX_KRB5_EXPORT, AU_KRB5, SC_DES, MAC_MD5},
CipherInfo{0x002A, "TLS_KRB5_EXPORT_WITH_RC2_CBC_40_MD5", KX_KRB5_EXPORT, AU_KRB5, SC_RC2_40, MAC_MD5},
CipherInfo{0x002B, "TLS_KRB5_EXPORT_WITH_RC4_40_MD5", KX_KRB5_EXPORT, AU_KRB5, SC_RC4_40, MAC_MD5},
CipherInfo{0x002C, "TLS_PSK_WITH_NULL_SHA", KX_PSK, AU_PSK, SC_NULL, MAC_SHA1},
CipherInfo{0x002D, "TLS_DHE_PSK_WITH_NULL_SHA", KX_FFDHE, AU_PSK, SC_NULL, MAC_SHA1},
CipherInfo{0x002E, "TLS_RSA_PSK_WITH_NULL_SHA", KX_RSA, AU_PSK, SC_NULL, MAC_SHA1},
CipherInfo{0x002F, "TLS_RSA_WITH_AES_128_CBC_SHA", KX_RSA, AU_RSA, SC_AES128, MAC_SHA1},
CipherInfo{0x0030, "TLS_DH_DSS_WITH_AES_128_CBC_SHA", KX_FFDH, AU_DSA, SC_AES128, MAC_SHA1},
CipherInfo{0x0031, "TLS_DH_RSA_WITH_AES_128_CBC_SHA", KX_FFDH, AU_RSA, SC_AES128, MAC_SHA1},
CipherInfo{0x0032, "TLS_DHE_DSS_WITH_AES_128_CBC_SHA", KX_FFDHE, AU_DSA, SC_AES128, MAC_SHA1},
CipherInfo{0x0033, "TLS_DHE_RSA_WITH_AES_128_CBC_SHA", KX_FFDHE, AU_RSA, SC_AES128, MAC_SHA1},
CipherInfo{0x0034, "TLS_DH_anon_WITH_AES_128_CBC_SHA", KX_FFDH, AU_NULL, SC_AES128, MAC_SHA1},
CipherInfo{0x0035, "TLS_RSA_WITH_AES_256_CBC_SHA", KX_RSA, AU_RSA, SC_AES256, MAC_SHA1},
CipherInfo{0x0036, "TLS_DH_DSS_WITH_AES_256_CBC_SHA", KX_FFDH, AU_DSA, SC_AES256, MAC_SHA1},
CipherInfo{0x0037, "TLS_DH_RSA_WITH_AES_256_CBC_SHA", KX_FFDH, AU_RSA, SC_AES256, MAC_SHA1},
CipherInfo{0x0038, "TLS_DHE_DSS_WITH_AES_256_CBC_SHA", KX_FFDHE, AU_DSA, SC_AES256, MAC_SHA1},
CipherInfo{0x0039, "TLS_DHE_RSA_WITH_AES_256_CBC_SHA", KX_FFDHE, AU_RSA, SC_AES256, MAC_SHA1},
CipherInfo{0x003A, "TLS_DH_anon_WITH_AES_256_CBC_SHA", KX_FFDH, AU_NULL, SC_AES256, MAC_SHA1},
CipherInfo{0x003B, "TLS_RSA_WITH_NULL_SHA256", KX_RSA, AU_RSA, SC_NULL, MAC_SHA256},
CipherInfo{0x003C, "TLS_RSA_WITH_AES_128_CBC_SHA256", KX_RSA, AU_RSA, SC_AES128, MAC_SHA256},
CipherInfo{0x003D, "TLS_RSA_WITH_AES_256_CBC_SHA256", KX_RSA, AU_RSA, SC_AES256, MAC_SHA256},
CipherInfo{0x003E, "TLS_DH_DSS_WITH_AES_128_CBC_SHA256", KX_FFDH, AU_DSA, SC_AES128, MAC_SHA256},
CipherInfo{0x003F, "TLS_DH_RSA_WITH_AES_128_CBC_SHA256", KX_FFDH, AU_RSA, SC_AES128, MAC_SHA256},
CipherInfo{0x0040, "TLS_DHE_DSS_WITH_AES_128_CBC_SHA256", KX_FFDHE, AU_DSA, SC_AES128, MAC_SHA256},
CipherInfo{0x0041, "TLS_RSA_WITH_CAMELLIA_128_CBC_SHA", KX_RSA, AU_RSA, SC_CAMELLIA128, MAC_SHA1},
CipherInfo{0x0042, "TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA", KX_FFDH, AU_DSA, SC_CAMELLIA128, MAC_SHA1},
CipherInfo{0x0043, "TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA", KX_FFDH, AU_RSA, SC_CAMELLIA128, MAC_SHA1},
CipherInfo{0x0044, "TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA", KX_FFDHE, AU_DSA, SC_CAMELLIA128, MAC_SHA1},
CipherInfo{0x0045, "TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA", KX_FFDHE, AU_RSA, SC_CAMELLIA128, MAC_SHA1},
CipherInfo{0x0046, "TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA", KX_FFDH, AU_NULL, SC_CAMELLIA128, MAC_SHA1},
CipherInfo{0x0067, "TLS_DHE_RSA_WITH_AES_128_CBC_SHA256", KX_FFDHE, AU_RSA, SC_AES128, MAC_SHA256},
CipherInfo{0x0068, "TLS_DH_DSS_WITH_AES_256_CBC_SHA256", KX_FFDH, AU_DSA, SC_AES256, MAC_SHA256},
CipherInfo{0x0069, "TLS_DH_RSA_WITH_AES_256_CBC_SHA256", KX_FFDH, AU_RSA, SC_AES256, MAC_SHA256},
CipherInfo{0x006A, "TLS_DHE_DSS_WITH_AES_256_CBC_SHA256", KX_FFDHE, AU_DSA, SC_AES256, MAC_SHA256},
CipherInfo{0x006B, "TLS_DHE_RSA_WITH_AES_256_CBC_SHA256", KX_FFDHE, AU_RSA, SC_AES256, MAC_SHA256},
CipherInfo{0x006C, "TLS_DH_anon_WITH_AES_128_CBC_SHA256", KX_FFDH, AU_NULL, SC_AES128, MAC_SHA256},
CipherInfo{0x006D, "TLS_DH_anon_WITH_AES_256_CBC_SHA256", KX_FFDH, AU_NULL, SC_AES256, MAC_SHA256},
CipherInfo{0x0084, "TLS_RSA_WITH_CAMELLIA_256_CBC_SHA", KX_RSA, AU_RSA, SC_CAMELLIA256, MAC_SHA1},
CipherInfo{0x0085, "TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA", KX_FFDH, AU_DSA, SC_CAMELLIA256, MAC_SHA1},
CipherInfo{0x0086, "TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA", KX_FFDH, AU_RSA, SC_CAMELLIA256, MAC_SHA1},
CipherInfo{0x0087, "TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA", KX_FFDHE, AU_DSA, SC_CAMELLIA256, MAC_SHA1},
CipherInfo{0x0088, "TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA", KX_FFDHE, AU_RSA, SC_CAMELLIA256, MAC_SHA1},
CipherInfo{0x0089, "TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA", KX_FFDH, AU_NULL, SC_CAMELLIA256, MAC_SHA1},
CipherInfo{0x008A, "TLS_PSK_WITH_RC4_128_SHA", KX_PSK, AU_PSK, SC_RC4, MAC_SHA1},
CipherInfo{0x008B, "TLS_PSK_WITH_3DES_EDE_CBC_SHA", KX_PSK, AU_PSK, SC_3DES, MAC_SHA1},
CipherInfo{0x008C, "TLS_PSK_WITH_AES_128_CBC_SHA", KX_PSK, AU_PSK, SC_AES128, MAC_SHA1},
CipherInfo{0x008D, "TLS_PSK_WITH_AES_256_CBC_SHA", KX_PSK, AU_PSK, SC_AES256, MAC_SHA1},
CipherInfo{0x008E, "TLS_DHE_PSK_WITH_RC4_128_SHA", KX_FFDHE, AU_PSK, SC_RC4, MAC_SHA1},
CipherInfo{0x008F, "TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA", KX_FFDHE, AU_PSK, SC_3DES, MAC_SHA1},
CipherInfo{0x0090, "TLS_DHE_PSK_WITH_AES_128_CBC_SHA", KX_FFDHE, AU_PSK, SC_AES128, MAC_SHA1},
CipherInfo{0x0091, "TLS_DHE_PSK_WITH_AES_256_CBC_SHA", KX_FFDHE, AU_PSK, SC_AES256, MAC_SHA1},
CipherInfo{0x0092, "TLS_RSA_PSK_WITH_RC4_128_SHA", KX_RSA, AU_PSK, SC_RC4, MAC_SHA1},
CipherInfo{0x0093, "TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA", KX_RSA, AU_PSK, SC_3DES, MAC_SHA1},
CipherInfo{0x0094, "TLS_RSA_PSK_WITH_AES_128_CBC_SHA", KX_RSA, AU_PSK, SC_AES128, MAC_SHA1},
CipherInfo{0x0095, "TLS_RSA_PSK_WITH_AES_256_CBC_SHA", KX_RSA, AU_PSK, SC_AES256, MAC_SHA1},
CipherInfo{0x0096, "TLS_RSA_WITH_SEED_CBC_SHA", KX_RSA, AU_RSA, SC_SEED, MAC_SHA1},
CipherInfo{0x0097, "TLS_DH_DSS_WITH_SEED_CBC_SHA", KX_FFDH, AU_DSA, SC_SEED, MAC_SHA1},
CipherInfo{0x0098, "TLS_DH_RSA_WITH_SEED_CBC_SHA", KX_FFDH, AU_RSA, SC_SEED, MAC_SHA1},
CipherInfo{0x0099, "TLS_DHE_DSS_WITH_SEED_CBC_SHA", KX_FFDHE, AU_DSA, SC_SEED, MAC_SHA1},
CipherInfo{0x009A, "TLS_DHE_RSA_WITH_SEED_CBC_SHA", KX_FFDHE, AU_RSA, SC_SEED, MAC_SHA1},
CipherInfo{0x009B, "TLS_DH_anon_WITH_SEED_CBC_SHA", KX_FFDH, AU_NULL, SC_SEED, MAC_SHA1},
CipherInfo{0x009C, "TLS_RSA_WITH_AES_128_GCM_SHA256", KX_RSA, AU_RSA, SC_AES128, MAC_GCM_SHA256},
CipherInfo{0x009D, "TLS_RSA_WITH_AES_256_GCM_SHA384", KX_RSA, AU_RSA, SC_AES256, MAC_GCM_SHA384},
CipherInfo{0x009E, "TLS_DHE_RSA_WITH_AES_128_GCM_SHA256", KX_FFDHE, AU_RSA, SC_AES128, MAC_GCM_SHA256},
CipherInfo{0x009F, "TLS_DHE_RSA_WITH_AES_256_GCM_SHA384", KX_FFDHE, AU_RSA, SC_AES256, MAC_GCM_SHA384},
CipherInfo{0x00A0, "TLS_DH_RSA_WITH_AES_128_GCM_SHA256", KX_FFDH, AU_RSA, SC_AES128, MAC_GCM_SHA256},
CipherInfo{0x00A1, "TLS_DH_RSA_WITH_AES_256_GCM_SHA384", KX_FFDH, AU_RSA, SC_AES256, MAC_GCM_SHA384},
CipherInfo{0x00A2, "TLS_DHE_DSS_WITH_AES_128_GCM_SHA256", KX_FFDHE, AU_DSA, SC_AES128, MAC_GCM_SHA256},
CipherInfo{0x00A3, "TLS_DHE_DSS_WITH_AES_256_GCM_SHA384", KX_FFDHE, AU_DSA, SC_AES256, MAC_GCM_SHA384},
CipherInfo{0x00A4, "TLS_DH_DSS_WITH_AES_128_GCM_SHA256", KX_FFDH, AU_DSA, SC_AES128, MAC_GCM_SHA256},
CipherInfo{0x00A5, "TLS_DH_DSS_WITH_AES_256_GCM_SHA384", KX_FFDH, AU_DSA, SC_AES256, MAC_GCM_SHA384},
CipherInfo{0x00A6, "TLS_DH_anon_WITH_AES_128_GCM_SHA256", KX_FFDH, AU_NULL, SC_AES128, MAC_GCM_SHA256},
CipherInfo{0x00A7, "TLS_DH_anon_WITH_AES_256_GCM_SHA384", KX_FFDH, AU_NULL, SC_AES256, MAC_GCM_SHA384},
CipherInfo{0x00A8, "TLS_PSK_WITH_AES_128_GCM_SHA256", KX_PSK, AU_PSK, SC_AES128, MAC_GCM_SHA256},
CipherInfo{0x00A9, "TLS_PSK_WITH_AES_256_GCM_SHA384", KX_PSK, AU_PSK, SC_AES256, MAC_GCM_SHA384},
CipherInfo{0x00AA, "TLS_DHE_PSK_WITH_AES_128_GCM_SHA256", KX_FFDHE, AU_PSK, SC_AES128, MAC_GCM_SHA256},
CipherInfo{0x00AB, "TLS_DHE_PSK_WITH_AES_256_GCM_SHA384", KX_FFDHE, AU_PSK, SC_AES256, MAC_GCM_SHA384},
CipherInfo{0x00AC, "TLS_RSA_PSK_WITH_AES_128_GCM_SHA256", KX_RSA, AU_PSK, SC_AES128, MAC_GCM_SHA256},
CipherInfo{0x00AD, "TLS_RSA_PSK_WITH_AES_256_GCM_SHA384", KX_RSA, AU_PSK, SC_AES256, MAC_GCM_SHA384},
CipherInfo{0x00AE, "TLS_PSK_WITH_AES_128_CBC_SHA256", KX_PSK, AU_PSK, SC_AES128, MAC_SHA256},
CipherInfo{0x00AF, "TLS_PSK_WITH_AES_256_CBC_SHA384", KX_PSK, AU_PSK, SC_AES256, MAC_SHA384},
CipherInfo{0x00B0, "TLS_PSK_WITH_NULL_SHA256", KX_PSK, AU_PSK, SC_NULL, MAC_SHA256},
CipherInfo{0x00B1, "TLS_PSK_WITH_NULL_SHA384", KX_PSK, AU_PSK, SC_NULL, MAC_SHA384},
CipherInfo{0x00B2, "TLS_DHE_PSK_WITH_AES_128_CBC_SHA256", KX_FFDHE, AU_PSK, SC_AES128, MAC_SHA256},
CipherInfo{0x00B3, "TLS_DHE_PSK_WITH_AES_256_CBC_SHA384", KX_FFDHE, AU_PSK, SC_AES256, MAC_SHA384},
CipherInfo{0x00B4, "TLS_DHE_PSK_WITH_NULL_SHA256", KX_FFDHE, AU_PSK, SC_NULL, MAC_SHA256},
CipherInfo{0x00B5, "TLS_DHE_PSK_WITH_NULL_SHA384", KX_FFDHE, AU_PSK, SC_NULL, MAC_SHA384},
CipherInfo{0x00B6, "TLS_RSA_PSK_WITH_AES_128_CBC_SHA256", KX_RSA, AU_PSK, SC_AES128, MAC_SHA256},
CipherInfo{0x00B7, "TLS_RSA_PSK_WITH_AES_256_CBC_SHA384", KX_RSA, AU_PSK, SC_AES256, MAC_SHA384},
CipherInfo{0x00B8, "TLS_RSA_PSK_WITH_NULL_SHA256", KX_RSA, AU_PSK, SC_NULL, MAC_SHA256},
CipherInfo{0x00B9, "TLS_RSA_PSK_WITH_NULL_SHA384", KX_RSA, AU_PSK, SC_NULL, MAC_SHA384},
CipherInfo{0x00BA, "TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256", KX_RSA, AU_RSA, SC_CAMELLIA128, MAC_SHA256},
CipherInfo{0x00BB, "TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA256", KX_FFDH, AU_DSA, SC_CAMELLIA128, MAC_SHA256},
CipherInfo{0x00BC, "TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA256", KX_FFDH, AU_RSA, SC_CAMELLIA128, MAC_SHA256},
CipherInfo{0x00BD, "TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256", KX_FFDHE, AU_DSA, SC_CAMELLIA128, MAC_SHA256},
CipherInfo{0x00BE, "TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256", KX_FFDHE, AU_RSA, SC_CAMELLIA128, MAC_SHA256},
CipherInfo{0x00BF, "TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA256", KX_FFDH, AU_NULL, SC_CAMELLIA128, MAC_SHA256},
CipherInfo{0x00C0, "TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256", KX_RSA, AU_RSA, SC_CAMELLIA256, MAC_SHA256},
CipherInfo{0x00C1, "TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA256", KX_FFDH, AU_DSA, SC_CAMELLIA256, MAC_SHA256},
CipherInfo{0x00C2, "TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA256", KX_FFDH, AU_RSA, SC_CAMELLIA256, MAC_SHA256},
CipherInfo{0x00C3, "TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256", KX_FFDHE, AU_DSA, SC_CAMELLIA256, MAC_SHA256},
CipherInfo{0x00C4, "TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256", KX_FFDHE, AU_RSA, SC_CAMELLIA256, MAC_SHA256},
CipherInfo{0x00C5, "TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA256", KX_FFDH, AU_NULL, SC_CAMELLIA256, MAC_SHA256},
CipherInfo{0xC001, "TLS_ECDH_ECDSA_WITH_NULL_SHA", KX_ECDH, AU_ECDSA, SC_NULL, MAC_SHA1},
CipherInfo{0xC002, "TLS_ECDH_ECDSA_WITH_RC4_128_SHA", KX_ECDH, AU_ECDSA, SC_RC4, MAC_SHA1},
CipherInfo{0xC003, "TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA", KX_ECDH, AU_ECDSA, SC_3DES, MAC_SHA1},
CipherInfo{0xC004, "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA", KX_ECDH, AU_ECDSA, SC_AES128, MAC_SHA1},
CipherInfo{0xC005, "TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA", KX_ECDH, AU_ECDSA, SC_AES256, MAC_SHA1},
CipherInfo{0xC006, "TLS_ECDHE_ECDSA_WITH_NULL_SHA", KX_ECDHE, AU_ECDSA, SC_NULL, MAC_SHA1},
CipherInfo{0xC007, "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA", KX_ECDHE, AU_ECDSA, SC_RC4, MAC_SHA1},
CipherInfo{0xC008, "TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA", KX_ECDHE, AU_ECDSA, SC_3DES, MAC_SHA1},
CipherInfo{0xC009, "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA", KX_ECDHE, AU_ECDSA, SC_AES128, MAC_SHA1},
CipherInfo{0xC00A, "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA", KX_ECDHE, AU_ECDSA, SC_AES256, MAC_SHA1},
CipherInfo{0xC00B, "TLS_ECDH_RSA_WITH_NULL_SHA", KX_ECDH, AU_RSA, SC_NULL, MAC_SHA1},
CipherInfo{0xC00C, "TLS_ECDH_RSA_WITH_RC4_128_SHA", KX_ECDH, AU_RSA, SC_RC4, MAC_SHA1},
CipherInfo{0xC00D, "TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA", KX_ECDH, AU_RSA, SC_3DES, MAC_SHA1},
CipherInfo{0xC00E, "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA", KX_ECDH, AU_RSA, SC_AES128, MAC_SHA1},
CipherInfo{0xC00F, "TLS_ECDH_RSA_WITH_AES_256_CBC_SHA", KX_ECDH, AU_RSA, SC_AES256, MAC_SHA1},
CipherInfo{0xC010, "TLS_ECDHE_RSA_WITH_NULL_SHA", KX_ECDHE, AU_RSA, SC_NULL, MAC_SHA1},
CipherInfo{0xC011, "TLS_ECDHE_RSA_WITH_RC4_128_SHA", KX_ECDHE, AU_RSA, SC_RC4, MAC_SHA1},
CipherInfo{0xC012, "TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA", KX_ECDHE, AU_RSA, SC_3DES, MAC_SHA1},
CipherInfo{0xC013, "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA", KX_ECDHE, AU_RSA, SC_AES128, MAC_SHA1},
CipherInfo{0xC014, "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA", KX_ECDHE, AU_RSA, SC_AES256, MAC_SHA1},
CipherInfo{0xC015, "TLS_ECDH_anon_WITH_NULL_SHA", KX_ECDH, AU_NULL, SC_NULL, MAC_SHA1},
CipherInfo{0xC016, "TLS_ECDH_anon_WITH_RC4_128_SHA", KX_ECDH, AU_NULL, SC_RC4, MAC_SHA1},
CipherInfo{0xC017, "TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA", KX_ECDH, AU_NULL, SC_3DES, MAC_SHA1},
CipherInfo{0xC018, "TLS_ECDH_anon_WITH_AES_128_CBC_SHA", KX_ECDH, AU_NULL, SC_AES128, MAC_SHA1},
CipherInfo{0xC019, "TLS_ECDH_anon_WITH_AES_256_CBC_SHA", KX_ECDH, AU_NULL, SC_AES256, MAC_SHA1},
CipherInfo{0xC01A, "TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA", KX_SRP, AU_NULL, SC_3DES, MAC_SHA1},
CipherInfo{0xC01B, "TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA", KX_SRP, AU_RSA, SC_3DES, MAC_SHA1},
CipherInfo{0xC01C, "TLS_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA", KX_SRP, AU_DSA, SC_3DES, MAC_SHA1},
CipherInfo{0xC01D, "TLS_SRP_SHA_WITH_AES_128_CBC_SHA", KX_SRP, AU_NULL, SC_AES128, MAC_SHA1},
CipherInfo{0xC01E, "TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA", KX_SRP, AU_RSA, SC_AES128, MAC_SHA1},
CipherInfo{0xC01F, "TLS_SRP_SHA_DSS_WITH_AES_128_CBC_SHA", KX_SRP, AU_DSA, SC_AES128, MAC_SHA1},
CipherInfo{0xC020, "TLS_SRP_SHA_WITH_AES_256_CBC_SHA", KX_SRP, AU_NULL, SC_AES256, MAC_SHA1},
CipherInfo{0xC021, "TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA", KX_SRP, AU_RSA, SC_AES256, MAC_SHA1},
CipherInfo{0xC022, "TLS_SRP_SHA_DSS_WITH_AES_256_CBC_SHA", KX_SRP, AU_DSA, SC_AES256, MAC_SHA1},
CipherInfo{0xC023, "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256", KX_ECDHE, AU_ECDSA, SC_AES128, MAC_SHA256},
CipherInfo{0xC024, "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384", KX_ECDHE, AU_ECDSA, SC_AES256, MAC_SHA384},
CipherInfo{0xC025, "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256", KX_ECDH, AU_ECDSA, SC_AES128, MAC_SHA256},
CipherInfo{0xC026, "TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384", KX_ECDH, AU_ECDSA, SC_AES256, MAC_SHA384},
CipherInfo{0xC027, "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256", KX_ECDHE, AU_RSA, SC_AES128, MAC_SHA256},
CipherInfo{0xC028, "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384", KX_ECDHE, AU_RSA, SC_AES256, MAC_SHA384},
CipherInfo{0xC029, "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256", KX_ECDH, AU_RSA, SC_AES128, MAC_SHA256},
CipherInfo{0xC02A, "TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384", KX_ECDH, AU_RSA, SC_AES256, MAC_SHA384},
CipherInfo{0xC02B, "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256", KX_ECDHE, AU_ECDSA, SC_AES128, MAC_GCM_SHA256},
CipherInfo{0xC02C, "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384", KX_ECDHE, AU_ECDSA, SC_AES256, MAC_GCM_SHA384},
CipherInfo{0xC02D, "TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256", KX_ECDH, AU_ECDSA, SC_AES128, MAC_GCM_SHA256},
CipherInfo{0xC02E, "TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384", KX_ECDH, AU_ECDSA, SC_AES256, MAC_GCM_SHA384},
CipherInfo{0xC02F, "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256", KX_ECDHE, AU_RSA, SC_AES128, MAC_GCM_SHA256},
CipherInfo{0xC030, "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384", KX_ECDHE, AU_RSA, SC_AES256, MAC_GCM_SHA384},
CipherInfo{0xC031, "TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256", KX_ECDH, AU_RSA, SC_AES128, MAC_GCM_SHA256},
CipherInfo{0xC032, "TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384", KX_ECDH, AU_RSA, SC_AES256, MAC_GCM_SHA384},
CipherInfo{0xC033, "TLS_ECDHE_PSK_WITH_RC4_128_SHA", KX_ECDHE, AU_PSK, SC_RC4, MAC_SHA1},
CipherInfo{0xC034, "TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA", KX_ECDHE, AU_PSK, SC_3DES, MAC_SHA1},
CipherInfo{0xC035, "TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA", KX_ECDHE, AU_PSK, SC_AES128, MAC_SHA1},
CipherInfo{0xC036, "TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA", KX_ECDHE, AU_PSK, SC_AES256, MAC_SHA1},
CipherInfo{0xC037, "TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256", KX_ECDHE, AU_PSK, SC_AES128, MAC_SHA256},
CipherInfo{0xC038, "TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384", KX_ECDHE, AU_PSK, SC_AES256, MAC_SHA384},
CipherInfo{0xC039, "TLS_ECDHE_PSK_WITH_NULL_SHA", KX_ECDHE, AU_PSK, SC_NULL, MAC_SHA1},
CipherInfo{0xC03A, "TLS_ECDHE_PSK_WITH_NULL_SHA256", KX_ECDHE, AU_PSK, SC_NULL, MAC_SHA256},
CipherInfo{0xC03B, "TLS_ECDHE_PSK_WITH_NULL_SHA384", KX_ECDHE, AU_PSK, SC_NULL, MAC_SHA384},
CipherInfo{0xC03C, "TLS_RSA_WITH_ARIA_128_CBC_SHA256", KX_RSA, AU_RSA, SC_ARIA128, MAC_SHA256},
CipherInfo{0xC03D, "TLS_RSA_WITH_ARIA_256_CBC_SHA384", KX_RSA, AU_RSA, SC_ARIA256, MAC_SHA384},
CipherInfo{0xC03E, "TLS_DH_DSS_WITH_ARIA_128_CBC_SHA256", KX_FFDH, AU_DSA, SC_ARIA128, MAC_SHA256},
CipherInfo{0xC03F, "TLS_DH_DSS_WITH_ARIA_256_CBC_SHA384", KX_FFDH, AU_DSA, SC_ARIA256, MAC_SHA384},
CipherInfo{0xC040, "TLS_DH_RSA_WITH_ARIA_128_CBC_SHA256", KX_FFDH, AU_RSA, SC_ARIA128, MAC_SHA256},
CipherInfo{0xC041, "TLS_DH_RSA_WITH_ARIA_256_CBC_SHA384", KX_FFDH, AU_RSA, SC_ARIA256, MAC_SHA384},
CipherInfo{0xC042, "TLS_DHE_DSS_WITH_ARIA_128_CBC_SHA256", KX_FFDHE, AU_DSA, SC_ARIA128, MAC_SHA256},
CipherInfo{0xC043, "TLS_DHE_DSS_WITH_ARIA_256_CBC_SHA384", KX_FFDHE, AU_DSA, SC_ARIA256, MAC_SHA384},
CipherInfo{0xC044, "TLS_DHE_RSA_WITH_ARIA_128_CBC_SHA256", KX_FFDHE, AU_RSA, SC_ARIA128, MAC_SHA256},
CipherInfo{0xC045, "TLS_DHE_RSA_WITH_ARIA_256_CBC_SHA384", KX_FFDHE, AU_RSA, SC_ARIA256, MAC_SHA384},
CipherInfo{0xC046, "TLS_DH_anon_WITH_ARIA_128_CBC_SHA256", KX_FFDH, AU_NULL, SC_ARIA128, MAC_SHA256},
CipherInfo{0xC047, "TLS_DH_anon_WITH_ARIA_256_CBC_SHA384", KX_FFDH, AU_NULL, SC_ARIA256, MAC_SHA384},
CipherInfo{0xC048, "TLS_ECDHE_ECDSA_WITH_ARIA_128_CBC_SHA256", KX_ECDHE, AU_ECDSA, SC_ARIA128, MAC_SHA256},
CipherInfo{0xC049, "TLS_ECDHE_ECDSA_WITH_ARIA_256_CBC_SHA384", KX_ECDHE, AU_ECDSA, SC_ARIA256, MAC_SHA384},
CipherInfo{0xC04A, "TLS_ECDH_ECDSA_WITH_ARIA_128_CBC_SHA256", KX_ECDH, AU_ECDSA, SC_ARIA128, MAC_SHA256},
CipherInfo{0xC04B, "TLS_ECDH_ECDSA_WITH_ARIA_256_CBC_SHA384", KX_ECDH, AU_ECDSA, SC_ARIA256, MAC_SHA384},
CipherInfo{0xC04C, "TLS_ECDHE_RSA_WITH_ARIA_128_CBC_SHA256", KX_ECDHE, AU_RSA, SC_ARIA128, MAC_SHA256},
CipherInfo{0xC04D, "TLS_ECDHE_RSA_WITH_ARIA_256_CBC_SHA384", KX_ECDHE, AU_RSA, SC_ARIA256, MAC_SHA384},
CipherInfo{0xC04E, "TLS_ECDH_RSA_WITH_ARIA_128_CBC_SHA256", KX_ECDH, AU_RSA, SC_ARIA128, MAC_SHA256},
CipherInfo{0xC04F, "TLS_ECDH_RSA_WITH_ARIA_256_CBC_SHA384", KX_ECDH, AU_RSA, SC_ARIA256, MAC_SHA384},
CipherInfo{0xC050, "TLS_RSA_WITH_ARIA_128_GCM_SHA256", KX_RSA, AU_RSA, SC_ARIA128, MAC_GCM_SHA256},
CipherInfo{0xC051, "TLS_RSA_WITH_ARIA_256_GCM_SHA384", KX_RSA, AU_RSA, SC_ARIA256, MAC_GCM_SHA384},
CipherInfo{0xC052, "TLS_DHE_RSA_WITH_ARIA_128_GCM_SHA256", KX_FFDHE, AU_RSA, SC_ARIA128, MAC_GCM_SHA256},
CipherInfo{0xC053, "TLS_DHE_RSA_WITH_ARIA_256_GCM_SHA384", KX_FFDHE, AU_RSA, SC_ARIA256, MAC_GCM_SHA384},
CipherInfo{0xC054, "TLS_DH_RSA_WITH_ARIA_128_GCM_SHA256", KX_FFDH, AU_RSA, SC_ARIA128, MAC_GCM_SHA256},
CipherInfo{0xC055, "TLS_DH_RSA_WITH_ARIA_256_GCM_SHA384", KX_FFDH, AU_RSA, SC_ARIA256, MAC_GCM_SHA384},
CipherInfo{0xC056, "TLS_DHE_DSS_WITH_ARIA_128_GCM_SHA256", KX_FFDHE, AU_DSA, SC_ARIA128, MAC_GCM_SHA256},
CipherInfo{0xC057, "TLS_DHE_DSS_WITH_ARIA_256_GCM_SHA384", KX_FFDHE, AU_DSA, SC_ARIA256, MAC_GCM_SHA384},
CipherInfo{0xC058, "TLS_DH_DSS_WITH_ARIA_128_GCM_SHA256", KX_FFDH, AU_DSA, SC_ARIA128, MAC_GCM_SHA256},
CipherInfo{0xC059, "TLS_DH_DSS_WITH_ARIA_256_GCM_SHA384", KX_FFDH, AU_DSA, SC_ARIA256, MAC_GCM_SHA384},
CipherInfo{0xC05A, "TLS_DH_anon_WITH_ARIA_128_GCM_SHA256", KX_FFDH, AU_NULL, SC_ARIA128, MAC_GCM_SHA256},
CipherInfo{0xC05B, "TLS_DH_anon_WITH_ARIA_256_GCM_SHA384", KX_FFDH, AU_NULL, SC_ARIA256, MAC_GCM_SHA384},
CipherInfo{0xC05C, "TLS_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256", KX_ECDHE, AU_ECDSA, SC_ARIA128, MAC_GCM_SHA256},
CipherInfo{0xC05D, "TLS_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384", KX_ECDHE, AU_ECDSA, SC_ARIA256, MAC_GCM_SHA384},
CipherInfo{0xC05E, "TLS_ECDH_ECDSA_WITH_ARIA_128_GCM_SHA256", KX_ECDH, AU_ECDSA, SC_ARIA128, MAC_GCM_SHA256},
CipherInfo{0xC05F, "TLS_ECDH_ECDSA_WITH_ARIA_256_GCM_SHA384", KX_ECDH, AU_ECDSA, SC_ARIA256, MAC_GCM_SHA384},
CipherInfo{0xC060, "TLS_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256", KX_ECDHE, AU_RSA, SC_ARIA128, MAC_GCM_SHA256},
CipherInfo{0xC061, "TLS_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384", KX_ECDHE, AU_RSA, SC_ARIA256, MAC_GCM_SHA384},
CipherInfo{0xC062, "TLS_ECDH_RSA_WITH_ARIA_128_GCM_SHA256", KX_ECDH, AU_RSA, SC_ARIA128, MAC_GCM_SHA256},
CipherInfo{0xC063, "TLS_ECDH_RSA_WITH_ARIA_256_GCM_SHA384", KX_ECDH, AU_RSA, SC_ARIA256, MAC_GCM_SHA384},
CipherInfo{0xC064, "TLS_PSK_WITH_ARIA_128_CBC_SHA256", KX_PSK, AU_PSK, SC_ARIA128, MAC_SHA256},
CipherInfo{0xC065, "TLS_PSK_WITH_ARIA_256_CBC_SHA384", KX_PSK, AU_PSK, SC_ARIA256, MAC_SHA384},
CipherInfo{0xC066, "TLS_DHE_PSK_WITH_ARIA_128_CBC_SHA256", KX_FFDHE, AU_PSK, SC_ARIA128, MAC_SHA256},
CipherInfo{0xC067, "TLS_DHE_PSK_WITH_ARIA_256_CBC_SHA384", KX_FFDHE, AU_PSK, SC_ARIA256, MAC_SHA384},
CipherInfo{0xC068, "TLS_RSA_PSK_WITH_ARIA_128_CBC_SHA256", KX_RSA, AU_PSK, SC_ARIA128, MAC_SHA256},
CipherInfo{0xC069, "TLS_RSA_PSK_WITH_ARIA_256_CBC_SHA384", KX_RSA, AU_PSK, SC_ARIA256, MAC_SHA384},
CipherInfo{0xC06A, "TLS_PSK_WITH_ARIA_128_GCM_SHA256", KX_PSK, AU_PSK, SC_ARIA128, MAC_GCM_SHA256},
CipherInfo{0xC06B, "TLS_PSK_WITH_ARIA_256_GCM_SHA384", KX_PSK, AU_PSK, SC_ARIA256, MAC_GCM_SHA384},
CipherInfo{0xC06C, "TLS_DHE_PSK_WITH_ARIA_128_GCM_SHA256", KX_FFDHE, AU_PSK, SC_ARIA128, MAC_GCM_SHA256},
CipherInfo{0xC06D, "TLS_DHE_PSK_WITH_ARIA_256_GCM_SHA384", KX_FFDHE, AU_PSK, SC_ARIA256, MAC_GCM_SHA384},
CipherInfo{0xC06E, "TLS_RSA_PSK_WITH_ARIA_128_GCM_SHA256", KX_RSA, AU_PSK, SC_ARIA128, MAC_GCM_SHA256},
CipherInfo{0xC06F, "TLS_RSA_PSK_WITH_ARIA_256_GCM_SHA384", KX_RSA, AU_PSK, SC_ARIA256, MAC_GCM_SHA384},
CipherInfo{0xC070, "TLS_ECDHE_PSK_WITH_ARIA_128_CBC_SHA256", KX_ECDHE, AU_PSK, SC_ARIA128, MAC_SHA256},
CipherInfo{0xC071, "TLS_ECDHE_PSK_WITH_ARIA_256_CBC_SHA384", KX_ECDHE, AU_PSK, SC_ARIA256, MAC_SHA384},
CipherInfo{0xC072, "TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256", KX_ECDHE, AU_ECDSA, SC_CAMELLIA128, MAC_SHA256},
CipherInfo{0xC073, "TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384", KX_ECDHE, AU_ECDSA, SC_CAMELLIA256, MAC_SHA384},
CipherInfo{0xC074, "TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256", KX_ECDH, AU_ECDSA, SC_CAMELLIA128, MAC_SHA256},
CipherInfo{0xC075, "TLS_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384", KX_ECDH, AU_ECDSA, SC_CAMELLIA256, MAC_SHA384},
CipherInfo{0xC076, "TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256", KX_ECDHE, AU_RSA, SC_CAMELLIA128, MAC_SHA256},
CipherInfo{0xC077, "TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384", KX_ECDHE, AU_RSA, SC_CAMELLIA256, MAC_SHA384},
CipherInfo{0xC078, "TLS_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256", KX_ECDH, AU_RSA, SC_CAMELLIA128, MAC_SHA256},
CipherInfo{0xC079, "TLS_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384", KX_ECDH, AU_RSA, SC_CAMELLIA256, MAC_SHA384},
CipherInfo{0xC07A, "TLS_RSA_WITH_CAMELLIA_128_GCM_SHA256", KX_RSA, AU_RSA, SC_CAMELLIA128, MAC_GCM_SHA256},
CipherInfo{0xC07B, "TLS_RSA_WITH_CAMELLIA_256_GCM_SHA384", KX_RSA, AU_RSA, SC_CAMELLIA256, MAC_GCM_SHA384},
CipherInfo{0xC07C, "TLS_DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256", KX_FFDHE, AU_RSA, SC_CAMELLIA128, MAC_GCM_SHA256},
CipherInfo{0xC07D, "TLS_DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384", KX_FFDHE, AU_RSA, SC_CAMELLIA256, MAC_GCM_SHA384},
CipherInfo{0xC07E, "TLS_DH_RSA_WITH_CAMELLIA_128_GCM_SHA256", KX_FFDH, AU_RSA, SC_CAMELLIA128, MAC_GCM_SHA256},
CipherInfo{0xC07F, "TLS_DH_RSA_WITH_CAMELLIA_256_GCM_SHA384", KX_FFDH, AU_RSA, SC_CAMELLIA256, MAC_GCM_SHA384},
CipherInfo{0xC080, "TLS_DHE_DSS_WITH_CAMELLIA_128_GCM_SHA256", KX_FFDHE, AU_DSA, SC_CAMELLIA128, MAC_GCM_SHA256},
CipherInfo{0xC081, "TLS_DHE_DSS_WITH_CAMELLIA_256_GCM_SHA384", KX_FFDHE, AU_DSA, SC_CAMELLIA256, MAC_GCM_SHA384},
CipherInfo{0xC082, "TLS_DH_DSS_WITH_CAMELLIA_128_GCM_SHA256", KX_FFDH, AU_DSA, SC_CAMELLIA128, MAC_GCM_SHA256},
CipherInfo{0xC083, "TLS_DH_DSS_WITH_CAMELLIA_256_GCM_SHA384", KX_FFDH, AU_DSA, SC_CAMELLIA256, MAC_GCM_SHA384},
CipherInfo{0xC084, "TLS_DH_anon_WITH_CAMELLIA_128_GCM_SHA256", KX_FFDH, AU_NULL, SC_CAMELLIA128, MAC_GCM_SHA256},
CipherInfo{0xC085, "TLS_DH_anon_WITH_CAMELLIA_256_GCM_SHA384", KX_FFDH, AU_NULL, SC_CAMELLIA256, MAC_GCM_SHA384},
CipherInfo{0xC086, "TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256", KX_ECDHE, AU_ECDSA, SC_CAMELLIA128, MAC_GCM_SHA256},
CipherInfo{0xC087, "TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384", KX_ECDHE, AU_ECDSA, SC_CAMELLIA256, MAC_GCM_SHA384},
CipherInfo{0xC088, "TLS_ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256", KX_ECDH, AU_ECDSA, SC_CAMELLIA128, MAC_GCM_SHA256},
CipherInfo{0xC089, "TLS_ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384", KX_ECDH, AU_ECDSA, SC_CAMELLIA256, MAC_GCM_SHA384},
CipherInfo{0xC08A, "TLS_ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256", KX_ECDHE, AU_RSA, SC_CAMELLIA128, MAC_GCM_SHA256},
CipherInfo{0xC08B, "TLS_ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384", KX_ECDHE, AU_RSA, SC_CAMELLIA256, MAC_GCM_SHA384},
CipherInfo{0xC08C, "TLS_ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256", KX_ECDH, AU_RSA, SC_CAMELLIA128, MAC_GCM_SHA256},
CipherInfo{0xC08D, "TLS_ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384", KX_ECDH, AU_RSA, SC_CAMELLIA256, MAC_GCM_SHA384},
CipherInfo{0xC08E, "TLS_PSK_WITH_CAMELLIA_128_GCM_SHA256", KX_PSK, AU_PSK, SC_CAMELLIA128, MAC_GCM_SHA256},
CipherInfo{0xC08F, "TLS_PSK_WITH_CAMELLIA_256_GCM_SHA384", KX_PSK, AU_PSK, SC_CAMELLIA256, MAC_GCM_SHA384},
CipherInfo{0xC090, "TLS_DHE_PSK_WITH_CAMELLIA_128_GCM_SHA256", KX_FFDHE, AU_PSK, SC_CAMELLIA128, MAC_GCM_SHA256},
CipherInfo{0xC091, "TLS_DHE_PSK_WITH_CAMELLIA_256_GCM_SHA384", KX_FFDHE, AU_PSK, SC_CAMELLIA256, MAC_GCM_SHA384},
CipherInfo{0xC092, "TLS_RSA_PSK_WITH_CAMELLIA_128_GCM_SHA256", KX_RSA, AU_PSK, SC_CAMELLIA128, MAC_GCM_SHA256},
CipherInfo{0xC093, "TLS_RSA_PSK_WITH_CAMELLIA_256_GCM_SHA384", KX_RSA, AU_PSK, SC_CAMELLIA256, MAC_GCM_SHA384},
CipherInfo{0xC094, "TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256", KX_PSK, AU_PSK, SC_CAMELLIA128, MAC_SHA256},
CipherInfo{0xC095, "TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384", KX_PSK, AU_PSK, SC_CAMELLIA256, MAC_SHA384},
CipherInfo{0xC096, "TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256", KX_FFDHE, AU_PSK, SC_CAMELLIA128, MAC_SHA256},
CipherInfo{0xC097, "TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384", KX_FFDHE, AU_PSK, SC_CAMELLIA256, MAC_SHA384},
CipherInfo{0xC098, "TLS_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256", KX_RSA, AU_PSK, SC_CAMELLIA128, MAC_SHA256},
CipherInfo{0xC099, "TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384", KX_RSA, AU_PSK, SC_CAMELLIA256, MAC_SHA384},
CipherInfo{0xC09A, "TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256", KX_ECDHE, AU_PSK, SC_CAMELLIA128, MAC_SHA256},
CipherInfo{0xC09B, "TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384", KX_ECDHE, AU_PSK, SC_CAMELLIA256, MAC_SHA384},
CipherInfo{0xC09C, "TLS_RSA_WITH_AES_128_CCM", KX_RSA, AU_RSA, SC_AES128, MAC_CCM},
CipherInfo{0xC09D, "TLS_RSA_WITH_AES_256_CCM", KX_RSA, AU_RSA, SC_AES256, MAC_CCM},
CipherInfo{0xC09E, "TLS_DHE_RSA_WITH_AES_128_CCM", KX_FFDHE, AU_RSA, SC_AES128, MAC_CCM},
CipherInfo{0xC09F, "TLS_DHE_RSA_WITH_AES_256_CCM", KX_FFDHE, AU_RSA, SC_AES256, MAC_CCM},
CipherInfo{0xC0A0, "TLS_RSA_WITH_AES_128_CCM_8", KX_RSA, AU_RSA, SC_AES128, MAC_CCM_8},
CipherInfo{0xC0A1, "TLS_RSA_WITH_AES_256_CCM_8", KX_RSA, AU_RSA, SC_AES256, MAC_CCM_8},
CipherInfo{0xC0A2, "TLS_DHE_RSA_WITH_AES_128_CCM_8", KX_FFDHE, AU_RSA, SC_AES128, MAC_CCM_8},
CipherInfo{0xC0A3, "TLS_DHE_RSA_WITH_AES_256_CCM_8", KX_FFDHE, AU_RSA, SC_AES256, MAC_CCM_8},
CipherInfo{0xC0A4, "TLS_PSK_WITH_AES_128_CCM", KX_PSK, AU_PSK, SC_AES128, MAC_CCM},
CipherInfo{0xC0A5, "TLS_PSK_WITH_AES_256_CCM", KX_PSK, AU_PSK, SC_AES256, MAC_CCM},
CipherInfo{0xC0A6, "TLS_DHE_PSK_WITH_AES_128_CCM", KX_FFDHE, AU_PSK, SC_AES128, MAC_CCM},
CipherInfo{0xC0A7, "TLS_DHE_PSK_WITH_AES_256_CCM", KX_FFDHE, AU_PSK, SC_AES256, MAC_CCM},
CipherInfo{0xC0A8, "TLS_PSK_WITH_AES_128_CCM_8", KX_PSK, AU_PSK, SC_AES128, MAC_CCM_8},
CipherInfo{0xC0A9, "TLS_PSK_WITH_AES_256_CCM_8", KX_PSK, AU_PSK, SC_AES256, MAC_CCM_8},
CipherInfo{0xC0AA, "TLS_PSK_DHE_WITH_AES_128_CCM_8", KX_PSK, AU_PSK, SC_AES128, MAC_CCM_8},
CipherInfo{0xC0AB, "TLS_PSK_DHE_WITH_AES_256_CCM_8", KX_PSK, AU_PSK, SC_AES256, MAC_CCM_8},
CipherInfo{0xC0AC, "TLS_ECDHE_ECDSA_WITH_AES_128_CCM", KX_ECDHE, AU_ECDSA, SC_AES128, MAC_CCM},
CipherInfo{0xC0AD, "TLS_ECDHE_ECDSA_WITH_AES_256_CCM", KX_ECDHE, AU_ECDSA, SC_AES256, MAC_CCM},
CipherInfo{0xC0AE, "TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8", KX_ECDHE, AU_ECDSA, SC_AES128, MAC_CCM_8},
CipherInfo{0xC0AF, "TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8", KX_ECDHE, AU_ECDSA, SC_AES256, MAC_CCM_8},
CipherInfo{0xCCA8, "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256", KX_ECDHE, AU_RSA, SC_CHACHA20, MAC_POLY1305_SHA256},
CipherInfo{0xCCA9, "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256", KX_ECDHE, AU_ECDSA, SC_CHACHA20, MAC_POLY1305_SHA256},
CipherInfo{0xCCAA, "TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256", KX_FFDHE, AU_RSA, SC_CHACHA20, MAC_POLY1305_SHA256},
CipherInfo{0xCCAB, "TLS_PSK_WITH_CHACHA20_POLY1305_SHA256", KX_PSK, AU_PSK, SC_CHACHA20, MAC_POLY1305_SHA256},
CipherInfo{0xCCAC, "TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256", KX_ECDHE, AU_PSK, SC_CHACHA20, MAC_POLY1305_SHA256},
CipherInfo{0xCCAD, "TLS_DHE_PSK_WITH_CHACHA20_POLY1305_SHA256", KX_FFDHE, AU_PSK, SC_CHACHA20, MAC_POLY1305_SHA256},
CipherInfo{0xCCAE, "TLS_RSA_PSK_WITH_CHACHA20_POLY1305_SHA256", KX_RSA, AU_PSK, SC_CHACHA20, MAC_POLY1305_SHA256},
CipherInfo{0xCC13, "LIBRESSL_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256", KX_ECDHE, AU_RSA, SC_CHACHA20, MAC_POLY1305_SHA256},
CipherInfo{0xCC14, "LIBRESSL_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256", KX_ECDHE, AU_ECDSA, SC_CHACHA20, MAC_POLY1305_SHA256},
CipherInfo{0xCC15, "LIBRESSL_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256", KX_FFDHE, AU_RSA, SC_CHACHA20, MAC_POLY1305_SHA256}}
var AllCiphers []CipherInfo = AllCiphersIncludingSSL2[7:]
func IDCipher(id uint32) CipherInfo {
if id == 0x5600 {
return TLS_FALLBACK_SCSV
}
for _, c := range AllCiphersIncludingSSL2 {
if c.ID == id {
return c
}
}
return TLS_NULL
}
type CurveInfo struct {
ID uint16
Name string
EC bool
Bits uint16
}
var Curve_NULL CurveInfo = CurveInfo{0, "null", false, 0}
var AllCurves []CurveInfo = []CurveInfo{
CurveInfo{1, "sect163k1", true, 163},
CurveInfo{2, "sect163r1", true, 163},
CurveInfo{3, "sect163r2", true, 163},
CurveInfo{4, "sect193r1", true, 193},
CurveInfo{5, "sect193r2", true, 193},
CurveInfo{6, "sect233k1", true, 233},
CurveInfo{7, "sect233r1", true, 233},
CurveInfo{8, "sect239k1", true, 239},
CurveInfo{9, "sect283k1", true, 283},
CurveInfo{10, "sect283r1", true, 283},
CurveInfo{11, "sect409k1", true, 409},
CurveInfo{12, "sect409r1", true, 409},
CurveInfo{13, "sect571k1", true, 571},
CurveInfo{14, "sect571r1", true, 571},
CurveInfo{15, "secp160k1", true, 160},
CurveInfo{16, "secp160r1", true, 160},
CurveInfo{17, "secp160r2", true, 160},
CurveInfo{18, "secp192k1", true, 192},
CurveInfo{19, "secp192r1", true, 192},
CurveInfo{20, "secp224k1", true, 224},
CurveInfo{21, "secp224r1", true, 224},
CurveInfo{22, "secp256k1", true, 256},
CurveInfo{23, "secp256r1", true, 256},
CurveInfo{24, "secp384r1", true, 384},
CurveInfo{25, "secp521r1", true, 521},
CurveInfo{26, "brainpoolP256r1", true, 256},
CurveInfo{27, "brainpoolP384r1", true, 384},
CurveInfo{28, "brainpoolP512r1", true, 512},
CurveInfo{29, "temp_curve25519", true, 256},
CurveInfo{30, "temp_curve448", true, 448},
CurveInfo{256, "ffdhe2048", false, 2048},
CurveInfo{257, "ffdhe3072", false, 3072},
CurveInfo{258, "ffdhe4096", false, 4096},
CurveInfo{259, "ffdhe6144", false, 6144},
CurveInfo{260, "ffdhe8192", false, 8192},
CurveInfo{65281, "arbitrary_explicit_prime_curve", true, 0},
CurveInfo{65282, "arbitrary_explicit_char2_curve", true, 0}}
func IDCurve(id uint16) CurveInfo {
for _, c := range AllCurves {
if c.ID == id {
return c
}
}
return Curve_NULL
}
// Return the equivalent DH bit strength
func (c CurveInfo) DHBits() int {
// Lagrange interpolation of the NIST recommendation table:
// 160 → 1024
// 224 → 2048
// 256 → 3072
// 384 → 7680
// 521 → 15360
if !c.EC {
return int(c.Bits)
}
b := float64(c.Bits)
return int(2.2247113318292543e-06*(b*b*b*b) - 0.002910544879983633*(b*b*b) + 1.4166053052358345*(b*b) - 267.8476746244936*b + 18078.137135866877 + 0.5)
}
// Return the equivalent Symmetric cipher strength
func (c CurveInfo) SymBits() int {
if !c.EC {
panic("TODO: Find a NIST recommendation table for this equivalency, and also find my Lagrange interpolation script.")
} else {
// Lagrange interpolation of the NIST recommendation table:
// 160 → 80
// 224 → 112
// 256 → 128
// 384 → 192
// 521 → 256
b := float64(c.Bits)
return int(1.1838110189986005e-06*(b*b*b) - 0.0004391938880483129*(b*b) + 0.5701573762299863*b - 4.073067544406371 + 0.5)
}
}