39 using EltW =
typename LogicCircuit::EltW;
40 using Elt =
typename LogicCircuit::Elt;
41 using Nat =
typename Field::N;
42 using v128 =
typename LogicCircuit::v128;
43 using v256 =
typename LogicCircuit::v256;
47 using packed_v256 =
typename MacBitPlucker::packed_v256;
49 using MACWitness =
typename mac::Witness;
51 const LogicCircuit& lc_;
61 EcdsaWitness mdoc_sig_;
62 EcdsaWitness dpk_sig_;
72 for (
size_t i = 0; i < 3; ++i) {
73 macs_[i].input(lc, Q);
78 explicit MdocSignature(
const LogicCircuit& lc,
const EC& ec,
const Nat& order)
79 : lc_(lc), ec_(ec), order_(order) {}
90 void assert_signatures(EltW pkX, EltW pkY, EltW hash_tr, v128 mac_e[2],
91 v128 mac_dpkX[2], v128 mac_dpkY[2], v128 a_v,
93 Ecdsa ecc(lc_, ec_, order_);
96 ecc.verify_signature3(pkX, pkY, vw.e_, vw.mdoc_sig_);
97 ecc.verify_signature3(vw.dpkx_, vw.dpky_, hash_tr, vw.dpk_sig_);
99 macc.verify_mac(vw.e_, mac_e, a_v, vw.macs_[0], order_);
100 macc.verify_mac(vw.dpkx_, mac_dpkX, a_v, vw.macs_[1], order_);
101 macc.verify_mac(vw.dpky_, mac_dpkY, a_v, vw.macs_[2], order_);
112 void assert_signatures_with_issuer_list(
113 EltW hash_tr, v128 mac_e[2], v128 mac_dpkX[2], v128 mac_dpkY[2], v128 a_v,
114 EltW issuer_pkX[], EltW issuer_pkY[],
117 EltW pkX, EltW pkY, Witness& vw)
const {
118 assert_signatures(pkX, pkY, hash_tr, mac_e, mac_dpkX, mac_dpkY, a_v, vw);
133 EltW goodXKey = lc_.mul(0, max_issuers, [&](
size_t i) {
134 return lc_.sub(&issuer_pkX[i], pkX);
136 lc_.assert0(goodXKey);
138 EltW goodYKey = lc_.mul(0, max_issuers, [&](
size_t i) {
139 return lc_.sub(&issuer_pkY[i], pkY);
141 lc_.assert0(goodYKey);