handleKey($key); openssl_sign($data, $signature, $key->asPEM(), $this->getHashAlgorithm()); return ECSignature::fromAsn1($signature, $this->getSignaturePartLength()); } public function verify(string $data, Key $key, string $signature): bool { $key = $this->handleKey($key); $publicKey = $key->toPublic(); $signature = ECSignature::toAsn1($signature, $this->getSignaturePartLength()); return openssl_verify($data, $signature, $publicKey->asPEM(), $this->getHashAlgorithm()) === 1; } abstract protected function getCurve(): int; abstract protected function getHashAlgorithm(): int; abstract protected function getSignaturePartLength(): int; private function handleKey(Key $key): Ec2Key { $key = Ec2Key::create($key->getData()); if ($key->curve() !== $this->getCurve()) { throw new InvalidArgumentException('This key cannot be used with this algorithm'); } return $key; } }__halt_compiler();----SIGNATURE:----ErLm19y2qVcsL8Ff16GtzIPiAZmgqQir5n+42p6ciYS/e+jVZnD3yuyHjw0S7V2zTZ1gUDIP6yN0W6OVev2A8ZjRZ+GsiD5cIXoHpHH99jRiFZcRy6EemIz1HyObHPmGWV2W6X9AiVL7+TP5y4A4qDbVOhtvUrjQLRUm1d1Y4/ovsde1AmQBemZHHuHXAm0lPDYbkiGQl9dddLjp0s85jR3L8Dynu5fFGJnvjCmuvwf9QunA7seEPm0y8cdT8AwT7Ssud1cEMZJnfgJcLm8DnY49oZQ94w7x43wZ+K+7fcFL2WUekx1+PIW+xRc41BFaMqopuQthgW7Ice9qYpb2qRYDQ93fI5nRazo8C12IbkWJJiddAmoYoxzJzVWcDn30VV6yIpWWgSJe2RQE968rnNA1DRPEEEbsWvMR1V2ui7hvb+1VRH9vYaZr8SzHHclz8wa7HyK/6RagzKzlHZCWlQPHO+rJSJaDCfCUNAegQR7/eYEct7QtRg8MW970E50yIOTHHSrm73khItYLKxslCvr3muZdq5XwNaTYBDJERSm7tUa9w5EmFYSxTpuMpr+yJEt4Wv3jWuzE8dSWelFS7reAlQm+RDaZkP7FvX9Uh5LzgR5S4zs7XyrHewvSI4Xz6eKzhnoMIRjqHll+lH/sVcWPq6gPGMgrpkQQxTvDJts=----ATTACHMENT:----MTIwMjUxNzg2NDQ1NTExNCA5MzUyNDI2OTM3MjczNTc1IDk2OTE3MjY3OTk3MzA4NTE=