def recover_r

bend-collections-laws-crypto@1.0.0.0 · src/crypto/secp256k1/ecdsa.bend:224

import bend-collections-laws-crypto@1.0.0.0/src/crypto/secp256k1/ecdsa.bend as Ecdsa
import Base
import bend-collections-laws-crypto@1.0.0.0/src/crypto/secp256k1/scalar.bend as S
import bend-collections-laws-crypto@1.0.0.0/src/crypto/secp256k1/point.bend as P

224# Q = r^-1 (s R - z G), with R the point of x-coordinate r + n j (j = id / 2)
225# and y parity id mod 2
226def recover_r(+z: List<&2, Nat>, +r: List<&2, Nat>, +s: List<&2, Nat>, m: Maybe<&2, P.Point>) -> Maybe<&2, List<&2, U32>>:
227  match m:
228    case None{}: None{}
229    case Some{+pr}:
230      +ri = S.inv(r)
231      +q = P.add(P.mul(S.mul(S.neg(z), ri), P.g()), P.mul(S.mul(s, ri), pr))
232      recover_q(q, P.is_inf(q))

Uses (13)

Used by (3)