3 namespace Packback\Lti1p3
;
6 use Packback\Lti1p3\Interfaces\IDatabase
;
7 use Packback\Lti1p3\Interfaces\ILtiRegistration
;
11 public function __construct(private array $keys)
15 public static function new(array $keys): self
17 return new JwksEndpoint($keys);
20 public static function fromIssuer(IDatabase
$database, string $issuer): self
22 $registration = $database->findRegistrationByIssuer($issuer);
24 return new JwksEndpoint([$registration->getKid() => $registration->getToolPrivateKey()]);
27 public static function fromRegistration(ILtiRegistration
$registration): self
29 return new JwksEndpoint([$registration->getKid() => $registration->getToolPrivateKey()]);
32 public function getPublicJwks(): array
35 foreach ($this->keys
as $kid => $private_key) {
36 $key_res = openssl_pkey_get_private($private_key);
37 $key_details = openssl_pkey_get_details($key_res);
42 'e' => JWT
::urlsafeB64Encode($key_details['rsa']['e']),
43 'n' => JWT
::urlsafeB64Encode($key_details['rsa']['n']),
46 $jwks[] = $components;
49 return ['keys' => $jwks];