Files
Курнат Андрей 2315f25754 Initial QSfera import
2026-06-07 10:20:04 +03:00

74 lines
2.0 KiB
Go

// Copyright 2016-2025 The NATS Authors
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package server
import (
"crypto/fips140"
"crypto/tls"
)
func init() {
for _, cs := range tls.CipherSuites() {
cipherMap[cs.Name] = cs
cipherMapByID[cs.ID] = cs
}
for _, cs := range tls.InsecureCipherSuites() {
cipherMap[cs.Name] = cs
cipherMapByID[cs.ID] = cs
}
}
var cipherMap = map[string]*tls.CipherSuite{}
var cipherMapByID = map[uint16]*tls.CipherSuite{}
func defaultCipherSuites() []uint16 {
ciphers := tls.CipherSuites()
defaults := make([]uint16, 0, len(ciphers))
for _, cs := range ciphers {
defaults = append(defaults, cs.ID)
}
return defaults
}
// Where we maintain available curve preferences
var curvePreferenceMap = map[string]tls.CurveID{
"X25519MLKEM768": tls.X25519MLKEM768,
"X25519": tls.X25519,
"CurveP256": tls.CurveP256,
"CurveP384": tls.CurveP384,
"CurveP521": tls.CurveP521,
}
// reorder to default to the highest level of security. See:
// https://blog.bracebin.com/achieving-perfect-ssl-labs-score-with-go
func defaultCurvePreferences() []tls.CurveID {
if fips140.Enabled() {
// X25519 is not FIPS-approved by itself, but it is when
// combined with MLKEM768.
return []tls.CurveID{
tls.X25519MLKEM768, // post-quantum
tls.CurveP256,
tls.CurveP384,
tls.CurveP521,
}
}
return []tls.CurveID{
tls.X25519MLKEM768, // post-quantum
tls.X25519, // faster than P256, arguably more secure
tls.CurveP256,
tls.CurveP384,
tls.CurveP521,
}
}