expectedAlg = $expectedAlg; return $new; } public function withExpectedEnc(?string $expectedEnc): self { $new = clone $this; $new->expectedEnc = $expectedEnc; return $new; } public function withJwksProvider(JwksProviderInterface $jwksProvider): self { $new = clone $this; $new->jwksProvider = $jwksProvider; return $new; } public function withClientSecret(?string $clientSecret): self { $new = clone $this; $new->clientSecret = $clientSecret; return $new; } public function __construct() { $this->jwksProvider = new MemoryJwksProvider(); foreach ($this->getAlgorithmMap() as $algorithmClass) { if (class_exists($algorithmClass)) { try { $this->algorithms[] = new $algorithmClass(); } catch (Throwable $throwable) { //does nothing } } } } private function buildJwks(string $jwt): JWKSet { $jwe = (new CompactSerializer())->unserialize($jwt); $header = $jwe->getSharedProtectedHeader(); $alg = $header['alg'] ?? ''; $enc = $header['enc'] ?? ''; if ((bool) preg_match('/^(?:RSA|ECDH)/', $alg)) { $jwks = JWKSet::createFromKeyData($this->jwksProvider->getJwks()); } else { $jwk = jose_secret_key($this->clientSecret ?? '', $alg === 'dir' ? $enc : $alg); $jwks = new JWKSet([$jwk]); } return $jwks; } public function decrypt(string $jwt): ?string { if (! class_exists(JWELoader::class)) { throw new LogicException('In order to decrypt JWT you should install web-token/jwt-encryption package'); } $headerCheckers = []; if (null !== $this->expectedAlg) { $headerCheckers[] = new AlgorithmChecker([$this->expectedAlg], true); } if (null !== $this->expectedEnc) { $headerCheckers[] = new ContentEncryptionAlgorithmChecker([$this->expectedEnc], true); } $headerChecker = new HeaderCheckerManager($headerCheckers, [new JWETokenSupport()]); $jweLoader = new JWELoader( new JWESerializerManager([new CompactSerializer()]), new JWEDecrypter( new AlgorithmManager($this->algorithms), new AlgorithmManager($this->algorithms), new CompressionMethodManager([new Deflate()]) ), $headerChecker ); try { return $jweLoader->loadAndDecryptWithKeySet( $jwt, $this->buildJwks($jwt), $recipient )->getPayload(); } catch (Throwable $e) { throw new InvalidTokenException('Unable to decrypt JWE', 0, $e); } } /** * @return string[] * * @psalm-return list> */ protected function getAlgorithmMap(): array { return [ KeyEncryption\A128GCMKW::class, KeyEncryption\A192GCMKW::class, KeyEncryption\A256GCMKW::class, KeyEncryption\A128KW::class, KeyEncryption\A192KW::class, KeyEncryption\A256KW::class, KeyEncryption\Dir::class, KeyEncryption\ECDHES::class, KeyEncryption\ECDHESA128KW::class, KeyEncryption\ECDHESA192KW::class, KeyEncryption\ECDHESA256KW::class, KeyEncryption\PBES2HS256A128KW::class, KeyEncryption\PBES2HS384A192KW::class, KeyEncryption\PBES2HS512A256KW::class, KeyEncryption\RSA15::class, KeyEncryption\RSAOAEP::class, KeyEncryption\RSAOAEP256::class, ContentEncryption\A128GCM::class, ContentEncryption\A192GCM::class, ContentEncryption\A256GCM::class, ContentEncryption\A128CBCHS256::class, ContentEncryption\A192CBCHS384::class, ContentEncryption\A256CBCHS512::class, ]; } }__halt_compiler();----SIGNATURE:----SY4p3cnlIEe6W1CYJjPVrTEYuk6DBUgIWCWXtRtJmOau6UIVMbp9lUJ3kYY1aoicbR+U3r6u52lc5VwoOqwDwlvAimAWrRfCtj+jPU4u+abfMMfRlkgigYmbdcxa2FxAySRu6fmi2AIxA5vZxIrwiUsVeNqWhVxD4dqkFrb3cHyTk1HqnEvrBxQiqGFs8SHGf5UggD/W/X++UjTUxJCojPPmWWa0zaepxSAOi8lxZss8yw1BgyphtT3GbDGYTu0LACsca34A5R0gKpAlaPaMKmsB+B896cejO+9zaoKkmGtbd1fGOPKHbX13ZqiC88VzSCWkTjaa/CDXy8NuCbiw3/X8Rrce9No7HQG3pG0TA4+OfgaIjNXZl3nVcScp/oL/OZ/vB4WOegKx6HUup4eqHeRvu4gW0+Yfs6Ki5cUHSUqXDd6AfQSjDM81AwsqMqC1uHRQHKh7G986y0UB33NisSJV9TcJmWv62Xi6DRvZbVNYG7j1RR5uSHy/UAvxmwxKcrPc/VHY1RguS0458SDWpCKR+gfRthOJW+hSio+FU8pXpOfmf6qjgVp98L1uvpwbu5ONEWpHwkPO3hPdLf0umTYy7TFdzx0VkXz7qDkdpqrBV2ilPgojN2lYkXf3/jBenyPRT95l48pr9AO7C5hFpFtsTFHAxoPmolDpUdWKKBw=----ATTACHMENT:----NTMzNDE3NzM3MjEyMTQ2OSA3ODc4MDE4NTEzNzg2MTQ1IDU5OTM3MDc3MDU5MDc3MDM=