. * * The interactive user interfaces in modified source and object code versions * of this program must display Appropriate Legal Notices, as required under * Section 5 of the GNU Affero General Public License version 3. * * In accordance with Section 7(b) of the GNU Affero General Public License version 3, * these Appropriate Legal Notices must retain the display of the "EspoCRM" word. ************************************************************************/ namespace Espo\Core\Authentication\Oidc; class PkceUtil { private const string CHARACTERS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~'; private const int CODE_LENGTH = 64; public static function generateCodeVerifier(): string { $output = ''; for ($i = 0; $i < self::CODE_LENGTH; $i++) { $output .= self::CHARACTERS[random_int(0, strlen(self::CHARACTERS) - 1)]; } return $output; } public static function hashAndEncodeCodeVerifier(string $codeVerifier): string { $code = hash('sha256', $codeVerifier, true); return rtrim(strtr(base64_encode($code), '+/', '-_'), '='); } }