<?php

declare(strict_types=1);

namespace Acms\Services\Crypto;

use RuntimeException;

/**
 * 暗号論的疑似乱数によるランダム文字列生成
 */
class RandomGenerator
{
    /**
     * パスワードジェネレータ
     *
     * @param int $len パスワードの長さ
     *
     * @return string
     */
    public function genPass(int $len): string
    {
        if ($len < 3) {
            throw new RuntimeException('Length must be >= 3');
        }
        $byteLength = (int) ceil($len / 2); // 16進なので半分のバイト数
        assert($byteLength > 0); // PHPStan に 1以上と保証
        return substr(bin2hex(random_bytes($byteLength)), 0, $len);
    }
}
