Mercurial > prosody-hg
annotate util/uuid.lua @ 14201:f156a90eff97 13.0
Added tag 13.0.6 for changeset 8eac8de97bca
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Wed, 27 May 2026 14:56:59 +0100 |
| parents | dab1a4002cb5 |
| children |
| rev | line source |
|---|---|
|
1523
841d61be198f
Remove version number from copyright headers
Matthew Wild <mwild1@gmail.com>
parents:
1304
diff
changeset
|
1 -- Prosody IM |
|
2923
b7049746bd29
Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents:
1523
diff
changeset
|
2 -- Copyright (C) 2008-2010 Matthew Wild |
|
b7049746bd29
Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents:
1523
diff
changeset
|
3 -- Copyright (C) 2008-2010 Waqas Hussain |
|
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
2957
diff
changeset
|
4 -- |
| 758 | 5 -- This project is MIT/X11 licensed. Please see the |
| 6 -- COPYING file in the source package for more information. | |
|
519
cccd610a0ef9
Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents:
145
diff
changeset
|
7 -- |
|
cccd610a0ef9
Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents:
145
diff
changeset
|
8 |
|
12975
d10957394a3c
util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12355
diff
changeset
|
9 local random = require "prosody.util.random"; |
|
6377
50e5aed4eeea
util.uuid: Use util.hex and util.random
Matthew Wild <mwild1@gmail.com>
parents:
5776
diff
changeset
|
10 local random_bytes = random.bytes; |
| 13317 | 11 local time = require "prosody.util.time"; |
|
12975
d10957394a3c
util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12355
diff
changeset
|
12 local hex = require "prosody.util.hex".encode; |
|
6377
50e5aed4eeea
util.uuid: Use util.hex and util.random
Matthew Wild <mwild1@gmail.com>
parents:
5776
diff
changeset
|
13 local m_ceil = math.ceil; |
| 13317 | 14 local m_floor = math.floor; |
|
44
80d2ade0fd69
Add "uuid" library and make sessionmanager use this.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
15 |
|
1303
2170e2c0d57a
util.uuid: Now generates RFC 4122 complaint UUIDs (version 4 - random)
Waqas Hussain <waqas20@gmail.com>
parents:
1302
diff
changeset
|
16 local function get_nibbles(n) |
|
6377
50e5aed4eeea
util.uuid: Use util.hex and util.random
Matthew Wild <mwild1@gmail.com>
parents:
5776
diff
changeset
|
17 return hex(random_bytes(m_ceil(n/2))):sub(1, n); |
|
1303
2170e2c0d57a
util.uuid: Now generates RFC 4122 complaint UUIDs (version 4 - random)
Waqas Hussain <waqas20@gmail.com>
parents:
1302
diff
changeset
|
18 end |
|
2170e2c0d57a
util.uuid: Now generates RFC 4122 complaint UUIDs (version 4 - random)
Waqas Hussain <waqas20@gmail.com>
parents:
1302
diff
changeset
|
19 |
|
2170e2c0d57a
util.uuid: Now generates RFC 4122 complaint UUIDs (version 4 - random)
Waqas Hussain <waqas20@gmail.com>
parents:
1302
diff
changeset
|
20 local function get_twobits() |
|
7049
0eee56075901
util.uuid: Take random byte directly instead of the low bits from the ascii value of a hex nibble
Kim Alvefur <zash@zash.se>
parents:
7012
diff
changeset
|
21 return ("%x"):format(random_bytes(1):byte() % 4 + 8); |
|
1303
2170e2c0d57a
util.uuid: Now generates RFC 4122 complaint UUIDs (version 4 - random)
Waqas Hussain <waqas20@gmail.com>
parents:
1302
diff
changeset
|
22 end |
|
2170e2c0d57a
util.uuid: Now generates RFC 4122 complaint UUIDs (version 4 - random)
Waqas Hussain <waqas20@gmail.com>
parents:
1302
diff
changeset
|
23 |
|
6377
50e5aed4eeea
util.uuid: Use util.hex and util.random
Matthew Wild <mwild1@gmail.com>
parents:
5776
diff
changeset
|
24 local function generate() |
|
1303
2170e2c0d57a
util.uuid: Now generates RFC 4122 complaint UUIDs (version 4 - random)
Waqas Hussain <waqas20@gmail.com>
parents:
1302
diff
changeset
|
25 -- generate RFC 4122 complaint UUIDs (version 4 - random) |
|
2170e2c0d57a
util.uuid: Now generates RFC 4122 complaint UUIDs (version 4 - random)
Waqas Hussain <waqas20@gmail.com>
parents:
1302
diff
changeset
|
26 return get_nibbles(8).."-"..get_nibbles(4).."-4"..get_nibbles(3).."-"..(get_twobits())..get_nibbles(3).."-"..get_nibbles(12); |
|
1302
4561c6d95339
util.uuid: More uniqueness!
Waqas Hussain <waqas20@gmail.com>
parents:
896
diff
changeset
|
27 end |
| 7057 | 28 |
| 13317 | 29 local function generate_v7() |
| 30 -- Sortable based on time and random | |
|
13983
837d47c24e3f
util.uuid: Update UUIDv7 to match RFC 9562
Kim Alvefur <zash@zash.se>
parents:
13317
diff
changeset
|
31 -- https://datatracker.ietf.org/doc/html/rfc9562#name-uuid-version-7 |
|
837d47c24e3f
util.uuid: Update UUIDv7 to match RFC 9562
Kim Alvefur <zash@zash.se>
parents:
13317
diff
changeset
|
32 local unix_ts_ms = m_floor(time.now()*1000); |
|
837d47c24e3f
util.uuid: Update UUIDv7 to match RFC 9562
Kim Alvefur <zash@zash.se>
parents:
13317
diff
changeset
|
33 local unix_ts_ms_a = m_floor(unix_ts_ms / 0x10000); |
|
837d47c24e3f
util.uuid: Update UUIDv7 to match RFC 9562
Kim Alvefur <zash@zash.se>
parents:
13317
diff
changeset
|
34 local unix_ts_ms_b = unix_ts_ms % 0x10000; |
|
14035
dab1a4002cb5
util.uuid: Fix padding of group 2 of UUIDv7 to use zeroes
Kim Alvefur <zash@zash.se>
parents:
13983
diff
changeset
|
35 return ("%08x-%04x-7%3s-%1s%3s-%12s"):format(unix_ts_ms_a, unix_ts_ms_b, get_nibbles(3), get_twobits(), get_nibbles(3), get_nibbles(12)); |
| 13317 | 36 end |
| 37 | |
|
6377
50e5aed4eeea
util.uuid: Use util.hex and util.random
Matthew Wild <mwild1@gmail.com>
parents:
5776
diff
changeset
|
38 return { |
| 13317 | 39 v4 = generate; |
| 40 v7 = generate_v7; | |
|
6377
50e5aed4eeea
util.uuid: Use util.hex and util.random
Matthew Wild <mwild1@gmail.com>
parents:
5776
diff
changeset
|
41 get_nibbles=get_nibbles; |
|
50e5aed4eeea
util.uuid: Use util.hex and util.random
Matthew Wild <mwild1@gmail.com>
parents:
5776
diff
changeset
|
42 generate = generate ; |
|
50e5aed4eeea
util.uuid: Use util.hex and util.random
Matthew Wild <mwild1@gmail.com>
parents:
5776
diff
changeset
|
43 -- COMPAT |
|
50e5aed4eeea
util.uuid: Use util.hex and util.random
Matthew Wild <mwild1@gmail.com>
parents:
5776
diff
changeset
|
44 seed = random.seed; |
|
50e5aed4eeea
util.uuid: Use util.hex and util.random
Matthew Wild <mwild1@gmail.com>
parents:
5776
diff
changeset
|
45 }; |
