summaryrefslogtreecommitdiffstats
path: root/vendor/ramsey/uuid/src/Provider
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/ramsey/uuid/src/Provider')
-rw-r--r--vendor/ramsey/uuid/src/Provider/Dce/SystemDceSecurityProvider.php234
-rw-r--r--vendor/ramsey/uuid/src/Provider/DceSecurityProviderInterface.php41
-rw-r--r--vendor/ramsey/uuid/src/Provider/Node/FallbackNodeProvider.php60
-rw-r--r--vendor/ramsey/uuid/src/Provider/Node/NodeProviderCollection.php61
-rw-r--r--vendor/ramsey/uuid/src/Provider/Node/RandomNodeProvider.php69
-rw-r--r--vendor/ramsey/uuid/src/Provider/Node/StaticNodeProvider.php76
-rw-r--r--vendor/ramsey/uuid/src/Provider/Node/SystemNodeProvider.php173
-rw-r--r--vendor/ramsey/uuid/src/Provider/NodeProviderInterface.php30
-rw-r--r--vendor/ramsey/uuid/src/Provider/Time/FixedTimeProvider.php63
-rw-r--r--vendor/ramsey/uuid/src/Provider/Time/SystemTimeProvider.php33
-rw-r--r--vendor/ramsey/uuid/src/Provider/TimeProviderInterface.php28
11 files changed, 868 insertions, 0 deletions
diff --git a/vendor/ramsey/uuid/src/Provider/Dce/SystemDceSecurityProvider.php b/vendor/ramsey/uuid/src/Provider/Dce/SystemDceSecurityProvider.php
new file mode 100644
index 0000000..6d6240b
--- /dev/null
+++ b/vendor/ramsey/uuid/src/Provider/Dce/SystemDceSecurityProvider.php
@@ -0,0 +1,234 @@
+<?php
+
+/**
+ * This file is part of the ramsey/uuid library
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>
+ * @license http://opensource.org/licenses/MIT MIT
+ */
+
+declare(strict_types=1);
+
+namespace Ramsey\Uuid\Provider\Dce;
+
+use Ramsey\Uuid\Exception\DceSecurityException;
+use Ramsey\Uuid\Provider\DceSecurityProviderInterface;
+use Ramsey\Uuid\Type\Integer as IntegerObject;
+
+use function escapeshellarg;
+use function preg_split;
+use function str_getcsv;
+use function strpos;
+use function strrpos;
+use function strtolower;
+use function strtoupper;
+use function substr;
+use function trim;
+
+use const PREG_SPLIT_NO_EMPTY;
+
+/**
+ * SystemDceSecurityProvider retrieves the user or group identifiers from the system
+ */
+class SystemDceSecurityProvider implements DceSecurityProviderInterface
+{
+ /**
+ * @throws DceSecurityException if unable to get a user identifier
+ *
+ * @inheritDoc
+ */
+ public function getUid(): IntegerObject
+ {
+ static $uid = null;
+
+ if ($uid instanceof IntegerObject) {
+ return $uid;
+ }
+
+ if ($uid === null) {
+ $uid = $this->getSystemUid();
+ }
+
+ if ($uid === '') {
+ throw new DceSecurityException(
+ 'Unable to get a user identifier using the system DCE '
+ . 'Security provider; please provide a custom identifier or '
+ . 'use a different provider'
+ );
+ }
+
+ $uid = new IntegerObject($uid);
+
+ return $uid;
+ }
+
+ /**
+ * @throws DceSecurityException if unable to get a group identifier
+ *
+ * @inheritDoc
+ */
+ public function getGid(): IntegerObject
+ {
+ static $gid = null;
+
+ if ($gid instanceof IntegerObject) {
+ return $gid;
+ }
+
+ if ($gid === null) {
+ $gid = $this->getSystemGid();
+ }
+
+ if ($gid === '') {
+ throw new DceSecurityException(
+ 'Unable to get a group identifier using the system DCE '
+ . 'Security provider; please provide a custom identifier or '
+ . 'use a different provider'
+ );
+ }
+
+ $gid = new IntegerObject($gid);
+
+ return $gid;
+ }
+
+ /**
+ * Returns the UID from the system
+ */
+ private function getSystemUid(): string
+ {
+ if (!$this->hasShellExec()) {
+ return '';
+ }
+
+ switch ($this->getOs()) {
+ case 'WIN':
+ return $this->getWindowsUid();
+ case 'DAR':
+ case 'FRE':
+ case 'LIN':
+ default:
+ return trim((string) shell_exec('id -u'));
+ }
+ }
+
+ /**
+ * Returns the GID from the system
+ */
+ private function getSystemGid(): string
+ {
+ if (!$this->hasShellExec()) {
+ return '';
+ }
+
+ switch ($this->getOs()) {
+ case 'WIN':
+ return $this->getWindowsGid();
+ case 'DAR':
+ case 'FRE':
+ case 'LIN':
+ default:
+ return trim((string) shell_exec('id -g'));
+ }
+ }
+
+ /**
+ * Returns true if shell_exec() is available for use
+ */
+ private function hasShellExec(): bool
+ {
+ $disabledFunctions = strtolower((string) ini_get('disable_functions'));
+
+ return strpos($disabledFunctions, 'shell_exec') === false;
+ }
+
+ /**
+ * Returns the PHP_OS string
+ */
+ private function getOs(): string
+ {
+ return strtoupper(substr(constant('PHP_OS'), 0, 3));
+ }
+
+ /**
+ * Returns the user identifier for a user on a Windows system
+ *
+ * Windows does not have the same concept as an effective POSIX UID for the
+ * running script. Instead, each user is uniquely identified by an SID
+ * (security identifier). The SID includes three 32-bit unsigned integers
+ * that make up a unique domain identifier, followed by an RID (relative
+ * identifier) that we will use as the UID. The primary caveat is that this
+ * UID may not be unique to the system, since it is, instead, unique to the
+ * domain.
+ *
+ * @link https://www.lifewire.com/what-is-an-sid-number-2626005 What Is an SID Number?
+ * @link https://bit.ly/30vE7NM Well-known SID Structures
+ * @link https://bit.ly/2FWcYKJ Well-known security identifiers in Windows operating systems
+ * @link https://www.windows-commandline.com/get-sid-of-user/ Get SID of user
+ */
+ private function getWindowsUid(): string
+ {
+ $response = shell_exec('whoami /user /fo csv /nh');
+
+ if ($response === null) {
+ return '';
+ }
+
+ $sid = str_getcsv(trim((string) $response))[1] ?? '';
+
+ if (($lastHyphen = strrpos($sid, '-')) === false) {
+ return '';
+ }
+
+ return trim(substr($sid, $lastHyphen + 1));
+ }
+
+ /**
+ * Returns a group identifier for a user on a Windows system
+ *
+ * Since Windows does not have the same concept as an effective POSIX GID
+ * for the running script, we will get the local group memberships for the
+ * user running the script. Then, we will get the SID (security identifier)
+ * for the first group that appears in that list. Finally, we will return
+ * the RID (relative identifier) for the group and use that as the GID.
+ *
+ * @link https://www.windows-commandline.com/list-of-user-groups-command-line/ List of user groups command line
+ */
+ private function getWindowsGid(): string
+ {
+ $response = shell_exec('net user %username% | findstr /b /i "Local Group Memberships"');
+
+ if ($response === null) {
+ return '';
+ }
+
+ /** @var string[] $userGroups */
+ $userGroups = preg_split('/\s{2,}/', (string) $response, -1, PREG_SPLIT_NO_EMPTY);
+
+ $firstGroup = trim($userGroups[1] ?? '', "* \t\n\r\0\x0B");
+
+ if ($firstGroup === '') {
+ return '';
+ }
+
+ $response = shell_exec('wmic group get name,sid | findstr /b /i ' . escapeshellarg($firstGroup));
+
+ if ($response === null) {
+ return '';
+ }
+
+ /** @var string[] $userGroup */
+ $userGroup = preg_split('/\s{2,}/', (string) $response, -1, PREG_SPLIT_NO_EMPTY);
+
+ $sid = $userGroup[1] ?? '';
+
+ if (($lastHyphen = strrpos($sid, '-')) === false) {
+ return '';
+ }
+
+ return trim((string) substr($sid, $lastHyphen + 1));
+ }
+}
diff --git a/vendor/ramsey/uuid/src/Provider/DceSecurityProviderInterface.php b/vendor/ramsey/uuid/src/Provider/DceSecurityProviderInterface.php
new file mode 100644
index 0000000..8325da6
--- /dev/null
+++ b/vendor/ramsey/uuid/src/Provider/DceSecurityProviderInterface.php
@@ -0,0 +1,41 @@
+<?php
+
+/**
+ * This file is part of the ramsey/uuid library
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>
+ * @license http://opensource.org/licenses/MIT MIT
+ */
+
+declare(strict_types=1);
+
+namespace Ramsey\Uuid\Provider;
+
+use Ramsey\Uuid\Rfc4122\UuidV2;
+use Ramsey\Uuid\Type\Integer as IntegerObject;
+
+/**
+ * A DCE provider provides access to local domain identifiers for version 2,
+ * DCE Security, UUIDs
+ *
+ * @see UuidV2
+ */
+interface DceSecurityProviderInterface
+{
+ /**
+ * Returns a user identifier for the system
+ *
+ * @link https://en.wikipedia.org/wiki/User_identifier User identifier
+ */
+ public function getUid(): IntegerObject;
+
+ /**
+ * Returns a group identifier for the system
+ *
+ * @link https://en.wikipedia.org/wiki/Group_identifier Group identifier
+ */
+ public function getGid(): IntegerObject;
+}
diff --git a/vendor/ramsey/uuid/src/Provider/Node/FallbackNodeProvider.php b/vendor/ramsey/uuid/src/Provider/Node/FallbackNodeProvider.php
new file mode 100644
index 0000000..cad0104
--- /dev/null
+++ b/vendor/ramsey/uuid/src/Provider/Node/FallbackNodeProvider.php
@@ -0,0 +1,60 @@
+<?php
+
+/**
+ * This file is part of the ramsey/uuid library
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>
+ * @license http://opensource.org/licenses/MIT MIT
+ */
+
+declare(strict_types=1);
+
+namespace Ramsey\Uuid\Provider\Node;
+
+use Ramsey\Uuid\Exception\NodeException;
+use Ramsey\Uuid\Provider\NodeProviderInterface;
+use Ramsey\Uuid\Type\Hexadecimal;
+
+/**
+ * FallbackNodeProvider retrieves the system node ID by stepping through a list
+ * of providers until a node ID can be obtained
+ */
+class FallbackNodeProvider implements NodeProviderInterface
+{
+ /**
+ * @var NodeProviderCollection
+ */
+ private $nodeProviders;
+
+ /**
+ * @param NodeProviderCollection $providers Array of node providers
+ */
+ public function __construct(NodeProviderCollection $providers)
+ {
+ $this->nodeProviders = $providers;
+ }
+
+ public function getNode(): Hexadecimal
+ {
+ $lastProviderException = null;
+
+ foreach ($this->nodeProviders as $provider) {
+ try {
+ return $provider->getNode();
+ } catch (NodeException $exception) {
+ $lastProviderException = $exception;
+
+ continue;
+ }
+ }
+
+ throw new NodeException(
+ 'Unable to find a suitable node provider',
+ 0,
+ $lastProviderException
+ );
+ }
+}
diff --git a/vendor/ramsey/uuid/src/Provider/Node/NodeProviderCollection.php b/vendor/ramsey/uuid/src/Provider/Node/NodeProviderCollection.php
new file mode 100644
index 0000000..536cb60
--- /dev/null
+++ b/vendor/ramsey/uuid/src/Provider/Node/NodeProviderCollection.php
@@ -0,0 +1,61 @@
+<?php
+
+/**
+ * This file is part of the ramsey/uuid library
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>
+ * @license http://opensource.org/licenses/MIT MIT
+ */
+
+declare(strict_types=1);
+
+namespace Ramsey\Uuid\Provider\Node;
+
+use Ramsey\Collection\AbstractCollection;
+use Ramsey\Uuid\Provider\NodeProviderInterface;
+use Ramsey\Uuid\Type\Hexadecimal;
+
+/**
+ * A collection of NodeProviderInterface objects
+ *
+ * @extends AbstractCollection<NodeProviderInterface>
+ */
+class NodeProviderCollection extends AbstractCollection
+{
+ public function getType(): string
+ {
+ return NodeProviderInterface::class;
+ }
+
+ /**
+ * Re-constructs the object from its serialized form
+ *
+ * @param string $serialized The serialized PHP string to unserialize into
+ * a UuidInterface instance
+ *
+ * @phpcsSuppress SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint
+ * @psalm-suppress RedundantConditionGivenDocblockType
+ */
+ public function unserialize($serialized): void
+ {
+ /** @var array<array-key, NodeProviderInterface> $data */
+ $data = unserialize($serialized, [
+ 'allowed_classes' => [
+ Hexadecimal::class,
+ RandomNodeProvider::class,
+ StaticNodeProvider::class,
+ SystemNodeProvider::class,
+ ],
+ ]);
+
+ $this->data = array_filter(
+ $data,
+ function ($unserialized): bool {
+ return $unserialized instanceof NodeProviderInterface;
+ }
+ );
+ }
+}
diff --git a/vendor/ramsey/uuid/src/Provider/Node/RandomNodeProvider.php b/vendor/ramsey/uuid/src/Provider/Node/RandomNodeProvider.php
new file mode 100644
index 0000000..7614136
--- /dev/null
+++ b/vendor/ramsey/uuid/src/Provider/Node/RandomNodeProvider.php
@@ -0,0 +1,69 @@
+<?php
+
+/**
+ * This file is part of the ramsey/uuid library
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>
+ * @license http://opensource.org/licenses/MIT MIT
+ */
+
+declare(strict_types=1);
+
+namespace Ramsey\Uuid\Provider\Node;
+
+use Ramsey\Uuid\Exception\RandomSourceException;
+use Ramsey\Uuid\Provider\NodeProviderInterface;
+use Ramsey\Uuid\Type\Hexadecimal;
+use Throwable;
+
+use function bin2hex;
+use function dechex;
+use function hex2bin;
+use function hexdec;
+use function str_pad;
+use function substr;
+
+use const STR_PAD_LEFT;
+
+/**
+ * RandomNodeProvider generates a random node ID
+ *
+ * @link http://tools.ietf.org/html/rfc4122#section-4.5 RFC 4122, § 4.5: Node IDs that Do Not Identify the Host
+ */
+class RandomNodeProvider implements NodeProviderInterface
+{
+ public function getNode(): Hexadecimal
+ {
+ try {
+ $nodeBytes = random_bytes(6);
+ } catch (Throwable $exception) {
+ throw new RandomSourceException(
+ $exception->getMessage(),
+ (int) $exception->getCode(),
+ $exception
+ );
+ }
+
+ // 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.
+ $nodeMsb = hex2bin(
+ str_pad(
+ dechex(hexdec(bin2hex($nodeMsb)) | 0x010000),
+ 6,
+ '0',
+ STR_PAD_LEFT
+ )
+ );
+
+ // Recombine the node bytes.
+ $node = $nodeMsb . $nodeLsb;
+
+ return new Hexadecimal(str_pad(bin2hex($node), 12, '0', STR_PAD_LEFT));
+ }
+}
diff --git a/vendor/ramsey/uuid/src/Provider/Node/StaticNodeProvider.php b/vendor/ramsey/uuid/src/Provider/Node/StaticNodeProvider.php
new file mode 100644
index 0000000..51f1b02
--- /dev/null
+++ b/vendor/ramsey/uuid/src/Provider/Node/StaticNodeProvider.php
@@ -0,0 +1,76 @@
+<?php
+
+/**
+ * This file is part of the ramsey/uuid library
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>
+ * @license http://opensource.org/licenses/MIT MIT
+ */
+
+declare(strict_types=1);
+
+namespace Ramsey\Uuid\Provider\Node;
+
+use Ramsey\Uuid\Exception\InvalidArgumentException;
+use Ramsey\Uuid\Provider\NodeProviderInterface;
+use Ramsey\Uuid\Type\Hexadecimal;
+
+use function dechex;
+use function hexdec;
+use function str_pad;
+use function substr;
+
+use const STR_PAD_LEFT;
+
+/**
+ * StaticNodeProvider provides a static node value with the multicast bit set
+ *
+ * @link http://tools.ietf.org/html/rfc4122#section-4.5 RFC 4122, § 4.5: Node IDs that Do Not Identify the Host
+ */
+class StaticNodeProvider implements NodeProviderInterface
+{
+ /**
+ * @var Hexadecimal
+ */
+ private $node;
+
+ /**
+ * @param Hexadecimal $node The static node value to use
+ */
+ public function __construct(Hexadecimal $node)
+ {
+ if (strlen($node->toString()) > 12) {
+ throw new InvalidArgumentException(
+ 'Static node value cannot be greater than 12 hexadecimal characters'
+ );
+ }
+
+ $this->node = $this->setMulticastBit($node);
+ }
+
+ public function getNode(): Hexadecimal
+ {
+ return $this->node;
+ }
+
+ /**
+ * Set the multicast bit for the static node value
+ */
+ private function setMulticastBit(Hexadecimal $node): Hexadecimal
+ {
+ $nodeHex = str_pad($node->toString(), 12, '0', STR_PAD_LEFT);
+ $firstOctet = substr($nodeHex, 0, 2);
+
+ $firstOctet = str_pad(
+ dechex(hexdec($firstOctet) | 0x01),
+ 2,
+ '0',
+ STR_PAD_LEFT
+ );
+
+ return new Hexadecimal($firstOctet . substr($nodeHex, 2));
+ }
+}
diff --git a/vendor/ramsey/uuid/src/Provider/Node/SystemNodeProvider.php b/vendor/ramsey/uuid/src/Provider/Node/SystemNodeProvider.php
new file mode 100644
index 0000000..d512f22
--- /dev/null
+++ b/vendor/ramsey/uuid/src/Provider/Node/SystemNodeProvider.php
@@ -0,0 +1,173 @@
+<?php
+
+/**
+ * This file is part of the ramsey/uuid library
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>
+ * @license http://opensource.org/licenses/MIT MIT
+ */
+
+declare(strict_types=1);
+
+namespace Ramsey\Uuid\Provider\Node;
+
+use Ramsey\Uuid\Exception\NodeException;
+use Ramsey\Uuid\Provider\NodeProviderInterface;
+use Ramsey\Uuid\Type\Hexadecimal;
+
+use function array_filter;
+use function array_map;
+use function array_walk;
+use function count;
+use function ob_get_clean;
+use function ob_start;
+use function preg_match;
+use function preg_match_all;
+use function reset;
+use function str_replace;
+use function strpos;
+use function strtolower;
+use function strtoupper;
+use function substr;
+
+use const GLOB_NOSORT;
+use const PREG_PATTERN_ORDER;
+
+/**
+ * SystemNodeProvider retrieves the system node ID, if possible
+ *
+ * The system node ID, or host ID, is often the same as the MAC address for a
+ * network interface on the host.
+ */
+class SystemNodeProvider implements NodeProviderInterface
+{
+ /**
+ * Pattern to match nodes in ifconfig and ipconfig output.
+ */
+ private const IFCONFIG_PATTERN = '/[^:]([0-9a-f]{2}([:-])[0-9a-f]{2}(\2[0-9a-f]{2}){4})[^:]/i';
+
+ /**
+ * Pattern to match nodes in sysfs stream output.
+ */
+ private const SYSFS_PATTERN = '/^([0-9a-f]{2}:){5}[0-9a-f]{2}$/i';
+
+ public function getNode(): Hexadecimal
+ {
+ $node = $this->getNodeFromSystem();
+
+ if ($node === '') {
+ throw new NodeException(
+ 'Unable to fetch a node for this system'
+ );
+ }
+
+ return new Hexadecimal($node);
+ }
+
+ /**
+ * Returns the system node, if it can find it
+ */
+ protected function getNodeFromSystem(): string
+ {
+ static $node = null;
+
+ if ($node !== null) {
+ return (string) $node;
+ }
+
+ // First, try a Linux-specific approach.
+ $node = $this->getSysfs();
+
+ if ($node === '') {
+ // Search ifconfig output for MAC addresses & return the first one.
+ $node = $this->getIfconfig();
+ }
+
+ $node = str_replace([':', '-'], '', $node);
+
+ return $node;
+ }
+
+ /**
+ * Returns the network interface configuration for the system
+ *
+ * @codeCoverageIgnore
+ */
+ protected function getIfconfig(): string
+ {
+ $disabledFunctions = strtolower((string) ini_get('disable_functions'));
+
+ if (strpos($disabledFunctions, 'passthru') !== false) {
+ return '';
+ }
+
+ ob_start();
+ switch (strtoupper(substr(constant('PHP_OS'), 0, 3))) {
+ case 'WIN':
+ passthru('ipconfig /all 2>&1');
+
+ break;
+ case 'DAR':
+ passthru('ifconfig 2>&1');
+
+ break;
+ case 'FRE':
+ passthru('netstat -i -f link 2>&1');
+
+ break;
+ case 'LIN':
+ default:
+ passthru('netstat -ie 2>&1');
+
+ break;
+ }
+
+ $ifconfig = (string) ob_get_clean();
+
+ $node = '';
+ if (preg_match_all(self::IFCONFIG_PATTERN, $ifconfig, $matches, PREG_PATTERN_ORDER)) {
+ $node = $matches[1][0] ?? '';
+ }
+
+ return $node;
+ }
+
+ /**
+ * Returns MAC address from the first system interface via the sysfs interface
+ */
+ protected function getSysfs(): string
+ {
+ $mac = '';
+
+ if (strtoupper(constant('PHP_OS')) === 'LINUX') {
+ $addressPaths = glob('/sys/class/net/*/address', GLOB_NOSORT);
+
+ if ($addressPaths === false || count($addressPaths) === 0) {
+ return '';
+ }
+
+ $macs = [];
+
+ array_walk($addressPaths, function (string $addressPath) use (&$macs): void {
+ if (is_readable($addressPath)) {
+ $macs[] = file_get_contents($addressPath);
+ }
+ });
+
+ $macs = array_map('trim', $macs);
+
+ // Remove invalid entries.
+ $macs = array_filter($macs, function (string $address) {
+ return $address !== '00:00:00:00:00:00'
+ && preg_match(self::SYSFS_PATTERN, $address);
+ });
+
+ $mac = reset($macs);
+ }
+
+ return (string) $mac;
+ }
+}
diff --git a/vendor/ramsey/uuid/src/Provider/NodeProviderInterface.php b/vendor/ramsey/uuid/src/Provider/NodeProviderInterface.php
new file mode 100644
index 0000000..d536b45
--- /dev/null
+++ b/vendor/ramsey/uuid/src/Provider/NodeProviderInterface.php
@@ -0,0 +1,30 @@
+<?php
+
+/**
+ * This file is part of the ramsey/uuid library
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>
+ * @license http://opensource.org/licenses/MIT MIT
+ */
+
+declare(strict_types=1);
+
+namespace Ramsey\Uuid\Provider;
+
+use Ramsey\Uuid\Type\Hexadecimal;
+
+/**
+ * A node provider retrieves or generates a node ID
+ */
+interface NodeProviderInterface
+{
+ /**
+ * Returns a node ID
+ *
+ * @return Hexadecimal The node ID as a hexadecimal string
+ */
+ public function getNode(): Hexadecimal;
+}
diff --git a/vendor/ramsey/uuid/src/Provider/Time/FixedTimeProvider.php b/vendor/ramsey/uuid/src/Provider/Time/FixedTimeProvider.php
new file mode 100644
index 0000000..b8bfd72
--- /dev/null
+++ b/vendor/ramsey/uuid/src/Provider/Time/FixedTimeProvider.php
@@ -0,0 +1,63 @@
+<?php
+
+/**
+ * This file is part of the ramsey/uuid library
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>
+ * @license http://opensource.org/licenses/MIT MIT
+ */
+
+declare(strict_types=1);
+
+namespace Ramsey\Uuid\Provider\Time;
+
+use Ramsey\Uuid\Provider\TimeProviderInterface;
+use Ramsey\Uuid\Type\Integer as IntegerObject;
+use Ramsey\Uuid\Type\Time;
+
+/**
+ * FixedTimeProvider uses an known time to provide the time
+ *
+ * This provider allows the use of a previously-generated, or known, time
+ * when generating time-based UUIDs.
+ */
+class FixedTimeProvider implements TimeProviderInterface
+{
+ /**
+ * @var Time
+ */
+ private $fixedTime;
+
+ public function __construct(Time $time)
+ {
+ $this->fixedTime = $time;
+ }
+
+ /**
+ * Sets the `usec` component of the time
+ *
+ * @param int|string|IntegerObject $value The `usec` value to set
+ */
+ public function setUsec($value): void
+ {
+ $this->fixedTime = new Time($this->fixedTime->getSeconds(), $value);
+ }
+
+ /**
+ * Sets the `sec` component of the time
+ *
+ * @param int|string|IntegerObject $value The `sec` value to set
+ */
+ public function setSec($value): void
+ {
+ $this->fixedTime = new Time($value, $this->fixedTime->getMicroseconds());
+ }
+
+ public function getTime(): Time
+ {
+ return $this->fixedTime;
+ }
+}
diff --git a/vendor/ramsey/uuid/src/Provider/Time/SystemTimeProvider.php b/vendor/ramsey/uuid/src/Provider/Time/SystemTimeProvider.php
new file mode 100644
index 0000000..3a1e09c
--- /dev/null
+++ b/vendor/ramsey/uuid/src/Provider/Time/SystemTimeProvider.php
@@ -0,0 +1,33 @@
+<?php
+
+/**
+ * This file is part of the ramsey/uuid library
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>
+ * @license http://opensource.org/licenses/MIT MIT
+ */
+
+declare(strict_types=1);
+
+namespace Ramsey\Uuid\Provider\Time;
+
+use Ramsey\Uuid\Provider\TimeProviderInterface;
+use Ramsey\Uuid\Type\Time;
+
+use function gettimeofday;
+
+/**
+ * SystemTimeProvider retrieves the current time using built-in PHP functions
+ */
+class SystemTimeProvider implements TimeProviderInterface
+{
+ public function getTime(): Time
+ {
+ $time = gettimeofday();
+
+ return new Time($time['sec'], $time['usec']);
+ }
+}
diff --git a/vendor/ramsey/uuid/src/Provider/TimeProviderInterface.php b/vendor/ramsey/uuid/src/Provider/TimeProviderInterface.php
new file mode 100644
index 0000000..43588e0
--- /dev/null
+++ b/vendor/ramsey/uuid/src/Provider/TimeProviderInterface.php
@@ -0,0 +1,28 @@
+<?php
+
+/**
+ * This file is part of the ramsey/uuid library
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>
+ * @license http://opensource.org/licenses/MIT MIT
+ */
+
+declare(strict_types=1);
+
+namespace Ramsey\Uuid\Provider;
+
+use Ramsey\Uuid\Type\Time;
+
+/**
+ * A time provider retrieves the current time
+ */
+interface TimeProviderInterface
+{
+ /**
+ * Returns a time object
+ */
+ public function getTime(): Time;
+}