From 732d703985a406f9dfd949e4ffaf07ec069d3da5 Mon Sep 17 00:00:00 2001 From: Jeff Date: Thu, 12 Nov 2015 20:21:10 -0700 Subject: [PATCH 1/2] Remove 'RSA' from RSA public key headers --- .../java/org/jruby/ext/openssl/x509store/PEMInputOutput.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/jruby/ext/openssl/x509store/PEMInputOutput.java b/src/main/java/org/jruby/ext/openssl/x509store/PEMInputOutput.java index 55bdb2db..61c08c5a 100644 --- a/src/main/java/org/jruby/ext/openssl/x509store/PEMInputOutput.java +++ b/src/main/java/org/jruby/ext/openssl/x509store/PEMInputOutput.java @@ -783,10 +783,10 @@ public static void writeDSAPublicKey(Writer _out, DSAPublicKey obj) throws IOExc public static void writeRSAPublicKey(Writer _out, RSAPublicKey obj) throws IOException { BufferedWriter out = makeBuffered(_out); byte[] encoding = getEncoded(obj); - out.write(BEF_G + PEM_STRING_RSA_PUBLIC + AFT); + out.write(BEF_G + PEM_STRING_PUBLIC + AFT); out.newLine(); writeEncoded(out, encoding); - out.write(BEF_E + PEM_STRING_RSA_PUBLIC + AFT); + out.write(BEF_E + PEM_STRING_PUBLIC + AFT); out.newLine(); out.flush(); } From 2428e19fc134949903772624160e45ed9d5e3046 Mon Sep 17 00:00:00 2001 From: Jeff Date: Fri, 13 Nov 2015 10:31:33 -0700 Subject: [PATCH 2/2] Added tests for RSA public/private encrypt/decrypt Fixed RSA Public Key header/footer --- .../ext/openssl/x509store/PEMInputOutput.java | 4 +- src/test/ruby/rsa/private_key.pem | 27 ++++++++++ src/test/ruby/rsa/public_key.pub | 9 ++++ src/test/ruby/rsa/test_rsa.rb | 50 +++++++++++++++++++ 4 files changed, 88 insertions(+), 2 deletions(-) create mode 100644 src/test/ruby/rsa/private_key.pem create mode 100644 src/test/ruby/rsa/public_key.pub create mode 100644 src/test/ruby/rsa/test_rsa.rb diff --git a/src/main/java/org/jruby/ext/openssl/x509store/PEMInputOutput.java b/src/main/java/org/jruby/ext/openssl/x509store/PEMInputOutput.java index 61c08c5a..ae1fcc40 100644 --- a/src/main/java/org/jruby/ext/openssl/x509store/PEMInputOutput.java +++ b/src/main/java/org/jruby/ext/openssl/x509store/PEMInputOutput.java @@ -772,10 +772,10 @@ private static byte[] getEncoded(X509CRL crl) throws IOException { public static void writeDSAPublicKey(Writer _out, DSAPublicKey obj) throws IOException { BufferedWriter out = makeBuffered(_out); byte[] encoding = getEncoded(obj); - out.write(BEF_G + PEM_STRING_DSA_PUBLIC + AFT); + out.write(BEF_G + PEM_STRING_PUBLIC + AFT); out.newLine(); writeEncoded(out, encoding); - out.write(BEF_E + PEM_STRING_DSA_PUBLIC + AFT); + out.write(BEF_E + PEM_STRING_PUBLIC + AFT); out.newLine(); out.flush(); } diff --git a/src/test/ruby/rsa/private_key.pem b/src/test/ruby/rsa/private_key.pem new file mode 100644 index 00000000..fbfc04bd --- /dev/null +++ b/src/test/ruby/rsa/private_key.pem @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEowIBAAKCAQEAw1UQk6wlVdcvbkQPUje7w871Zd+jVu5ePxKnv6nfVs4CFTrt +6393hMkaQFdbccIsJaOj2+1mhY3jKFHXtpS185bCCY8xMDayBs2eXZ+ULkKAu2vB +nO7DFOm1NrJ2NP03wW4IDV1isk9NMNgvzTHbvkiilQQF7rcXjEF4+xO51epMGctC +PapKipA8pIJ8pzfk2c2uiaAK36iFWJenlcwEX9ti6zk/NoVmzmLIDnqFlqw23aOr +GSOCbV5oJmz/9jrfc75C0PG2C6MhYPleBw/T5Jzf0df7kpJYwLhM5Zfa1MnVeq/W +1oh4E28EXCzMHQH4/S1gNRuX96ouplJpMCtnWwIDAQABAoIBAQCLKjvZOjiPY/Ri +9xKDXTnlU7n6js7szH9RKJVjND/utG8/ePCxa+tXK4AMfzCjZ9fUKTZBJm54kJJa +05SAfIr1tV8hOGevFgjYV/6QbXVBUBgvb6JNkL5kU+3LvnIBZrcmlKIgA3yh1WYF +esDzzKXmeBF9YZRocwHP54WuPGuWP0wnk36Mju64poDiq1Ju55pKeloUGfAXEozp +4HL+ZVxX/LsXhkR9kqrkOdifEJbHA+GIj4L4E5J3Fk4gShnpF1Z7Ibe3jIOgCsuO +Zi6QPIw7ZE/l+P5zy+fIuqArgVPtD9Tm8XOv+RhlGuQ+2ODeQf2l6dGbq48ts7lP ++8rt9AqBAoGBAO2Sh/DeFvnntUt1RPEYUJ9tgcPTKIWcLCDzOQXbBR8Z4gP9iovJ +Ro7Y7XCKCFTWmpl7z/M0n4v6NOTwN84QCXPHGwYu821cQo5n+xeCO5HqHEQYw0w9 +P1A7tQCxCogXnme7J2U9bIBe2ZNadiF1EcB9pnhrDRUIYbJt0PJo7YkrAoGBANJ7 +xeewE2rpZoCVqCU89UzpeZL0HVyCp41njia/RVWeQyExAMQ0bVAPDDjf9RByucc+ +83oX7fwjJ2DrYM2ze1oo8PHMJLCGazwY+yJRzPldj76aQ07J9k+/chaBsmlbzCv7 +5V9o1b4f5VQXmC8lR66NkNIioSBN5jfR10OJuyKRAoGAeqfon6dKXYQPygGlsoRH +O8ih8qSWi0TyU6C/lBJcNo56bmz8luc4EpBVJoFdg8+4yf1ug7ZrmS15GaocZbtJ +5giqHysmaxPzGOr+bEjE0LT6Gv5d9oK4qYfqD41YTqNDGXM7B74Kwsw1sSpHS0bR +/3vf8tPyUSWeqyyfcEhUOzkCgYBmllkA8XqlUxjYdxi6/Zj5YZoVm9Frs2qCqwRH +slXSww4o8T9UYdEdghgM6GsDF0eg6ve0fFFL4L5iqJZH68ClUusMjtkbCIjfg7Vz +JrdmmslitsEzd5ALkl3Cxnf0jf9XOLC07d2vitA1SkKsR9lGJE1/fc1Wd2FLt4TZ +sBl7YQKBgAS04BXwUw9On3b5acH0sL5Kp2laB2R3lffw1YjoI/G2Mg7BPJ8Rwa0m +OzTezEASOqlXxwGFci/VHtls5HDYCW1OpgfNgJOpRsjATNTcAS96RxZ2MqBbfQK8 +8/Wo3VhBgs8F6w1322OUl5WsbzOQvrF5ZCiFtTThHIzqjfdyp3EO +-----END RSA PRIVATE KEY----- diff --git a/src/test/ruby/rsa/public_key.pub b/src/test/ruby/rsa/public_key.pub new file mode 100644 index 00000000..ce3c0b8b --- /dev/null +++ b/src/test/ruby/rsa/public_key.pub @@ -0,0 +1,9 @@ +-----BEGIN PUBLIC KEY----- +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw1UQk6wlVdcvbkQPUje7 +w871Zd+jVu5ePxKnv6nfVs4CFTrt6393hMkaQFdbccIsJaOj2+1mhY3jKFHXtpS1 +85bCCY8xMDayBs2eXZ+ULkKAu2vBnO7DFOm1NrJ2NP03wW4IDV1isk9NMNgvzTHb +vkiilQQF7rcXjEF4+xO51epMGctCPapKipA8pIJ8pzfk2c2uiaAK36iFWJenlcwE +X9ti6zk/NoVmzmLIDnqFlqw23aOrGSOCbV5oJmz/9jrfc75C0PG2C6MhYPleBw/T +5Jzf0df7kpJYwLhM5Zfa1MnVeq/W1oh4E28EXCzMHQH4/S1gNRuX96ouplJpMCtn +WwIDAQAB +-----END PUBLIC KEY----- diff --git a/src/test/ruby/rsa/test_rsa.rb b/src/test/ruby/rsa/test_rsa.rb new file mode 100644 index 00000000..dffd4dad --- /dev/null +++ b/src/test/ruby/rsa/test_rsa.rb @@ -0,0 +1,50 @@ +# coding: US-ASCII +require File.expand_path('../test_helper', File.dirname(__FILE__)) + +class TestRsa < TestCase + + def setup + super + self.class.disable_security_restrictions! + require 'base64' + end + + def test_rsa_private_decrypt + key_file = File.join(File.dirname(__FILE__), 'private_key.pem') + base64_cipher = "oj1VB1Lnh6j5Ahoq4dllIXkStZHaT9RvizB0x+yIUDtzi6grSh9vXoCchb+U\nkyLOcMmIXopv1Oe7h2te+XS63AG0EAfUhKTFVDYkm7VmcXue25MPr+P+0w+7\nWjZci4VRBLq3T2qZa3IJhQPsNAtEE1DYXnEjNe0jcFa2bu8TPNscoogo5aAw\nQGT+3cKe7A053czG47Sip7aIo+4NlJHE9kFMOTLaWi3fvv/M9/VKo3Bmm/88\n8Ai09LncNTpq787CRHw/wfjuPlQJOiLt+i7AZHBl6x0jK9bqkhPK5YwP0vmc\nuL52QLzgPxj9E78crg47iJDOgNwU/ux1/VuKnlQ9PQ==\n" + + key = OpenSSL::PKey::RSA.new(File.read(key_file)) + decrypted = key.private_decrypt(Base64.decode64(base64_cipher)) + + assert_equal('Test string for RSA', decrypted) + end + + def test_rsa_public_decrypt + pub_key_file = File.join(File.dirname(__FILE__), 'public_key.pub') + base64_cipher = "ZBiJ0yHAcEJWDPI38R4M7ccpDK+Ek6Apl/CyPJOSwiY/GvlJ3J3VjRYwRVvE\nox173agDckKY9/gaT4otgfk0OuQRaIaPF51uFWbSPZhOBWD+gLrDAlAfhMg6\nascRrUYydEYzOHjXZ8SMhWg8bmsajABd36SoTcpa7FVm4WXGm/OG65htPYQ+\n1XjChiw3NvVJqFWf5Khpl12+/4s9k5GPjziFCAPgmfxGYDp0KnsqqHIg6s7P\nvR6zFcS9uReNcns4POecI/oeZHqvS/0TZ/q5eZJzFGMSflPJMxrCCnImGbiC\nNRchZyK2kTuTAWzz8d5Ml72/75mCJyimrAtv66XaEQ==\n" + + pub_key = OpenSSL::PKey::RSA.new(File.read(pub_key_file)) + decrypted = pub_key.public_decrypt(Base64.decode64(base64_cipher)) + + assert_equal('Test public decrypt string', decrypted) + end + + def test_rsa_private_encrypt + key_file = File.join(File.dirname(__FILE__), 'private_key.pem') + key = OpenSSL::PKey::RSA.new(File.read(key_file)) + + # Assert nothing raised { + key.private_encrypt("Test string") + # } + end + + def test_rsa_public_encrypt + pub_key_file = File.join(File.dirname(__FILE__), 'public_key.pub') + pub_key = OpenSSL::PKey::RSA.new(File.read(pub_key_file)) + + # Assert nothing raised { + pub_key.public_encrypt("Test string") + # } + end + +end