15#ifndef PRIVACY_PROOFS_ZK_LIB_SUMCHECK_CIRCUIT_ID_H_
16#define PRIVACY_PROOFS_ZK_LIB_SUMCHECK_CIRCUIT_ID_H_
22#include "sumcheck/circuit.h"
23#include "util/crypto.h"
30void circuit_id(uint8_t
id[],
const Circuit<Field>& c,
const Field& F) {
31 const uint64_t CHAR2 = 0x2;
32 const uint64_t ODD = 0x1;
34 uint8_t tmp[Field::kBytes];
35 if (F.kCharacteristicTwo) {
43 F.to_bytes_field(tmp, F.mone());
44 sha.Update(tmp,
sizeof(tmp));
51 sha.Update8(c.ninputs);
52 sha.Update8(c.npub_in);
53 sha.Update8(c.subfield_boundary);
54 for (
const auto& layer : c.l) {
55 sha.Update8(layer.nw);
56 sha.Update8(layer.logw);
57 sha.Update8(layer.quad->n_);
58 for (
size_t i = 0; i < layer.quad->n_; ++i) {
59 sha.Update8(
static_cast<uint64_t
>(layer.quad->c_[i].g));
60 sha.Update8(
static_cast<uint64_t
>(layer.quad->c_[i].h[0]));
61 sha.Update8(
static_cast<uint64_t
>(layer.quad->c_[i].h[1]));
62 F.to_bytes_field(tmp, layer.quad->c_[i].v);
63 sha.Update(tmp,
sizeof(tmp));