From 38e48438f0b3b902181370fda63133baaa1f5f68 Mon Sep 17 00:00:00 2001 From: Brice Figureau Date: Sat, 23 May 2009 16:25:35 +0200 Subject: [PATCH 5/5] Implement OpenSSL::X509::Certificate#check_private_key Signed-off-by: Brice Figureau --- src/java/org/jruby/ext/openssl/X509Cert.java | 8 +++++++- test/openssl/test_x509cert.rb | 7 +++++++ 2 files changed, 14 insertions(+), 1 deletions(-) diff --git a/src/java/org/jruby/ext/openssl/X509Cert.java b/src/java/org/jruby/ext/openssl/X509Cert.java index 03adbde..225f68b 100644 --- a/src/java/org/jruby/ext/openssl/X509Cert.java +++ b/src/java/org/jruby/ext/openssl/X509Cert.java @@ -35,6 +35,7 @@ import java.security.GeneralSecurityException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.security.NoSuchProviderException; +import java.security.PublicKey; import java.security.SignatureException; import java.security.cert.Certificate; import java.security.cert.CertificateEncodingException; @@ -423,7 +424,12 @@ public class X509Cert extends RubyObject { @JRubyMethod public IRubyObject check_private_key(IRubyObject arg) { - return getRuntime().getNil(); + PKey key = (PKey)arg; + PublicKey pkey = key.getPublicKey(); + PublicKey certPubKey = getAuxCert().getPublicKey(); + if (certPubKey.equals(pkey)) + return getRuntime().getTrue(); + return getRuntime().getFalse(); } @JRubyMethod diff --git a/test/openssl/test_x509cert.rb b/test/openssl/test_x509cert.rb index ec9ca06..189fed5 100644 --- a/test/openssl/test_x509cert.rb +++ b/test/openssl/test_x509cert.rb @@ -169,6 +169,13 @@ class OpenSSL::TestX509Certificate < Test::Unit::TestCase nil, nil, OpenSSL::Digest::SHA1.new) } end + + def test_check_private_key + cert = issue_cert(@ca, @rsa2048, 1, Time.now, Time.now+3600, [], + nil, nil, OpenSSL::Digest::SHA1.new) + assert_equal(true, cert.check_private_key(@rsa2048)) + end + end end -- 1.6.0.2