Reseed secure random for each random UUID.
authorMathieu Baudier <mbaudier@argeo.org>
Mon, 24 Jan 2022 11:58:12 +0000 (12:58 +0100)
committerMathieu Baudier <mbaudier@argeo.org>
Mon, 24 Jan 2022 11:58:12 +0000 (12:58 +0100)
org.argeo.api.uuid/src/org/argeo/api/uuid/AbstractAsyncUuidFactory.java

index 2b4c27f3fac693defff64b53ea2141767022a6b7..1948eafbd8e82de76afe00e21d4d7620b9259d83 100644 (file)
@@ -1,6 +1,9 @@
 package org.argeo.api.uuid;
 
+import java.security.DrbgParameters;
+import java.security.DrbgParameters.Capability;
 import java.security.SecureRandom;
+import java.security.SecureRandomParameters;
 import java.util.UUID;
 import java.util.concurrent.Callable;
 import java.util.concurrent.CompletableFuture;
@@ -53,6 +56,16 @@ public abstract class AbstractAsyncUuidFactory extends AbstractUuidFactory imple
         * SYNC OPERATIONS
         */
        protected UUID newRandomUUIDStrong() {
+               SecureRandomParameters parameters = secureRandom.getParameters();
+               if (parameters != null) {
+                       if (parameters instanceof DrbgParameters.Instantiation) {
+                               Capability capability = ((DrbgParameters.Instantiation) parameters).getCapability();
+                               if (capability.equals(DrbgParameters.Capability.PR_AND_RESEED)
+                                               || capability.equals(DrbgParameters.Capability.RESEED_ONLY)) {
+                                       secureRandom.reseed();
+                               }
+                       }
+               }
                return newRandomUUID(secureRandom);
        }