engines/e_atalla.c:498: error: INTEGER_OVERFLOW_L2
  ([0, `a->top`] - 1):unsigned64 by call to `BN_bn2bin`.
Showing all 9 steps of the trace


engines/e_atalla.c:444:1: Parameter `a->top`
442.   	}
443.   
444. > static int atalla_mod_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,
445.   			const BIGNUM *m, BN_CTX *ctx)
446.   	{

engines/e_atalla.c:498:57: Call
496.   	memset(argument->d, 0, numbytes);
497.   	memset(result->d, 0, numbytes);
498.   	BN_bn2bin(a, (unsigned char *)argument->d + numbytes - BN_num_bytes(a));
                                                               ^
499.   	/* Perform the operation */
500.   	if(p_Atalla_RSAPrivateKeyOpFn(&keydata, (unsigned char *)result->d,

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;

engines/e_atalla.c:498:2: Call
496.   	memset(argument->d, 0, numbytes);
497.   	memset(result->d, 0, numbytes);
498.   	BN_bn2bin(a, (unsigned char *)argument->d + numbytes - BN_num_bytes(a));
        ^
499.   	/* Perform the operation */
500.   	if(p_Atalla_RSAPrivateKeyOpFn(&keydata, (unsigned char *)result->d,

crypto/bn/bn_lib.c:641:1: Parameter `a->top`
  639.   
  640.   /* ignore negative */
  641. > int BN_bn2bin(const BIGNUM *a, unsigned char *to)
  642.   	{
  643.   	int n,i;

crypto/bn/bn_lib.c:647:6: Call
  645.   
  646.   	bn_check_top(a);
  647.   	n=i=BN_num_bytes(a);
              ^
  648.   	while (i--)
  649.   		{

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, a->top] - 1):unsigned64 by call to `BN_bn2bin` 
    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]));
	}
['static int atalla_mod_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,\n\t\t\tconst BIGNUM *m, BN_CTX *ctx)\n\t{\n\tBIGNUM *modulus;\n\tBIGNUM *exponent;\n\tBIGNUM *argument;\n\tBIGNUM *result;\n\tRSAPrivateKey keydata;\n\tint to_return, numbytes;\n\tmodulus = exponent = argument = result = NULL;\n\tto_return = 0;\n\tif(!atalla_dso)\n\t\t{\n\t\tATALLAerr(ATALLA_F_ATALLA_MOD_EXP,ATALLA_R_NOT_LOADED);\n\t\tgoto err;\n\t\t}\n\tBN_CTX_start(ctx);\n\tmodulus = BN_CTX_get(ctx);\n\texponent = BN_CTX_get(ctx);\n\targument = BN_CTX_get(ctx);\n\tresult = BN_CTX_get(ctx);\n\tif (!result)\n\t\t{\n\t\tATALLAerr(ATALLA_F_ATALLA_MOD_EXP,ATALLA_R_BN_CTX_FULL);\n\t\tgoto err;\n\t\t}\n\tif(!bn_wexpand(modulus, m->top) || !bn_wexpand(exponent, m->top) ||\n\t   !bn_wexpand(argument, m->top) || !bn_wexpand(result, m->top))\n\t\t{\n\t\tATALLAerr(ATALLA_F_ATALLA_MOD_EXP,ATALLA_R_BN_EXPAND_FAIL);\n\t\tgoto err;\n\t\t}\n\tmemset(&keydata, 0,sizeof keydata);\n\tnumbytes = BN_num_bytes(m);\n\tmemset(exponent->d, 0, numbytes);\n\tmemset(modulus->d, 0, numbytes);\n\tBN_bn2bin(p, (unsigned char *)exponent->d + numbytes - BN_num_bytes(p));\n\tBN_bn2bin(m, (unsigned char *)modulus->d + numbytes - BN_num_bytes(m));\n\tkeydata.privateExponent.data = (unsigned char *)exponent->d;\n\tkeydata.privateExponent.len = numbytes;\n\tkeydata.modulus.data = (unsigned char *)modulus->d;\n\tkeydata.modulus.len = numbytes;\n\tmemset(argument->d, 0, numbytes);\n\tmemset(result->d, 0, numbytes);\n\tBN_bn2bin(a, (unsigned char *)argument->d + numbytes - BN_num_bytes(a));\n\tif(p_Atalla_RSAPrivateKeyOpFn(&keydata, (unsigned char *)result->d,\n\t\t\t(unsigned char *)argument->d,\n\t\t\tkeydata.modulus.len) != 0)\n\t\t{\n\t\tATALLAerr(ATALLA_F_ATALLA_MOD_EXP,ATALLA_R_REQUEST_FAILED);\n\t\tgoto err;\n\t\t}\n\tBN_bin2bn((unsigned char *)result->d, numbytes, r);\n\tto_return = 1;\nerr:\n\tBN_CTX_end(ctx);\n\treturn to_return;\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}', 'int BN_bn2bin(const BIGNUM *a, unsigned char *to)\n\t{\n\tint n,i;\n\tBN_ULONG l;\n\tbn_check_top(a);\n\tn=i=BN_num_bytes(a);\n\twhile (i--)\n\t\t{\n\t\tl=a->d[i/BN_BYTES];\n\t\t*(to++)=(unsigned char)(l>>(8*(i%BN_BYTES)))&0xff;\n\t\t}\n\treturn(n);\n\t}']