Skip to content

Commit b1d3efc

Browse files
committed
crypto: update randomUUIDv7() to construct UUID string directly from bytes
1 parent 65936c9 commit b1d3efc

File tree

1 file changed

+28
-8
lines changed

1 file changed

+28
-8
lines changed

lib/internal/crypto/random.js

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ const {
1414
DateNow,
1515
FunctionPrototypeBind,
1616
FunctionPrototypeCall,
17+
MathFloor,
1718
MathMin,
1819
NumberIsNaN,
1920
NumberIsSafeInteger,
@@ -433,19 +434,38 @@ function randomUUIDv7() {
433434
randomFillSync(uuidV7Buffer);
434435

435436
const now = DateNow();
436-
uuidV7Buffer[0] = (now / 0x10000000000) & 0xff;
437-
uuidV7Buffer[1] = (now / 0x100000000) & 0xff;
438-
uuidV7Buffer[2] = (now / 0x1000000) & 0xff;
439-
uuidV7Buffer[3] = (now / 0x10000) & 0xff;
440-
uuidV7Buffer[4] = (now / 0x100) & 0xff;
437+
uuidV7Buffer[0] = MathFloor(now / 0x10000000000) & 0xff;
438+
uuidV7Buffer[1] = MathFloor(now / 0x100000000) & 0xff;
439+
uuidV7Buffer[2] = MathFloor(now / 0x1000000) & 0xff;
440+
uuidV7Buffer[3] = MathFloor(now / 0x10000) & 0xff;
441+
uuidV7Buffer[4] = MathFloor(now / 0x100) & 0xff;
441442
uuidV7Buffer[5] = now & 0xff;
442443

443444
uuidV7Buffer[6] = (uuidV7Buffer[6] & 0x0f) | 0x70;
444445

445446
uuidV7Buffer[8] = (uuidV7Buffer[8] & 0x3f) | 0x80;
446-
447-
const result = serializeUUID(uuidV7Buffer);
448-
return result;
447+
448+
const kHexBytes = getHexBytes();
449+
return kHexBytes[uuidV7Buffer[0]] +
450+
kHexBytes[uuidV7Buffer[1]] +
451+
kHexBytes[uuidV7Buffer[2]] +
452+
kHexBytes[uuidV7Buffer[3]] +
453+
'-' +
454+
kHexBytes[uuidV7Buffer[4]] +
455+
kHexBytes[uuidV7Buffer[5]] +
456+
'-' +
457+
kHexBytes[uuidV7Buffer[6]] +
458+
kHexBytes[uuidV7Buffer[7]] +
459+
'-' +
460+
kHexBytes[uuidV7Buffer[8]] +
461+
kHexBytes[uuidV7Buffer[9]] +
462+
'-' +
463+
kHexBytes[uuidV7Buffer[10]] +
464+
kHexBytes[uuidV7Buffer[11]] +
465+
kHexBytes[uuidV7Buffer[12]] +
466+
kHexBytes[uuidV7Buffer[13]] +
467+
kHexBytes[uuidV7Buffer[14]] +
468+
kHexBytes[uuidV7Buffer[15]];
449469
}
450470

451471
function createRandomPrimeJob(type, size, options) {

0 commit comments

Comments
 (0)