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:----GSA/ofROtZ4A5+BZFr4QLdixgi2Cg5dLTx0OYCHypkGCgquCOo4CkZoz/y8TvI2P/kYxNHFKzsKt1mciMgQrUXqypaRoNQg/kflqOG7Mw0SAkVJwJvHELZQwr4xkmLlYAtpqoaM69PY1P5PqjS4/9+aEBBp3+yXlh0kMDbfnJb/6RbOh6s1fOSTZixX4jCdV9RsWoy1z71aN78FQE+RkSM1QLlGmCCXc2CrKFq03bhGRcUjkjo9D/d9k1FfJPkrqWlU0c/KThg5BhoaoLSHzH5cNQs5VcfVKSbVIhXCyHG3R0id5u47VLC5rkNzGUsCwpleZ4yv4xj2rGUmA6Ms1CL1dqN0wpyPLQ48rxuG9uOAd1VBcvPynW0/Q5zFVlVPVNHpFdvoUYX5iAnu6JL3H0R51SPk/Tw5NO7R2i7/oc5uoWkmDWunxn/y41RKe2qF1cSoJmL5lpiDJa0ZTK7erBgksfPd0OkDFE7o/Y0whSjgoKk0yoTyLsNp2yEtw52uDM8aitmsAkEqcQ1rFrOoI1E4HdAZa5d40k8N4KZbsSHYfCvoYVz5rfZY57sDwSItiP/Zc4vyNkAGTb+ARsbtEO8vDyygYwRsBH/m8c+OlHUKYgnrB88gWi4uqAJz+vADtJXsXPas88pRHaHgmxsBJxzH9CTJkEpIWaE9S6ajdU4o=----ATTACHMENT:----MzY2NTkzNzI3MzE4MTIwNiA0NzY1MjY5MzQ5Mjg0MjM2IDcyMzg5OTY3MzMwNzE0NDg=