Software /
code /
prosody
File
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 |
line wrap: on
line source
-- Prosody IM -- Copyright (C) 2008-2010 Matthew Wild -- Copyright (C) 2008-2010 Waqas Hussain -- -- This project is MIT/X11 licensed. Please see the -- COPYING file in the source package for more information. -- local m_random = math.random; local tostring = tostring; local os_time = os.time; local os_clock = os.clock; local sha1 = require "util.hashes".sha1; module "uuid" local last_uniq_time = 0; local function uniq_time() local new_uniq_time = os_time(); if last_uniq_time >= new_uniq_time then new_uniq_time = last_uniq_time + 1; end last_uniq_time = new_uniq_time; return new_uniq_time; end local function new_random(x) return sha1(x..os_clock()..tostring({}), true); end local buffer = new_random(uniq_time()); local function _seed(x) buffer = new_random(buffer..x); end local function get_nibbles(n) if #buffer < n then _seed(uniq_time()); end local r = buffer:sub(0, n); buffer = buffer:sub(n+1); return r; end local function get_twobits() return ("%x"):format(get_nibbles(1):byte() % 4 + 8); end function generate() -- generate RFC 4122 complaint UUIDs (version 4 - random) return get_nibbles(8).."-"..get_nibbles(4).."-4"..get_nibbles(3).."-"..(get_twobits())..get_nibbles(3).."-"..get_nibbles(12); end seed = _seed; return _M;