Skip to content

Commit 7a92f9c

Browse files
committed
feat(signatory): switch to qbmapper
Signed-off-by: Maxence Lange <[email protected]>
1 parent 938059e commit 7a92f9c

23 files changed

+552
-663
lines changed

apps/cloud_federation_api/lib/Controller/RequestHandlerController.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010
use NCU\Security\Signature\Exceptions\SignatoryNotFoundException;
1111
use NCU\Security\Signature\Exceptions\SignatureException;
1212
use NCU\Security\Signature\Exceptions\SignatureNotFoundException;
13+
use NCU\Security\Signature\IIncomingSignedRequest;
1314
use NCU\Security\Signature\ISignatureManager;
14-
use NCU\Security\Signature\Model\IIncomingSignedRequest;
1515
use OC\OCM\OCMSignatoryManager;
1616
use OCA\CloudFederationAPI\Config;
1717
use OCA\CloudFederationAPI\ResponseDefinitions;
@@ -373,7 +373,7 @@ private function confirmSignedOrigin(?IIncomingSignedRequest $signedRequest, str
373373
if ($signedRequest === null) {
374374
$instance = $this->getHostFromFederationId($value);
375375
try {
376-
$this->signatureManager->searchSignatory($instance);
376+
$this->signatureManager->getSignatory($instance);
377377
throw new IncomingRequestException('instance is supposed to sign its request');
378378
} catch (SignatoryNotFoundException) {
379379
return;
@@ -434,7 +434,7 @@ private function confirmShareEntry(?IIncomingSignedRequest $signedRequest, strin
434434
$instance = $this->getHostFromFederationId($entry);
435435
if ($signedRequest === null) {
436436
try {
437-
$this->signatureManager->searchSignatory($instance);
437+
$this->signatureManager->getSignatory($instance);
438438
throw new IncomingRequestException('instance is supposed to sign its request');
439439
} catch (SignatoryNotFoundException) {
440440
return;

lib/composer/composer/autoload_classmap.php

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@
1212
'NCU\\Config\\Exceptions\\UnknownKeyException' => $baseDir . '/lib/unstable/Config/Exceptions/UnknownKeyException.php',
1313
'NCU\\Config\\IUserConfig' => $baseDir . '/lib/unstable/Config/IUserConfig.php',
1414
'NCU\\Config\\ValueType' => $baseDir . '/lib/unstable/Config/ValueType.php',
15+
'NCU\\Security\\Signature\\Enum\\SignatoryStatus' => $baseDir . '/lib/unstable/Security/Signature/Enum/SignatoryStatus.php',
16+
'NCU\\Security\\Signature\\Enum\\SignatoryType' => $baseDir . '/lib/unstable/Security/Signature/Enum/SignatoryType.php',
17+
'NCU\\Security\\Signature\\Enum\\SignatureAlgorithm' => $baseDir . '/lib/unstable/Security/Signature/Enum/SignatureAlgorithm.php',
1518
'NCU\\Security\\Signature\\Exceptions\\IdentityNotFoundException' => $baseDir . '/lib/unstable/Security/Signature/Exceptions/IdentityNotFoundException.php',
1619
'NCU\\Security\\Signature\\Exceptions\\IncomingRequestException' => $baseDir . '/lib/unstable/Security/Signature/Exceptions/IncomingRequestException.php',
1720
'NCU\\Security\\Signature\\Exceptions\\InvalidKeyOriginException' => $baseDir . '/lib/unstable/Security/Signature/Exceptions/InvalidKeyOriginException.php',
@@ -22,15 +25,12 @@
2225
'NCU\\Security\\Signature\\Exceptions\\SignatureElementNotFoundException' => $baseDir . '/lib/unstable/Security/Signature/Exceptions/SignatureElementNotFoundException.php',
2326
'NCU\\Security\\Signature\\Exceptions\\SignatureException' => $baseDir . '/lib/unstable/Security/Signature/Exceptions/SignatureException.php',
2427
'NCU\\Security\\Signature\\Exceptions\\SignatureNotFoundException' => $baseDir . '/lib/unstable/Security/Signature/Exceptions/SignatureNotFoundException.php',
28+
'NCU\\Security\\Signature\\IIncomingSignedRequest' => $baseDir . '/lib/unstable/Security/Signature/IIncomingSignedRequest.php',
29+
'NCU\\Security\\Signature\\IOutgoingSignedRequest' => $baseDir . '/lib/unstable/Security/Signature/IOutgoingSignedRequest.php',
2530
'NCU\\Security\\Signature\\ISignatoryManager' => $baseDir . '/lib/unstable/Security/Signature/ISignatoryManager.php',
2631
'NCU\\Security\\Signature\\ISignatureManager' => $baseDir . '/lib/unstable/Security/Signature/ISignatureManager.php',
27-
'NCU\\Security\\Signature\\Model\\IIncomingSignedRequest' => $baseDir . '/lib/unstable/Security/Signature/Model/IIncomingSignedRequest.php',
28-
'NCU\\Security\\Signature\\Model\\IOutgoingSignedRequest' => $baseDir . '/lib/unstable/Security/Signature/Model/IOutgoingSignedRequest.php',
29-
'NCU\\Security\\Signature\\Model\\ISignatory' => $baseDir . '/lib/unstable/Security/Signature/Model/ISignatory.php',
30-
'NCU\\Security\\Signature\\Model\\ISignedRequest' => $baseDir . '/lib/unstable/Security/Signature/Model/ISignedRequest.php',
31-
'NCU\\Security\\Signature\\Model\\SignatoryStatus' => $baseDir . '/lib/unstable/Security/Signature/Model/SignatoryStatus.php',
32-
'NCU\\Security\\Signature\\Model\\SignatoryType' => $baseDir . '/lib/unstable/Security/Signature/Model/SignatoryType.php',
33-
'NCU\\Security\\Signature\\SignatureAlgorithm' => $baseDir . '/lib/unstable/Security/Signature/SignatureAlgorithm.php',
32+
'NCU\\Security\\Signature\\ISignedRequest' => $baseDir . '/lib/unstable/Security/Signature/ISignedRequest.php',
33+
'NCU\\Security\\Signature\\Model\\Signatory' => $baseDir . '/lib/unstable/Security/Signature/Model/Signatory.php',
3434
'OCP\\Accounts\\IAccount' => $baseDir . '/lib/public/Accounts/IAccount.php',
3535
'OCP\\Accounts\\IAccountManager' => $baseDir . '/lib/public/Accounts/IAccountManager.php',
3636
'OCP\\Accounts\\IAccountProperty' => $baseDir . '/lib/public/Accounts/IAccountProperty.php',
@@ -1930,9 +1930,9 @@
19301930
'OC\\Security\\RateLimiting\\Limiter' => $baseDir . '/lib/private/Security/RateLimiting/Limiter.php',
19311931
'OC\\Security\\RemoteHostValidator' => $baseDir . '/lib/private/Security/RemoteHostValidator.php',
19321932
'OC\\Security\\SecureRandom' => $baseDir . '/lib/private/Security/SecureRandom.php',
1933+
'OC\\Security\\Signature\\Db\\SignatoryMapper' => $baseDir . '/lib/private/Security/Signature/Db/SignatoryMapper.php',
19331934
'OC\\Security\\Signature\\Model\\IncomingSignedRequest' => $baseDir . '/lib/private/Security/Signature/Model/IncomingSignedRequest.php',
19341935
'OC\\Security\\Signature\\Model\\OutgoingSignedRequest' => $baseDir . '/lib/private/Security/Signature/Model/OutgoingSignedRequest.php',
1935-
'OC\\Security\\Signature\\Model\\Signatory' => $baseDir . '/lib/private/Security/Signature/Model/Signatory.php',
19361936
'OC\\Security\\Signature\\Model\\SignedRequest' => $baseDir . '/lib/private/Security/Signature/Model/SignedRequest.php',
19371937
'OC\\Security\\Signature\\SignatureManager' => $baseDir . '/lib/private/Security/Signature/SignatureManager.php',
19381938
'OC\\Security\\TrustedDomainHelper' => $baseDir . '/lib/private/Security/TrustedDomainHelper.php',

lib/composer/composer/autoload_static.php

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,9 @@ class ComposerStaticInit749170dad3f5e7f9ca158f5a9f04f6a2
5353
'NCU\\Config\\Exceptions\\UnknownKeyException' => __DIR__ . '/../../..' . '/lib/unstable/Config/Exceptions/UnknownKeyException.php',
5454
'NCU\\Config\\IUserConfig' => __DIR__ . '/../../..' . '/lib/unstable/Config/IUserConfig.php',
5555
'NCU\\Config\\ValueType' => __DIR__ . '/../../..' . '/lib/unstable/Config/ValueType.php',
56+
'NCU\\Security\\Signature\\Enum\\SignatoryStatus' => __DIR__ . '/../../..' . '/lib/unstable/Security/Signature/Enum/SignatoryStatus.php',
57+
'NCU\\Security\\Signature\\Enum\\SignatoryType' => __DIR__ . '/../../..' . '/lib/unstable/Security/Signature/Enum/SignatoryType.php',
58+
'NCU\\Security\\Signature\\Enum\\SignatureAlgorithm' => __DIR__ . '/../../..' . '/lib/unstable/Security/Signature/Enum/SignatureAlgorithm.php',
5659
'NCU\\Security\\Signature\\Exceptions\\IdentityNotFoundException' => __DIR__ . '/../../..' . '/lib/unstable/Security/Signature/Exceptions/IdentityNotFoundException.php',
5760
'NCU\\Security\\Signature\\Exceptions\\IncomingRequestException' => __DIR__ . '/../../..' . '/lib/unstable/Security/Signature/Exceptions/IncomingRequestException.php',
5861
'NCU\\Security\\Signature\\Exceptions\\InvalidKeyOriginException' => __DIR__ . '/../../..' . '/lib/unstable/Security/Signature/Exceptions/InvalidKeyOriginException.php',
@@ -63,15 +66,12 @@ class ComposerStaticInit749170dad3f5e7f9ca158f5a9f04f6a2
6366
'NCU\\Security\\Signature\\Exceptions\\SignatureElementNotFoundException' => __DIR__ . '/../../..' . '/lib/unstable/Security/Signature/Exceptions/SignatureElementNotFoundException.php',
6467
'NCU\\Security\\Signature\\Exceptions\\SignatureException' => __DIR__ . '/../../..' . '/lib/unstable/Security/Signature/Exceptions/SignatureException.php',
6568
'NCU\\Security\\Signature\\Exceptions\\SignatureNotFoundException' => __DIR__ . '/../../..' . '/lib/unstable/Security/Signature/Exceptions/SignatureNotFoundException.php',
69+
'NCU\\Security\\Signature\\IIncomingSignedRequest' => __DIR__ . '/../../..' . '/lib/unstable/Security/Signature/IIncomingSignedRequest.php',
70+
'NCU\\Security\\Signature\\IOutgoingSignedRequest' => __DIR__ . '/../../..' . '/lib/unstable/Security/Signature/IOutgoingSignedRequest.php',
6671
'NCU\\Security\\Signature\\ISignatoryManager' => __DIR__ . '/../../..' . '/lib/unstable/Security/Signature/ISignatoryManager.php',
6772
'NCU\\Security\\Signature\\ISignatureManager' => __DIR__ . '/../../..' . '/lib/unstable/Security/Signature/ISignatureManager.php',
68-
'NCU\\Security\\Signature\\Model\\IIncomingSignedRequest' => __DIR__ . '/../../..' . '/lib/unstable/Security/Signature/Model/IIncomingSignedRequest.php',
69-
'NCU\\Security\\Signature\\Model\\IOutgoingSignedRequest' => __DIR__ . '/../../..' . '/lib/unstable/Security/Signature/Model/IOutgoingSignedRequest.php',
70-
'NCU\\Security\\Signature\\Model\\ISignatory' => __DIR__ . '/../../..' . '/lib/unstable/Security/Signature/Model/ISignatory.php',
71-
'NCU\\Security\\Signature\\Model\\ISignedRequest' => __DIR__ . '/../../..' . '/lib/unstable/Security/Signature/Model/ISignedRequest.php',
72-
'NCU\\Security\\Signature\\Model\\SignatoryStatus' => __DIR__ . '/../../..' . '/lib/unstable/Security/Signature/Model/SignatoryStatus.php',
73-
'NCU\\Security\\Signature\\Model\\SignatoryType' => __DIR__ . '/../../..' . '/lib/unstable/Security/Signature/Model/SignatoryType.php',
74-
'NCU\\Security\\Signature\\SignatureAlgorithm' => __DIR__ . '/../../..' . '/lib/unstable/Security/Signature/SignatureAlgorithm.php',
73+
'NCU\\Security\\Signature\\ISignedRequest' => __DIR__ . '/../../..' . '/lib/unstable/Security/Signature/ISignedRequest.php',
74+
'NCU\\Security\\Signature\\Model\\Signatory' => __DIR__ . '/../../..' . '/lib/unstable/Security/Signature/Model/Signatory.php',
7575
'OCP\\Accounts\\IAccount' => __DIR__ . '/../../..' . '/lib/public/Accounts/IAccount.php',
7676
'OCP\\Accounts\\IAccountManager' => __DIR__ . '/../../..' . '/lib/public/Accounts/IAccountManager.php',
7777
'OCP\\Accounts\\IAccountProperty' => __DIR__ . '/../../..' . '/lib/public/Accounts/IAccountProperty.php',
@@ -1971,9 +1971,9 @@ class ComposerStaticInit749170dad3f5e7f9ca158f5a9f04f6a2
19711971
'OC\\Security\\RateLimiting\\Limiter' => __DIR__ . '/../../..' . '/lib/private/Security/RateLimiting/Limiter.php',
19721972
'OC\\Security\\RemoteHostValidator' => __DIR__ . '/../../..' . '/lib/private/Security/RemoteHostValidator.php',
19731973
'OC\\Security\\SecureRandom' => __DIR__ . '/../../..' . '/lib/private/Security/SecureRandom.php',
1974+
'OC\\Security\\Signature\\Db\\SignatoryMapper' => __DIR__ . '/../../..' . '/lib/private/Security/Signature/Db/SignatoryMapper.php',
19741975
'OC\\Security\\Signature\\Model\\IncomingSignedRequest' => __DIR__ . '/../../..' . '/lib/private/Security/Signature/Model/IncomingSignedRequest.php',
19751976
'OC\\Security\\Signature\\Model\\OutgoingSignedRequest' => __DIR__ . '/../../..' . '/lib/private/Security/Signature/Model/OutgoingSignedRequest.php',
1976-
'OC\\Security\\Signature\\Model\\Signatory' => __DIR__ . '/../../..' . '/lib/private/Security/Signature/Model/Signatory.php',
19771977
'OC\\Security\\Signature\\Model\\SignedRequest' => __DIR__ . '/../../..' . '/lib/private/Security/Signature/Model/SignedRequest.php',
19781978
'OC\\Security\\Signature\\SignatureManager' => __DIR__ . '/../../..' . '/lib/private/Security/Signature/SignatureManager.php',
19791979
'OC\\Security\\TrustedDomainHelper' => __DIR__ . '/../../..' . '/lib/private/Security/TrustedDomainHelper.php',

lib/private/OCM/Model/OCMProvider.php

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,7 @@
99

1010
namespace OC\OCM\Model;
1111

12-
use NCU\Security\Signature\Model\ISignatory;
13-
use OC\Security\Signature\Model\Signatory;
12+
use NCU\Security\Signature\Model\Signatory;
1413
use OCP\EventDispatcher\IEventDispatcher;
1514
use OCP\OCM\Events\ResourceTypeRegisterEvent;
1615
use OCP\OCM\Exceptions\OCMArgumentException;
@@ -27,7 +26,7 @@ class OCMProvider implements IOCMProvider {
2726
private string $endPoint = '';
2827
/** @var IOCMResource[] */
2928
private array $resourceTypes = [];
30-
private ?ISignatory $signatory = null;
29+
private ?Signatory $signatory = null;
3130
private bool $emittedEvent = false;
3231

3332
public function __construct(
@@ -154,11 +153,11 @@ public function extractProtocolEntry(string $resourceName, string $protocol): st
154153
throw new OCMArgumentException('resource not found');
155154
}
156155

157-
public function setSignatory(ISignatory $signatory): void {
156+
public function setSignatory(Signatory $signatory): void {
158157
$this->signatory = $signatory;
159158
}
160159

161-
public function getSignatory(): ?ISignatory {
160+
public function getSignatory(): ?Signatory {
162161
return $this->signatory;
163162
}
164163

@@ -209,7 +208,7 @@ private function looksValid(): bool {
209208
* enabled: bool,
210209
* apiVersion: '1.0-proposal1',
211210
* endPoint: string,
212-
* publicKey: ISignatory|null,
211+
* publicKey: Signatory|null,
213212
* resourceTypes: list<array{
214213
* name: string,
215214
* shareTypes: list<string>,

lib/private/OCM/OCMSignatoryManager.php

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,12 @@
99

1010
namespace OC\OCM;
1111

12+
use NCU\Security\Signature\Enum\SignatoryType;
1213
use NCU\Security\Signature\Exceptions\IdentityNotFoundException;
1314
use NCU\Security\Signature\ISignatoryManager;
1415
use NCU\Security\Signature\ISignatureManager;
15-
use NCU\Security\Signature\Model\ISignatory;
16-
use NCU\Security\Signature\Model\SignatoryType;
16+
use NCU\Security\Signature\Model\Signatory;
1717
use OC\Security\IdentityProof\Manager;
18-
use OC\Security\Signature\Model\Signatory;
1918
use OCP\IAppConfig;
2019
use OCP\IURLGenerator;
2120
use OCP\OCM\Exceptions\OCMProviderException;
@@ -68,11 +67,11 @@ public function getOptions(): array {
6867
/**
6968
* @inheritDoc
7069
*
71-
* @return ISignatory
70+
* @return Signatory
7271
* @throws IdentityNotFoundException
7372
* @since 31.0.0
7473
*/
75-
public function getLocalSignatory(): ISignatory {
74+
public function getLocalSignatory(): Signatory {
7675
/**
7776
* TODO: manage multiple identity (external, internal, ...) to allow a limitation
7877
* based on the requested interface (ie. only accept shares from globalscale)
@@ -125,10 +124,10 @@ private function generateKeyId(): string {
125124
*
126125
* @param string $remote
127126
*
128-
* @return ISignatory|null must be NULL if no signatory is found
127+
* @return Signatory|null must be NULL if no signatory is found
129128
* @since 31.0.0
130129
*/
131-
public function getRemoteSignatory(string $remote): ?ISignatory {
130+
public function getRemoteSignatory(string $remote): ?Signatory {
132131
try {
133132
return $this->getRemoteSignatoryFromHost($remote);
134133
} catch (OCMProviderException $e) {
@@ -142,11 +141,11 @@ public function getRemoteSignatory(string $remote): ?ISignatory {
142141
*
143142
* @param string $host
144143
*
145-
* @return ISignatory|null
144+
* @return Signatory|null
146145
* @throws OCMProviderException on fail to discover ocm services
147146
* @since 31.0.0
148147
*/
149-
public function getRemoteSignatoryFromHost(string $host): ?ISignatory {
148+
public function getRemoteSignatoryFromHost(string $host): ?Signatory {
150149
$ocmProvider = $this->ocmDiscoveryService->discover($host, true);
151150
$signatory = $ocmProvider->getSignatory();
152151

lib/private/Security/IdentityProof/Manager.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -133,8 +133,8 @@ public function getSystemKey(): Key {
133133
public function hasAppKey(string $app, string $name): bool {
134134
$id = $this->generateAppKeyId($app, $name);
135135
try {
136-
$this->appData->getFolder($id);
137-
return true;
136+
$folder = $this->appData->getFolder($id);
137+
return ($folder->fileExists('public') && $folder->fileExists('private'));
138138
} catch (NotFoundException) {
139139
return false;
140140
}
@@ -151,11 +151,11 @@ public function generateAppKey(string $app, string $name, array $options = []):
151151
public function deleteAppKey(string $app, string $name): bool {
152152
try {
153153
$folder = $this->appData->getFolder($this->generateAppKeyId($app, $name));
154+
$folder->delete();
155+
return true;
154156
} catch (NotFoundException) {
155157
return false;
156158
}
157-
$folder->delete();
158-
return true;
159159
}
160160

161161
private function generateAppKeyId(string $app, string $name): string {
Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
/**
5+
* SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
6+
* SPDX-License-Identifier: AGPL-3.0-or-later
7+
*/
8+
9+
namespace OC\Security\Signature\Db;
10+
11+
use NCU\Security\Signature\Exceptions\SignatoryNotFoundException;
12+
use NCU\Security\Signature\Model\Signatory;
13+
use OCP\AppFramework\Db\DoesNotExistException;
14+
use OCP\AppFramework\Db\QBMapper;
15+
use OCP\DB\Exception;
16+
use OCP\IDBConnection;
17+
18+
/**
19+
* @template-extends QBMapper<Signatory>
20+
*/
21+
class SignatoryMapper extends QBMapper {
22+
public const TABLE = 'sec_signatory';
23+
24+
public function __construct(
25+
IDBConnection $db,
26+
) {
27+
parent::__construct($db, self::TABLE, Signatory::class);
28+
}
29+
30+
/**
31+
*
32+
*/
33+
public function getByHost(string $host, string $account = ''): Signatory {
34+
$qb = $this->db->getQueryBuilder();
35+
$qb->select('*')
36+
->from($this->getTableName())
37+
->where($qb->expr()->eq('host', $qb->createNamedParameter($host)))
38+
->andWhere($qb->expr()->eq('account', $qb->createNamedParameter($account)));
39+
40+
try {
41+
return $this->findEntity($qb);
42+
} catch (DoesNotExistException) {
43+
throw new SignatoryNotFoundException('no signatory found');
44+
}
45+
}
46+
47+
/**
48+
*/
49+
public function getByKeyId(string $keyId): Signatory {
50+
$qb = $this->db->getQueryBuilder();
51+
$qb->select('*')
52+
->from($this->getTableName())
53+
->where($qb->expr()->eq('key_id_sum', $qb->createNamedParameter($this->hashKeyId($keyId))));
54+
55+
try {
56+
return $this->findEntity($qb);
57+
} catch (DoesNotExistException) {
58+
throw new SignatoryNotFoundException('no signatory found');
59+
}
60+
}
61+
62+
/**
63+
* @param string $keyId
64+
*
65+
* @return int
66+
* @throws Exception
67+
*/
68+
public function deleteByKeyId(string $keyId): int {
69+
$qb = $this->db->getQueryBuilder();
70+
$qb->delete($this->getTableName())
71+
->where($qb->expr()->eq('key_id_sum', $qb->createNamedParameter($this->hashKeyId($keyId))));
72+
73+
return $qb->executeStatement();
74+
}
75+
76+
/**
77+
* @param Signatory $signatory
78+
*
79+
* @return int
80+
*/
81+
public function updateMetadata(Signatory $signatory): int {
82+
$qb = $this->db->getQueryBuilder();
83+
$qb->update($this->getTableName())
84+
->set('metadata', $qb->createNamedParameter(json_encode($signatory->getMetadata())))
85+
->set('last_updated', $qb->createNamedParameter(time()));
86+
$qb->where($qb->expr()->eq('key_id_sum', $qb->createNamedParameter($this->hashKeyId($signatory->getKeyId()))));
87+
88+
return $qb->executeStatement();
89+
}
90+
91+
/**
92+
* @param Signatory $signator
93+
*/
94+
public function updatePublicKey(Signatory $signatory): int {
95+
$qb = $this->db->getQueryBuilder();
96+
$qb->update($this->getTableName())
97+
->set('signatory', $qb->createNamedParameter($signatory->getPublicKey()))
98+
->set('last_updated', $qb->createNamedParameter(time()));
99+
$qb->where($qb->expr()->eq('key_id_sum', $qb->createNamedParameter($this->hashKeyId($signatory->getKeyId()))));
100+
101+
return $qb->executeStatement();
102+
}
103+
104+
/**
105+
* returns a hash version for keyId for better index in the database
106+
*
107+
* @param string $keyId
108+
*
109+
* @return string
110+
*/
111+
private function hashKeyId(string $keyId): string {
112+
return hash('sha256', $keyId);
113+
}
114+
}

0 commit comments

Comments
 (0)