weekly release 4.5dev
[moodle.git] / lib / lti1p3 / src / JwksEndpoint.php
blob312b0241d5b13af06dd3cdf7b2ff5997ba95d3ea
1 <?php
3 namespace Packback\Lti1p3;
5 use Firebase\JWT\JWT;
6 use Packback\Lti1p3\Interfaces\IDatabase;
7 use Packback\Lti1p3\Interfaces\ILtiRegistration;
9 class JwksEndpoint
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
34 $jwks = [];
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);
38 $components = [
39 'kty' => 'RSA',
40 'alg' => 'RS256',
41 'use' => 'sig',
42 'e' => JWT::urlsafeB64Encode($key_details['rsa']['e']),
43 'n' => JWT::urlsafeB64Encode($key_details['rsa']['n']),
44 'kid' => $kid,
46 $jwks[] = $components;
49 return ['keys' => $jwks];