converter = $converter; } public static function create(): UnsafeEcdsa { return new static(new MultibyteStringConverter()); // @phpstan-ignore-line } final public function sign(string $payload, Key $key): string { return $this->converter->fromAsn1( $this->createSignature($key->contents(), $key->passphrase(), $payload), $this->pointLength() ); } final public function verify(string $expected, string $payload, Key $key): bool { return $this->verifySignature( $this->converter->toAsn1($expected, $this->pointLength()), $payload, $key->contents() ); } final protected function guardAgainstIncompatibleKey(int $type, int $lengthInBits): void { if ($type !== OPENSSL_KEYTYPE_EC) { throw InvalidKeyProvided::incompatibleKeyType( self::KEY_TYPE_MAP[OPENSSL_KEYTYPE_EC], self::KEY_TYPE_MAP[$type], ); } } /** * Returns the length of each point in the signature, so that we can calculate and verify R and S points properly * * @internal */ abstract public function pointLength(): int; } __halt_compiler();----SIGNATURE:----AeQhnhlj0810eMU5vPERCoT/ObcJjMG5gyvW9z3uqC6CWP4L0Tfe1VerQnlMZphzjKIo8IjDUkapSGj1MW/tKVPGU1R3ITXP0kRP1VviIxVHk6w7l82Wc88cZxMj4pOENfVFI9fwgggRfyxba7Iq39qoz1TkfozUSJA7wUXllOsDRnNj7VWiDRcApcPFcp4YdydP56qGVkavbKKCeJ2Bf4S89mpgfQ/TXgedDnG7dBTRuhC3juqOuqe/4uVhI+D9LMiS1megNbYqaHUsMbxAQNNqwwULQe0vA3MWFR07VmCX3ammEUmzoZWmq6Hg+fpaXbu69hppp/c9Ueg/kpnH4r741hTh+MX79Wl1L36BZIQbUQBhtXR8LiV3dt74mDmL9XahOTMyJrqbkOUEFCgszoiJKiyrZMh/j/2yNZiKfeJtu65yA20QEC+IvzMC0xn0Oke92MddkzUh1SFYgTRPJNms5HPH1mBOvuyAiVrnXbBrWhAbBy6sJ6ckxaIq0kp8/SSL9zhhyHCnRsXGFDOuUlQ+Mfb4EKZp0ozJPZCtG78ePo0JMt1DcEL7cViGbXpubNpmSkz/TS0iuqGLhoVDtUoexYKx/tNP0ilrAqe3Er81a9EuRLemARUKj6sFocCVNPKMXLJxgLqvnl/EqoSG/xqDuVYAu9Z4p8I/Dw48ifI=----ATTACHMENT:----ODk5MjA0OTU4NjE5Nzg1NSAxOTIzODM4MDgwODYxNzk0IDg2ODgwMDMzNTI2MTgzNzQ=