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/06 03:53:18 UTC
[2/2] commons-crypto git commit: CRYPTO-62: Add multithreaded related
tests and javadoc comments
CRYPTO-62: Add multithreaded related tests and javadoc comments
Project: http://git-wip-us.apache.org/repos/asf/commons-crypto/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-crypto/commit/0fa9f0a2
Tree: http://git-wip-us.apache.org/repos/asf/commons-crypto/tree/0fa9f0a2
Diff: http://git-wip-us.apache.org/repos/asf/commons-crypto/diff/0fa9f0a2
Branch: refs/heads/master
Commit: 0fa9f0a202f187af1c7bfa8058d64cafd91dd2c6
Parents: 46f2dfc
Author: Hendrik Saly <he...@gmail.com>
Authored: Mon Jun 6 11:42:53 2016 +0800
Committer: Sun Dapeng <sd...@apache.org>
Committed: Mon Jun 6 11:43:19 2016 +0800
----------------------------------------------------------------------
.../commons/crypto/cipher/CryptoCipher.java | 4 +++
.../commons/crypto/cipher/OpensslNative.java | 2 +-
.../crypto/random/AbstractRandomTest.java | 32 +++++++++++++++++++-
3 files changed, 36 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/commons-crypto/blob/0fa9f0a2/src/main/java/org/apache/commons/crypto/cipher/CryptoCipher.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/crypto/cipher/CryptoCipher.java b/src/main/java/org/apache/commons/crypto/cipher/CryptoCipher.java
index 9781ab2..3b31a57 100644
--- a/src/main/java/org/apache/commons/crypto/cipher/CryptoCipher.java
+++ b/src/main/java/org/apache/commons/crypto/cipher/CryptoCipher.java
@@ -32,6 +32,10 @@ import javax.crypto.ShortBufferException;
/**
* The interface of cryptographic cipher for encryption and decryption.
+ *
+ * <p><strong>Note that this implementation is not synchronized.</strong>
+ * Multiple threads must not access a crypto cipher instance concurrently.
+ * Use one crypto cipher instance per thread to circumvent this.
*/
public interface CryptoCipher extends Closeable {
http://git-wip-us.apache.org/repos/asf/commons-crypto/blob/0fa9f0a2/src/main/java/org/apache/commons/crypto/cipher/OpensslNative.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/crypto/cipher/OpensslNative.java b/src/main/java/org/apache/commons/crypto/cipher/OpensslNative.java
index 15060c9..9993098 100644
--- a/src/main/java/org/apache/commons/crypto/cipher/OpensslNative.java
+++ b/src/main/java/org/apache/commons/crypto/cipher/OpensslNative.java
@@ -21,7 +21,7 @@ import java.nio.ByteBuffer;
/**
* JNI interface of {@link Openssl} implementation. The native method in this
- * class is defined in OpensslNative.h(genereted by javah).
+ * class is defined in OpensslNative.h (generated by javah).
*/
public class OpensslNative {
http://git-wip-us.apache.org/repos/asf/commons-crypto/blob/0fa9f0a2/src/test/java/org/apache/commons/crypto/random/AbstractRandomTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/commons/crypto/random/AbstractRandomTest.java b/src/test/java/org/apache/commons/crypto/random/AbstractRandomTest.java
index 2ccd163..1c1bab2 100644
--- a/src/test/java/org/apache/commons/crypto/random/AbstractRandomTest.java
+++ b/src/test/java/org/apache/commons/crypto/random/AbstractRandomTest.java
@@ -17,8 +17,11 @@
*/
package org.apache.commons.crypto.random;
+import java.lang.Thread.State;
import java.security.GeneralSecurityException;
+import java.util.ArrayList;
import java.util.Arrays;
+import java.util.List;
import org.junit.Test;
@@ -41,6 +44,33 @@ public abstract class AbstractRandomTest {
random.close();
}
+ @Test(timeout = 120000)
+ public void testRandomBytesMultiThreaded() throws Exception {
+ final int threadCount = 100;
+ final CryptoRandom random = getCryptoRandom();
+ final List<Thread> threads = new ArrayList<Thread>(threadCount);
+
+ for(int i=0; i< threadCount; i++) {
+ Thread t = new Thread(new Runnable() {
+ public void run() {
+ checkRandomBytes(random, 10);
+ checkRandomBytes(random, 1000);
+ checkRandomBytes(random, 100000);
+ }
+ });
+ t.start();
+ threads.add(t);
+ }
+
+ for(Thread t: threads) {
+ if(!t.getState().equals(State.NEW)) {
+ t.join();
+ }
+ }
+
+ random.close();
+ }
+
/**
* Test will timeout if secure random implementation always returns a
* constant value.
@@ -51,7 +81,7 @@ public abstract class AbstractRandomTest {
random.nextBytes(bytes);
random.nextBytes(bytes1);
- while (Arrays.equals(bytes, bytes1)) {
+ while (Arrays.equals(bytes1, new byte[len]) || Arrays.equals(bytes, bytes1)) {
random.nextBytes(bytes1);
}
}