* @since 2.1.0 */ abstract class Ecdsa extends OpenSSL { /** * @var SignatureConverter */ private $converter; public function __construct(SignatureConverter $converter = null) { $this->converter = $converter ?: new MultibyteStringConverter(); } /** * {@inheritdoc} */ public function createHash($payload, Key $key) { return $this->converter->fromAsn1(parent::createHash($payload, $key), $this->getKeyLength()); } /** * {@inheritdoc} */ public function doVerify($expected, $payload, Key $key) { return parent::doVerify($this->converter->toAsn1($expected, $this->getKeyLength()), $payload, $key); } /** * Returns the length of each point in the signature, so that we can calculate and verify R and S points properly * * @internal */ public abstract function getKeyLength(); /** * {@inheritdoc} */ public final function getKeyType() { return OPENSSL_KEYTYPE_EC; } }