Skip to content

Commit 311d230

Browse files
Merge pull request #9037 from pawanpinjarkar/fix-multiline-EC-keys-parsing-failure
OCPBUGS-42012: Systemd Fails to Parse Multiline EC Keys
2 parents c6e8e07 + 33241d8 commit 311d230

File tree

4 files changed

+11
-13
lines changed

4 files changed

+11
-13
lines changed

pkg/asset/agent/gencrypto/authconfig.go

+7-4
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"crypto/elliptic"
77
"crypto/rand"
88
"crypto/x509"
9+
"encoding/base64"
910
"encoding/pem"
1011

1112
"github.com/golang-jwt/jwt/v4"
@@ -16,7 +17,7 @@ import (
1617

1718
// AuthConfig is an asset that generates ECDSA public/private keys, JWT token.
1819
type AuthConfig struct {
19-
PublicKey, PrivateKey, Token string
20+
PublicKey, Token string
2021
}
2122

2223
// LocalJWTKeyType suggests the key type to be used for the token.
@@ -44,10 +45,12 @@ func (a *AuthConfig) Generate(dependencies asset.Parents) error {
4445
if err != nil {
4546
return err
4647
}
47-
a.PublicKey = PublicKey
48-
a.PrivateKey = PrivateKey
48+
// Encode to Base64 (Standard encoding)
49+
encodedPubKeyPEM := base64.StdEncoding.EncodeToString([]byte(PublicKey))
4950

50-
token, err := localJWTForKey(infraEnvID.ID, a.PrivateKey)
51+
a.PublicKey = encodedPubKeyPEM
52+
53+
token, err := localJWTForKey(infraEnvID.ID, PrivateKey)
5154
if err != nil {
5255
return err
5356
}

pkg/asset/agent/gencrypto/authconfig_test.go

+2-3
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ func TestAuthConfig_Generate(t *testing.T) {
1414
name string
1515
}{
1616
{
17-
name: "generate-public-private-keys",
17+
name: "generate-public-key-and-token",
1818
},
1919
}
2020
for _, tc := range cases {
@@ -27,8 +27,7 @@ func TestAuthConfig_Generate(t *testing.T) {
2727

2828
assert.NoError(t, err)
2929

30-
assert.Contains(t, authConfigAsset.PrivateKey, "BEGIN EC PRIVATE KEY")
31-
assert.Contains(t, authConfigAsset.PublicKey, "BEGIN EC PUBLIC KEY")
30+
assert.NotEmpty(t, authConfigAsset.PublicKey)
3231
assert.NotEmpty(t, authConfigAsset.Token)
3332
})
3433
}

pkg/asset/agent/image/ignition.go

+1-3
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,6 @@ func (a *Ignition) Generate(dependencies asset.Parents) error {
255255
osImage,
256256
infraEnv.Spec.Proxy,
257257
imageTypeISO,
258-
keyPairAsset.PrivateKey,
259258
keyPairAsset.PublicKey,
260259
caBundleMount)
261260

@@ -373,7 +372,7 @@ func getTemplateData(name, pullSecret, releaseImageList, releaseImage,
373372
osImage *models.OsImage,
374373
proxy *v1beta1.Proxy,
375374
imageTypeISO,
376-
privateKey, publicKey string,
375+
publicKey string,
377376
caBundleMount string) *agentTemplateData {
378377
return &agentTemplateData{
379378
ServiceProtocol: "http",
@@ -390,7 +389,6 @@ func getTemplateData(name, pullSecret, releaseImageList, releaseImage,
390389
OSImage: osImage,
391390
Proxy: proxy,
392391
ImageTypeISO: imageTypeISO,
393-
PrivateKeyPEM: privateKey,
394392
PublicKeyPEM: publicKey,
395393
CaBundleMount: caBundleMount,
396394
}

pkg/asset/agent/image/ignition_test.go

+1-3
Original file line numberDiff line numberDiff line change
@@ -90,10 +90,9 @@ func TestIgnition_getTemplateData(t *testing.T) {
9090
}
9191
clusterName := "test-agent-cluster-install.test"
9292

93-
privateKey := "-----BEGIN EC PUBLIC KEY-----\nMFkwEwYHKoAiDHV4tg==\n-----END EC PUBLIC KEY-----\n"
9493
publicKey := "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIOSCfDNmx0qe6dncV4tg==\n-----END EC PRIVATE KEY-----\n"
9594

96-
templateData := getTemplateData(clusterName, pullSecret, releaseImageList, releaseImage, releaseImageMirror, haveMirrorConfig, publicContainerRegistries, agentClusterInstall.Spec.ProvisionRequirements.ControlPlaneAgents, agentClusterInstall.Spec.ProvisionRequirements.WorkerAgents, infraEnvID, osImage, proxy, "minimal-iso", privateKey, publicKey, "")
95+
templateData := getTemplateData(clusterName, pullSecret, releaseImageList, releaseImage, releaseImageMirror, haveMirrorConfig, publicContainerRegistries, agentClusterInstall.Spec.ProvisionRequirements.ControlPlaneAgents, agentClusterInstall.Spec.ProvisionRequirements.WorkerAgents, infraEnvID, osImage, proxy, "minimal-iso", publicKey, "")
9796
assert.Equal(t, clusterName, templateData.ClusterName)
9897
assert.Equal(t, "http", templateData.ServiceProtocol)
9998
assert.Equal(t, pullSecret, templateData.PullSecret)
@@ -107,7 +106,6 @@ func TestIgnition_getTemplateData(t *testing.T) {
107106
assert.Equal(t, infraEnvID, templateData.InfraEnvID)
108107
assert.Equal(t, osImage, templateData.OSImage)
109108
assert.Equal(t, proxy, templateData.Proxy)
110-
assert.Equal(t, privateKey, templateData.PrivateKeyPEM)
111109
assert.Equal(t, publicKey, templateData.PublicKeyPEM)
112110
}
113111

0 commit comments

Comments
 (0)