ssl/s3_lib.c:2877: error: INTEGER_OVERFLOW_L2
  ([0, `s->cert->dh_tmp->p->top`] - 1):unsigned64 by call to `ssl_set_cert_masks`.
Showing all 9 steps of the trace


ssl/s3_lib.c:2818:1: Parameter `s->cert->dh_tmp->p->top`
2816.   	}
2817.   
2818. > SSL_CIPHER *ssl3_choose_cipher(SSL *s, STACK_OF(SSL_CIPHER) *clnt,
2819.   	     STACK_OF(SSL_CIPHER) *srvr)
2820.   	{

ssl/s3_lib.c:2877:3: Call
2875.   		c=sk_SSL_CIPHER_value(prio,i);
2876.   
2877.   		ssl_set_cert_masks(cert,c);
          ^
2878.   		mask_k = cert->mask_k;
2879.   		mask_a = cert->mask_a;

ssl/ssl_lib.c:1754:1: Parameter `c->dh_tmp->p->top`
  1752.   	}
  1753.   
  1754. > void ssl_set_cert_masks(CERT *c, const SSL_CIPHER *cipher)
  1755.   	{
  1756.   	CERT_PKEY *cpk;

ssl/ssl_lib.c:1783:14: Call
  1781.   	dh_tmp=(c->dh_tmp != NULL || c->dh_tmp_cb != NULL);
  1782.   	dh_tmp_export=(c->dh_tmp_cb != NULL ||
  1783.   		(dh_tmp && DH_size(c->dh_tmp)*8 <= kl));
                       ^
  1784.   #else
  1785.   	dh_tmp=dh_tmp_export=0;

crypto/dh/dh_lib.c:244:1: Parameter `dh->p->top`
    242.   	}
    243.   
    244. > int DH_size(const DH *dh)
    245.   	{
    246.   	return(BN_num_bytes(dh->p));

crypto/dh/dh_lib.c:246:9: Call
    244.   int DH_size(const DH *dh)
    245.   	{
    246.   	return(BN_num_bytes(dh->p));
                   ^
    247.   	}

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, s->cert->dh_tmp->p->top] - 1):unsigned64 by call to `ssl_set_cert_masks` 
      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]));
	}
['SSL_CIPHER *ssl3_choose_cipher(SSL *s, STACK_OF(SSL_CIPHER) *clnt,\n\t     STACK_OF(SSL_CIPHER) *srvr)\n\t{\n\tSSL_CIPHER *c,*ret=NULL;\n\tSTACK_OF(SSL_CIPHER) *prio, *allow;\n\tint i,ii,ok;\n#ifndef OPENSSL_NO_TLSEXT\n\tunsigned int j;\n#ifndef OPENSSL_NO_EC\n\tint ec_ok, ec_nid;\n\tunsigned char ec_search1 = 0, ec_search2 = 0;\n#endif\n#endif\n\tCERT *cert;\n\tunsigned long alg_k,alg_a,mask_k,mask_a,emask_k,emask_a;\n\tcert=s->cert;\n#if 0\n\tsk_SSL_CIPHER_set_cmp_func(srvr, ssl_cipher_ptr_id_cmp);\n\tsk_SSL_CIPHER_set_cmp_func(clnt, ssl_cipher_ptr_id_cmp);\n#endif\n#ifdef CIPHER_DEBUG\n\tprintf("Server has %d from %p:\\n", sk_SSL_CIPHER_num(srvr), (void *)srvr);\n\tfor(i=0 ; i < sk_SSL_CIPHER_num(srvr) ; ++i)\n\t\t{\n\t\tc=sk_SSL_CIPHER_value(srvr,i);\n\t\tprintf("%p:%s\\n",(void *)c,c->name);\n\t\t}\n\tprintf("Client sent %d from %p:\\n", sk_SSL_CIPHER_num(clnt), (void *)clnt);\n\tfor(i=0 ; i < sk_SSL_CIPHER_num(clnt) ; ++i)\n\t    {\n\t    c=sk_SSL_CIPHER_value(clnt,i);\n\t    printf("%p:%s\\n",(void *)c,c->name);\n\t    }\n#endif\n\tif (s->options & SSL_OP_CIPHER_SERVER_PREFERENCE)\n\t\t{\n\t\tprio = srvr;\n\t\tallow = clnt;\n\t\t}\n\telse\n\t\t{\n\t\tprio = clnt;\n\t\tallow = srvr;\n\t\t}\n\tfor (i=0; i<sk_SSL_CIPHER_num(prio); i++)\n\t\t{\n\t\tc=sk_SSL_CIPHER_value(prio,i);\n\t\tssl_set_cert_masks(cert,c);\n\t\tmask_k = cert->mask_k;\n\t\tmask_a = cert->mask_a;\n\t\temask_k = cert->export_mask_k;\n\t\temask_a = cert->export_mask_a;\n#ifdef KSSL_DEBUG\n#endif\n\t\talg_k=c->algorithm_mkey;\n\t\talg_a=c->algorithm_auth;\n#ifndef OPENSSL_NO_KRB5\n\t\tif (alg_k & SSL_kKRB5)\n\t\t\t{\n\t\t\tif ( !kssl_keytab_is_available(s->kssl_ctx) )\n\t\t\t    continue;\n\t\t\t}\n#endif\n#ifndef OPENSSL_NO_PSK\n\t\tif ((alg_k & SSL_kPSK) && s->psk_server_callback == NULL)\n\t\t\tcontinue;\n#endif\n\t\tif (SSL_C_IS_EXPORT(c))\n\t\t\t{\n\t\t\tok = (alg_k & emask_k) && (alg_a & emask_a);\n#ifdef CIPHER_DEBUG\n\t\t\tprintf("%d:[%08lX:%08lX:%08lX:%08lX]%p:%s (export)\\n",ok,alg_k,alg_a,emask_k,emask_a,\n\t\t\t       (void *)c,c->name);\n#endif\n\t\t\t}\n\t\telse\n\t\t\t{\n\t\t\tok = (alg_k & mask_k) && (alg_a & mask_a);\n#ifdef CIPHER_DEBUG\n\t\t\tprintf("%d:[%08lX:%08lX:%08lX:%08lX]%p:%s\\n",ok,alg_k,alg_a,mask_k,mask_a,(void *)c,\n\t\t\t       c->name);\n#endif\n\t\t\t}\n#ifndef OPENSSL_NO_TLSEXT\n#ifndef OPENSSL_NO_EC\n\t\tif (\n\t\t\t(alg_a & SSL_aECDSA || alg_a & SSL_aECDH)\n\t\t\t&& (s->cert->pkeys[SSL_PKEY_ECC].x509 != NULL)\n\t\t\t&& ((s->session->tlsext_ecpointformatlist_length > 0) && (s->session->tlsext_ecpointformatlist != NULL))\n\t\t\t&& (\n\t\t\t\t(s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info != NULL)\n\t\t\t\t&& (s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info->key != NULL)\n\t\t\t\t&& (s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info->key->public_key != NULL)\n\t\t\t\t&& (s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info->key->public_key->data != NULL)\n\t\t\t\t&& (\n\t\t\t\t\t(*(s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info->key->public_key->data) == POINT_CONVERSION_COMPRESSED)\n\t\t\t\t\t|| (*(s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info->key->public_key->data) == POINT_CONVERSION_COMPRESSED + 1)\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t)\n\t\t\t{\n\t\t\tec_ok = 0;\n\t\t\tif (\n\t\t\t\t(s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec != NULL)\n\t\t\t\t&& (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group != NULL)\n\t\t\t\t&& (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group->meth != NULL)\n\t\t\t\t&& (EC_METHOD_get_field_type(s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group->meth) == NID_X9_62_prime_field)\n\t\t\t)\n\t\t\t\t{\n\t\t\t\tfor (j = 0; j < s->session->tlsext_ecpointformatlist_length; j++)\n\t\t\t\t\t{\n\t\t\t\t\tif (s->session->tlsext_ecpointformatlist[j] == TLSEXT_ECPOINTFORMAT_ansiX962_compressed_prime)\n\t\t\t\t\t\t{\n\t\t\t\t\t\tec_ok = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\telse if (EC_METHOD_get_field_type(s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group->meth) == NID_X9_62_characteristic_two_field)\n\t\t\t\t{\n\t\t\t\tfor (j = 0; j < s->session->tlsext_ecpointformatlist_length; j++)\n\t\t\t\t\t{\n\t\t\t\t\tif (s->session->tlsext_ecpointformatlist[j] == TLSEXT_ECPOINTFORMAT_ansiX962_compressed_char2)\n\t\t\t\t\t\t{\n\t\t\t\t\t\tec_ok = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tok = ok && ec_ok;\n\t\t\t}\n\t\tif (\n\t\t\t(alg_a & SSL_aECDSA || alg_a & SSL_aECDH)\n\t\t\t&& (s->cert->pkeys[SSL_PKEY_ECC].x509 != NULL)\n\t\t\t&& ((s->session->tlsext_ellipticcurvelist_length > 0) && (s->session->tlsext_ellipticcurvelist != NULL))\n\t\t)\n\t\t\t{\n\t\t\tec_ok = 0;\n\t\t\tif (\n\t\t\t\t(s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec != NULL)\n\t\t\t\t&& (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group != NULL)\n\t\t\t)\n\t\t\t\t{\n\t\t\t\tec_nid = EC_GROUP_get_curve_name(s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group);\n\t\t\t\tif ((ec_nid == 0)\n\t\t\t\t\t&& (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group->meth != NULL)\n\t\t\t\t)\n\t\t\t\t\t{\n\t\t\t\t\tif (EC_METHOD_get_field_type(s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group->meth) == NID_X9_62_prime_field)\n\t\t\t\t\t\t{\n\t\t\t\t\t\tec_search1 = 0xFF;\n\t\t\t\t\t\tec_search2 = 0x01;\n\t\t\t\t\t\t}\n\t\t\t\t\telse if (EC_METHOD_get_field_type(s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group->meth) == NID_X9_62_characteristic_two_field)\n\t\t\t\t\t\t{\n\t\t\t\t\t\tec_search1 = 0xFF;\n\t\t\t\t\t\tec_search2 = 0x02;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\tec_search1 = 0x00;\n\t\t\t\t\tec_search2 = tls1_ec_nid2curve_id(ec_nid);\n\t\t\t\t\t}\n\t\t\t\tif ((ec_search1 != 0) || (ec_search2 != 0))\n\t\t\t\t\t{\n\t\t\t\t\tfor (j = 0; j < s->session->tlsext_ellipticcurvelist_length / 2; j++)\n\t\t\t\t\t\t{\n\t\t\t\t\t\tif ((s->session->tlsext_ellipticcurvelist[2*j] == ec_search1) && (s->session->tlsext_ellipticcurvelist[2*j+1] == ec_search2))\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\tec_ok = 1;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tok = ok && ec_ok;\n\t\t\t}\n\t\tif (\n\t\t\t(alg_k & SSL_kEECDH)\n\t\t\t&& (s->cert->ecdh_tmp != NULL)\n\t\t\t&& ((s->session->tlsext_ellipticcurvelist_length > 0) && (s->session->tlsext_ellipticcurvelist != NULL))\n\t\t)\n\t\t\t{\n\t\t\tec_ok = 0;\n\t\t\tif (s->cert->ecdh_tmp->group != NULL)\n\t\t\t\t{\n\t\t\t\tec_nid = EC_GROUP_get_curve_name(s->cert->ecdh_tmp->group);\n\t\t\t\tif ((ec_nid == 0)\n\t\t\t\t\t&& (s->cert->ecdh_tmp->group->meth != NULL)\n\t\t\t\t)\n\t\t\t\t\t{\n\t\t\t\t\tif (EC_METHOD_get_field_type(s->cert->ecdh_tmp->group->meth) == NID_X9_62_prime_field)\n\t\t\t\t\t\t{\n\t\t\t\t\t\tec_search1 = 0xFF;\n\t\t\t\t\t\tec_search2 = 0x01;\n\t\t\t\t\t\t}\n\t\t\t\t\telse if (EC_METHOD_get_field_type(s->cert->ecdh_tmp->group->meth) == NID_X9_62_characteristic_two_field)\n\t\t\t\t\t\t{\n\t\t\t\t\t\tec_search1 = 0xFF;\n\t\t\t\t\t\tec_search2 = 0x02;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\tec_search1 = 0x00;\n\t\t\t\t\tec_search2 = tls1_ec_nid2curve_id(ec_nid);\n\t\t\t\t\t}\n\t\t\t\tif ((ec_search1 != 0) || (ec_search2 != 0))\n\t\t\t\t\t{\n\t\t\t\t\tfor (j = 0; j < s->session->tlsext_ellipticcurvelist_length / 2; j++)\n\t\t\t\t\t\t{\n\t\t\t\t\t\tif ((s->session->tlsext_ellipticcurvelist[2*j] == ec_search1) && (s->session->tlsext_ellipticcurvelist[2*j+1] == ec_search2))\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\tec_ok = 1;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tok = ok && ec_ok;\n\t\t\t}\n#endif\n#endif\n\t\tif (!ok) continue;\n\t\tii=sk_SSL_CIPHER_find(allow,c);\n\t\tif (ii >= 0)\n\t\t\t{\n\t\t\tret=sk_SSL_CIPHER_value(allow,ii);\n\t\t\tbreak;\n\t\t\t}\n\t\t}\n\treturn(ret);\n\t}', 'void ssl_set_cert_masks(CERT *c, const SSL_CIPHER *cipher)\n\t{\n\tCERT_PKEY *cpk;\n\tint rsa_enc,rsa_tmp,rsa_sign,dh_tmp,dh_rsa,dh_dsa,dsa_sign;\n\tint rsa_enc_export,dh_rsa_export,dh_dsa_export;\n\tint rsa_tmp_export,dh_tmp_export,kl;\n\tunsigned long mask_k,mask_a,emask_k,emask_a;\n\tint have_ecc_cert, ecdh_ok, ecdsa_ok, ecc_pkey_size;\n#ifndef OPENSSL_NO_ECDH\n\tint have_ecdh_tmp;\n#endif\n\tX509 *x = NULL;\n\tEVP_PKEY *ecc_pkey = NULL;\n\tint signature_nid = 0;\n\tif (c == NULL) return;\n\tkl=SSL_C_EXPORT_PKEYLENGTH(cipher);\n#ifndef OPENSSL_NO_RSA\n\trsa_tmp=(c->rsa_tmp != NULL || c->rsa_tmp_cb != NULL);\n\trsa_tmp_export=(c->rsa_tmp_cb != NULL ||\n\t\t(rsa_tmp && RSA_size(c->rsa_tmp)*8 <= kl));\n#else\n\trsa_tmp=rsa_tmp_export=0;\n#endif\n#ifndef OPENSSL_NO_DH\n\tdh_tmp=(c->dh_tmp != NULL || c->dh_tmp_cb != NULL);\n\tdh_tmp_export=(c->dh_tmp_cb != NULL ||\n\t\t(dh_tmp && DH_size(c->dh_tmp)*8 <= kl));\n#else\n\tdh_tmp=dh_tmp_export=0;\n#endif\n#ifndef OPENSSL_NO_ECDH\n\thave_ecdh_tmp=(c->ecdh_tmp != NULL || c->ecdh_tmp_cb != NULL);\n#endif\n\tcpk= &(c->pkeys[SSL_PKEY_RSA_ENC]);\n\trsa_enc= (cpk->x509 != NULL && cpk->privatekey != NULL);\n\trsa_enc_export=(rsa_enc && EVP_PKEY_size(cpk->privatekey)*8 <= kl);\n\tcpk= &(c->pkeys[SSL_PKEY_RSA_SIGN]);\n\trsa_sign=(cpk->x509 != NULL && cpk->privatekey != NULL);\n\tcpk= &(c->pkeys[SSL_PKEY_DSA_SIGN]);\n\tdsa_sign=(cpk->x509 != NULL && cpk->privatekey != NULL);\n\tcpk= &(c->pkeys[SSL_PKEY_DH_RSA]);\n\tdh_rsa=  (cpk->x509 != NULL && cpk->privatekey != NULL);\n\tdh_rsa_export=(dh_rsa && EVP_PKEY_size(cpk->privatekey)*8 <= kl);\n\tcpk= &(c->pkeys[SSL_PKEY_DH_DSA]);\n\tdh_dsa=  (cpk->x509 != NULL && cpk->privatekey != NULL);\n\tdh_dsa_export=(dh_dsa && EVP_PKEY_size(cpk->privatekey)*8 <= kl);\n\tcpk= &(c->pkeys[SSL_PKEY_ECC]);\n\thave_ecc_cert= (cpk->x509 != NULL && cpk->privatekey != NULL);\n\tmask_k=0;\n\tmask_a=0;\n\temask_k=0;\n\temask_a=0;\n#ifdef CIPHER_DEBUG\n\tprintf("rt=%d rte=%d dht=%d ecdht=%d re=%d ree=%d rs=%d ds=%d dhr=%d dhd=%d\\n",\n\t        rsa_tmp,rsa_tmp_export,dh_tmp,have_ecdh_tmp,\n\t\trsa_enc,rsa_enc_export,rsa_sign,dsa_sign,dh_rsa,dh_dsa);\n#endif\n\tcpk = &(c->pkeys[SSL_PKEY_GOST01]);\n\tif (cpk->x509 != NULL && cpk->privatekey !=NULL) {\n\t\tmask_k |= SSL_kGOST;\n\t\tmask_a |= SSL_aGOST01;\n\t}\n\tcpk = &(c->pkeys[SSL_PKEY_GOST94]);\n\tif (cpk->x509 != NULL && cpk->privatekey !=NULL) {\n\t\tmask_k |= SSL_kGOST;\n\t\tmask_a |= SSL_aGOST94;\n\t}\n\tif (rsa_enc || (rsa_tmp && rsa_sign))\n\t\tmask_k|=SSL_kRSA;\n\tif (rsa_enc_export || (rsa_tmp_export && (rsa_sign || rsa_enc)))\n\t\temask_k|=SSL_kRSA;\n#if 0\n\tif (\t(dh_tmp || dh_rsa || dh_dsa) &&\n\t\t(rsa_enc || rsa_sign || dsa_sign))\n\t\tmask_k|=SSL_kEDH;\n\tif ((dh_tmp_export || dh_rsa_export || dh_dsa_export) &&\n\t\t(rsa_enc || rsa_sign || dsa_sign))\n\t\temask_k|=SSL_kEDH;\n#endif\n\tif (dh_tmp_export)\n\t\temask_k|=SSL_kEDH;\n\tif (dh_tmp)\n\t\tmask_k|=SSL_kEDH;\n\tif (dh_rsa) mask_k|=SSL_kDHr;\n\tif (dh_rsa_export) emask_k|=SSL_kDHr;\n\tif (dh_dsa) mask_k|=SSL_kDHd;\n\tif (dh_dsa_export) emask_k|=SSL_kDHd;\n\tif (rsa_enc || rsa_sign)\n\t\t{\n\t\tmask_a|=SSL_aRSA;\n\t\temask_a|=SSL_aRSA;\n\t\t}\n\tif (dsa_sign)\n\t\t{\n\t\tmask_a|=SSL_aDSS;\n\t\temask_a|=SSL_aDSS;\n\t\t}\n\tmask_a|=SSL_aNULL;\n\temask_a|=SSL_aNULL;\n#ifndef OPENSSL_NO_KRB5\n\tmask_k|=SSL_kKRB5;\n\tmask_a|=SSL_aKRB5;\n\temask_k|=SSL_kKRB5;\n\temask_a|=SSL_aKRB5;\n#endif\n\tif (have_ecc_cert)\n\t\t{\n\t\tx = (c->pkeys[SSL_PKEY_ECC]).x509;\n\t\tX509_check_purpose(x, -1, 0);\n\t\tecdh_ok = (x->ex_flags & EXFLAG_KUSAGE) ?\n\t\t    (x->ex_kusage & X509v3_KU_KEY_AGREEMENT) : 1;\n\t\tecdsa_ok = (x->ex_flags & EXFLAG_KUSAGE) ?\n\t\t    (x->ex_kusage & X509v3_KU_DIGITAL_SIGNATURE) : 1;\n\t\tecc_pkey = X509_get_pubkey(x);\n\t\tecc_pkey_size = (ecc_pkey != NULL) ?\n\t\t    EVP_PKEY_bits(ecc_pkey) : 0;\n\t\tEVP_PKEY_free(ecc_pkey);\n\t\tif ((x->sig_alg) && (x->sig_alg->algorithm))\n\t\t\tsignature_nid = OBJ_obj2nid(x->sig_alg->algorithm);\n#ifndef OPENSSL_NO_ECDH\n\t\tif (ecdh_ok)\n\t\t\t{\n\t\t\tconst char *sig = OBJ_nid2ln(signature_nid);\n\t\t\tif (sig == NULL)\n\t\t\t\t{\n\t\t\t\tERR_clear_error();\n\t\t\t\tsig = "unknown";\n\t\t\t\t}\n\t\t\tif (strstr(sig, "WithRSA"))\n\t\t\t\t{\n\t\t\t\tmask_k|=SSL_kECDHr;\n\t\t\t\tmask_a|=SSL_aECDH;\n\t\t\t\tif (ecc_pkey_size <= 163)\n\t\t\t\t\t{\n\t\t\t\t\temask_k|=SSL_kECDHr;\n\t\t\t\t\temask_a|=SSL_aECDH;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tif (signature_nid == NID_ecdsa_with_SHA1)\n\t\t\t\t{\n\t\t\t\tmask_k|=SSL_kECDHe;\n\t\t\t\tmask_a|=SSL_aECDH;\n\t\t\t\tif (ecc_pkey_size <= 163)\n\t\t\t\t\t{\n\t\t\t\t\temask_k|=SSL_kECDHe;\n\t\t\t\t\temask_a|=SSL_aECDH;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n#endif\n#ifndef OPENSSL_NO_ECDSA\n\t\tif (ecdsa_ok)\n\t\t\t{\n\t\t\tmask_a|=SSL_aECDSA;\n\t\t\temask_a|=SSL_aECDSA;\n\t\t\t}\n#endif\n\t\t}\n#ifndef OPENSSL_NO_ECDH\n\tif (have_ecdh_tmp)\n\t\t{\n\t\tmask_k|=SSL_kEECDH;\n\t\temask_k|=SSL_kEECDH;\n\t\t}\n#endif\n#ifndef OPENSSL_NO_PSK\n\tmask_k |= SSL_kPSK;\n\tmask_a |= SSL_aPSK;\n\temask_k |= SSL_kPSK;\n\temask_a |= SSL_aPSK;\n#endif\n\tc->mask_k=mask_k;\n\tc->mask_a=mask_a;\n\tc->export_mask_k=emask_k;\n\tc->export_mask_a=emask_a;\n\tc->valid=1;\n\t}', 'int DH_size(const DH *dh)\n\t{\n\treturn(BN_num_bytes(dh->p));\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}']