comparison vendor/paragonie/random_compat/lib/random_bytes_com_dotnet.php @ 16:c2387f117808

Routine composer update
author Chris Cannam
date Tue, 10 Jul 2018 15:07:59 +0100
parents 4c8ae668cc8c
children 129ea1e6d783
comparison
equal deleted inserted replaced
15:e200cb7efeb3 16:c2387f117808
3 * Random_* Compatibility Library 3 * Random_* Compatibility Library
4 * for using the new PHP 7 random_* API in PHP 5 projects 4 * for using the new PHP 7 random_* API in PHP 5 projects
5 * 5 *
6 * The MIT License (MIT) 6 * The MIT License (MIT)
7 * 7 *
8 * Copyright (c) 2015 - 2017 Paragon Initiative Enterprises 8 * Copyright (c) 2015 - 2018 Paragon Initiative Enterprises
9 * 9 *
10 * Permission is hereby granted, free of charge, to any person obtaining a copy 10 * Permission is hereby granted, free of charge, to any person obtaining a copy
11 * of this software and associated documentation files (the "Software"), to deal 11 * of this software and associated documentation files (the "Software"), to deal
12 * in the Software without restriction, including without limitation the rights 12 * in the Software without restriction, including without limitation the rights
13 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 13 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
39 * @return string 39 * @return string
40 */ 40 */
41 function random_bytes($bytes) 41 function random_bytes($bytes)
42 { 42 {
43 try { 43 try {
44 /** @var int $bytes */
44 $bytes = RandomCompat_intval($bytes); 45 $bytes = RandomCompat_intval($bytes);
45 } catch (TypeError $ex) { 46 } catch (TypeError $ex) {
46 throw new TypeError( 47 throw new TypeError(
47 'random_bytes(): $bytes must be an integer' 48 'random_bytes(): $bytes must be an integer'
48 ); 49 );
52 throw new Error( 53 throw new Error(
53 'Length must be greater than 0' 54 'Length must be greater than 0'
54 ); 55 );
55 } 56 }
56 57
58 /** @var string $buf */
57 $buf = ''; 59 $buf = '';
58 if (!class_exists('COM')) { 60 if (!class_exists('COM')) {
59 throw new Error( 61 throw new Error(
60 'COM does not exist' 62 'COM does not exist'
61 ); 63 );
62 } 64 }
65 /** @var COM $util */
63 $util = new COM('CAPICOM.Utilities.1'); 66 $util = new COM('CAPICOM.Utilities.1');
64 $execCount = 0; 67 $execCount = 0;
65 68
66 /** 69 /**
67 * Let's not let it loop forever. If we run N times and fail to 70 * Let's not let it loop forever. If we run N times and fail to
68 * get N bytes of random data, then CAPICOM has failed us. 71 * get N bytes of random data, then CAPICOM has failed us.
69 */ 72 */
70 do { 73 do {
71 $buf .= base64_decode($util->GetRandom($bytes, 0)); 74 $buf .= base64_decode((string) $util->GetRandom($bytes, 0));
72 if (RandomCompat_strlen($buf) >= $bytes) { 75 if (RandomCompat_strlen($buf) >= $bytes) {
73 /** 76 /**
74 * Return our random entropy buffer here: 77 * Return our random entropy buffer here:
75 */ 78 */
76 return RandomCompat_substr($buf, 0, $bytes); 79 return (string) RandomCompat_substr($buf, 0, $bytes);
77 } 80 }
78 ++$execCount; 81 ++$execCount;
79 } while ($execCount < $bytes); 82 } while ($execCount < $bytes);
80 83
81 /** 84 /**