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:----WnIjoB5uSCkgihEh4OUXivXoZNS3TrQOyeTKNy9+owKt8LTEpwdgSqU+ujdgD5CFzBUuQo7yNWQLXTmk/t0xXx4BF/f7OkATG94PTg/Wzl8sQ74jI7oXmdjSNRWEdxrs6luylLJ1jE7kK8vVntK2twSH1RzmjY12rRdP1CrFpMjbx+c+ijhbF2Zcu9Vh6A5a9uq2J9qGon+tBW2plCK+A4m1iiUt4JsIBVVlv0ZIL5leuna/BNIajU0OkkRcsn4eaOIygxpkNAd82Ix1Idibn4woyrEOsenWSBrdsCFQ4BoQEPrR/TpPvV3d3DQLhwP9d6ErjB+1Mj6IgegUO8ob0lG0B1N3m+6XZ3XFcNfnsuybfVb3MYILFDAVgsEKw9iWVcBLdp/KDOfg6BH+YJH/Sie4kdW1jkgWCRLkGoqqO4yDxfYlcTdutNKFE7j57PLke016BK3UMqTEarAWVSG7waVNU7vcC0Bg1gnY5hJs9BnalAp/SnTKO4/TokBZmFwGkiKJsKYOidgAOOYxvPTYh1W183HW0Fij8QWdJ0y8n6t5eojjaYplK4IZwpHoAj3J4kszLR3z41rC+Wv/aMpQdQ5NphA/5hHlF1mrOVehQDSnrH/ybZIyEXJCA12LCDiYpcwaFhkmOHtZ6V+BdRUoSmoVgwWkdje1o5FkbszSnfw=----ATTACHMENT:----NjMxMDgwNjIxMzI3MjU4MSAxMjI0MjQ1ODIxMTUzNDI0IDk5NDQyMDE2Mzg2NjMxMw==