[dev.boringcrypto] crypto/tls: permit P-521 in FIPS mode

While BoringCrypto has a certification for P-521, the go code disallows
certificates with it. This change permits those certificates to be used.

Change-Id: I451c91a845f22ff0e4c3e922eaf8bf82466e80ae
Reviewed-on: https://go-review.googlesource.com/c/go/+/343880
Reviewed-by: Filippo Valsorda <filippo@golang.org>
Run-TryBot: Filippo Valsorda <filippo@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>
Trust: Dmitri Shuralyov <dmitshur@golang.org>
diff --git a/src/crypto/tls/boring.go b/src/crypto/tls/boring.go
index 09f71c1..dabc674 100644
--- a/src/crypto/tls/boring.go
+++ b/src/crypto/tls/boring.go
@@ -6,6 +6,7 @@
 
 import (
 	"crypto/ecdsa"
+	"crypto/elliptic"
 	"crypto/internal/boring/fipstls"
 	"crypto/rsa"
 	"crypto/x509"
@@ -85,7 +86,7 @@
 		return true
 	}
 
-	// Otherwise the key must be RSA 2048, RSA 3072, or ECDSA P-256.
+	// Otherwise the key must be RSA 2048, RSA 3072, or ECDSA P-256, P-384, or P-521.
 	switch k := c.PublicKey.(type) {
 	default:
 		return false
@@ -94,7 +95,7 @@
 			return false
 		}
 	case *ecdsa.PublicKey:
-		if name := k.Curve.Params().Name; name != "P-256" && name != "P-384" {
+		if k.Curve != elliptic.P256() && k.Curve != elliptic.P384() && k.Curve != elliptic.P521() {
 			return false
 		}
 	}