Skip to content
Open
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
8 changes: 3 additions & 5 deletions lib/rubygems/commands/cert_command.rb
Original file line number Diff line number Diff line change
Expand Up @@ -96,8 +96,6 @@ def open_private_key(key_file)
check_openssl
passphrase = ENV["GEM_PRIVATE_KEY_PASSPHRASE"]
key = OpenSSL::PKey.read File.read(key_file), passphrase
raise Gem::OptionParser::InvalidArgument,
"#{key_file}: private key not found" unless key.private?
key
rescue Errno::ENOENT
raise Gem::OptionParser::InvalidArgument, "#{key_file}: does not exist"
Expand Down Expand Up @@ -161,7 +159,7 @@ def build_cert(email, key) # :nodoc:
Gem::Security::ONE_DAY * expiration_length_days
)

Gem::Security.write cert, "gem-public_cert.pem"
Gem::Security.write_certificate cert, "gem-public_cert.pem"
end

def build_key # :nodoc:
Expand All @@ -178,7 +176,7 @@ def build_key # :nodoc:

algorithm = options[:key_algorithm] || Gem::Security::DEFAULT_KEY_ALGORITHM
key = Gem::Security.create_key(algorithm)
key_path = Gem::Security.write key, "gem-private_key.pem", 0o600, passphrase
key_path = Gem::Security.write_private_key key, "gem-private_key.pem", 0o600, passphrase

[key, key_path]
end
Expand Down Expand Up @@ -298,7 +296,7 @@ def sign(cert_file)

cert = Gem::Security.sign cert, issuer_key, issuer_cert

Gem::Security.write cert, cert_file, permissions
Gem::Security.write_certificate cert, cert_file, permissions
end

def sign_certificates # :nodoc:
Expand Down
31 changes: 24 additions & 7 deletions lib/rubygems/security.rb
Original file line number Diff line number Diff line change
Expand Up @@ -562,7 +562,12 @@ def self.sign(certificate, signing_key, signing_cert, age = ONE_YEAR, extensions
signed = create_cert signee_subject, signee_key, age, extensions, serial
signed.issuer = signing_cert.subject

signed.sign signing_key, Gem::Security::DIGEST_NAME
begin
signed.sign signing_key, Gem::Security::DIGEST_NAME
rescue ArgumentError
raise Gem::Security::Exception,
"incorrect signing key for signing"
end
end

##
Expand All @@ -585,24 +590,36 @@ def self.trusted_certificates(&block)
end

##
# Writes +pemmable+, which must respond to +to_pem+ to +path+ with the given
# +permissions+. If passed +cipher+ and +passphrase+ those arguments will be
# passed to +to_pem+.
# Writes the private +key+ to +path+ with the given +permissions+.
# If passed +passphrase+ and +cipher+, the key is encrypted.

def self.write(pemmable, path, permissions = 0o600, passphrase = nil, cipher = KEY_CIPHER)
def self.write_private_key(key, path, permissions = 0o600, passphrase = nil, cipher = KEY_CIPHER)
path = File.expand_path path

File.open path, "wb", permissions do |io|
if passphrase && cipher
io.write pemmable.to_pem cipher, passphrase
io.write key.private_to_pem cipher, passphrase
else
io.write pemmable.to_pem
io.write key.private_to_pem
end
end

path
end

##
# Writes the +certificate+ to +path+ with the given +permissions+.

def self.write_certificate(certificate, path, permissions = 0o600)
path = File.expand_path path

File.open path, "wb", permissions do |io|
io.write certificate.to_pem
end

path
end

reset
end

Expand Down
4 changes: 2 additions & 2 deletions lib/rubygems/security/policy.rb
Original file line number Diff line number Diff line change
Expand Up @@ -165,9 +165,9 @@ def check_trust(chain, digester, trust_dir)
end

save_cert = OpenSSL::X509::Certificate.new File.read path
save_dgst = digester.digest save_cert.public_key.to_pem
save_dgst = digester.digest save_cert.public_key.public_to_pem

pkey_str = root.public_key.to_pem
pkey_str = root.public_key.public_to_pem
cert_dgst = digester.digest pkey_str

raise Gem::Security::Exception,
Expand Down
10 changes: 5 additions & 5 deletions lib/rubygems/security/signer.rb
Original file line number Diff line number Diff line change
Expand Up @@ -47,15 +47,15 @@ def self.re_sign_cert(expired_cert, expired_cert_path, private_key)
expired_cert_file = "#{File.basename(expired_cert_path)}.expired.#{expiry}"
new_expired_cert_path = File.join(Gem.user_home, ".gem", expired_cert_file)

Gem::Security.write(expired_cert, new_expired_cert_path)
Gem::Security.write_certificate(expired_cert, new_expired_cert_path)

re_signed_cert = Gem::Security.re_sign(
expired_cert,
private_key,
Gem::Security::ONE_DAY * Gem.configuration.cert_expiration_length_days
)

Gem::Security.write(re_signed_cert, expired_cert_path)
Gem::Security.write_certificate(re_signed_cert, expired_cert_path)

yield(expired_cert_path, new_expired_cert_path) if block_given?
end
Expand Down Expand Up @@ -190,17 +190,17 @@ def re_sign_key(expiration_length: Gem::Security::ONE_YEAR) # :nodoc:

return unless disk_key

if disk_key.to_pem == @key.to_pem && disk_cert == old_cert.to_pem
if disk_key.private_to_pem == @key.private_to_pem && disk_cert == old_cert.to_pem
expiry = old_cert.not_after.strftime("%Y%m%d%H%M%S")
old_cert_file = "gem-public_cert.pem.expired.#{expiry}"
old_cert_path = File.join(Gem.user_home, ".gem", old_cert_file)

unless File.exist?(old_cert_path)
Gem::Security.write(old_cert, old_cert_path)
Gem::Security.write_certificate(old_cert, old_cert_path)

cert = Gem::Security.re_sign(old_cert, @key, expiration_length)

Gem::Security.write(cert, disk_cert_path)
Gem::Security.write_certificate(cert, disk_cert_path)

alert("Your cert: #{disk_cert_path} has been auto re-signed with the key: #{disk_key_path}")
alert("Your expired cert will be located at: #{old_cert_path}")
Expand Down
26 changes: 13 additions & 13 deletions test/rubygems/alternate_cert.pem
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,17 @@ MIIDFjCCAf6gAwIBAgIBBDANBgkqhkiG9w0BAQsFADAtMRIwEAYDVQQDDAlhbHRl
cm5hdGUxFzAVBgoJkiaJk/IsZAEZFgdleGFtcGxlMCAXDTEyMDEwMTAwMDAwMFoY
Dzk5OTkxMjMxMjM1OTU5WjAtMRIwEAYDVQQDDAlhbHRlcm5hdGUxFzAVBgoJkiaJ
k/IsZAEZFgdleGFtcGxlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
pebGm7NOnx+DtWG1xQsJBfTfwNlZvfzY61nlZccrhU6vx0AnYNiDZAG3J/gFQmYZ
9gJ98rzEwfLMCGq9R/TZM+lAEaLhzYZCu3X4QdhKxr1xZ/SFC+1f8KVuH4tLXORW
30DwayPhNxnrOvup4pWLiYuXUSZpV9CGMvPSUCW2odhMkBMKqaTTPjxoXJIcgacy
prkNgIq48cSvqWG/e/HrMRtkqvFbD5ta00uO1mlpajYYw1RRftEwktFo8vQgDBo9
NT/EqoE72tffaDnLq6rQrVtw4Kr9fy775DjNAWXyiCBjnJgOQSXCGPsM/AEdFrh/
LKQQv2M/M7WNevnEUgsEIwIDAQABoz8wPTAcBgNVHREEFTATgRFhbHRlcm5hdGVA
ZXhhbXBsZTAdBgNVHQ4EFgQUYPwS8g98+4Tq/8gcEK1iilkGXH4wDQYJKoZIhvcN
AQELBQADggEBABSKUFmTk53+yrVFT3TvX5iGgXudNdACQqcnknAg66Q8+wMA8WT1
M2oZJIH4SWSKUGMYubpYuc53tTtMnR594LPidyNbxo8KXMYoNfEkZCk6hh0eKVdx
zPJSZ4fOQ4mKFCd7HrycOr4bxuGPTVQERYJ45vZnhvVJDIRMgshnQuivP3VBwXkQ
gKLTCh2ew2ZJgPi1dfqdNMMSw7k4OQtQVhwbAkHgwL1TUShAO9lHzxFHlQgssfR0
f6c89eB035Vn9s21StjerTOlC9+v4hOO7QhvbsCcUs2wWiE1BWo1QqnVBCjGKyVE
fISkJd1Sn5j+Vx/NJ7EfZcOGGQMdxHC+c90=
w1JNbNmBLCW7Cw6lZePL9d3gOi7ZoNSXEu4v3d1b0oMLuG1k1KPbB3GcXn/4T2wZ
ciuItuVlPFAvboxXIa+Ym9K2prhG94VTAUX26l9/ZO6dqZACfOMK6ZM8ObY7QX9G
E/DYHtRkl6DFFY1NlFBqrsWvCDFmmO94XeKC+ANQDMgg3Hx/UO/OVRoczcZncE0g
6kcyxKlN2Sb0eu7LPeX6QbQhUqbhj9Vf2wom3uvy0eSyESS7YFOQSotkgdFCUk7z
r17aHco1tnyh9S1sxNNaG9II1/uET2Xer/JierXrXbui1vIKelfrWUqGWvZQqJVl
iG/WAy/8Mqf/zUqFDNKjSQIDAQABoz8wPTAcBgNVHREEFTATgRFhbHRlcm5hdGVA
ZXhhbXBsZTAdBgNVHQ4EFgQUPHEhRMt/+2vNQzsJIr1VfuRD8yIwDQYJKoZIhvcN
AQELBQADggEBAEVErszzPGB6raXPlBRNhZJKzXZSRNBG0lR3th+we1W1loW1udaU
pT65RDyRB0CoQ1e3JneYp5/qfXpY2lXk4RryMF0j4Ze9aqg0gqO97deA9Lu7xlr6
Th1KXR1f8UXgKbgGS/hhw0AhF/4MM6HXu4dJORdRoQtM+GvSNPeDfLA3keKrXL1W
WUgv5zC3xjm7xfWTv/zLUJhNNemQDPVfQzZoNxygp1tZVL8za+4ZmN8dGfc/GJur
wM4mCj1Z/7NDYRoscAXsKgIsHUGa4dJPfdC8x8pbrOrnfbvtmRDcwFiyNGaTtu5p
NUZUbCC0MqWI1pcW2VytWBuxcRD3J3IPv3s=
-----END CERTIFICATE-----
28 changes: 14 additions & 14 deletions test/rubygems/alternate_cert_32.pem
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,18 @@
MIIDFDCCAfygAwIBAgIBBTANBgkqhkiG9w0BAQsFADAtMRIwEAYDVQQDDAlhbHRl
cm5hdGUxFzAVBgoJkiaJk/IsZAEZFgdleGFtcGxlMB4XDTEyMDEwMTAwMDAwMFoX
DTM4MDExOTAzMTQwN1owLTESMBAGA1UEAwwJYWx0ZXJuYXRlMRcwFQYKCZImiZPy
LGQBGRYHZXhhbXBsZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKXm
xpuzTp8fg7VhtcULCQX038DZWb382OtZ5WXHK4VOr8dAJ2DYg2QBtyf4BUJmGfYC
ffK8xMHyzAhqvUf02TPpQBGi4c2GQrt1+EHYSsa9cWf0hQvtX/Clbh+LS1zkVt9A
8Gsj4TcZ6zr7qeKVi4mLl1EmaVfQhjLz0lAltqHYTJATCqmk0z48aFySHIGnMqa5
DYCKuPHEr6lhv3vx6zEbZKrxWw+bWtNLjtZpaWo2GMNUUX7RMJLRaPL0IAwaPTU/
xKqBO9rX32g5y6uq0K1bcOCq/X8u++Q4zQFl8oggY5yYDkElwhj7DPwBHRa4fyyk
EL9jPzO1jXr5xFILBCMCAwEAAaM/MD0wHAYDVR0RBBUwE4ERYWx0ZXJuYXRlQGV4
YW1wbGUwHQYDVR0OBBYEFGD8EvIPfPuE6v/IHBCtYopZBlx+MA0GCSqGSIb3DQEB
CwUAA4IBAQBJeq9kniAdddOY2r9MhRYb8/rzWL1mcCgbIzkwXCTeOyVt0nWZZwAy
arEy8ofkXt1O3Bm+59+dPORnG5WJeBGVmGDHo9HxDjm4dgTramYqgtxbthmB/pu+
QhJ5DQg59odomoRRG7dkqacd8GMdcJVYcb3OzV3Fe5v2gtvnVPZ711APtjZ7sZUR
4XBA+ok95QFeSUYo4WIOCHh16pPtZ9ium5SZ7ChVVNj5rthr+sS+rQKjEdjG510w
UOkg8rUjEvXPGjM80/DnOvzyRJvbcCWBWWHquft3wqbjTomnQtqHne2SwRFEyfpd
JLEuY9QtEUCUy7obccN39+nT9jUOyg3B
LGQBGRYHZXhhbXBsZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMNS
TWzZgSwluwsOpWXjy/Xd4Dou2aDUlxLuL93dW9KDC7htZNSj2wdxnF5/+E9sGXIr
iLblZTxQL26MVyGvmJvStqa4RveFUwFF9upff2TunamQAnzjCumTPDm2O0F/RhPw
2B7UZJegxRWNTZRQaq7FrwgxZpjveF3igvgDUAzIINx8f1DvzlUaHM3GZ3BNIOpH
MsSpTdkm9Hruyz3l+kG0IVKm4Y/VX9sKJt7r8tHkshEku2BTkEqLZIHRQlJO869e
2h3KNbZ8ofUtbMTTWhvSCNf7hE9l3q/yYnq16127otbyCnpX61lKhlr2UKiVZYhv
1gMv/DKn/81KhQzSo0kCAwEAAaM/MD0wHAYDVR0RBBUwE4ERYWx0ZXJuYXRlQGV4
YW1wbGUwHQYDVR0OBBYEFDxxIUTLf/trzUM7CSK9VX7kQ/MiMA0GCSqGSIb3DQEB
CwUAA4IBAQCFFbDq4+btZ7YvLWgNGKtiCFOdaumAlbpI8WbhB4dBPA7j8D7kOdoa
Rb0fsFmw/Klu7CId4oLaaG2fMwzShm2Kgl7Kp4TUHX6STI9T+zRa4p7dfINW+xFC
TTZRerU++wnDRRTTQERmT9wzwWdXjgeN84T/Ktc5BmoQCuKMxxSCq+26+wSXncxn
tZ/6+5jIcpnO+BqdzoYeveI22Wr0cWGq2NG0QlGMGQr1dNfnfzD9FjOgPUQs2I/y
48+i1KTibgvxq5coQw/VfBwrE8aA2sEcHrz7yo2f9pud71v1UVB8jCCdYeJ2Y+PL
H8bfzw21G1/51AWX0xKRij+YshWkKreL
-----END CERTIFICATE-----
55 changes: 28 additions & 27 deletions test/rubygems/alternate_key.pem
Original file line number Diff line number Diff line change
@@ -1,27 +1,28 @@
-----BEGIN RSA PRIVATE KEY-----
MIIEpQIBAAKCAQEApebGm7NOnx+DtWG1xQsJBfTfwNlZvfzY61nlZccrhU6vx0An
YNiDZAG3J/gFQmYZ9gJ98rzEwfLMCGq9R/TZM+lAEaLhzYZCu3X4QdhKxr1xZ/SF
C+1f8KVuH4tLXORW30DwayPhNxnrOvup4pWLiYuXUSZpV9CGMvPSUCW2odhMkBMK
qaTTPjxoXJIcgacyprkNgIq48cSvqWG/e/HrMRtkqvFbD5ta00uO1mlpajYYw1RR
ftEwktFo8vQgDBo9NT/EqoE72tffaDnLq6rQrVtw4Kr9fy775DjNAWXyiCBjnJgO
QSXCGPsM/AEdFrh/LKQQv2M/M7WNevnEUgsEIwIDAQABAoIBABB/S16uTPIr2xgN
WFr4xvPtrtZphrAK1bNJpDMjxCMkePxSV9gcj6xBM2ppEnTQ3GIHS2j49oPm1f08
SAhAw9ySpElcriGW6Unk6EP78yuiKQXSXeyatUCj4riGTH83QaA/v+iXj8y/6hFa
d0FN56tM00ZBkJYn6UBl2JMZvPiI9cdRO1KhhK4+NZrKg8jdRwjJe9fxo31xefpr
jNqyx7O06hzaVfMt5jUi5qSc+/1EWJtXlvCyuJJCjpEay6ePUP5eTi/hQpwfaO82
nIRXolwg7TPxg8rea6WQM/x6Ec3MWYUflJUdZbKDQQv1pyZR62T7WHNA1p5jHMzq
MW3kctkCgYEAxhnT8+TZG9sF/fQro0JZnKxnZXjQ9ob7vmvbyBgHf2HzrY716UkX
vLAHrykgqzZmIlWATayCryr+CzkaXu/xLrS0IMmjF//VlFjlob6OL9n40qrOW221
ryqNNaKkMmm4c4N9D1rhsNH+vVQoeEDkHet9Pll9ilB2o3ERapMfBzcCgYEA1mO+
iJLf7y1chmpwMWLFrK4hjPK6670K4UvDCfX6517xHtykZ05lZQ9OQLjjDsyG8Uub
H6k7KxCTV+zxLQDcUUEh/UbTb6eMhh2HAU+Bym8+lWCIdl8qPouPKz1dc+rImRwC
JE7LtxbyHXv67sPL5/7GhmdCxThXQvjH7fP1CHUCgYEArbj4pmmJ+2OXXZ1Cp2kI
LN0Dz3ijx42YNuVfV5m6+Xpst0cnX+05Y776/iCTBZIu/uz8FyGxeOu63Ry2g4rn
do4BaL9qxyETq4RJ3A2/ozcDfbtMO+F58qLeMqruU0di+enVQiHwyZ9eRaoH020U
nyhkLMlNzn3BjJMbMtrR2wECgYEAm54tSI9sUv2XQs5x/7cVi6GeIuRyP/mpsx2+
RjWx2U52MZOxFne2a+PvRlWuIyjc7ruVrya1Fy5h9Zm8+pC8W5KurF1DzrFM9HDs
dUwUBzA2ulEm3N15GYtN8fIKKsEKuPC2sUos3wqd1j8PR08CbLTnv9mmgufBl5Bj
91p0y50CgYEAsD/KO1/BTJWVFAXoPgde4Fmt3vQyF7OYkOI0EEIGSVPydo8ebNib
cozGB1H0vhuvdrysi1Oc+uZ2pL8gpZfdYXbmD9cScXL+pP+GUmKKHTKKGAeQCWpv
2M3MZEjqOGQrqY50khXUDi77H1sAHMIBQ8yF6mdb+YU+OayRwBZmHiI=
-----END RSA PRIVATE KEY-----
-----BEGIN PRIVATE KEY-----
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDDUk1s2YEsJbsL
DqVl48v13eA6Ltmg1JcS7i/d3VvSgwu4bWTUo9sHcZxef/hPbBlyK4i25WU8UC9u
jFchr5ib0ramuEb3hVMBRfbqX39k7p2pkAJ84wrpkzw5tjtBf0YT8Nge1GSXoMUV
jU2UUGquxa8IMWaY73hd4oL4A1AMyCDcfH9Q785VGhzNxmdwTSDqRzLEqU3ZJvR6
7ss95fpBtCFSpuGP1V/bCibe6/LR5LIRJLtgU5BKi2SB0UJSTvOvXtodyjW2fKH1
LWzE01ob0gjX+4RPZd6v8mJ6tetdu6LW8gp6V+tZSoZa9lColWWIb9YDL/wyp//N
SoUM0qNJAgMBAAECggEAR/nvwzFhuvmKdDgo9iOcORXSt84k73H33Ad/ByS33hrh
ekyBsCRTpeoVY/OHdwkQVXS6dB+Tj0bDO9smjqjNNXrQSR62NCdi36C/LT4UzYZq
/h2t9QSbtFhIBMJlEq1KjzWdBrtg+ElL5zXDhWie75m0dvHxa2Evu3UpqyhZWuPN
g6+ORLDKSXy1cJS/vBOdfDbmtNo9RGXsGuEE9xhSAgnQeHm9AZbDl6q/8wlY8G/u
Xh0JKdCjgtHNG0VrNSoaQJHKgJiqahBti1ioq+yMxDoKuOX+j7TuV7AtINtFzkg8
IQr8s2j6uQS8iy26kCVmxNxlCDJK23A15hwAcQrOOwKBgQDxTrF5+5WvEh2WiYjV
p1BaOYv8TPrjrl1FSQJ1OxQLc6ue/XVTGPpvsg1TM7JHx6xGCJtkNoDi1QLdSBTs
YdGK5bkGVRBo9tJdU5YE5TraIljdmVg2PFDh/OIn81C0HiATB13aMHcFONfG0Loo
e9fF3VLgFPAP8VI3xaX9YPS8CwKBgQDPNtFVb7w83XUyp4qHYgNusdRiPl3bdedz
HX7Lk5mLQ+NZm+vRaWEn5ucBThFO4lVPQjaSPAqfN9uqlOsVMUp3NnVTSM+7QuBA
9JFOHo76mZSn4Imly1hh84Xh03wQFIXSWx5cDXX2d4uQBoes6sKbUHKrb9QOAlOp
veCCuHkeewKBgEN65SiekUpG/500Ut6kjlTc2OeyQ0reXNjeROCxp7ZYH3szl9ao
GoiXuyA0SbvG+8cN6x6IG1zTgpyM5sT/ydBU03wQ16jytPtCP6aYz+9mQYGeu0tX
bKr1w+y2HzBvaDrKCZXVjcMZFUZU4molz75WWTGuyT88Fejgzb1gmq/nAoGATwXH
xT5MWiXWiQ/Ny518U52rsh+4qXYIYyUvcrGCT9L/A/BreTwn2hC7rgq4nQ3BnO1S
ZGhTYK7rrd0G3dkjXd091xogZni1ju/17gXHXxhs0azWsYyf0xMMzrdZS8SX2EX5
iP91Kh4i8jUbTr1ko9iFMo3+H62RfF02HoP9ZLsCgYAwUV7JugM+vlRTHU1XhuY2
YvNOl8kwYihyLH5xLGoaj1Fye4fQdZkF1ULSdGfxJKDnK5P6jIyD0KnizNmev4X5
MZCm0p+/yxgtQyWpdZ+KBYado/MvO775bD6gEz8tTp1hd2GqVFJE1mbIxymN4Psv
mTt2nuHoeBWdnBcp7ufoeg==
-----END PRIVATE KEY-----
28 changes: 14 additions & 14 deletions test/rubygems/child_cert.pem
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,18 @@
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
-----END CERTIFICATE-----
28 changes: 14 additions & 14 deletions test/rubygems/child_cert_32.pem
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,18 @@
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
-----END CERTIFICATE-----
55 changes: 28 additions & 27 deletions test/rubygems/child_key.pem
Original file line number Diff line number Diff line change
@@ -1,27 +1,28 @@
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAh8sYiI0fWZt7c5zHPDqgL5uYdeAwFIp/tnqtR840GdX8ZE7T
+ItOYnqaRy08XyazPZh+R+rG9zUjbV/y+6dtvbTN6J/FD1GUae6g5hTU6YHUW39N
2SRQ6dzE6awPOcKvvoHOxjCOqkB4S7nN4LIbsuIhc1X61hNDERf2lZBIh/dYjVAm
d72U2oQxv402n8jGJwAxPtupo3yvMgqEwOqmJ2EKzD8t43K9IN2mpOfs+Rp+eaiC
ZJWgF1e7wMqDYGCKujI17PSdH5HnWVsCUxHwGq2Q6NrPcBEIuzHD87+B5jQdx+iX
ybAFYGg9FrUHAFa+zYK9uJSMeADGO5KBmsg/lQIDAQABAoIBAA9dClPKuakK9xLr
wjvdeymfvkZZ3L66M7xa0VeOLCVfKTzVEVTtt+ra6bETXGD8kStvIRx0YtntvGof
wK85sGgV+HTw/Jvg1DyO98vIQBWCL5tBgjaGzhPDe1Dfu2JC1VzltVYFgOKgxCt3
JGSfahRZUsUIjYZibARXVHnz9szRJFYg3lzBcVeCMWDGlPVydGaV3ttrhs4cFgPk
1TinEH80K9GfpZvkH5/4O1E2uVFetSLONRQiTs+WXpx9flEXP+mNwdrjECI6xvIP
x7pMfIo9kI9XniXXTvbGdEIeVrOL5OpW/nBCA3+EsL9S72TBVaMuiPTqUPlxA8up
v/oS2qkCgYEAu7Kj1t2M+NJtR50wQ2g3efY1qO3dQ41SCnoGEWJd/17riNV3u7Xw
FwPpnpcQAceoctK095JTtRTFGRN6FPl0VWuEsCS9lnwLzS7mQXiBg5EO7474v2Ki
JPgncJefmCbtjJwaB78l+ybk9iUkdRv80QCHqdeHA5CegbsnDGkcJSkCgYEAuTUx
Tfd3zpIEz0qhUf1D4PpgtoTj1zbXIUEFWl1SkLqklTF7k4LXZoWj7i3LraFk+jC2
769qkLzF0CTHRFr5d00v9tCDOT5Sv2lqJw5UAmouKSuLF7XBp5tAkICkFX7Lo61v
4iS2HtpK9wzri+L2XnDD3bxcHFHsEaxuD0V6iI0CgYEAp6Nsa4pizxT53z1IDtw0
uCwrTt5rgVrlzE+hvcMSWvPG/+ZQUwmzDotDC462EDDnhO4mDPvW4WNUign4PmVx
/pzR3JRj89SEodRieFUNr5lOMq2KAz0vvj8Y0pnJQ5Z5Ed2V7hdN79uUITeZMTM3
AOAtSochohB3UTz7Kj1ykskCgYBPXZAHTSi2CLSu79g5fkJ8Qk73Z/MK4qFFyss0
chFTm+ezV0URbVxIvrQE+PLzMNpIrF94Tr9nzr0l+Ny7WhDVIuqO5cOV4DMte0rV
+bneXwnw8ovkWSrnXAxK4BVwcKlrNoNfcUPp7Ll7LLozc8sHpWMJvhHqwOBcont3
Z9qecQKBgAiiWHPgMKChKDg/JVQGEqILF67c7ZuzBMtUHmGNVn8NNr++NXZ4YIRB
/TgYNXySTgEuD7tUE6B/iO9Mp1CpJbzRtdk8oqJlgJ4rza50N07k/SGIIWl7hAr8
No1ibENOfw7aeMKRz3udLT50TFoluykWc/m1nJEaqtSEJLkBRM5c
-----END RSA PRIVATE KEY-----
-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC68VMf9g/hrskz
ypXMML1PFYaEAIdSj7tExYFcAi2OFnnk7km/tZAcr9WPna/aWjD1v6mI35JPOshq
8b6dXq74izXodm/bfTPYAMXWgeL4c5J+Gw+GgIbNU71ayyd0LIiwpdQZNHhlX1xu
7+ki7BfxZceZTc7cehjqX21Kzq1TvpnR++N/7lyAqrcEI5bOk/EzyiT623jA5AJD
7kAoHREaNmw3h4Eb3tpSJl+3Fx0lJomCV/PFN/ooXNJpcIe815qNW4tE/E3AanJy
s0XGhDuzoriVvyAzF8alTp0iiDVITqURplZy1tb1dgWZzHbAmXB2SG+K+iXVFYeo
X/weinAtAgMBAAECggEAIkpSVk4/BwVV1DlwhUIac3duE2f6an9BWUHGMu+WVhYS
2VaJMhBWhSCOspd40ntROD6mFRx3XK+aZB2AOqMLwrzcUE3rQi5C1Hf90hVEohCm
+hkyHZiVQXP/C3iwvbtOfmKIl2/7tpKJpLK+h6CZWrbx6BGw5FnEGLeU11A2VGIU
08L+0X0+A1aEPYtd+m3EbD8XPCBzlCol+aBUv9oHjEDYPx0mzxMIjU1Cdj/uPXpp
htjwDQC9tZCT11Ya/Ch4/MroNTfWpwl+C7/0Amdj7eu3AnY2+fxWoK1KqvtH5dA+
R3pkDUnWK3ruxnFlSUxjF/xD66oG75mpsl4vwtPBcQKBgQD1JtOZIA2752BO1T6w
sOUAuMLogRrR74KeNS5GTEai4wCKMDM4VkDzrDVKXnYkXGz3dkZ9FM3m55rIU4mO
vgOmDkcHSv1VniphHQBRQ2yf/XtUBCwZ0RKtSXqUF4nupBkq5ftSRktdJQ4tDg5z
66BIqmM0P653KTK8IgmYUILs0QKBgQDDNxWESHC5X+HhjQuMyl1EvIXNRUKb7vBy
UIPRis/+/kYKfb7nBoo0hOfUhE2WyfTv8HhH86pAGFPTbqMMea2PsBw4Hm6KL+iH
wSrcJGy25OOt+IzCkA3pvG1K5i9T4UbDEOwkm9aPTMkux6HtivZC9Ng3d72fVfuL
e5thLgj0nQKBgQCrthZgGuODyfzbOuI+QKkmaEOdN1Dh2zFSP026T5LqZLXsFPbL
bx7vjp+FB8UYkuSAMIgO9JOEOJVh26FuKgnENhvqL8xiO/bTLs0aHm/nYFUR9Bov
uxGp7t28/P/P94DpW009w57mDx5u0HmvGEucmjwCTNiW/nRa8jxmQ35xAQKBgAjM
kNG3mi0g30OVYfHkpTOV88n+1zPEH15ntqlZQmrR90I9zL8JEm2vl+uCUyT60WmH
Q0Sq/P+KmSysjfjf+yzA2WTGKmFcK3UDBfWKRsQvqPuMenvCln30mlCH85YqT1A3
kQ1NYOxwn5jWMrxMSTFXa++EHC30aDQvTB+jPZAZAoGBAIIFBhAgm8yh6VM2JSZn
819+OGuT6lvW7PWhoVaOH0cfrWm07ljBF5vCRfAlwY6R4k2ie6Poj1eQTguctaX9
MwUTbMqK3ItsQ0/ZLN/fG+lLEbfJoqtHKHPaIoYLC9e5q3TbPyjy/9hI0i0uec5j
4H4xUnsJ7hwz+1YUR6RPHWOu
-----END PRIVATE KEY-----
Loading