Skip to content

Commit

Permalink
Merge pull request #169 from grepplabs/encrypted-pkcs8-private-key
Browse files Browse the repository at this point in the history
Decrypt pkcs8 ENCRYPTED PRIVATE KEY
  • Loading branch information
everesio authored May 31, 2024
2 parents ade11e4 + 9758704 commit d7bec2f
Show file tree
Hide file tree
Showing 75 changed files with 10,191 additions and 4,282 deletions.
4 changes: 2 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,13 @@ VERSION ?= $(shell git describe --tags --always --dirty)
GOPKGS = $(shell go list ./... | grep -v /vendor/)
BUILD_FLAGS ?=
LDFLAGS ?= -X github.com/grepplabs/kafka-proxy/config.Version=$(VERSION) -w -s
TAG ?= "v0.3.9"
TAG ?= "v0.3.10"
GOOS ?= $(if $(TARGETOS),$(TARGETOS),linux)
GOARCH ?= $(if $(TARGETARCH),$(TARGETARCH),amd64)
GOARM ?= $(TARGETVARIANT)
BUILDPLATFORM ?= $(GOOS)/$(GOARCH)

PROTOC_GO_VERSION ?= v1.30
PROTOC_GO_VERSION ?= v1.33
PROTOC_GRPC_VERSION ?= v1.2
PROTOC_VERSION ?= 22.2
PROTOC_BIN_DIR := .tools
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,11 +47,11 @@ As not every Kafka release adds new messages/versions which are relevant to the

Linux

curl -Ls https://github.com/grepplabs/kafka-proxy/releases/download/v0.3.9/kafka-proxy-v0.3.9-linux-amd64.tar.gz | tar xz
curl -Ls https://github.com/grepplabs/kafka-proxy/releases/download/v0.3.10/kafka-proxy-v0.3.10-linux-amd64.tar.gz | tar xz

macOS

curl -Ls https://github.com/grepplabs/kafka-proxy/releases/download/v0.3.9/kafka-proxy-v0.3.9-darwin-amd64.tar.gz | tar xz
curl -Ls https://github.com/grepplabs/kafka-proxy/releases/download/v0.3.10/kafka-proxy-v0.3.10-darwin-amd64.tar.gz | tar xz

2. Move the binary in to your PATH.

Expand Down
9 changes: 5 additions & 4 deletions go.mod
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
module github.com/grepplabs/kafka-proxy

go 1.20
go 1.22

require (
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5
Expand All @@ -25,6 +25,7 @@ require (
github.com/spf13/viper v1.0.2
github.com/stretchr/testify v1.8.1
github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c
github.com/youmark/pkcs8 v0.0.0-20240424034433-3c2c7870ae76
golang.org/x/net v0.23.0
golang.org/x/oauth2 v0.7.0
google.golang.org/api v0.114.0
Expand Down Expand Up @@ -81,9 +82,9 @@ require (
github.com/spf13/pflag v1.0.5 // indirect
github.com/xdg/stringprep v1.0.0 // indirect
go.opencensus.io v0.24.0 // indirect
golang.org/x/crypto v0.21.0 // indirect
golang.org/x/sys v0.18.0 // indirect
golang.org/x/text v0.14.0 // indirect
golang.org/x/crypto v0.23.0 // indirect
golang.org/x/sys v0.20.0 // indirect
golang.org/x/text v0.15.0 // indirect
google.golang.org/appengine v1.6.7 // indirect
google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 // indirect
gopkg.in/yaml.v2 v2.3.0 // indirect
Expand Down
17 changes: 11 additions & 6 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ cloud.google.com/go/compute v1.19.1/go.mod h1:6ylj3a05WF8leseCdIf77NK0g1ey+nj5IK
cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY=
cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA=
cloud.google.com/go/longrunning v0.4.1 h1:v+yFJOfKC3yZdY6ZUI933pIYdhyhV8S3NpWrXWmg7jM=
cloud.google.com/go/longrunning v0.4.1/go.mod h1:4iWDqhBZ70CvZ6BfETbvam3T8FMvLK+eFj0E6AaRQTo=
github.com/Azure/go-ntlmssp v0.0.0-20200615164410-66371956d46c h1:/IBSNwUN8+eKzUzbJPqhK839ygXJ82sde8x3ogr6R28=
github.com/Azure/go-ntlmssp v0.0.0-20200615164410-66371956d46c/go.mod h1:chxPXzSsl7ZWRAuOIE23GDNzjWuZquvFlgA8xmpunjU=
github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
Expand Down Expand Up @@ -110,6 +111,7 @@ github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
Expand Down Expand Up @@ -150,6 +152,7 @@ github.com/jcmturner/gokrb5/v8 v8.4.3/go.mod h1:dqRwJGXznQrzw6cWmyo6kH+E7jksEQG/
github.com/jcmturner/rpc/v2 v2.0.3 h1:7FXXj8Ti1IaVFpSAziCZWNzbNuZmnvw/i6CqLNdWfZY=
github.com/jcmturner/rpc/v2 v2.0.3/go.mod h1:VUJYCIDm3PVOEHw8sgt091/20OJjskO/YJki3ELg/Hc=
github.com/jhump/protoreflect v1.6.0 h1:h5jfMVslIg6l29nsMs0D8Wj17RDVdNYti0vDN/PZZoE=
github.com/jhump/protoreflect v1.6.0/go.mod h1:eaTn3RZAmMBcV0fifFvlm6VHNz3wSkYyXYWUh7ymB74=
github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U=
github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
Expand Down Expand Up @@ -253,15 +256,17 @@ github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c h1:u40Z8hqBAAQyv+vATcGgV
github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I=
github.com/xdg/stringprep v1.0.0 h1:d9X0esnoa3dFsV0FG35rAT0RIhYFlPq7MiP+DW89La0=
github.com/xdg/stringprep v1.0.0/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y=
github.com/youmark/pkcs8 v0.0.0-20240424034433-3c2c7870ae76 h1:tBiBTKHnIjovYoLX/TPkcf+OjqqKGQrPtGT3Foz+Pgo=
github.com/youmark/pkcs8 v0.0.0-20240424034433-3c2c7870ae76/go.mod h1:SQliXeA7Dhkt//vS29v3zpbEwoa+zb2Cn5xj5uO4K5U=
go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0=
go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo=
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20200604202706-70a84ac30bf9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA=
golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs=
golang.org/x/crypto v0.23.0 h1:dIJU/v2J8Mdglj/8rJ6UUOM3Zc9zLZxVZwwxMooUSAI=
golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
Expand Down Expand Up @@ -317,17 +322,17 @@ golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBc
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4=
golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y=
golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
golang.org/x/text v0.15.0 h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk=
golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
Expand Down
44 changes: 41 additions & 3 deletions proxy/tls.go
Original file line number Diff line number Diff line change
@@ -1,17 +1,23 @@
package proxy

import (
"crypto"
"crypto/ecdsa"
"crypto/rsa"
"crypto/tls"
"crypto/x509"
"encoding/pem"
"fmt"
"io/ioutil"
"net"
"os"
"reflect"
"strings"
"time"

"github.com/grepplabs/kafka-proxy/config"
"github.com/pkg/errors"
"github.com/youmark/pkcs8"
)

var (
Expand Down Expand Up @@ -57,11 +63,11 @@ func newTLSListenerConfig(conf *config.Config) (*tls.Config, error) {
if opts.ListenerKeyFile == "" || opts.ListenerCertFile == "" {
return nil, errors.New("Listener key and cert files must not be empty")
}
certPEMBlock, err := ioutil.ReadFile(opts.ListenerCertFile)
certPEMBlock, err := os.ReadFile(opts.ListenerCertFile)
if err != nil {
return nil, err
}
keyPEMBlock, err := ioutil.ReadFile(opts.ListenerKeyFile)
keyPEMBlock, err := os.ReadFile(opts.ListenerKeyFile)
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -91,7 +97,7 @@ func newTLSListenerConfig(conf *config.Config) (*tls.Config, error) {
CipherSuites: cipherSuites,
}
if opts.CAChainCertFile != "" {
caCertPEMBlock, err := ioutil.ReadFile(opts.CAChainCertFile)
caCertPEMBlock, err := os.ReadFile(opts.CAChainCertFile)
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -202,10 +208,42 @@ func decryptPEM(pemData []byte, password string) ([]byte, error) {
Bytes: key,
}
return pem.EncodeToMemory(block), nil
} else if strings.Contains(string(pemData), "ENCRYPTED PRIVATE KEY") {
if password == "" {
return nil, errors.New("PEM is encrypted, but password is empty")
}
key, err := pkcs8.ParsePKCS8PrivateKey(keyBlock.Bytes, []byte(password))
if err != nil {
return nil, err
}
return marshalPrivateKeyToPEM(key)
}
return pemData, nil
}

func marshalPrivateKeyToPEM(privateKey crypto.PrivateKey) ([]byte, error) {
switch t := privateKey.(type) {
case *ecdsa.PrivateKey:
derBytes, err := x509.MarshalECPrivateKey(t)
if err != nil {
return nil, err
}
block := &pem.Block{
Type: "EC PRIVATE KEY",
Bytes: derBytes,
}
return pem.EncodeToMemory(block), nil
case *rsa.PrivateKey:
block := &pem.Block{
Type: "RSA PRIVATE KEY",
Bytes: x509.MarshalPKCS1PrivateKey(t),
}
return pem.EncodeToMemory(block), nil
default:
return nil, fmt.Errorf("private key is not a recognized type: %T", privateKey)
}
}

func parseCertificate(certFile string) (*x509.Certificate, error) {

content, readErr := ioutil.ReadFile(certFile)
Expand Down
62 changes: 62 additions & 0 deletions proxy/tls_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -642,6 +642,68 @@ QQ7OBKTbsAxGV+wTiyb//9BChqcIlwgBwYwmEEUWCnV/RrxVeGIPy09ptjd/
-----END RSA PRIVATE KEY-----
`,
},
{
pemDataEncrypted: `-----BEGIN ENCRYPTED PRIVATE KEY-----
MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIHKUKgk8qoZ0CAggA
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBCsmSYCNmD0DpnxgWZTnEJ0BIIE
0B/0jhJfODA3Unc1YQl4ZrCvsfRdaeBjgJp85eW49gn8oqr/KBhRf8KZjugEpkB3
2uEKiyc04WlRK3ZXAoFNe1r5Y+u/bfBsMqB5r66MvkeMi9kGuA75zc05awWdRcZ8
j2Lztj4QyWBO8eK4bGBV2OKBXw8sUmzF6A9SMMQ0gn+ZIMf0/1gePGoqO7sZ0mS3
hyQOymC0OWUTg0L1jYbDnJonmn8rkRXyeim3prNEAQboqpBQzcFraSvoVAUTYMKY
3Oy9k8JgQveJSVenzZSsFYUh8iRqviHPpa95h2s5AqMVMFGaZt9hFEoxD3dztzDF
H12O4++RaRrjMwX8ojNR+7BnsgkCxCU3AQcvNbmf8S2bLUf2bcFTD2UYiRyQGeal
nLuR9nbi/KLYMcLtb+y5wKaxWhayICtgtboRdZs7WA0MjQFDf6kDpiDtEqyfUGq6
HvVu5Il/iQtN9VgJV0BNy3jHBCCG15dKWwW50AHj1KpEyH605a+nKFs6a6Al2L2u
KoKqvD9C3l9L1O85eKFPzcZ8rXheXTGQXEXgxPNaebwR0gssCZvRZQygkXu459LF
g+EF3X11Sh3Af+neTYEeMUX4jlq2dDy2ZHIabqfqNz4xVh/I46tBhv7z/qB6uSDx
78trqKfzktO7x9MfGdxsAj0z5A00qTCYSWRSjFN3Li32GSpB2cMkFKo9W4DLp9j5
QSaGEl45CkR98iwAlddHNFYA36DthlIyLmr2YBvmzz59jke3HieyrLxWOG7Bt5mS
L3T3aApUb9a4jr6Y9B3QmBM3SPczKJwCTpS0zaApmruc9fPn8fO1+F8MAbm7iAac
ebNTimEaL4StoeZuySFhm9VmNyc9MfHJncbz2c0EpI6wVPehTX6oYKkYnrLis2l+
hpeMs+QxdfFMOxZC+Gu4lcVsAkx+CS0ci8X3m504193ZFpjBSmT9dIcIJpX6vJ7A
OBO1NY72ZJOmBEXTZvRt32zA/lDJ1lrMq7fc87QFvzipuO0KueS/Hv30rEC6TFm+
ch3IGbXkj9zpq6zHat6Gki4unFWoeLN8cxUlH2O5SpQLSOtK2CPAP/KaLYHsxDoF
MiK+l3p8G7iy8gcOFfmAgysUJvOGmInjX00m+Zk0toGDLyOa87OsCeCrkdfyhr4j
aD3ZolEJaoywHYr4jBZewemOGJSPD3Dlucni+00m+odXa08Abe5FEryXZxQ9S6Xk
G+3w9kviJ2loADgrPnjUuhSZzAhDvE80hSzcb8mjbVY22sgrt7uGeKQ4qmG7+Pwr
c8pJkJfOCITVmOxh1I3kNFEh3gt+47euevuvkm4rw0gkfiA/MN8aDHo/+WB5n7Uq
JVsTGiCBLyWS+K/UmR+l1cp420+oiU6pXaY/y8YeWUX0RjuHEzpMhNn80hLyutDT
Bp+HaEVhzZLg8PzpjS7jcYDOIlceMnMSBEDz3ARod1iMgfU0UOs5/1SuirBgUXkw
7cHPIoBsI6l2O4CCZzkCBNqpBSwcKOJ6id0QX+vNG0UWNX21tUlxzM7Ppmy9/4Cy
K9waUe1rSZXkHd/bANGCqw68DVIalf8BG9k8yfJxjzQIN1zMk+ZrmBIVkwaYqVN1
2yj2uuJUMmzb9kKmRK9sqAOGgnz2DIIVD1Ol4jB7eVep
-----END ENCRYPTED PRIVATE KEY-----
`,
pemData: `-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAuWcW9lVvQxYhnWfkgnjSWMF9Y7fbr0trJNZMNAbsmtOsllB1
DKdKERCXtaqjsNfK5hUv2TE37BCi13wTqx7ZVAfqzmhq07xSGc1oqaJzJh+U6JW4
nUmKBKwU6qg/7ulsyIkd68N2UtaKnVrFtBy7pRUKgCJiNIYhFpWGlkOglQIC3Hex
P19BF6AI9UMdbzDMEPLZ/O87AxSwwI3PrOi5/Ep39BBvG0W4W+LQotyXmhnps3DQ
rV+Z3lOwnKGoXiy0k6W27GGHgBuOKTyLELaatU7OppoDOgJXEdO8VnHE9ANXWrbJ
qhFjacgwmskBHd7DOFdEu62FdsCC2CCsnvXr1QIDAQABAoIBACBv4tqSM/cexh7N
8HLLRLH2mEN8BVlz7njxbT+k/nxQEF/0D6Z5FkJKDuDfy+fCuWLrzgVH0Srh9juR
H7fOm+NRx0j5h8cnqY2OHIOhQlgnKlxO5Y/PL/CFUtuDODxKZpfnNW7sMaVol7PU
D8blSAcn2UB1w4zA8sUKwBNGHbAz7130YwlOkgnt7lvx5TIxD4wQoC0CogDGLiVB
HMoGvLveUQexF7la5/GM5knN/1I9+HgJQHespxl85C3Qg4UTg7xf6mJlJMwFMWZA
M40EvVFtUzwsABH/0kdmjp27MmsRtcGH5SCOz8ksUnlM7TXvbwHNti1jFAt5H5q2
UmxAx3kCgYEAyBUifPsWpOktulrzw6FaQKJzyHDt/qIuyvq85Pneo17/b5rZj3Km
GIPiqy6EtJqHDeDE/j3iQgcrDlvZe6tFlUNTM1sF2prHq6QRNiJdBUPCceaxF4jZ
mTVCUdWHvfkQXtVftEYXeNIM8nn63XwKv6rRleZpQ4XWFq3mam08d2cCgYEA7Tev
6yF2ZRFJzLUvk5WGIQqOsSXGOcHWVmbxg1hbssy8kSrcaw7G+uHwhWZQzmhY4dnd
3h02XvtfhU05kLt/dnr5dRfSNFltfAHw1vrvkXc0eAtY3LunuxDWw1A+6SVHK1qR
1U1h/yI+thOZ4gQ7DcA7mk/95VyMwnCPE0uB6WMCgYBczRiy+U7WbGTOQ7M+cI9I
3VBwjpiEezrS4JtOZOqzwbMeU6dHFnkdc8ZleW0Jy4aKlE8qUQ+pamO5BDcKWjUq
9xAXCMfdTd8AqFdnUWbtszDz3XkUHmA25HH/PNf58BR8t+Ds33mxi1N//72wjwD5
R0Rwj28RZ3kWCdCOWl4qTwKBgQDeYXwbk20oZkKnE5wcYOozA3CthVoFP0AuE6eJ
mEWuotyLwoCMJHhJLZKLnFVYit34LIQf+4bDGCh+EN1MX1mourQtHz3CMau/uxoK
j4gS+ItJlmmh1JHzfl+3Df1MF9RWQjvAmSCrS3E6w7lY9tpdk77MdPzyDgcvKNIY
JosNPQKBgQCbw+8HyyhWIvobrinQofW9Eg2Z08lbltcGfSiygLgY0+MYBEurp0zc
+rdN8/I6lsJxiyk8eumzdlJdQjNDICPKYBn6dXonW4xT7wChqJh+53DXDUaCJMR4
jOlh0aHv8csftxxnjI8lwu/BjMRdTWY8YeiXHVYzdfNDRvAPYuuZMQ==
-----END RSA PRIVATE KEY-----
`,
password: "test123",
},
}

for _, data := range testData {
Expand Down
23 changes: 23 additions & 0 deletions vendor/github.com/youmark/pkcs8/.gitignore

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

14 changes: 14 additions & 0 deletions vendor/github.com/youmark/pkcs8/.travis.yml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

21 changes: 21 additions & 0 deletions vendor/github.com/youmark/pkcs8/LICENSE

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions vendor/github.com/youmark/pkcs8/README

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

22 changes: 22 additions & 0 deletions vendor/github.com/youmark/pkcs8/README.md

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit d7bec2f

Please sign in to comment.