Annotate

util/random.lua @ 8742:71939a65961e

Merge 0.10->trunk
author Kim Alvefur <zash@zash.se>
date Tue, 10 Apr 2018 20:23:54 +0200
parent 8243:292f61d9d30a
child 10014:5d2f7144fa12
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6376
bd812a7713ad util.random: Generic util lib for generating strings of random bytes
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1 -- Prosody IM
bd812a7713ad util.random: Generic util lib for generating strings of random bytes
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2 -- Copyright (C) 2008-2014 Matthew Wild
bd812a7713ad util.random: Generic util lib for generating strings of random bytes
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3 -- Copyright (C) 2008-2014 Waqas Hussain
bd812a7713ad util.random: Generic util lib for generating strings of random bytes
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4 --
bd812a7713ad util.random: Generic util lib for generating strings of random bytes
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5 -- This project is MIT/X11 licensed. Please see the
bd812a7713ad util.random: Generic util lib for generating strings of random bytes
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6 -- COPYING file in the source package for more information.
bd812a7713ad util.random: Generic util lib for generating strings of random bytes
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7 --
bd812a7713ad util.random: Generic util lib for generating strings of random bytes
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8
7187
3d2c2f0809ee util.crand: C binding to one of OpenSSL, Linux getrandom() or OpenBSD arc4random() CSPRNG
Kim Alvefur <zash@zash.se>
parents: 7114
diff changeset
9 local ok, crand = pcall(require, "util.crand");
3d2c2f0809ee util.crand: C binding to one of OpenSSL, Linux getrandom() or OpenBSD arc4random() CSPRNG
Kim Alvefur <zash@zash.se>
parents: 7114
diff changeset
10 if ok then return crand; end
3d2c2f0809ee util.crand: C binding to one of OpenSSL, Linux getrandom() or OpenBSD arc4random() CSPRNG
Kim Alvefur <zash@zash.se>
parents: 7114
diff changeset
11
7114
51cf09bb74eb util.random: Restore friendlier error from 0.9/util.uuid
Kim Alvefur <zash@zash.se>
parents: 7083
diff changeset
12 local urandom, urandom_err = io.open("/dev/urandom", "r");
6376
bd812a7713ad util.random: Generic util lib for generating strings of random bytes
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
13
bd812a7713ad util.random: Generic util lib for generating strings of random bytes
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
14 local function bytes(n)
7050
ae044691de0f util.random: Use /dev/urandom
Kim Alvefur <zash@zash.se>
parents: 6421
diff changeset
15 return urandom:read(n);
6376
bd812a7713ad util.random: Generic util lib for generating strings of random bytes
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
16 end
bd812a7713ad util.random: Generic util lib for generating strings of random bytes
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
17
7114
51cf09bb74eb util.random: Restore friendlier error from 0.9/util.uuid
Kim Alvefur <zash@zash.se>
parents: 7083
diff changeset
18 if not urandom then
51cf09bb74eb util.random: Restore friendlier error from 0.9/util.uuid
Kim Alvefur <zash@zash.se>
parents: 7083
diff changeset
19 function bytes()
51cf09bb74eb util.random: Restore friendlier error from 0.9/util.uuid
Kim Alvefur <zash@zash.se>
parents: 7083
diff changeset
20 error("Unable to obtain a secure random number generator, please see https://prosody.im/doc/random ("..urandom_err..")");
51cf09bb74eb util.random: Restore friendlier error from 0.9/util.uuid
Kim Alvefur <zash@zash.se>
parents: 7083
diff changeset
21 end
51cf09bb74eb util.random: Restore friendlier error from 0.9/util.uuid
Kim Alvefur <zash@zash.se>
parents: 7083
diff changeset
22 end
51cf09bb74eb util.random: Restore friendlier error from 0.9/util.uuid
Kim Alvefur <zash@zash.se>
parents: 7083
diff changeset
23
6376
bd812a7713ad util.random: Generic util lib for generating strings of random bytes
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
24 return {
bd812a7713ad util.random: Generic util lib for generating strings of random bytes
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
25 bytes = bytes;
8242
177873dc9cf3 util.random: Add a _source field to match util.crand
Kim Alvefur <zash@zash.se>
parents: 7187
diff changeset
26 _source = "/dev/urandom";
6376
bd812a7713ad util.random: Generic util lib for generating strings of random bytes
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
27 };