Title: [831] trunk/jopenssl/src/java/org/jruby/ext/openssl/Digest.java: Missed Digest -- convert to also wrap w/ getWithBCProvider
Revision
831
Author
nicksieger
Date
2007-12-12 17:05:25 -0500 (Wed, 12 Dec 2007)

Log Message

Missed Digest -- convert to also wrap w/ getWithBCProvider

Modified Paths


Diff

Modified: trunk/jopenssl/src/java/org/jruby/ext/openssl/Digest.java (830 => 831)


--- trunk/jopenssl/src/java/org/jruby/ext/openssl/Digest.java	2007-12-12 21:59:09 UTC (rev 830)
+++ trunk/jopenssl/src/java/org/jruby/ext/openssl/Digest.java	2007-12-12 22:05:25 UTC (rev 831)
@@ -27,13 +27,9 @@
  ***** END LICENSE BLOCK *****/
 package org.jruby.ext.openssl;
 
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
 
-import org.bouncycastle.crypto.digests.MD5Digest;
-import org.bouncycastle.crypto.digests.SHA1Digest;
-import org.bouncycastle.crypto.digests.SHA224Digest;
-import org.bouncycastle.crypto.digests.SHA256Digest;
-import org.bouncycastle.crypto.digests.SHA384Digest;
-import org.bouncycastle.crypto.digests.SHA512Digest;
 import org.jruby.Ruby;
 import org.jruby.RubyClass;
 import org.jruby.RubyModule;
@@ -79,6 +75,18 @@
         cDigest.defineFastMethod("size",digestcb.getFastMethod("size"));
     }
 
+    private static MessageDigest getDigest(final String name, final IRubyObject recv) {
+        return (MessageDigest) OpenSSLReal.getWithBCProvider(new Callable() {
+            public Object call() {
+                try {
+                    return MessageDigest.getInstance(transformDigest(name));
+                } catch (NoSuchAlgorithmException e) {
+                    throw recv.getRuntime().newNotImplementedError("Unsupported digest algorithm (" + name + ")");
+                }
+            }
+        });
+    }
+
     private static String transformDigest(String inp) {
         String[] sp = inp.split("::");
         if(sp.length > 1) { // We only want Digest names from the last part of class name
@@ -93,48 +101,16 @@
         return inp;
     }
 
-    public static org.bouncycastle.crypto.Digest getDigest(Ruby runtime, String name) {
-        if (name.equals("MD5")) {
-            return new MD5Digest();
-        } else if (name.equals("SHA")) {
-            return new SHA1Digest();
-        } else if (name.equals("SHA1")) {
-            return new SHA1Digest();
-        } else if (name.equals("SHA224")) {
-            return new SHA224Digest();
-        } else if (name.equals("SHA256")) {
-            return new SHA256Digest();
-        } else if (name.equals("SHA384")) {
-            return new SHA384Digest();
-        } else if (name.equals("SHA512")) {
-            return new SHA512Digest();
-        } else {
-            throw runtime.newNotImplementedError("Unsupported digest algorithm (" + name + ")");
-        }
-    }
-
     public static IRubyObject s_digest(IRubyObject recv, IRubyObject str, IRubyObject data) {
         String name = str.toString();
-
-        org.bouncycastle.crypto.Digest md = getDigest(recv.getRuntime(), name);
-        byte[] bytes = data.convertToString().getBytes();
-
-        md.update(bytes, 0, bytes.length);
-        byte[] digest = new byte[md.getDigestSize()];
-        md.doFinal(digest, 0);
-        return RubyString.newString(recv.getRuntime(), new ByteList(digest));
+        MessageDigest md = getDigest(name, recv);
+        return RubyString.newString(recv.getRuntime(), md.digest(data.convertToString().getBytes()));
     }
 
     public static IRubyObject s_hexdigest(IRubyObject recv, IRubyObject str, IRubyObject data) {
         String name = str.toString();
-
-        org.bouncycastle.crypto.Digest md = getDigest(recv.getRuntime(), transformDigest(name));
-        byte[] bytes = data.convertToString().getBytes();
-
-        md.update(bytes, 0, bytes.length);
-        byte[] digest = new byte[md.getDigestSize()];
-        md.doFinal(digest, 0);
-        return RubyString.newString(recv.getRuntime(), ByteList.plain(Utils.toHex(digest)));
+        MessageDigest md = getDigest(name, recv);
+        return RubyString.newString(recv.getRuntime(), ByteList.plain(Utils.toHex(md.digest(data.convertToString().getBytes()))));
     }
 
     public Digest(Ruby runtime, RubyClass type) {
@@ -143,11 +119,11 @@
 
         if(!(type.toString().equals("OpenSSL::Digest::Digest"))) {
             name = type.toString();
-            md = getDigest(runtime, transformDigest(type.toString()));
+            md = getDigest(name, this);
         }
     }
 
-    private org.bouncycastle.crypto.Digest md;
+    private MessageDigest md;
     private StringBuffer data;
     private String name;
 
@@ -165,8 +141,7 @@
         type = args[0];
 
         name = type.toString();
-        md = getDigest(getRuntime(), transformDigest(name));
-
+        md = getDigest(name, this);
         if(!data.isNil()) {
             update(data);
         }
@@ -179,16 +154,15 @@
         }
         checkFrozen();
         data = "" StringBuffer(((Digest)obj).data.toString());
-        name = ((Digest)obj).md.getAlgorithmName();
-        md = getDigest(getRuntime(), transformDigest(name));
+        name = ((Digest)obj).md.getAlgorithm();
+        md = getDigest(name, this);
 
         return this;
     }
 
     public IRubyObject update(IRubyObject obj) {
         data.append(obj);
-        byte[] bytes = obj.convertToString().getBytes();
-        md.update(bytes, 0, bytes.length);
+        md.update(obj.convertToString().getBytes());
         return this;
     }
 
@@ -200,11 +174,7 @@
 
     public IRubyObject digest() {
         md.reset();
-        byte[] bytes = ByteList.plain(data);
-        md.update(bytes, 0, bytes.length);
-        byte[] digest = new byte[md.getDigestSize()];
-        md.doFinal(digest, 0);
-        return RubyString.newString(getRuntime(), digest);
+        return RubyString.newString(getRuntime(), md.digest(ByteList.plain(data)));
     }
 
     public IRubyObject name() {
@@ -212,23 +182,19 @@
     }
 
     public IRubyObject size() {
-        return getRuntime().newFixnum(md.getDigestSize());
+        return getRuntime().newFixnum(md.getDigestLength());
     }
 
     public IRubyObject hexdigest() {
         md.reset();
-        byte[] bytes = ByteList.plain(data);
-        md.update(bytes, 0, bytes.length);
-        byte[] digest = new byte[md.getDigestSize()];
-        md.doFinal(digest, 0);
-        return RubyString.newString(getRuntime(), ByteList.plain(Utils.toHex(digest)));
+        return RubyString.newString(getRuntime(), ByteList.plain(Utils.toHex(md.digest(ByteList.plain(data)))));
     }
 
     public IRubyObject eq(IRubyObject oth) {
         boolean ret = this == oth;
         if(!ret && oth instanceof Digest) {
             Digest b = (Digest)oth;
-            ret = this.md.getAlgorithmName().equals(b.md.getAlgorithmName()) &&
+            ret = this.md.getAlgorithm().equals(b.md.getAlgorithm()) &&
                 this.digest().equals(b.digest());
         }
 
@@ -236,7 +202,7 @@
     }
 
     String getAlgorithm() {
-        return this.md.getAlgorithmName().replace("-", "");
+        return this.md.getAlgorithm();
     }
 }
 
_______________________________________________
Jruby-extras-devel mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/jruby-extras-devel

Reply via email to