# Uuid class

A powerful, secure implementation of Universally Unique Identifiers (UUIDs) following RFC 4122 specifications.

The Uuid class provides comprehensive support for UUID generation, parsing, validation, and manipulation with cryptographically secure random number generation and multiple UUID versions.

## Supported UUID Versions

- Version 1: Time-based UUIDs with MAC address
- Version 3: Name-based UUIDs using MD5 hashing
- Version 4: Random or pseudo-random UUIDs (most common)
- Version 5: Name-based UUIDs using SHA-1 hashing

## Security Features

- Cryptographically secure random number generation
- Proper entropy collection for version 4 UUIDs
- Secure hashing for name-based UUIDs
- Protection against timing attacks
- Validation of UUID format and version compliance

## Performance Characteristics

- Generation: O(1) for version 4, O(log n) for name-based versions
- Parsing: O(1) with input validation
- Comparison: O(1) lexicographic comparison
- Memory: 16 bytes storage + minimal overhead

## Example Usage

    // Generate random UUID (version 4)
    final uuid1 = Uuid.randomUuid();
    print(uuid1); // e.g., "550e8400-e29b-41d4-a716-446655440000"

    // Parse from string
    final uuid2 = Uuid.fromString('550e8400-e29b-41d4-a716-446655440000');

    // Generate name-based UUID (version 5)
    final namespace = Uuid.NAMESPACE_DNS;
    final uuid3 = Uuid.nameUuidFromBytes(namespace, utf8.encode('example.com'));

    // Generate time-based UUID (version 1)
    final uuid4 = Uuid.timeBasedUuid();

    // Comparison and validation
    print(uuid1 == uuid2); // false
    print(uuid1.compareTo(uuid2)); // -1, 0, or 1
    print(Uuid.isValidUuid('invalid')); // false

    // Access UUID components
    print(uuid1.version); // 4
    print(uuid1.variant); // 2 (RFC 4122)
    print(uuid1.mostSignificantBits);
    print(uuid1.leastSignificantBits);

## Thread Safety

All UUID operations are thread-safe. The internal random number generator uses secure system entropy and can be safely called from multiple threads concurrently.

## Format Compliance

Generated UUIDs strictly follow RFC 4122 format:

- 8-4-4-4-12 hexadecimal digit groups separated by hyphens
- Proper version and variant bits set according to specification
- Case-insensitive parsing with canonical lowercase output

Implemented types
  - Comparable<Uuid>

## Constructors

Uuid.fromBits(int mostSigBits, int leastSigBits)
  Creates a UUID from its most and least significant bits.
  factory
Uuid.fromString(String uuidString)
  Creates a UUID from a string representation.
  factory
Uuid.nameUuidFromBytes(Uuid namespace, List<int> nameBytes)
  Generates a name-based UUID using SHA-1 hashing (version 5).
  factory
Uuid.nameUuidFromString(Uuid namespace, String name)
  Generates a name-based UUID from a string name.
  factory
Uuid.randomUuid()
  Generates a random UUID (version 4).
  factory
Uuid.timeBasedUuid()
  Generates a time-based UUID (version 1).
  factory

## Properties

clockSequence → int
  Gets the clock sequence from a time-based UUID (version 1).
  no setter
hashCode → int
  The hash code for this object.
  no setter override
leastSignificantBits → int
  Gets the least significant 64 bits of the UUID.
  no setter
mostSignificantBits → int
  Gets the most significant 64 bits of the UUID.
  no setter
node → BigInteger
  Gets the node identifier from a time-based UUID (version 1).
  no setter
runtimeType → Type
  A representation of the runtime type of the object.
  no setter inherited
timestamp → int
  Gets the timestamp from a time-based UUID (version 1).
  no setter
variant → int
  Gets the variant number of the UUID.
  no setter
version → int
  Gets the version number of the UUID.
  no setter

## Methods

compareTo(Uuid other) → int
  Compares this object to another object.
  override
noSuchMethod(Invocation invocation) → dynamic
  Invoked when a nonexistent method or property is accessed.
  inherited
toBytes() → Uint8List
  Converts the UUID to a byte array.
toCompactString() → String
  Converts the UUID to a compact string without hyphens.
toString() → String
  A string representation of this object.
  override

## Operators

operator ==(Object other) → bool
  The equality operator.
  override

## Static Properties

NAMESPACE_DNS → Uuid
  Predefined namespace UUID for DNS names (RFC 4122)
  final
NAMESPACE_OID → Uuid
  Predefined namespace UUID for ISO OID names (RFC 4122)
  final
NAMESPACE_URL → Uuid
  Predefined namespace UUID for URL names (RFC 4122)
  final
NAMESPACE_X500 → Uuid
  Predefined namespace UUID for X.500 DN names (RFC 4122)
  final

## Static Methods

isValidUuid(String uuidString) → bool
  Validates if a string is a valid UUID format.
setUuidRangeBuilder(UuidRangeBuilder rangeBuilder) → void
  Sets the random number generator for UUID generation.