{"record":{"id":"60fcf82387994fdc","repo":"golang/go","slug":"tls-client-offered-only-incompatible-point-format","errorCode":null,"errorMessage":"tls: client offered only incompatible point formats","messagePattern":"tls: client offered only incompatible point formats","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"src/crypto/tls/handshake_server.go","lineNumber":392,"sourceCode":"\t}\n\n\tsupportsPointFormat := false\n\tofferedNonCompressedFormat := false\n\tfor _, pointFormat := range supportedPoints {\n\t\tif pointFormat == pointFormatUncompressed {\n\t\t\tsupportsPointFormat = true\n\t\t} else {\n\t\t\tofferedNonCompressedFormat = true\n\t\t}\n\t}\n\t// Per RFC 8422, Section 5.1.2, if the Supported Point Formats extension is\n\t// missing, uncompressed points are supported. If supportedPoints is empty,\n\t// the extension must be missing, as an empty extension body is rejected by\n\t// the parser. See https://go.dev/issue/49126.\n\tif len(supportedPoints) == 0 {\n\t\tsupportsPointFormat = true\n\t} else if offeredNonCompressedFormat && !supportsPointFormat {\n\t\treturn false, errors.New(\"tls: client offered only incompatible point formats\")\n\t}\n\n\treturn supportsCurve && supportsPointFormat, nil\n}\n\nfunc (hs *serverHandshakeState) pickCipherSuite() error {\n\tc := hs.c\n\n\tpreferenceList := c.config.cipherSuites(isAESGCMPreferred(hs.clientHello.cipherSuites))\n\n\ths.suite = selectCipherSuite(preferenceList, hs.clientHello.cipherSuites, hs.cipherSuiteOk)\n\tif hs.suite == nil {\n\t\tc.sendAlert(alertHandshakeFailure)\n\t\treturn fmt.Errorf(\"tls: no cipher suite supported by both client and server; client offered: %x\",\n\t\t\ths.clientHello.cipherSuites)\n\t}\n\tc.cipherSuite = hs.suite.id\n","sourceCodeStart":374,"sourceCodeEnd":410,"githubUrl":"https://github.com/golang/go/blob/b6b368adc57c96c3151d224d172029f233ead2c3/src/crypto/tls/handshake_server.go#L374-L410","documentation":"During ECDHE cipher selection the server found that the client's Supported Point Formats extension lists only non-uncompressed formats. RFC 8422 §5.1.2 requires uncompressed (0) support; a client offering only compressed or ansiX962 formats cannot interoperate. The error returns false (cipher rejected) rather than aborting the handshake outright.","triggerScenarios":"supportsECDHE inspects supportedPoints; if offeredNonCompressedFormat is true but supportsPointFormat stays false (no 0 entry), the function returns (false, error). ECDHE cipher suites are then filtered out for this client.","commonSituations":"A legacy or non-compliant client listing only deprecated compressed EC point formats. Modern TLS clients always include uncompressed (0), so this typically surfaces with embedded/legacy TLS stacks or fuzz inputs.","solutions":["Update the client to include uncompressed (0) in its Supported Point Formats extension.","If the client cannot be updated, ensure the server also offers a non-ECDHE cipher suite (e.g. plain RSA key exchange) so a fallback path exists.","Note this is returned from a filter, not raised as an alert — the server falls back to other suites; if none match, expect the 'no cipher suite supported' error to follow."],"exampleFix":"// Client fix: ensure uncompressed EC points are advertised.\n// Standard TLS libraries include 0x00 by default.\n// Custom encoder:\npointFormats: []byte{0x00 /* uncompressed */}","handlingStrategy":"validation","validationCode":"// Client: ensure uncompressed (0) EC point format is advertised.\n// Standard TLS libraries include it; custom encoders must add:\npointFormats := []byte{0x00 /* uncompressed */}","typeGuard":null,"tryCatchPattern":"// Server: this is returned from a cipher-suite filter, not raised directly.\n// Ensure at least one non-ECDHE suite is configured as fallback.\ncfg := &tls.Config{CipherSuites: []uint16{\n    tls.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,\n    tls.TLS_RSA_WITH_AES_128_GCM_SHA256, // fallback\n}}","preventionTips":["Always advertise uncompressed point format in custom encoders.","Keep a non-ECDHE cipher suite available for legacy clients.","Test against a variety of client TLS stacks."],"tags":["tls","server-handshake","ecdhe","ec-point-formats","rfc-8422","cipher-selection"],"analyzedSha":"b6b368adc57c96c3151d224d172029f233ead2c3","analyzedAt":"2026-08-12T00:22:02.250Z","schemaVersion":2},"datasetVersion":"2026-08-12T12:17:08.281Z"}