~canonical-sysadmins/wordpress/5.1

« back to all changes in this revision

Viewing changes to wp-includes/random_compat/random_bytes_mcrypt.php

  • Committer: Barry Price
  • Date: 2019-02-22 03:51:26 UTC
  • mfrom: (1.2.12 upstream)
  • Revision ID: barry.price@canonical.com-20190222035126-o28k38qs8jfyjsxt
Merge WP5.1 from upstream

Show diffs side-by-side

added added

removed removed

Lines of Context:
4
4
 * for using the new PHP 7 random_* API in PHP 5 projects
5
5
 * 
6
6
 * The MIT License (MIT)
7
 
 * 
8
 
 * Copyright (c) 2015 Paragon Initiative Enterprises
 
7
 *
 
8
 * Copyright (c) 2015 - 2017 Paragon Initiative Enterprises
9
9
 * 
10
10
 * Permission is hereby granted, free of charge, to any person obtaining a copy
11
11
 * of this software and associated documentation files (the "Software"), to deal
26
26
 * SOFTWARE.
27
27
 */
28
28
 
29
 
 
30
 
if ( ! is_callable( 'random_bytes' ) ):
31
 
/**
32
 
 * Powered by ext/mcrypt (and thankfully NOT libmcrypt)
33
 
 * 
34
 
 * @ref https://bugs.php.net/bug.php?id=55169
35
 
 * @ref https://github.com/php/php-src/blob/c568ffe5171d942161fc8dda066bce844bdef676/ext/mcrypt/mcrypt.c#L1321-L1386
36
 
 * 
37
 
 * @param int $bytes
38
 
 * 
39
 
 * @throws Exception
40
 
 * 
41
 
 * @return string
42
 
 */
43
 
function random_bytes($bytes)
44
 
{
45
 
    try {
46
 
        $bytes = RandomCompat_intval($bytes);
47
 
    } catch (TypeError $ex) {
48
 
        throw new TypeError(
49
 
            'random_bytes(): $bytes must be an integer'
50
 
        );
51
 
    }
52
 
 
53
 
    if ($bytes < 1) {
54
 
        throw new Error(
55
 
            'Length must be greater than 0'
56
 
        );
57
 
    }
58
 
 
59
 
    $buf = @mcrypt_create_iv($bytes, MCRYPT_DEV_URANDOM);
60
 
    if (
61
 
        $buf !== false
62
 
        &&
63
 
        RandomCompat_strlen($buf) === $bytes
64
 
    ) {
 
29
if (!is_callable('random_bytes')) {
 
30
    /**
 
31
     * Powered by ext/mcrypt (and thankfully NOT libmcrypt)
 
32
     *
 
33
     * @ref https://bugs.php.net/bug.php?id=55169
 
34
     * @ref https://github.com/php/php-src/blob/c568ffe5171d942161fc8dda066bce844bdef676/ext/mcrypt/mcrypt.c#L1321-L1386
 
35
     *
 
36
     * @param int $bytes
 
37
     *
 
38
     * @throws Exception
 
39
     *
 
40
     * @return string
 
41
     */
 
42
    function random_bytes($bytes)
 
43
    {
 
44
        try {
 
45
            $bytes = RandomCompat_intval($bytes);
 
46
        } catch (TypeError $ex) {
 
47
            throw new TypeError(
 
48
                'random_bytes(): $bytes must be an integer'
 
49
            );
 
50
        }
 
51
 
 
52
        if ($bytes < 1) {
 
53
            throw new Error(
 
54
                'Length must be greater than 0'
 
55
            );
 
56
        }
 
57
 
 
58
        $buf = @mcrypt_create_iv($bytes, MCRYPT_DEV_URANDOM);
 
59
        if (
 
60
            $buf !== false
 
61
            &&
 
62
            RandomCompat_strlen($buf) === $bytes
 
63
        ) {
 
64
            /**
 
65
             * Return our random entropy buffer here:
 
66
             */
 
67
            return $buf;
 
68
        }
 
69
 
65
70
        /**
66
 
         * Return our random entropy buffer here:
 
71
         * If we reach here, PHP has failed us.
67
72
         */
68
 
        return $buf;
 
73
        throw new Exception(
 
74
            'Could not gather sufficient random data'
 
75
        );
69
76
    }
70
 
 
71
 
    /**
72
 
     * If we reach here, PHP has failed us.
73
 
     */
74
 
    throw new Exception(
75
 
        'Could not gather sufficient random data'
76
 
    );
77
77
}
78
 
endif;