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); }
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; }