crypto = $crypto; } public function calculateHMAC(string $message): string { if ($message === null) { throw new \InvalidArgumentException(); } return $this->encodeBase64UrlSafe(\sha1($this->crypto->calculateHMAC($message), true)); } public function verifyHMAC(string $message, string $mac) { if ($message === null || $mac === null) { return false; } $validMac = $this->encodeBase64UrlSafe(\sha1($this->crypto->calculateHMAC($message), true)); return $validMac === $mac; } private function encodeBase64UrlSafe(string $data) { $b64 = \base64_encode($data); if ($b64 === false) { return false; } return \rtrim(\strtr($b64, '+/', '-_'), '='); } }