Modified: trunk/jopenssl/lib/jopenssl/version.rb (973 => 974)
--- trunk/jopenssl/lib/jopenssl/version.rb 2008-04-24 15:43:01 UTC (rev 973)
+++ trunk/jopenssl/lib/jopenssl/version.rb 2008-04-28 13:06:11 UTC (rev 974)
@@ -1,5 +1,5 @@
module Jopenssl
module Version
- VERSION = "0.2.1"
+ VERSION = "0.2.2"
end
end
Modified: trunk/jopenssl/src/java/org/jruby/ext/openssl/Cipher.java (973 => 974)
--- trunk/jopenssl/src/java/org/jruby/ext/openssl/Cipher.java 2008-04-24 15:43:01 UTC (rev 973)
+++ trunk/jopenssl/src/java/org/jruby/ext/openssl/Cipher.java 2008-04-28 13:06:11 UTC (rev 974)
@@ -44,6 +44,7 @@
import org.jruby.RubyObject;
import org.jruby.RubyString;
import org.jruby.common.IRubyWarnings;
+import org.jruby.common.IRubyWarnings.ID;
import org.jruby.exceptions.RaiseException;
import org.jruby.runtime.Block;
import org.jruby.runtime.CallbackFactory;
@@ -373,21 +374,60 @@
return getRuntime().newFixnum(ciph.getBlockSize());
}
- public IRubyObject encrypt(IRubyObject[] args) {
- //TODO: implement backwards compat
+ protected void init(IRubyObject[] args, boolean encrypt) {
org.jruby.runtime.Arity.checkArgumentCount(getRuntime(),args,0,2);
- encryptMode = true;
- //modeParams = args;
+
+ encryptMode = encrypt;
ciphInited = false;
+
+ if(args.length > 0) {
+ /*
+ * oops. this code mistakes salt for IV.
+ * We deprecated the arguments for this method, but we decided
+ * keeping this behaviour for backward compatibility.
+ */
+ byte[] pass = args[0].convertToString().getBytes();
+ byte[] iv = null;
+ try {
+ iv = "OpenSSL for Ruby rulez!".getBytes("ISO8859-1");
+ byte[] iv2 = new byte[this.ivLen];
+ System.arraycopy(iv, 0, iv2, 0, this.ivLen);
+ iv = iv2;
+ } catch(Exception e) {}
+
+ if(args.length > 1 && !args[1].isNil()) {
+ getRuntime().getWarnings().warn(ID.MISCELLANEOUS, "key derivation by " + getMetaClass().getRealClass().getName() + "#encrypt is deprecated; use " + getMetaClass().getRealClass().getName() + "::pkcs5_keyivgen instead");
+ iv = args[1].convertToString().getBytes();
+ if(iv.length > this.ivLen) {
+ byte[] iv2 = new byte[this.ivLen];
+ System.arraycopy(iv, 0, iv2, 0, this.ivLen);
+ iv = iv2;
+ }
+ }
+
+ MessageDigest digest = (MessageDigest)OpenSSLReal.getWithBCProvider(new Callable() {
+ public Object call() {
+ try {
+ return MessageDigest.getInstance("MD5", "BC");
+ } catch (Exception e) {
+ throw new RaiseException(getRuntime(), ciphErr, e.getMessage(), true);
+ }
+ }
+ });
+
+ OpenSSLImpl.KeyAndIv result = OpenSSLImpl.EVP_BytesToKey(keyLen,ivLen,digest,iv,pass,2048);
+ this.key = result.getKey();
+ this.iv = iv;
+ }
+ }
+
+ public IRubyObject encrypt(IRubyObject[] args) {
+ init(args, true);
return this;
}
public IRubyObject decrypt(IRubyObject[] args) {
- //TODO: implement backwards compat
- org.jruby.runtime.Arity.checkArgumentCount(getRuntime(),args,0,2);
- encryptMode = false;
- //modeParams = args;
- ciphInited = false;
+ init(args, false);
return this;
}
Added: trunk/jopenssl/test/test_cipher.rb (0 => 974)
--- trunk/jopenssl/test/test_cipher.rb (rev 0)
+++ trunk/jopenssl/test/test_cipher.rb 2008-04-28 13:06:11 UTC (rev 974)
@@ -0,0 +1,15 @@
+begin
+ require "openssl"
+rescue LoadError
+end
+
+require "test/unit"
+
+class TestCipher < Test::Unit::TestCase
+ def test_encrypt_takes_parameter
+ enc = OpenSSL::Cipher::Cipher.new('DES-EDE3-CBC')
+ enc.encrypt("123")
+ data = ""
+ data << enc.final
+ end
+end
Modified: trunk/jopenssl/test/test_openssl.rb (973 => 974)
--- trunk/jopenssl/test/test_openssl.rb 2008-04-24 15:43:01 UTC (rev 973)
+++ trunk/jopenssl/test/test_openssl.rb 2008-04-28 13:06:11 UTC (rev 974)
@@ -1,21 +1,25 @@
require 'java' if RUBY_PLATFORM =~ /java/
-begin
- require 'openssl/test_asn1'
- require 'openssl/test_cipher'
- require 'openssl/test_digest'
- require 'openssl/test_hmac'
- require 'openssl/test_ns_spki'
- require 'openssl/test_pair'
- require 'openssl/test_pkey_rsa'
- require 'openssl/test_ssl'
- require 'openssl/test_x509cert'
- require 'openssl/test_x509crl'
- require 'openssl/test_x509ext'
- require 'openssl/test_x509name'
- require 'openssl/test_x509req'
- require 'openssl/test_x509store'
+
+def protect_require(name)
+ require name
rescue Exception => e
- $stderr.puts "Had exception: #{e.inspect}"
+ $stderr.puts "Had exception in #{name}: #{e.inspect}"
$stderr.puts(*(e.backtrace))
end
+
+protect_require 'openssl/test_asn1'
+protect_require 'openssl/test_cipher'
+protect_require 'openssl/test_digest'
+protect_require 'openssl/test_hmac'
+protect_require 'openssl/test_ns_spki'
+protect_require 'openssl/test_pair'
+protect_require 'openssl/test_pkey_rsa'
+protect_require 'openssl/test_ssl'
+protect_require 'openssl/test_x509cert'
+protect_require 'openssl/test_x509crl'
+protect_require 'openssl/test_x509ext'
+protect_require 'openssl/test_x509name'
+protect_require 'openssl/test_x509req'
+protect_require 'openssl/test_x509store'
+protect_require 'test_cipher'