def recover_ok

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

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/field.bend as F
import bend-collections-laws-crypto@1.0.0.0/src/crypto/secp256k1/scalar.bend as S

250# x = r + j n with j = id / 2. For j = 1, r + n must be below p: then
251# (r + n) mod p = r + n >= n, while a wrapped r + n - p is below r < n
252def recover_ok(+z: List<&2, Nat>, +r: List<&2, Nat>, +s: List<&2, Nat>, +id: Nat, ok: Bool) -> Maybe<&2, List<&2, U32>>:
253  match ok:
254    case True{}:
255      +j = Nat.div(id, 2n)
256      +x1 = rn_fe(r)
257      recover_x(z, r, s, id, F.select(j, x1, r), Bool.or(Nat.is_eq(j, 0n), Bool.not(S.lt_n(x1))))
258    case False{}: None{}

Uses (13)

Used by (8)