util/uuid.lua

Mon, 04 Jan 2016 17:03:19 +0000

author
Matthew Wild <mwild1@gmail.com>
date
Mon, 04 Jan 2016 17:03:19 +0000
changeset 18
8050134f35b3
parent 9
7da8b3c95bb1
permissions
-rw-r--r--

clients: Include request in the new-client event

9
7da8b3c95bb1 Add and remove missing/deleted files
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1 -- Prosody IM
7da8b3c95bb1 Add and remove missing/deleted files
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2 -- Copyright (C) 2008-2010 Matthew Wild
7da8b3c95bb1 Add and remove missing/deleted files
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3 -- Copyright (C) 2008-2010 Waqas Hussain
7da8b3c95bb1 Add and remove missing/deleted files
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4 --
7da8b3c95bb1 Add and remove missing/deleted files
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5 -- This project is MIT/X11 licensed. Please see the
7da8b3c95bb1 Add and remove missing/deleted files
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6 -- COPYING file in the source package for more information.
7da8b3c95bb1 Add and remove missing/deleted files
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7 --
7da8b3c95bb1 Add and remove missing/deleted files
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8
7da8b3c95bb1 Add and remove missing/deleted files
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9 local random = require "util.random";
7da8b3c95bb1 Add and remove missing/deleted files
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10 local random_bytes = random.bytes;
7da8b3c95bb1 Add and remove missing/deleted files
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11 local hex = require "util.hex".to;
7da8b3c95bb1 Add and remove missing/deleted files
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
12 local m_ceil = math.ceil;
7da8b3c95bb1 Add and remove missing/deleted files
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
13
7da8b3c95bb1 Add and remove missing/deleted files
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
14 local function get_nibbles(n)
7da8b3c95bb1 Add and remove missing/deleted files
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
15 return hex(random_bytes(m_ceil(n/2))):sub(1, n);
7da8b3c95bb1 Add and remove missing/deleted files
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
16 end
7da8b3c95bb1 Add and remove missing/deleted files
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
17
7da8b3c95bb1 Add and remove missing/deleted files
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
18 local function get_twobits()
7da8b3c95bb1 Add and remove missing/deleted files
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
19 return ("%x"):format(get_nibbles(1):byte() % 4 + 8);
7da8b3c95bb1 Add and remove missing/deleted files
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
20 end
7da8b3c95bb1 Add and remove missing/deleted files
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
21
7da8b3c95bb1 Add and remove missing/deleted files
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
22 local function generate()
7da8b3c95bb1 Add and remove missing/deleted files
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
23 -- generate RFC 4122 complaint UUIDs (version 4 - random)
7da8b3c95bb1 Add and remove missing/deleted files
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
24 return get_nibbles(8).."-"..get_nibbles(4).."-4"..get_nibbles(3).."-"..(get_twobits())..get_nibbles(3).."-"..get_nibbles(12);
7da8b3c95bb1 Add and remove missing/deleted files
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
25 end
7da8b3c95bb1 Add and remove missing/deleted files
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
26
7da8b3c95bb1 Add and remove missing/deleted files
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
27 return {
7da8b3c95bb1 Add and remove missing/deleted files
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
28 get_nibbles=get_nibbles;
7da8b3c95bb1 Add and remove missing/deleted files
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
29 generate = generate ;
7da8b3c95bb1 Add and remove missing/deleted files
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
30 -- COMPAT
7da8b3c95bb1 Add and remove missing/deleted files
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
31 seed = random.seed;
7da8b3c95bb1 Add and remove missing/deleted files
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
32 };

mercurial