コード例 #1
0
void main()
{
        int i;
	float svector[3] = {0.1, -0.345, 7.3};
	float *dvector;
	float sloadvector[3];
	float *dloadvector;
        int dim = 3;
	int dloaddim=0;

	dvector = (float *)malloc(3 * sizeof(float));
	dvector[0] = 0.1;
	dvector[1] = -0.345;
	dvector[2] = 7.3;

	save_vector(svector, "sbinary.mat", dim);
	save_ascii_vector(svector, "sascii.mat", dim);
	save_packed_vector(svector, "spacked.mat", dim);

	save_vector(dvector, "dbinary.mat", dim);
	save_ascii_vector(dvector, "dascii.mat", dim);
	save_packed_vector(dvector, "dpacked.mat", dim);
	printf("saved 6 vectors\n");

	dloadvector = load_vector("dbinary.mat", &dloaddim);
	printf("loaded vector of length %d\n", dloaddim);
        for(i=0; i<3; i++)
	  printf("%4.2f ", dloadvector[i]);
	printf ("\n");
	load_in_vector(sloadvector, "dascii.mat", dim);
	printf("loaded vector of length %d\n", dim);
        for(i=0; i<3; i++)
	  printf("%4.2f ", sloadvector[i]);
	printf ("\n");
	dloadvector = load_vector("dpacked.mat", &dloaddim);
	printf("loaded vector of length %d\n", dloaddim);
        for(i=0; i<3; i++)
	  printf("%4.2f ", dloadvector[i]);
	printf ("\n");
	load_in_vector(sloadvector, "dbinary.mat", dim);
	printf("loaded vector of length %d\n", dim);
        for(i=0; i<3; i++)
	  printf("%4.2f ", sloadvector[i]);
	printf ("\n");
	dloadvector = load_vector("dascii.mat", &dloaddim);
	printf("loaded vector of length %d\n", dloaddim);
        for(i=0; i<3; i++)
	  printf("%4.2f ", dloadvector[i]);
	printf ("\n");
	load_in_vector(sloadvector, "dpacked.mat", dim);
	printf("loaded vector of length %d\n", dim);
        for(i=0; i<3; i++)
	  printf("%4.2f ", sloadvector[i]);
	printf ("\ndone.\n");
}
コード例 #2
0
ファイル: io.hpp プロジェクト: mpetri/vlg_matching
void load(std::vector<X>& x, std::istream& in)
{
    typename std::vector<X>::size_type size;
    load(size, in);
    x.resize(size);
    load_vector(x, in);
}
コード例 #3
0
 void load(Archive& ar, const unsigned Integer) {
   load_sparse_matrix(ar, reduce_A_);
   load_vector(ar, W_);
   ar & R_;
   ar & G_;
   ar & C_;
   ar & ins_;
   ar & iter_;
   ar & time_;
 }
コード例 #4
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);
}
コード例 #5
0
ファイル: polyeval_d3_p.cpp プロジェクト: PickXu/pantry
void PolyEvalD3Prover::deduce_queries() {
  int f_con_filled = -1;
  load_vector(num_coefficients, coefficients, (char *)"coefficients");
  
  for (int rho=0; rho<num_repetitions; rho++) {
    if (rho == 0) m_plainq.begin_with_init();
    else m_plainq.begin_with_history();
    int query_id = 1;

    for (int i=0; i<NUM_REPS_LIN; i++) {
      v->create_lin_test_queries(size_f1_vec, f1_q1, f1_q2, f1_q3, NULL,
          f_con_filled, NULL, prime);
      f_con_filled += 3;
      
      v->create_lin_test_queries(size_f2_vec, f2_q1, f2_q2, f2_q3, NULL,
          f_con_filled, NULL, prime);
      f_con_filled += 3;
 
      v->create_lin_test_queries(size_f3_vec, f3_q1, f3_q2, f3_q3, NULL,
          f_con_filled, NULL, prime);
      f_con_filled += 3;
 
      //TODO: can be folded into a function
      snprintf(scratch_str, BUFLEN-1, "q%d_qquery_r_%d", query_id++, rho);
      dump_vector(size_f1_vec, f1_q1, scratch_str);
      //send_file(scratch_str);

      snprintf(scratch_str, BUFLEN-1, "q%d_qquery_r_%d", query_id++, rho);
      dump_vector(size_f1_vec, f1_q2, scratch_str);
      //send_file(scratch_str);

      snprintf(scratch_str, BUFLEN-1, "q%d_qquery_r_%d", query_id++, rho);
      dump_vector(size_f1_vec, f1_q3, scratch_str);
      //send_file(scratch_str);

      snprintf(scratch_str, BUFLEN-1, "q%d_qquery_r_%d", query_id++, rho);
      dump_vector(size_f2_vec, f2_q1, scratch_str);
      //send_file(scratch_str);

      snprintf(scratch_str, BUFLEN-1, "q%d_qquery_r_%d", query_id++, rho);
      dump_vector(size_f2_vec, f2_q2, scratch_str);
      //send_file(scratch_str);

      snprintf(scratch_str, BUFLEN-1, "q%d_qquery_r_%d", query_id++, rho);
      dump_vector(size_f2_vec, f2_q3, scratch_str);
      //send_file(scratch_str);

      snprintf(scratch_str, BUFLEN-1, "q%d_qquery_r_%d", query_id++, rho);
      dump_vector(size_f3_vec, f3_q1, scratch_str);
      //send_file(scratch_str);

      snprintf(scratch_str, BUFLEN-1, "q%d_qquery_r_%d", query_id++, rho);
      dump_vector(size_f3_vec, f3_q2, scratch_str);
      //send_file(scratch_str);

      snprintf(scratch_str, BUFLEN-1, "q%d_qquery_r_%d", query_id++, rho);
      dump_vector(size_f3_vec, f3_q3, scratch_str);
      //send_file(scratch_str);

      // use one of the linearity queries as self correction queries
      if (i == 0) {
        for (int i=0; i<size_f1_vec; i++) {
          mpz_set(f1_q4[i], f1_q1[i]);
          mpz_set(f1_q5[i], f1_q2[i]);
        }

        for (int i=0; i<size_f2_vec; i++)
          mpz_set(f2_q4[i], f2_q1[i]);
       
        for (int i=0; i<size_f3_vec; i++)
          mpz_set(f3_q4[i], f3_q1[i]);
      }
    }

    v->create_corr_test_queries_reuse(size_f1_vec, f1_q4, size_f1_vec, f1_q5,
                                f2_q1, f2_q4, NULL, NULL, NULL,
                                f_con_filled, NULL, f_con_filled, NULL,
                                f_con_filled, NULL, prime, false);
    f_con_filled += 1;
 
    snprintf(scratch_str, BUFLEN-1, "q%d_qquery_r_%d", query_id++, rho);
    dump_vector(size_f2_vec, f2_q1, scratch_str);
    //send_file(scratch_str);

    v->create_corr_test_queries_reuse(size_f1_vec, f1_q4,
                                size_f2_vec, f2_q4, f3_q1, f3_q4,
                                NULL, NULL, NULL, f_con_filled,
                                NULL, f_con_filled, NULL, f_con_filled,
                                NULL, prime, false);

    f_con_filled += 1;
 
    snprintf(scratch_str, BUFLEN-1, "q%d_qquery_r_%d", query_id++, rho);
    dump_vector(size_f3_vec, f3_q1, scratch_str);
    //send_file(scratch_str);


    // circuit test
    v->get_random_vec_pub(size_f1_vec+1, alpha, prime);

    // formulate a; a = -\alpha_0 \cdot degree-2 coefficients
    mpz_neg(neg, alpha[0]);

    // set the query to zero first
    for (int i=0; i<size_f3_vec; i++) {
      mpz_set_ui(f3_q1[i], 0);
    }

    int index_coefficients = 0;
    int index_query = 0;
    for (int i=0; i<size_f1_vec; i++) {
      for (int j=0; j<=i; j++) {
        for (int k=0; k<=j; k++) {
          index_query = (i*size_f1_vec+j)*size_f1_vec+k;
          mpz_mul(f3_q1[index_query], neg, coefficients[index_coefficients]);
          mpz_mod(f3_q1[index_query], f3_q1[index_query], prime);

          index_coefficients++;
        }
      }
    }

    int offset = (size_f3_vec + 3*size_f2_vec + 2*size_f1_vec)/6;

    // quadratic part of circuit test query
    for (int i=0; i<size_f2_vec; i++) {
      mpz_set_ui(f2_q1[i], 0);
    }

    int index;
    int k = 0;
    for (int i=0; i<size_f1_vec; i++) {
      for (int j=0; j<=i; j++) {
        index = size_f1_vec*i + j;
        mpz_mul(f2_q1[index], neg, coefficients[offset+k]);
        mpz_mod(f2_q1[index], f2_q1[index], prime);
        k++;
      }
    }
    offset += (size_f1_vec * size_f1_vec + size_f1_vec)/2;

    // formulate b; b = -\alpha_0 \cdot degree-1 coefficients + [\alpha_1,
    // \alpha_2, ... , \alpha_{size_f1_vec+1}]
    for (int i=0; i<size_f1_vec; i++) {
      mpz_mul(f1_q2[i], neg, coefficients[offset+i]);

      mpz_add(f1_q2[i], alpha[i+1], f1_q2[i]);
      mpz_mod(f1_q2[i], f1_q2[i], prime);
    }

    v->create_ckt_test_queries(size_f1_vec, f1_q2, f1_q3, f1_q4,
                               NULL, f_con_filled, NULL, prime);
    f_con_filled += 1;
    v->create_ckt_test_queries(size_f2_vec, f2_q1, f2_q3,
                               f2_q4, NULL, f_con_filled, NULL, prime);
    f_con_filled += 1;
    v->create_ckt_test_queries(size_f3_vec, f3_q1,
                               f3_q3, f3_q4, NULL, f_con_filled, NULL, prime);
    f_con_filled += 1;
 
    snprintf(scratch_str, BUFLEN-1, "q%d_qquery_r_%d", query_id++, rho);
    dump_vector(size_f1_vec, f1_q3, scratch_str);
    //send_file(scratch_str);

    snprintf(scratch_str, BUFLEN-1, "q%d_qquery_r_%d", query_id++, rho);
    dump_vector(size_f2_vec, f2_q3, scratch_str);
    //send_file(scratch_str);

    snprintf(scratch_str, BUFLEN-1, "q%d_qquery_r_%d", query_id++, rho);
    dump_vector(size_f3_vec, f3_q3, scratch_str);
    //send_file(scratch_str);
    m_plainq.end();

  }
}
コード例 #6
0
ファイル: polyeval_d3_p.cpp プロジェクト: PickXu/pantry
//PROVER's CODE
void PolyEvalD3Prover::
prover_computation_commitment() {
  load_vector(expansion_factor*m, f1_commitment, (char *)"f1_commitment_query", FOLDER_WWW_DOWNLOAD);
  load_vector(expansion_factor*size_f2_vec, f2_commitment, (char *)"f2_commitment_query", FOLDER_WWW_DOWNLOAD);
  load_vector(expansion_factor*size_f3_vec, f3_commitment, (char *)"f3_commitment_query", FOLDER_WWW_DOWNLOAD);

  m_computation.begin_with_init();
  //for (int k=0; k<INNER_LOOP_SMALL; k++)
  load_vector(num_coefficients, coefficients, (char *)"coefficients", FOLDER_WWW_DOWNLOAD);
  m_computation.end();

  for (int i=batch_start; i<=batch_end; i++) {
    m_computation.begin_with_history();

    //for (int k=0; k<INNER_LOOP_SMALL; k++)
    {
      snprintf(scratch_str, BUFLEN-1, "input_b_%d", i);
      load_vector(m, variables, scratch_str, FOLDER_WWW_DOWNLOAD);

      for (int j=0; j<expansion_factor; j++)
        mpz_set_ui(output[j], 0);

      computation_polyeval(output[0]);

      // start saving the state
      snprintf(scratch_str, BUFLEN-1, "output_b_%d", i);
      dump_scalar(output[0], scratch_str, FOLDER_WWW_DOWNLOAD);
    }
    m_computation.end();
    computation_assignment(output[0]);
    snprintf(scratch_str, BUFLEN-1, "f1_assignment_vector_b_%d", i);
    dump_vector(m, F1, scratch_str, FOLDER_WWW_DOWNLOAD);

    snprintf(scratch_str, BUFLEN-1, "f2_assignment_vector_b_%d", i);
    dump_vector(size_f2_vec, F2, scratch_str, FOLDER_WWW_DOWNLOAD);

    snprintf(scratch_str, BUFLEN-1, "f3_assignment_vector_b_%d", i);
    dump_vector(size_f3_vec, F3, scratch_str, FOLDER_WWW_DOWNLOAD);
  }

  for (int i=batch_start; i<=batch_end; i++) {
    if (i == 0)
      m_answer_queries.begin_with_init();
    else
      m_answer_queries.begin_with_history();


    snprintf(scratch_str, BUFLEN-1, "f1_assignment_vector_b_%d", i);
    load_vector(m, F1, scratch_str, FOLDER_WWW_DOWNLOAD);

    snprintf(scratch_str, BUFLEN-1, "f2_assignment_vector_b_%d", i);
    load_vector(size_f2_vec, F2, scratch_str, FOLDER_WWW_DOWNLOAD);

    snprintf(scratch_str, BUFLEN-1, "f3_assignment_vector_b_%d", i);
    load_vector(size_f3_vec, F3, scratch_str, FOLDER_WWW_DOWNLOAD);

    v->dot_product_enc(m, f1_commitment, F1, dotp[0], dotp[1]);
    v->dot_product_enc(size_f2_vec, f2_commitment, F2, output[0], output[1]);
    v->add_enc(dotp[0], dotp[1], dotp[0], dotp[1], output[0], output[1]);
    v->dot_product_enc(size_f3_vec, f3_commitment, F3, output[0], output[1]);
    v->add_enc(dotp[0], dotp[1], dotp[0], dotp[1], output[0], output[1]);

    snprintf(scratch_str, BUFLEN-1, "f_commitment_answer_b_%d", i);
    dump_vector(expansion_factor, dotp, scratch_str, FOLDER_WWW_DOWNLOAD);
    m_answer_queries.end();
  }
}
コード例 #7
0
void ColorVisionDeficiency::apply(Color *input, Color *output)
{
	Color linear_input, linear_output;
	color_rgb_get_linear(input, &linear_input);
	vector3 vi, vo1, vo2;
	load_vector(&linear_input, &vi);
	matrix3x3 matrix1, matrix2;
	int index = floor(strength * 10);
	int index_secondary = std::min(index + 1, 10);
	float interpolation_factor = 1 - ((strength * 10) - index);

	vector3 lms;
	if ((type == PROTANOPIA) || (type == DEUTERANOPIA) || (type == TRITANOPIA)){
		load_matrix(rgb_to_lms, &matrix1);
		load_matrix(lms_to_rgb, &matrix2);
		vector3_multiply_matrix3x3(&vi, &matrix1, &lms);
	}

	switch (type){
		case PROTANOMALY:
			load_matrix(protanomaly[index], &matrix1);
			load_matrix(protanomaly[index_secondary], &matrix2);
			vector3_multiply_matrix3x3(&vi, &matrix1, &vo1);
			vector3_multiply_matrix3x3(&vi, &matrix2, &vo2);
			break;
		case DEUTERANOMALY:
			load_matrix(deuteranomaly[index], &matrix1);
			load_matrix(deuteranomaly[index_secondary], &matrix2);
			vector3_multiply_matrix3x3(&vi, &matrix1, &vo1);
			vector3_multiply_matrix3x3(&vi, &matrix2, &vo2);
			break;
		case TRITANOMALY:
			load_matrix(tritanomaly[index], &matrix1);
			load_matrix(tritanomaly[index_secondary], &matrix2);
			vector3_multiply_matrix3x3(&vi, &matrix1, &vo1);
			vector3_multiply_matrix3x3(&vi, &matrix2, &vo2);
			break;
		case PROTANOPIA:
			if (lms.z / lms.y < rgb_anchor[2] / rgb_anchor[1]){
				lms.x = -(protanopia_abc[0].y * lms.y + protanopia_abc[0].z * lms.z) / protanopia_abc[0].x;
			}else{
				lms.x = -(protanopia_abc[1].y * lms.y + protanopia_abc[1].z * lms.z) / protanopia_abc[1].x;
			}
			vector3_multiply_matrix3x3(&lms, &matrix2, &vo1);
			load_vector(&linear_input, &vo2);
			interpolation_factor = strength;
			break;
		case DEUTERANOPIA:
			if (lms.z / lms.x < rgb_anchor[2] / rgb_anchor[0]){
				lms.y = -(deuteranopia_abc[0].x * lms.x + deuteranopia_abc[0].z * lms.z) / deuteranopia_abc[0].y;
			}else{
				lms.y = -(deuteranopia_abc[1].x * lms.x + deuteranopia_abc[1].z * lms.z) / deuteranopia_abc[1].y;
			}
			vector3_multiply_matrix3x3(&lms, &matrix2, &vo1);
			load_vector(&linear_input, &vo2);
			interpolation_factor = strength;
			break;
		case TRITANOPIA:
			if (lms.y / lms.x < rgb_anchor[1] / rgb_anchor[0]){
				lms.z = -(tritanopia_abc[0].x * lms.x + tritanopia_abc[0].y * lms.y) / tritanopia_abc[0].z;
			}else{
				lms.z = -(tritanopia_abc[1].x * lms.x + tritanopia_abc[1].y * lms.y) / tritanopia_abc[1].z;
			}
			vector3_multiply_matrix3x3(&lms, &matrix2, &vo1);
			load_vector(&linear_input, &vo2);
			interpolation_factor = strength;
			break;
		default:
			color_copy(input, output);
			return;
	}

	linear_output.rgb.red = vo1.x * interpolation_factor + vo2.x * (1 - interpolation_factor);
	linear_output.rgb.green = vo1.y * interpolation_factor + vo2.y * (1 - interpolation_factor);
	linear_output.rgb.blue = vo1.z * interpolation_factor + vo2.z * (1 - interpolation_factor);
	color_linear_get_rgb(&linear_output, output);
	color_rgb_normalize(output);
}
コード例 #8
0
void MatrixCubicVerifier::create_plain_queries() {
  uint32_t m2 = input_size*input_size;

  // keeps track of #filled coins
  int f1_con_filled = -1;

  for (int rho=0; rho<num_repetitions; rho++) {
    if (rho == 0) m_plainq.begin_with_init();
    else m_plainq.begin_with_history();

    int query_id = 1;
    for (int i=0; i<NUM_REPS_LIN; i++) {
      v->create_lin_test_queries(hadamard_code_size, f1_q1, f1_q2, f1_q3, f1_consistency, f1_con_filled, f_con_coins, prime);

      f1_con_filled += 3;

      //snprintf(scratch_str, BUFLEN-1, "q%d_qquery_r_%d", query_id++, rho);
      //dump_vector(hadamard_code_size, f1_q1, scratch_str);
      //send_file(scratch_str);

      //snprintf(scratch_str, BUFLEN-1, "q%d_qquery_r_%d", query_id++, rho);
      //dump_vector(hadamard_code_size, f1_q2, scratch_str);
      //send_file(scratch_str);

      query_id++;
      //snprintf(scratch_str, BUFLEN-1, "q%d_qquery_r_%d", query_id++, rho);
      //dump_vector(hadamard_code_size, f1_q3, scratch_str);
      //send_file(scratch_str);

      // use one of the linearity queries as self correction queries
      if (i == 0) {
        for (int i=0; i<hadamard_code_size; i++)
          mpz_set(f1_q4[i], f1_q1[i]);
      }
    }

    // f1_q1 = q3
    // f1_q2 = q4
    // f2_q1 = q1
    // f2_q2 = q2
    mpz_set_ui(f_con_coins[f1_con_filled+1], 0);
    mpz_set_ui(f_con_coins[f1_con_filled+2], 0);

    f1_con_filled += 2;
    query_id += 2;
    v->create_corr_test_queries_vproduct(input_size, f2_q1, f2_q2, f1_q1, f1_q4,
                                         f1_consistency, f1_con_filled, f_con_coins, prime);

    f1_con_filled += 1;

    //snprintf(scratch_str, BUFLEN-1, "q%d_qquery_r_%d", query_id++, rho);
    //dump_vector(hadamard_code_size, f1_q1, scratch_str);
    //send_file(scratch_str);

    m_plainq.end();

    // compute answers to f1(q1) and f1(q2) locally now itself
    if (rho == 0) m_runtests.begin_with_init();
    else m_runtests.begin_with_history();
    for (int b=0; b<batch_size; b++) {
      mpz_set_ui(a1, 0);
      mpz_set_ui(a2, 0);
      snprintf(scratch_str, BUFLEN-1, "input1_b_%d", b);
      load_vector(2*input_size*input_size, A, scratch_str);

      //snprintf(scratch_str, BUFLEN-1, "input1_b_%d", b);
      //load_vector(input_size*input_size, B, scratch_str);

      int index;
      mpz_set_ui(a3, 0);
      for (int k=0; k<input_size; k++) {
        // dot product of k^th row of A with k^th row of f2_q1
        //\sum_{j=1}{m}{A[k][j] \cdot f2_q1[k][j]}
        mpz_set_ui(a1, 0);
        mpz_set_ui(a2, 0);

        for (int j=0; j<input_size; j++) {
          index = j*input_size+k;
          mpz_mul(temp, A[index], f2_q1[index]);
          mpz_add(a1, a1, temp);
        }

        for (int i=0; i<input_size; i++) {
          index = k*input_size+i;
          mpz_mul(temp, B[index], f2_q2[index]);
          mpz_add(a2, a2, temp);
        }

        mpz_mul(temp, a1, a2);
        mpz_add(a3, a3, temp);
        mpz_mod(a3, a3, prime);
      }

      snprintf(scratch_str, BUFLEN-1, "corr_answer_b_%d_r_%d", b, rho);
      dump_scalar(a3, scratch_str);
    }
    m_runtests.end();

    // circuit test
    m_plainq.begin_with_history();
    v->get_random_vec_pub(input_size*input_size, gamma, prime);

    for (int i=0; i<hadamard_code_size; i++)
      mpz_set_ui(f1_q1[i], 0);

    int index, index2;
    for (int i=0; i<input_size; i++) {
      for (int j=0; j<input_size; j++) {
        // add gamma[i*input_size+j] to all the cells in query
        index2 = i*input_size+j;
        for (int k=0; k<input_size; k++) {
          index = index2 * input_size+k;
          mpz_add(f1_q1[index], f1_q1[index], gamma[index2]);
        }
      }
    }

    for (int i=0; i<input_size*input_size*input_size; i++)
      mpz_mod(f1_q1[i], f1_q1[i], prime);

    v->create_ckt_test_queries(hadamard_code_size, f1_q1, f1_q3, f1_q4, f1_consistency,
                               f1_con_filled, f_con_coins, prime);

    //snprintf(scratch_str, BUFLEN-1, "q%d_qquery_r_%d", query_id++, rho);
    //dump_vector(hadamard_code_size, f1_q3, scratch_str);
    //send_file(scratch_str);

    f1_con_filled += 1;

    m_plainq.end();

    m_runtests.begin_with_history();
    // finally compute c
    for (int i=0; i<batch_size; i++) {
      snprintf(scratch_str, BUFLEN-1, "output_b_%d", i);
      load_vector(input_size*input_size, C, scratch_str);

      int c_index = i * num_repetitions + rho;
      mpz_set_ui(c_values[c_index], 0);

      for (int j=0; j<input_size*input_size; j++) {
        mpz_neg(temp, gamma[j]);
        mpz_mul(temp, temp, C[j]);
        mpz_add(c_values[c_index], c_values[c_index], temp);
      }
    }
    m_runtests.end();
  }

  dump_vector(hadamard_code_size, f1_consistency, (char *)"f1_consistency_query");
  send_file((char *)"f1_consistency_query");
}
コード例 #9
0
ファイル: verifier.cpp プロジェクト: PickXu/pantry
void Verifier::prepare_answers(int beta) {
#if NONINTERACTIVE == 1
  prepare_noninteractive_answers(beta);
#else
#if VERBOSE == 1
  cout << endl << "LOG: Batch " << beta << endl;
#endif

  FILE *fp = NULL;
  if (optimize_answers) {
    char f_name[BUFLEN];
    snprintf(f_name, BUFLEN - 1, "answers_%d", beta + 1);
    snprintf(f_name, BUFLEN - 1, "%s/answers_%d",
             FOLDER_STATE, beta + 1);
    fp = fopen(f_name, "rb");
    if (fp == NULL) {
      printf("Failed to open %s file for reading.", f_name);
      exit(1);
    }
  }

  // only one commitment answer and one consistency answer
  string commitment_answer_str = "f_commitment_answer_b_%d";
  snprintf(scratch_str, BUFLEN - 1, commitment_answer_str.c_str(), beta);
  load_vector(expansion_factor, temp_arr_ptrs[0], scratch_str);

  if (!optimize_answers) {
    string consistency_answer_str = "f_consistency_answer_b_%d";
    snprintf(scratch_str, BUFLEN - 1, consistency_answer_str.c_str(), beta);
    load_scalar(a, scratch_str);
  } else {
    size_t bytes = mpz_inp_raw(a, fp);
    fseek(fp, bytes, SEEK_CUR);
  }

  for (uint32_t j=0; j<num_repetitions*num_lin_pcp_queries; j++)
    mpz_set_ui(f_answers[j], 0);

  std::list<string> files = get_files_in_dir((char *)FOLDER_STATE);
  for (int rho = 0; rho < num_repetitions; rho++) {
    if (!optimize_answers) {
      char *file_exp = (char *)"_qquery_answer_b_%d_r_%d";
      snprintf(scratch_str, BUFLEN-1, file_exp, beta, rho);
      std::list<string>::const_iterator it = files.begin();

      for (; it != files.end(); it++) {
        string file_name = *it;
        size_t b_index = file_name.find(scratch_str);
        if (b_index != string::npos) {
          int q_num = atoi(file_name.substr(file_name.find("q") + 1, b_index).c_str());
          load_scalar(f_answers[rho * num_lin_pcp_queries + Q_list[q_num - 1]],
                      (char*)file_name.c_str());
        }
      }
    } else {
      for (uint32_t q = 0; q < Q_list.size(); q++) {
        size_t bytes =
          mpz_inp_raw(f_answers[rho * num_lin_pcp_queries + Q_list[q]], fp);
        fseek(fp, bytes, SEEK_CUR);
      }
    }
    //populate_answers(f_answers, rho, num_repetitions, beta);
  }

  snprintf(scratch_str, BUFLEN-1, "input_b_%d", beta);
  load_vector(size_input, input, scratch_str);

  snprintf(scratch_str, BUFLEN-1, "output_b_%d", beta);
  load_vector(size_output, output, scratch_str);

  if (output_q != NULL) {
    snprintf(scratch_str, BUFLEN-1, "output_q_b_%d", beta);
    load_vector(size_output, output_q, scratch_str);
    if (verify_conversion_to_z(size_output, output, output_q, prime) == false) {
      cout<<"LOG: Prover presented two different versions of output"<<endl;
      exit(1);
    } 
  }

  if (fp != NULL)
    fclose(fp);
#endif
}
コード例 #10
0
void load_obj(unsigned int shader, char* fname) {
	
	FILE *ifp;
	ifp = fopen(fname, "r");
	int i;
	char lineType[2];
	while ( fscanf(ifp, "%s", lineType) != EOF ) {
		if ( lineType[0] == '#' ) {
			// Line is comment
		}
		else if ( lineType[0] == 'm' ) {
			// Line is material
		}
		else if ( lineType[0] == 'v' ) {
			// Normals
			if ( lineType[1] == 'n' ) {
				load_vector(ifp, normalArray, &numNormals);
				numNormals++;
			}
			// Texcoord
			else if ( lineType[1] == 't' ) {
				load_coord(ifp, texCoordArray, &numTexCoords);
				numTexCoords++;
			}
			// Tangent
			else if ( lineType[1] == 'x' ) {
				load_vector(ifp, tangentArray, &numTangents);
				// numTangents++;
			}
			// Bitangent
			else if ( lineType[1] == 'y' ) {
				load_vector(ifp, biTangentArray, &numTangents);
				numTangents++;
			}
			// Vertex
			else {
				load_vector(ifp, vertexArray, &numVertices);
				numVertices++;
			}
		} else if ( lineType[0] == 'f' ) {
			load_vector_face(ifp, faceArray, &numFaces);
			numFaces++;
		}
		char line[100];
		fgets (line, 100, ifp);
	}
	
	fclose(ifp);
	
	GLint index_tangent = glGetAttribLocation(shader, "tangent");
	GLint index_bitangent = glGetAttribLocation(shader, "bitangent");
	
	for( i=0; i<numFaces; i++ ) {
		int j = 0;
		for (j=0; j<4; j++) {
			// Vertices
			indices[i*12 + j*3 + 0] = vertexArray[faceArray[i].v[j]-1].x;
			indices[i*12 + j*3 + 1] = vertexArray[faceArray[i].v[j]-1].y;
			indices[i*12 + j*3 + 2] = vertexArray[faceArray[i].v[j]-1].z;
			// Texcoords
			indices[numFaces*12 + i*8 + j*2 + 0] = texCoordArray[faceArray[i].t[j]-1].x;
			indices[numFaces*12 + i*8 + j*2 + 1] = texCoordArray[faceArray[i].t[j]-1].y;
			// Normals
			indices[numFaces*20 + i*12 + j*3 + 0] = normalArray[faceArray[i].n[j]-1].x;
			indices[numFaces*20 + i*12 + j*3 + 1] = normalArray[faceArray[i].n[j]-1].y;
			indices[numFaces*20 + i*12 + j*3 + 2] = normalArray[faceArray[i].n[j]-1].z;

			// Shader stuff
			
			int vi = faceArray[i].v[j]-1;
			int ti = faceArray[i].t[j]-1;
			int ni = faceArray[i].n[j]-1;
			glNormal3fv( toArray(normalArray[ni]));
			glTexCoord2fv( toArrayCoords(texCoordArray[ti]));
			glVertexAttrib3fv(index_tangent, toArray(tangentArray[vi]));
			glVertexAttrib3fv(index_bitangent, toArray(biTangentArray[vi]));
			glVertex3fv( toArray(vertexArray[vi]));
			
		}	
	}	
}