summaryrefslogtreecommitdiff
path: root/test/rubygems/test_gem_security_policy.rb
diff options
context:
space:
mode:
Diffstat (limited to 'test/rubygems/test_gem_security_policy.rb')
-rw-r--r--test/rubygems/test_gem_security_policy.rb178
1 files changed, 92 insertions, 86 deletions
diff --git a/test/rubygems/test_gem_security_policy.rb b/test/rubygems/test_gem_security_policy.rb
index 515b8ea00b..2f4fb1ce28 100644
--- a/test/rubygems/test_gem_security_policy.rb
+++ b/test/rubygems/test_gem_security_policy.rb
@@ -1,39 +1,39 @@
# frozen_string_literal: true
-require_relative 'helper'
+require_relative "helper"
unless Gem::HAVE_OPENSSL
- warn 'Skipping Gem::Security::Policy tests. openssl not found.'
+ warn "Skipping Gem::Security::Policy tests. openssl not found."
end
class TestGemSecurityPolicy < Gem::TestCase
- ALTERNATE_KEY = load_key 'alternate'
- INVALID_KEY = load_key 'invalid'
- CHILD_KEY = load_key 'child'
- GRANDCHILD_KEY = load_key 'grandchild'
- INVALIDCHILD_KEY = load_key 'invalidchild'
-
- ALTERNATE_CERT = load_cert 'alternate'
- CA_CERT = load_cert 'ca'
- CHILD_CERT = load_cert 'child'
- EXPIRED_CERT = load_cert 'expired'
- FUTURE_CERT = load_cert 'future'
- GRANDCHILD_CERT = load_cert 'grandchild'
- INVALIDCHILD_CERT = load_cert 'invalidchild'
- INVALID_ISSUER_CERT = load_cert 'invalid_issuer'
- INVALID_SIGNER_CERT = load_cert 'invalid_signer'
- WRONG_KEY_CERT = load_cert 'wrong_key'
+ ALTERNATE_KEY = load_key "alternate"
+ INVALID_KEY = load_key "invalid"
+ CHILD_KEY = load_key "child"
+ GRANDCHILD_KEY = load_key "grandchild"
+ INVALIDCHILD_KEY = load_key "invalidchild"
+
+ ALTERNATE_CERT = load_cert "alternate"
+ CA_CERT = load_cert "ca"
+ CHILD_CERT = load_cert "child"
+ EXPIRED_CERT = load_cert "expired"
+ FUTURE_CERT = load_cert "future"
+ GRANDCHILD_CERT = load_cert "grandchild"
+ INVALIDCHILD_CERT = load_cert "invalidchild"
+ INVALID_ISSUER_CERT = load_cert "invalid_issuer"
+ INVALID_SIGNER_CERT = load_cert "invalid_signer"
+ WRONG_KEY_CERT = load_cert "wrong_key"
def setup
super
- @spec = quick_gem 'a' do |s|
- s.description = 'π'
+ @spec = quick_gem "a" do |s|
+ s.description = "π"
s.files = %w[lib/code.rb]
end
@digest = OpenSSL::Digest.new Gem::Security::DIGEST_NAME
- @trust_dir = Gem::Security.trust_dir.dir # HACK use the object
+ @trust_dir = Gem::Security.trust_dir.dir # HACK: use the object
@no = Gem::Security::NoSecurity
@almost_no = Gem::Security::AlmostNoSecurity
@@ -42,28 +42,28 @@ class TestGemSecurityPolicy < Gem::TestCase
@high = Gem::Security::HighSecurity
@chain = Gem::Security::Policy.new(
- 'Chain',
- :verify_data => true,
- :verify_signer => true,
- :verify_chain => true,
- :verify_root => false,
- :only_trusted => false,
- :only_signed => false
+ "Chain",
+ verify_data: true,
+ verify_signer: true,
+ verify_chain: true,
+ verify_root: false,
+ only_trusted: false,
+ only_signed: false
)
@root = Gem::Security::Policy.new(
- 'Root',
- :verify_data => true,
- :verify_signer => true,
- :verify_chain => true,
- :verify_root => true,
- :only_trusted => false,
- :only_signed => false
+ "Root",
+ verify_data: true,
+ verify_signer: true,
+ verify_chain: true,
+ verify_root: true,
+ only_trusted: false,
+ only_signed: false
)
end
def test_check_data
- data = digest 'hello'
+ data = digest "hello"
signature = sign data
@@ -71,17 +71,17 @@ class TestGemSecurityPolicy < Gem::TestCase
end
def test_check_data_invalid
- data = digest 'hello'
+ data = digest "hello"
signature = sign data
- invalid = digest 'hello!'
+ invalid = digest "hello!"
e = assert_raise Gem::Security::Exception do
@almost_no.check_data PUBLIC_KEY, @digest, signature, invalid
end
- assert_equal 'invalid signature', e.message
+ assert_equal "invalid signature", e.message
end
def test_check_chain
@@ -95,7 +95,7 @@ class TestGemSecurityPolicy < Gem::TestCase
@chain.check_chain [], Time.now
end
- assert_equal 'empty signing chain', e.message
+ assert_equal "empty signing chain", e.message
end
def test_check_chain_invalid
@@ -105,8 +105,8 @@ class TestGemSecurityPolicy < Gem::TestCase
@chain.check_chain chain, Time.now
end
- assert_equal "invalid signing chain: " +
- "certificate #{INVALIDCHILD_CERT.subject} " +
+ assert_equal "invalid signing chain: " \
+ "certificate #{INVALIDCHILD_CERT.subject} " \
"was not issued by #{CHILD_CERT.subject}", e.message
end
@@ -115,7 +115,7 @@ class TestGemSecurityPolicy < Gem::TestCase
@chain.check_chain nil, Time.now
end
- assert_equal 'missing signing chain', e.message
+ assert_equal "missing signing chain", e.message
end
def test_check_cert
@@ -127,7 +127,7 @@ class TestGemSecurityPolicy < Gem::TestCase
@low.check_cert EXPIRED_CERT, nil, Time.now
end
- assert_equal "certificate #{EXPIRED_CERT.subject} " +
+ assert_equal "certificate #{EXPIRED_CERT.subject} " \
"not valid after #{EXPIRED_CERT.not_after}",
e.message
end
@@ -137,7 +137,7 @@ class TestGemSecurityPolicy < Gem::TestCase
@low.check_cert FUTURE_CERT, nil, Time.now
end
- assert_equal "certificate #{FUTURE_CERT.subject} " +
+ assert_equal "certificate #{FUTURE_CERT.subject} " \
"not valid before #{FUTURE_CERT.not_before}",
e.message
end
@@ -147,7 +147,7 @@ class TestGemSecurityPolicy < Gem::TestCase
@low.check_cert INVALID_ISSUER_CERT, PUBLIC_CERT, Time.now
end
- assert_equal "certificate #{INVALID_ISSUER_CERT.subject} " +
+ assert_equal "certificate #{INVALID_ISSUER_CERT.subject} " \
"was not issued by #{PUBLIC_CERT.subject}",
e.message
end
@@ -161,7 +161,7 @@ class TestGemSecurityPolicy < Gem::TestCase
@high.check_cert(nil, nil, Time.now)
end
- assert_equal 'missing signing certificate', e.message
+ assert_equal "missing signing certificate", e.message
end
def test_check_key
@@ -175,7 +175,7 @@ class TestGemSecurityPolicy < Gem::TestCase
@high.check_key(nil, nil)
end
- assert_equal 'missing key or signature', e.message
+ assert_equal "missing key or signature", e.message
end
def test_check_key_wrong_key
@@ -183,7 +183,7 @@ class TestGemSecurityPolicy < Gem::TestCase
@almost_no.check_key(PUBLIC_CERT, ALTERNATE_KEY)
end
- assert_equal "certificate #{PUBLIC_CERT.subject} " +
+ assert_equal "certificate #{PUBLIC_CERT.subject} " \
"does not match the signing key", e.message
end
@@ -198,7 +198,7 @@ class TestGemSecurityPolicy < Gem::TestCase
@chain.check_root [], Time.now
end
- assert_equal 'missing root certificate', e.message
+ assert_equal "missing root certificate", e.message
end
def test_check_root_invalid_signer
@@ -208,7 +208,7 @@ class TestGemSecurityPolicy < Gem::TestCase
@chain.check_root chain, Time.now
end
- assert_equal "certificate #{INVALID_SIGNER_CERT.subject} " +
+ assert_equal "certificate #{INVALID_SIGNER_CERT.subject} " \
"was not issued by #{INVALID_SIGNER_CERT.issuer}",
e.message
end
@@ -220,7 +220,7 @@ class TestGemSecurityPolicy < Gem::TestCase
@chain.check_root chain, Time.now
end
- assert_equal "root certificate #{INVALID_ISSUER_CERT.subject} " +
+ assert_equal "root certificate #{INVALID_ISSUER_CERT.subject} " \
"is not self-signed (issuer #{INVALID_ISSUER_CERT.issuer})",
e.message
end
@@ -230,7 +230,7 @@ class TestGemSecurityPolicy < Gem::TestCase
@chain.check_root nil, Time.now
end
- assert_equal 'missing signing chain', e.message
+ assert_equal "missing signing chain", e.message
end
def test_check_trust
@@ -250,7 +250,7 @@ class TestGemSecurityPolicy < Gem::TestCase
@chain.check_trust [], @digest, @trust_dir
end
- assert_equal 'missing root certificate', e.message
+ assert_equal "missing root certificate", e.message
end
def test_check_trust_mismatch
@@ -260,7 +260,7 @@ class TestGemSecurityPolicy < Gem::TestCase
@high.check_trust [WRONG_KEY_CERT], @digest, @trust_dir
end
- assert_equal "trusted root certificate #{PUBLIC_CERT.subject} checksum " +
+ assert_equal "trusted root certificate #{PUBLIC_CERT.subject} checksum " \
"does not match signing root certificate checksum", e.message
end
@@ -269,7 +269,7 @@ class TestGemSecurityPolicy < Gem::TestCase
@chain.check_trust nil, @digest, @trust_dir
end
- assert_equal 'missing signing chain', e.message
+ assert_equal "missing signing chain", e.message
end
def test_check_trust_no_trust
@@ -285,13 +285,13 @@ class TestGemSecurityPolicy < Gem::TestCase
@high.check_trust [PUBLIC_CERT, CHILD_CERT], @digest, @trust_dir
end
- assert_equal "root cert #{PUBLIC_CERT.subject} is not trusted " +
+ assert_equal "root cert #{PUBLIC_CERT.subject} is not trusted " \
"(root of signing cert #{CHILD_CERT.subject})", e.message
end
def test_subject
- assert_equal 'email:nobody@example', @no.subject(PUBLIC_CERT)
- assert_equal '/C=JP/ST=Tokyo/O=RubyGemsTest/CN=CA', @no.subject(CA_CERT)
+ assert_equal "email:nobody@example", @no.subject(PUBLIC_CERT)
+ assert_equal "/C=JP/ST=Tokyo/O=RubyGemsTest/CN=CA", @no.subject(CA_CERT)
end
def test_verify
@@ -319,7 +319,7 @@ class TestGemSecurityPolicy < Gem::TestCase
@almost_no.verify [PUBLIC_CERT], nil, {}, signatures
end
- assert_equal 'no digests provided (probable bug)', e.message
+ assert_equal "no digests provided (probable bug)", e.message
end
def test_verify_no_digests_no_security
@@ -331,7 +331,7 @@ class TestGemSecurityPolicy < Gem::TestCase
@no.verify [PUBLIC_CERT], nil, {}, signatures
end
- assert_equal 'missing digest for 0', e.message
+ assert_equal "missing digest for 0", e.message
end
def test_verify_no_signatures
@@ -340,7 +340,7 @@ class TestGemSecurityPolicy < Gem::TestCase
digests, = dummy_signatures
use_ui @ui do
- @no.verify [PUBLIC_CERT], nil, digests, {}, 'some_gem'
+ @no.verify [PUBLIC_CERT], nil, digests, {}, "some_gem"
end
assert_match "WARNING: some_gem is not signed\n", @ui.error
@@ -354,7 +354,7 @@ class TestGemSecurityPolicy < Gem::TestCase
Gem::Security.trust_dir.trust_cert PUBLIC_CERT
use_ui @ui do
- @no.verify [PUBLIC_CERT], nil, {}, {}, 'some_gem'
+ @no.verify [PUBLIC_CERT], nil, {}, {}, "some_gem"
end
assert_empty @ui.output
@@ -366,7 +366,7 @@ class TestGemSecurityPolicy < Gem::TestCase
digests, signatures = dummy_signatures
- data = digest 'goodbye'
+ data = digest "goodbye"
signatures[1] = PRIVATE_KEY.sign @digest.new, data.digest
@@ -374,14 +374,14 @@ class TestGemSecurityPolicy < Gem::TestCase
@almost_no.verify [PUBLIC_CERT], nil, digests, signatures
end
- assert_equal 'missing digest for 1', e.message
+ assert_equal "missing digest for 1", e.message
end
def test_verify_no_trust
digests, signatures = dummy_signatures
use_ui @ui do
- @low.verify [PUBLIC_CERT], nil, digests, signatures, 'some_gem'
+ @low.verify [PUBLIC_CERT], nil, digests, signatures, "some_gem"
end
assert_equal "WARNING: email:nobody@example is not trusted for some_gem\n",
@@ -395,18 +395,18 @@ class TestGemSecurityPolicy < Gem::TestCase
def test_verify_wrong_digest_type
Gem::Security.trust_dir.trust_cert PUBLIC_CERT
- data = OpenSSL::Digest.new('SHA512')
- data << 'hello'
+ data = OpenSSL::Digest.new("SHA512")
+ data << "hello"
- digests = { 'SHA512' => { 0 => data } }
- signature = PRIVATE_KEY.sign 'sha512', data.digest
+ digests = { "SHA512" => { 0 => data } }
+ signature = PRIVATE_KEY.sign "sha512", data.digest
signatures = { 0 => signature }
e = assert_raise Gem::Security::Exception do
@almost_no.verify [PUBLIC_CERT], nil, digests, signatures
end
- assert_equal 'no digests provided (probable bug)', e.message
+ assert_equal "no digests provided (probable bug)", e.message
end
def test_verify_signatures_chain
@@ -448,17 +448,19 @@ class TestGemSecurityPolicy < Gem::TestCase
metadata_gz = Gem::Util.gzip @spec.to_yaml
- package = Gem::Package.new 'nonexistent.gem'
+ package = Gem::Package.new "nonexistent.gem"
package.checksums[Gem::Security::DIGEST_NAME] = {}
s = StringIO.new metadata_gz
- def s.full_name() 'metadata.gz' end
+ def s.full_name
+ "metadata.gz"
+ end
digests = package.digest s
- metadata_gz_digest = digests[Gem::Security::DIGEST_NAME]['metadata.gz']
+ metadata_gz_digest = digests[Gem::Security::DIGEST_NAME]["metadata.gz"]
signatures = {}
- signatures['metadata.gz'] =
+ signatures["metadata.gz"] =
PRIVATE_KEY.sign @digest.new, metadata_gz_digest.digest
assert @high.verify_signatures @spec, digests, signatures
@@ -471,26 +473,28 @@ class TestGemSecurityPolicy < Gem::TestCase
metadata_gz = Gem::Util.gzip @spec.to_yaml
- package = Gem::Package.new 'nonexistent.gem'
+ package = Gem::Package.new "nonexistent.gem"
package.checksums[Gem::Security::DIGEST_NAME] = {}
s = StringIO.new metadata_gz
- def s.full_name() 'metadata.gz' end
+ def s.full_name
+ "metadata.gz"
+ end
digests = package.digest s
- digests[Gem::Security::DIGEST_NAME]['data.tar.gz'] = @digest.hexdigest 'hello'
+ digests[Gem::Security::DIGEST_NAME]["data.tar.gz"] = @digest.hexdigest "hello"
- metadata_gz_digest = digests[Gem::Security::DIGEST_NAME]['metadata.gz']
+ metadata_gz_digest = digests[Gem::Security::DIGEST_NAME]["metadata.gz"]
signatures = {}
- signatures['metadata.gz'] =
+ signatures["metadata.gz"] =
PRIVATE_KEY.sign @digest.new, metadata_gz_digest.digest
e = assert_raise Gem::Security::Exception do
@high.verify_signatures @spec, digests, signatures
end
- assert_equal 'missing signature for data.tar.gz', e.message
+ assert_equal "missing signature for data.tar.gz", e.message
end
def test_verify_signatures_none
@@ -500,14 +504,16 @@ class TestGemSecurityPolicy < Gem::TestCase
metadata_gz = Gem::Util.gzip @spec.to_yaml
- package = Gem::Package.new 'nonexistent.gem'
+ package = Gem::Package.new "nonexistent.gem"
package.checksums[Gem::Security::DIGEST_NAME] = {}
s = StringIO.new metadata_gz
- def s.full_name() 'metadata.gz' end
+ def s.full_name
+ "metadata.gz"
+ end
digests = package.digest s
- digests[Gem::Security::DIGEST_NAME]['data.tar.gz'] = @digest.hexdigest 'hello'
+ digests[Gem::Security::DIGEST_NAME]["data.tar.gz"] = @digest.hexdigest "hello"
assert_raise Gem::Security::Exception do
@high.verify_signatures @spec, digests, {}
@@ -525,11 +531,11 @@ class TestGemSecurityPolicy < Gem::TestCase
end
def dummy_signatures(key = PRIVATE_KEY)
- data = digest 'hello'
+ data = digest "hello"
digests = { Gem::Security::DIGEST_NAME => { 0 => data } }
signatures = { 0 => sign(data, key) }
- return digests, signatures
+ [digests, signatures]
end
end if Gem::HAVE_OPENSSL