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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
b1885732e979 GPL->MIT!
Matthew Wild <mwild1@gmail.com>
parents: 615
diff changeset
5 -- This project is MIT/X11 licensed. Please see the
b1885732e979 GPL->MIT!
Matthew Wild <mwild1@gmail.com>
parents: 615
diff changeset
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;