@@ -3,14 +3,17 @@ package tlsutil
3
3
import (
4
4
"crypto/tls"
5
5
"crypto/x509"
6
+ "fmt"
6
7
"io"
7
8
"io/ioutil"
8
9
"net"
10
+ "strings"
9
11
"testing"
10
12
11
13
"github.com/hashicorp/nomad/nomad/structs/config"
12
14
"github.com/hashicorp/yamux"
13
15
"github.com/stretchr/testify/assert"
16
+ "github.com/stretchr/testify/require"
14
17
)
15
18
16
19
const (
@@ -412,3 +415,83 @@ func TestConfig_IncomingTLS_NoVerify(t *testing.T) {
412
415
t .Fatalf ("unexpected client cert" )
413
416
}
414
417
}
418
+
419
+ func TestConfig_ParseCiphers_Valid (t * testing.T ) {
420
+ require := require .New (t )
421
+
422
+ validCiphers := strings .Join ([]string {
423
+ "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305" ,
424
+ "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305" ,
425
+ "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256" ,
426
+ "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256" ,
427
+ "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384" ,
428
+ "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384" ,
429
+ "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256" ,
430
+ "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA" ,
431
+ "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256" ,
432
+ "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA" ,
433
+ "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA" ,
434
+ "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA" ,
435
+ "TLS_RSA_WITH_AES_128_GCM_SHA256" ,
436
+ "TLS_RSA_WITH_AES_256_GCM_SHA384" ,
437
+ "TLS_RSA_WITH_AES_128_CBC_SHA256" ,
438
+ "TLS_RSA_WITH_AES_128_CBC_SHA" ,
439
+ "TLS_RSA_WITH_AES_256_CBC_SHA" ,
440
+ }, "," )
441
+
442
+ expectedCiphers := []uint16 {
443
+ tls .TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 ,
444
+ tls .TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305 ,
445
+ tls .TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 ,
446
+ tls .TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 ,
447
+ tls .TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 ,
448
+ tls .TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 ,
449
+ tls .TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 ,
450
+ tls .TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA ,
451
+ tls .TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 ,
452
+ tls .TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA ,
453
+ tls .TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA ,
454
+ tls .TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA ,
455
+ tls .TLS_RSA_WITH_AES_128_GCM_SHA256 ,
456
+ tls .TLS_RSA_WITH_AES_256_GCM_SHA384 ,
457
+ tls .TLS_RSA_WITH_AES_128_CBC_SHA256 ,
458
+ tls .TLS_RSA_WITH_AES_128_CBC_SHA ,
459
+ tls .TLS_RSA_WITH_AES_256_CBC_SHA ,
460
+ }
461
+
462
+ parsedCiphers , err := ParseCiphers (validCiphers )
463
+ require .Nil (err )
464
+ require .Equal (parsedCiphers , expectedCiphers )
465
+ }
466
+
467
+ func TestConfig_ParseCiphers_Default (t * testing.T ) {
468
+ require := require .New (t )
469
+
470
+ expectedCiphers := []uint16 {
471
+ tls .TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305 ,
472
+ tls .TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 ,
473
+ tls .TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 ,
474
+ }
475
+
476
+ parsedCiphers , err := ParseCiphers ("" )
477
+ require .Nil (err )
478
+ require .Equal (parsedCiphers , expectedCiphers )
479
+ }
480
+
481
+ func TestConfig_ParseCiphers_Invalid (t * testing.T ) {
482
+ require := require .New (t )
483
+
484
+ invalidCiphers := []string {"TLS_RSA_WITH_3DES_EDE_CBC_SHA" ,
485
+ "TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA" ,
486
+ "TLS_RSA_WITH_RC4_128_SHA" ,
487
+ "TLS_ECDHE_RSA_WITH_RC4_128_SHA" ,
488
+ "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA" ,
489
+ }
490
+
491
+ for _ , cipher := range invalidCiphers {
492
+ parsedCiphers , err := ParseCiphers (cipher )
493
+ require .NotNil (err )
494
+ require .Equal (fmt .Sprintf ("unsupported cipher %q" , cipher ), err .Error ())
495
+ require .Equal (0 , len (parsedCiphers ))
496
+ }
497
+ }
0 commit comments