Skip to content

Commit 9eb5ebc

Browse files
committed
fix: set key type to rsa or ec
1 parent c28fde2 commit 9eb5ebc

File tree

2 files changed

+138
-6
lines changed

2 files changed

+138
-6
lines changed

pkg/util/secretutil/secret.go

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,10 @@ import (
3535
)
3636

3737
const (
38-
certType = "CERTIFICATE"
39-
privateKeyType = "RSA PRIVATE KEY"
38+
certType = "CERTIFICATE"
39+
privateKeyType = "PRIVATE KEY"
40+
privateKeyTypeRSA = "RSA PRIVATE KEY"
41+
privateKeyTypeEC = "EC PRIVATE KEY"
4042
)
4143

4244
// getCertPart returns the certificate or the private key part of the cert
@@ -69,8 +71,9 @@ func getCert(data []byte) ([]byte, error) {
6971

7072
// getPrivateKey returns the private key part of a cert
7173
func getPrivateKey(data []byte) ([]byte, error) {
72-
var der []byte
73-
var derKey []byte
74+
var der, derKey []byte
75+
privKeyType := privateKeyType
76+
7477
for {
7578
pemBlock, rest := pem.Decode(data)
7679
if pemBlock == nil {
@@ -82,31 +85,36 @@ func getPrivateKey(data []byte) ([]byte, error) {
8285
data = rest
8386
}
8487

88+
// parses an RSA private key in PKCS #1, ASN.1 DER form
8589
if key, err := x509.ParsePKCS1PrivateKey(der); err == nil {
8690
derKey = x509.MarshalPKCS1PrivateKey(key)
8791
}
88-
92+
// parses an unencrypted private key in PKCS #8, ASN.1 DER form
8993
if key, err := x509.ParsePKCS8PrivateKey(der); err == nil {
9094
switch key := key.(type) {
9195
case *rsa.PrivateKey:
9296
derKey = x509.MarshalPKCS1PrivateKey(key)
97+
privKeyType = privateKeyTypeRSA
9398
case *ecdsa.PrivateKey:
9499
derKey, err = x509.MarshalECPrivateKey(key)
100+
privKeyType = privateKeyTypeEC
95101
if err != nil {
96102
return nil, err
97103
}
98104
default:
99105
return nil, fmt.Errorf("unknown private key type found while getting key. Only rsa and ecdsa are supported")
100106
}
101107
}
108+
// parses an EC private key in SEC 1, ASN.1 DER form
102109
if key, err := x509.ParseECPrivateKey(der); err == nil {
103110
derKey, err = x509.MarshalECPrivateKey(key)
104111
if err != nil {
105112
return nil, err
106113
}
114+
privKeyType = privateKeyTypeEC
107115
}
108116
block := &pem.Block{
109-
Type: privateKeyType,
117+
Type: privKeyType,
110118
Bytes: derKey,
111119
}
112120

pkg/util/secretutil/secret_test.go

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -385,3 +385,127 @@ func TestGenerateSHAFromSecret(t *testing.T) {
385385
})
386386
}
387387
}
388+
389+
func TestGetPrivateKey(t *testing.T) {
390+
tests := []struct {
391+
name string
392+
actualPEM string
393+
expectedKey string
394+
expectedErr bool
395+
}{
396+
{
397+
name: "RSA Key",
398+
actualPEM: `
399+
-----BEGIN CERTIFICATE-----
400+
MIIC5DCCAcwCCQClrnRsmeWS4TANBgkqhkiG9w0BAQsFADA0MRYwFAYDVQQDDA1k
401+
ZW1vLnRlc3QuY29tMRowGAYDVQQKDBFpbmdyZXNzLXRscy1jZXJ0MTAeFw0yMDEw
402+
MDgxOTAwMDJaFw0yMTEwMDgxOTAwMDJaMDQxFjAUBgNVBAMMDWRlbW8udGVzdC5j
403+
b20xGjAYBgNVBAoMEWluZ3Jlc3MtdGxzLWNlcnQxMIIBIjANBgkqhkiG9w0BAQEF
404+
AAOCAQ8AMIIBCgKCAQEA0AWQCdeukwkzIKKJNp3DaRe9azBZ8J/NFb2Nczq3Y8xc
405+
MDB/eT7lfMMNYluLQPDzkRN9QHKiz8ei9ynxRiEC/Al2OsdZPdPqNxnBVDsFcD72
406+
9nofroBUXRch5dP5amXu5gP628Yu7l8pBoV+lOyyDGkRVHPecegxiVbxtjqhlrwl
407+
hRRFzFGat1CiDq03Gtz1xH/pgaFQzKbTZ1rQE8JcTryZaTYfo5PrUDwhv8PfVHoH
408+
MEqpN54onSoA2JLBeZz7xJvL6pBg0c6OhNCnUYEZBDnyHDBBJJ6FUijKQp6mZNbe
409+
di6Ih4QGJYeLP4HaJdPf9aXlChnbbwEaeBeedXzPjwIDAQABMA0GCSqGSIb3DQEB
410+
CwUAA4IBAQC3NVwO2MxISN9dwXlUUPnGpI2EIEmleDaN1hE28RN+GwYqUZvfg8FQ
411+
HV+qYtc3gHoFdcVeQjTQHNJ7u+4U6PGNQj/UoKd6RY7AEMly4kQq2LtfMZDQYlvt
412+
/xtDDxw1esEgv5P+uXb2ICRnO3p7cOt6/EAK83uYBmpy/FwgNIjJATcm6GmKMRZ6
413+
y0UsfOws9yCOgSdtmp8tWduZL56e8yZ/+gCUMiGDr1f/m0th/zgEvxyIYY3kVh6c
414+
z96TlWVQU9TCYIMg0rBRsPuJcJF7fedQbIRUP5t+cghu7OpbiDDzlBBjAPVhrC2M
415+
FMtqlqaKfhLwz3SzIu8Wcj//cbm6KXLZ
416+
-----END CERTIFICATE-----
417+
-----BEGIN PRIVATE KEY-----
418+
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDQBZAJ166TCTMg
419+
ook2ncNpF71rMFnwn80VvY1zOrdjzFwwMH95PuV8ww1iW4tA8PORE31AcqLPx6L3
420+
KfFGIQL8CXY6x1k90+o3GcFUOwVwPvb2eh+ugFRdFyHl0/lqZe7mA/rbxi7uXykG
421+
hX6U7LIMaRFUc95x6DGJVvG2OqGWvCWFFEXMUZq3UKIOrTca3PXEf+mBoVDMptNn
422+
WtATwlxOvJlpNh+jk+tQPCG/w99UegcwSqk3niidKgDYksF5nPvEm8vqkGDRzo6E
423+
0KdRgRkEOfIcMEEknoVSKMpCnqZk1t52LoiHhAYlh4s/gdol09/1peUKGdtvARp4
424+
F551fM+PAgMBAAECggEBAMxTunDAhvxsO+khXa/k9M1kgS0pOB7PiE2De84kbYA8
425+
eoznBj8c1aNfn+Tt0HGAe24T+6JzN5LqIBuw+goNYPYZgSUpLHI7lkJ7LNfEhYoE
426+
fuYJfNcVvEgX8bbjKIknCKqsXBrFptGDbTO3qmczu4vPJDOVAHlYPlgNq6x4GMKJ
427+
05v1GL3as2db6D8fphm0jdt4QCD+BMP+s/nm5xGOnquZvBn3RUDw7x+tilXuh9fG
428+
l6S8PVDxWuTdfAG5urTW2DtrxSBqXjgClo5ft79frHDpvAhJ7XMIKbVgo+M0quGp
429+
wTi6McCCFVtJP6xv1eI2TRO8xvWoX92H7PHuIJqWrFkCgYEA+M015rLmECmahB2L
430+
LJ8/BH9HMAf15JqbxafmknNDPacsUZujOad87mO8jToAK6aBLwtmIgaYGVs+spC0
431+
v3VnV+3AqAEYKCoj0GmyQcM/Thn9A0OVE0CDPeq0A1OYqXr1G8G/zZDIvOxbBwsm
432+
FXGAxOw0+d3hnuIH2ygHaYbSIU0CgYEA1gpPMO/AzqgKa1GffzOCtf7qNzam0IC5
433+
Bh4vumfnVNuWNw/ReQnwuQVoEreXMbU1SEsOA5wRsUS1mnCliANiVtXDK3ebdBRA
434+
Oqb3cnzql/UnWNYXzU9iBQlpLv/yUHMNSIr49nhdXrNgEXFQLLbKHmvGzKEGjEtX
435+
ShEP7BsaRksCgYEAzSLNhVgNjlfvGW0Oeg0WtUuH01dM6156fv6PgkJct3GlfefY
436+
LcolnJxJMxwWVecj7jj0zasoLwfnau0ayh0vxvS1ew/j7gHIo6byHXyxLmEJFm7b
437+
dBMl4qAoKfH8FgjWHTujPAdbK0GpT+ZmURnTdQnYKAhEZW6x0YVwjxZlHKUCgYBI
438+
zETW7hRztS+mBKLszoY8hDEBCnN+IunLLOUqz0Ac2nqiy5yBQGJBa5dUFmE0JN+0
439+
cOKZU7GoyyfBGWMTeaMuyZGR7SJQPrsBt9wdcmMPv+/cBSUfTUqXT/YYaDDwL9Fq
440+
xOmcWp/XH8ci55lPO/ROmHWLD5F8kftkU51IvocXNQKBgGmh32aF2WOHhWzKxmp4
441+
V9uWIRJv657s9Vlv/5f2UnsMBMirj99quGL1iSSdEComYoRyyiaflvfkqPRAHCIN
442+
0QTu0hJ2SPfqOChrPqnLK6P3KzUGUI3R8EfZAkYWkndMEqoijaIaY8ctdlUVqM8X
443+
8o1UNU2Vz0RQitpWCZbAO5nu
444+
-----END PRIVATE KEY-----
445+
`,
446+
expectedKey: `-----BEGIN RSA PRIVATE KEY-----
447+
MIIEpAIBAAKCAQEA0AWQCdeukwkzIKKJNp3DaRe9azBZ8J/NFb2Nczq3Y8xcMDB/
448+
eT7lfMMNYluLQPDzkRN9QHKiz8ei9ynxRiEC/Al2OsdZPdPqNxnBVDsFcD729nof
449+
roBUXRch5dP5amXu5gP628Yu7l8pBoV+lOyyDGkRVHPecegxiVbxtjqhlrwlhRRF
450+
zFGat1CiDq03Gtz1xH/pgaFQzKbTZ1rQE8JcTryZaTYfo5PrUDwhv8PfVHoHMEqp
451+
N54onSoA2JLBeZz7xJvL6pBg0c6OhNCnUYEZBDnyHDBBJJ6FUijKQp6mZNbedi6I
452+
h4QGJYeLP4HaJdPf9aXlChnbbwEaeBeedXzPjwIDAQABAoIBAQDMU7pwwIb8bDvp
453+
IV2v5PTNZIEtKTgez4hNg3vOJG2APHqM5wY/HNWjX5/k7dBxgHtuE/uiczeS6iAb
454+
sPoKDWD2GYElKSxyO5ZCeyzXxIWKBH7mCXzXFbxIF/G24yiJJwiqrFwaxabRg20z
455+
t6pnM7uLzyQzlQB5WD5YDauseBjCidOb9Ri92rNnW+g/H6YZtI3beEAg/gTD/rP5
456+
5ucRjp6rmbwZ90VA8O8frYpV7ofXxpekvD1Q8Vrk3XwBubq01tg7a8Ugal44ApaO
457+
X7e/X6xw6bwISe1zCCm1YKPjNKrhqcE4ujHAghVbST+sb9XiNk0TvMb1qF/dh+zx
458+
7iCalqxZAoGBAPjNNeay5hApmoQdiyyfPwR/RzAH9eSam8Wn5pJzQz2nLFGbozmn
459+
fO5jvI06ACumgS8LZiIGmBlbPrKQtL91Z1ftwKgBGCgqI9BpskHDP04Z/QNDlRNA
460+
gz3qtANTmKl69RvBv82QyLzsWwcLJhVxgMTsNPnd4Z7iB9soB2mG0iFNAoGBANYK
461+
TzDvwM6oCmtRn38zgrX+6jc2ptCAuQYeL7pn51TbljcP0XkJ8LkFaBK3lzG1NUhL
462+
DgOcEbFEtZpwpYgDYlbVwyt3m3QUQDqm93J86pf1J1jWF81PYgUJaS7/8lBzDUiK
463+
+PZ4XV6zYBFxUCy2yh5rxsyhBoxLV0oRD+wbGkZLAoGBAM0izYVYDY5X7xltDnoN
464+
FrVLh9NXTOteen7+j4JCXLdxpX3n2C3KJZycSTMcFlXnI+449M2rKC8H52rtGsod
465+
L8b0tXsP4+4ByKOm8h18sS5hCRZu23QTJeKgKCnx/BYI1h07ozwHWytBqU/mZlEZ
466+
03UJ2CgIRGVusdGFcI8WZRylAoGASMxE1u4Uc7UvpgSi7M6GPIQxAQpzfiLpyyzl
467+
Ks9AHNp6osucgUBiQWuXVBZhNCTftHDimVOxqMsnwRljE3mjLsmRke0iUD67Abfc
468+
HXJjD7/v3AUlH01Kl0/2GGgw8C/RasTpnFqf1x/HIueZTzv0Tph1iw+RfJH7ZFOd
469+
SL6HFzUCgYBpod9mhdljh4VsysZqeFfbliESb+ue7PVZb/+X9lJ7DATIq4/farhi
470+
9YkknRAqJmKEcsomn5b35Kj0QBwiDdEE7tISdkj36jgoaz6pyyuj9ys1BlCN0fBH
471+
2QJGFpJ3TBKqIo2iGmPHLXZVFajPF/KNVDVNlc9EUIraVgmWwDuZ7g==
472+
-----END RSA PRIVATE KEY-----
473+
`,
474+
},
475+
{
476+
name: "EC Key",
477+
actualPEM: `
478+
-----BEGIN CERTIFICATE-----
479+
MIIBeTCCAR4CCQCTj/tsh3SrEzAKBggqhkjOPQQDAjBEMQswCQYDVQQGEwJVUzEL
480+
MAkGA1UECAwCV0ExEDAOBgNVBAcMB1JlZG1vbmQxFjAUBgNVBAMMDWRlbW8udGVz
481+
dC5jb20wHhcNMjAxMTI0MTgzOTU1WhcNMjExMTI0MTgzOTU1WjBEMQswCQYDVQQG
482+
EwJVUzELMAkGA1UECAwCV0ExEDAOBgNVBAcMB1JlZG1vbmQxFjAUBgNVBAMMDWRl
483+
bW8udGVzdC5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQ75g7UgxCQYmWx
484+
fn2jf6qlqaEfE45UpRsXybr1dtijtGkjE+v8I7A/GtSxfJe3LsREynlA3LGMxZL7
485+
TD3cWsAjMAoGCCqGSM49BAMCA0kAMEYCIQDqhYQtz8uGibcOV1GCCj9emuvQqW81
486+
DIOhxyf+tmC65gIhALNDklWc0uxg7yJQD/n1JJkkSoNdDzw9dwNGuVMHwJOY
487+
-----END CERTIFICATE-----
488+
-----BEGIN PRIVATE KEY-----
489+
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgHv1nWow0ijr1+B4S
490+
Vs6otqpmkzv2VRSjSPuH2zBRqQShRANCAAQ75g7UgxCQYmWxfn2jf6qlqaEfE45U
491+
pRsXybr1dtijtGkjE+v8I7A/GtSxfJe3LsREynlA3LGMxZL7TD3cWsAj
492+
-----END PRIVATE KEY-----
493+
`,
494+
expectedKey: `-----BEGIN EC PRIVATE KEY-----
495+
MHcCAQEEIB79Z1qMNIo69fgeElbOqLaqZpM79lUUo0j7h9swUakEoAoGCCqGSM49
496+
AwEHoUQDQgAEO+YO1IMQkGJlsX59o3+qpamhHxOOVKUbF8m69XbYo7RpIxPr/COw
497+
PxrUsXyXty7ERMp5QNyxjMWS+0w93FrAIw==
498+
-----END EC PRIVATE KEY-----
499+
`,
500+
},
501+
}
502+
503+
for _, test := range tests {
504+
t.Run(test.name, func(t *testing.T) {
505+
privateKey, err := getPrivateKey([]byte(test.actualPEM))
506+
fmt.Println(string(privateKey))
507+
assert.Equal(t, test.expectedErr, err != nil)
508+
assert.Equal(t, test.expectedKey, string(privateKey))
509+
})
510+
}
511+
}

0 commit comments

Comments
 (0)