Add simpleid-1.0.5
diff --git a/simpleid/www/random.inc.php b/simpleid/www/random.inc.php
new file mode 100644
index 0000000..efee496
--- /dev/null
+++ b/simpleid/www/random.inc.php
@@ -0,0 +1,107 @@
+<?php
+/*
+ * SimpleID
+ *
+ * Copyright (C) Kelvin Mo 2010
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * 
+ * $Id$
+ */
+
+/**
+ * Functions related to generating random bits and unique values.
+ *
+ * @package simpleid
+ * @since 0.8
+ * @filesource
+ */
+
+if (!defined('SIMPLEID_RAND_SOURCE')) {
+    /**
+     * The source of random bits.  On Unix-like systems, this could be /dev/random
+     * or /dev/urandom
+     */
+    define('SIMPLEID_RAND_SOURCE', '/dev/urandom');
+}
+
+/**
+ * Obtains a number of random bytes.  This function uses an entropy source specified
+ * in SIMPLEID_RAND_SOURCE.  If SIMPLEID_RAND_SOURCE is not available, the mt_rand()
+ * PHP function is used
+ * If the native PHP random_bytes function exists (PHP 7+), this function won't be defined here.
+ *
+ * @param int $num_bytes the number of bytes to generate
+ * @return string a string containing random bytes
+ */
+if(!function_exists('random_bytes')) {
+    function random_bytes($num_bytes) {
+        static $f = null;
+        $bytes = '';
+        if ($f === null) {
+            if (SIMPLEID_RAND_SOURCE === null) {
+                $f = FALSE;
+            } else {
+                $f = @fopen(SIMPLEID_RAND_SOURCE, "r");
+            }
+        }
+        if ($f === FALSE) {
+            $bytes = '';
+            for ($i = 0; $i < $num_bytes; $i += 4) {
+                $bytes .= pack('L', mt_rand());
+            }
+            $bytes = substr($bytes, 0, $num_bytes);
+        } else {
+            $bytes = fread($f, $num_bytes);
+        }
+        return $bytes;
+    }
+}
+
+/**
+ * Obtains a random string of a specified number of bytes of entropy.
+ *
+ * The function calls the {@link random_bytes()} function with the specified
+ * number of bytes, then converts to a string containing only alphanumeric
+ * characters (case sensitive), plus the characters ., _ and -.
+ *
+ * The conversion method is based on the Base64 encoding.  However, non-standard
+ * characters are used so that users are not confused and attempt to decode
+ * the returned string.
+ *
+ * @param int $num_bytes the approximate number of bytes of entropy in the
+ * random string
+ * @return string the random string
+ */
+function random_secret($num_bytes = 32) {
+    return strtr(base64_encode(random_bytes($num_bytes)),
+        'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=',
+        '-_.9876543210zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA');
+}
+
+/**
+ * Generates a relatively unique identifier which can be used as, among other things,
+ * an OpenID association handle or an OAuth client identifier.  The identifier
+ * returned is at least 24 characters long and contains only hexadecimal characters.
+ *
+ * Note that the identifier returned is not cryptographically secure.
+ *
+ * @return string a relatively unique identifier
+ */
+function random_id() {
+    $timeofday = gettimeofday();
+    return vsprintf('%08x%08x', $timeofday) . bin2hex(random_bytes(4));
+}
+?>