From 18293bb88d75e621fc2e33e1599aeedce280308f Mon Sep 17 00:00:00 2001 From: Brice Figureau Date: Sat, 23 May 2009 14:47:58 +0200 Subject: [PATCH 2/7] Add OpenSSL::X509::Request creation from PEM content Signed-off-by: Brice Figureau --- src/java/org/jruby/ext/openssl/Request.java | 19 ++++++++++++++++++- test/openssl/test_x509req.rb | 20 ++++++++++++++++++++ 2 files changed, 38 insertions(+), 1 deletions(-) diff --git a/src/java/org/jruby/ext/openssl/Request.java b/src/java/org/jruby/ext/openssl/Request.java index 44ff0b9..b39cf66 100644 --- a/src/java/org/jruby/ext/openssl/Request.java +++ b/src/java/org/jruby/ext/openssl/Request.java @@ -31,6 +31,8 @@ import java.util.ArrayList; import java.util.Enumeration; import java.util.Iterator; import java.util.List; +import java.io.IOException; +import java.io.StringReader; import java.security.GeneralSecurityException; import org.bouncycastle.asn1.ASN1EncodableVector; @@ -49,6 +51,7 @@ import org.jruby.RubyObject; import org.jruby.RubyString; import org.jruby.anno.JRubyMethod; import org.jruby.exceptions.RaiseException; +import org.jruby.ext.openssl.x509store.PEMInputOutput; import org.jruby.runtime.Block; import org.jruby.runtime.ObjectAllocator; import org.jruby.runtime.ThreadContext; @@ -91,7 +94,21 @@ public class Request extends RubyObject { if(org.jruby.runtime.Arity.checkArgumentCount(getRuntime(),args,0,1) == 0) { return this; } - req = new PKCS10CertificationRequestExt(args[0].convertToString().getBytes()); + + byte[] req_bytes = args[0].convertToString().getBytes(); + // Parse PEM if we ever get passed some PEM contents + try { + StringReader in = new StringReader(args[0].toString()); + byte[] bytes = PEMInputOutput.readPEMToDER(in); + if (bytes != null) + req_bytes = bytes; + in.close(); + } + catch(Exception e) { + // this is not PEM encoded, let's use the default argument + } + + req = new PKCS10CertificationRequestExt(req_bytes); version = getRuntime().newFixnum(req.getVersion()); final String[] result1 = new String[1]; diff --git a/test/openssl/test_x509req.rb b/test/openssl/test_x509req.rb index a37ed5c..711eb9a 100644 --- a/test/openssl/test_x509req.rb +++ b/test/openssl/test_x509req.rb @@ -135,6 +135,26 @@ class OpenSSL::TestX509Request < Test::Unit::TestCase assert_raise(OpenSSL::X509::RequestError){ issue_csr(0, @dn, @dsa512, OpenSSL::Digest::MD5.new) } end + + def test_create_from_pem + req = <