def vlen

bend-collections-laws-crypto@1.0.0.0 · proofs/crypto/secp256k1/pver.bend:115

import bend-collections-laws-crypto@1.0.0.0/proofs/crypto/secp256k1/pver.bend as Pver
import Base
import bend-collections-laws-crypto@1.0.0.0/spec/crypto/secp256k1/field.bend as FS
import bend-collections-laws-crypto@1.0.0.0/spec/crypto/secp256k1/curve.bend as CV
import bend-collections-laws-crypto@1.0.0.0/spec/crypto/secp256k1/ecdsa.bend as ES
import bend-collections-laws-crypto@1.0.0.0/src/crypto/secp256k1/bytes.bend as B
import bend-collections-laws-crypto@1.0.0.0/src/crypto/secp256k1/point.bend as P
import bend-collections-laws-crypto@1.0.0.0/src/crypto/secp256k1/ecdsa.bend as E
import bend-collections-laws-crypto@1.0.0.0/proofs/crypto/secp256k1/penc.bend as PE
import bend-collections-laws-crypto@1.0.0.0/proofs/crypto/secp256k1/pdec.bend as PD

115def vlen(+one: Nat, +h1: {one == 1n : Nat}, +pk: List<&2, U32>, +h: List<&2, U32>, +sig: List<&2, U32>, strict: Bool, a: Bool, b: Bool, +ha: {B.has_len(32n, h) == a : Bool}, +hb: {B.has_len(64n, sig) == b : Bool}) -> {E.verify_len(pk, h, sig, strict, Bool.and(a, b)) == ES.verify_len(one, pk, h, sig, strict, Bool.and(a, b)) : Bool}:
116  match a b:
117    case True{} True{}:
118      %Equal.sym(Maybe<&2, CV.SPoint>, CV.decode(FS.prime(one), pk), PE.mpv(one, P.decode(pk)), Equal.sym(Maybe<&2, CV.SPoint>, PE.mpv(one, P.decode(pk)), CV.decode(FS.prime(one), pk), PD.decode_v(one, h1, pk))) : {E.verify_q(h, sig, strict, P.decode(pk)) == ES.verify_q(one, h, sig, strict, _) : Bool}
119      vq(one, h1, h, ha, sig, hb, strict, P.decode(pk), PD.decode_r(one, h1, pk))
120    case True{} False{}:
121      {==}
122    case False{} _:
123      {==}

Uses (20)

Used by (1)