crypto/tls: wrap ML-KEM hybrids in fips140.WithoutEnforcement

Fixes #78298
Fixes #78178
Fixes #75528
Fixes #75166
Fixes #76112

Change-Id: Ie78f3bf5f0b232482da44aba28a0f6d66a6a6964
Reviewed-on: https://go-review.googlesource.com/c/go/+/759383
Reviewed-by: David Chase <drchase@google.com>
LUCI-TryBot-Result: golang-scoped@luci-project-accounts.iam.gserviceaccount.com <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Daniel McCarney <daniel@binaryparadox.net>
Reviewed-by: Mark Freeman <markfreeman@google.com>
Auto-Submit: Filippo Valsorda <filippo@golang.org>
This commit is contained in:
yuhan6665
2026-09-08 21:33:47 -04:00
parent 3b89eaf6bd
commit ac0f415d2e
+24 -3
View File
@@ -7,6 +7,7 @@ package reality
import (
"crypto"
"crypto/ecdh"
"crypto/fips140"
"crypto/hmac"
"crypto/mlkem"
"errors"
@@ -166,7 +167,14 @@ type hybridKeyExchange struct {
}
func (ke *hybridKeyExchange) keyShares(rand io.Reader) (*keySharePrivateKeys, []keyShare, error) {
priv, ecdhShares, err := ke.ecdh.keyShares(rand)
var (
priv *keySharePrivateKeys
ecdhShares []keyShare
err error
)
fips140.WithoutEnforcement(func() { // Hybrid of ML-KEM, which is Approved.
priv, ecdhShares, err = ke.ecdh.keyShares(rand)
})
if err != nil {
return nil, nil, err
}
@@ -202,7 +210,14 @@ func (ke *hybridKeyExchange) serverSharedSecret(rand io.Reader, clientKeyShare [
ecdhShareData = clientKeyShare[:ke.ecdhElementSize]
mlkemShareData = clientKeyShare[ke.ecdhElementSize:]
}
ecdhSharedSecret, ks, err := ke.ecdh.serverSharedSecret(rand, ecdhShareData)
var (
ecdhSharedSecret []byte
ks keyShare
err error
)
fips140.WithoutEnforcement(func() { // Hybrid of ML-KEM, which is Approved.
ecdhSharedSecret, ks, err = ke.ecdh.serverSharedSecret(rand, ecdhShareData)
})
if err != nil {
return nil, keyShare{}, err
}
@@ -235,7 +250,13 @@ func (ke *hybridKeyExchange) clientSharedSecret(priv *keySharePrivateKeys, serve
ecdhShareData = serverKeyShare[:ke.ecdhElementSize]
mlkemShareData = serverKeyShare[ke.ecdhElementSize:]
}
ecdhSharedSecret, err := ke.ecdh.clientSharedSecret(priv, ecdhShareData)
var (
ecdhSharedSecret []byte
err error
)
fips140.WithoutEnforcement(func() { // Hybrid of ML-KEM, which is Approved.
ecdhSharedSecret, err = ke.ecdh.clientSharedSecret(priv, ecdhShareData)
})
if err != nil {
return nil, err
}