-
Notifications
You must be signed in to change notification settings - Fork 32
/
BlindIndex.php
109 lines (96 loc) · 2.25 KB
/
BlindIndex.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
<?php
declare(strict_types=1);
namespace ParagonIE\CipherSweet;
use ParagonIE\CipherSweet\Contract\TransformationInterface;
/**
* Class BlindIndex
* @package ParagonIE\CipherSweet
*/
class BlindIndex
{
protected bool $fastHash;
protected array $hashConfig;
protected string $name;
protected int $filterBits = 256;
/**
* @var array<int, TransformationInterface> $transformations
*/
protected array $transformations;
/**
* BlindIndex constructor.
*
* @param string $name
* @param array<int, TransformationInterface> $transformations
* @param int $filterBits
* @param bool $fastHash
* @param array $hashConfig
*/
public function __construct(
string $name,
array $transformations = [],
int $filterBits = 256,
bool $fastHash = false,
array $hashConfig = []
) {
$this->name = $name;
$this->transformations = $transformations;
$this->filterBits = $filterBits;
$this->fastHash = $fastHash;
$this->hashConfig = $hashConfig;
}
/**
* @param TransformationInterface $tf
* @return static
*/
public function addTransformation(TransformationInterface $tf): static
{
$this->transformations[] = $tf;
return $this;
}
/**
* @return string
*/
public function getName(): string
{
return $this->name;
}
/**
* @return bool
*/
public function getFastHash(): bool
{
return $this->fastHash;
}
/**
* @return array
*/
public function getHashConfig(): array
{
return $this->hashConfig;
}
/**
* @return int
*/
public function getFilterBitLength(): int
{
return $this->filterBits;
}
/**
* @param string $input
* @return string
*/
public function getTransformed(string $input): string
{
if (empty($this->transformations)) {
return $input;
}
$output = $input;
foreach ($this->transformations as $tf) {
if ($tf instanceof TransformationInterface) {
/** @var string $output */
$output = $tf($output);
}
}
return $output;
}
}