Exemplo n.º 1
0
void
clear_del_vec_array(mpz_t **array, const uint32_t n, const uint32_t vecSize) {
  for (uint32_t i = 0; i < n; i++) {
    clear_del_vec(array[i], vecSize);
  }
  delete[] array;
}
Exemplo n.º 2
0
//Refer to apps_sfdl_gen/cql_rw_si_cons.h for constants to use when generating input.
// this name stands for cql read/write select insert.
void cql_rw_siVerifierInpGenHw::create_input(mpq_t* input_q, int num_inputs)
{
  srand(time(NULL));
  mpq_t* full_db_handle;
  int num_ints = sizeof(Student_handle_t) / sizeof(uint64_t);
  alloc_init_vec(&full_db_handle, num_ints);
  Student_handle_t handle;

  if (generate_states) {
    // SIZE should be a power of 2.
    int number_of_rows = SIZE - 1;

    // get the full handle of a DB.
    handle = create_db(number_of_rows, ("prover_1_" + shared_bstore_file_name).c_str());

    uint64_t* input_ptr = (uint64_t*)&handle;
    for(int i = 0; i < num_ints; i++) {
      mpq_set_ui(full_db_handle[i], input_ptr[i], 1);
    }

    dump_vector(num_ints, full_db_handle, "db_handle", FOLDER_PERSIST_STATE);
  } else {
    // import the root hash from a place.
    load_vector(num_ints, full_db_handle, "db_handle", FOLDER_PERSIST_STATE);
    uint64_t* input_ptr = (uint64_t*)&handle;
    for(int i = 0; i < num_ints; i++) {
      input_ptr[i] = mpz_get_ui(mpq_numref(full_db_handle[i]));
    }
  }

  struct In input;
  Student_handle_t empty_handle;
  memset(&input, 0, sizeof(input));

  // get a succinct handle of a DB using hashput.
  char db_file_path[BUFLEN];
  snprintf(db_file_path, BUFLEN - 1, "%s/block_stores/prover_1_%s", FOLDER_STATE, shared_bstore_file_name.c_str());
  HashBlockStore* bs = new ConfigurableBlockStore(db_file_path);
  hashput2(bs, &(input.db_handle), &handle);
  delete bs;

  // assign it to input_q
  uint64_t* input_ptr = (uint64_t*)&input.db_handle;
  int number_of_hash_elements = sizeof(hash_t) / sizeof(uint64_t);
  for(int i = 0; i < number_of_hash_elements; i++) {
    mpq_set_ui(input_q[i], input_ptr[i], 1);
  }
  for (int i = number_of_hash_elements; i < num_inputs; i++) {
    mpq_set_ui(input_q[i], rand(), 1);
  }

  clear_del_vec(full_db_handle, num_ints);
}
Exemplo n.º 3
0
int main (int argc, char* argv[]) {
    if (argc <= 2) {
        print_usage(argv);
        exit(1);
    }

    struct comp_params p = parse_params("./bin/" + string(NAME) + ".params");

    mpz_t prime;
    mpz_init_set_str(prime, "21888242871839275222246405745257275088548364400416034343698204186575808495617", 10);



    if (!strcmp(argv[1], "setup")) {
        if (argc != 4 && argc != 5) {
            print_usage(argv);
            exit(1);
        }
        string verification_key_fn = std::string(v_dir) + argv[2];
        string proving_key_fn = std::string(p_dir) + argv[3];
        string unprocessed_vkey_fn;
        if (argc == 5) {
            unprocessed_vkey_fn = std::string(v_dir) + argv[4];
        }
        std::cout << "Creating proving/verification keys, will write to " << verification_key_fn
                  << ", " << proving_key_fn << std::endl;
        run_setup(p.n_constraints, p.n_inputs, p.n_outputs, p.n_vars, prime, verification_key_fn, proving_key_fn, unprocessed_vkey_fn);
    }
    else if (!strcmp(argv[1], "gen_input")) {
        if (argc < 3) {
            print_usage(argv);
            exit(1);
        }

        std::string input_filename = std::string(shared_dir) + argv[2];
        std::cout << "Generating inputs, will write to " << input_filename << std::endl;

        mpq_t * input_q;
        alloc_init_vec(&input_q, p.n_inputs);

        gen_input(input_q, p.n_inputs, argv);

        std::ofstream inputs_file(input_filename);

        for (int i = 0; i < p.n_inputs; i++) {
            inputs_file << input_q[i] << std::endl;
        }
        inputs_file.close();

        clear_del_vec(input_q, p.n_inputs);
    }
    else if(!strcmp(argv[1], "verify")) {
        if(argc != 6) {
            print_usage(argv);
            exit(1);
        }
        std::string verification_key_fn = std::string(v_dir) + argv[2];
        std::string inputs_fn = std::string(shared_dir) + argv[3];
        std::string outputs_fn = std::string(shared_dir) + argv[4];
        std::string proof_fn = std::string(shared_dir) + argv[5];
        verify(verification_key_fn, inputs_fn, outputs_fn, proof_fn, p.n_inputs, p.n_outputs, prime);
    }
    else {
        print_usage(argv);
        exit(1);
    }
}