aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/ramsey/uuid/src/Provider/Node/RandomNodeProvider.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/ramsey/uuid/src/Provider/Node/RandomNodeProvider.php')
-rw-r--r--vendor/ramsey/uuid/src/Provider/Node/RandomNodeProvider.php23
1 files changed, 19 insertions, 4 deletions
diff --git a/vendor/ramsey/uuid/src/Provider/Node/RandomNodeProvider.php b/vendor/ramsey/uuid/src/Provider/Node/RandomNodeProvider.php
index 76c570d7f..79ec63cb8 100644
--- a/vendor/ramsey/uuid/src/Provider/Node/RandomNodeProvider.php
+++ b/vendor/ramsey/uuid/src/Provider/Node/RandomNodeProvider.php
@@ -14,6 +14,7 @@
namespace Ramsey\Uuid\Provider\Node;
+use Exception;
use Ramsey\Uuid\Provider\NodeProviderInterface;
/**
@@ -28,15 +29,29 @@ class RandomNodeProvider implements NodeProviderInterface
* Returns the system node ID
*
* @return string System node ID as a hexadecimal string
- * @throws \Exception if it was not possible to gather sufficient entropy
+ * @throws Exception if it was not possible to gather sufficient entropy
*/
public function getNode()
{
- $node = hexdec(bin2hex(random_bytes(6)));
+ $nodeBytes = random_bytes(6);
+
+ // Split the node bytes for math on 32-bit systems.
+ $nodeMsb = substr($nodeBytes, 0, 3);
+ $nodeLsb = substr($nodeBytes, 3);
// Set the multicast bit; see RFC 4122, section 4.5.
- $node = $node | 0x010000000000;
+ $nodeMsb = hex2bin(
+ str_pad(
+ dechex(hexdec(bin2hex($nodeMsb)) | 0x010000),
+ 6,
+ '0',
+ STR_PAD_LEFT
+ )
+ );
+
+ // Recombine the node bytes.
+ $node = $nodeMsb . $nodeLsb;
- return str_pad(dechex($node), 12, '0', STR_PAD_LEFT);
+ return str_pad(bin2hex($node), 12, '0', STR_PAD_LEFT);
}
}