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 <s...@apache.org> Authored: Thu Jun 30 13:54:44 2016 +0800 Committer: Sun Dapeng <s...@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"); - } }