engines/ccgost/gost2001.c:326: error: INTEGER_OVERFLOW_L2
  ([0, +oo] - 1):unsigned64 by call to `BN_rand_range`.
Showing all 11 steps of the trace


engines/ccgost/gost2001.c:322:2: Call
320.   	BIGNUM *order = BN_new(),*d=BN_new();
321.   	const EC_GROUP *group = EC_KEY_get0_group(ec);
322.   	EC_GROUP_get_order(group,order,NULL);
        ^
323.   	
324.   	do 

crypto/ec/ec_lib.c:321:7: Call
  319.   int EC_GROUP_get_order(const EC_GROUP *group, BIGNUM *order, BN_CTX *ctx)
  320.   	{
  321.   	if (!BN_copy(order, &group->order))
               ^
  322.   		return 0;
  323.   

crypto/bn/bn_lib.c:497:1: Parameter `a->top`
    495.   	}
    496.   
    497. > BIGNUM *BN_copy(BIGNUM *a, const BIGNUM *b)
    498.   	{
    499.   	int i;

engines/ccgost/gost2001.c:326:8: Call
324.   	do 
325.   		{
326.   		if (!BN_rand_range(d,order)) 
              ^
327.   			{
328.   			GOSTerr(GOST_F_GOST2001_KEYGEN,GOST_R_RANDOM_NUMBER_GENERATOR_FAILED);

crypto/bn/bn_rand.c:298:1: Parameter `r->top`
  296.   
  297.   
  298. > int	BN_rand_range(BIGNUM *r, const BIGNUM *range)
  299.   	{
  300.   	return bn_rand_range(0, r, range);

crypto/bn/bn_rand.c:300:9: Call
  298.   int	BN_rand_range(BIGNUM *r, const BIGNUM *range)
  299.   	{
  300.   	return bn_rand_range(0, r, range);
                 ^
  301.   	}
  302.   

crypto/bn/bn_rand.c:230:1: Parameter `r->top`
    228.   
    229.   /* random number r:  0 <= r < range */
    230. > static int bn_rand_range(int pseudo, BIGNUM *r, const BIGNUM *range)
    231.   	{
    232.   	int (*bn_rand)(BIGNUM *, size_t, int, int)

crypto/bn/bn_rand.c:290:10: Call
    288.   				}
    289.   			}
    290.   		while (BN_cmp(r, range) >= 0);
                    ^
    291.   		}
    292.   

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

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_lib.c:709:7: Binary operation: ([0, +oo] - 1):unsigned64 by call to `BN_rand_range` 
      707.   	if (a->top > b->top) return(gt);
      708.   	if (a->top < b->top) return(lt);
      709.   	for (i=a->top-1; i>=0; i--)
                   ^
      710.   		{
      711.   		t1=a->d[i];

int BN_cmp(const BIGNUM *a, const BIGNUM *b)
	{
	int i;
	int gt,lt;
	BN_ULONG t1,t2;
	if ((a == NULL) || (b == NULL))
		{
		if (a != NULL)
			return(-1);
		else if (b != NULL)
			return(1);
		else
			return(0);
		}
	bn_check_top(a);
	bn_check_top(b);
	if (a->neg != b->neg)
		{
		if (a->neg)
			return(-1);
		else	return(1);
		}
	if (a->neg == 0)
		{ gt=1; lt= -1; }
	else	{ gt= -1; lt=1; }
	if (a->top > b->top) return(gt);
	if (a->top < b->top) return(lt);
	for (i=a->top-1; i>=0; i--)
		{
		t1=a->d[i];
		t2=b->d[i];
		if (t1 > t2) return(gt);
		if (t1 < t2) return(lt);
		}
	return(0);
	}
['int gost2001_keygen(EC_KEY *ec)\n\t{\n\tBIGNUM *order = BN_new(),*d=BN_new();\n\tconst EC_GROUP *group = EC_KEY_get0_group(ec);\n\tEC_GROUP_get_order(group,order,NULL);\n\tdo\n\t\t{\n\t\tif (!BN_rand_range(d,order))\n\t\t\t{\n\t\t\tGOSTerr(GOST_F_GOST2001_KEYGEN,GOST_R_RANDOM_NUMBER_GENERATOR_FAILED);\n\t\t\tBN_free(d);\n\t\t\tBN_free(order);\n\t\t\treturn 0;\n\t\t\t}\n\t\t}\n\twhile (BN_is_zero(d));\n\tEC_KEY_set_private_key(ec,d);\n\tBN_free(d);\n\tBN_free(order);\n\treturn gost2001_compute_public(ec);\n\t}', 'int EC_GROUP_get_order(const EC_GROUP *group, BIGNUM *order, BN_CTX *ctx)\n\t{\n\tif (!BN_copy(order, &group->order))\n\t\treturn 0;\n\treturn !BN_is_zero(order);\n\t}', 'BIGNUM *BN_copy(BIGNUM *a, const BIGNUM *b)\n\t{\n\tint i;\n\tBN_ULONG *A;\n\tconst BN_ULONG *B;\n\tbn_check_top(b);\n\tif (a == b) return(a);\n\tif (bn_wexpand(a,b->top) == NULL) return(NULL);\n#if 1\n\tA=a->d;\n\tB=b->d;\n\tfor (i=b->top>>2; i>0; i--,A+=4,B+=4)\n\t\t{\n\t\tBN_ULONG a0,a1,a2,a3;\n\t\ta0=B[0]; a1=B[1]; a2=B[2]; a3=B[3];\n\t\tA[0]=a0; A[1]=a1; A[2]=a2; A[3]=a3;\n\t\t}\n\tswitch (b->top&3)\n\t\t{\n\t\tcase 3: A[2]=B[2];\n\t\tcase 2: A[1]=B[1];\n\t\tcase 1: A[0]=B[0];\n\t\tcase 0: ;\n\t\t}\n#else\n\tmemcpy(a->d,b->d,sizeof(b->d[0])*b->top);\n#endif\n\ta->top=b->top;\n\ta->neg=b->neg;\n\tbn_check_top(a);\n\treturn(a);\n\t}', 'int\tBN_rand_range(BIGNUM *r, const BIGNUM *range)\n\t{\n\treturn bn_rand_range(0, r, range);\n\t}', 'static int bn_rand_range(int pseudo, BIGNUM *r, const BIGNUM *range)\n\t{\n\tint (*bn_rand)(BIGNUM *, size_t, int, int)\n\t    = pseudo ? BN_pseudo_rand : BN_rand;\n\tint n;\n\tint count = 100;\n\tif (range->neg || BN_is_zero(range))\n\t\t{\n\t\tBNerr(BN_F_BN_RAND_RANGE, BN_R_INVALID_RANGE);\n\t\treturn 0;\n\t\t}\n\tn = BN_num_bits(range);\n\tif (n == 1)\n\t\tBN_zero(r);\n\telse if (!BN_is_bit_set(range, n - 2) && !BN_is_bit_set(range, n - 3))\n\t\t{\n\t\tdo\n\t\t\t{\n\t\t\tif (!bn_rand(r, n + 1, -1, 0)) return 0;\n\t\t\tif (BN_cmp(r ,range) >= 0)\n\t\t\t\t{\n\t\t\t\tif (!BN_sub(r, r, range)) return 0;\n\t\t\t\tif (BN_cmp(r, range) >= 0)\n\t\t\t\t\tif (!BN_sub(r, r, range)) return 0;\n\t\t\t\t}\n\t\t\tif (!--count)\n\t\t\t\t{\n\t\t\t\tBNerr(BN_F_BN_RAND_RANGE, BN_R_TOO_MANY_ITERATIONS);\n\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t}\n\t\twhile (BN_cmp(r, range) >= 0);\n\t\t}\n\telse\n\t\t{\n\t\tdo\n\t\t\t{\n\t\t\tif (!bn_rand(r, n, -1, 0)) return 0;\n\t\t\tif (!--count)\n\t\t\t\t{\n\t\t\t\tBNerr(BN_F_BN_RAND_RANGE, BN_R_TOO_MANY_ITERATIONS);\n\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t}\n\t\twhile (BN_cmp(r, range) >= 0);\n\t\t}\n\tbn_check_top(r);\n\treturn 1;\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}']