crypto/ec/ecp_oct.c:179: error: INTEGER_OVERFLOW_L2
  ([0, +oo] - 1):unsigned64 by call to `BN_usub`.
Showing all 12 steps of the trace


crypto/ec/ecp_oct.c:142:8: Call
140.   		{
141.   		if (!group->meth->field_decode(group, tmp2, group->b, ctx)) goto err;
142.   		if (!BN_mod_add_quick(tmp1, tmp1, tmp2, group->field)) goto err;
              ^
143.   		}
144.   	else

crypto/bn/bn_mod.c:154:7: Call
  152.   int BN_mod_add_quick(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m)
  153.   	{
  154.   	if (!BN_uadd(r, a, b)) return 0;
               ^
  155.   	if (BN_ucmp(r, m) >= 0)
  156.   		return BN_usub(r, r, m);

crypto/bn/bn_add.c:154:4: Assignment
    152.   			{
    153.   			/* carry != 0 => dif == 0 */
    154.   			*rp = 1;
              ^
    155.   			r->top++;
    156.   			}

crypto/ec/ecp_oct.c:149:7: Call
147.   		}
148.   	
149.   	if (!BN_mod_sqrt(y, tmp1, group->field, ctx))
             ^
150.   		{
151.   		unsigned long err = ERR_peek_last_error();

crypto/bn/bn_sqrt.c:62:1: Parameter `*a->d`
  60.   
  61.   
  62. > BIGNUM *BN_mod_sqrt(BIGNUM *in, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx) 
  63.   /* Returns 'ret' such that
  64.    *      ret^2 == a (mod p),

crypto/ec/ecp_oct.c:163:15: Call
161.   		}
162.   
163.   	if (y_bit != BN_is_odd(y))
                     ^
164.   		{
165.   		if (BN_is_zero(y))

crypto/bn/bn_lib.c:885:1: Parameter `*a->d`
  883.   	}
  884.   
  885. > int BN_is_odd(const BIGNUM *a)
  886.   	{
  887.   	return (a->top > 0) && (a->d[0] & 1);

crypto/ec/ecp_oct.c:179:8: Call
177.   			goto err;
178.   			}
179.   		if (!BN_usub(y, group->field, y)) goto err;
              ^
180.   		}
181.   	if (y_bit != BN_is_odd(y))

crypto/bn/bn_add.c:168:1: <LHS trace>
166.   
167.   /* unsigned subtraction of b from a, a must be larger than b. */
168. > int BN_usub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b)
169.   	{
170.   	int max,min,dif;

crypto/bn/bn_add.c:168:1: Parameter `*a->d`
  166.   
  167.   /* unsigned subtraction of b from a, a must be larger than b. */
  168. > int BN_usub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b)
  169.   	{
  170.   	int max,min,dif;

crypto/bn/bn_add.c:226:4: Assignment
  224.   			{
  225.   			dif--;
  226.   			t1 = *(ap++);
            ^
  227.   			t2 = (t1-1)&BN_MASK2;
  228.   			*(rp++) = t2;

crypto/bn/bn_add.c:227:4: Binary operation: ([0, +oo] - 1):unsigned64 by call to `BN_usub` 
  225.   			dif--;
  226.   			t1 = *(ap++);
  227.   			t2 = (t1-1)&BN_MASK2;
            ^
  228.   			*(rp++) = t2;
  229.   			if (t1)

int BN_usub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b)
	{
	int max,min,dif;
	register BN_ULONG t1,t2,*rp;
	register const BN_ULONG *ap,*bp;
	int i,carry;
	bn_check_top(a);
	bn_check_top(b);
	max = a->top;
	min = b->top;
	dif = max - min;
	if (dif < 0)
		{
		BNerr(BN_F_BN_USUB,BN_R_ARG2_LT_ARG3);
		return(0);
		}
	if (bn_wexpand(r,max) == NULL) return(0);
	ap=a->d;
	bp=b->d;
	rp=r->d;
#if 1
	carry=0;
	for (i = min; i != 0; i--)
		{
		t1= *(ap++);
		t2= *(bp++);
		if (carry)
			{
			carry=(t1 <= t2);
			t1=(t1-t2-1)&BN_MASK2;
			}
		else
			{
			carry=(t1 < t2);
			t1=(t1-t2)&BN_MASK2;
			}
		*(rp++)=t1&BN_MASK2;
		}
#else
	carry=bn_sub_words(rp,ap,bp,min);
	ap+=min;
	bp+=min;
	rp+=min;
#endif
	if (carry)
		{
		if (!dif)
			return 0;
		while (dif)
			{
			dif--;
			t1 = *(ap++);
			t2 = (t1-1)&BN_MASK2;
			*(rp++) = t2;
			if (t1)
				break;
			}
		}
#if 0
	memcpy(rp,ap,sizeof(*rp)*(max-i));
#else
	if (rp != ap)
		{
		for (;;)
			{
			if (!dif--) break;
			rp[0]=ap[0];
			if (!dif--) break;
			rp[1]=ap[1];
			if (!dif--) break;
			rp[2]=ap[2];
			if (!dif--) break;
			rp[3]=ap[3];
			rp+=4;
			ap+=4;
			}
		}
#endif
	r->top=max;
	r->neg=0;
	bn_correct_top(r);
	return(1);
	}
['int ec_GFp_simple_set_compressed_coordinates(const EC_GROUP *group, EC_POINT *point,\n\tconst BIGNUM *x_, int y_bit, BN_CTX *ctx)\n\t{\n\tBN_CTX *new_ctx = NULL;\n\tBIGNUM *tmp1, *tmp2, *x, *y;\n\tint ret = 0;\n\tERR_clear_error();\n\tif (ctx == NULL)\n\t\t{\n\t\tctx = new_ctx = BN_CTX_new();\n\t\tif (ctx == NULL)\n\t\t\treturn 0;\n\t\t}\n\ty_bit = (y_bit != 0);\n\tBN_CTX_start(ctx);\n\ttmp1 = BN_CTX_get(ctx);\n\ttmp2 = BN_CTX_get(ctx);\n\tx = BN_CTX_get(ctx);\n\ty = BN_CTX_get(ctx);\n\tif (y == NULL) goto err;\n\tif (!BN_nnmod(x, x_, group->field,ctx)) goto err;\n\tif (group->meth->field_decode == 0)\n\t\t{\n\t\tif (!group->meth->field_sqr(group, tmp2, x_, ctx)) goto err;\n\t\tif (!group->meth->field_mul(group, tmp1, tmp2, x_, ctx)) goto err;\n\t\t}\n\telse\n\t\t{\n\t\tif (!BN_mod_sqr(tmp2, x_, group->field, ctx)) goto err;\n\t\tif (!BN_mod_mul(tmp1, tmp2, x_, group->field, ctx)) goto err;\n\t\t}\n\tif (group->a_is_minus3)\n\t\t{\n\t\tif (!BN_mod_lshift1_quick(tmp2, x, group->field)) goto err;\n\t\tif (!BN_mod_add_quick(tmp2, tmp2, x, group->field)) goto err;\n\t\tif (!BN_mod_sub_quick(tmp1, tmp1, tmp2, group->field)) goto err;\n\t\t}\n\telse\n\t\t{\n\t\tif (group->meth->field_decode)\n\t\t\t{\n\t\t\tif (!group->meth->field_decode(group, tmp2, group->a, ctx)) goto err;\n\t\t\tif (!BN_mod_mul(tmp2, tmp2, x, group->field, ctx)) goto err;\n\t\t\t}\n\t\telse\n\t\t\t{\n\t\t\tif (!group->meth->field_mul(group, tmp2, group->a, x, ctx)) goto err;\n\t\t\t}\n\t\tif (!BN_mod_add_quick(tmp1, tmp1, tmp2, group->field)) goto err;\n\t\t}\n\tif (group->meth->field_decode)\n\t\t{\n\t\tif (!group->meth->field_decode(group, tmp2, group->b, ctx)) goto err;\n\t\tif (!BN_mod_add_quick(tmp1, tmp1, tmp2, group->field)) goto err;\n\t\t}\n\telse\n\t\t{\n\t\tif (!BN_mod_add_quick(tmp1, tmp1, group->b, group->field)) goto err;\n\t\t}\n\tif (!BN_mod_sqrt(y, tmp1, group->field, ctx))\n\t\t{\n\t\tunsigned long err = ERR_peek_last_error();\n\t\tif (ERR_GET_LIB(err) == ERR_LIB_BN && ERR_GET_REASON(err) == BN_R_NOT_A_SQUARE)\n\t\t\t{\n\t\t\tERR_clear_error();\n\t\t\tECerr(EC_F_EC_GFP_SIMPLE_SET_COMPRESSED_COORDINATES, EC_R_INVALID_COMPRESSED_POINT);\n\t\t\t}\n\t\telse\n\t\t\tECerr(EC_F_EC_GFP_SIMPLE_SET_COMPRESSED_COORDINATES, ERR_R_BN_LIB);\n\t\tgoto err;\n\t\t}\n\tif (y_bit != BN_is_odd(y))\n\t\t{\n\t\tif (BN_is_zero(y))\n\t\t\t{\n\t\t\tint kron;\n\t\t\tkron = BN_kronecker(x, group->field, ctx);\n\t\t\tif (kron == -2) goto err;\n\t\t\tif (kron == 1)\n\t\t\t\tECerr(EC_F_EC_GFP_SIMPLE_SET_COMPRESSED_COORDINATES, EC_R_INVALID_COMPRESSION_BIT);\n\t\t\telse\n\t\t\t\tECerr(EC_F_EC_GFP_SIMPLE_SET_COMPRESSED_COORDINATES, EC_R_INVALID_COMPRESSED_POINT);\n\t\t\tgoto err;\n\t\t\t}\n\t\tif (!BN_usub(y, group->field, y)) goto err;\n\t\t}\n\tif (y_bit != BN_is_odd(y))\n\t\t{\n\t\tECerr(EC_F_EC_GFP_SIMPLE_SET_COMPRESSED_COORDINATES, ERR_R_INTERNAL_ERROR);\n\t\tgoto err;\n\t\t}\n\tif (!EC_POINT_set_affine_coordinates_GFp(group, point, x, y, ctx)) goto err;\n\tret = 1;\n err:\n\tBN_CTX_end(ctx);\n\tif (new_ctx != NULL)\n\t\tBN_CTX_free(new_ctx);\n\treturn ret;\n\t}', 'int BN_mod_add_quick(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m)\n\t{\n\tif (!BN_uadd(r, a, b)) return 0;\n\tif (BN_ucmp(r, m) >= 0)\n\t\treturn BN_usub(r, r, m);\n\treturn 1;\n\t}', 'int BN_uadd(BIGNUM *r, const BIGNUM *a, const BIGNUM *b)\n\t{\n\tint max,min,dif;\n\tconst BN_ULONG *ap,*bp;\n\tBN_ULONG *rp,carry,t1,t2;\n\tconst BIGNUM *tmp;\n\tbn_check_top(a);\n\tbn_check_top(b);\n\tif (a->top < b->top)\n\t\t{ tmp=a; a=b; b=tmp; }\n\tmax = a->top;\n\tmin = b->top;\n\tdif = max - min;\n\tif (bn_wexpand(r,max+1) == NULL)\n\t\treturn 0;\n\tr->top=max;\n\tap=a->d;\n\tbp=b->d;\n\trp=r->d;\n\tcarry=bn_add_words(rp,ap,bp,min);\n\trp+=min;\n\tap+=min;\n\tbp+=min;\n\tif (carry)\n\t\t{\n\t\twhile (dif)\n\t\t\t{\n\t\t\tdif--;\n\t\t\tt1 = *(ap++);\n\t\t\tt2 = (t1+1) & BN_MASK2;\n\t\t\t*(rp++) = t2;\n\t\t\tif (t2)\n\t\t\t\t{\n\t\t\t\tcarry=0;\n\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\tif (carry)\n\t\t\t{\n\t\t\t*rp = 1;\n\t\t\tr->top++;\n\t\t\t}\n\t\t}\n\tif (dif && rp != ap)\n\t\twhile (dif--)\n\t\t\t*(rp++) = *(ap++);\n\tr->neg = 0;\n\tbn_check_top(r);\n\treturn 1;\n\t}', 'BIGNUM *BN_mod_sqrt(BIGNUM *in, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx)\n\t{\n\tBIGNUM *ret = in;\n\tint err = 1;\n\tint r;\n\tBIGNUM *A, *b, *q, *t, *x, *y;\n\tint e, i, j;\n\tif (!BN_is_odd(p) || BN_abs_is_word(p, 1))\n\t\t{\n\t\tif (BN_abs_is_word(p, 2))\n\t\t\t{\n\t\t\tif (ret == NULL)\n\t\t\t\tret = BN_new();\n\t\t\tif (ret == NULL)\n\t\t\t\tgoto end;\n\t\t\tif (!BN_set_word(ret, BN_is_bit_set(a, 0)))\n\t\t\t\t{\n\t\t\t\tif (ret != in)\n\t\t\t\t\tBN_free(ret);\n\t\t\t\treturn NULL;\n\t\t\t\t}\n\t\t\tbn_check_top(ret);\n\t\t\treturn ret;\n\t\t\t}\n\t\tBNerr(BN_F_BN_MOD_SQRT, BN_R_P_IS_NOT_PRIME);\n\t\treturn(NULL);\n\t\t}\n\tif (BN_is_zero(a) || BN_is_one(a))\n\t\t{\n\t\tif (ret == NULL)\n\t\t\tret = BN_new();\n\t\tif (ret == NULL)\n\t\t\tgoto end;\n\t\tif (!BN_set_word(ret, BN_is_one(a)))\n\t\t\t{\n\t\t\tif (ret != in)\n\t\t\t\tBN_free(ret);\n\t\t\treturn NULL;\n\t\t\t}\n\t\tbn_check_top(ret);\n\t\treturn ret;\n\t\t}\n\tBN_CTX_start(ctx);\n\tA = BN_CTX_get(ctx);\n\tb = BN_CTX_get(ctx);\n\tq = BN_CTX_get(ctx);\n\tt = BN_CTX_get(ctx);\n\tx = BN_CTX_get(ctx);\n\ty = BN_CTX_get(ctx);\n\tif (y == NULL) goto end;\n\tif (ret == NULL)\n\t\tret = BN_new();\n\tif (ret == NULL) goto end;\n\tif (!BN_nnmod(A, a, p, ctx)) goto end;\n\te = 1;\n\twhile (!BN_is_bit_set(p, e))\n\t\te++;\n\tif (e == 1)\n\t\t{\n\t\tif (!BN_rshift(q, p, 2)) goto end;\n\t\tq->neg = 0;\n\t\tif (!BN_add_word(q, 1)) goto end;\n\t\tif (!BN_mod_exp(ret, A, q, p, ctx)) goto end;\n\t\terr = 0;\n\t\tgoto vrfy;\n\t\t}\n\tif (e == 2)\n\t\t{\n\t\tif (!BN_mod_lshift1_quick(t, A, p)) goto end;\n\t\tif (!BN_rshift(q, p, 3)) goto end;\n\t\tq->neg = 0;\n\t\tif (!BN_mod_exp(b, t, q, p, ctx)) goto end;\n\t\tif (!BN_mod_sqr(y, b, p, ctx)) goto end;\n\t\tif (!BN_mod_mul(t, t, y, p, ctx)) goto end;\n\t\tif (!BN_sub_word(t, 1)) goto end;\n\t\tif (!BN_mod_mul(x, A, b, p, ctx)) goto end;\n\t\tif (!BN_mod_mul(x, x, t, p, ctx)) goto end;\n\t\tif (!BN_copy(ret, x)) goto end;\n\t\terr = 0;\n\t\tgoto vrfy;\n\t\t}\n\tif (!BN_copy(q, p)) goto end;\n\tq->neg = 0;\n\ti = 2;\n\tdo\n\t\t{\n\t\tif (i < 22)\n\t\t\t{\n\t\t\tif (!BN_set_word(y, i)) goto end;\n\t\t\t}\n\t\telse\n\t\t\t{\n\t\t\tif (!BN_pseudo_rand(y, BN_num_bits(p), 0, 0)) goto end;\n\t\t\tif (BN_ucmp(y, p) >= 0)\n\t\t\t\t{\n\t\t\t\tif (!(p->neg ? BN_add : BN_sub)(y, y, p)) goto end;\n\t\t\t\t}\n\t\t\tif (BN_is_zero(y))\n\t\t\t\tif (!BN_set_word(y, i)) goto end;\n\t\t\t}\n\t\tr = BN_kronecker(y, q, ctx);\n\t\tif (r < -1) goto end;\n\t\tif (r == 0)\n\t\t\t{\n\t\t\tBNerr(BN_F_BN_MOD_SQRT, BN_R_P_IS_NOT_PRIME);\n\t\t\tgoto end;\n\t\t\t}\n\t\t}\n\twhile (r == 1 && ++i < 82);\n\tif (r != -1)\n\t\t{\n\t\tBNerr(BN_F_BN_MOD_SQRT, BN_R_TOO_MANY_ITERATIONS);\n\t\tgoto end;\n\t\t}\n\tif (!BN_rshift(q, q, e)) goto end;\n\tif (!BN_mod_exp(y, y, q, p, ctx)) goto end;\n\tif (BN_is_one(y))\n\t\t{\n\t\tBNerr(BN_F_BN_MOD_SQRT, BN_R_P_IS_NOT_PRIME);\n\t\tgoto end;\n\t\t}\n\tif (!BN_rshift1(t, q)) goto end;\n\tif (BN_is_zero(t))\n\t\t{\n\t\tif (!BN_nnmod(t, A, p, ctx)) goto end;\n\t\tif (BN_is_zero(t))\n\t\t\t{\n\t\t\tBN_zero(ret);\n\t\t\terr = 0;\n\t\t\tgoto end;\n\t\t\t}\n\t\telse\n\t\t\tif (!BN_one(x)) goto end;\n\t\t}\n\telse\n\t\t{\n\t\tif (!BN_mod_exp(x, A, t, p, ctx)) goto end;\n\t\tif (BN_is_zero(x))\n\t\t\t{\n\t\t\tBN_zero(ret);\n\t\t\terr = 0;\n\t\t\tgoto end;\n\t\t\t}\n\t\t}\n\tif (!BN_mod_sqr(b, x, p, ctx)) goto end;\n\tif (!BN_mod_mul(b, b, A, p, ctx)) goto end;\n\tif (!BN_mod_mul(x, x, A, p, ctx)) goto end;\n\twhile (1)\n\t\t{\n\t\tif (BN_is_one(b))\n\t\t\t{\n\t\t\tif (!BN_copy(ret, x)) goto end;\n\t\t\terr = 0;\n\t\t\tgoto vrfy;\n\t\t\t}\n\t\ti = 1;\n\t\tif (!BN_mod_sqr(t, b, p, ctx)) goto end;\n\t\twhile (!BN_is_one(t))\n\t\t\t{\n\t\t\ti++;\n\t\t\tif (i == e)\n\t\t\t\t{\n\t\t\t\tBNerr(BN_F_BN_MOD_SQRT, BN_R_NOT_A_SQUARE);\n\t\t\t\tgoto end;\n\t\t\t\t}\n\t\t\tif (!BN_mod_mul(t, t, t, p, ctx)) goto end;\n\t\t\t}\n\t\tif (!BN_copy(t, y)) goto end;\n\t\tfor (j = e - i - 1; j > 0; j--)\n\t\t\t{\n\t\t\tif (!BN_mod_sqr(t, t, p, ctx)) goto end;\n\t\t\t}\n\t\tif (!BN_mod_mul(y, t, t, p, ctx)) goto end;\n\t\tif (!BN_mod_mul(x, x, t, p, ctx)) goto end;\n\t\tif (!BN_mod_mul(b, b, y, p, ctx)) goto end;\n\t\te = i;\n\t\t}\n vrfy:\n\tif (!err)\n\t\t{\n\t\tif (!BN_mod_sqr(x, ret, p, ctx))\n\t\t\terr = 1;\n\t\tif (!err && 0 != BN_cmp(x, A))\n\t\t\t{\n\t\t\tBNerr(BN_F_BN_MOD_SQRT, BN_R_NOT_A_SQUARE);\n\t\t\terr = 1;\n\t\t\t}\n\t\t}\n end:\n\tif (err)\n\t\t{\n\t\tif (ret != NULL && ret != in)\n\t\t\t{\n\t\t\tBN_clear_free(ret);\n\t\t\t}\n\t\tret = NULL;\n\t\t}\n\tBN_CTX_end(ctx);\n\tbn_check_top(ret);\n\treturn ret;\n\t}', 'int BN_is_odd(const BIGNUM *a)\n\t{\n\treturn (a->top > 0) && (a->d[0] & 1);\n\t}', 'int BN_usub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b)\n\t{\n\tint max,min,dif;\n\tregister BN_ULONG t1,t2,*rp;\n\tregister const BN_ULONG *ap,*bp;\n\tint i,carry;\n\tbn_check_top(a);\n\tbn_check_top(b);\n\tmax = a->top;\n\tmin = b->top;\n\tdif = max - min;\n\tif (dif < 0)\n\t\t{\n\t\tBNerr(BN_F_BN_USUB,BN_R_ARG2_LT_ARG3);\n\t\treturn(0);\n\t\t}\n\tif (bn_wexpand(r,max) == NULL) return(0);\n\tap=a->d;\n\tbp=b->d;\n\trp=r->d;\n#if 1\n\tcarry=0;\n\tfor (i = min; i != 0; i--)\n\t\t{\n\t\tt1= *(ap++);\n\t\tt2= *(bp++);\n\t\tif (carry)\n\t\t\t{\n\t\t\tcarry=(t1 <= t2);\n\t\t\tt1=(t1-t2-1)&BN_MASK2;\n\t\t\t}\n\t\telse\n\t\t\t{\n\t\t\tcarry=(t1 < t2);\n\t\t\tt1=(t1-t2)&BN_MASK2;\n\t\t\t}\n\t\t*(rp++)=t1&BN_MASK2;\n\t\t}\n#else\n\tcarry=bn_sub_words(rp,ap,bp,min);\n\tap+=min;\n\tbp+=min;\n\trp+=min;\n#endif\n\tif (carry)\n\t\t{\n\t\tif (!dif)\n\t\t\treturn 0;\n\t\twhile (dif)\n\t\t\t{\n\t\t\tdif--;\n\t\t\tt1 = *(ap++);\n\t\t\tt2 = (t1-1)&BN_MASK2;\n\t\t\t*(rp++) = t2;\n\t\t\tif (t1)\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n#if 0\n\tmemcpy(rp,ap,sizeof(*rp)*(max-i));\n#else\n\tif (rp != ap)\n\t\t{\n\t\tfor (;;)\n\t\t\t{\n\t\t\tif (!dif--) break;\n\t\t\trp[0]=ap[0];\n\t\t\tif (!dif--) break;\n\t\t\trp[1]=ap[1];\n\t\t\tif (!dif--) break;\n\t\t\trp[2]=ap[2];\n\t\t\tif (!dif--) break;\n\t\t\trp[3]=ap[3];\n\t\t\trp+=4;\n\t\t\tap+=4;\n\t\t\t}\n\t\t}\n#endif\n\tr->top=max;\n\tr->neg=0;\n\tbn_correct_top(r);\n\treturn(1);\n\t}']