diff --git a/key_schedule.go b/key_schedule.go index 0d14dc3..b07a86f 100644 --- a/key_schedule.go +++ b/key_schedule.go @@ -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 }