crypto/bn/bn_prime.c:199: error: INTEGER_OVERFLOW_L2
  ([0, +oo] - 1):unsigned64 by call to `BN_is_prime_fasttest_ex`.
Showing all 10 steps of the trace


crypto/bn/bn_prime.c:183:9: Call
181.   		if (safe)
182.   			{
183.   			if (!probable_prime_dh_safe(ret,bits,add,rem,ctx))
               ^
184.   				 goto err;
185.   			}

crypto/bn/bn_prime.c:444:1: Parameter `p->top`
  442.   	}
  443.   
  444. > static int probable_prime_dh_safe(BIGNUM *p, int bits, const BIGNUM *padd,
  445.   	const BIGNUM *rem, BN_CTX *ctx)
  446.   	{

crypto/bn/bn_prime.c:199:5: Call
197.   	if (!safe)
198.   		{
199.   		i=BN_is_prime_fasttest_ex(ret,checks,ctx,0,cb);
           ^
200.   		if (i == -1) goto err;
201.   		if (i == 0) goto loop;

crypto/bn/bn_prime.c:243:1: Parameter `a->top`
  241.   	}
  242.   
  243. > int BN_is_prime_fasttest_ex(const BIGNUM *a, int checks, BN_CTX *ctx_passed,
  244.   		int do_trial_division, BN_GENCB *cb)
  245.   	{

crypto/bn/bn_prime.c:253:6: Call
  251.   	const BIGNUM *A = NULL;
  252.   
  253.   	if (BN_cmp(a, BN_value_one()) <= 0)
              ^
  254.   		return 0;
  255.   	

crypto/bn/bn_lib.c:678:1: Parameter `a->top`
    676.   	}
    677.   
    678. > int BN_cmp(const BIGNUM *a, const BIGNUM *b)
    679.   	{
    680.   	int i;

crypto/bn/bn_prime.c:257:12: Call
  255.   	
  256.   	if (checks == BN_prime_checks)
  257.   		checks = BN_prime_checks_for_size(BN_num_bits(a));
                    ^
  258.   
  259.   	/* first look for small factors */

crypto/bn/bn_lib.c:248:1: <LHS trace>
246.   	}
247.   
248. > int BN_num_bits(const BIGNUM *a)
249.   	{
250.   	int i = a->top - 1;

crypto/bn/bn_lib.c:248:1: Parameter `a->top`
    246.   	}
    247.   
    248. > int BN_num_bits(const BIGNUM *a)
    249.   	{
    250.   	int i = a->top - 1;

crypto/bn/bn_lib.c:250:2: Binary operation: ([0, +oo] - 1):unsigned64 by call to `BN_is_prime_fasttest_ex` 
    248.   int BN_num_bits(const BIGNUM *a)
    249.   	{
    250.   	int i = a->top - 1;
            ^
    251.   	bn_check_top(a);
    252.   

int BN_num_bits(const BIGNUM *a)
	{
	int i = a->top - 1;
	bn_check_top(a);
	if (BN_is_zero(a)) return 0;
	return ((i*BN_BITS2) + BN_num_bits_word(a->d[i]));
	}
['int BN_generate_prime_ex(BIGNUM *ret, int bits, int safe,\n\tconst BIGNUM *add, const BIGNUM *rem, BN_GENCB *cb)\n\t{\n\tBIGNUM *t;\n\tint found=0;\n\tint i,j,c1=0;\n\tBN_CTX *ctx;\n\tint checks = BN_prime_checks_for_size(bits);\n\tctx=BN_CTX_new();\n\tif (ctx == NULL) goto err;\n\tBN_CTX_start(ctx);\n\tt = BN_CTX_get(ctx);\n\tif(!t) goto err;\nloop:\n\tif (add == NULL)\n\t\t{\n\t\tif (!probable_prime(ret,bits)) goto err;\n\t\t}\n\telse\n\t\t{\n\t\tif (safe)\n\t\t\t{\n\t\t\tif (!probable_prime_dh_safe(ret,bits,add,rem,ctx))\n\t\t\t\t goto err;\n\t\t\t}\n\t\telse\n\t\t\t{\n\t\t\tif (!probable_prime_dh(ret,bits,add,rem,ctx))\n\t\t\t\tgoto err;\n\t\t\t}\n\t\t}\n\tif(!BN_GENCB_call(cb, 0, c1++))\n\t\tgoto err;\n\tif (!safe)\n\t\t{\n\t\ti=BN_is_prime_fasttest_ex(ret,checks,ctx,0,cb);\n\t\tif (i == -1) goto err;\n\t\tif (i == 0) goto loop;\n\t\t}\n\telse\n\t\t{\n\t\tif (!BN_rshift1(t,ret)) goto err;\n\t\tfor (i=0; i<checks; i++)\n\t\t\t{\n\t\t\tj=BN_is_prime_fasttest_ex(ret,1,ctx,0,cb);\n\t\t\tif (j == -1) goto err;\n\t\t\tif (j == 0) goto loop;\n\t\t\tj=BN_is_prime_fasttest_ex(t,1,ctx,0,cb);\n\t\t\tif (j == -1) goto err;\n\t\t\tif (j == 0) goto loop;\n\t\t\tif(!BN_GENCB_call(cb, 2, c1-1))\n\t\t\t\tgoto err;\n\t\t\t}\n\t\t}\n\tfound = 1;\nerr:\n\tif (ctx != NULL)\n\t\t{\n\t\tBN_CTX_end(ctx);\n\t\tBN_CTX_free(ctx);\n\t\t}\n\tbn_check_top(ret);\n\treturn found;\n\t}', 'static int probable_prime_dh_safe(BIGNUM *p, int bits, const BIGNUM *padd,\n\tconst BIGNUM *rem, BN_CTX *ctx)\n\t{\n\tint i,ret=0;\n\tBIGNUM *t1,*qadd,*q;\n\tbits--;\n\tBN_CTX_start(ctx);\n\tt1 = BN_CTX_get(ctx);\n\tq = BN_CTX_get(ctx);\n\tqadd = BN_CTX_get(ctx);\n\tif (qadd == NULL) goto err;\n\tif (!BN_rshift1(qadd,padd)) goto err;\n\tif (!BN_rand(q,bits,0,1)) goto err;\n\tif (!BN_mod(t1,q,qadd,ctx)) goto err;\n\tif (!BN_sub(q,q,t1)) goto err;\n\tif (rem == NULL)\n\t\t{ if (!BN_add_word(q,1)) goto err; }\n\telse\n\t\t{\n\t\tif (!BN_rshift1(t1,rem)) goto err;\n\t\tif (!BN_add(q,q,t1)) goto err;\n\t\t}\n\tif (!BN_lshift1(p,q)) goto err;\n\tif (!BN_add_word(p,1)) goto err;\n\tloop: for (i=1; i<NUMPRIMES; i++)\n\t\t{\n\t\tif (\t(BN_mod_word(p,(BN_ULONG)primes[i]) == 0) ||\n\t\t\t(BN_mod_word(q,(BN_ULONG)primes[i]) == 0))\n\t\t\t{\n\t\t\tif (!BN_add(p,p,padd)) goto err;\n\t\t\tif (!BN_add(q,q,qadd)) goto err;\n\t\t\tgoto loop;\n\t\t\t}\n\t\t}\n\tret=1;\nerr:\n\tBN_CTX_end(ctx);\n\tbn_check_top(p);\n\treturn(ret);\n\t}', 'int BN_is_prime_fasttest_ex(const BIGNUM *a, int checks, BN_CTX *ctx_passed,\n\t\tint do_trial_division, BN_GENCB *cb)\n\t{\n\tint i, j, ret = -1;\n\tint k;\n\tBN_CTX *ctx = NULL;\n\tBIGNUM *A1, *A1_odd, *check;\n\tBN_MONT_CTX *mont = NULL;\n\tconst BIGNUM *A = NULL;\n\tif (BN_cmp(a, BN_value_one()) <= 0)\n\t\treturn 0;\n\tif (checks == BN_prime_checks)\n\t\tchecks = BN_prime_checks_for_size(BN_num_bits(a));\n\tif (!BN_is_odd(a))\n\t\treturn BN_is_word(a, 2);\n\tif (do_trial_division)\n\t\t{\n\t\tfor (i = 1; i < NUMPRIMES; i++)\n\t\t\tif (BN_mod_word(a, primes[i]) == 0)\n\t\t\t\treturn 0;\n\t\tif(!BN_GENCB_call(cb, 1, -1))\n\t\t\tgoto err;\n\t\t}\n\tif (ctx_passed != NULL)\n\t\tctx = ctx_passed;\n\telse\n\t\tif ((ctx=BN_CTX_new()) == NULL)\n\t\t\tgoto err;\n\tBN_CTX_start(ctx);\n\tif (a->neg)\n\t\t{\n\t\tBIGNUM *t;\n\t\tif ((t = BN_CTX_get(ctx)) == NULL) goto err;\n\t\tBN_copy(t, a);\n\t\tt->neg = 0;\n\t\tA = t;\n\t\t}\n\telse\n\t\tA = a;\n\tA1 = BN_CTX_get(ctx);\n\tA1_odd = BN_CTX_get(ctx);\n\tcheck = BN_CTX_get(ctx);\n\tif (check == NULL) goto err;\n\tif (!BN_copy(A1, A))\n\t\tgoto err;\n\tif (!BN_sub_word(A1, 1))\n\t\tgoto err;\n\tif (BN_is_zero(A1))\n\t\t{\n\t\tret = 0;\n\t\tgoto err;\n\t\t}\n\tk = 1;\n\twhile (!BN_is_bit_set(A1, k))\n\t\tk++;\n\tif (!BN_rshift(A1_odd, A1, k))\n\t\tgoto err;\n\tmont = BN_MONT_CTX_new();\n\tif (mont == NULL)\n\t\tgoto err;\n\tif (!BN_MONT_CTX_set(mont, A, ctx))\n\t\tgoto err;\n\tfor (i = 0; i < checks; i++)\n\t\t{\n\t\tif (!BN_pseudo_rand_range(check, A1))\n\t\t\tgoto err;\n\t\tif (!BN_add_word(check, 1))\n\t\t\tgoto err;\n\t\tj = witness(check, A, A1, A1_odd, k, ctx, mont);\n\t\tif (j == -1) goto err;\n\t\tif (j)\n\t\t\t{\n\t\t\tret=0;\n\t\t\tgoto err;\n\t\t\t}\n\t\tif(!BN_GENCB_call(cb, 1, i))\n\t\t\tgoto err;\n\t\t}\n\tret=1;\nerr:\n\tif (ctx != NULL)\n\t\t{\n\t\tBN_CTX_end(ctx);\n\t\tif (ctx_passed == NULL)\n\t\t\tBN_CTX_free(ctx);\n\t\t}\n\tif (mont != NULL)\n\t\tBN_MONT_CTX_free(mont);\n\treturn(ret);\n\t}', 'int BN_cmp(const BIGNUM *a, const BIGNUM *b)\n\t{\n\tint i;\n\tint gt,lt;\n\tBN_ULONG t1,t2;\n\tif ((a == NULL) || (b == NULL))\n\t\t{\n\t\tif (a != NULL)\n\t\t\treturn(-1);\n\t\telse if (b != NULL)\n\t\t\treturn(1);\n\t\telse\n\t\t\treturn(0);\n\t\t}\n\tbn_check_top(a);\n\tbn_check_top(b);\n\tif (a->neg != b->neg)\n\t\t{\n\t\tif (a->neg)\n\t\t\treturn(-1);\n\t\telse\treturn(1);\n\t\t}\n\tif (a->neg == 0)\n\t\t{ gt=1; lt= -1; }\n\telse\t{ gt= -1; lt=1; }\n\tif (a->top > b->top) return(gt);\n\tif (a->top < b->top) return(lt);\n\tfor (i=a->top-1; i>=0; i--)\n\t\t{\n\t\tt1=a->d[i];\n\t\tt2=b->d[i];\n\t\tif (t1 > t2) return(gt);\n\t\tif (t1 < t2) return(lt);\n\t\t}\n\treturn(0);\n\t}', 'int BN_num_bits(const BIGNUM *a)\n\t{\n\tint i = a->top - 1;\n\tbn_check_top(a);\n\tif (BN_is_zero(a)) return 0;\n\treturn ((i*BN_BITS2) + BN_num_bits_word(a->d[i]));\n\t}']