Ejemplo n.º 1
0
void CRC_Code::set_code(const std::string &code)
{
  bvec poly;
  for (int i = 0; i < 18;i++) {
    if (crccode[i][0] == code)
      poly = bvec(crccode[i][1]);
  }

  if ((code == "WCDMA-8") || (code == "WCDMA-12") || (code == "WCDMA-16") || (code == "WCDMA-24")) {
    reverse_parity = true;
  }

  it_assert(poly.size() > 0, "This CRC code doesn't exist in the tables");
  set_generator(poly);
}
Ejemplo n.º 2
0
static int check_prime(ENGINE *engine, struct prime *pr)
{
    DH *dh1, *dh2;
    BIGNUM *p, *g;
    unsigned char *sec1, *sec2;
    size_t size;
    int ret;

    if (verbose)
	printf("Testing %s\n", pr->name);

    p = BN_new();
    g = BN_new();
    dh1 = DH_new_method(engine);
    dh2 = DH_new_method(engine);

    /* 1. set shared parameter */
    set_prime(p, pr->value);
    set_generator(g);
    dh1->p = BN_dup(p);
    dh1->g = BN_dup(g);
    dh2->p = BN_dup(p);
    dh2->g = BN_dup(g);

    /* 2. set keys */
    ret = DH_generate_key(dh1);
    if (ret == 0) {
	fprintf(stderr, "DH_generate_key\n");
	exit(EXIT_FAILURE);
    }
    ret = DH_generate_key(dh2);
    if (ret == 0) {
	fprintf(stderr, "DH_generate_key\n");
	exit(EXIT_FAILURE);
    }

    /* 3. compute shared secret */
    size = DH_size(dh1);
    if (size != DH_size(dh2)) {
	fprintf(stderr, "size does not match!\n");
	exit(EXIT_FAILURE);
    }
    sec1 = malloc(size);
    sec2 = malloc(size);
    if (!sec1 || !sec2) {
	perror("malloc");
	exit(EXIT_FAILURE);
    }
    ret = DH_compute_key(sec1, dh2->pub_key, dh1);
    if (ret == -1) {
	fprintf(stderr, "DH_compute_key");
	exit(EXIT_FAILURE);
    }
    ret = DH_compute_key(sec2, dh1->pub_key, dh2);
    if (ret == -1) {
	fprintf(stderr, "DH_compute_key");
	exit(EXIT_FAILURE);
    }

    /* 4. compare shared secret */
    if (verbose) {
	printf("shared secret 1\n");
	print_secret(sec1, size);
	printf("shared secret 2\n");
	print_secret(sec2, size);
    }

    if (memcmp(sec1, sec2, size) == 0)
	ret = 1;
    else
	ret = 0;

    free(sec2);
    free(sec1);
    DH_free(dh2);
    DH_free(dh1);
    BN_free(g);
    BN_free(p);

    return ret;
}