This is an automated email from the ASF dual-hosted git repository. jochen pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/commons-crypto.git
The following commit(s) were added to refs/heads/master by this push: new fcdb396 CRYPTO-160: Improve quality for methods, that JavaCryptoRandom inherits from Random. fcdb396 is described below commit fcdb39680498b7959567e8edbc4f970108d014d9 Author: Jochen Wiedmann <jochen.wiedm...@gmail.com> AuthorDate: Fri Jun 10 10:25:46 2022 +0200 CRYPTO-160: Improve quality for methods, that JavaCryptoRandom inherits from Random. --- pom.xml | 2 +- src/changes/changes.xml | 22 ++++++++++----------- .../commons/crypto/random/JavaCryptoRandom.java | 20 +++++++++++++++++++ .../crypto/random/JavaCryptoRandomTest.java | 23 +++++++++++++++++++++- 4 files changed, 53 insertions(+), 14 deletions(-) diff --git a/pom.xml b/pom.xml index 29bf1df..53a2d16 100644 --- a/pom.xml +++ b/pom.xml @@ -585,7 +585,7 @@ The following provides more details on the included cryptographic software: <goal>run</goal> </goals> <configuration> - <target name="make"> + <target name="make" unless="maven.make.skip"> <taskdef resource="net/sf/antcontrib/antcontrib.properties" classpathref="maven.plugin.classpath" /> <exec executable="make" failonerror="true" dir="${project.basedir}"> <env key="VERSION" value="${project.version}" /> diff --git a/src/changes/changes.xml b/src/changes/changes.xml index e99c571..9643f85 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -62,6 +62,7 @@ <body> <release version="1.1.1" date="20YY-MM-DD" description="TBD"> + <action issue="CRYPTO-160" type="fix" dev="jochen">Enhance the quality of JavaCryptoRandom as a subclass of Random by overwriting Random.next(inz).</action> <!-- FIX --> <action issue="CRYPTO-154" type="fix">License header should be plain a comment #113.</action> <action type="fix" dev="ggregory" due-to="Arturo Bernal">Fix PMD warning and don't init to defaults #128.</action> @@ -69,28 +70,25 @@ <action type="fix" dev="ggregory" due-to="Gary Gregory">Port from pre-Java 8 javah tool to Java 8 and up javac with the -h option.</action> <action type="fix" dev="ggregory" due-to="Gary Gregory">Fix build on Java 11.</action> <action type="fix" dev="ggregory" due-to="Gary Gregory">Fix build on Java 17.</action> - <!-- ADD --> - <action type="fix" dev="ggregory" due-to="Gary Gregory, Dependabot">Add github/codeql-action 2 #159.</action> <!-- UPDATE --> - <action type="update" dev="ggregory" due-to="Dependabot, Gary Gregory">Bump actions/cache from 2.1.7 to 3.0.4 #150.</action> <action type="update" dev="ggregory" due-to="Dependabot">Bump actions/checkout from 2 to 3 #149.</action> + <action type="update" dev="ggregory" due-to="Dependabot, Gary Gregory">Bump actions/cache from 2.1.7 to 3.0.3 #150.</action> <action type="update" dev="ggregory" due-to="Gary Gregory">Bump actions/setup-java from 2 to 3.</action> + <action type="update" dev="ggregory" due-to="Gary Gregory">Update commons.jacoco.version 0.8.5 to 0.8.7 (Fixes Java 15 builds).</action> <action issue="CRYPTO-155" type="update" due-to="Arturo Bernal">Minor improvement #115, #125.</action> <action issue="CRYPTO-151" type="update" due-to="Arturo Bernal">Migrate to Junit 5 #114.</action> <action type="update" dev="ggregory" due-to="Dependabot">Bump jna from 5.5.0 to 5.11.0 #123, #139, #153.</action> - <action type="update" dev="ggregory" due-to="Gary Gregory">Bump commons.japicmp.version from 0.14.3 to 0.15.7.</action> + <action type="update" dev="ggregory" due-to="Gary Gregory">Update commons.japicmp.version 0.14.3 -> 0.15.7.</action> <action type="update" dev="ggregory" due-to="Dependabot">Bump maven-checkstyle-plugin from 3.1.1 to 3.1.2 #130.</action> - <action type="update" dev="ggregory" due-to="Dependabot">Bump jmh.version from 1.12 to 1.35 #119, #157.</action> + <action type="update" dev="ggregory" due-to="Dependabot">Bump jmh.version from 1.12 to 1.34 #119.</action> <action type="update" dev="ggregory" due-to="Dependabot">Bump exec-maven-plugin from 1.6.0 to 3.0.0 #121.</action> - <action type="update" dev="ggregory" due-to="Dependabot">Bump maven-antrun-plugin from 1.8 to 3.1.0 #120, #158.</action> - <action type="update" dev="ggregory" due-to="Gary Gregory">Bump commons.japicmp.version from 0.15.2 to 0.15.7 #138.</action> - <action type="update" dev="ggregory" due-to="Gary Gregory">Bump jacoco-maven-plugin from 0.6.6 to 0.8.8 #138, #154.</action> - <action type="update" dev="ggregory" due-to="Gary Gregory">Bump commons.javadoc.version from 3.2.0 to 3.4.0 #138.</action> + <action type="update" dev="ggregory" due-to="Dependabot">Bump maven-antrun-plugin from 1.8 to 3.0.0 #120.</action> + <action type="update" dev="ggregory" due-to="Gary Gregory">Bump commons.japicmp.version 0.15.2 -> 0.15.7 #138.</action> + <action type="update" dev="ggregory" due-to="Gary Gregory">Bump jacoco-maven-plugin 0.6.6 -> 0.8.8 #138, #154.</action> + <action type="update" dev="ggregory" due-to="Gary Gregory">Bump commons.javadoc.version 3.2.0 -> 3.3.2 #138.</action> <action type="update" dev="ggregory" due-to="Gary Gregory">Bump maven-pmd-plugin from 3.14.0 to 3.16.0 #140.</action> <action type="update" dev="ggregory" due-to="Dependabot">Bump taglist-maven-plugin from 2.4 to 3.0.0 #147.</action> - <action type="update" dev="ggregory" due-to="Dependabot">Bump spotbugs-maven-plugin from 4.5.3.0 to 4.7.0.0 #152, #160.</action> - <action type="update" dev="ggregory" due-to="Gary Gregory">Bump commons-parent from 52 to 53.</action> - <action type="update" dev="ggregory" due-to="Gary Gregory">Bump commons.surefire.version from 3.0.0-M5 to 3.0.0-M7.</action> + <action type="update" dev="ggregory" due-to="Dependabot">Bump spotbugs-maven-plugin from 4.5.3.0 to 4.6.0.0 #152.</action> </release> <release version="1.1.0" date="2020-08-28" description="Minor release (Java 8 and OpenSSL 1.1.1)"> <action issue="CRYPTO-59" type="add">Support Galois/Counter Mode (GCM).</action> diff --git a/src/main/java/org/apache/commons/crypto/random/JavaCryptoRandom.java b/src/main/java/org/apache/commons/crypto/random/JavaCryptoRandom.java index 519eb65..5e65cea 100644 --- a/src/main/java/org/apache/commons/crypto/random/JavaCryptoRandom.java +++ b/src/main/java/org/apache/commons/crypto/random/JavaCryptoRandom.java @@ -22,6 +22,8 @@ import java.security.SecureRandom; import java.util.Properties; import java.util.Random; +import org.apache.commons.crypto.utils.Utils; + /** * A CryptoRandom of Java implementation. */ @@ -76,4 +78,22 @@ class JavaCryptoRandom extends Random implements CryptoRandom { public void nextBytes(final byte[] bytes) { instance.nextBytes(bytes); } + + /** + * Overrides Random#next(). Generates an integer containing the + * user-specified number of random bits(right justified, with leading + * zeros). + * + * @param numBits number of random bits to be generated, where 0 + * {@literal <=} {@code numBits} {@literal <=} 32. + * @return int an {@code int} containing the user-specified number of + * random bits (right justified, with leading zeros). + */ + @Override + protected int next(final int numBits) { + Utils.checkArgument(numBits >= 0 && numBits <= 32); + // Can't simply invoke instance.next(bits) here, because that is package protected. + // But, this should do. + return instance.nextInt() >>> (Integer.SIZE - numBits); + } } diff --git a/src/test/java/org/apache/commons/crypto/random/JavaCryptoRandomTest.java b/src/test/java/org/apache/commons/crypto/random/JavaCryptoRandomTest.java index 0f942c2..12f29ae 100644 --- a/src/test/java/org/apache/commons/crypto/random/JavaCryptoRandomTest.java +++ b/src/test/java/org/apache/commons/crypto/random/JavaCryptoRandomTest.java @@ -17,13 +17,19 @@ */ package org.apache.commons.crypto.random; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertTrue; import java.security.GeneralSecurityException; import java.util.Properties; +import java.util.Random; -public class JavaCryptoRandomTest extends AbstractRandomTest { +import org.apache.commons.crypto.utils.Utils; +import org.junit.jupiter.api.Test; +public class JavaCryptoRandomTest extends AbstractRandomTest { @Override public CryptoRandom getCryptoRandom() throws GeneralSecurityException { final Properties props = new Properties(); @@ -37,4 +43,19 @@ public class JavaCryptoRandomTest extends AbstractRandomTest { return random; } + @Test + public void testNextIntIsntActuallyRandomNextInt() throws Exception { + final CryptoRandom cr = getCryptoRandom(); + final Random r = (Random) cr; + final long seed = 1654421930011l; // System.getCurrentMillis() on 2022-June-05, 11:39 + final Random otherRandom = new Random(seed); + final Random otherRandom2 = new Random(); + otherRandom2.setSeed(seed); + r.setSeed(seed); + final long l1 = r.nextLong(); + final long l2 = otherRandom.nextLong(); + final long l3 = otherRandom2.nextLong(); + assertEquals(l2, l3); + assertNotEquals(l1, l2); + } }