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:----AL4oKzF971oNVgrsZ90QLXjri2ycvwx30sTSITN+uIi3RbRjc62m70+CNQlKj7TCQOGviRFbaOBgsZP5X+Ovicmb6xRkGNN/BMaHqBatuTqLWnVa+KZ9s2vCbmRRAVwjGMtDoKdkk+xSN1+swFzFHYRdYt7ttPHJACI+nYlPKsX19l9qucQV3xaFg4w5I50E9SmRamLNsougdZuMQxxNg7pAJZ+VU8Lt1Bejcy+JuGlQ6exV5/N1wCmQrNSul0myQzEWH8dYzK6ElKW7/w5xvxoRgbg9mesR1WGebnGQbtKIzkpDsA/k17liHtoB9P254aWJus+w+iKTnbiFuk5GuelfLm9Hc9Mo2HEPBtvxI/2o2ifMYjuAbWF3R0dpK9Nr7FHaQBxUJNzNpxxaXdMIe4T/BwKkJ8tYPM/lV6G6IefLI0s+MA/uOqFQzABKJnoMKU3AVUoFmgvC8iuiNo9VyxcPo5RxHeQjJ5aPb7L2UReNL96Jsszvf9awlePph7zRorm1wOQzE7TcVtlszJopJkqUcCAcSLmq2clnqYWIgbV4OroNrhbZBbNd8eSysWrB9v647yHMS1cetu2nyS0ghROdcljtNJoSWPXuDSUQQ61X+SDITUUq1gHzIavLATULIfYFY6nfGFHa3hqvV4PK83wPJohuFaunW7YyNnEqkMc=----ATTACHMENT:----NDE1NjU3MTY2NTcwNDA3IDcxMTUwNDcxMTk1ODUyMTYgODUwNjQ3Mjc3MTA4NTQzNg==