X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.api.uuid%2Fsrc%2Forg%2Fargeo%2Fapi%2Fuuid%2FAbstractAsyncUuidFactory.java;h=1948eafbd8e82de76afe00e21d4d7620b9259d83;hb=f97685aba73c01d93689fca1a67338fb4d23919c;hp=f57462388959f2fb9e64c8dd55c0da38cdaf8bd0;hpb=e846ef84146b66ae543c29c5f17b2991ff0f5973;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.api.uuid/src/org/argeo/api/uuid/AbstractAsyncUuidFactory.java b/org.argeo.api.uuid/src/org/argeo/api/uuid/AbstractAsyncUuidFactory.java index f57462388..1948eafbd 100644 --- a/org.argeo.api.uuid/src/org/argeo/api/uuid/AbstractAsyncUuidFactory.java +++ b/org.argeo.api.uuid/src/org/argeo/api/uuid/AbstractAsyncUuidFactory.java @@ -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); } @@ -64,14 +77,11 @@ public abstract class AbstractAsyncUuidFactory extends AbstractUuidFactory imple if (nodeIdSupplier == null) throw new IllegalStateException("No node id supplier available"); UUID uuid = new UUID(timeUuidState.getMostSignificantBits(), timeUuidState.getLeastSignificantBits()); - long clockSequence = timeUuidState.getClockSequence(); - long timestamp = timeUuidState.getLastTimestamp(); - // assert uuid.node() == longFromBytes(node); - assert uuid.timestamp() == timestamp; - assert uuid.clockSequence() == clockSequence - : "uuid.clockSequence()=" + uuid.clockSequence() + " clockSequence=" + clockSequence; + assert uuid.version() == 1; assert uuid.variant() == 2; + assert uuid.timestamp() == timeUuidState.getLastTimestamp(); + assert uuid.clockSequence() == timeUuidState.getClockSequence(); return uuid; }