| Absolute File Name: | /home/opencoverage/opencoverage/guest-scripts/openssl/src/crypto/bn/bn_prime.c |
| Source code | Switch to Preprocessed file |
| Line | Source | Count | ||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | /* | - | ||||||||||||||||||||||||||||||||||||||||||
| 2 | * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. | - | ||||||||||||||||||||||||||||||||||||||||||
| 3 | * | - | ||||||||||||||||||||||||||||||||||||||||||
| 4 | * Licensed under the OpenSSL license (the "License"). You may not use | - | ||||||||||||||||||||||||||||||||||||||||||
| 5 | * this file except in compliance with the License. You can obtain a copy | - | ||||||||||||||||||||||||||||||||||||||||||
| 6 | * in the file LICENSE in the source distribution or at | - | ||||||||||||||||||||||||||||||||||||||||||
| 7 | * https://www.openssl.org/source/license.html | - | ||||||||||||||||||||||||||||||||||||||||||
| 8 | */ | - | ||||||||||||||||||||||||||||||||||||||||||
| 9 | - | |||||||||||||||||||||||||||||||||||||||||||
| 10 | #include <stdio.h> | - | ||||||||||||||||||||||||||||||||||||||||||
| 11 | #include <time.h> | - | ||||||||||||||||||||||||||||||||||||||||||
| 12 | #include "internal/cryptlib.h" | - | ||||||||||||||||||||||||||||||||||||||||||
| 13 | #include "bn_lcl.h" | - | ||||||||||||||||||||||||||||||||||||||||||
| 14 | - | |||||||||||||||||||||||||||||||||||||||||||
| 15 | /* | - | ||||||||||||||||||||||||||||||||||||||||||
| 16 | * The quick sieve algorithm approach to weeding out primes is Philip | - | ||||||||||||||||||||||||||||||||||||||||||
| 17 | * Zimmermann's, as implemented in PGP. I have had a read of his comments | - | ||||||||||||||||||||||||||||||||||||||||||
| 18 | * and implemented my own version. | - | ||||||||||||||||||||||||||||||||||||||||||
| 19 | */ | - | ||||||||||||||||||||||||||||||||||||||||||
| 20 | #include "bn_prime.h" | - | ||||||||||||||||||||||||||||||||||||||||||
| 21 | - | |||||||||||||||||||||||||||||||||||||||||||
| 22 | static int witness(BIGNUM *w, const BIGNUM *a, const BIGNUM *a1, | - | ||||||||||||||||||||||||||||||||||||||||||
| 23 | const BIGNUM *a1_odd, int k, BN_CTX *ctx, | - | ||||||||||||||||||||||||||||||||||||||||||
| 24 | BN_MONT_CTX *mont); | - | ||||||||||||||||||||||||||||||||||||||||||
| 25 | static int probable_prime(BIGNUM *rnd, int bits, prime_t *mods); | - | ||||||||||||||||||||||||||||||||||||||||||
| 26 | static int probable_prime_dh_safe(BIGNUM *rnd, int bits, | - | ||||||||||||||||||||||||||||||||||||||||||
| 27 | const BIGNUM *add, const BIGNUM *rem, | - | ||||||||||||||||||||||||||||||||||||||||||
| 28 | BN_CTX *ctx); | - | ||||||||||||||||||||||||||||||||||||||||||
| 29 | - | |||||||||||||||||||||||||||||||||||||||||||
| 30 | int BN_GENCB_call(BN_GENCB *cb, int a, int b) | - | ||||||||||||||||||||||||||||||||||||||||||
| 31 | { | - | ||||||||||||||||||||||||||||||||||||||||||
| 32 | /* No callback means continue */ | - | ||||||||||||||||||||||||||||||||||||||||||
| 33 | if (!cb)
| 646-4096 | ||||||||||||||||||||||||||||||||||||||||||
| 34 | return 1; executed 646 times by 1 test: return 1;Executed by:
| 646 | ||||||||||||||||||||||||||||||||||||||||||
| 35 | switch (cb->ver) { | - | ||||||||||||||||||||||||||||||||||||||||||
| 36 | case 1: never executed: case 1: | 0 | ||||||||||||||||||||||||||||||||||||||||||
| 37 | /* Deprecated-style callbacks */ | - | ||||||||||||||||||||||||||||||||||||||||||
| 38 | if (!cb->cb.cb_1)
| 0 | ||||||||||||||||||||||||||||||||||||||||||
| 39 | return 1; never executed: return 1; | 0 | ||||||||||||||||||||||||||||||||||||||||||
| 40 | cb->cb.cb_1(a, b, cb->arg); | - | ||||||||||||||||||||||||||||||||||||||||||
| 41 | return 1; never executed: return 1; | 0 | ||||||||||||||||||||||||||||||||||||||||||
| 42 | case 2: executed 4096 times by 1 test: case 2:Executed by:
| 4096 | ||||||||||||||||||||||||||||||||||||||||||
| 43 | /* New-style callbacks */ | - | ||||||||||||||||||||||||||||||||||||||||||
| 44 | return cb->cb.cb_2(a, b, cb); executed 4096 times by 1 test: return cb->cb.cb_2(a, b, cb);Executed by:
| 4096 | ||||||||||||||||||||||||||||||||||||||||||
| 45 | default: never executed: default: | 0 | ||||||||||||||||||||||||||||||||||||||||||
| 46 | break; never executed: break; | 0 | ||||||||||||||||||||||||||||||||||||||||||
| 47 | } | - | ||||||||||||||||||||||||||||||||||||||||||
| 48 | /* Unrecognised callback type */ | - | ||||||||||||||||||||||||||||||||||||||||||
| 49 | return 0; never executed: return 0; | 0 | ||||||||||||||||||||||||||||||||||||||||||
| 50 | } | - | ||||||||||||||||||||||||||||||||||||||||||
| 51 | - | |||||||||||||||||||||||||||||||||||||||||||
| 52 | int BN_generate_prime_ex(BIGNUM *ret, int bits, int safe, | - | ||||||||||||||||||||||||||||||||||||||||||
| 53 | const BIGNUM *add, const BIGNUM *rem, BN_GENCB *cb) | - | ||||||||||||||||||||||||||||||||||||||||||
| 54 | { | - | ||||||||||||||||||||||||||||||||||||||||||
| 55 | BIGNUM *t; | - | ||||||||||||||||||||||||||||||||||||||||||
| 56 | int found = 0; | - | ||||||||||||||||||||||||||||||||||||||||||
| 57 | int i, j, c1 = 0; | - | ||||||||||||||||||||||||||||||||||||||||||
| 58 | BN_CTX *ctx = NULL; | - | ||||||||||||||||||||||||||||||||||||||||||
| 59 | prime_t *mods = NULL; | - | ||||||||||||||||||||||||||||||||||||||||||
| 60 | int checks = BN_prime_checks_for_size(bits);
| 0-67 | ||||||||||||||||||||||||||||||||||||||||||
| 61 | - | |||||||||||||||||||||||||||||||||||||||||||
| 62 | if (bits < 2) {
| 0-67 | ||||||||||||||||||||||||||||||||||||||||||
| 63 | /* There are no prime numbers this small. */ | - | ||||||||||||||||||||||||||||||||||||||||||
| 64 | BNerr(BN_F_BN_GENERATE_PRIME_EX, BN_R_BITS_TOO_SMALL); | - | ||||||||||||||||||||||||||||||||||||||||||
| 65 | return 0; never executed: return 0; | 0 | ||||||||||||||||||||||||||||||||||||||||||
| 66 | } else if (bits == 2 && safe) {
| 0-67 | ||||||||||||||||||||||||||||||||||||||||||
| 67 | /* The smallest safe prime (7) is three bits. */ | - | ||||||||||||||||||||||||||||||||||||||||||
| 68 | BNerr(BN_F_BN_GENERATE_PRIME_EX, BN_R_BITS_TOO_SMALL); | - | ||||||||||||||||||||||||||||||||||||||||||
| 69 | return 0; never executed: return 0; | 0 | ||||||||||||||||||||||||||||||||||||||||||
| 70 | } | - | ||||||||||||||||||||||||||||||||||||||||||
| 71 | - | |||||||||||||||||||||||||||||||||||||||||||
| 72 | mods = OPENSSL_zalloc(sizeof(*mods) * NUMPRIMES); | - | ||||||||||||||||||||||||||||||||||||||||||
| 73 | if (mods == NULL)
| 0-67 | ||||||||||||||||||||||||||||||||||||||||||
| 74 | goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||||||||||||||||||||
| 75 | - | |||||||||||||||||||||||||||||||||||||||||||
| 76 | ctx = BN_CTX_new(); | - | ||||||||||||||||||||||||||||||||||||||||||
| 77 | if (ctx == NULL)
| 0-67 | ||||||||||||||||||||||||||||||||||||||||||
| 78 | goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||||||||||||||||||||
| 79 | BN_CTX_start(ctx); | - | ||||||||||||||||||||||||||||||||||||||||||
| 80 | t = BN_CTX_get(ctx); | - | ||||||||||||||||||||||||||||||||||||||||||
| 81 | if (t == NULL)
| 0-67 | ||||||||||||||||||||||||||||||||||||||||||
| 82 | goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||||||||||||||||||||
| 83 | loop: code before this statement executed 67 times by 1 test: loop:Executed by:
| 67 | ||||||||||||||||||||||||||||||||||||||||||
| 84 | /* make a random number and set the top and bottom bits */ | - | ||||||||||||||||||||||||||||||||||||||||||
| 85 | if (add == NULL) {
| 14-3382 | ||||||||||||||||||||||||||||||||||||||||||
| 86 | if (!probable_prime(ret, bits, mods))
| 0-3382 | ||||||||||||||||||||||||||||||||||||||||||
| 87 | goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||||||||||||||||||||
| 88 | } else { executed 3382 times by 1 test: end of blockExecuted by:
| 3382 | ||||||||||||||||||||||||||||||||||||||||||
| 89 | if (safe) {
| 0-14 | ||||||||||||||||||||||||||||||||||||||||||
| 90 | if (!probable_prime_dh_safe(ret, bits, add, rem, ctx))
| 0-14 | ||||||||||||||||||||||||||||||||||||||||||
| 91 | goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||||||||||||||||||||
| 92 | } else { executed 14 times by 1 test: end of blockExecuted by:
| 14 | ||||||||||||||||||||||||||||||||||||||||||
| 93 | if (!bn_probable_prime_dh(ret, bits, add, rem, ctx))
| 0 | ||||||||||||||||||||||||||||||||||||||||||
| 94 | goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||||||||||||||||||||
| 95 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||
| 96 | } | - | ||||||||||||||||||||||||||||||||||||||||||
| 97 | - | |||||||||||||||||||||||||||||||||||||||||||
| 98 | if (!BN_GENCB_call(cb, 0, c1++))
| 0-3396 | ||||||||||||||||||||||||||||||||||||||||||
| 99 | /* aborted */ | - | ||||||||||||||||||||||||||||||||||||||||||
| 100 | goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||||||||||||||||||||
| 101 | - | |||||||||||||||||||||||||||||||||||||||||||
| 102 | if (!safe) {
| 14-3382 | ||||||||||||||||||||||||||||||||||||||||||
| 103 | i = BN_is_prime_fasttest_ex(ret, checks, ctx, 0, cb); | - | ||||||||||||||||||||||||||||||||||||||||||
| 104 | if (i == -1)
| 0-3382 | ||||||||||||||||||||||||||||||||||||||||||
| 105 | goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||||||||||||||||||||
| 106 | if (i == 0)
| 66-3316 | ||||||||||||||||||||||||||||||||||||||||||
| 107 | goto loop; executed 3316 times by 1 test: goto loop;Executed by:
| 3316 | ||||||||||||||||||||||||||||||||||||||||||
| 108 | } else { executed 66 times by 1 test: end of blockExecuted by:
| 66 | ||||||||||||||||||||||||||||||||||||||||||
| 109 | /* | - | ||||||||||||||||||||||||||||||||||||||||||
| 110 | * for "safe prime" generation, check that (p-1)/2 is prime. Since a | - | ||||||||||||||||||||||||||||||||||||||||||
| 111 | * prime is odd, We just need to divide by 2 | - | ||||||||||||||||||||||||||||||||||||||||||
| 112 | */ | - | ||||||||||||||||||||||||||||||||||||||||||
| 113 | if (!BN_rshift1(t, ret))
| 0-14 | ||||||||||||||||||||||||||||||||||||||||||
| 114 | goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||||||||||||||||||||
| 115 | - | |||||||||||||||||||||||||||||||||||||||||||
| 116 | for (i = 0; i < checks; i++) {
| 1-40 | ||||||||||||||||||||||||||||||||||||||||||
| 117 | j = BN_is_prime_fasttest_ex(ret, 1, ctx, 0, cb); | - | ||||||||||||||||||||||||||||||||||||||||||
| 118 | if (j == -1)
| 0-40 | ||||||||||||||||||||||||||||||||||||||||||
| 119 | goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||||||||||||||||||||
| 120 | if (j == 0)
| 9-31 | ||||||||||||||||||||||||||||||||||||||||||
| 121 | goto loop; executed 9 times by 1 test: goto loop;Executed by:
| 9 | ||||||||||||||||||||||||||||||||||||||||||
| 122 | - | |||||||||||||||||||||||||||||||||||||||||||
| 123 | j = BN_is_prime_fasttest_ex(t, 1, ctx, 0, cb); | - | ||||||||||||||||||||||||||||||||||||||||||
| 124 | if (j == -1)
| 0-31 | ||||||||||||||||||||||||||||||||||||||||||
| 125 | goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||||||||||||||||||||
| 126 | if (j == 0)
| 4-27 | ||||||||||||||||||||||||||||||||||||||||||
| 127 | goto loop; executed 4 times by 1 test: goto loop;Executed by:
| 4 | ||||||||||||||||||||||||||||||||||||||||||
| 128 | - | |||||||||||||||||||||||||||||||||||||||||||
| 129 | if (!BN_GENCB_call(cb, 2, c1 - 1))
| 0-27 | ||||||||||||||||||||||||||||||||||||||||||
| 130 | goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||||||||||||||||||||
| 131 | /* We have a safe prime test pass */ | - | ||||||||||||||||||||||||||||||||||||||||||
| 132 | } executed 27 times by 1 test: end of blockExecuted by:
| 27 | ||||||||||||||||||||||||||||||||||||||||||
| 133 | } executed 1 time by 1 test: end of blockExecuted by:
| 1 | ||||||||||||||||||||||||||||||||||||||||||
| 134 | /* we have a prime :-) */ | - | ||||||||||||||||||||||||||||||||||||||||||
| 135 | found = 1; | - | ||||||||||||||||||||||||||||||||||||||||||
| 136 | err: code before this statement executed 67 times by 1 test: err:Executed by:
| 67 | ||||||||||||||||||||||||||||||||||||||||||
| 137 | OPENSSL_free(mods); | - | ||||||||||||||||||||||||||||||||||||||||||
| 138 | if (ctx != NULL)
| 0-67 | ||||||||||||||||||||||||||||||||||||||||||
| 139 | BN_CTX_end(ctx); executed 67 times by 1 test: BN_CTX_end(ctx);Executed by:
| 67 | ||||||||||||||||||||||||||||||||||||||||||
| 140 | BN_CTX_free(ctx); | - | ||||||||||||||||||||||||||||||||||||||||||
| 141 | bn_check_top(ret); | - | ||||||||||||||||||||||||||||||||||||||||||
| 142 | return found; executed 67 times by 1 test: return found;Executed by:
| 67 | ||||||||||||||||||||||||||||||||||||||||||
| 143 | } | - | ||||||||||||||||||||||||||||||||||||||||||
| 144 | - | |||||||||||||||||||||||||||||||||||||||||||
| 145 | int BN_is_prime_ex(const BIGNUM *a, int checks, BN_CTX *ctx_passed, | - | ||||||||||||||||||||||||||||||||||||||||||
| 146 | BN_GENCB *cb) | - | ||||||||||||||||||||||||||||||||||||||||||
| 147 | { | - | ||||||||||||||||||||||||||||||||||||||||||
| 148 | return BN_is_prime_fasttest_ex(a, checks, ctx_passed, 0, cb); executed 45 times by 1 test: return BN_is_prime_fasttest_ex(a, checks, ctx_passed, 0, cb);Executed by:
| 45 | ||||||||||||||||||||||||||||||||||||||||||
| 149 | } | - | ||||||||||||||||||||||||||||||||||||||||||
| 150 | - | |||||||||||||||||||||||||||||||||||||||||||
| 151 | int BN_is_prime_fasttest_ex(const BIGNUM *a, int checks, BN_CTX *ctx_passed, | - | ||||||||||||||||||||||||||||||||||||||||||
| 152 | int do_trial_division, BN_GENCB *cb) | - | ||||||||||||||||||||||||||||||||||||||||||
| 153 | { | - | ||||||||||||||||||||||||||||||||||||||||||
| 154 | int i, j, ret = -1; | - | ||||||||||||||||||||||||||||||||||||||||||
| 155 | int k; | - | ||||||||||||||||||||||||||||||||||||||||||
| 156 | BN_CTX *ctx = NULL; | - | ||||||||||||||||||||||||||||||||||||||||||
| 157 | BIGNUM *A1, *A1_odd, *A3, *check; /* taken from ctx */ | - | ||||||||||||||||||||||||||||||||||||||||||
| 158 | BN_MONT_CTX *mont = NULL; | - | ||||||||||||||||||||||||||||||||||||||||||
| 159 | - | |||||||||||||||||||||||||||||||||||||||||||
| 160 | /* Take care of the really small primes 2 & 3 */ | - | ||||||||||||||||||||||||||||||||||||||||||
| 161 | if (BN_is_word(a, 2) || BN_is_word(a, 3))
| 2-3621 | ||||||||||||||||||||||||||||||||||||||||||
| 162 | return 1; executed 4 times by 1 test: return 1;Executed by:
| 4 | ||||||||||||||||||||||||||||||||||||||||||
| 163 | - | |||||||||||||||||||||||||||||||||||||||||||
| 164 | /* Check odd and bigger than 1 */ | - | ||||||||||||||||||||||||||||||||||||||||||
| 165 | if (!BN_is_odd(a) || BN_cmp(a, BN_value_one()) <= 0)
| 2-3613 | ||||||||||||||||||||||||||||||||||||||||||
| 166 | return 0; executed 8 times by 1 test: return 0;Executed by:
| 8 | ||||||||||||||||||||||||||||||||||||||||||
| 167 | - | |||||||||||||||||||||||||||||||||||||||||||
| 168 | if (checks == BN_prime_checks)
| 44-3567 | ||||||||||||||||||||||||||||||||||||||||||
| 169 | checks = BN_prime_checks_for_size(BN_num_bits(a)); executed 44 times by 1 test: checks = ((BN_num_bits(a)) >= 3747 ? 3 : (BN_num_bits(a)) >= 1345 ? 4 : (BN_num_bits(a)) >= 476 ? 5 : (BN_num_bits(a)) >= 400 ? 6 : (BN_num_bits(a)) >= 347 ? 7 : (BN_num_bits(a)) >= 308 ? 8 : (BN_num_bits(a)) >= 55 ? 27 : 34);Executed by:
| 0-44 | ||||||||||||||||||||||||||||||||||||||||||
| 170 | - | |||||||||||||||||||||||||||||||||||||||||||
| 171 | /* first look for small factors */ | - | ||||||||||||||||||||||||||||||||||||||||||
| 172 | if (do_trial_division) {
| 110-3501 | ||||||||||||||||||||||||||||||||||||||||||
| 173 | for (i = 1; i < NUMPRIMES; i++) {
| 8-22032 | ||||||||||||||||||||||||||||||||||||||||||
| 174 | BN_ULONG mod = BN_mod_word(a, primes[i]); | - | ||||||||||||||||||||||||||||||||||||||||||
| 175 | if (mod == (BN_ULONG)-1)
| 0-22032 | ||||||||||||||||||||||||||||||||||||||||||
| 176 | goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||||||||||||||||||||
| 177 | if (mod == 0)
| 102-21930 | ||||||||||||||||||||||||||||||||||||||||||
| 178 | return BN_is_word(a, primes[i]); executed 102 times by 1 test: return BN_is_word(a, primes[i]);Executed by:
| 102 | ||||||||||||||||||||||||||||||||||||||||||
| 179 | } executed 21930 times by 1 test: end of blockExecuted by:
| 21930 | ||||||||||||||||||||||||||||||||||||||||||
| 180 | if (!BN_GENCB_call(cb, 1, -1))
| 0-8 | ||||||||||||||||||||||||||||||||||||||||||
| 181 | goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||||||||||||||||||||
| 182 | } executed 8 times by 1 test: end of blockExecuted by:
| 8 | ||||||||||||||||||||||||||||||||||||||||||
| 183 | - | |||||||||||||||||||||||||||||||||||||||||||
| 184 | if (ctx_passed != NULL)
| 36-3473 | ||||||||||||||||||||||||||||||||||||||||||
| 185 | ctx = ctx_passed; executed 3473 times by 1 test: ctx = ctx_passed;Executed by:
| 3473 | ||||||||||||||||||||||||||||||||||||||||||
| 186 | else if ((ctx = BN_CTX_new()) == NULL)
| 0-36 | ||||||||||||||||||||||||||||||||||||||||||
| 187 | goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||||||||||||||||||||
| 188 | BN_CTX_start(ctx); | - | ||||||||||||||||||||||||||||||||||||||||||
| 189 | - | |||||||||||||||||||||||||||||||||||||||||||
| 190 | A1 = BN_CTX_get(ctx); | - | ||||||||||||||||||||||||||||||||||||||||||
| 191 | A3 = BN_CTX_get(ctx); | - | ||||||||||||||||||||||||||||||||||||||||||
| 192 | A1_odd = BN_CTX_get(ctx); | - | ||||||||||||||||||||||||||||||||||||||||||
| 193 | check = BN_CTX_get(ctx); | - | ||||||||||||||||||||||||||||||||||||||||||
| 194 | if (check == NULL)
| 0-3509 | ||||||||||||||||||||||||||||||||||||||||||
| 195 | goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||||||||||||||||||||
| 196 | - | |||||||||||||||||||||||||||||||||||||||||||
| 197 | /* compute A1 := a - 1 */ | - | ||||||||||||||||||||||||||||||||||||||||||
| 198 | if (!BN_copy(A1, a) || !BN_sub_word(A1, 1))
| 0-3509 | ||||||||||||||||||||||||||||||||||||||||||
| 199 | goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||||||||||||||||||||
| 200 | /* compute A3 := a - 3 */ | - | ||||||||||||||||||||||||||||||||||||||||||
| 201 | if (!BN_copy(A3, a) || !BN_sub_word(A3, 3))
| 0-3509 | ||||||||||||||||||||||||||||||||||||||||||
| 202 | goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||||||||||||||||||||
| 203 | - | |||||||||||||||||||||||||||||||||||||||||||
| 204 | /* write A1 as A1_odd * 2^k */ | - | ||||||||||||||||||||||||||||||||||||||||||
| 205 | k = 1; | - | ||||||||||||||||||||||||||||||||||||||||||
| 206 | while (!BN_is_bit_set(A1, k))
| 3509-3591 | ||||||||||||||||||||||||||||||||||||||||||
| 207 | k++; executed 3591 times by 1 test: k++;Executed by:
| 3591 | ||||||||||||||||||||||||||||||||||||||||||
| 208 | if (!BN_rshift(A1_odd, A1, k))
| 0-3509 | ||||||||||||||||||||||||||||||||||||||||||
| 209 | goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||||||||||||||||||||
| 210 | - | |||||||||||||||||||||||||||||||||||||||||||
| 211 | /* Montgomery setup for computations mod a */ | - | ||||||||||||||||||||||||||||||||||||||||||
| 212 | mont = BN_MONT_CTX_new(); | - | ||||||||||||||||||||||||||||||||||||||||||
| 213 | if (mont == NULL)
| 0-3509 | ||||||||||||||||||||||||||||||||||||||||||
| 214 | goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||||||||||||||||||||
| 215 | if (!BN_MONT_CTX_set(mont, a, ctx))
| 0-3509 | ||||||||||||||||||||||||||||||||||||||||||
| 216 | goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||||||||||||||||||||
| 217 | - | |||||||||||||||||||||||||||||||||||||||||||
| 218 | for (i = 0; i < checks; i++) {
| 173-4472 | ||||||||||||||||||||||||||||||||||||||||||
| 219 | /* 1 < check < a-1 */ | - | ||||||||||||||||||||||||||||||||||||||||||
| 220 | if (!BN_priv_rand_range(check, A3) || !BN_add_word(check, 2))
| 0-4472 | ||||||||||||||||||||||||||||||||||||||||||
| 221 | goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||||||||||||||||||||
| 222 | - | |||||||||||||||||||||||||||||||||||||||||||
| 223 | j = witness(check, a, A1, A1_odd, k, ctx, mont); | - | ||||||||||||||||||||||||||||||||||||||||||
| 224 | if (j == -1)
| 0-4472 | ||||||||||||||||||||||||||||||||||||||||||
| 225 | goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||||||||||||||||||||
| 226 | if (j) {
| 1136-3336 | ||||||||||||||||||||||||||||||||||||||||||
| 227 | ret = 0; | - | ||||||||||||||||||||||||||||||||||||||||||
| 228 | goto err; executed 3336 times by 1 test: goto err;Executed by:
| 3336 | ||||||||||||||||||||||||||||||||||||||||||
| 229 | } | - | ||||||||||||||||||||||||||||||||||||||||||
| 230 | if (!BN_GENCB_call(cb, 1, i))
| 0-1136 | ||||||||||||||||||||||||||||||||||||||||||
| 231 | goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||||||||||||||||||||
| 232 | } executed 1136 times by 1 test: end of blockExecuted by:
| 1136 | ||||||||||||||||||||||||||||||||||||||||||
| 233 | ret = 1; | - | ||||||||||||||||||||||||||||||||||||||||||
| 234 | err: code before this statement executed 173 times by 1 test: err:Executed by:
| 173 | ||||||||||||||||||||||||||||||||||||||||||
| 235 | if (ctx != NULL) {
| 0-3509 | ||||||||||||||||||||||||||||||||||||||||||
| 236 | BN_CTX_end(ctx); | - | ||||||||||||||||||||||||||||||||||||||||||
| 237 | if (ctx_passed == NULL)
| 36-3473 | ||||||||||||||||||||||||||||||||||||||||||
| 238 | BN_CTX_free(ctx); executed 36 times by 1 test: BN_CTX_free(ctx);Executed by:
| 36 | ||||||||||||||||||||||||||||||||||||||||||
| 239 | } executed 3509 times by 1 test: end of blockExecuted by:
| 3509 | ||||||||||||||||||||||||||||||||||||||||||
| 240 | BN_MONT_CTX_free(mont); | - | ||||||||||||||||||||||||||||||||||||||||||
| 241 | - | |||||||||||||||||||||||||||||||||||||||||||
| 242 | return ret; executed 3509 times by 1 test: return ret;Executed by:
| 3509 | ||||||||||||||||||||||||||||||||||||||||||
| 243 | } | - | ||||||||||||||||||||||||||||||||||||||||||
| 244 | - | |||||||||||||||||||||||||||||||||||||||||||
| 245 | static int witness(BIGNUM *w, const BIGNUM *a, const BIGNUM *a1, | - | ||||||||||||||||||||||||||||||||||||||||||
| 246 | const BIGNUM *a1_odd, int k, BN_CTX *ctx, | - | ||||||||||||||||||||||||||||||||||||||||||
| 247 | BN_MONT_CTX *mont) | - | ||||||||||||||||||||||||||||||||||||||||||
| 248 | { | - | ||||||||||||||||||||||||||||||||||||||||||
| 249 | if (!BN_mod_exp_mont(w, w, a1_odd, a, ctx, mont)) /* w := w^a1_odd mod a */
| 0-4472 | ||||||||||||||||||||||||||||||||||||||||||
| 250 | return -1; never executed: return -1; | 0 | ||||||||||||||||||||||||||||||||||||||||||
| 251 | if (BN_is_one(w))
| 401-4071 | ||||||||||||||||||||||||||||||||||||||||||
| 252 | return 0; /* probably prime */ executed 401 times by 1 test: return 0;Executed by:
| 401 | ||||||||||||||||||||||||||||||||||||||||||
| 253 | if (BN_cmp(w, a1) == 0)
| 379-3692 | ||||||||||||||||||||||||||||||||||||||||||
| 254 | return 0; /* w == -1 (mod a), 'a' is probably prime */ executed 379 times by 1 test: return 0;Executed by:
| 379 | ||||||||||||||||||||||||||||||||||||||||||
| 255 | while (--k) {
| 3336-6484 | ||||||||||||||||||||||||||||||||||||||||||
| 256 | if (!BN_mod_mul(w, w, w, a, ctx)) /* w := w^2 mod a */
| 0-6484 | ||||||||||||||||||||||||||||||||||||||||||
| 257 | return -1; never executed: return -1; | 0 | ||||||||||||||||||||||||||||||||||||||||||
| 258 | if (BN_is_one(w))
| 0-6484 | ||||||||||||||||||||||||||||||||||||||||||
| 259 | return 1; /* 'a' is composite, otherwise a previous 'w' never executed: return 1; | 0 | ||||||||||||||||||||||||||||||||||||||||||
| 260 | * would have been == -1 (mod 'a') */ | - | ||||||||||||||||||||||||||||||||||||||||||
| 261 | if (BN_cmp(w, a1) == 0)
| 356-6128 | ||||||||||||||||||||||||||||||||||||||||||
| 262 | return 0; /* w == -1 (mod a), 'a' is probably prime */ executed 356 times by 1 test: return 0;Executed by:
| 356 | ||||||||||||||||||||||||||||||||||||||||||
| 263 | } executed 6128 times by 1 test: end of blockExecuted by:
| 6128 | ||||||||||||||||||||||||||||||||||||||||||
| 264 | /* | - | ||||||||||||||||||||||||||||||||||||||||||
| 265 | * If we get here, 'w' is the (a-1)/2-th power of the original 'w', and | - | ||||||||||||||||||||||||||||||||||||||||||
| 266 | * it is neither -1 nor +1 -- so 'a' cannot be prime | - | ||||||||||||||||||||||||||||||||||||||||||
| 267 | */ | - | ||||||||||||||||||||||||||||||||||||||||||
| 268 | bn_check_top(w); | - | ||||||||||||||||||||||||||||||||||||||||||
| 269 | return 1; executed 3336 times by 1 test: return 1;Executed by:
| 3336 | ||||||||||||||||||||||||||||||||||||||||||
| 270 | } | - | ||||||||||||||||||||||||||||||||||||||||||
| 271 | - | |||||||||||||||||||||||||||||||||||||||||||
| 272 | static int probable_prime(BIGNUM *rnd, int bits, prime_t *mods) | - | ||||||||||||||||||||||||||||||||||||||||||
| 273 | { | - | ||||||||||||||||||||||||||||||||||||||||||
| 274 | int i; | - | ||||||||||||||||||||||||||||||||||||||||||
| 275 | BN_ULONG delta; | - | ||||||||||||||||||||||||||||||||||||||||||
| 276 | BN_ULONG maxdelta = BN_MASK2 - primes[NUMPRIMES - 1]; | - | ||||||||||||||||||||||||||||||||||||||||||
| 277 | char is_single_word = bits <= BN_BITS2; | - | ||||||||||||||||||||||||||||||||||||||||||
| 278 | - | |||||||||||||||||||||||||||||||||||||||||||
| 279 | again: code before this statement executed 3382 times by 1 test: again:Executed by:
| 3382 | ||||||||||||||||||||||||||||||||||||||||||
| 280 | /* TODO: Not all primes are private */ | - | ||||||||||||||||||||||||||||||||||||||||||
| 281 | if (!BN_priv_rand(rnd, bits, BN_RAND_TOP_TWO, BN_RAND_BOTTOM_ODD))
| 0-3382 | ||||||||||||||||||||||||||||||||||||||||||
| 282 | return 0; never executed: return 0; | 0 | ||||||||||||||||||||||||||||||||||||||||||
| 283 | /* we now have a random number 'rnd' to test. */ | - | ||||||||||||||||||||||||||||||||||||||||||
| 284 | for (i = 1; i < NUMPRIMES; i++) {
| 3382-6922954 | ||||||||||||||||||||||||||||||||||||||||||
| 285 | BN_ULONG mod = BN_mod_word(rnd, (BN_ULONG)primes[i]); | - | ||||||||||||||||||||||||||||||||||||||||||
| 286 | if (mod == (BN_ULONG)-1)
| 0-6922954 | ||||||||||||||||||||||||||||||||||||||||||
| 287 | return 0; never executed: return 0; | 0 | ||||||||||||||||||||||||||||||||||||||||||
| 288 | mods[i] = (prime_t) mod; | - | ||||||||||||||||||||||||||||||||||||||||||
| 289 | } executed 6922954 times by 1 test: end of blockExecuted by:
| 6922954 | ||||||||||||||||||||||||||||||||||||||||||
| 290 | /* | - | ||||||||||||||||||||||||||||||||||||||||||
| 291 | * If bits is so small that it fits into a single word then we | - | ||||||||||||||||||||||||||||||||||||||||||
| 292 | * additionally don't want to exceed that many bits. | - | ||||||||||||||||||||||||||||||||||||||||||
| 293 | */ | - | ||||||||||||||||||||||||||||||||||||||||||
| 294 | if (is_single_word) {
| 1-3381 | ||||||||||||||||||||||||||||||||||||||||||
| 295 | BN_ULONG size_limit; | - | ||||||||||||||||||||||||||||||||||||||||||
| 296 | - | |||||||||||||||||||||||||||||||||||||||||||
| 297 | if (bits == BN_BITS2) {
| 0-1 | ||||||||||||||||||||||||||||||||||||||||||
| 298 | /* | - | ||||||||||||||||||||||||||||||||||||||||||
| 299 | * Shifting by this much has undefined behaviour so we do it a | - | ||||||||||||||||||||||||||||||||||||||||||
| 300 | * different way | - | ||||||||||||||||||||||||||||||||||||||||||
| 301 | */ | - | ||||||||||||||||||||||||||||||||||||||||||
| 302 | size_limit = ~((BN_ULONG)0) - BN_get_word(rnd); | - | ||||||||||||||||||||||||||||||||||||||||||
| 303 | } else { never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||
| 304 | size_limit = (((BN_ULONG)1) << bits) - BN_get_word(rnd) - 1; | - | ||||||||||||||||||||||||||||||||||||||||||
| 305 | } executed 1 time by 1 test: end of blockExecuted by:
| 1 | ||||||||||||||||||||||||||||||||||||||||||
| 306 | if (size_limit < maxdelta)
| 0-1 | ||||||||||||||||||||||||||||||||||||||||||
| 307 | maxdelta = size_limit; executed 1 time by 1 test: maxdelta = size_limit;Executed by:
| 1 | ||||||||||||||||||||||||||||||||||||||||||
| 308 | } executed 1 time by 1 test: end of blockExecuted by:
| 1 | ||||||||||||||||||||||||||||||||||||||||||
| 309 | delta = 0; | - | ||||||||||||||||||||||||||||||||||||||||||
| 310 | loop: code before this statement executed 3382 times by 1 test: loop:Executed by:
| 3382 | ||||||||||||||||||||||||||||||||||||||||||
| 311 | if (is_single_word) {
| 4-370074 | ||||||||||||||||||||||||||||||||||||||||||
| 312 | BN_ULONG rnd_word = BN_get_word(rnd); | - | ||||||||||||||||||||||||||||||||||||||||||
| 313 | - | |||||||||||||||||||||||||||||||||||||||||||
| 314 | /*- | - | ||||||||||||||||||||||||||||||||||||||||||
| 315 | * In the case that the candidate prime is a single word then | - | ||||||||||||||||||||||||||||||||||||||||||
| 316 | * we check that: | - | ||||||||||||||||||||||||||||||||||||||||||
| 317 | * 1) It's greater than primes[i] because we shouldn't reject | - | ||||||||||||||||||||||||||||||||||||||||||
| 318 | * 3 as being a prime number because it's a multiple of | - | ||||||||||||||||||||||||||||||||||||||||||
| 319 | * three. | - | ||||||||||||||||||||||||||||||||||||||||||
| 320 | * 2) That it's not a multiple of a known prime. We don't | - | ||||||||||||||||||||||||||||||||||||||||||
| 321 | * check that rnd-1 is also coprime to all the known | - | ||||||||||||||||||||||||||||||||||||||||||
| 322 | * primes because there aren't many small primes where | - | ||||||||||||||||||||||||||||||||||||||||||
| 323 | * that's true. | - | ||||||||||||||||||||||||||||||||||||||||||
| 324 | */ | - | ||||||||||||||||||||||||||||||||||||||||||
| 325 | for (i = 1; i < NUMPRIMES && primes[i] < rnd_word; i++) {
| 0-175 | ||||||||||||||||||||||||||||||||||||||||||
| 326 | if ((mods[i] + delta) % primes[i] == 0) {
| 3-171 | ||||||||||||||||||||||||||||||||||||||||||
| 327 | delta += 2; | - | ||||||||||||||||||||||||||||||||||||||||||
| 328 | if (delta > maxdelta)
| 0-3 | ||||||||||||||||||||||||||||||||||||||||||
| 329 | goto again; never executed: goto again; | 0 | ||||||||||||||||||||||||||||||||||||||||||
| 330 | goto loop; executed 3 times by 1 test: goto loop;Executed by:
| 3 | ||||||||||||||||||||||||||||||||||||||||||
| 331 | } | - | ||||||||||||||||||||||||||||||||||||||||||
| 332 | } executed 171 times by 1 test: end of blockExecuted by:
| 171 | ||||||||||||||||||||||||||||||||||||||||||
| 333 | } else { executed 1 time by 1 test: end of blockExecuted by:
| 1 | ||||||||||||||||||||||||||||||||||||||||||
| 334 | for (i = 1; i < NUMPRIMES; i++) {
| 3381-10173323 | ||||||||||||||||||||||||||||||||||||||||||
| 335 | /* | - | ||||||||||||||||||||||||||||||||||||||||||
| 336 | * check that rnd is not a prime and also that gcd(rnd-1,primes) | - | ||||||||||||||||||||||||||||||||||||||||||
| 337 | * == 1 (except for 2) | - | ||||||||||||||||||||||||||||||||||||||||||
| 338 | */ | - | ||||||||||||||||||||||||||||||||||||||||||
| 339 | if (((mods[i] + delta) % primes[i]) <= 1) {
| 366693-9806630 | ||||||||||||||||||||||||||||||||||||||||||
| 340 | delta += 2; | - | ||||||||||||||||||||||||||||||||||||||||||
| 341 | if (delta > maxdelta)
| 0-366693 | ||||||||||||||||||||||||||||||||||||||||||
| 342 | goto again; never executed: goto again; | 0 | ||||||||||||||||||||||||||||||||||||||||||
| 343 | goto loop; executed 366693 times by 1 test: goto loop;Executed by:
| 366693 | ||||||||||||||||||||||||||||||||||||||||||
| 344 | } | - | ||||||||||||||||||||||||||||||||||||||||||
| 345 | } executed 9806630 times by 1 test: end of blockExecuted by:
| 9806630 | ||||||||||||||||||||||||||||||||||||||||||
| 346 | } executed 3381 times by 1 test: end of blockExecuted by:
| 3381 | ||||||||||||||||||||||||||||||||||||||||||
| 347 | if (!BN_add_word(rnd, delta))
| 0-3382 | ||||||||||||||||||||||||||||||||||||||||||
| 348 | return 0; never executed: return 0; | 0 | ||||||||||||||||||||||||||||||||||||||||||
| 349 | if (BN_num_bits(rnd) != bits)
| 0-3382 | ||||||||||||||||||||||||||||||||||||||||||
| 350 | goto again; never executed: goto again; | 0 | ||||||||||||||||||||||||||||||||||||||||||
| 351 | bn_check_top(rnd); | - | ||||||||||||||||||||||||||||||||||||||||||
| 352 | return 1; executed 3382 times by 1 test: return 1;Executed by:
| 3382 | ||||||||||||||||||||||||||||||||||||||||||
| 353 | } | - | ||||||||||||||||||||||||||||||||||||||||||
| 354 | - | |||||||||||||||||||||||||||||||||||||||||||
| 355 | int bn_probable_prime_dh(BIGNUM *rnd, int bits, | - | ||||||||||||||||||||||||||||||||||||||||||
| 356 | const BIGNUM *add, const BIGNUM *rem, BN_CTX *ctx) | - | ||||||||||||||||||||||||||||||||||||||||||
| 357 | { | - | ||||||||||||||||||||||||||||||||||||||||||
| 358 | int i, ret = 0; | - | ||||||||||||||||||||||||||||||||||||||||||
| 359 | BIGNUM *t1; | - | ||||||||||||||||||||||||||||||||||||||||||
| 360 | - | |||||||||||||||||||||||||||||||||||||||||||
| 361 | BN_CTX_start(ctx); | - | ||||||||||||||||||||||||||||||||||||||||||
| 362 | if ((t1 = BN_CTX_get(ctx)) == NULL)
| 0 | ||||||||||||||||||||||||||||||||||||||||||
| 363 | goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||||||||||||||||||||
| 364 | - | |||||||||||||||||||||||||||||||||||||||||||
| 365 | if (!BN_rand(rnd, bits, BN_RAND_TOP_ONE, BN_RAND_BOTTOM_ODD))
| 0 | ||||||||||||||||||||||||||||||||||||||||||
| 366 | goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||||||||||||||||||||
| 367 | - | |||||||||||||||||||||||||||||||||||||||||||
| 368 | /* we need ((rnd-rem) % add) == 0 */ | - | ||||||||||||||||||||||||||||||||||||||||||
| 369 | - | |||||||||||||||||||||||||||||||||||||||||||
| 370 | if (!BN_mod(t1, rnd, add, ctx))
| 0 | ||||||||||||||||||||||||||||||||||||||||||
| 371 | goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||||||||||||||||||||
| 372 | if (!BN_sub(rnd, rnd, t1))
| 0 | ||||||||||||||||||||||||||||||||||||||||||
| 373 | goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||||||||||||||||||||
| 374 | if (rem == NULL) {
| 0 | ||||||||||||||||||||||||||||||||||||||||||
| 375 | if (!BN_add_word(rnd, 1))
| 0 | ||||||||||||||||||||||||||||||||||||||||||
| 376 | goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||||||||||||||||||||
| 377 | } else { never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||
| 378 | if (!BN_add(rnd, rnd, rem))
| 0 | ||||||||||||||||||||||||||||||||||||||||||
| 379 | goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||||||||||||||||||||
| 380 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||
| 381 | - | |||||||||||||||||||||||||||||||||||||||||||
| 382 | /* we now have a random number 'rand' to test. */ | - | ||||||||||||||||||||||||||||||||||||||||||
| 383 | - | |||||||||||||||||||||||||||||||||||||||||||
| 384 | loop: code before this statement never executed: loop: | 0 | ||||||||||||||||||||||||||||||||||||||||||
| 385 | for (i = 1; i < NUMPRIMES; i++) {
| 0 | ||||||||||||||||||||||||||||||||||||||||||
| 386 | /* check that rnd is a prime */ | - | ||||||||||||||||||||||||||||||||||||||||||
| 387 | BN_ULONG mod = BN_mod_word(rnd, (BN_ULONG)primes[i]); | - | ||||||||||||||||||||||||||||||||||||||||||
| 388 | if (mod == (BN_ULONG)-1)
| 0 | ||||||||||||||||||||||||||||||||||||||||||
| 389 | goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||||||||||||||||||||
| 390 | if (mod <= 1) {
| 0 | ||||||||||||||||||||||||||||||||||||||||||
| 391 | if (!BN_add(rnd, rnd, add))
| 0 | ||||||||||||||||||||||||||||||||||||||||||
| 392 | goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||||||||||||||||||||
| 393 | goto loop; never executed: goto loop; | 0 | ||||||||||||||||||||||||||||||||||||||||||
| 394 | } | - | ||||||||||||||||||||||||||||||||||||||||||
| 395 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||
| 396 | ret = 1; | - | ||||||||||||||||||||||||||||||||||||||||||
| 397 | - | |||||||||||||||||||||||||||||||||||||||||||
| 398 | err: code before this statement never executed: err: | 0 | ||||||||||||||||||||||||||||||||||||||||||
| 399 | BN_CTX_end(ctx); | - | ||||||||||||||||||||||||||||||||||||||||||
| 400 | bn_check_top(rnd); | - | ||||||||||||||||||||||||||||||||||||||||||
| 401 | return ret; never executed: return ret; | 0 | ||||||||||||||||||||||||||||||||||||||||||
| 402 | } | - | ||||||||||||||||||||||||||||||||||||||||||
| 403 | - | |||||||||||||||||||||||||||||||||||||||||||
| 404 | static int probable_prime_dh_safe(BIGNUM *p, int bits, const BIGNUM *padd, | - | ||||||||||||||||||||||||||||||||||||||||||
| 405 | const BIGNUM *rem, BN_CTX *ctx) | - | ||||||||||||||||||||||||||||||||||||||||||
| 406 | { | - | ||||||||||||||||||||||||||||||||||||||||||
| 407 | int i, ret = 0; | - | ||||||||||||||||||||||||||||||||||||||||||
| 408 | BIGNUM *t1, *qadd, *q; | - | ||||||||||||||||||||||||||||||||||||||||||
| 409 | - | |||||||||||||||||||||||||||||||||||||||||||
| 410 | bits--; | - | ||||||||||||||||||||||||||||||||||||||||||
| 411 | BN_CTX_start(ctx); | - | ||||||||||||||||||||||||||||||||||||||||||
| 412 | t1 = BN_CTX_get(ctx); | - | ||||||||||||||||||||||||||||||||||||||||||
| 413 | q = BN_CTX_get(ctx); | - | ||||||||||||||||||||||||||||||||||||||||||
| 414 | qadd = BN_CTX_get(ctx); | - | ||||||||||||||||||||||||||||||||||||||||||
| 415 | if (qadd == NULL)
| 0-14 | ||||||||||||||||||||||||||||||||||||||||||
| 416 | goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||||||||||||||||||||
| 417 | - | |||||||||||||||||||||||||||||||||||||||||||
| 418 | if (!BN_rshift1(qadd, padd))
| 0-14 | ||||||||||||||||||||||||||||||||||||||||||
| 419 | goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||||||||||||||||||||
| 420 | - | |||||||||||||||||||||||||||||||||||||||||||
| 421 | if (!BN_rand(q, bits, BN_RAND_TOP_ONE, BN_RAND_BOTTOM_ODD))
| 0-14 | ||||||||||||||||||||||||||||||||||||||||||
| 422 | goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||||||||||||||||||||
| 423 | - | |||||||||||||||||||||||||||||||||||||||||||
| 424 | /* we need ((rnd-rem) % add) == 0 */ | - | ||||||||||||||||||||||||||||||||||||||||||
| 425 | if (!BN_mod(t1, q, qadd, ctx))
| 0-14 | ||||||||||||||||||||||||||||||||||||||||||
| 426 | goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||||||||||||||||||||
| 427 | if (!BN_sub(q, q, t1))
| 0-14 | ||||||||||||||||||||||||||||||||||||||||||
| 428 | goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||||||||||||||||||||
| 429 | if (rem == NULL) {
| 0-14 | ||||||||||||||||||||||||||||||||||||||||||
| 430 | if (!BN_add_word(q, 1))
| 0 | ||||||||||||||||||||||||||||||||||||||||||
| 431 | goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||||||||||||||||||||
| 432 | } else { never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||
| 433 | if (!BN_rshift1(t1, rem))
| 0-14 | ||||||||||||||||||||||||||||||||||||||||||
| 434 | goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||||||||||||||||||||
| 435 | if (!BN_add(q, q, t1))
| 0-14 | ||||||||||||||||||||||||||||||||||||||||||
| 436 | goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||||||||||||||||||||
| 437 | } executed 14 times by 1 test: end of blockExecuted by:
| 14 | ||||||||||||||||||||||||||||||||||||||||||
| 438 | - | |||||||||||||||||||||||||||||||||||||||||||
| 439 | /* we now have a random number 'rand' to test. */ | - | ||||||||||||||||||||||||||||||||||||||||||
| 440 | if (!BN_lshift1(p, q))
| 0-14 | ||||||||||||||||||||||||||||||||||||||||||
| 441 | goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||||||||||||||||||||
| 442 | if (!BN_add_word(p, 1))
| 0-14 | ||||||||||||||||||||||||||||||||||||||||||
| 443 | goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||||||||||||||||||||
| 444 | - | |||||||||||||||||||||||||||||||||||||||||||
| 445 | loop: code before this statement executed 14 times by 1 test: loop:Executed by:
| 14 | ||||||||||||||||||||||||||||||||||||||||||
| 446 | for (i = 1; i < NUMPRIMES; i++) {
| 14-38758 | ||||||||||||||||||||||||||||||||||||||||||
| 447 | /* check that p and q are prime */ | - | ||||||||||||||||||||||||||||||||||||||||||
| 448 | /* | - | ||||||||||||||||||||||||||||||||||||||||||
| 449 | * check that for p and q gcd(p-1,primes) == 1 (except for 2) | - | ||||||||||||||||||||||||||||||||||||||||||
| 450 | */ | - | ||||||||||||||||||||||||||||||||||||||||||
| 451 | BN_ULONG pmod = BN_mod_word(p, (BN_ULONG)primes[i]); | - | ||||||||||||||||||||||||||||||||||||||||||
| 452 | BN_ULONG qmod = BN_mod_word(q, (BN_ULONG)primes[i]); | - | ||||||||||||||||||||||||||||||||||||||||||
| 453 | if (pmod == (BN_ULONG)-1 || qmod == (BN_ULONG)-1)
| 0-38758 | ||||||||||||||||||||||||||||||||||||||||||
| 454 | goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||||||||||||||||||||
| 455 | if (pmod == 0 || qmod == 0) {
| 471-38287 | ||||||||||||||||||||||||||||||||||||||||||
| 456 | if (!BN_add(p, p, padd))
| 0-965 | ||||||||||||||||||||||||||||||||||||||||||
| 457 | goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||||||||||||||||||||
| 458 | if (!BN_add(q, q, qadd))
| 0-965 | ||||||||||||||||||||||||||||||||||||||||||
| 459 | goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||||||||||||||||||||
| 460 | goto loop; executed 965 times by 1 test: goto loop;Executed by:
| 965 | ||||||||||||||||||||||||||||||||||||||||||
| 461 | } | - | ||||||||||||||||||||||||||||||||||||||||||
| 462 | } executed 37793 times by 1 test: end of blockExecuted by:
| 37793 | ||||||||||||||||||||||||||||||||||||||||||
| 463 | ret = 1; | - | ||||||||||||||||||||||||||||||||||||||||||
| 464 | - | |||||||||||||||||||||||||||||||||||||||||||
| 465 | err: code before this statement executed 14 times by 1 test: err:Executed by:
| 14 | ||||||||||||||||||||||||||||||||||||||||||
| 466 | BN_CTX_end(ctx); | - | ||||||||||||||||||||||||||||||||||||||||||
| 467 | bn_check_top(p); | - | ||||||||||||||||||||||||||||||||||||||||||
| 468 | return ret; executed 14 times by 1 test: return ret;Executed by:
| 14 | ||||||||||||||||||||||||||||||||||||||||||
| 469 | } | - | ||||||||||||||||||||||||||||||||||||||||||
| Source code | Switch to Preprocessed file |