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