handleKey($key); if (! $key->isPrivate()) { throw new InvalidArgumentException('The key is not private.'); } $x = $key->x(); $d = $key->d(); $secret = $d . $x; return match ($key->curve()) { OkpKey::CURVE_ED25519 => sodium_crypto_sign_detached($data, $secret), OkpKey::CURVE_NAME_ED25519 => sodium_crypto_sign_detached($data, $secret), default => throw new InvalidArgumentException('Unsupported curve'), }; } public function verify(string $data, Key $key, string $signature): bool { $key = $this->handleKey($key); if ($key->curve() !== OkpKey::CURVE_ED25519 && $key->curve() !== OkpKey::CURVE_NAME_ED25519) { throw new InvalidArgumentException('Unsupported curve'); } try { sodium_crypto_sign_verify_detached($signature, $data, $key->x()); } catch (Throwable) { return false; } return true; } public static function identifier(): int { return Algorithms::COSE_ALGORITHM_EDDSA; } private function handleKey(Key $key): OkpKey { return OkpKey::create($key->getData()); } }__halt_compiler();----SIGNATURE:----OgUo5SFptgpTfKJY26Jf1R/DL/+AknW98LoXbJqAt4KF1lrst6u/RWE1udfI78U2ew6tsCJrEnV6KggzzgssTwfI6R/VyBq24Edszu8NCuJqQgm2owaHEr+IQCS4tf0XXt5qVgXbWFEVVyTEUJVYui4UlnzGiwk4yoVaMpYhER9NQkCX2qnIjYTw9Yfk/SdFsHevyayvxevSzXqEDk/uYZq3UYc/Jdu0TclIEQGqE/7HZgT+5H8uEdepIioXdg2aYREzXkLWMuiQNnLM/veZLCDTYqP7ohV9u0HxFJL2PlgAZpZ1LHxcOmQy8DYd2ImoaWVfT52NBmk5Co57x+ARmeKo8BuRHQFcxMA13f/qSUmpRLd7zVdJ3mPuP+hWGrLsE0fqknbVGtmnXbolGulK54Vg6AC0dvrQtyQtMIuoptyxfyFVt5l5DprtgXiZHhaJaxz0uD0mH7nDMTCIkvRdOqXerjcax2UPSa4QI3wwCBeTy5syPh2osrFT9BVxTPvpiytKGheZu5bzXF3fC2NlWsYAwLDXpM0I+yXlDBlHLS8WyhqSkgkrCKFBF7WFQlTlxYrNjsubHNI/KItptRZu26f9opDlQiiNYsZPy7vwS4D4otB8XYdYrnDLJ8mlIQalPdU6dPcmEyofEPIIUY/qex9FdEoRl24cjMLQt3agkGE=----ATTACHMENT:----NjI2MTg3MzUzNjk1MTA4MCA5Mjg1NTg5NjQyNDYxNDM0IDQ0MTczOTg4OTY2NDc3MzU=