# Efficient ECDSA update
`Digging into Efficient ECDSA`
`by Dan Tehrani`
So our conclusion, for now, is that we can rearrange the ECDSA verification equation to
$$s \cdot (r^{−1}R) + (− mr^{−1}G) = Qa$$
where $Qa$ is the public key. And compute $r^{−1}R$ and $−mr^{−1}G$ outside of the zkSNARK circuit to offload the computation required to do in the circuit.
The circuit will have:
- private inputs: $s$, $Qa$
- public inputs: $(r^{−1}R)$, $(− mr^{−1}G)$
(my initial idea to sign $s$ to prove the knowledge of it was an unnecessary overcomplication)
So I think our setup only differs from “normal” ECDSA in terms of what we want to keep zero knowledge. That is, we don’t want to reveal anything about $s$ nor $Qa$. And in terms of soundness/completeness, I think we are operating under the same assumption as ECDSA, so we can fully inherit the security of ECDSA. This is because we’re just checking the above equation inside a zkSNARK, and nothing more/less (from my observation).
So the zero-knowledge property we want to be sure of is:
> Given an ECDSA signature ${r, s}$ of a message $m$, $r$ and $m$ don’t reveal anything about $s$ nor $Qa$.
And my thinking is:
> $s$ is a function of $r$, but $r$ doesn’t reveal anything about $s$ . The reasoning is:
> - $s =k^{−1} * (m + r * privKey) \mod n$
> - Since $k^{-1} * m$ is a secret random value, s will be completely masked (cmd-f "one-time pad" [one-time pad](https://en.wikipedia.org/wiki/Zero-knowledge_proof)).
$Qa$ will be also hidden since $Qa$ is not a function of $m$ nor $r$.