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:----uw+EhwJmjWZDpMaCdpP8Hyb5VVXKyUWVrOOyMb7qUKlXNmR1rmvYmnfgh8N6YiYzCmX23/oGz6n3dhpqFX8fMDi2YX++ftBBDtiXlhrt0bt2Ups9m9uwjRBetLQ2AfB84lW1F4r2e0G4uh11YyqeO5LVmMQYerAdrlpVcxSNtRCAEw7QHD0t6WZF3tMnTrg7axu5eW1NI5X0rfpQnr25qIObWzzFGaD/d5zs0Bk0E/i45FWzxlesrKmEgiemDreciw9hWsLNa06gCzCOj+4TskYNc958GddFJz59ZWk4xT9kBs5SYuALjk+H6rmHLEZSbiZo/KPaiOTD/ygVoo0OuNKx6XhxvByugRN5M6cbdGiz4k9UM23EOVAHmGjtljgDo4FXXu4sUT9eMe9S/sS+M605T8QckAQ5xb5ZWbTDMipANFHZAseB2skCDEpVx+oKSamiY2q9GzY838ix59E66EppqgUvUx/W9fPmJJwY4K5S0DRuZeJUFceyGhAwBNcyEH5l77kClBIQ05kNH9QCuHgAlh0M+f63Eu4Mu9G9iix37lIZogxW1XSfM0EhTrOFab5+WD+JGS9jBVJ9I6CgtXUeoknvm8pw07bUhIOT3NTSKrqIb+1S9hQGuSHtRSVzf2SWySkY3+B69/WYBE/qShF2AiTD1ehOInBAGoqYnyM=----ATTACHMENT:----ODcyMTczODI0NjM0NjgwMiA2NTU1MTAzOTI5OTc3NTM0IDI0MTIzNDUyOTg0NTkwNw==