Skip to content

Commit 369adfc

Browse files
committed
Decrypt pkcs8 ENCRYPTED PRIVATE KEY
1 parent ade11e4 commit 369adfc

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

73 files changed

+10187
-4278
lines changed

go.mod

+5-4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
module github.com/grepplabs/kafka-proxy
22

3-
go 1.20
3+
go 1.22
44

55
require (
66
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5
@@ -25,6 +25,7 @@ require (
2525
github.com/spf13/viper v1.0.2
2626
github.com/stretchr/testify v1.8.1
2727
github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c
28+
github.com/youmark/pkcs8 v0.0.0-20240424034433-3c2c7870ae76
2829
golang.org/x/net v0.23.0
2930
golang.org/x/oauth2 v0.7.0
3031
google.golang.org/api v0.114.0
@@ -81,9 +82,9 @@ require (
8182
github.com/spf13/pflag v1.0.5 // indirect
8283
github.com/xdg/stringprep v1.0.0 // indirect
8384
go.opencensus.io v0.24.0 // indirect
84-
golang.org/x/crypto v0.21.0 // indirect
85-
golang.org/x/sys v0.18.0 // indirect
86-
golang.org/x/text v0.14.0 // indirect
85+
golang.org/x/crypto v0.23.0 // indirect
86+
golang.org/x/sys v0.20.0 // indirect
87+
golang.org/x/text v0.15.0 // indirect
8788
google.golang.org/appengine v1.6.7 // indirect
8889
google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 // indirect
8990
gopkg.in/yaml.v2 v2.3.0 // indirect

go.sum

+11-6
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ cloud.google.com/go/compute v1.19.1/go.mod h1:6ylj3a05WF8leseCdIf77NK0g1ey+nj5IK
66
cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY=
77
cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA=
88
cloud.google.com/go/longrunning v0.4.1 h1:v+yFJOfKC3yZdY6ZUI933pIYdhyhV8S3NpWrXWmg7jM=
9+
cloud.google.com/go/longrunning v0.4.1/go.mod h1:4iWDqhBZ70CvZ6BfETbvam3T8FMvLK+eFj0E6AaRQTo=
910
github.com/Azure/go-ntlmssp v0.0.0-20200615164410-66371956d46c h1:/IBSNwUN8+eKzUzbJPqhK839ygXJ82sde8x3ogr6R28=
1011
github.com/Azure/go-ntlmssp v0.0.0-20200615164410-66371956d46c/go.mod h1:chxPXzSsl7ZWRAuOIE23GDNzjWuZquvFlgA8xmpunjU=
1112
github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
@@ -110,6 +111,7 @@ github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
110111
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
111112
github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
112113
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
114+
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
113115
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
114116
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
115117
github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
@@ -150,6 +152,7 @@ github.com/jcmturner/gokrb5/v8 v8.4.3/go.mod h1:dqRwJGXznQrzw6cWmyo6kH+E7jksEQG/
150152
github.com/jcmturner/rpc/v2 v2.0.3 h1:7FXXj8Ti1IaVFpSAziCZWNzbNuZmnvw/i6CqLNdWfZY=
151153
github.com/jcmturner/rpc/v2 v2.0.3/go.mod h1:VUJYCIDm3PVOEHw8sgt091/20OJjskO/YJki3ELg/Hc=
152154
github.com/jhump/protoreflect v1.6.0 h1:h5jfMVslIg6l29nsMs0D8Wj17RDVdNYti0vDN/PZZoE=
155+
github.com/jhump/protoreflect v1.6.0/go.mod h1:eaTn3RZAmMBcV0fifFvlm6VHNz3wSkYyXYWUh7ymB74=
153156
github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
154157
github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U=
155158
github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
@@ -253,15 +256,17 @@ github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c h1:u40Z8hqBAAQyv+vATcGgV
253256
github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I=
254257
github.com/xdg/stringprep v1.0.0 h1:d9X0esnoa3dFsV0FG35rAT0RIhYFlPq7MiP+DW89La0=
255258
github.com/xdg/stringprep v1.0.0/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y=
259+
github.com/youmark/pkcs8 v0.0.0-20240424034433-3c2c7870ae76 h1:tBiBTKHnIjovYoLX/TPkcf+OjqqKGQrPtGT3Foz+Pgo=
260+
github.com/youmark/pkcs8 v0.0.0-20240424034433-3c2c7870ae76/go.mod h1:SQliXeA7Dhkt//vS29v3zpbEwoa+zb2Cn5xj5uO4K5U=
256261
go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0=
257262
go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo=
258263
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
259264
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
260265
golang.org/x/crypto v0.0.0-20200604202706-70a84ac30bf9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
261266
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
262267
golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
263-
golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA=
264-
golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs=
268+
golang.org/x/crypto v0.23.0 h1:dIJU/v2J8Mdglj/8rJ6UUOM3Zc9zLZxVZwwxMooUSAI=
269+
golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8=
265270
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
266271
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
267272
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
@@ -317,17 +322,17 @@ golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBc
317322
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
318323
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
319324
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
320-
golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4=
321-
golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
325+
golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y=
326+
golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
322327
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
323328
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
324329
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
325330
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
326331
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
327332
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
328333
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
329-
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
330-
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
334+
golang.org/x/text v0.15.0 h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk=
335+
golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
331336
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
332337
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
333338
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=

proxy/tls.go

+41-3
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,23 @@
11
package proxy
22

33
import (
4+
"crypto"
5+
"crypto/ecdsa"
6+
"crypto/rsa"
47
"crypto/tls"
58
"crypto/x509"
69
"encoding/pem"
10+
"fmt"
711
"io/ioutil"
812
"net"
13+
"os"
914
"reflect"
1015
"strings"
1116
"time"
1217

1318
"github.com/grepplabs/kafka-proxy/config"
1419
"github.com/pkg/errors"
20+
"github.com/youmark/pkcs8"
1521
)
1622

1723
var (
@@ -57,11 +63,11 @@ func newTLSListenerConfig(conf *config.Config) (*tls.Config, error) {
5763
if opts.ListenerKeyFile == "" || opts.ListenerCertFile == "" {
5864
return nil, errors.New("Listener key and cert files must not be empty")
5965
}
60-
certPEMBlock, err := ioutil.ReadFile(opts.ListenerCertFile)
66+
certPEMBlock, err := os.ReadFile(opts.ListenerCertFile)
6167
if err != nil {
6268
return nil, err
6369
}
64-
keyPEMBlock, err := ioutil.ReadFile(opts.ListenerKeyFile)
70+
keyPEMBlock, err := os.ReadFile(opts.ListenerKeyFile)
6571
if err != nil {
6672
return nil, err
6773
}
@@ -91,7 +97,7 @@ func newTLSListenerConfig(conf *config.Config) (*tls.Config, error) {
9197
CipherSuites: cipherSuites,
9298
}
9399
if opts.CAChainCertFile != "" {
94-
caCertPEMBlock, err := ioutil.ReadFile(opts.CAChainCertFile)
100+
caCertPEMBlock, err := os.ReadFile(opts.CAChainCertFile)
95101
if err != nil {
96102
return nil, err
97103
}
@@ -202,10 +208,42 @@ func decryptPEM(pemData []byte, password string) ([]byte, error) {
202208
Bytes: key,
203209
}
204210
return pem.EncodeToMemory(block), nil
211+
} else if strings.Contains(string(pemData), "ENCRYPTED PRIVATE KEY") {
212+
if password == "" {
213+
return nil, errors.New("PEM is encrypted, but password is empty")
214+
}
215+
key, err := pkcs8.ParsePKCS8PrivateKey(keyBlock.Bytes, []byte(password))
216+
if err != nil {
217+
return nil, err
218+
}
219+
return marshalPrivateKeyToPEM(key)
205220
}
206221
return pemData, nil
207222
}
208223

224+
func marshalPrivateKeyToPEM(privateKey crypto.PrivateKey) ([]byte, error) {
225+
switch t := privateKey.(type) {
226+
case *ecdsa.PrivateKey:
227+
derBytes, err := x509.MarshalECPrivateKey(t)
228+
if err != nil {
229+
return nil, err
230+
}
231+
block := &pem.Block{
232+
Type: "EC PRIVATE KEY",
233+
Bytes: derBytes,
234+
}
235+
return pem.EncodeToMemory(block), nil
236+
case *rsa.PrivateKey:
237+
block := &pem.Block{
238+
Type: "RSA PRIVATE KEY",
239+
Bytes: x509.MarshalPKCS1PrivateKey(t),
240+
}
241+
return pem.EncodeToMemory(block), nil
242+
default:
243+
return nil, fmt.Errorf("private key is not a recognized type: %T", privateKey)
244+
}
245+
}
246+
209247
func parseCertificate(certFile string) (*x509.Certificate, error) {
210248

211249
content, readErr := ioutil.ReadFile(certFile)

proxy/tls_test.go

+62
Original file line numberDiff line numberDiff line change
@@ -642,6 +642,68 @@ QQ7OBKTbsAxGV+wTiyb//9BChqcIlwgBwYwmEEUWCnV/RrxVeGIPy09ptjd/
642642
-----END RSA PRIVATE KEY-----
643643
`,
644644
},
645+
{
646+
pemDataEncrypted: `-----BEGIN ENCRYPTED PRIVATE KEY-----
647+
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIHKUKgk8qoZ0CAggA
648+
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBCsmSYCNmD0DpnxgWZTnEJ0BIIE
649+
0B/0jhJfODA3Unc1YQl4ZrCvsfRdaeBjgJp85eW49gn8oqr/KBhRf8KZjugEpkB3
650+
2uEKiyc04WlRK3ZXAoFNe1r5Y+u/bfBsMqB5r66MvkeMi9kGuA75zc05awWdRcZ8
651+
j2Lztj4QyWBO8eK4bGBV2OKBXw8sUmzF6A9SMMQ0gn+ZIMf0/1gePGoqO7sZ0mS3
652+
hyQOymC0OWUTg0L1jYbDnJonmn8rkRXyeim3prNEAQboqpBQzcFraSvoVAUTYMKY
653+
3Oy9k8JgQveJSVenzZSsFYUh8iRqviHPpa95h2s5AqMVMFGaZt9hFEoxD3dztzDF
654+
H12O4++RaRrjMwX8ojNR+7BnsgkCxCU3AQcvNbmf8S2bLUf2bcFTD2UYiRyQGeal
655+
nLuR9nbi/KLYMcLtb+y5wKaxWhayICtgtboRdZs7WA0MjQFDf6kDpiDtEqyfUGq6
656+
HvVu5Il/iQtN9VgJV0BNy3jHBCCG15dKWwW50AHj1KpEyH605a+nKFs6a6Al2L2u
657+
KoKqvD9C3l9L1O85eKFPzcZ8rXheXTGQXEXgxPNaebwR0gssCZvRZQygkXu459LF
658+
g+EF3X11Sh3Af+neTYEeMUX4jlq2dDy2ZHIabqfqNz4xVh/I46tBhv7z/qB6uSDx
659+
78trqKfzktO7x9MfGdxsAj0z5A00qTCYSWRSjFN3Li32GSpB2cMkFKo9W4DLp9j5
660+
QSaGEl45CkR98iwAlddHNFYA36DthlIyLmr2YBvmzz59jke3HieyrLxWOG7Bt5mS
661+
L3T3aApUb9a4jr6Y9B3QmBM3SPczKJwCTpS0zaApmruc9fPn8fO1+F8MAbm7iAac
662+
ebNTimEaL4StoeZuySFhm9VmNyc9MfHJncbz2c0EpI6wVPehTX6oYKkYnrLis2l+
663+
hpeMs+QxdfFMOxZC+Gu4lcVsAkx+CS0ci8X3m504193ZFpjBSmT9dIcIJpX6vJ7A
664+
OBO1NY72ZJOmBEXTZvRt32zA/lDJ1lrMq7fc87QFvzipuO0KueS/Hv30rEC6TFm+
665+
ch3IGbXkj9zpq6zHat6Gki4unFWoeLN8cxUlH2O5SpQLSOtK2CPAP/KaLYHsxDoF
666+
MiK+l3p8G7iy8gcOFfmAgysUJvOGmInjX00m+Zk0toGDLyOa87OsCeCrkdfyhr4j
667+
aD3ZolEJaoywHYr4jBZewemOGJSPD3Dlucni+00m+odXa08Abe5FEryXZxQ9S6Xk
668+
G+3w9kviJ2loADgrPnjUuhSZzAhDvE80hSzcb8mjbVY22sgrt7uGeKQ4qmG7+Pwr
669+
c8pJkJfOCITVmOxh1I3kNFEh3gt+47euevuvkm4rw0gkfiA/MN8aDHo/+WB5n7Uq
670+
JVsTGiCBLyWS+K/UmR+l1cp420+oiU6pXaY/y8YeWUX0RjuHEzpMhNn80hLyutDT
671+
Bp+HaEVhzZLg8PzpjS7jcYDOIlceMnMSBEDz3ARod1iMgfU0UOs5/1SuirBgUXkw
672+
7cHPIoBsI6l2O4CCZzkCBNqpBSwcKOJ6id0QX+vNG0UWNX21tUlxzM7Ppmy9/4Cy
673+
K9waUe1rSZXkHd/bANGCqw68DVIalf8BG9k8yfJxjzQIN1zMk+ZrmBIVkwaYqVN1
674+
2yj2uuJUMmzb9kKmRK9sqAOGgnz2DIIVD1Ol4jB7eVep
675+
-----END ENCRYPTED PRIVATE KEY-----
676+
`,
677+
pemData: `-----BEGIN RSA PRIVATE KEY-----
678+
MIIEpAIBAAKCAQEAuWcW9lVvQxYhnWfkgnjSWMF9Y7fbr0trJNZMNAbsmtOsllB1
679+
DKdKERCXtaqjsNfK5hUv2TE37BCi13wTqx7ZVAfqzmhq07xSGc1oqaJzJh+U6JW4
680+
nUmKBKwU6qg/7ulsyIkd68N2UtaKnVrFtBy7pRUKgCJiNIYhFpWGlkOglQIC3Hex
681+
P19BF6AI9UMdbzDMEPLZ/O87AxSwwI3PrOi5/Ep39BBvG0W4W+LQotyXmhnps3DQ
682+
rV+Z3lOwnKGoXiy0k6W27GGHgBuOKTyLELaatU7OppoDOgJXEdO8VnHE9ANXWrbJ
683+
qhFjacgwmskBHd7DOFdEu62FdsCC2CCsnvXr1QIDAQABAoIBACBv4tqSM/cexh7N
684+
8HLLRLH2mEN8BVlz7njxbT+k/nxQEF/0D6Z5FkJKDuDfy+fCuWLrzgVH0Srh9juR
685+
H7fOm+NRx0j5h8cnqY2OHIOhQlgnKlxO5Y/PL/CFUtuDODxKZpfnNW7sMaVol7PU
686+
D8blSAcn2UB1w4zA8sUKwBNGHbAz7130YwlOkgnt7lvx5TIxD4wQoC0CogDGLiVB
687+
HMoGvLveUQexF7la5/GM5knN/1I9+HgJQHespxl85C3Qg4UTg7xf6mJlJMwFMWZA
688+
M40EvVFtUzwsABH/0kdmjp27MmsRtcGH5SCOz8ksUnlM7TXvbwHNti1jFAt5H5q2
689+
UmxAx3kCgYEAyBUifPsWpOktulrzw6FaQKJzyHDt/qIuyvq85Pneo17/b5rZj3Km
690+
GIPiqy6EtJqHDeDE/j3iQgcrDlvZe6tFlUNTM1sF2prHq6QRNiJdBUPCceaxF4jZ
691+
mTVCUdWHvfkQXtVftEYXeNIM8nn63XwKv6rRleZpQ4XWFq3mam08d2cCgYEA7Tev
692+
6yF2ZRFJzLUvk5WGIQqOsSXGOcHWVmbxg1hbssy8kSrcaw7G+uHwhWZQzmhY4dnd
693+
3h02XvtfhU05kLt/dnr5dRfSNFltfAHw1vrvkXc0eAtY3LunuxDWw1A+6SVHK1qR
694+
1U1h/yI+thOZ4gQ7DcA7mk/95VyMwnCPE0uB6WMCgYBczRiy+U7WbGTOQ7M+cI9I
695+
3VBwjpiEezrS4JtOZOqzwbMeU6dHFnkdc8ZleW0Jy4aKlE8qUQ+pamO5BDcKWjUq
696+
9xAXCMfdTd8AqFdnUWbtszDz3XkUHmA25HH/PNf58BR8t+Ds33mxi1N//72wjwD5
697+
R0Rwj28RZ3kWCdCOWl4qTwKBgQDeYXwbk20oZkKnE5wcYOozA3CthVoFP0AuE6eJ
698+
mEWuotyLwoCMJHhJLZKLnFVYit34LIQf+4bDGCh+EN1MX1mourQtHz3CMau/uxoK
699+
j4gS+ItJlmmh1JHzfl+3Df1MF9RWQjvAmSCrS3E6w7lY9tpdk77MdPzyDgcvKNIY
700+
JosNPQKBgQCbw+8HyyhWIvobrinQofW9Eg2Z08lbltcGfSiygLgY0+MYBEurp0zc
701+
+rdN8/I6lsJxiyk8eumzdlJdQjNDICPKYBn6dXonW4xT7wChqJh+53DXDUaCJMR4
702+
jOlh0aHv8csftxxnjI8lwu/BjMRdTWY8YeiXHVYzdfNDRvAPYuuZMQ==
703+
-----END RSA PRIVATE KEY-----
704+
`,
705+
password: "test123",
706+
},
645707
}
646708

647709
for _, data := range testData {

vendor/github.com/youmark/pkcs8/.gitignore

+23
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/youmark/pkcs8/.travis.yml

+14
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/youmark/pkcs8/LICENSE

+21
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/youmark/pkcs8/README

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/youmark/pkcs8/README.md

+22
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)