@@ -306,6 +306,37 @@ func TestValidateTLSSecretsData(t *testing.T) {
306306 }
307307}
308308
309+ func TestValidateTLSSecretsDataWithECParameters (t * testing.T ) {
310+ const ecParametersPEM = "-----BEGIN EC PARAMETERS-----\n BggqhkjOPQMBBw==\n -----END EC PARAMETERS-----\n "
311+
312+ t .Run ("ec-parameters-before-private-key" , func (t * testing.T ) {
313+ secrets := createTestSecrets (t , []string {"ecdsa-p256-cert.pem" }, []string {"ecdsa-p256.key" })
314+ keyData := append ([]byte (nil ), secrets [0 ].Data [corev1 .TLSPrivateKeyKey ]... )
315+ secrets [0 ].Data [corev1 .TLSPrivateKeyKey ] = append ([]byte (ecParametersPEM ), keyData ... )
316+
317+ validSecrets , certs , err := parseCertsFromTLSSecretsData (secrets )
318+ require .NoError (t , err )
319+ require .Len (t , validSecrets , 1 )
320+ require .Len (t , certs , 1 )
321+
322+ keyBlock , _ := pem .Decode (keyData )
323+ require .NotNil (t , keyBlock )
324+ require .Equal (t , pem .EncodeToMemory (keyBlock ), validSecrets [0 ].Data [corev1 .TLSPrivateKeyKey ])
325+ })
326+
327+ t .Run ("ec-parameters-without-private-key" , func (t * testing.T ) {
328+ secrets := createTestSecrets (t , []string {"ecdsa-p256-cert.pem" }, []string {"ecdsa-p256.key" })
329+ secrets [0 ].Data [corev1 .TLSPrivateKeyKey ] = []byte (ecParametersPEM )
330+
331+ validSecrets , certs , err := parseCertsFromTLSSecretsData (secrets )
332+ require .Error (t , err )
333+ require .Equal (t , "test/secret must contain valid tls.crt and tls.key, EC PARAMETERS key format found in tls.key, supported formats are PKCS1, PKCS8 or EC" , err .Error ())
334+ require .Equal (t , gwapiv1 .ListenerReasonInvalidCertificateRef , err .Reason ())
335+ require .Empty (t , validSecrets )
336+ require .Empty (t , certs )
337+ })
338+ }
339+
309340func TestFilterValidCertificates (t * testing.T ) {
310341 type testCase struct {
311342 Name string
0 commit comments