You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by sd...@apache.org on 2016/06/30 06:31:05 UTC

commons-crypto git commit: CRYPTO-63: Add JNA binding (issue fix)

Repository: commons-crypto
Updated Branches:
  refs/heads/master 99cae9863 -> 5b4c302d8


CRYPTO-63: Add JNA binding (issue fix)


Project: http://git-wip-us.apache.org/repos/asf/commons-crypto/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-crypto/commit/5b4c302d
Tree: http://git-wip-us.apache.org/repos/asf/commons-crypto/tree/5b4c302d
Diff: http://git-wip-us.apache.org/repos/asf/commons-crypto/diff/5b4c302d

Branch: refs/heads/master
Commit: 5b4c302d87b5039258fb3785c0d1e18775e4cf7d
Parents: 99cae98
Author: Sun Dapeng <sd...@apache.org>
Authored: Thu Jun 30 13:54:44 2016 +0800
Committer: Sun Dapeng <sd...@apache.org>
Committed: Thu Jun 30 13:54:44 2016 +0800

----------------------------------------------------------------------
 .../org/apache/commons/crypto/jna/OpensslJnaCipher.java   |  9 +++++++--
 .../apache/commons/crypto/jna/OpensslJnaCipherTest.java   | 10 ----------
 2 files changed, 7 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-crypto/blob/5b4c302d/src/main/java/org/apache/commons/crypto/jna/OpensslJnaCipher.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/crypto/jna/OpensslJnaCipher.java b/src/main/java/org/apache/commons/crypto/jna/OpensslJnaCipher.java
index 05ee367..db1cd31 100644
--- a/src/main/java/org/apache/commons/crypto/jna/OpensslJnaCipher.java
+++ b/src/main/java/org/apache/commons/crypto/jna/OpensslJnaCipher.java
@@ -38,6 +38,7 @@ import org.apache.commons.crypto.cipher.CryptoCipher;
 import org.apache.commons.crypto.utils.Utils;
 
 import com.sun.jna.NativeLong;
+import com.sun.jna.Pointer;
 import com.sun.jna.ptr.PointerByReference;
 
 /**
@@ -48,7 +49,7 @@ class OpensslJnaCipher implements CryptoCipher {
     private final static int AES_BLOCK_SIZE = 16;
     
     private PointerByReference algo;
-    private final PointerByReference context;
+    private PointerByReference context;
     private final AlgorithmMode algMode;
     private final int padding;
     private final String transformation;
@@ -119,6 +120,9 @@ class OpensslJnaCipher implements CryptoCipher {
             }
         }
         
+        if (context != null && Pointer.NULL == context.getValue()) {
+            context = OpensslNativeJna.EVP_CIPHER_CTX_new();
+        }
         int retVal = OpensslNativeJna.EVP_CipherInit_ex(context, algo, null, key.getEncoded(), iv, cipherMode);
         throwOnError(retVal);
         OpensslNativeJna.EVP_CIPHER_CTX_set_padding(context, padding);
@@ -233,9 +237,10 @@ class OpensslJnaCipher implements CryptoCipher {
      */
     @Override
     public void close() {
-        if(context != null) {
+        if(context != null && Pointer.NULL != context.getValue()) {
             OpensslNativeJna.EVP_CIPHER_CTX_cleanup(context);
             OpensslNativeJna.EVP_CIPHER_CTX_free(context);
+            context.setValue(Pointer.NULL);
         }
     }
     

http://git-wip-us.apache.org/repos/asf/commons-crypto/blob/5b4c302d/src/test/java/org/apache/commons/crypto/jna/OpensslJnaCipherTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/commons/crypto/jna/OpensslJnaCipherTest.java b/src/test/java/org/apache/commons/crypto/jna/OpensslJnaCipherTest.java
index 2d01ffa..d30586c 100644
--- a/src/test/java/org/apache/commons/crypto/jna/OpensslJnaCipherTest.java
+++ b/src/test/java/org/apache/commons/crypto/jna/OpensslJnaCipherTest.java
@@ -19,7 +19,6 @@
 package org.apache.commons.crypto.jna;
 
 import org.apache.commons.crypto.cipher.AbstractCipherTest;
-import org.apache.commons.crypto.jna.OpensslJnaCipher;
 
 public class OpensslJnaCipherTest extends AbstractCipherTest {
 
@@ -33,13 +32,4 @@ public class OpensslJnaCipherTest extends AbstractCipherTest {
         cipherClass = OpensslJnaCipher.class.getName();
     }
 
-    @Override
-    public void closeTestRepeat() {
-        System.err.println("closeTestRepeat() Causes JVM crash");
-    }
-
-    @Override
-    public void reInitAfterClose() {
-        System.err.println("reInitAfterClose() Causes JVM crash");
-    }
 }