aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKazuki Yamaguchi <k@rhe.jp>2016-07-07 13:04:11 +0900
committerKazuki Yamaguchi <k@rhe.jp>2016-08-18 01:59:09 +0900
commit20a88ace0778282d5ee564842023c78e4a2e9399 (patch)
tree1e0e8c88f99e30485ce82ebccdce41b5a36d0151
parent675e2906764a141040144b8586a5f3d32e228f6f (diff)
downloadruby-openssl-20a88ace0778282d5ee564842023c78e4a2e9399.tar.gz
test: refactor PKey::PKey#{sign,verify} tests
RSA, DSA and EC should work in the same way, so extract to a new file, test/test_pkey.rb.
-rw-r--r--test/test_pkey.rb49
-rw-r--r--test/test_pkey_dsa.rb33
-rw-r--r--test/test_pkey_rsa.rb8
3 files changed, 49 insertions, 41 deletions
diff --git a/test/test_pkey.rb b/test/test_pkey.rb
new file mode 100644
index 00000000..7e960926
--- /dev/null
+++ b/test/test_pkey.rb
@@ -0,0 +1,49 @@
+# frozen_string_literal: false
+require_relative "utils"
+
+if defined?(OpenSSL::TestUtils)
+
+class OpenSSL::TestPKey < OpenSSL::PKeyTestCase
+ PKEYS = {
+ OpenSSL::PKey::RSA => {
+ key: OpenSSL::TestUtils::TEST_KEY_RSA1024,
+ digest: OpenSSL::Digest::SHA1,
+ },
+ OpenSSL::PKey::DSA => {
+ key: OpenSSL::TestUtils::TEST_KEY_DSA512,
+ digest: OpenSSL::Digest::SHA1,
+ },
+ }
+ if defined?(OpenSSL::PKey::EC)
+ PKEYS[OpenSSL::PKey::EC] = {
+ key: OpenSSL::TestUtils::TEST_KEY_EC_P256V1,
+ digest: OpenSSL::TestUtils::DSA_SIGNATURE_DIGEST,
+ }
+ end
+
+ def test_sign_verify
+ data = "Sign me!"
+ invalid_data = "Sign me?"
+ PKEYS.each do |klass, prop|
+ key = prop[:key]
+ pub_key = dup_public(prop[:key])
+ digest = prop[:digest].new
+ signature = key.sign(digest, data)
+ assert_equal(true, pub_key.verify(digest, signature, data))
+ assert_equal(false, pub_key.verify(digest, signature, invalid_data))
+ # digest state is irrelevant
+ digest << "unya"
+ assert_equal(true, pub_key.verify(digest, signature, data))
+ assert_equal(false, pub_key.verify(digest, signature, invalid_data))
+
+ if OpenSSL::OPENSSL_VERSION_NUMBER > 0x10000000
+ digest = OpenSSL::Digest::SHA256.new
+ signature = key.sign(digest, data)
+ assert_equal(true, pub_key.verify(digest, signature, data))
+ assert_equal(false, pub_key.verify(digest, signature, invalid_data))
+ end
+ end
+ end
+end
+
+end
diff --git a/test/test_pkey_dsa.rb b/test/test_pkey_dsa.rb
index a65fc222..d0ba8ec0 100644
--- a/test/test_pkey_dsa.rb
+++ b/test/test_pkey_dsa.rb
@@ -44,32 +44,6 @@ class OpenSSL::TestPKeyDSA < OpenSSL::PKeyTestCase
assert(key.sysverify(digest, sig))
end
- def test_sign_verify
- check_sign_verify(OpenSSL::Digest::DSS1.new)
- end if defined?(OpenSSL::Digest::DSS1)
-
-if (OpenSSL::OPENSSL_VERSION_NUMBER > 0x10000000)
- def test_sign_verify_sha1
- check_sign_verify(OpenSSL::Digest::SHA1.new)
- end
-
- def test_sign_verify_sha256
- check_sign_verify(OpenSSL::Digest::SHA256.new)
- end
-end
-
- def test_digest_state_irrelevant_verify
- key = OpenSSL::TestUtils::TEST_KEY_DSA256
- digest1 = OpenSSL::TestUtils::DSA_SIGNATURE_DIGEST.new
- digest2 = OpenSSL::TestUtils::DSA_SIGNATURE_DIGEST.new
- data = 'Sign me!'
- sig = key.sign(digest1, data)
- digest1.reset
- digest1 << 'Change state of digest1'
- assert(key.verify(digest1, sig, data))
- assert(key.verify(digest2, sig, data))
- end
-
def test_DSAPrivateKey
# OpenSSL DSAPrivateKey format; similar to RSAPrivateKey
asn1 = OpenSSL::ASN1::Sequence([
@@ -198,13 +172,6 @@ fWLOqqkzFeRrYMDzUpl36XktY6Yq8EJYlW9pCMmBVNy/dQ==
end
private
- def check_sign_verify(digest)
- key = OpenSSL::TestUtils::TEST_KEY_DSA256
- data = 'Sign me!'
- sig = key.sign(digest, data)
- assert(key.verify(digest, sig, data))
- end
-
def assert_same_dsa(expected, key)
check_component(expected, key, [:p, :q, :g, :pub_key, :priv_key])
end
diff --git a/test/test_pkey_rsa.rb b/test/test_pkey_rsa.rb
index 4215b77a..e211faa6 100644
--- a/test/test_pkey_rsa.rb
+++ b/test/test_pkey_rsa.rb
@@ -70,14 +70,6 @@ class OpenSSL::TestPKeyRSA < OpenSSL::PKeyTestCase
end
end
- def test_sign_verify
- key = RSA1024
- digest = OpenSSL::Digest::SHA1.new
- data = 'Sign me!'
- sig = key.sign(digest, data)
- assert(key.verify(digest, sig, data))
- end
-
def test_digest_state_irrelevant_sign
key = RSA1024
digest1 = OpenSSL::Digest::SHA1.new