Software /
code /
prosody
Annotate
util/uuid.lua @ 5915:e6fed1d80116
Back out 1b0ac7950129, as SSLv3 appears to still be in moderate use on the network. Also, although obsolete, SSLv3 isn't documented to have any weaknesses that TLS 1.0 (the most common version used today) doesn't also have. Get your act together clients!
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Tue, 12 Nov 2013 02:13:01 +0000 |
parent | 2957:805b067cd13e |
child | 5776:bd0ff8ae98a8 |
child | 7010:001b3cff4ed8 |
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 |
519
cccd610a0ef9
Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents:
145
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 |
cccd610a0ef9
Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents:
145
diff
changeset
|
9 |
44
80d2ade0fd69
Add "uuid" library and make sessionmanager use this.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
10 local m_random = math.random; |
762
5ae018c016ba
util.uuid: Return a string, not a number. Looked so innocent.
Matthew Wild <mwild1@gmail.com>
parents:
760
diff
changeset
|
11 local tostring = tostring; |
1302
4561c6d95339
util.uuid: More uniqueness!
Waqas Hussain <waqas20@gmail.com>
parents:
896
diff
changeset
|
12 local os_time = os.time; |
4561c6d95339
util.uuid: More uniqueness!
Waqas Hussain <waqas20@gmail.com>
parents:
896
diff
changeset
|
13 local os_clock = os.clock; |
4561c6d95339
util.uuid: More uniqueness!
Waqas Hussain <waqas20@gmail.com>
parents:
896
diff
changeset
|
14 local sha1 = require "util.hashes".sha1; |
4561c6d95339
util.uuid: More uniqueness!
Waqas Hussain <waqas20@gmail.com>
parents:
896
diff
changeset
|
15 |
44
80d2ade0fd69
Add "uuid" library and make sessionmanager use this.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
16 module "uuid" |
80d2ade0fd69
Add "uuid" library and make sessionmanager use this.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
17 |
1302
4561c6d95339
util.uuid: More uniqueness!
Waqas Hussain <waqas20@gmail.com>
parents:
896
diff
changeset
|
18 local last_uniq_time = 0; |
4561c6d95339
util.uuid: More uniqueness!
Waqas Hussain <waqas20@gmail.com>
parents:
896
diff
changeset
|
19 local function uniq_time() |
4561c6d95339
util.uuid: More uniqueness!
Waqas Hussain <waqas20@gmail.com>
parents:
896
diff
changeset
|
20 local new_uniq_time = os_time(); |
4561c6d95339
util.uuid: More uniqueness!
Waqas Hussain <waqas20@gmail.com>
parents:
896
diff
changeset
|
21 if last_uniq_time >= new_uniq_time then new_uniq_time = last_uniq_time + 1; end |
4561c6d95339
util.uuid: More uniqueness!
Waqas Hussain <waqas20@gmail.com>
parents:
896
diff
changeset
|
22 last_uniq_time = new_uniq_time; |
4561c6d95339
util.uuid: More uniqueness!
Waqas Hussain <waqas20@gmail.com>
parents:
896
diff
changeset
|
23 return new_uniq_time; |
44
80d2ade0fd69
Add "uuid" library and make sessionmanager use this.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
24 end |
80d2ade0fd69
Add "uuid" library and make sessionmanager use this.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
25 |
1302
4561c6d95339
util.uuid: More uniqueness!
Waqas Hussain <waqas20@gmail.com>
parents:
896
diff
changeset
|
26 local function new_random(x) |
4561c6d95339
util.uuid: More uniqueness!
Waqas Hussain <waqas20@gmail.com>
parents:
896
diff
changeset
|
27 return sha1(x..os_clock()..tostring({}), true); |
4561c6d95339
util.uuid: More uniqueness!
Waqas Hussain <waqas20@gmail.com>
parents:
896
diff
changeset
|
28 end |
4561c6d95339
util.uuid: More uniqueness!
Waqas Hussain <waqas20@gmail.com>
parents:
896
diff
changeset
|
29 |
1303
2170e2c0d57a
util.uuid: Now generates RFC 4122 complaint UUIDs (version 4 - random)
Waqas Hussain <waqas20@gmail.com>
parents:
1302
diff
changeset
|
30 local buffer = new_random(uniq_time()); |
1304
0a49759464e0
util.uuid: Added function seed(string) to allow further seeding of the PRNG
Waqas Hussain <waqas20@gmail.com>
parents:
1303
diff
changeset
|
31 local function _seed(x) |
0a49759464e0
util.uuid: Added function seed(string) to allow further seeding of the PRNG
Waqas Hussain <waqas20@gmail.com>
parents:
1303
diff
changeset
|
32 buffer = new_random(buffer..x); |
0a49759464e0
util.uuid: Added function seed(string) to allow further seeding of the PRNG
Waqas Hussain <waqas20@gmail.com>
parents:
1303
diff
changeset
|
33 end |
1303
2170e2c0d57a
util.uuid: Now generates RFC 4122 complaint UUIDs (version 4 - random)
Waqas Hussain <waqas20@gmail.com>
parents:
1302
diff
changeset
|
34 local function get_nibbles(n) |
2957
805b067cd13e
util.uuid: Use a local instead of a global.
Waqas Hussain <waqas20@gmail.com>
parents:
2923
diff
changeset
|
35 if #buffer < n then _seed(uniq_time()); end |
1303
2170e2c0d57a
util.uuid: Now generates RFC 4122 complaint UUIDs (version 4 - random)
Waqas Hussain <waqas20@gmail.com>
parents:
1302
diff
changeset
|
36 local r = buffer:sub(0, n); |
2170e2c0d57a
util.uuid: Now generates RFC 4122 complaint UUIDs (version 4 - random)
Waqas Hussain <waqas20@gmail.com>
parents:
1302
diff
changeset
|
37 buffer = buffer:sub(n+1); |
2170e2c0d57a
util.uuid: Now generates RFC 4122 complaint UUIDs (version 4 - random)
Waqas Hussain <waqas20@gmail.com>
parents:
1302
diff
changeset
|
38 return r; |
2170e2c0d57a
util.uuid: Now generates RFC 4122 complaint UUIDs (version 4 - random)
Waqas Hussain <waqas20@gmail.com>
parents:
1302
diff
changeset
|
39 end |
2170e2c0d57a
util.uuid: Now generates RFC 4122 complaint UUIDs (version 4 - random)
Waqas Hussain <waqas20@gmail.com>
parents:
1302
diff
changeset
|
40 local function get_twobits() |
2170e2c0d57a
util.uuid: Now generates RFC 4122 complaint UUIDs (version 4 - random)
Waqas Hussain <waqas20@gmail.com>
parents:
1302
diff
changeset
|
41 return ("%x"):format(get_nibbles(1):byte() % 4 + 8); |
2170e2c0d57a
util.uuid: Now generates RFC 4122 complaint UUIDs (version 4 - random)
Waqas Hussain <waqas20@gmail.com>
parents:
1302
diff
changeset
|
42 end |
2170e2c0d57a
util.uuid: Now generates RFC 4122 complaint UUIDs (version 4 - random)
Waqas Hussain <waqas20@gmail.com>
parents:
1302
diff
changeset
|
43 |
1302
4561c6d95339
util.uuid: More uniqueness!
Waqas Hussain <waqas20@gmail.com>
parents:
896
diff
changeset
|
44 function generate() |
1303
2170e2c0d57a
util.uuid: Now generates RFC 4122 complaint UUIDs (version 4 - random)
Waqas Hussain <waqas20@gmail.com>
parents:
1302
diff
changeset
|
45 -- 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
|
46 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
|
47 end |
1304
0a49759464e0
util.uuid: Added function seed(string) to allow further seeding of the PRNG
Waqas Hussain <waqas20@gmail.com>
parents:
1303
diff
changeset
|
48 seed = _seed; |
1302
4561c6d95339
util.uuid: More uniqueness!
Waqas Hussain <waqas20@gmail.com>
parents:
896
diff
changeset
|
49 |
4561c6d95339
util.uuid: More uniqueness!
Waqas Hussain <waqas20@gmail.com>
parents:
896
diff
changeset
|
50 return _M; |