Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
module github.com/AthenZ/authorization-proxy/v4

go 1.25.1
go 1.25.3

replace (
cloud.google.com/go => cloud.google.com/go v0.123.0
Expand Down
189 changes: 187 additions & 2 deletions service/tls_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -328,6 +328,76 @@ func TestNewTLSConfig(t *testing.T) {
return nil
},
},
{
name: "certificate with trailing dot in SAN should load successfully",
args: args{
cfg: config.TLS{
CertPath: "../test/data/trailing_dot_server.crt",
KeyPath: "../test/data/trailing_dot_server.key",
},
},
want: &tls.Config{MinVersion: tls.VersionTLS12},
wantErr: false,
checkFunc: func(got, want *tls.Config) error {
return nil
},
},
{
name: "certificate with leading dot in SAN should load successfully",
args: args{
cfg: config.TLS{
CertPath: "../test/data/leading_dot_server.crt",
KeyPath: "../test/data/leading_dot_server.key",
},
},
want: &tls.Config{MinVersion: tls.VersionTLS12},
wantErr: false,
checkFunc: func(got, want *tls.Config) error {
return nil
},
},
{
name: "certificate with empty label in SAN should load successfully",
args: args{
cfg: config.TLS{
CertPath: "../test/data/empty_label_server.crt",
KeyPath: "../test/data/empty_label_server.key",
},
},
want: &tls.Config{MinVersion: tls.VersionTLS12},
wantErr: false,
checkFunc: func(got, want *tls.Config) error {
return nil
},
},
{
name: "certificate with long label in SAN should load successfully",
args: args{
cfg: config.TLS{
CertPath: "../test/data/long_label_server.crt",
KeyPath: "../test/data/long_label_server.key",
},
},
want: &tls.Config{MinVersion: tls.VersionTLS12},
wantErr: false,
checkFunc: func(got, want *tls.Config) error {
return nil
},
},
{
name: "certificate with malformed email in SAN should load successfully",
args: args{
cfg: config.TLS{
CertPath: "../test/data/malformed_email_server.crt",
KeyPath: "../test/data/malformed_email_server.key",
},
},
want: &tls.Config{MinVersion: tls.VersionTLS12},
wantErr: false,
checkFunc: func(got, want *tls.Config) error {
return nil
},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
Expand All @@ -336,7 +406,7 @@ func TestNewTLSConfig(t *testing.T) {
}

got, err := NewTLSConfig(tt.args.cfg)
if err != nil {
if (err != nil) != tt.wantErr {
t.Errorf("NewTLSConfig() error = %v, wantErr %v", err, tt.wantErr)
return
}
Expand Down Expand Up @@ -801,14 +871,89 @@ func TestNewTLSConfigWithTLSCertificateCache(t *testing.T) {
wantErr: errors.New("isValidDuration(cfg.CertRefreshPeriod): time: invalid duration \"invalid duration\""),
checkFunc: func(gotConfig *tls.Config, gotCache *TLSCertificateCache, wantConfig *tls.Config, wantCache *TLSCertificateCache) error {
if gotConfig != nil {
return fmt.Errorf("gotConfig not nil :\tgot %d \twant %d", &gotConfig, &wantConfig)
return fmt.Errorf("gotConfig not nil :\tgot %d \twant %d", &gotConfig, &wantCache)
}
if gotCache != nil {
return fmt.Errorf("gotConfig not nil :\tgot %d \twant %d", &gotCache, &wantCache)
}
return nil
},
},
{
name: "certificate with trailing dot in SAN should load successfully",
args: args{
cfg: config.TLS{
CertPath: "../test/data/trailing_dot_server.crt",
KeyPath: "../test/data/trailing_dot_server.key",
},
},
wantConfig: &tls.Config{MinVersion: tls.VersionTLS12},
wantCache: nil,
wantErr: nil,
checkFunc: func(gotConfig *tls.Config, gotCache *TLSCertificateCache, wantConfig *tls.Config, wantCache *TLSCertificateCache) error {
return nil
},
},
{
name: "certificate with leading dot in SAN should load successfully",
args: args{
cfg: config.TLS{
CertPath: "../test/data/leading_dot_server.crt",
KeyPath: "../test/data/leading_dot_server.key",
},
},
wantConfig: &tls.Config{MinVersion: tls.VersionTLS12},
wantCache: nil,
wantErr: nil,
checkFunc: func(gotConfig *tls.Config, gotCache *TLSCertificateCache, wantConfig *tls.Config, wantCache *TLSCertificateCache) error {
return nil
},
},
{
name: "certificate with empty label in SAN should load successfully",
args: args{
cfg: config.TLS{
CertPath: "../test/data/empty_label_server.crt",
KeyPath: "../test/data/empty_label_server.key",
},
},
wantConfig: &tls.Config{MinVersion: tls.VersionTLS12},
wantCache: nil,
wantErr: nil,
checkFunc: func(gotConfig *tls.Config, gotCache *TLSCertificateCache, wantConfig *tls.Config, wantCache *TLSCertificateCache) error {
return nil
},
},
{
name: "certificate with long label in SAN should load successfully",
args: args{
cfg: config.TLS{
CertPath: "../test/data/long_label_server.crt",
KeyPath: "../test/data/long_label_server.key",
},
},
wantConfig: &tls.Config{MinVersion: tls.VersionTLS12},
wantCache: nil,
wantErr: nil,
checkFunc: func(gotConfig *tls.Config, gotCache *TLSCertificateCache, wantConfig *tls.Config, wantCache *TLSCertificateCache) error {
return nil
},
},
{
name: "certificate with malformed email in SAN should load successfully",
args: args{
cfg: config.TLS{
CertPath: "../test/data/malformed_email_server.crt",
KeyPath: "../test/data/malformed_email_server.key",
},
},
wantConfig: &tls.Config{MinVersion: tls.VersionTLS12},
wantCache: nil,
wantErr: nil,
checkFunc: func(gotConfig *tls.Config, gotCache *TLSCertificateCache, wantConfig *tls.Config, wantCache *TLSCertificateCache) error {
return nil
},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
Expand Down Expand Up @@ -900,6 +1045,46 @@ func TestNewX509CertPool(t *testing.T) {
},
wantErr: false,
},
{
name: "certificate with trailing dot in SAN should load successfully",
args: args{
path: "../test/data/trailing_dot_server.crt",
},
want: &x509.CertPool{},
wantErr: false,
},
{
name: "certificate with leading dot in SAN should load successfully",
args: args{
path: "../test/data/leading_dot_server.crt",
},
want: &x509.CertPool{},
wantErr: false,
},
{
name: "certificate with empty label in SAN should load successfully",
args: args{
path: "../test/data/empty_label_server.crt",
},
want: &x509.CertPool{},
wantErr: false,
},
{
name: "certificate with long label in SAN should load successfully",
args: args{
path: "../test/data/long_label_server.crt",
},
want: &x509.CertPool{},
wantErr: false,
},
{
name: "certificate with malformed email in SAN should load successfully",
args: args{
path: "../test/data/malformed_email_server.crt",
},
want: &x509.CertPool{},
wantErr: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
Expand Down
19 changes: 19 additions & 0 deletions test/data/empty_label_server.crt
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
-----BEGIN CERTIFICATE-----
MIIDGzCCAgOgAwIBAgIBATANBgkqhkiG9w0BAQsFADApMQswCQYDVQQGEwJVUzEa
MBgGA1UEChMRVGVzdCBPcmdhbml6YXRpb24wHhcNMjUxMDE1MDM1MTIyWhcNMjYx
MDE1MDM1MTIyWjApMQswCQYDVQQGEwJVUzEaMBgGA1UEChMRVGVzdCBPcmdhbml6
YXRpb24wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCbMwKatjpqcrCI
A0dUesQ/l3qRu610UepAnvnLCGdfs0sx4jTU5lUAP4NxFHjIJC6mMlmS5tSCNCxf
7IgKTZbemJv5J/77+6pn/cwb5n3RejhIzQh8j8oc2F+ksw/SmYB9bggxFQQVAHZ9
xiwz+6o1TVYM8ZONYyMVAqs++gg3l7fhLKuuFldJXZ4xK5C81pPXXpohf9gKh6td
4QnJbP3NV4XR1tW8hcHDCU7jAe0SfaLIvRLONxFGHbLiOW58WNbCy/z0vUTLBaKU
PVyuXJ4LDkaeFFPloqpMr9/fqaY4REk1oiT930HZAypgsByjMGpjceAUxSDQFbFe
oRoX1I4rAgMBAAGjTjBMMA4GA1UdDwEB/wQEAwIFoDATBgNVHSUEDDAKBggrBgEF
BQcDATAMBgNVHRMBAf8EAjAAMBcGA1UdEQQQMA6CDGV4YW1wbGUuLmNvbTANBgkq
hkiG9w0BAQsFAAOCAQEAEOfkpn37jj/cTaEKxrCvnQpFR49rkGTKFayzFO+Qj/oY
kQ9+wlROY1BsGLLLOY0CGTvQvGURZjo/TkkRRy57513o0NAPViIseoi0WmoFDyx/
+YLZmnLaF383oBSmFB1fJ08oUkDArQT35eYmiuEja3sm9O1ONi8+g+cbjcsEcbsj
bHJqUxDWl3pm32qJC6Yo9Fm1hiytUmtfWy16Z2ozdsiVSifT55p7zHejawqKUhvG
X7y8l8wyqYVqQBbp+5L9xWbZgNndeeB3rhffWKkfy2iTmjcT0h1iK88VHQ3rqdes
eSyuOYl2tH2ZxsPqECFJJJBimuOWY5EZdC0dq0egtg==
-----END CERTIFICATE-----
28 changes: 28 additions & 0 deletions test/data/empty_label_server.key
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCbMwKatjpqcrCI
A0dUesQ/l3qRu610UepAnvnLCGdfs0sx4jTU5lUAP4NxFHjIJC6mMlmS5tSCNCxf
7IgKTZbemJv5J/77+6pn/cwb5n3RejhIzQh8j8oc2F+ksw/SmYB9bggxFQQVAHZ9
xiwz+6o1TVYM8ZONYyMVAqs++gg3l7fhLKuuFldJXZ4xK5C81pPXXpohf9gKh6td
4QnJbP3NV4XR1tW8hcHDCU7jAe0SfaLIvRLONxFGHbLiOW58WNbCy/z0vUTLBaKU
PVyuXJ4LDkaeFFPloqpMr9/fqaY4REk1oiT930HZAypgsByjMGpjceAUxSDQFbFe
oRoX1I4rAgMBAAECggEALw7bAc0yTjeDVmJkHPXyjnOgSxL0h5oU5M4vYIQmUAq9
yJzVtx419NLNSJrT+p+Z83O93ECYe/hU4isGntUi41CzrmsVshL/evOmEWmkicE8
0ro0kgxJVNC4w2g16n33y1BzNGqyZ6nRw9Y0bfinhezypA8V1d+S8hpykTBgEHa7
9Ncc7Myi052Ja9a1a3KdBTkhphOLTHZ+YT9IxJT/H7h5pzB3jfKIXUi7ds1FNYOO
FVAgR01KFrSvEUoV5AqyF82UzfJ7+ShPjcjjAMc/Iek6t1Iudumd6Mz6iWS5gclS
Eztk3Imx7Yrb0PbwLVvH367tIJza0W0z0EZ6Q8IvlQKBgQDCbc1mvmnURGEPomD2
bMtm9p+9I6oJp+ff7o1/008WQBlym5N6KFljaJ7WUxOxA9sq1EmTpLioQUaW6o9y
sT/v9bGKEjSOlQJI2I19EPeq6/5m5sXBkRXo3goPHQg4dFw5JSDA5X9U9TXvUTKV
eBgNtx8cStVvT4Fq3RTDaxibFQKBgQDMWOQF2A8YeCJwLOTAYRZOcjJQWP9ktTFL
cqeHJ5icOS5duvD01Vb2IKKrOSmAbCDB048J9kVhLgeINXXvUjk6qV7mZd0dQIPs
nwyjfSH13qmt/ozKraViIGSMCEclyFpwEplqiZge1VL+jWqJds7JFqxUCWWmH4bN
qnq9fTXUPwKBgQCS9WvLvSFA0G6M4q9nk9Qqfz8+NzbPFZquKCHL/GxK5ShW+EEA
lH78JJfqZ+D6a2+9b7gtYNQyWSSB7cl/Z3psZclME3amTvrrFMPdRHXvO3GPVd8j
8AYffbUct1T/VvRePTIEm3MjRDUALt+NGrkTpNZfDDFHcVDg9To8ezaeAQKBgQCz
qJdZd/rVpZGJlD7N0M3+zDHmKEjqLs+XKMeXcT2gZDmamKgOaZ7aKBk8drZBPU+T
eb/xnz6iUQi4PWBht6WvKIfSAs7jT/xsxe0js/lupIQEAJ+h9gdIfXhJEWIUGtFA
ZWnSnARNX3pnaMe48eaeLzv1aomfA2rOWUsuW+4+mwKBgBhLouMCXwPN5b1oC2D7
DPGwVGEdRcCF1Y5Ak0iGcRPELnlNrXF2c244MsBewfcd/bwwkZeU4J3y3Qntgzhh
DVqTND6o6DOPKBQzbEMsPSfwxP8RqjrW2ik+H2OH3LdNmro2gwn9M3x2kYCt5WFO
AA7Cc4+bcdK4mAzoCX6dErQK
-----END PRIVATE KEY-----
19 changes: 19 additions & 0 deletions test/data/leading_dot_server.crt
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
-----BEGIN CERTIFICATE-----
MIIDGzCCAgOgAwIBAgIBATANBgkqhkiG9w0BAQsFADApMQswCQYDVQQGEwJVUzEa
MBgGA1UEChMRVGVzdCBPcmdhbml6YXRpb24wHhcNMjUxMDE1MDM1MTIyWhcNMjYx
MDE1MDM1MTIyWjApMQswCQYDVQQGEwJVUzEaMBgGA1UEChMRVGVzdCBPcmdhbml6
YXRpb24wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCoF60ua0HF4Rgu
BeJ48lilhhGxwJ3VK1eQHKANl9PqsPspBEX7oN49d4I81L1aqXMyNf5IECtHRAAw
ZHB/CHqqfVRCkmmz33ymwohZPkEvWWx9RPSkDVEdq1XpHV9IwIPClGSeHqB5RW9g
BgFumfWwf6awLjd+v1WlGjZxPo/lo8tR0bQL5OsFNpvDKvBS+YhDTiMRZ+UiDgRc
JZ9dRZk7gvEkTKuxZYGO7szo7tawLrezHyH9m4j0HmS/Y7pedOyMP1OGJpKyb/oZ
UstIRszsXlAa2jrCdHFkaj9XrO0Vh+1WDPnCQPRPA9cr6DxtBF6lByOo22n+U1SQ
i8RQf4lVAgMBAAGjTjBMMA4GA1UdDwEB/wQEAwIFoDATBgNVHSUEDDAKBggrBgEF
BQcDATAMBgNVHRMBAf8EAjAAMBcGA1UdEQQQMA6CDC5leGFtcGxlLmNvbTANBgkq
hkiG9w0BAQsFAAOCAQEAdyUsX6UJgQhKuWXikQPr+itYjQp8P4QnWRAUwbyOHfsc
MHOLkoddurX7jJl+M12ZURDvrtoayt09Q+droE/1B0qG+32Yx2yk0ce3nyjByNnb
/Nw8raOvqK3HDAA86ioMaOESlU++etBcSw5//xcc1yqHgOFJaHz8eQ99+zSIHdd+
DEJYKdpBpgfAsUCoiiOS03D5sGpg08fK3Ep/fHxnOBPAdg4PnAYdkVhCmqUuy23H
07MCofj09I+kytj28EdLiOdBXfoZShIlWNxS0mrESiEGz7brenZnQ/ukcrUPOgEt
I0XkfM7RE4YEGyoh5edWJ1ZVouAVnSQCBjfMk3U6gQ==
-----END CERTIFICATE-----
28 changes: 28 additions & 0 deletions test/data/leading_dot_server.key
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
-----BEGIN PRIVATE KEY-----
MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCoF60ua0HF4Rgu
BeJ48lilhhGxwJ3VK1eQHKANl9PqsPspBEX7oN49d4I81L1aqXMyNf5IECtHRAAw
ZHB/CHqqfVRCkmmz33ymwohZPkEvWWx9RPSkDVEdq1XpHV9IwIPClGSeHqB5RW9g
BgFumfWwf6awLjd+v1WlGjZxPo/lo8tR0bQL5OsFNpvDKvBS+YhDTiMRZ+UiDgRc
JZ9dRZk7gvEkTKuxZYGO7szo7tawLrezHyH9m4j0HmS/Y7pedOyMP1OGJpKyb/oZ
UstIRszsXlAa2jrCdHFkaj9XrO0Vh+1WDPnCQPRPA9cr6DxtBF6lByOo22n+U1SQ
i8RQf4lVAgMBAAECggEAARcmOr23Ycyq4A9FJEO3WKSvJmpU5O0eeye0YhkMVJls
vomojyJ3cy6hAIQFWwN+ZPT92nCuIFXwmBag/5+udSytP0FPUs2uDwt0BLJ5jBCD
3xVO3GYnbkVFIEKVFxYEDfFfWkvPbGewDLP9RT76b+Ya80mim6tPzBAa5byZBKjo
qfv02pq3vtYyj+7MakUhUvwbrY86OeZ7awo+IsIcBKM+P8jujIeyQcJkluvAz2pS
54eUMxdBV8c2MeD4OW0CkIAxOeGMsEqP9W3ZjivnBc/XGpzfeXjEmYchxxHCOKh0
x+BawHqjUbwpvUZAlZFZFXSHFmUwgZsEOkAvNTzgAQKBgQDM/RrIa3PM5BMsLloQ
6XiylRqrXBPAN9pRKUroiUkLWQiIgrM7Un8ttEEuv8Qx7JDaeBx/fv+lgIGzf+OI
rqhW3RLcDvZpNCQ0frUY/48PiAq3XV+ICgdzSTbgLQAbyIXB8iSsvAfXGfJMRFeV
wphxo99mTIYX4c9NOwCOL+guQQKBgQDR7BU2ILMkw2jJezjr2A5/lvkXDFp3gSxe
UzsJ1pdxDDabG+YkIrWCdihrIhQYiJx3pC5/KqLaZjPvNw7BctdB2Y6GC4nMK3pq
xTnVtkqiNYcAjapNLfUJHGT+h4NwMI649BWDk35llblt0uzHdlVXA/hF7FarnHWB
aOic10A+FQKBgQCVkqmUTDN28YS73CaD6JfVVs7a8pjGzPpT9lleS64sxY5gbV3y
j0OVSc22Gt9BvmgDwVip/zTywk3heBPCjA7xMuasA47xPMaeN0ZVM0RkBNQs78jh
LtA44tdTxAIsQ6i118XC9ICUB66wz71I3XD2mqhLsNK3YmEs7Tx+g55bAQKBgQC5
6JKAdUUx8b0DcpVeiOGOLW478zzLSSK6BovqkplcDKzvgS24IuUMvQfemTei4plv
e3+SL3g6YvjriZ8Pw1zPfJS0MdO/dWHc3P3zPpWqQi1lWBDSeTjg8LygjfLhkJ9V
PRUwiZcO8CJgGMSJgUri3SkrA7teEBogmYAoJplGYQKBgQCsSrfGTz3EVWpzAIvX
0KM7tyJL1SrPTlFzgGh9y1fBxMbynQZfCNAKUohAZLovJUXyWI0VkTYXGbEL/2Ex
kVoRI3GwSZ5fucYOoeA6wTOsCwNngF4s9+WYvsWYXLqLDxpNsGW14e6RHxXpYFK/
KOrLR1lHKV0EtGdwMCy1ffjwNg==
-----END PRIVATE KEY-----
21 changes: 21 additions & 0 deletions test/data/long_label_server.crt
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
-----BEGIN CERTIFICATE-----
MIIDXTCCAkWgAwIBAgIBATANBgkqhkiG9w0BAQsFADApMQswCQYDVQQGEwJVUzEa
MBgGA1UEChMRVGVzdCBPcmdhbml6YXRpb24wHhcNMjUxMDE1MDM1MTIyWhcNMjYx
MDE1MDM1MTIyWjApMQswCQYDVQQGEwJVUzEaMBgGA1UEChMRVGVzdCBPcmdhbml6
YXRpb24wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC3+5Tl0673PaTM
bkESguYxCD1fIl9cGEdI7T7ueHvaB7J7kuHf5+TwsxmZMQygi96tJPYNdNQqx4Ed
2Wj8umZnfqzirs2UdTcUIButztkxNyS8zSfc8eImOpSm1wj7yt+IAH4k9rirtij6
bQkDjqV0bcHdnYySgz4hSxt8mN1yPV6MFrCH1oca2BZg/OhGCFlfcDjXtm5o8v8T
G7pLFhhLf0h01S9BFBc7yq7lOkgK/k7qu4DJQ4M7f2qNY9GQnW1CulUJILtd1sJO
KTcflqYQijMmV/rJPkNZ8vxmHDrK1DrWyeIMdhUQEgBrKssYIfPqVPiL8kZ8cALH
x9rM0ig9AgMBAAGjgY8wgYwwDgYDVR0PAQH/BAQDAgWgMBMGA1UdJQQMMAoGCCsG
AQUFBwMBMAwGA1UdEwEB/wQCMAAwVwYDVR0RBFAwToJMYWFhYWFhYWFhYWFhYWFh
YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFh
YS5leGFtcGxlLmNvbTANBgkqhkiG9w0BAQsFAAOCAQEAi/aHjRfCvhpZjw9T17oV
Fdfo5qD3FnnH7HN6QYN93AfTqNSoj97esCeuVcZ7F9BODnvC8RuJjauN8AnqySK3
OAxZaT5PW7Ov+H+0VobA+bINfPNb7SuCAto5rKxXbM6rwD4bvFw4RI5RO2dsKtUF
AY0nUeQH2rJjbr3zOPzlqwOIseg9VUvJH0h2rVTcWWWZVd5WfAlNdVZt3U12rRV4
YiaJwIIdLk4J5a9b7voSGjApzRs3gxshxBSbUxn6kWiqjSRdsxtB13KQhBdEMxs5
bDLqE8XvaYQ99o+O0Ce5kYdM7Ft/XiwqsXpRN0V/O+P7zrwwTmp3WanP/cbu2X6S
MQ==
-----END CERTIFICATE-----
28 changes: 28 additions & 0 deletions test/data/long_label_server.key
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC3+5Tl0673PaTM
bkESguYxCD1fIl9cGEdI7T7ueHvaB7J7kuHf5+TwsxmZMQygi96tJPYNdNQqx4Ed
2Wj8umZnfqzirs2UdTcUIButztkxNyS8zSfc8eImOpSm1wj7yt+IAH4k9rirtij6
bQkDjqV0bcHdnYySgz4hSxt8mN1yPV6MFrCH1oca2BZg/OhGCFlfcDjXtm5o8v8T
G7pLFhhLf0h01S9BFBc7yq7lOkgK/k7qu4DJQ4M7f2qNY9GQnW1CulUJILtd1sJO
KTcflqYQijMmV/rJPkNZ8vxmHDrK1DrWyeIMdhUQEgBrKssYIfPqVPiL8kZ8cALH
x9rM0ig9AgMBAAECggEABikf9sQsVy4Svx+wASEt+RVYDL/3ZnuPo4MCOPUC3K2m
TdoAw0EeGus8X7NTQ2r7lVun+5JeamJM0gWOLOxG8o881chZrO9x3TQoCR1ki2/X
xJSwEYdt9a6/fIi1zcygyIqPrsguLd3HKH+PLjXQF4J3W+bjJqLLaUz9CiKKQ8F4
s/Iz+peertCh9n0bscQ4uEI/ioYP1SlTujmyTR11xEw4m9JuIaMlutfCFI6A9S8i
13SrHDMfBeFoTccMAyqfcmf5uO0woh8Gxewd0mePBfE4DTZJdYaHyIXWfM9zVfpr
QURtOlJFzkPcUMxa6gMQdRq23xvA4n3axtVEP3mN4QKBgQDDQ+xoXd/oT+ZxHZ5Q
1qa86/9BN8LNn+H01CfmCcTfzmna+L6atCZfpEsr/q6j6JIGrvdKHXk9sPTnMP/5
DBgwJtpWY7ObK8VlYyeR09QzNZtUH6DDtD4KEeZMLWX/LNtK9+q8ZIp+MApDiHnN
B22Z0rvmpRcBW+pefJo3YuHl7QKBgQDxNUcprrSeoBg53imqwZMiBgW54eiBFmPv
wlCvAXnydyK8vzgB6C3GwhQjnWSPWRClfRedSOXVqyeCduNf3wd4mYWSZsro3VuC
fKnVh8rqIpbp8Qlg+7AamEtUvxsfZRK/uoMqPCF4Ic3s/L5w/Hei7HlIwBzF09oC
tEeVrb0BkQKBgQC02cUsyL1n8hDR9Ye7AYP++Gk640VWo11pH9IwWh3w18HtIHOQ
34enD4jcH49qmi4daJH7IB85xxqcwiJibRQ+DM4uMzuXXUv/Yn20r8gbAexyVrTU
ba0EMJ3nMikE1WvqHIJZqJko1J+8+rss7VNSo/6KWZ9cD+CbULaY08m75QKBgD2z
HyzuX41j7k5/IbFoKra9S6Gsw8ihbZba4cCiZAs9pkkZsL3sIimBY51omVyBr9xl
DzFQgFoTmduphaf0aPjUbHJykNzYIpxSPy87uRADIQ9edMO2HenvovVenRV+yTj6
AKtBDl6oZwCD9kL4kbG/Q5b0bWe9NTsT2mvTMVHBAoGBAJOomQiOap4Zb4zxsVC6
4B700mjqwnucoJfnZ0xS6i2O+VUHjT3zNiYDo8mkkoND45KxqMKIrj13Us5L9R4K
LDy3GT0sHKoOqjW3VIMFHvxyk/NRKG5yrEiQsuflvzlojGm8KGyCwQ5rAfpnImxR
jLydYcp3dlDNXLokYglKzOdN
-----END PRIVATE KEY-----
Loading
Loading