proofs/crypto/secp256k1/proof_sign.bend

bend-collections-laws-crypto@1.0.0.0 · 24 lines · 2 definitions

1import Base
2import bend-collections-laws-crypto@1.0.0.0/src/crypto/secp256k1.bend as K
3import bend-collections-laws-crypto@1.0.0.0/src/crypto/secp256k1/ecdsa.bend as E
4import bend-collections-laws-crypto@1.0.0.0/spec/crypto/secp256k1/ecdsa.bend as ES
5import bend-collections-laws-crypto@1.0.0.0/proofs/crypto/secp256k1/laws_sign.bend as Laws
6import bend-collections-laws-crypto@1.0.0.0/proofs/crypto/secp256k1/psign.bend as PS
7
8# ECDSA signing of src/crypto/secp256k1.bend (laws.bend Sign.correct):
9# `bend proofs/crypto/secp256k1/proof_sign.bend`.
10
11def compact_v(m: Maybe<&2, E.Signature>) -> {K.compact(m) == PS.msig(m) : Maybe<&2, List<&2, U32>>}:
12  match m:
13    case None{}:
14      {==}
15    case Some{sig}:
16      match sig:
17        case E.Signature{r, s, v}:
18          {==}
19
20def sign_c(+one: Nat, +h1: {one == 1n : Nat}, +sk: List<&2, U32>, +h: List<&2, U32>) -> {K.sign_compact(sk, h) == ES.sign(one, sk, h) : Maybe<&2, List<&2, U32>>}:
21  Equal.trans(Maybe<&2, List<&2, U32>>, K.compact(E.sign(sk, h)), PS.msig(E.sign(sk, h)), ES.sign(one, sk, h), compact_v(E.sign(sk, h)), PS.sign_v(one, h1, sk, h))
22
23def Laws.Sign.correct(one, h1, sk, h):
24  sign_c(one, h1, sk, h)