81 lines
1.7 KiB
PHP
81 lines
1.7 KiB
PHP
|
<?php
|
||
|
|
||
|
declare(strict_types=1);
|
||
|
|
||
|
/*
|
||
|
* The MIT License (MIT)
|
||
|
*
|
||
|
* Copyright (c) 2014-2020 Spomky-Labs
|
||
|
*
|
||
|
* This software may be modified and distributed under the terms
|
||
|
* of the MIT license. See the LICENSE file for details.
|
||
|
*/
|
||
|
|
||
|
namespace Jose\Component\Core;
|
||
|
|
||
|
use function array_key_exists;
|
||
|
use InvalidArgumentException;
|
||
|
|
||
|
class AlgorithmManager
|
||
|
{
|
||
|
/**
|
||
|
* @var array
|
||
|
*/
|
||
|
private $algorithms = [];
|
||
|
|
||
|
/**
|
||
|
* @param Algorithm[] $algorithms
|
||
|
*/
|
||
|
public function __construct(array $algorithms)
|
||
|
{
|
||
|
foreach ($algorithms as $algorithm) {
|
||
|
$this->add($algorithm);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns true if the algorithm is supported.
|
||
|
*
|
||
|
* @param string $algorithm The algorithm
|
||
|
*/
|
||
|
public function has(string $algorithm): bool
|
||
|
{
|
||
|
return array_key_exists($algorithm, $this->algorithms);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns the list of names of supported algorithms.
|
||
|
*
|
||
|
* @return string[]
|
||
|
*/
|
||
|
public function list(): array
|
||
|
{
|
||
|
return array_keys($this->algorithms);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns the algorithm if supported, otherwise throw an exception.
|
||
|
*
|
||
|
* @param string $algorithm The algorithm
|
||
|
*
|
||
|
* @throws InvalidArgumentException if the algorithm is not supported
|
||
|
*/
|
||
|
public function get(string $algorithm): Algorithm
|
||
|
{
|
||
|
if (!$this->has($algorithm)) {
|
||
|
throw new InvalidArgumentException(sprintf('The algorithm "%s" is not supported.', $algorithm));
|
||
|
}
|
||
|
|
||
|
return $this->algorithms[$algorithm];
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Adds an algorithm to the manager.
|
||
|
*/
|
||
|
public function add(Algorithm $algorithm): void
|
||
|
{
|
||
|
$name = $algorithm->name();
|
||
|
$this->algorithms[$name] = $algorithm;
|
||
|
}
|
||
|
}
|