<?php

declare(strict_types=1);

require __DIR__ . '/../../vendor/autoload.php';

use App\Framework\Random\SecureRandomGenerator;
use App\Framework\Cryptography\CryptographicUtilities;

$random = new SecureRandomGenerator();
$crypto = new CryptographicUtilities($random);

echo "Testing encryption key entropy...\n\n";

// Test 10 keys
for ($i = 0; $i < 10; $i++) {
    $key = $random->bytes(SODIUM_CRYPTO_SECRETBOX_KEYBYTES);
    $entropy = $crypto->calculateShannonEntropy($key);
    $keyLengthBits = strlen($key) * 8;
    $passes = $crypto->validateKeyStrength($key, 128);

    echo "Key #" . ($i + 1) . ":\n";
    echo "  Length: {$keyLengthBits} bits\n";
    echo "  Shannon Entropy: " . round($entropy, 4) . "\n";
    echo "  Passes validation (entropy >= 6.0): " . ($passes ? 'YES' : 'NO') . "\n\n";
}

echo "\nComparing with random_bytes():\n\n";

for ($i = 0; $i < 10; $i++) {
    $key = random_bytes(SODIUM_CRYPTO_SECRETBOX_KEYBYTES);
    $entropy = $crypto->calculateShannonEntropy($key);
    $keyLengthBits = strlen($key) * 8;
    $passes = $crypto->validateKeyStrength($key, 128);

    echo "random_bytes() Key #" . ($i + 1) . ":\n";
    echo "  Length: {$keyLengthBits} bits\n";
    echo "  Shannon Entropy: " . round($entropy, 4) . "\n";
    echo "  Passes validation (entropy >= 6.0): " . ($passes ? 'YES' : 'NO') . "\n\n";
}
