def recover_r

bend-collections@1.0.0.0 · spec/crypto/secp256k1/ecdsa.bend:206

import bend-collections@1.0.0.0/spec/crypto/secp256k1/ecdsa.bend as Ecdsa
import Base
import bend-collections@1.0.0.0/spec/crypto/secp256k1/field.bend as FS
import bend-collections@1.0.0.0/spec/crypto/secp256k1/curve.bend as CV

206# Q = r^-1 (s R - e G) = [-e r^-1] G + [s r^-1] R
207def recover_r(+one: Nat, +e: Nat, +r: Nat, +s: Nat, mr: Maybe<&2, CV.SPoint>) -> Maybe<&2, List<&2, U32>>:
208  match mr:
209    case None{}: None{}
210    case Some{+pr}:
211      +m = n(one)
212      +ri = FS.minv(m, r)
213      recover_q(one, CV.padd(p(one), CV.pmul(p(one), FS.mmul(m, FS.mneg(m, e), ri), CV.g(one)), CV.pmul(p(one), FS.mmul(m, s, ri), pr)))

Uses (14)

Used by (1)