Skip to content

Commit ba9838b

Browse files
committed
fix: entropy generation & alphabet access are not compliant
Refs: #7
1 parent bfadeae commit ba9838b

File tree

1 file changed

+13
-4
lines changed
  • src/main/java/io/github/thibaultmeyer/cuid

1 file changed

+13
-4
lines changed

src/main/java/io/github/thibaultmeyer/cuid/CUID.java

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ public static CUID randomCUID2(final int length) {
6666
}
6767

6868
final String time = Long.toString(System.currentTimeMillis(), NUMBER_BASE);
69-
final char firstLetter = CUIDv2.ALPHABET_ARRAY[safeAbs(Common.nextIntValue()) % CUIDv2.ALPHABET_ARRAY.length];
69+
final char firstLetter = CUIDv2.ALPHABET_ARRAY[safeAbs((int) (Common.nextFloatValue() * CUIDv2.ALPHABET_ARRAY.length))];
7070
final String hash = CUIDv2.computeHash(
7171
time + CUIDv2.createEntropy(length) + CUIDv2.nextCounterValue() + Common.MACHINE_FINGERPRINT,
7272
length);
@@ -276,12 +276,10 @@ private static synchronized int nextCounterValue() {
276276
*/
277277
private static String createEntropy(final int length) {
278278

279-
int primeNumber;
280279
final StringBuilder stringBuilder = new StringBuilder(length);
281280

282281
while (stringBuilder.length() < length) {
283-
primeNumber = PRIME_NUMBER_ARRAY[safeAbs(Common.nextIntValue()) % PRIME_NUMBER_ARRAY.length];
284-
stringBuilder.append(Integer.toString(primeNumber * Common.nextIntValue(), NUMBER_BASE));
282+
stringBuilder.append(Integer.toString(Common.nextIntValue() * NUMBER_BASE, NUMBER_BASE));
285283
}
286284

287285
return stringBuilder.toString();
@@ -337,6 +335,17 @@ private static synchronized int nextIntValue() {
337335
| (Common.RANDOM_BUFFER[randomBufferIndex++] & 0xff);
338336
}
339337

338+
/**
339+
* Retrieves next random floating value.
340+
*
341+
* @return A random floating number (between `0.0` and `1.0`)
342+
* @since 2.0.5
343+
*/
344+
private static float nextFloatValue() {
345+
346+
return NUMBER_GENERATOR.nextFloat();
347+
}
348+
340349
/**
341350
* Pads string with leading zero.
342351
*

0 commit comments

Comments
 (0)