diff --git a/Tests/NIOSSLTests/NIOSSLTestHelpers.swift b/Tests/NIOSSLTests/NIOSSLTestHelpers.swift index 514265d2..f69a3315 100644 --- a/Tests/NIOSSLTests/NIOSSLTestHelpers.swift +++ b/Tests/NIOSSLTests/NIOSSLTestHelpers.swift @@ -338,129 +338,150 @@ let sampleDerCertSPKI = Array(Data(base64Encoded: """ // 2. leafCertificateForClientAuthenticationIssuedFromCustomCARoot (Used for client authentication) // The client authentication certificate contains the Extension for Client Authentication. // Which is required for testing with the CertificateVerification case of .fullVerification. +// +// The certs from the custom root expire once a year, so here are the instructions +// for when they expire again around August 14, 2024: +// +// 1. New custom CA: +// - openssl genpkey -algorithm RSA -out ca_key.pem +// - openssl req -x509 -new -key ca_key.pem -sha256 -days 1024 -out ca.pem +// +// 2. New server cert: +// - openssl genpkey -algorithm RSA -out server_key.pem +// - openssl req -new -key server_key.pem -out server.csr +// - openssl x509 -req -in server.csr -CA ca.pem -CAkey ca_key.pem -CAcreateserial -out server.pem -days 365 -sha256 +// +// 3. New client cert: +// - openssl genpkey -algorithm RSA -out client_key.pem +// - now create a file called client_ext.cnf with the contents: +// ``` +// [ v3_req ] +// # Extensions for client authentication +// extendedKeyUsage = clientAuth +// ``` +// - openssl req -new -key client_key.pem -out client.csr +// - openssl x509 -req -in client.csr -CA ca.pem -CAkey ca_key.pem -CAcreateserial -out client.pem -days 365 -sha256 -extfile client_ext.cnf -extensions v3_req +// +// Then, copy the contents of the files into the literal strings below. let customCARoot = """ -----BEGIN CERTIFICATE----- -MIIC1zCCAb+gAwIBAgIUaHWBf16JBL3awOy5xdNlG3IJu5owDQYJKoZIhvcNAQEL -BQAwEzERMA8GA1UEAwwIQ3VzdG9tQ0EwHhcNMjIwODA5MTg0NDIyWhcNMjMwODEx -MTg0NDIyWjATMREwDwYDVQQDDAhDdXN0b21DQTCCASIwDQYJKoZIhvcNAQEBBQAD -ggEPADCCAQoCggEBAJ0siZAQoxKgs6RERJDp2sc0zbRGfriPXDfng/WkzjwZqkC6 -//XtGuW7fdqtaMyFuvKfUH9EYqQ4n/zzxEHlbj21bp7GGEN5+/SmBdUn9YiVhLJ/ -tjZB+7QucYc/0v3Uwmg1HEwkL8tBBsRPnOY35BZc+L9cHYkseIxI/5jBK7ABxvc6 -tqy3ARm2hOB5k5jggrH46L9+FOOy8yxBHL+0/UDZc0ud1jjZDJ+WtahZAqUsVKTa -/+QGx+KmES3XeLtHsKYiWrNuRN0pl7xUxtglx/UHFhX2N2mU9A71CKLgsjaNOQ7h -a1NFYd3zcrXY2RjQ4DuB1XzIFHhBr5CwnqfwoE8CAwEAAaMjMCEwDwYDVR0TAQH/ -BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAqQwDQYJKoZIhvcNAQELBQADggEBAGB/C7od -UEhHb9vyeXO6oweTwi0SMp8YKxBvg1v3oNjj/WZu/L+BaRb2K8kpUl6+wlwYjS5c -PVYAs4Q9y17eHNdEkgQGx3cX/IEQcH4ykW8r4WvnlYg9a88PswJh4r9pGVLNon3m -9E+ijCZizsKLLCL3CuZdogZgw7giAHRaGCnsaya2qjT8orG0+JVQxp5bDWcZv4Uq -Y+OJlfCK+pmLBWb09MLJZB5ywY09ZuDBoumciE5JOCfQyfw66jlt/ncjHNRjJfOy -cWT+Ce1ZSYJOc/rFFz9JVVoa7Q1ZyV5tvih8LlzZffKCJ1zgfiAHOLDKw/MooWNd -4cxSAPSPVHjptbM= +MIICrjCCAZYCCQDFInBpelZ7dzANBgkqhkiG9w0BAQsFADAZMRcwFQYDVQQDDA5l +eGFtcGxlLWNhLmNvbTAeFw0yMzA4MTQwOTE2MjRaFw0yNjA2MDMwOTE2MjRaMBkx +FzAVBgNVBAMMDmV4YW1wbGUtY2EuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEA3IVnvJbtRqx+Rz4wadq2eRHuZlGrydSGg8RMtImTVrcqyd3WRR3i +PZrEo9H1KuUusut6TgTTyrSNyVREJqITrZ3v9l+OuFq9LnBmV5Ut9uZWorXFLO4I +S41BMTJ/2tbgjtqNkaBPpUrQOA0VkttRwLCMcIR/7G7ObxZNxBq+60mtukBpDF7z +p9lbIXoVunLo31mRanetefbM/YgQfRL0+EAtjfSc/guuomjS2yPtzFyvafXeXiP7 +OtWdax844RnQyj/gdE4N8oI3IKADFDW5sUeNST54BrobV5QmfwHs1XC1ZTGGIBLu +0tF62MdEqAqL33DTfgrcPo/gchg1xAseBQIDAQABMA0GCSqGSIb3DQEBCwUAA4IB +AQBjU5UYmYWhmfKq+l23uz3o1JkigKshqTZPrNxLwiDjWAHFl6D8V2mWX3Xf2rT9 +P08Gxw9pHvn0KmgnwNyQW5s1zrnKldsxuRC++sZAcW25iwRSKVT4Mvk8r9UP3sGr +e45jt+0OnQcijjFBGeQtkfmfGQqQ5hkGqUqgTs3yHHzi7RbueBjIZrQhcft+TJg9 +BUErR1HogGuz/eu4yTGHIsb/CPFWFaKuxJIwjQsKvdoE2HKhDf7sOX8k5SL+KeoQ +JQwRtRWNZBFhUrzizV/bmKIB2ymBngfH1OB24JX4pPLt9og7FY92Lv+sLAzxfIHS +JA2SpFYQeLTJNM8nsL/q/dDU -----END CERTIFICATE----- """ let leafCertificateForTLSIssuedFromCustomCARoot = """ -----BEGIN CERTIFICATE----- -MIIDAzCCAeugAwIBAgIUeiq/lPC6M+09JF/yFX7iitpPc7gwDQYJKoZIhvcNAQEL -BQAwEzERMA8GA1UEAwwIQ3VzdG9tQ0EwHhcNMjIwODA5MTg0NDIyWhcNMjMwODEw -MTg0NDIyWjAUMRIwEAYDVQQDDAlsb2NhbGhvc3QwggEiMA0GCSqGSIb3DQEBAQUA -A4IBDwAwggEKAoIBAQCv9EASt/qxWuFlbcaLpi8K8Cuj+9274NwfevxFtCLjYEqa -mhuEh/s90swJ0TN9S2qeHzqlaCMSPw41aLXO45xp+0gKGz/EZEk+/3mzxtoBdsht -vm2ZFb75NpgtGJrqsOFEHLurI7v7f7f/2OSZZt4itWZNcMQOVJQ5il/ed38Mb+s6 -X8M1tSLSmg4WycFgKZ3WrfRvC84Kt60/zrk4CYCT1V1lklQVXQlVDhUYBHyA5kNF -Qrqu6SlmkTaRjCI8q/quiCqYmCa25c2wS+jsa+HdSfboXIQnMBpNMtj1+m5QKQcz -DdOfV6sl7dXOZ/JIbRM2tl4sfC713wRIx0G2YRfjAgMBAAGjTjBMMBQGA1UdEQQN -MAuCCWxvY2FsaG9zdDAMBgNVHRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIFoDAWBgNV -HSUBAf8EDDAKBggrBgEFBQcDATANBgkqhkiG9w0BAQsFAAOCAQEAOGveGHi7me1u -H9vr91VDiBKyIBfRIzMBEdstH3Cb4ck6l2ikbLIqXoXAFuYwdMcDoIibtbvntOJ2 -s7ZwVjQDXL9NuKDDYklwHkIuq4K5qtaBrEojYKKAVCp4kZdlqqi4KnNvFT7HOZWS -PGyCa82d+4MJcWGkt0+XSyFNFElQkMW73hbu0Dw4Cj8iPAC3uHP85Wtcc8RQaGK+ -UJd+hTx8s4SktUxebYRqj3oP1F7D4JlwII83f0w10Clc1U6kghIYdaINtMlMB2K+ -NNg7RtgvX5lquo/PT1OM660JKNzZAIEs03NFEu22ZVWESkinZtBaXW97BVYsfern -uXLxHU7NQA== +MIICsjCCAZoCCQD3XtnOig4QMjANBgkqhkiG9w0BAQsFADAZMRcwFQYDVQQDDA5l +eGFtcGxlLWNhLmNvbTAeFw0yMzA4MTQwOTE3MDJaFw0yNDA4MTMwOTE3MDJaMB0x +GzAZBgNVBAMMEmV4YW1wbGUtc2VydmVyLmNvbTCCASIwDQYJKoZIhvcNAQEBBQAD +ggEPADCCAQoCggEBANSngp1ea6XFCi/MsEFsamf3ujH3gDV0qWMi7dt2wIFLfpGX +CPIyOGn7NLCJIShw/TujvlOHLqwYGUxu+lIN/c5kU0B1PDurYEcUTR10zidOXAmi +rjFwgccERjYKbugvfxm/mU39lmOob5PkFC3p6V9qFpARwQaK/q2t0j/Sku5tBvaY +GPtyygi6W/I/+UwI8a7EorjAhk/IOwXUt5f6CcapGTltRZfG/qvpptwaMJTqwjW7 +HFLBUj0e4j0uR7bduhOYlub16Uvn4QKHIcMIBnTBj3ClRQSECf3wdgtLbqBSGmEf +Xzb9tr02O+/TN3r0s77Y7INghVv7Tt3sNHVOTSECAwEAATANBgkqhkiG9w0BAQsF +AAOCAQEAnWeiYtVTKynyYOVy0ClN+L0fACM7JG45UCIlybaTpz+c4jnJ2AdacY0z +iFPJpnjl6NXzENvlZcu+unpWAM9WdeTv3pC5GdVasMfKMx2gMHyl9EAWlfD2z5zi +AshmWEInbzcrr6XqxfseIu7gI7cuWElxQ4fje4PUaCTz0yaGPhWwzuWpNuG6b1nw +8pjlKcg1uyUDZqthPNt3sGLJYMKgWfvRlfesPlHtU3pl0MEl3CuHyNuKNCt1DMXI +kdelPaIiQCZk+sYj5ZIr4yBogoZu06fm0R0FYrcYpB4844GHzLezBjnn1OfJ8DB4 +UqR5CcyLWQfLe/HrAX7CZPh+UxYVWQ== -----END CERTIFICATE----- """ let privateKeyForLeafCertificate = """ -----BEGIN PRIVATE KEY----- -MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCv9EASt/qxWuFl -bcaLpi8K8Cuj+9274NwfevxFtCLjYEqamhuEh/s90swJ0TN9S2qeHzqlaCMSPw41 -aLXO45xp+0gKGz/EZEk+/3mzxtoBdshtvm2ZFb75NpgtGJrqsOFEHLurI7v7f7f/ -2OSZZt4itWZNcMQOVJQ5il/ed38Mb+s6X8M1tSLSmg4WycFgKZ3WrfRvC84Kt60/ -zrk4CYCT1V1lklQVXQlVDhUYBHyA5kNFQrqu6SlmkTaRjCI8q/quiCqYmCa25c2w -S+jsa+HdSfboXIQnMBpNMtj1+m5QKQczDdOfV6sl7dXOZ/JIbRM2tl4sfC713wRI -x0G2YRfjAgMBAAECggEAICBaqpBJB6TuTpSykcDwCfE8Jp7QJ4Ow7VaJRTjUvetQ -89V7fMFPUERy2MAHxLLGbsSI8raG4Mf+kiXiPDo2zusAhkffZr5g2U3QLND78RR9 -F/yTCkZ8LgiX1HQPpRZSqxsL8P1/TzZMpDw30QKFQJUabr1OLsemoLLxOi9bVSu0 -gGcIxnML1AAJQWYbXgerM+jvM08d+DrRBj9cPfvb4JjO3kHexWUjAFJ0TbxTF9uU -qdDkivSuyEhtdtoCOcSdmdOOtZrWNYke3/vvF735bKispkbV5vdQH8eboZp8MnIm -jKapnhsvBYbUB8j8b8LU0feCaWsnrCidDCurimhA4QKBgQDHJrgS2KI+/D2D2vJE -TORjCG5KMUiE88JunwXtiAhDAmWNNt+T3r9/HQQVBRBbSKebb6PywgTh1gMvqcSA -g0WPgf9mbAcnDjBRi9+LmH2ZoVZ/qtUdupUHCrWLT0zCwdkLIhthQ8GvGI6svpXX -Fu+/OTkM3f65ZaWqAQSkJDdnqQKBgQDiLl1XVT9XNsP5aKeBx22YWVlmSfNaDDOP -TaOlMUPSSgJUlpJLrME3b5bjMCoRTHgQ2U87By4YIpBivl9VpvDD8wuZqSyqPxR3 -HMos5h09Apz2pHHfu3AXxZjqA9M9/7xYV7E7ccaRR/6OBzLYTMLYkqQePaQSx+KN -kPR4NyhKqwKBgGYM+kB2EFX0TdV2abUELfhtho6wSHgQrS6ggJoinhEwdjdxygnt -F/YcOU5IJQSR64lkIQAx2eycDU/sT8yG+Cs8s1KZwuSJicsPwQK4powGN9v9/21X -gix0mWkEvtICIaVp2dvyq5p9HAd7Ni9dCofT298zFueMJeNC2E0AXf/ZAoGBANG/ -G1JMvKN9JvmYQpZIQWrhmNURyPl9jSbcYeBkMjfF6ClXRK2ms7tb4TonxSsrlcBS -NXZQ7z70dp8LWc9NM8MTFXPW/ZOXUbwv15ERiJW2Yacb0nofEREKbga9q1y4Voo6 -MCInHXRGplpBdLY/YQWD32wnz4qXEJIllYAR7mxnAoGBAMZMZOWvt4TdoQ+nQ5jQ -gYv6lY9oyX4DXlc8j2LXLUm6YqVUjwaVEuKtKNrWaqiWocmHTFnVdEUhBh4q9EI5 -/PdDVMWWnKjW6BOiwiOwzMk831dwn9Z5gN0gPV7jwsAjpryxPa4x8AOqQRqIgSie -GSgYe+Yo1sFOYeuGOqdHBj8Y +MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDUp4KdXmulxQov +zLBBbGpn97ox94A1dKljIu3bdsCBS36RlwjyMjhp+zSwiSEocP07o75Thy6sGBlM +bvpSDf3OZFNAdTw7q2BHFE0ddM4nTlwJoq4xcIHHBEY2Cm7oL38Zv5lN/ZZjqG+T +5BQt6elfahaQEcEGiv6trdI/0pLubQb2mBj7csoIulvyP/lMCPGuxKK4wIZPyDsF +1LeX+gnGqRk5bUWXxv6r6abcGjCU6sI1uxxSwVI9HuI9Lke23boTmJbm9elL5+EC +hyHDCAZ0wY9wpUUEhAn98HYLS26gUhphH182/ba9Njvv0zd69LO+2OyDYIVb+07d +7DR1Tk0hAgMBAAECggEBAJeUq8L2+e6YzFEUK5MG77YaXEufq3DvLoqu7DNiq4e+ +Q4MN0N+rMpFA8ebgaJVGLQvlBRbPJlKffvD/rkjtFjyXQMyShJPX7fHco7daelSE +Q5DOuDIfizJMdquwtiulJ4k4DNQN7bQt7RLTIhs0QBi2K00YiqnaS/2LCHJb7EYs +fldMiJTe405d6gCBqI6tl1IVh56DbJiSEuWoqK2n0UuediN4ZHbDvi+QnRAfBww7 +kc+QJvEZ6XhjLifK7TM9fc1yxgMGcjeAvemdjHsFtp7EbvXuRNTGx5kmUYUaI0qC +HAvANl8SlBpJLd6ezZIWm+NeHwckg+IrozoR5bEtVm0CgYEA8U3Z38nVJgSOffqA +Bx665Vha8hxzUVVlDg4cqV/oJzyeclF+9xRp3FHO65icfLYeav3DnATVirTRcZwq +gyL0akHGDj2c9Xi6LWXHCul1OIgzoz0XOrK2jj31d9NJ3rIgxXOdaVIz6narhbDT +cwwIF/SPlfhjUdMy1E9dbH+GQQcCgYEA4Zr7vjP91hjTDNB3GuAYhlBkH7DRkNLU +LU2rmmFXwXQu3YrWq/EDRG4+oh4AZ/WaTV7JoAFIkd1hy5ptYRTPHfI0zgo3Ma8S +HkjnOieXebAPWKIGkzdUqx1BssRtsTOiMKrIAt0HYE2X1fL/jAy+LopOlfTcRYhQ +gIgeNiFf/pcCgYAGyw9IKpFymYw9ZbD3All2nW8qA70HXCUVKTaLWiTZ/e3kAAFY +CV4VksQFg+1b4XCnyG8aVFSCrCZ9UU0tFe3Vk/Z0bi2eB4EOSCA7YWkoZ0U04kJm +J6PWC05+yhb5SwB7Lo8O6P6HKkIX6Gt7gKo1qm/kY/K/2fdDXNyfclOgPwKBgApO +fEW6NlR7mdiyBV7y8evg7FIOT+Sf3RWcwMQywkGSPznbx+bfAdk0eCQL3tThAYWb +WPa4WEphpMAac/jFbJjfoc3v5Ymdh+ReTEH54Q+sHWddL5O2KWYP1hqGosQ/qZ8z +jiOjWVzq7o7VpRsO0flqVCDBqPZ8PcFBdq/eYnZNAoGAQs9rvJD0fb9mPYm974z1 +z/ynHRZoqB35VlOPs7DTd2wDHXB7PSfd/neadaqaHVQe9T3weZJJn24ugSFKqoGj +hK0YjA/Td2nrk9fpd2uKGnuEZiEfpkWgLOVBmepUHH2if8VIwSvaWU79U7LtbN4l +uSMcdpsHt7eQr1f+p7s2rZc= -----END PRIVATE KEY----- """ let leafCertificateForClientAuthenticationIssuedFromCustomCARoot = """ -----BEGIN CERTIFICATE----- -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 -----END CERTIFICATE----- """ let privateKeyForClientAuthentication = """ -----BEGIN PRIVATE KEY----- -MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCPi5FaoUqNy9hT -TKycaZlzM9lfe/s3XMBJ3bQ7a04RWAQdKMDkE3Mmh7oKjVZ6XAdgg1OQCcUFhtVu -vwuD3dvpyQS5Kb7Uh4Z9VaKX6TBzzkQT2ZvWnjNJpbrIwlqJeK3ebtpesBO+Yeyg -cb9XcsBriOzrczG5S+sacF0+GGv0x5iWjoxFkkPG9cmrbr/kPx+xPvvohbPJVMZ6 -0FOmvnOOE+F6uN2NTvPdy5nTWtfix0XX7JER5mFUnETtZaIgVAcU+pktYlPfBmtc -SnKhJVznrSvehsahIZbcz6lyCz1fJPIzTnUGmeTJpN1hDqsA+mvocri8eyn5TKhn -bCJU2uzLAgMBAAECggEAR5XXwDXNg1dUI36KWlqDTyNdVTP0PVDBCFVLK5LA1P9q -1cvcHiHg/CcVzWtc5Bp/B0+W3a8xlSb/y4H00SdUI4u/EkRSSZToqhqJwm5lXmtQ -IgIUqHwuoZzHwJTEJ+iJ9PKdbjkrL3eQVRdEz+yHL1mSpXzGIF1O+tlsdqohNGmS -YZ0BepR3HQokfxX5uTfwIA9HxYzPS7K3PAVySsWr1XPy6aWsgoH21OK1Vbz/sLx3 -JS024b0i29o2KdqPEdsSWpLHvsmiq5PCeI9Z08Vx+KiFKO77pcVt9huXsFx5asdI -Q/DOOdT8WkJEF4NdPdmH1dg8N6HsWtsPu5dtmr0XWQKBgQDDD7t8L3SlDuthR6O2 -La5pkbvFGUf/AKplerofozh4iTWHILNXIltKvelH+PBCndkb9hzOMQjis49/0VBS -I1y9GD9+vdMaDpE8Hk4Yi9EkIVyRqAzniBPRxOiPqC3C8shfJXmyvLfPnPDzaN7C -WP7JTFro3A637UdSgof2dFobzQKBgQC8Y8MBPRWcAzvUIuL+AGZrWd0m3v8BdJCB -9H8lEypxBPrcjUpl1vRu9Y8iK9v/uieyUyJLkbrod1rw/RdJc8vqxDVM8fcP2irF -u0fpfFAQh2HUA/QJD2k2WgnpT8QR/oI5+DpFXabJben7LA1wQZoaePBTiB2FqX0S -OqbMuvyC9wKBgQCTQhlEU3837N99/Vt2eV4mjMK4tbFIrfP10IUaxVoohU1HykQa -D/HjpyOqFiEr6YayOUbd0t7mZrB6ykZc/B1TFC87O4tXLJAwVqCWn1cwc48y1y+G -y5BK2ODJMyn49tiWG/CYIyiRL+YnnJAvIIiY52/qQ9dIu3UQsUJ7qLMuMQKBgQCN -Lwqms/us5zOAQQDysKQREdDOX9KmaZAfBHgA9gMZnkzO20iFV/np6jfxuQLv/Lfh -SbJrBfUYYNKTxmkcUB7je1Yiqzen9q2VcExtbA+ow30KYkgSPi1wYTwKURA1GBLK -lQA+mffz/16aMSKFHXT7H+WkBF9zm1izP6dfyUaScwKBgAC6I8YAgeclU/ZvUV6+ -lPX9Ja3cxAwoD/7L4cMk6cNQICLDRoJOa6PE5nScEGjn2Aj7eIvThbhFjJKUlN+a -2xY1uZIFY1fmhcIza3gBccUORFqEzP7Cuh1iPyWsiGgGoWEqrH7fKUWM3+2iJ10r -NXJv/vGjMv09rfgMJZQ/wZ8D +MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDbu1C/CXQwhTk5 +QDrjsPDFRkn3ta8WzbCGlab4IvTqLRkU7tSJG5vSr7pfwMEpHPhTzJ46TK8Df9TZ +GkgO9ww/DTY7YPGDN1I4Lfj3fprzRx+CUvsMI57nJJBNwIBeAr0dgX3L7z0BTxRd +LckrdXvO99rX9AVUXTlzxEPrw4oafgRvrljB0Uclh/bopuLsXGLiE4iN6jAM9z5f ++ByOwCESJ8BngITuJIvE4hLEBXmZxAuR8wxdRwQyjDPHszmhbuMQU8oCtmQdoNKc +UTQKekM8+6M3jsBRVLm8nun/56wvmlxlwpRBWoenGtlnR+kJ8ZfbWu4PyZ8QXB4o +0OyshWWLAgMBAAECggEBAM1NIe+sdJwVDddZFOzC2ONpfhjs70/eFU5aKyxy9OSM +CIBPedM1MY1T1U47+f5g7ADYEQqltWwOlx/V93fMCewrev1V4bHZEYAeLB2KdFpT +nLQWtiusaH7M4etTrlyoMGyOHaxatmQvr/Yznl91oJ1LZXUasZQWmmR4/4EcLT/7 +vJrobJaVYR2APCj8rVvHfbmkbWAedRlc6T931/tD/K38z67NfdL7NUrsVKHZGXtg +QSnx0C6ZmWWND4dpR2HPy7E18WgX2ocLYYtKlAeUjnur5DGZAniLanMbKZVPGE9I +pCol2mbrJwMTxPPSxTFaJhNfngGc1WhbJ44COhTWRYkCgYEA+F5aYvUc0hKhRUq8 +r/xi6UarRlQUZq1YFIyb1ohfHiiW02rQQbYAbENezJ5CTxEo8+OIiX4Rt81RKr0I +4+hUFgGKMxOG59buXUfJaX3td4ViEXElcTQvMvY/SG1hwWEHQex2F/5j6WZkJl+v +Eh7p2x0JRvXf14m2V3VJ2Q58cTcCgYEA4nu1A6Vwffmju2yJYkQKrT0hcwAe2ks1 +AvOPajAepXbcZvhxv9U/3HifNR1H3sWwDoU8WdtkX6sGvw6d8roGEhtm/gkjdYII +70nNV0KLRhHz5jp2yZlmJfvvTuRO7v2DGyGOp/J8WSK4zEZWt3hPF7KcJeGuyONa +d/oe3NYvaE0CgYBp4q/eKGmVFeQzSl2PGaaBlWNHpGjeLWCzwg5eM915WgyTLaKD +oTgk78PmsEHMu6Ad+g8nrtuW5K2J7vVvVIkkqJtmkxicloEgu44er1Uh83ePwBEa +ZgkJTPpFwnw+mUMi09C1AftOchyYT4qvywYgKAzgd8pqdYeLWbGWHBrpmQKBgQCs +j/EVvCH/+gtkrIfo1UsFQASSaM8ZKCBWBVmKYOuYyv2Xf0i8DzE/PLCheZPfCuTf +y2h2VpEdy2OyguKZpF8nwLUybagUymUgXS0VhWA0nU0mZ/lGFZkc694kUBRMR+By +9ZiKIlnYWHpROm6sEADDX5VVz6Sq739o1qxZOuCYKQKBgQDdpvNme2Tapq9xpzP1 +57+kCmw8oINos+epiePxwCHGBi+fD7KHzd3ksbDuJjEHWvOmEiNZlMq2tm+b0z3S +sY9yNFGm8MReuagVbMrrXQMrKEMgjD16iaJEb/iTNkiuXP8svEplNCtCTx9CPvwF +yjs/D/6w2xhrlaheHU9naVLj4Q== -----END PRIVATE KEY----- """