Revision 0a607ab97d6818295b573f2612478be936e847a6 authored by renovate[bot] on 08 June 2023, 15:08:37 UTC, committed by GitHub on 08 June 2023, 15:08:37 UTC
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
1 parent 093d0a4
Raw File
tls.go
package util

import (
	"crypto/tls"
	"fmt"
	"strings"
)

// tlsNameToVersion converts a string to a tls version
func TlsNameToVersion(name string) (uint16, error) {
	name = strings.ToUpper(name)
	switch name {
	case "TLS1.0":
		return tls.VersionTLS10, nil
	case "TLS1.1":
		return tls.VersionTLS11, nil
	case "TLS1.2":
		return tls.VersionTLS12, nil
	case "TLS1.3":
		return tls.VersionTLS13, nil
	}

	return 0, fmt.Errorf("unknown tls version: %q", name)
}

// Cipher strings https://go.dev/src/crypto/tls/cipher_suites.go
// Ex: "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256" or "TLS_RSA_WITH_AES_128_CBC_SHA"
func TlsCiphersToIDs(names []string) ([]uint16, error) {
	if len(names) == 0 || names == nil {
		// no ciphers specified, use defaults
		return nil, nil
	}
	var ids []uint16
	var missing []string

	ciphers := tls.CipherSuites()
	var cipherMap = make(map[string]uint16, len(ciphers))
	for _, cipher := range ciphers {
		cipherMap[cipher.Name] = cipher.ID
	}

	for _, name := range names {
		name = strings.ToUpper(name)
		id, ok := cipherMap[name]
		if !ok {
			missing = append(missing, name)
			continue
		}
		ids = append(ids, id)
	}

	if len(missing) > 0 {
		return ids, fmt.Errorf("unknown ciphers: %v", missing)
	}

	return ids, nil
}

// tlsNameToVersion converts a tls version to a string
func TlsCipherIdsToString(ids []uint16) string {
	var tlsCiphers []string
	if len(ids) > 0 {
		for _, cipher := range ids {
			tlsCiphers = append(tlsCiphers, tls.CipherSuiteName(cipher))
		}
	}
	return strings.Join(tlsCiphers, ",")
}
back to top