aes_decrypt_init:
   60|    333|{
   61|    333|	u32 *rk;
   62|    333|	int res;
   63|    333|	rk = os_malloc(AES_PRIV_SIZE);
  ------------------
  |  |  505|    333|#define os_malloc(s) malloc((s))
  ------------------
   64|    333|	if (rk == NULL)
  ------------------
  |  Branch (64:6): [True: 0, False: 333]
  ------------------
   65|      0|		return NULL;
   66|    333|	res = rijndaelKeySetupDec(rk, key, len * 8);
   67|    333|	if (res < 0) {
  ------------------
  |  Branch (67:6): [True: 0, False: 333]
  ------------------
   68|      0|		os_free(rk);
  ------------------
  |  |  511|      0|#define os_free(p) free((p))
  ------------------
   69|      0|		return NULL;
   70|      0|	}
   71|    333|	rk[AES_PRIV_NR_POS] = res;
  ------------------
  |  |  121|    333|#define AES_PRIV_NR_POS (4 * 15)
  ------------------
   72|    333|	return rk;
   73|    333|}
aes_decrypt:
  152|  18.1k|{
  153|  18.1k|	u32 *rk = ctx;
  154|  18.1k|	rijndaelDecrypt(ctx, rk[AES_PRIV_NR_POS], crypt, plain);
  ------------------
  |  |  121|  18.1k|#define AES_PRIV_NR_POS (4 * 15)
  ------------------
  155|  18.1k|	return 0;
  156|  18.1k|}
aes_decrypt_deinit:
  160|    333|{
  161|    333|	os_memset(ctx, 0, AES_PRIV_SIZE);
  ------------------
  |  |  529|    333|#define os_memset(s, c, n) memset(s, c, n)
  ------------------
  162|    333|	os_free(ctx);
  ------------------
  |  |  511|    333|#define os_free(p) free((p))
  ------------------
  163|    333|}
aes-internal-dec.c:rijndaelKeySetupDec:
   29|    333|{
   30|    333|	int Nr, i, j;
   31|    333|	u32 temp;
   32|       |
   33|       |	/* expand the cipher key: */
   34|    333|	Nr = rijndaelKeySetupEnc(rk, cipherKey, keyBits);
   35|    333|	if (Nr < 0)
  ------------------
  |  Branch (35:6): [True: 0, False: 333]
  ------------------
   36|      0|		return Nr;
   37|       |	/* invert the order of the round keys: */
   38|  2.62k|	for (i = 0, j = 4*Nr; i < j; i += 4, j -= 4) {
  ------------------
  |  Branch (38:24): [True: 2.29k, False: 333]
  ------------------
   39|  2.29k|		temp = rk[i    ]; rk[i    ] = rk[j    ]; rk[j    ] = temp;
   40|  2.29k|		temp = rk[i + 1]; rk[i + 1] = rk[j + 1]; rk[j + 1] = temp;
   41|  2.29k|		temp = rk[i + 2]; rk[i + 2] = rk[j + 2]; rk[j + 2] = temp;
   42|  2.29k|		temp = rk[i + 3]; rk[i + 3] = rk[j + 3]; rk[j + 3] = temp;
   43|  2.29k|	}
   44|       |	/* apply the inverse MixColumn transform to all round keys but the
   45|       |	 * first and the last: */
   46|  4.58k|	for (i = 1; i < Nr; i++) {
  ------------------
  |  Branch (46:14): [True: 4.25k, False: 333]
  ------------------
   47|  4.25k|		rk += 4;
   48|  21.2k|		for (j = 0; j < 4; j++) {
  ------------------
  |  Branch (48:15): [True: 17.0k, False: 4.25k]
  ------------------
   49|  17.0k|			rk[j] = TD0_(TE4((rk[j] >> 24)       )) ^
  ------------------
  |  |  101|  17.0k|#define TD0_(i) Td0[(i) & 0xff]
  ------------------
   50|  17.0k|				TD1_(TE4((rk[j] >> 16) & 0xff)) ^
  ------------------
  |  |  102|  17.0k|#define TD1_(i) rotr(Td0[(i) & 0xff], 8)
  ------------------
   51|  17.0k|				TD2_(TE4((rk[j] >>  8) & 0xff)) ^
  ------------------
  |  |  103|  17.0k|#define TD2_(i) rotr(Td0[(i) & 0xff], 16)
  ------------------
   52|  17.0k|				TD3_(TE4((rk[j]      ) & 0xff));
  ------------------
  |  |  104|  17.0k|#define TD3_(i) rotr(Td0[(i) & 0xff], 24)
  ------------------
   53|  17.0k|		}
   54|  4.25k|	}
   55|       |
   56|    333|	return Nr;
   57|    333|}
aes-internal-dec.c:rijndaelDecrypt:
   77|  18.1k|{
   78|  18.1k|	u32 s0, s1, s2, s3, t0, t1, t2, t3;
   79|  18.1k|#ifndef FULL_UNROLL
   80|  18.1k|	int r;
   81|  18.1k|#endif /* ?FULL_UNROLL */
   82|       |
   83|       |	/*
   84|       |	 * map byte array block to cipher state
   85|       |	 * and add initial round key:
   86|       |	 */
   87|  18.1k|	s0 = GETU32(ct     ) ^ rk[0];
  ------------------
  |  |  113|  18.1k|#define GETU32(pt) (((u32)(pt)[0] << 24) ^ ((u32)(pt)[1] << 16) ^ \
  |  |  114|  18.1k|((u32)(pt)[2] <<  8) ^ ((u32)(pt)[3]))
  ------------------
   88|  18.1k|	s1 = GETU32(ct +  4) ^ rk[1];
  ------------------
  |  |  113|  18.1k|#define GETU32(pt) (((u32)(pt)[0] << 24) ^ ((u32)(pt)[1] << 16) ^ \
  |  |  114|  18.1k|((u32)(pt)[2] <<  8) ^ ((u32)(pt)[3]))
  ------------------
   89|  18.1k|	s2 = GETU32(ct +  8) ^ rk[2];
  ------------------
  |  |  113|  18.1k|#define GETU32(pt) (((u32)(pt)[0] << 24) ^ ((u32)(pt)[1] << 16) ^ \
  |  |  114|  18.1k|((u32)(pt)[2] <<  8) ^ ((u32)(pt)[3]))
  ------------------
   90|  18.1k|	s3 = GETU32(ct + 12) ^ rk[3];
  ------------------
  |  |  113|  18.1k|#define GETU32(pt) (((u32)(pt)[0] << 24) ^ ((u32)(pt)[1] << 16) ^ \
  |  |  114|  18.1k|((u32)(pt)[2] <<  8) ^ ((u32)(pt)[3]))
  ------------------
   91|       |
   92|  18.1k|#define ROUND(i,d,s) \
   93|  18.1k|d##0 = TD0(s##0) ^ TD1(s##3) ^ TD2(s##2) ^ TD3(s##1) ^ rk[4 * i]; \
   94|  18.1k|d##1 = TD0(s##1) ^ TD1(s##0) ^ TD2(s##3) ^ TD3(s##2) ^ rk[4 * i + 1]; \
   95|  18.1k|d##2 = TD0(s##2) ^ TD1(s##1) ^ TD2(s##0) ^ TD3(s##3) ^ rk[4 * i + 2]; \
   96|  18.1k|d##3 = TD0(s##3) ^ TD1(s##2) ^ TD2(s##1) ^ TD3(s##0) ^ rk[4 * i + 3]
   97|       |
   98|       |#ifdef FULL_UNROLL
   99|       |
  100|       |	ROUND(1,t,s);
  101|       |	ROUND(2,s,t);
  102|       |	ROUND(3,t,s);
  103|       |	ROUND(4,s,t);
  104|       |	ROUND(5,t,s);
  105|       |	ROUND(6,s,t);
  106|       |	ROUND(7,t,s);
  107|       |	ROUND(8,s,t);
  108|       |	ROUND(9,t,s);
  109|       |	if (Nr > 10) {
  110|       |		ROUND(10,s,t);
  111|       |		ROUND(11,t,s);
  112|       |		if (Nr > 12) {
  113|       |			ROUND(12,s,t);
  114|       |			ROUND(13,t,s);
  115|       |		}
  116|       |	}
  117|       |
  118|       |	rk += Nr << 2;
  119|       |
  120|       |#else  /* !FULL_UNROLL */
  121|       |
  122|       |	/* Nr - 1 full rounds: */
  123|  18.1k|	r = Nr >> 1;
  124|   126k|	for (;;) {
  125|   126k|		ROUND(1,t,s);
  ------------------
  |  |   92|   126k|#define ROUND(i,d,s) \
  |  |   93|   126k|d##0 = TD0(s##0) ^ TD1(s##3) ^ TD2(s##2) ^ TD3(s##1) ^ rk[4 * i]; \
  |  |  ------------------
  |  |  |  |   93|   126k|#define TD0(i) Td0[((i) >> 24) & 0xff]
  |  |  ------------------
  |  |               d##0 = TD0(s##0) ^ TD1(s##3) ^ TD2(s##2) ^ TD3(s##1) ^ rk[4 * i]; \
  |  |  ------------------
  |  |  |  |   94|   126k|#define TD1(i) rotr(Td0[((i) >> 16) & 0xff], 8)
  |  |  ------------------
  |  |               d##0 = TD0(s##0) ^ TD1(s##3) ^ TD2(s##2) ^ TD3(s##1) ^ rk[4 * i]; \
  |  |  ------------------
  |  |  |  |   95|   126k|#define TD2(i) rotr(Td0[((i) >> 8) & 0xff], 16)
  |  |  ------------------
  |  |               d##0 = TD0(s##0) ^ TD1(s##3) ^ TD2(s##2) ^ TD3(s##1) ^ rk[4 * i]; \
  |  |  ------------------
  |  |  |  |   96|   126k|#define TD3(i) rotr(Td0[(i) & 0xff], 24)
  |  |  ------------------
  |  |   94|   126k|d##1 = TD0(s##1) ^ TD1(s##0) ^ TD2(s##3) ^ TD3(s##2) ^ rk[4 * i + 1]; \
  |  |  ------------------
  |  |  |  |   93|   126k|#define TD0(i) Td0[((i) >> 24) & 0xff]
  |  |  ------------------
  |  |               d##1 = TD0(s##1) ^ TD1(s##0) ^ TD2(s##3) ^ TD3(s##2) ^ rk[4 * i + 1]; \
  |  |  ------------------
  |  |  |  |   94|   126k|#define TD1(i) rotr(Td0[((i) >> 16) & 0xff], 8)
  |  |  ------------------
  |  |               d##1 = TD0(s##1) ^ TD1(s##0) ^ TD2(s##3) ^ TD3(s##2) ^ rk[4 * i + 1]; \
  |  |  ------------------
  |  |  |  |   95|   126k|#define TD2(i) rotr(Td0[((i) >> 8) & 0xff], 16)
  |  |  ------------------
  |  |               d##1 = TD0(s##1) ^ TD1(s##0) ^ TD2(s##3) ^ TD3(s##2) ^ rk[4 * i + 1]; \
  |  |  ------------------
  |  |  |  |   96|   126k|#define TD3(i) rotr(Td0[(i) & 0xff], 24)
  |  |  ------------------
  |  |   95|   126k|d##2 = TD0(s##2) ^ TD1(s##1) ^ TD2(s##0) ^ TD3(s##3) ^ rk[4 * i + 2]; \
  |  |  ------------------
  |  |  |  |   93|   126k|#define TD0(i) Td0[((i) >> 24) & 0xff]
  |  |  ------------------
  |  |               d##2 = TD0(s##2) ^ TD1(s##1) ^ TD2(s##0) ^ TD3(s##3) ^ rk[4 * i + 2]; \
  |  |  ------------------
  |  |  |  |   94|   126k|#define TD1(i) rotr(Td0[((i) >> 16) & 0xff], 8)
  |  |  ------------------
  |  |               d##2 = TD0(s##2) ^ TD1(s##1) ^ TD2(s##0) ^ TD3(s##3) ^ rk[4 * i + 2]; \
  |  |  ------------------
  |  |  |  |   95|   126k|#define TD2(i) rotr(Td0[((i) >> 8) & 0xff], 16)
  |  |  ------------------
  |  |               d##2 = TD0(s##2) ^ TD1(s##1) ^ TD2(s##0) ^ TD3(s##3) ^ rk[4 * i + 2]; \
  |  |  ------------------
  |  |  |  |   96|   126k|#define TD3(i) rotr(Td0[(i) & 0xff], 24)
  |  |  ------------------
  |  |   96|   126k|d##3 = TD0(s##3) ^ TD1(s##2) ^ TD2(s##1) ^ TD3(s##0) ^ rk[4 * i + 3]
  |  |  ------------------
  |  |  |  |   93|   126k|#define TD0(i) Td0[((i) >> 24) & 0xff]
  |  |  ------------------
  |  |               d##3 = TD0(s##3) ^ TD1(s##2) ^ TD2(s##1) ^ TD3(s##0) ^ rk[4 * i + 3]
  |  |  ------------------
  |  |  |  |   94|   126k|#define TD1(i) rotr(Td0[((i) >> 16) & 0xff], 8)
  |  |  ------------------
  |  |               d##3 = TD0(s##3) ^ TD1(s##2) ^ TD2(s##1) ^ TD3(s##0) ^ rk[4 * i + 3]
  |  |  ------------------
  |  |  |  |   95|   126k|#define TD2(i) rotr(Td0[((i) >> 8) & 0xff], 16)
  |  |  ------------------
  |  |               d##3 = TD0(s##3) ^ TD1(s##2) ^ TD2(s##1) ^ TD3(s##0) ^ rk[4 * i + 3]
  |  |  ------------------
  |  |  |  |   96|   126k|#define TD3(i) rotr(Td0[(i) & 0xff], 24)
  |  |  ------------------
  ------------------
  126|   126k|		rk += 8;
  127|   126k|		if (--r == 0)
  ------------------
  |  Branch (127:7): [True: 18.1k, False: 108k]
  ------------------
  128|  18.1k|			break;
  129|   108k|		ROUND(0,s,t);
  ------------------
  |  |   92|   108k|#define ROUND(i,d,s) \
  |  |   93|   108k|d##0 = TD0(s##0) ^ TD1(s##3) ^ TD2(s##2) ^ TD3(s##1) ^ rk[4 * i]; \
  |  |  ------------------
  |  |  |  |   93|   108k|#define TD0(i) Td0[((i) >> 24) & 0xff]
  |  |  ------------------
  |  |               d##0 = TD0(s##0) ^ TD1(s##3) ^ TD2(s##2) ^ TD3(s##1) ^ rk[4 * i]; \
  |  |  ------------------
  |  |  |  |   94|   108k|#define TD1(i) rotr(Td0[((i) >> 16) & 0xff], 8)
  |  |  ------------------
  |  |               d##0 = TD0(s##0) ^ TD1(s##3) ^ TD2(s##2) ^ TD3(s##1) ^ rk[4 * i]; \
  |  |  ------------------
  |  |  |  |   95|   108k|#define TD2(i) rotr(Td0[((i) >> 8) & 0xff], 16)
  |  |  ------------------
  |  |               d##0 = TD0(s##0) ^ TD1(s##3) ^ TD2(s##2) ^ TD3(s##1) ^ rk[4 * i]; \
  |  |  ------------------
  |  |  |  |   96|   108k|#define TD3(i) rotr(Td0[(i) & 0xff], 24)
  |  |  ------------------
  |  |   94|   108k|d##1 = TD0(s##1) ^ TD1(s##0) ^ TD2(s##3) ^ TD3(s##2) ^ rk[4 * i + 1]; \
  |  |  ------------------
  |  |  |  |   93|   108k|#define TD0(i) Td0[((i) >> 24) & 0xff]
  |  |  ------------------
  |  |               d##1 = TD0(s##1) ^ TD1(s##0) ^ TD2(s##3) ^ TD3(s##2) ^ rk[4 * i + 1]; \
  |  |  ------------------
  |  |  |  |   94|   108k|#define TD1(i) rotr(Td0[((i) >> 16) & 0xff], 8)
  |  |  ------------------
  |  |               d##1 = TD0(s##1) ^ TD1(s##0) ^ TD2(s##3) ^ TD3(s##2) ^ rk[4 * i + 1]; \
  |  |  ------------------
  |  |  |  |   95|   108k|#define TD2(i) rotr(Td0[((i) >> 8) & 0xff], 16)
  |  |  ------------------
  |  |               d##1 = TD0(s##1) ^ TD1(s##0) ^ TD2(s##3) ^ TD3(s##2) ^ rk[4 * i + 1]; \
  |  |  ------------------
  |  |  |  |   96|   108k|#define TD3(i) rotr(Td0[(i) & 0xff], 24)
  |  |  ------------------
  |  |   95|   108k|d##2 = TD0(s##2) ^ TD1(s##1) ^ TD2(s##0) ^ TD3(s##3) ^ rk[4 * i + 2]; \
  |  |  ------------------
  |  |  |  |   93|   108k|#define TD0(i) Td0[((i) >> 24) & 0xff]
  |  |  ------------------
  |  |               d##2 = TD0(s##2) ^ TD1(s##1) ^ TD2(s##0) ^ TD3(s##3) ^ rk[4 * i + 2]; \
  |  |  ------------------
  |  |  |  |   94|   108k|#define TD1(i) rotr(Td0[((i) >> 16) & 0xff], 8)
  |  |  ------------------
  |  |               d##2 = TD0(s##2) ^ TD1(s##1) ^ TD2(s##0) ^ TD3(s##3) ^ rk[4 * i + 2]; \
  |  |  ------------------
  |  |  |  |   95|   108k|#define TD2(i) rotr(Td0[((i) >> 8) & 0xff], 16)
  |  |  ------------------
  |  |               d##2 = TD0(s##2) ^ TD1(s##1) ^ TD2(s##0) ^ TD3(s##3) ^ rk[4 * i + 2]; \
  |  |  ------------------
  |  |  |  |   96|   108k|#define TD3(i) rotr(Td0[(i) & 0xff], 24)
  |  |  ------------------
  |  |   96|   108k|d##3 = TD0(s##3) ^ TD1(s##2) ^ TD2(s##1) ^ TD3(s##0) ^ rk[4 * i + 3]
  |  |  ------------------
  |  |  |  |   93|   108k|#define TD0(i) Td0[((i) >> 24) & 0xff]
  |  |  ------------------
  |  |               d##3 = TD0(s##3) ^ TD1(s##2) ^ TD2(s##1) ^ TD3(s##0) ^ rk[4 * i + 3]
  |  |  ------------------
  |  |  |  |   94|   108k|#define TD1(i) rotr(Td0[((i) >> 16) & 0xff], 8)
  |  |  ------------------
  |  |               d##3 = TD0(s##3) ^ TD1(s##2) ^ TD2(s##1) ^ TD3(s##0) ^ rk[4 * i + 3]
  |  |  ------------------
  |  |  |  |   95|   108k|#define TD2(i) rotr(Td0[((i) >> 8) & 0xff], 16)
  |  |  ------------------
  |  |               d##3 = TD0(s##3) ^ TD1(s##2) ^ TD2(s##1) ^ TD3(s##0) ^ rk[4 * i + 3]
  |  |  ------------------
  |  |  |  |   96|   108k|#define TD3(i) rotr(Td0[(i) & 0xff], 24)
  |  |  ------------------
  ------------------
  130|   108k|	}
  131|       |
  132|  18.1k|#endif /* ?FULL_UNROLL */
  133|       |
  134|  18.1k|#undef ROUND
  135|       |
  136|       |	/*
  137|       |	 * apply last round and
  138|       |	 * map cipher state to byte array block:
  139|       |	 */
  140|  18.1k|	s0 = TD41(t0) ^ TD42(t3) ^ TD43(t2) ^ TD44(t1) ^ rk[0];
  ------------------
  |  |   97|  18.1k|#define TD41(i) ((u32) Td4s[((i) >> 24) & 0xff] << 24)
  ------------------
              	s0 = TD41(t0) ^ TD42(t3) ^ TD43(t2) ^ TD44(t1) ^ rk[0];
  ------------------
  |  |   98|  18.1k|#define TD42(i) ((u32) Td4s[((i) >> 16) & 0xff] << 16)
  ------------------
              	s0 = TD41(t0) ^ TD42(t3) ^ TD43(t2) ^ TD44(t1) ^ rk[0];
  ------------------
  |  |   99|  18.1k|#define TD43(i) ((u32) Td4s[((i) >> 8) & 0xff] << 8)
  ------------------
              	s0 = TD41(t0) ^ TD42(t3) ^ TD43(t2) ^ TD44(t1) ^ rk[0];
  ------------------
  |  |  100|  18.1k|#define TD44(i) ((u32) Td4s[(i) & 0xff])
  ------------------
  141|  18.1k|	PUTU32(pt     , s0);
  ------------------
  |  |  115|  18.1k|#define PUTU32(ct, st) { \
  |  |  116|  18.1k|(ct)[0] = (u8)((st) >> 24); (ct)[1] = (u8)((st) >> 16); \
  |  |  117|  18.1k|(ct)[2] = (u8)((st) >>  8); (ct)[3] = (u8)(st); }
  ------------------
  142|  18.1k|	s1 = TD41(t1) ^ TD42(t0) ^ TD43(t3) ^ TD44(t2) ^ rk[1];
  ------------------
  |  |   97|  18.1k|#define TD41(i) ((u32) Td4s[((i) >> 24) & 0xff] << 24)
  ------------------
              	s1 = TD41(t1) ^ TD42(t0) ^ TD43(t3) ^ TD44(t2) ^ rk[1];
  ------------------
  |  |   98|  18.1k|#define TD42(i) ((u32) Td4s[((i) >> 16) & 0xff] << 16)
  ------------------
              	s1 = TD41(t1) ^ TD42(t0) ^ TD43(t3) ^ TD44(t2) ^ rk[1];
  ------------------
  |  |   99|  18.1k|#define TD43(i) ((u32) Td4s[((i) >> 8) & 0xff] << 8)
  ------------------
              	s1 = TD41(t1) ^ TD42(t0) ^ TD43(t3) ^ TD44(t2) ^ rk[1];
  ------------------
  |  |  100|  18.1k|#define TD44(i) ((u32) Td4s[(i) & 0xff])
  ------------------
  143|  18.1k|	PUTU32(pt +  4, s1);
  ------------------
  |  |  115|  18.1k|#define PUTU32(ct, st) { \
  |  |  116|  18.1k|(ct)[0] = (u8)((st) >> 24); (ct)[1] = (u8)((st) >> 16); \
  |  |  117|  18.1k|(ct)[2] = (u8)((st) >>  8); (ct)[3] = (u8)(st); }
  ------------------
  144|  18.1k|	s2 = TD41(t2) ^ TD42(t1) ^ TD43(t0) ^ TD44(t3) ^ rk[2];
  ------------------
  |  |   97|  18.1k|#define TD41(i) ((u32) Td4s[((i) >> 24) & 0xff] << 24)
  ------------------
              	s2 = TD41(t2) ^ TD42(t1) ^ TD43(t0) ^ TD44(t3) ^ rk[2];
  ------------------
  |  |   98|  18.1k|#define TD42(i) ((u32) Td4s[((i) >> 16) & 0xff] << 16)
  ------------------
              	s2 = TD41(t2) ^ TD42(t1) ^ TD43(t0) ^ TD44(t3) ^ rk[2];
  ------------------
  |  |   99|  18.1k|#define TD43(i) ((u32) Td4s[((i) >> 8) & 0xff] << 8)
  ------------------
              	s2 = TD41(t2) ^ TD42(t1) ^ TD43(t0) ^ TD44(t3) ^ rk[2];
  ------------------
  |  |  100|  18.1k|#define TD44(i) ((u32) Td4s[(i) & 0xff])
  ------------------
  145|  18.1k|	PUTU32(pt +  8, s2);
  ------------------
  |  |  115|  18.1k|#define PUTU32(ct, st) { \
  |  |  116|  18.1k|(ct)[0] = (u8)((st) >> 24); (ct)[1] = (u8)((st) >> 16); \
  |  |  117|  18.1k|(ct)[2] = (u8)((st) >>  8); (ct)[3] = (u8)(st); }
  ------------------
  146|  18.1k|	s3 = TD41(t3) ^ TD42(t2) ^ TD43(t1) ^ TD44(t0) ^ rk[3];
  ------------------
  |  |   97|  18.1k|#define TD41(i) ((u32) Td4s[((i) >> 24) & 0xff] << 24)
  ------------------
              	s3 = TD41(t3) ^ TD42(t2) ^ TD43(t1) ^ TD44(t0) ^ rk[3];
  ------------------
  |  |   98|  18.1k|#define TD42(i) ((u32) Td4s[((i) >> 16) & 0xff] << 16)
  ------------------
              	s3 = TD41(t3) ^ TD42(t2) ^ TD43(t1) ^ TD44(t0) ^ rk[3];
  ------------------
  |  |   99|  18.1k|#define TD43(i) ((u32) Td4s[((i) >> 8) & 0xff] << 8)
  ------------------
              	s3 = TD41(t3) ^ TD42(t2) ^ TD43(t1) ^ TD44(t0) ^ rk[3];
  ------------------
  |  |  100|  18.1k|#define TD44(i) ((u32) Td4s[(i) & 0xff])
  ------------------
  147|  18.1k|	PUTU32(pt + 12, s3);
  ------------------
  |  |  115|  18.1k|#define PUTU32(ct, st) { \
  |  |  116|  18.1k|(ct)[0] = (u8)((st) >> 24); (ct)[1] = (u8)((st) >> 16); \
  |  |  117|  18.1k|(ct)[2] = (u8)((st) >>  8); (ct)[3] = (u8)(st); }
  ------------------
  148|  18.1k|}

aes_encrypt_init:
   99|    333|{
  100|    333|	u32 *rk;
  101|    333|	int res;
  102|       |
  103|    333|	if (TEST_FAIL())
  ------------------
  |  |  688|    333|#define TEST_FAIL() testing_test_fail(NULL, false)
  |  |  ------------------
  |  |  |  Branch (688:21): [True: 0, False: 333]
  |  |  ------------------
  ------------------
  104|      0|		return NULL;
  105|       |
  106|    333|	rk = os_malloc(AES_PRIV_SIZE);
  ------------------
  |  |  505|    333|#define os_malloc(s) malloc((s))
  ------------------
  107|    333|	if (rk == NULL)
  ------------------
  |  Branch (107:6): [True: 0, False: 333]
  ------------------
  108|      0|		return NULL;
  109|    333|	res = rijndaelKeySetupEnc(rk, key, len * 8);
  110|    333|	if (res < 0) {
  ------------------
  |  Branch (110:6): [True: 0, False: 333]
  ------------------
  111|      0|		os_free(rk);
  ------------------
  |  |  511|      0|#define os_free(p) free((p))
  ------------------
  112|      0|		return NULL;
  113|      0|	}
  114|    333|	rk[AES_PRIV_NR_POS] = res;
  ------------------
  |  |  121|    333|#define AES_PRIV_NR_POS (4 * 15)
  ------------------
  115|    333|	return rk;
  116|    333|}
aes_encrypt:
  120|    941|{
  121|    941|	u32 *rk = ctx;
  122|    941|	rijndaelEncrypt(ctx, rk[AES_PRIV_NR_POS], plain, crypt);
  ------------------
  |  |  121|    941|#define AES_PRIV_NR_POS (4 * 15)
  ------------------
  123|    941|	return 0;
  124|    941|}
aes_encrypt_deinit:
  128|    333|{
  129|    333|	os_memset(ctx, 0, AES_PRIV_SIZE);
  ------------------
  |  |  529|    333|#define os_memset(s, c, n) memset(s, c, n)
  ------------------
  130|    333|	os_free(ctx);
  ------------------
  |  |  511|    333|#define os_free(p) free((p))
  ------------------
  131|    333|}
aes-internal-enc.c:rijndaelEncrypt:
   24|    941|{
   25|    941|	u32 s0, s1, s2, s3, t0, t1, t2, t3;
   26|    941|#ifndef FULL_UNROLL
   27|    941|	int r;
   28|    941|#endif /* ?FULL_UNROLL */
   29|       |
   30|       |	/*
   31|       |	 * map byte array block to cipher state
   32|       |	 * and add initial round key:
   33|       |	 */
   34|    941|	s0 = GETU32(pt     ) ^ rk[0];
  ------------------
  |  |  113|    941|#define GETU32(pt) (((u32)(pt)[0] << 24) ^ ((u32)(pt)[1] << 16) ^ \
  |  |  114|    941|((u32)(pt)[2] <<  8) ^ ((u32)(pt)[3]))
  ------------------
   35|    941|	s1 = GETU32(pt +  4) ^ rk[1];
  ------------------
  |  |  113|    941|#define GETU32(pt) (((u32)(pt)[0] << 24) ^ ((u32)(pt)[1] << 16) ^ \
  |  |  114|    941|((u32)(pt)[2] <<  8) ^ ((u32)(pt)[3]))
  ------------------
   36|    941|	s2 = GETU32(pt +  8) ^ rk[2];
  ------------------
  |  |  113|    941|#define GETU32(pt) (((u32)(pt)[0] << 24) ^ ((u32)(pt)[1] << 16) ^ \
  |  |  114|    941|((u32)(pt)[2] <<  8) ^ ((u32)(pt)[3]))
  ------------------
   37|    941|	s3 = GETU32(pt + 12) ^ rk[3];
  ------------------
  |  |  113|    941|#define GETU32(pt) (((u32)(pt)[0] << 24) ^ ((u32)(pt)[1] << 16) ^ \
  |  |  114|    941|((u32)(pt)[2] <<  8) ^ ((u32)(pt)[3]))
  ------------------
   38|       |
   39|    941|#define ROUND(i,d,s) \
   40|    941|d##0 = TE0(s##0) ^ TE1(s##1) ^ TE2(s##2) ^ TE3(s##3) ^ rk[4 * i]; \
   41|    941|d##1 = TE0(s##1) ^ TE1(s##2) ^ TE2(s##3) ^ TE3(s##0) ^ rk[4 * i + 1]; \
   42|    941|d##2 = TE0(s##2) ^ TE1(s##3) ^ TE2(s##0) ^ TE3(s##1) ^ rk[4 * i + 2]; \
   43|    941|d##3 = TE0(s##3) ^ TE1(s##0) ^ TE2(s##1) ^ TE3(s##2) ^ rk[4 * i + 3]
   44|       |
   45|       |#ifdef FULL_UNROLL
   46|       |
   47|       |	ROUND(1,t,s);
   48|       |	ROUND(2,s,t);
   49|       |	ROUND(3,t,s);
   50|       |	ROUND(4,s,t);
   51|       |	ROUND(5,t,s);
   52|       |	ROUND(6,s,t);
   53|       |	ROUND(7,t,s);
   54|       |	ROUND(8,s,t);
   55|       |	ROUND(9,t,s);
   56|       |	if (Nr > 10) {
   57|       |		ROUND(10,s,t);
   58|       |		ROUND(11,t,s);
   59|       |		if (Nr > 12) {
   60|       |			ROUND(12,s,t);
   61|       |			ROUND(13,t,s);
   62|       |		}
   63|       |	}
   64|       |
   65|       |	rk += Nr << 2;
   66|       |
   67|       |#else  /* !FULL_UNROLL */
   68|       |
   69|       |	/* Nr - 1 full rounds: */
   70|    941|	r = Nr >> 1;
   71|  6.48k|	for (;;) {
   72|  6.48k|		ROUND(1,t,s);
  ------------------
  |  |   39|  6.48k|#define ROUND(i,d,s) \
  |  |   40|  6.48k|d##0 = TE0(s##0) ^ TE1(s##1) ^ TE2(s##2) ^ TE3(s##3) ^ rk[4 * i]; \
  |  |  ------------------
  |  |  |  |   75|  6.48k|#define TE0(i) Te0[((i) >> 24) & 0xff]
  |  |  ------------------
  |  |               d##0 = TE0(s##0) ^ TE1(s##1) ^ TE2(s##2) ^ TE3(s##3) ^ rk[4 * i]; \
  |  |  ------------------
  |  |  |  |   76|  6.48k|#define TE1(i) rotr(Te0[((i) >> 16) & 0xff], 8)
  |  |  ------------------
  |  |               d##0 = TE0(s##0) ^ TE1(s##1) ^ TE2(s##2) ^ TE3(s##3) ^ rk[4 * i]; \
  |  |  ------------------
  |  |  |  |   77|  6.48k|#define TE2(i) rotr(Te0[((i) >> 8) & 0xff], 16)
  |  |  ------------------
  |  |               d##0 = TE0(s##0) ^ TE1(s##1) ^ TE2(s##2) ^ TE3(s##3) ^ rk[4 * i]; \
  |  |  ------------------
  |  |  |  |   78|  6.48k|#define TE3(i) rotr(Te0[(i) & 0xff], 24)
  |  |  ------------------
  |  |   41|  6.48k|d##1 = TE0(s##1) ^ TE1(s##2) ^ TE2(s##3) ^ TE3(s##0) ^ rk[4 * i + 1]; \
  |  |  ------------------
  |  |  |  |   75|  6.48k|#define TE0(i) Te0[((i) >> 24) & 0xff]
  |  |  ------------------
  |  |               d##1 = TE0(s##1) ^ TE1(s##2) ^ TE2(s##3) ^ TE3(s##0) ^ rk[4 * i + 1]; \
  |  |  ------------------
  |  |  |  |   76|  6.48k|#define TE1(i) rotr(Te0[((i) >> 16) & 0xff], 8)
  |  |  ------------------
  |  |               d##1 = TE0(s##1) ^ TE1(s##2) ^ TE2(s##3) ^ TE3(s##0) ^ rk[4 * i + 1]; \
  |  |  ------------------
  |  |  |  |   77|  6.48k|#define TE2(i) rotr(Te0[((i) >> 8) & 0xff], 16)
  |  |  ------------------
  |  |               d##1 = TE0(s##1) ^ TE1(s##2) ^ TE2(s##3) ^ TE3(s##0) ^ rk[4 * i + 1]; \
  |  |  ------------------
  |  |  |  |   78|  6.48k|#define TE3(i) rotr(Te0[(i) & 0xff], 24)
  |  |  ------------------
  |  |   42|  6.48k|d##2 = TE0(s##2) ^ TE1(s##3) ^ TE2(s##0) ^ TE3(s##1) ^ rk[4 * i + 2]; \
  |  |  ------------------
  |  |  |  |   75|  6.48k|#define TE0(i) Te0[((i) >> 24) & 0xff]
  |  |  ------------------
  |  |               d##2 = TE0(s##2) ^ TE1(s##3) ^ TE2(s##0) ^ TE3(s##1) ^ rk[4 * i + 2]; \
  |  |  ------------------
  |  |  |  |   76|  6.48k|#define TE1(i) rotr(Te0[((i) >> 16) & 0xff], 8)
  |  |  ------------------
  |  |               d##2 = TE0(s##2) ^ TE1(s##3) ^ TE2(s##0) ^ TE3(s##1) ^ rk[4 * i + 2]; \
  |  |  ------------------
  |  |  |  |   77|  6.48k|#define TE2(i) rotr(Te0[((i) >> 8) & 0xff], 16)
  |  |  ------------------
  |  |               d##2 = TE0(s##2) ^ TE1(s##3) ^ TE2(s##0) ^ TE3(s##1) ^ rk[4 * i + 2]; \
  |  |  ------------------
  |  |  |  |   78|  6.48k|#define TE3(i) rotr(Te0[(i) & 0xff], 24)
  |  |  ------------------
  |  |   43|  6.48k|d##3 = TE0(s##3) ^ TE1(s##0) ^ TE2(s##1) ^ TE3(s##2) ^ rk[4 * i + 3]
  |  |  ------------------
  |  |  |  |   75|  6.48k|#define TE0(i) Te0[((i) >> 24) & 0xff]
  |  |  ------------------
  |  |               d##3 = TE0(s##3) ^ TE1(s##0) ^ TE2(s##1) ^ TE3(s##2) ^ rk[4 * i + 3]
  |  |  ------------------
  |  |  |  |   76|  6.48k|#define TE1(i) rotr(Te0[((i) >> 16) & 0xff], 8)
  |  |  ------------------
  |  |               d##3 = TE0(s##3) ^ TE1(s##0) ^ TE2(s##1) ^ TE3(s##2) ^ rk[4 * i + 3]
  |  |  ------------------
  |  |  |  |   77|  6.48k|#define TE2(i) rotr(Te0[((i) >> 8) & 0xff], 16)
  |  |  ------------------
  |  |               d##3 = TE0(s##3) ^ TE1(s##0) ^ TE2(s##1) ^ TE3(s##2) ^ rk[4 * i + 3]
  |  |  ------------------
  |  |  |  |   78|  6.48k|#define TE3(i) rotr(Te0[(i) & 0xff], 24)
  |  |  ------------------
  ------------------
   73|  6.48k|		rk += 8;
   74|  6.48k|		if (--r == 0)
  ------------------
  |  Branch (74:7): [True: 941, False: 5.54k]
  ------------------
   75|    941|			break;
   76|  5.54k|		ROUND(0,s,t);
  ------------------
  |  |   39|  5.54k|#define ROUND(i,d,s) \
  |  |   40|  5.54k|d##0 = TE0(s##0) ^ TE1(s##1) ^ TE2(s##2) ^ TE3(s##3) ^ rk[4 * i]; \
  |  |  ------------------
  |  |  |  |   75|  5.54k|#define TE0(i) Te0[((i) >> 24) & 0xff]
  |  |  ------------------
  |  |               d##0 = TE0(s##0) ^ TE1(s##1) ^ TE2(s##2) ^ TE3(s##3) ^ rk[4 * i]; \
  |  |  ------------------
  |  |  |  |   76|  5.54k|#define TE1(i) rotr(Te0[((i) >> 16) & 0xff], 8)
  |  |  ------------------
  |  |               d##0 = TE0(s##0) ^ TE1(s##1) ^ TE2(s##2) ^ TE3(s##3) ^ rk[4 * i]; \
  |  |  ------------------
  |  |  |  |   77|  5.54k|#define TE2(i) rotr(Te0[((i) >> 8) & 0xff], 16)
  |  |  ------------------
  |  |               d##0 = TE0(s##0) ^ TE1(s##1) ^ TE2(s##2) ^ TE3(s##3) ^ rk[4 * i]; \
  |  |  ------------------
  |  |  |  |   78|  5.54k|#define TE3(i) rotr(Te0[(i) & 0xff], 24)
  |  |  ------------------
  |  |   41|  5.54k|d##1 = TE0(s##1) ^ TE1(s##2) ^ TE2(s##3) ^ TE3(s##0) ^ rk[4 * i + 1]; \
  |  |  ------------------
  |  |  |  |   75|  5.54k|#define TE0(i) Te0[((i) >> 24) & 0xff]
  |  |  ------------------
  |  |               d##1 = TE0(s##1) ^ TE1(s##2) ^ TE2(s##3) ^ TE3(s##0) ^ rk[4 * i + 1]; \
  |  |  ------------------
  |  |  |  |   76|  5.54k|#define TE1(i) rotr(Te0[((i) >> 16) & 0xff], 8)
  |  |  ------------------
  |  |               d##1 = TE0(s##1) ^ TE1(s##2) ^ TE2(s##3) ^ TE3(s##0) ^ rk[4 * i + 1]; \
  |  |  ------------------
  |  |  |  |   77|  5.54k|#define TE2(i) rotr(Te0[((i) >> 8) & 0xff], 16)
  |  |  ------------------
  |  |               d##1 = TE0(s##1) ^ TE1(s##2) ^ TE2(s##3) ^ TE3(s##0) ^ rk[4 * i + 1]; \
  |  |  ------------------
  |  |  |  |   78|  5.54k|#define TE3(i) rotr(Te0[(i) & 0xff], 24)
  |  |  ------------------
  |  |   42|  5.54k|d##2 = TE0(s##2) ^ TE1(s##3) ^ TE2(s##0) ^ TE3(s##1) ^ rk[4 * i + 2]; \
  |  |  ------------------
  |  |  |  |   75|  5.54k|#define TE0(i) Te0[((i) >> 24) & 0xff]
  |  |  ------------------
  |  |               d##2 = TE0(s##2) ^ TE1(s##3) ^ TE2(s##0) ^ TE3(s##1) ^ rk[4 * i + 2]; \
  |  |  ------------------
  |  |  |  |   76|  5.54k|#define TE1(i) rotr(Te0[((i) >> 16) & 0xff], 8)
  |  |  ------------------
  |  |               d##2 = TE0(s##2) ^ TE1(s##3) ^ TE2(s##0) ^ TE3(s##1) ^ rk[4 * i + 2]; \
  |  |  ------------------
  |  |  |  |   77|  5.54k|#define TE2(i) rotr(Te0[((i) >> 8) & 0xff], 16)
  |  |  ------------------
  |  |               d##2 = TE0(s##2) ^ TE1(s##3) ^ TE2(s##0) ^ TE3(s##1) ^ rk[4 * i + 2]; \
  |  |  ------------------
  |  |  |  |   78|  5.54k|#define TE3(i) rotr(Te0[(i) & 0xff], 24)
  |  |  ------------------
  |  |   43|  5.54k|d##3 = TE0(s##3) ^ TE1(s##0) ^ TE2(s##1) ^ TE3(s##2) ^ rk[4 * i + 3]
  |  |  ------------------
  |  |  |  |   75|  5.54k|#define TE0(i) Te0[((i) >> 24) & 0xff]
  |  |  ------------------
  |  |               d##3 = TE0(s##3) ^ TE1(s##0) ^ TE2(s##1) ^ TE3(s##2) ^ rk[4 * i + 3]
  |  |  ------------------
  |  |  |  |   76|  5.54k|#define TE1(i) rotr(Te0[((i) >> 16) & 0xff], 8)
  |  |  ------------------
  |  |               d##3 = TE0(s##3) ^ TE1(s##0) ^ TE2(s##1) ^ TE3(s##2) ^ rk[4 * i + 3]
  |  |  ------------------
  |  |  |  |   77|  5.54k|#define TE2(i) rotr(Te0[((i) >> 8) & 0xff], 16)
  |  |  ------------------
  |  |               d##3 = TE0(s##3) ^ TE1(s##0) ^ TE2(s##1) ^ TE3(s##2) ^ rk[4 * i + 3]
  |  |  ------------------
  |  |  |  |   78|  5.54k|#define TE3(i) rotr(Te0[(i) & 0xff], 24)
  |  |  ------------------
  ------------------
   77|  5.54k|	}
   78|       |
   79|    941|#endif /* ?FULL_UNROLL */
   80|       |
   81|    941|#undef ROUND
   82|       |
   83|       |	/*
   84|       |	 * apply last round and
   85|       |	 * map cipher state to byte array block:
   86|       |	 */
   87|    941|	s0 = TE41(t0) ^ TE42(t1) ^ TE43(t2) ^ TE44(t3) ^ rk[0];
  ------------------
  |  |   79|    941|#define TE41(i) ((Te0[((i) >> 24) & 0xff] << 8) & 0xff000000)
  ------------------
              	s0 = TE41(t0) ^ TE42(t1) ^ TE43(t2) ^ TE44(t3) ^ rk[0];
  ------------------
  |  |   80|    941|#define TE42(i) (Te0[((i) >> 16) & 0xff] & 0x00ff0000)
  ------------------
              	s0 = TE41(t0) ^ TE42(t1) ^ TE43(t2) ^ TE44(t3) ^ rk[0];
  ------------------
  |  |   81|    941|#define TE43(i) (Te0[((i) >> 8) & 0xff] & 0x0000ff00)
  ------------------
              	s0 = TE41(t0) ^ TE42(t1) ^ TE43(t2) ^ TE44(t3) ^ rk[0];
  ------------------
  |  |   82|    941|#define TE44(i) ((Te0[(i) & 0xff] >> 8) & 0x000000ff)
  ------------------
   88|    941|	PUTU32(ct     , s0);
  ------------------
  |  |  115|    941|#define PUTU32(ct, st) { \
  |  |  116|    941|(ct)[0] = (u8)((st) >> 24); (ct)[1] = (u8)((st) >> 16); \
  |  |  117|    941|(ct)[2] = (u8)((st) >>  8); (ct)[3] = (u8)(st); }
  ------------------
   89|    941|	s1 = TE41(t1) ^ TE42(t2) ^ TE43(t3) ^ TE44(t0) ^ rk[1];
  ------------------
  |  |   79|    941|#define TE41(i) ((Te0[((i) >> 24) & 0xff] << 8) & 0xff000000)
  ------------------
              	s1 = TE41(t1) ^ TE42(t2) ^ TE43(t3) ^ TE44(t0) ^ rk[1];
  ------------------
  |  |   80|    941|#define TE42(i) (Te0[((i) >> 16) & 0xff] & 0x00ff0000)
  ------------------
              	s1 = TE41(t1) ^ TE42(t2) ^ TE43(t3) ^ TE44(t0) ^ rk[1];
  ------------------
  |  |   81|    941|#define TE43(i) (Te0[((i) >> 8) & 0xff] & 0x0000ff00)
  ------------------
              	s1 = TE41(t1) ^ TE42(t2) ^ TE43(t3) ^ TE44(t0) ^ rk[1];
  ------------------
  |  |   82|    941|#define TE44(i) ((Te0[(i) & 0xff] >> 8) & 0x000000ff)
  ------------------
   90|    941|	PUTU32(ct +  4, s1);
  ------------------
  |  |  115|    941|#define PUTU32(ct, st) { \
  |  |  116|    941|(ct)[0] = (u8)((st) >> 24); (ct)[1] = (u8)((st) >> 16); \
  |  |  117|    941|(ct)[2] = (u8)((st) >>  8); (ct)[3] = (u8)(st); }
  ------------------
   91|    941|	s2 = TE41(t2) ^ TE42(t3) ^ TE43(t0) ^ TE44(t1) ^ rk[2];
  ------------------
  |  |   79|    941|#define TE41(i) ((Te0[((i) >> 24) & 0xff] << 8) & 0xff000000)
  ------------------
              	s2 = TE41(t2) ^ TE42(t3) ^ TE43(t0) ^ TE44(t1) ^ rk[2];
  ------------------
  |  |   80|    941|#define TE42(i) (Te0[((i) >> 16) & 0xff] & 0x00ff0000)
  ------------------
              	s2 = TE41(t2) ^ TE42(t3) ^ TE43(t0) ^ TE44(t1) ^ rk[2];
  ------------------
  |  |   81|    941|#define TE43(i) (Te0[((i) >> 8) & 0xff] & 0x0000ff00)
  ------------------
              	s2 = TE41(t2) ^ TE42(t3) ^ TE43(t0) ^ TE44(t1) ^ rk[2];
  ------------------
  |  |   82|    941|#define TE44(i) ((Te0[(i) & 0xff] >> 8) & 0x000000ff)
  ------------------
   92|    941|	PUTU32(ct +  8, s2);
  ------------------
  |  |  115|    941|#define PUTU32(ct, st) { \
  |  |  116|    941|(ct)[0] = (u8)((st) >> 24); (ct)[1] = (u8)((st) >> 16); \
  |  |  117|    941|(ct)[2] = (u8)((st) >>  8); (ct)[3] = (u8)(st); }
  ------------------
   93|    941|	s3 = TE41(t3) ^ TE42(t0) ^ TE43(t1) ^ TE44(t2) ^ rk[3];
  ------------------
  |  |   79|    941|#define TE41(i) ((Te0[((i) >> 24) & 0xff] << 8) & 0xff000000)
  ------------------
              	s3 = TE41(t3) ^ TE42(t0) ^ TE43(t1) ^ TE44(t2) ^ rk[3];
  ------------------
  |  |   80|    941|#define TE42(i) (Te0[((i) >> 16) & 0xff] & 0x00ff0000)
  ------------------
              	s3 = TE41(t3) ^ TE42(t0) ^ TE43(t1) ^ TE44(t2) ^ rk[3];
  ------------------
  |  |   81|    941|#define TE43(i) (Te0[((i) >> 8) & 0xff] & 0x0000ff00)
  ------------------
              	s3 = TE41(t3) ^ TE42(t0) ^ TE43(t1) ^ TE44(t2) ^ rk[3];
  ------------------
  |  |   82|    941|#define TE44(i) ((Te0[(i) & 0xff] >> 8) & 0x000000ff)
  ------------------
   94|    941|	PUTU32(ct + 12, s3);
  ------------------
  |  |  115|    941|#define PUTU32(ct, st) { \
  |  |  116|    941|(ct)[0] = (u8)((st) >> 24); (ct)[1] = (u8)((st) >> 16); \
  |  |  117|    941|(ct)[2] = (u8)((st) >>  8); (ct)[3] = (u8)(st); }
  ------------------
   95|    941|}

rijndaelKeySetupEnc:
  780|    666|{
  781|    666|	int i;
  782|    666|	u32 temp;
  783|       |
  784|    666|	rk[0] = GETU32(cipherKey     );
  ------------------
  |  |  113|    666|#define GETU32(pt) (((u32)(pt)[0] << 24) ^ ((u32)(pt)[1] << 16) ^ \
  |  |  114|    666|((u32)(pt)[2] <<  8) ^ ((u32)(pt)[3]))
  ------------------
  785|    666|	rk[1] = GETU32(cipherKey +  4);
  ------------------
  |  |  113|    666|#define GETU32(pt) (((u32)(pt)[0] << 24) ^ ((u32)(pt)[1] << 16) ^ \
  |  |  114|    666|((u32)(pt)[2] <<  8) ^ ((u32)(pt)[3]))
  ------------------
  786|    666|	rk[2] = GETU32(cipherKey +  8);
  ------------------
  |  |  113|    666|#define GETU32(pt) (((u32)(pt)[0] << 24) ^ ((u32)(pt)[1] << 16) ^ \
  |  |  114|    666|((u32)(pt)[2] <<  8) ^ ((u32)(pt)[3]))
  ------------------
  787|    666|	rk[3] = GETU32(cipherKey + 12);
  ------------------
  |  |  113|    666|#define GETU32(pt) (((u32)(pt)[0] << 24) ^ ((u32)(pt)[1] << 16) ^ \
  |  |  114|    666|((u32)(pt)[2] <<  8) ^ ((u32)(pt)[3]))
  ------------------
  788|       |
  789|    666|	if (keyBits == 128) {
  ------------------
  |  Branch (789:6): [True: 38, False: 628]
  ------------------
  790|    418|		for (i = 0; i < 10; i++) {
  ------------------
  |  Branch (790:15): [True: 380, False: 38]
  ------------------
  791|    380|			temp  = rk[3];
  792|    380|			rk[4] = rk[0] ^ TE421(temp) ^ TE432(temp) ^
  ------------------
  |  |   83|    380|#define TE421(i) ((Te0[((i) >> 16) & 0xff] << 8) & 0xff000000)
  ------------------
              			rk[4] = rk[0] ^ TE421(temp) ^ TE432(temp) ^
  ------------------
  |  |   84|    380|#define TE432(i) (Te0[((i) >> 8) & 0xff] & 0x00ff0000)
  ------------------
  793|    380|				TE443(temp) ^ TE414(temp) ^ RCON(i);
  ------------------
  |  |   85|    380|#define TE443(i) (Te0[(i) & 0xff] & 0x0000ff00)
  ------------------
              				TE443(temp) ^ TE414(temp) ^ RCON(i);
  ------------------
  |  |   86|    380|#define TE414(i) ((Te0[((i) >> 24) & 0xff] >> 8) & 0x000000ff)
  ------------------
              				TE443(temp) ^ TE414(temp) ^ RCON(i);
  ------------------
  |  |   68|    380|#define RCON(i) ((u32) rcons[(i)] << 24)
  ------------------
  794|    380|			rk[5] = rk[1] ^ rk[4];
  795|    380|			rk[6] = rk[2] ^ rk[5];
  796|    380|			rk[7] = rk[3] ^ rk[6];
  797|    380|			rk += 4;
  798|    380|		}
  799|     38|		return 10;
  800|     38|	}
  801|       |
  802|    628|	rk[4] = GETU32(cipherKey + 16);
  ------------------
  |  |  113|    628|#define GETU32(pt) (((u32)(pt)[0] << 24) ^ ((u32)(pt)[1] << 16) ^ \
  |  |  114|    628|((u32)(pt)[2] <<  8) ^ ((u32)(pt)[3]))
  ------------------
  803|    628|	rk[5] = GETU32(cipherKey + 20);
  ------------------
  |  |  113|    628|#define GETU32(pt) (((u32)(pt)[0] << 24) ^ ((u32)(pt)[1] << 16) ^ \
  |  |  114|    628|((u32)(pt)[2] <<  8) ^ ((u32)(pt)[3]))
  ------------------
  804|       |
  805|    628|	if (keyBits == 192) {
  ------------------
  |  Branch (805:6): [True: 0, False: 628]
  ------------------
  806|      0|		for (i = 0; i < 8; i++) {
  ------------------
  |  Branch (806:15): [True: 0, False: 0]
  ------------------
  807|      0|			temp  = rk[5];
  808|      0|			rk[6] = rk[0] ^ TE421(temp) ^ TE432(temp) ^
  ------------------
  |  |   83|      0|#define TE421(i) ((Te0[((i) >> 16) & 0xff] << 8) & 0xff000000)
  ------------------
              			rk[6] = rk[0] ^ TE421(temp) ^ TE432(temp) ^
  ------------------
  |  |   84|      0|#define TE432(i) (Te0[((i) >> 8) & 0xff] & 0x00ff0000)
  ------------------
  809|      0|				TE443(temp) ^ TE414(temp) ^ RCON(i);
  ------------------
  |  |   85|      0|#define TE443(i) (Te0[(i) & 0xff] & 0x0000ff00)
  ------------------
              				TE443(temp) ^ TE414(temp) ^ RCON(i);
  ------------------
  |  |   86|      0|#define TE414(i) ((Te0[((i) >> 24) & 0xff] >> 8) & 0x000000ff)
  ------------------
              				TE443(temp) ^ TE414(temp) ^ RCON(i);
  ------------------
  |  |   68|      0|#define RCON(i) ((u32) rcons[(i)] << 24)
  ------------------
  810|      0|			rk[7] = rk[1] ^ rk[6];
  811|      0|			rk[8] = rk[2] ^ rk[7];
  812|      0|			rk[9] = rk[3] ^ rk[8];
  813|      0|			if (i == 7)
  ------------------
  |  Branch (813:8): [True: 0, False: 0]
  ------------------
  814|      0|				return 12;
  815|      0|			rk[10] = rk[4] ^ rk[9];
  816|      0|			rk[11] = rk[5] ^ rk[10];
  817|      0|			rk += 6;
  818|      0|		}
  819|      0|	}
  820|       |
  821|    628|	rk[6] = GETU32(cipherKey + 24);
  ------------------
  |  |  113|    628|#define GETU32(pt) (((u32)(pt)[0] << 24) ^ ((u32)(pt)[1] << 16) ^ \
  |  |  114|    628|((u32)(pt)[2] <<  8) ^ ((u32)(pt)[3]))
  ------------------
  822|    628|	rk[7] = GETU32(cipherKey + 28);
  ------------------
  |  |  113|    628|#define GETU32(pt) (((u32)(pt)[0] << 24) ^ ((u32)(pt)[1] << 16) ^ \
  |  |  114|    628|((u32)(pt)[2] <<  8) ^ ((u32)(pt)[3]))
  ------------------
  823|       |
  824|    628|	if (keyBits == 256) {
  ------------------
  |  Branch (824:6): [True: 628, False: 0]
  ------------------
  825|  4.39k|		for (i = 0; i < 7; i++) {
  ------------------
  |  Branch (825:15): [True: 4.39k, False: 0]
  ------------------
  826|  4.39k|			temp  = rk[7];
  827|  4.39k|			rk[8] = rk[0] ^ TE421(temp) ^ TE432(temp) ^
  ------------------
  |  |   83|  4.39k|#define TE421(i) ((Te0[((i) >> 16) & 0xff] << 8) & 0xff000000)
  ------------------
              			rk[8] = rk[0] ^ TE421(temp) ^ TE432(temp) ^
  ------------------
  |  |   84|  4.39k|#define TE432(i) (Te0[((i) >> 8) & 0xff] & 0x00ff0000)
  ------------------
  828|  4.39k|				TE443(temp) ^ TE414(temp) ^ RCON(i);
  ------------------
  |  |   85|  4.39k|#define TE443(i) (Te0[(i) & 0xff] & 0x0000ff00)
  ------------------
              				TE443(temp) ^ TE414(temp) ^ RCON(i);
  ------------------
  |  |   86|  4.39k|#define TE414(i) ((Te0[((i) >> 24) & 0xff] >> 8) & 0x000000ff)
  ------------------
              				TE443(temp) ^ TE414(temp) ^ RCON(i);
  ------------------
  |  |   68|  4.39k|#define RCON(i) ((u32) rcons[(i)] << 24)
  ------------------
  829|  4.39k|			rk[9] = rk[1] ^ rk[8];
  830|  4.39k|			rk[10] = rk[2] ^ rk[9];
  831|  4.39k|			rk[11] = rk[3] ^ rk[10];
  832|  4.39k|			if (i == 6)
  ------------------
  |  Branch (832:8): [True: 628, False: 3.76k]
  ------------------
  833|    628|				return 14;
  834|  3.76k|			temp  = rk[11];
  835|  3.76k|			rk[12] = rk[4] ^ TE411(temp) ^ TE422(temp) ^
  ------------------
  |  |   87|  3.76k|#define TE411(i) ((Te0[((i) >> 24) & 0xff] << 8) & 0xff000000)
  ------------------
              			rk[12] = rk[4] ^ TE411(temp) ^ TE422(temp) ^
  ------------------
  |  |   88|  3.76k|#define TE422(i) (Te0[((i) >> 16) & 0xff] & 0x00ff0000)
  ------------------
  836|  3.76k|				TE433(temp) ^ TE444(temp);
  ------------------
  |  |   89|  3.76k|#define TE433(i) (Te0[((i) >> 8) & 0xff] & 0x0000ff00)
  ------------------
              				TE433(temp) ^ TE444(temp);
  ------------------
  |  |   90|  3.76k|#define TE444(i) ((Te0[(i) & 0xff] >> 8) & 0x000000ff)
  ------------------
  837|  3.76k|			rk[13] = rk[5] ^ rk[12];
  838|  3.76k|			rk[14] = rk[6] ^ rk[13];
  839|  3.76k|			rk[15] = rk[7] ^ rk[14];
  840|  3.76k|			rk += 8;
  841|  3.76k|		}
  842|    628|	}
  843|       |
  844|      0|	return -1;
  845|    628|}

aes-internal-dec.c:rotr:
   71|  2.88M|{
   72|  2.88M|	return (val >> bits) | (val << (32 - bits));
   73|  2.88M|}
aes-internal-enc.c:rotr:
   71|   144k|{
   72|   144k|	return (val >> bits) | (val << (32 - bits));
   73|   144k|}

crypto_cipher_init:
   46|    760|{
   47|    760|	struct crypto_cipher *ctx;
   48|       |
   49|    760|	ctx = os_zalloc(sizeof(*ctx));
   50|    760|	if (ctx == NULL)
  ------------------
  |  Branch (50:6): [True: 0, False: 760]
  ------------------
   51|      0|		return NULL;
   52|       |
   53|    760|	ctx->alg = alg;
   54|       |
   55|    760|	switch (alg) {
   56|    206|	case CRYPTO_CIPHER_ALG_RC4:
  ------------------
  |  Branch (56:2): [True: 206, False: 554]
  ------------------
   57|    206|		if (key_len > sizeof(ctx->u.rc4.key)) {
  ------------------
  |  Branch (57:7): [True: 0, False: 206]
  ------------------
   58|      0|			os_free(ctx);
  ------------------
  |  |  511|      0|#define os_free(p) free((p))
  ------------------
   59|      0|			return NULL;
   60|      0|		}
   61|    206|		ctx->u.rc4.keylen = key_len;
   62|    206|		os_memcpy(ctx->u.rc4.key, key, key_len);
  ------------------
  |  |  523|    206|#define os_memcpy(d, s, n) memcpy((d), (s), (n))
  ------------------
   63|    206|		break;
   64|    333|	case CRYPTO_CIPHER_ALG_AES:
  ------------------
  |  Branch (64:2): [True: 333, False: 427]
  ------------------
   65|    333|		ctx->u.aes.ctx_enc = aes_encrypt_init(key, key_len);
   66|    333|		if (ctx->u.aes.ctx_enc == NULL) {
  ------------------
  |  Branch (66:7): [True: 0, False: 333]
  ------------------
   67|      0|			os_free(ctx);
  ------------------
  |  |  511|      0|#define os_free(p) free((p))
  ------------------
   68|      0|			return NULL;
   69|      0|		}
   70|    333|		ctx->u.aes.ctx_dec = aes_decrypt_init(key, key_len);
   71|    333|		if (ctx->u.aes.ctx_dec == NULL) {
  ------------------
  |  Branch (71:7): [True: 0, False: 333]
  ------------------
   72|      0|			aes_encrypt_deinit(ctx->u.aes.ctx_enc);
   73|      0|			os_free(ctx);
  ------------------
  |  |  511|      0|#define os_free(p) free((p))
  ------------------
   74|      0|			return NULL;
   75|      0|		}
   76|    333|		os_memcpy(ctx->u.aes.cbc, iv, AES_BLOCK_SIZE);
  ------------------
  |  |  523|    333|#define os_memcpy(d, s, n) memcpy((d), (s), (n))
  ------------------
   77|    333|		break;
   78|    221|	case CRYPTO_CIPHER_ALG_3DES:
  ------------------
  |  Branch (78:2): [True: 221, False: 539]
  ------------------
   79|    221|		if (key_len != 24) {
  ------------------
  |  Branch (79:7): [True: 0, False: 221]
  ------------------
   80|      0|			os_free(ctx);
  ------------------
  |  |  511|      0|#define os_free(p) free((p))
  ------------------
   81|      0|			return NULL;
   82|      0|		}
   83|    221|		des3_key_setup(key, &ctx->u.des3.key);
   84|    221|		os_memcpy(ctx->u.des3.cbc, iv, 8);
  ------------------
  |  |  523|    221|#define os_memcpy(d, s, n) memcpy((d), (s), (n))
  ------------------
   85|    221|		break;
   86|      0|	case CRYPTO_CIPHER_ALG_DES:
  ------------------
  |  Branch (86:2): [True: 0, False: 760]
  ------------------
   87|      0|		if (key_len != 8) {
  ------------------
  |  Branch (87:7): [True: 0, False: 0]
  ------------------
   88|      0|			os_free(ctx);
  ------------------
  |  |  511|      0|#define os_free(p) free((p))
  ------------------
   89|      0|			return NULL;
   90|      0|		}
   91|      0|		des_key_setup(key, ctx->u.des.ek, ctx->u.des.dk);
   92|      0|		os_memcpy(ctx->u.des.cbc, iv, 8);
  ------------------
  |  |  523|      0|#define os_memcpy(d, s, n) memcpy((d), (s), (n))
  ------------------
   93|      0|		break;
   94|      0|	default:
  ------------------
  |  Branch (94:2): [True: 0, False: 760]
  ------------------
   95|      0|		os_free(ctx);
  ------------------
  |  |  511|      0|#define os_free(p) free((p))
  ------------------
   96|      0|		return NULL;
   97|    760|	}
   98|       |
   99|    760|	return ctx;
  100|    760|}
crypto_cipher_encrypt:
  105|    447|{
  106|    447|	size_t i, j, blocks;
  107|       |
  108|    447|	switch (ctx->alg) {
  109|    114|	case CRYPTO_CIPHER_ALG_RC4:
  ------------------
  |  Branch (109:2): [True: 114, False: 333]
  ------------------
  110|    114|		if (plain != crypt)
  ------------------
  |  Branch (110:7): [True: 0, False: 114]
  ------------------
  111|      0|			os_memcpy(crypt, plain, len);
  ------------------
  |  |  523|      0|#define os_memcpy(d, s, n) memcpy((d), (s), (n))
  ------------------
  112|    114|		rc4_skip(ctx->u.rc4.key, ctx->u.rc4.keylen,
  113|    114|			 ctx->u.rc4.used_bytes, crypt, len);
  114|    114|		ctx->u.rc4.used_bytes += len;
  115|    114|		break;
  116|    218|	case CRYPTO_CIPHER_ALG_AES:
  ------------------
  |  Branch (116:2): [True: 218, False: 229]
  ------------------
  117|    218|		if (len % AES_BLOCK_SIZE)
  ------------------
  |  |   12|    218|#define AES_BLOCK_SIZE 16
  ------------------
  |  Branch (117:7): [True: 0, False: 218]
  ------------------
  118|      0|			return -1;
  119|    218|		blocks = len / AES_BLOCK_SIZE;
  ------------------
  |  |   12|    218|#define AES_BLOCK_SIZE 16
  ------------------
  120|  1.15k|		for (i = 0; i < blocks; i++) {
  ------------------
  |  Branch (120:15): [True: 941, False: 218]
  ------------------
  121|  15.9k|			for (j = 0; j < AES_BLOCK_SIZE; j++)
  ------------------
  |  |   12|  15.9k|#define AES_BLOCK_SIZE 16
  ------------------
  |  Branch (121:16): [True: 15.0k, False: 941]
  ------------------
  122|  15.0k|				ctx->u.aes.cbc[j] ^= plain[j];
  123|    941|			aes_encrypt(ctx->u.aes.ctx_enc, ctx->u.aes.cbc,
  124|    941|				    ctx->u.aes.cbc);
  125|    941|			os_memcpy(crypt, ctx->u.aes.cbc, AES_BLOCK_SIZE);
  ------------------
  |  |  523|    941|#define os_memcpy(d, s, n) memcpy((d), (s), (n))
  ------------------
  126|    941|			plain += AES_BLOCK_SIZE;
  ------------------
  |  |   12|    941|#define AES_BLOCK_SIZE 16
  ------------------
  127|    941|			crypt += AES_BLOCK_SIZE;
  ------------------
  |  |   12|    941|#define AES_BLOCK_SIZE 16
  ------------------
  128|    941|		}
  129|    218|		break;
  130|    115|	case CRYPTO_CIPHER_ALG_3DES:
  ------------------
  |  Branch (130:2): [True: 115, False: 332]
  ------------------
  131|    115|		if (len % 8)
  ------------------
  |  Branch (131:7): [True: 0, False: 115]
  ------------------
  132|      0|			return -1;
  133|    115|		blocks = len / 8;
  134|    732|		for (i = 0; i < blocks; i++) {
  ------------------
  |  Branch (134:15): [True: 617, False: 115]
  ------------------
  135|  5.55k|			for (j = 0; j < 8; j++)
  ------------------
  |  Branch (135:16): [True: 4.93k, False: 617]
  ------------------
  136|  4.93k|				ctx->u.des3.cbc[j] ^= plain[j];
  137|    617|			des3_encrypt(ctx->u.des3.cbc, &ctx->u.des3.key,
  138|    617|				     ctx->u.des3.cbc);
  139|    617|			os_memcpy(crypt, ctx->u.des3.cbc, 8);
  ------------------
  |  |  523|    617|#define os_memcpy(d, s, n) memcpy((d), (s), (n))
  ------------------
  140|    617|			plain += 8;
  141|    617|			crypt += 8;
  142|    617|		}
  143|    115|		break;
  144|      0|	case CRYPTO_CIPHER_ALG_DES:
  ------------------
  |  Branch (144:2): [True: 0, False: 447]
  ------------------
  145|      0|		if (len % 8)
  ------------------
  |  Branch (145:7): [True: 0, False: 0]
  ------------------
  146|      0|			return -1;
  147|      0|		blocks = len / 8;
  148|      0|		for (i = 0; i < blocks; i++) {
  ------------------
  |  Branch (148:15): [True: 0, False: 0]
  ------------------
  149|      0|			for (j = 0; j < 8; j++)
  ------------------
  |  Branch (149:16): [True: 0, False: 0]
  ------------------
  150|      0|				ctx->u.des3.cbc[j] ^= plain[j];
  151|      0|			des_block_encrypt(ctx->u.des.cbc, ctx->u.des.ek,
  152|      0|					  ctx->u.des.cbc);
  153|      0|			os_memcpy(crypt, ctx->u.des.cbc, 8);
  ------------------
  |  |  523|      0|#define os_memcpy(d, s, n) memcpy((d), (s), (n))
  ------------------
  154|      0|			plain += 8;
  155|      0|			crypt += 8;
  156|      0|		}
  157|      0|		break;
  158|      0|	default:
  ------------------
  |  Branch (158:2): [True: 0, False: 447]
  ------------------
  159|      0|		return -1;
  160|    447|	}
  161|       |
  162|    447|	return 0;
  163|    447|}
crypto_cipher_decrypt:
  168|  15.5k|{
  169|  15.5k|	size_t i, j, blocks;
  170|  15.5k|	u8 tmp[32];
  171|       |
  172|  15.5k|	switch (ctx->alg) {
  173|  6.03k|	case CRYPTO_CIPHER_ALG_RC4:
  ------------------
  |  Branch (173:2): [True: 6.03k, False: 9.46k]
  ------------------
  174|  6.03k|		if (plain != crypt)
  ------------------
  |  Branch (174:7): [True: 6.03k, False: 0]
  ------------------
  175|  6.03k|			os_memcpy(plain, crypt, len);
  ------------------
  |  |  523|  6.03k|#define os_memcpy(d, s, n) memcpy((d), (s), (n))
  ------------------
  176|  6.03k|		rc4_skip(ctx->u.rc4.key, ctx->u.rc4.keylen,
  177|  6.03k|			 ctx->u.rc4.used_bytes, plain, len);
  178|  6.03k|		ctx->u.rc4.used_bytes += len;
  179|  6.03k|		break;
  180|  5.12k|	case CRYPTO_CIPHER_ALG_AES:
  ------------------
  |  Branch (180:2): [True: 5.12k, False: 10.3k]
  ------------------
  181|  5.12k|		if (len % AES_BLOCK_SIZE)
  ------------------
  |  |   12|  5.12k|#define AES_BLOCK_SIZE 16
  ------------------
  |  Branch (181:7): [True: 299, False: 4.82k]
  ------------------
  182|    299|			return -1;
  183|  4.82k|		blocks = len / AES_BLOCK_SIZE;
  ------------------
  |  |   12|  4.82k|#define AES_BLOCK_SIZE 16
  ------------------
  184|  22.9k|		for (i = 0; i < blocks; i++) {
  ------------------
  |  Branch (184:15): [True: 18.1k, False: 4.82k]
  ------------------
  185|  18.1k|			os_memcpy(tmp, crypt, AES_BLOCK_SIZE);
  ------------------
  |  |  523|  18.1k|#define os_memcpy(d, s, n) memcpy((d), (s), (n))
  ------------------
  186|  18.1k|			aes_decrypt(ctx->u.aes.ctx_dec, crypt, plain);
  187|   308k|			for (j = 0; j < AES_BLOCK_SIZE; j++)
  ------------------
  |  |   12|   308k|#define AES_BLOCK_SIZE 16
  ------------------
  |  Branch (187:16): [True: 290k, False: 18.1k]
  ------------------
  188|   290k|				plain[j] ^= ctx->u.aes.cbc[j];
  189|  18.1k|			os_memcpy(ctx->u.aes.cbc, tmp, AES_BLOCK_SIZE);
  ------------------
  |  |  523|  18.1k|#define os_memcpy(d, s, n) memcpy((d), (s), (n))
  ------------------
  190|  18.1k|			plain += AES_BLOCK_SIZE;
  ------------------
  |  |   12|  18.1k|#define AES_BLOCK_SIZE 16
  ------------------
  191|  18.1k|			crypt += AES_BLOCK_SIZE;
  ------------------
  |  |   12|  18.1k|#define AES_BLOCK_SIZE 16
  ------------------
  192|  18.1k|		}
  193|  4.82k|		break;
  194|  4.34k|	case CRYPTO_CIPHER_ALG_3DES:
  ------------------
  |  Branch (194:2): [True: 4.34k, False: 11.1k]
  ------------------
  195|  4.34k|		if (len % 8)
  ------------------
  |  Branch (195:7): [True: 339, False: 4.00k]
  ------------------
  196|    339|			return -1;
  197|  4.00k|		blocks = len / 8;
  198|  23.3k|		for (i = 0; i < blocks; i++) {
  ------------------
  |  Branch (198:15): [True: 19.3k, False: 4.00k]
  ------------------
  199|  19.3k|			os_memcpy(tmp, crypt, 8);
  ------------------
  |  |  523|  19.3k|#define os_memcpy(d, s, n) memcpy((d), (s), (n))
  ------------------
  200|  19.3k|			des3_decrypt(crypt, &ctx->u.des3.key, plain);
  201|   174k|			for (j = 0; j < 8; j++)
  ------------------
  |  Branch (201:16): [True: 154k, False: 19.3k]
  ------------------
  202|   154k|				plain[j] ^= ctx->u.des3.cbc[j];
  203|  19.3k|			os_memcpy(ctx->u.des3.cbc, tmp, 8);
  ------------------
  |  |  523|  19.3k|#define os_memcpy(d, s, n) memcpy((d), (s), (n))
  ------------------
  204|  19.3k|			plain += 8;
  205|  19.3k|			crypt += 8;
  206|  19.3k|		}
  207|  4.00k|		break;
  208|      0|	case CRYPTO_CIPHER_ALG_DES:
  ------------------
  |  Branch (208:2): [True: 0, False: 15.5k]
  ------------------
  209|      0|		if (len % 8)
  ------------------
  |  Branch (209:7): [True: 0, False: 0]
  ------------------
  210|      0|			return -1;
  211|      0|		blocks = len / 8;
  212|      0|		for (i = 0; i < blocks; i++) {
  ------------------
  |  Branch (212:15): [True: 0, False: 0]
  ------------------
  213|      0|			os_memcpy(tmp, crypt, 8);
  ------------------
  |  |  523|      0|#define os_memcpy(d, s, n) memcpy((d), (s), (n))
  ------------------
  214|      0|			des_block_decrypt(crypt, ctx->u.des.dk, plain);
  215|      0|			for (j = 0; j < 8; j++)
  ------------------
  |  Branch (215:16): [True: 0, False: 0]
  ------------------
  216|      0|				plain[j] ^= ctx->u.des.cbc[j];
  217|      0|			os_memcpy(ctx->u.des.cbc, tmp, 8);
  ------------------
  |  |  523|      0|#define os_memcpy(d, s, n) memcpy((d), (s), (n))
  ------------------
  218|      0|			plain += 8;
  219|      0|			crypt += 8;
  220|      0|		}
  221|      0|		break;
  222|      0|	default:
  ------------------
  |  Branch (222:2): [True: 0, False: 15.5k]
  ------------------
  223|      0|		return -1;
  224|  15.5k|	}
  225|       |
  226|  14.8k|	return 0;
  227|  15.5k|}
crypto_cipher_deinit:
  231|    760|{
  232|    760|	switch (ctx->alg) {
  233|    333|	case CRYPTO_CIPHER_ALG_AES:
  ------------------
  |  Branch (233:2): [True: 333, False: 427]
  ------------------
  234|    333|		aes_encrypt_deinit(ctx->u.aes.ctx_enc);
  235|    333|		aes_decrypt_deinit(ctx->u.aes.ctx_dec);
  236|    333|		break;
  237|    221|	case CRYPTO_CIPHER_ALG_3DES:
  ------------------
  |  Branch (237:2): [True: 221, False: 539]
  ------------------
  238|    221|		break;
  239|    206|	default:
  ------------------
  |  Branch (239:2): [True: 206, False: 554]
  ------------------
  240|    206|		break;
  241|    760|	}
  242|    760|	os_free(ctx);
  ------------------
  |  |  511|    760|#define os_free(p) free((p))
  ------------------
  243|    760|}

crypto_mod_exp:
   93|    144|{
   94|    144|	struct bignum *bn_base, *bn_exp, *bn_modulus, *bn_result;
   95|    144|	int ret = -1;
   96|       |
   97|    144|	bn_base = bignum_init();
   98|    144|	bn_exp = bignum_init();
   99|    144|	bn_modulus = bignum_init();
  100|    144|	bn_result = bignum_init();
  101|       |
  102|    144|	if (bn_base == NULL || bn_exp == NULL || bn_modulus == NULL ||
  ------------------
  |  Branch (102:6): [True: 0, False: 144]
  |  Branch (102:25): [True: 0, False: 144]
  |  Branch (102:43): [True: 0, False: 144]
  ------------------
  103|    144|	    bn_result == NULL)
  ------------------
  |  Branch (103:6): [True: 0, False: 144]
  ------------------
  104|      0|		goto error;
  105|       |
  106|    144|	if (bignum_set_unsigned_bin(bn_base, base, base_len) < 0 ||
  ------------------
  |  Branch (106:6): [True: 0, False: 144]
  ------------------
  107|    144|	    bignum_set_unsigned_bin(bn_exp, power, power_len) < 0 ||
  ------------------
  |  Branch (107:6): [True: 0, False: 144]
  ------------------
  108|    144|	    bignum_set_unsigned_bin(bn_modulus, modulus, modulus_len) < 0)
  ------------------
  |  Branch (108:6): [True: 0, False: 144]
  ------------------
  109|      0|		goto error;
  110|       |
  111|    144|	if (bignum_exptmod(bn_base, bn_exp, bn_modulus, bn_result) < 0)
  ------------------
  |  Branch (111:6): [True: 4, False: 140]
  ------------------
  112|      4|		goto error;
  113|       |
  114|    140|	ret = bignum_get_unsigned_bin(bn_result, result, result_len);
  115|       |
  116|    144|error:
  117|    144|	bignum_deinit(bn_base);
  118|    144|	bignum_deinit(bn_exp);
  119|    144|	bignum_deinit(bn_modulus);
  120|    144|	bignum_deinit(bn_result);
  121|    144|	return ret;
  122|    140|}

crypto_public_key_import:
   23|    788|{
   24|    788|	return (struct crypto_public_key *)
   25|    788|		crypto_rsa_import_public_key(key, len);
   26|    788|}
crypto_public_key_from_cert:
   66|  1.87k|{
   67|       |	/* No X.509 support in crypto_internal.c */
   68|       |	return NULL;
   69|  1.87k|}
crypto_public_key_encrypt_pkcs1_v15:
   75|    337|{
   76|    337|	return pkcs1_encrypt(2, (struct crypto_rsa_key *) key,
   77|    337|			     0, in, inlen, out, outlen);
   78|    337|}
crypto_public_key_free:
  100|  4.56k|{
  101|  4.56k|	crypto_rsa_free((struct crypto_rsa_key *) key);
  102|  4.56k|}
crypto_public_key_decrypt_pkcs1:
  114|    300|{
  115|    300|	return pkcs1_decrypt_public_key((struct crypto_rsa_key *) key,
  116|    300|					crypt, crypt_len, plain, plain_len);
  117|    300|}

crypto_hash_init:
   41|  36.2k|{
   42|  36.2k|	struct crypto_hash *ctx;
   43|  36.2k|	u8 k_pad[64];
   44|  36.2k|	u8 tk[32];
   45|  36.2k|	size_t i;
   46|       |
   47|  36.2k|	ctx = os_zalloc(sizeof(*ctx));
   48|  36.2k|	if (ctx == NULL)
  ------------------
  |  Branch (48:6): [True: 0, False: 36.2k]
  ------------------
   49|      0|		return NULL;
   50|       |
   51|  36.2k|	ctx->alg = alg;
   52|       |
   53|  36.2k|	switch (alg) {
   54|  8.15k|	case CRYPTO_HASH_ALG_MD5:
  ------------------
  |  Branch (54:2): [True: 8.15k, False: 28.0k]
  ------------------
   55|  8.15k|		MD5Init(&ctx->u.md5);
   56|  8.15k|		break;
   57|  8.15k|	case CRYPTO_HASH_ALG_SHA1:
  ------------------
  |  Branch (57:2): [True: 8.15k, False: 28.0k]
  ------------------
   58|  8.15k|		SHA1Init(&ctx->u.sha1);
   59|  8.15k|		break;
   60|      0|#ifdef CONFIG_SHA256
   61|  8.18k|	case CRYPTO_HASH_ALG_SHA256:
  ------------------
  |  Branch (61:2): [True: 8.18k, False: 28.0k]
  ------------------
   62|  8.18k|		sha256_init(&ctx->u.sha256);
   63|  8.18k|		break;
   64|      0|#endif /* CONFIG_SHA256 */
   65|      0|#ifdef CONFIG_INTERNAL_SHA384
   66|    113|	case CRYPTO_HASH_ALG_SHA384:
  ------------------
  |  Branch (66:2): [True: 113, False: 36.1k]
  ------------------
   67|    113|		sha384_init(&ctx->u.sha384);
   68|    113|		break;
   69|      0|#endif /* CONFIG_INTERNAL_SHA384 */
   70|       |#ifdef CONFIG_INTERNAL_SHA512
   71|       |	case CRYPTO_HASH_ALG_SHA512:
   72|       |		sha512_init(&ctx->u.sha512);
   73|       |		break;
   74|       |#endif /* CONFIG_INTERNAL_SHA512 */
   75|  4.60k|	case CRYPTO_HASH_ALG_HMAC_MD5:
  ------------------
  |  Branch (75:2): [True: 4.60k, False: 31.6k]
  ------------------
   76|  4.60k|		if (key_len > sizeof(k_pad)) {
  ------------------
  |  Branch (76:7): [True: 0, False: 4.60k]
  ------------------
   77|      0|			MD5Init(&ctx->u.md5);
   78|      0|			MD5Update(&ctx->u.md5, key, key_len);
   79|      0|			MD5Final(tk, &ctx->u.md5);
   80|      0|			key = tk;
   81|      0|			key_len = 16;
   82|      0|		}
   83|  4.60k|		os_memcpy(ctx->key, key, key_len);
  ------------------
  |  |  523|  4.60k|#define os_memcpy(d, s, n) memcpy((d), (s), (n))
  ------------------
   84|  4.60k|		ctx->key_len = key_len;
   85|       |
   86|  4.60k|		os_memcpy(k_pad, key, key_len);
  ------------------
  |  |  523|  4.60k|#define os_memcpy(d, s, n) memcpy((d), (s), (n))
  ------------------
   87|  4.60k|		if (key_len < sizeof(k_pad))
  ------------------
  |  Branch (87:7): [True: 4.60k, False: 0]
  ------------------
   88|  4.60k|			os_memset(k_pad + key_len, 0, sizeof(k_pad) - key_len);
  ------------------
  |  |  529|  4.60k|#define os_memset(s, c, n) memset(s, c, n)
  ------------------
   89|   299k|		for (i = 0; i < sizeof(k_pad); i++)
  ------------------
  |  Branch (89:15): [True: 294k, False: 4.60k]
  ------------------
   90|   294k|			k_pad[i] ^= 0x36;
   91|  4.60k|		MD5Init(&ctx->u.md5);
   92|  4.60k|		MD5Update(&ctx->u.md5, k_pad, sizeof(k_pad));
   93|  4.60k|		break;
   94|  3.87k|	case CRYPTO_HASH_ALG_HMAC_SHA1:
  ------------------
  |  Branch (94:2): [True: 3.87k, False: 32.3k]
  ------------------
   95|  3.87k|		if (key_len > sizeof(k_pad)) {
  ------------------
  |  Branch (95:7): [True: 0, False: 3.87k]
  ------------------
   96|      0|			SHA1Init(&ctx->u.sha1);
   97|      0|			SHA1Update(&ctx->u.sha1, key, key_len);
   98|      0|			SHA1Final(tk, &ctx->u.sha1);
   99|      0|			key = tk;
  100|      0|			key_len = 20;
  101|      0|		}
  102|  3.87k|		os_memcpy(ctx->key, key, key_len);
  ------------------
  |  |  523|  3.87k|#define os_memcpy(d, s, n) memcpy((d), (s), (n))
  ------------------
  103|  3.87k|		ctx->key_len = key_len;
  104|       |
  105|  3.87k|		os_memcpy(k_pad, key, key_len);
  ------------------
  |  |  523|  3.87k|#define os_memcpy(d, s, n) memcpy((d), (s), (n))
  ------------------
  106|  3.87k|		if (key_len < sizeof(k_pad))
  ------------------
  |  Branch (106:7): [True: 3.87k, False: 0]
  ------------------
  107|  3.87k|			os_memset(k_pad + key_len, 0, sizeof(k_pad) - key_len);
  ------------------
  |  |  529|  3.87k|#define os_memset(s, c, n) memset(s, c, n)
  ------------------
  108|   251k|		for (i = 0; i < sizeof(k_pad); i++)
  ------------------
  |  Branch (108:15): [True: 248k, False: 3.87k]
  ------------------
  109|   248k|			k_pad[i] ^= 0x36;
  110|  3.87k|		SHA1Init(&ctx->u.sha1);
  111|  3.87k|		SHA1Update(&ctx->u.sha1, k_pad, sizeof(k_pad));
  112|  3.87k|		break;
  113|      0|#ifdef CONFIG_SHA256
  114|  3.14k|	case CRYPTO_HASH_ALG_HMAC_SHA256:
  ------------------
  |  Branch (114:2): [True: 3.14k, False: 33.0k]
  ------------------
  115|  3.14k|		if (key_len > sizeof(k_pad)) {
  ------------------
  |  Branch (115:7): [True: 0, False: 3.14k]
  ------------------
  116|      0|			sha256_init(&ctx->u.sha256);
  117|      0|			sha256_process(&ctx->u.sha256, key, key_len);
  118|      0|			sha256_done(&ctx->u.sha256, tk);
  119|      0|			key = tk;
  120|      0|			key_len = 32;
  121|      0|		}
  122|  3.14k|		os_memcpy(ctx->key, key, key_len);
  ------------------
  |  |  523|  3.14k|#define os_memcpy(d, s, n) memcpy((d), (s), (n))
  ------------------
  123|  3.14k|		ctx->key_len = key_len;
  124|       |
  125|  3.14k|		os_memcpy(k_pad, key, key_len);
  ------------------
  |  |  523|  3.14k|#define os_memcpy(d, s, n) memcpy((d), (s), (n))
  ------------------
  126|  3.14k|		if (key_len < sizeof(k_pad))
  ------------------
  |  Branch (126:7): [True: 3.14k, False: 0]
  ------------------
  127|  3.14k|			os_memset(k_pad + key_len, 0, sizeof(k_pad) - key_len);
  ------------------
  |  |  529|  3.14k|#define os_memset(s, c, n) memset(s, c, n)
  ------------------
  128|   204k|		for (i = 0; i < sizeof(k_pad); i++)
  ------------------
  |  Branch (128:15): [True: 200k, False: 3.14k]
  ------------------
  129|   200k|			k_pad[i] ^= 0x36;
  130|  3.14k|		sha256_init(&ctx->u.sha256);
  131|  3.14k|		sha256_process(&ctx->u.sha256, k_pad, sizeof(k_pad));
  132|  3.14k|		break;
  133|      0|#endif /* CONFIG_SHA256 */
  134|      1|	default:
  ------------------
  |  Branch (134:2): [True: 1, False: 36.2k]
  ------------------
  135|      1|		os_free(ctx);
  ------------------
  |  |  511|      1|#define os_free(p) free((p))
  ------------------
  136|      1|		return NULL;
  137|  36.2k|	}
  138|       |
  139|  36.2k|	return ctx;
  140|  36.2k|}
crypto_hash_update:
  144|   110k|{
  145|   110k|	if (ctx == NULL)
  ------------------
  |  Branch (145:6): [True: 0, False: 110k]
  ------------------
  146|      0|		return;
  147|       |
  148|   110k|	switch (ctx->alg) {
  149|  21.3k|	case CRYPTO_HASH_ALG_MD5:
  ------------------
  |  Branch (149:2): [True: 21.3k, False: 89.1k]
  ------------------
  150|  39.6k|	case CRYPTO_HASH_ALG_HMAC_MD5:
  ------------------
  |  Branch (150:2): [True: 18.3k, False: 92.1k]
  ------------------
  151|  39.6k|		MD5Update(&ctx->u.md5, data, len);
  152|  39.6k|		break;
  153|  21.3k|	case CRYPTO_HASH_ALG_SHA1:
  ------------------
  |  Branch (153:2): [True: 21.3k, False: 89.1k]
  ------------------
  154|  36.7k|	case CRYPTO_HASH_ALG_HMAC_SHA1:
  ------------------
  |  Branch (154:2): [True: 15.3k, False: 95.1k]
  ------------------
  155|  36.7k|		SHA1Update(&ctx->u.sha1, data, len);
  156|  36.7k|		break;
  157|      0|#ifdef CONFIG_SHA256
  158|  21.4k|	case CRYPTO_HASH_ALG_SHA256:
  ------------------
  |  Branch (158:2): [True: 21.4k, False: 89.0k]
  ------------------
  159|  33.8k|	case CRYPTO_HASH_ALG_HMAC_SHA256:
  ------------------
  |  Branch (159:2): [True: 12.3k, False: 98.1k]
  ------------------
  160|  33.8k|		sha256_process(&ctx->u.sha256, data, len);
  161|  33.8k|		break;
  162|      0|#endif /* CONFIG_SHA256 */
  163|      0|#ifdef CONFIG_INTERNAL_SHA384
  164|    339|	case CRYPTO_HASH_ALG_SHA384:
  ------------------
  |  Branch (164:2): [True: 339, False: 110k]
  ------------------
  165|    339|		sha384_process(&ctx->u.sha384, data, len);
  166|    339|		break;
  167|      0|#endif /* CONFIG_INTERNAL_SHA384 */
  168|       |#ifdef CONFIG_INTERNAL_SHA512
  169|       |	case CRYPTO_HASH_ALG_SHA512:
  170|       |		sha512_process(&ctx->u.sha512, data, len);
  171|       |		break;
  172|       |#endif /* CONFIG_INTERNAL_SHA512 */
  173|      0|	default:
  ------------------
  |  Branch (173:2): [True: 0, False: 110k]
  ------------------
  174|      0|		break;
  175|   110k|	}
  176|   110k|}
crypto_hash_finish:
  180|  61.0k|{
  181|  61.0k|	u8 k_pad[64];
  182|  61.0k|	size_t i;
  183|       |
  184|  61.0k|	if (ctx == NULL)
  ------------------
  |  Branch (184:6): [True: 24.8k, False: 36.2k]
  ------------------
  185|  24.8k|		return -2;
  186|       |
  187|  36.2k|	if (mac == NULL || len == NULL) {
  ------------------
  |  Branch (187:6): [True: 23.4k, False: 12.7k]
  |  Branch (187:21): [True: 0, False: 12.7k]
  ------------------
  188|  23.4k|		os_free(ctx);
  ------------------
  |  |  511|  23.4k|#define os_free(p) free((p))
  ------------------
  189|  23.4k|		return 0;
  190|  23.4k|	}
  191|       |
  192|  12.7k|	switch (ctx->alg) {
  193|    343|	case CRYPTO_HASH_ALG_MD5:
  ------------------
  |  Branch (193:2): [True: 343, False: 12.4k]
  ------------------
  194|    343|		if (*len < 16) {
  ------------------
  |  Branch (194:7): [True: 0, False: 343]
  ------------------
  195|      0|			*len = 16;
  196|      0|			os_free(ctx);
  ------------------
  |  |  511|      0|#define os_free(p) free((p))
  ------------------
  197|      0|			return -1;
  198|      0|		}
  199|    343|		*len = 16;
  200|    343|		MD5Final(mac, &ctx->u.md5);
  201|    343|		break;
  202|    343|	case CRYPTO_HASH_ALG_SHA1:
  ------------------
  |  Branch (202:2): [True: 343, False: 12.4k]
  ------------------
  203|    343|		if (*len < 20) {
  ------------------
  |  Branch (203:7): [True: 0, False: 343]
  ------------------
  204|      0|			*len = 20;
  205|      0|			os_free(ctx);
  ------------------
  |  |  511|      0|#define os_free(p) free((p))
  ------------------
  206|      0|			return -1;
  207|      0|		}
  208|    343|		*len = 20;
  209|    343|		SHA1Final(mac, &ctx->u.sha1);
  210|    343|		break;
  211|      0|#ifdef CONFIG_SHA256
  212|    350|	case CRYPTO_HASH_ALG_SHA256:
  ------------------
  |  Branch (212:2): [True: 350, False: 12.4k]
  ------------------
  213|    350|		if (*len < 32) {
  ------------------
  |  Branch (213:7): [True: 0, False: 350]
  ------------------
  214|      0|			*len = 32;
  215|      0|			os_free(ctx);
  ------------------
  |  |  511|      0|#define os_free(p) free((p))
  ------------------
  216|      0|			return -1;
  217|      0|		}
  218|    350|		*len = 32;
  219|    350|		sha256_done(&ctx->u.sha256, mac);
  220|    350|		break;
  221|      0|#endif /* CONFIG_SHA256 */
  222|      0|#ifdef CONFIG_INTERNAL_SHA384
  223|    113|	case CRYPTO_HASH_ALG_SHA384:
  ------------------
  |  Branch (223:2): [True: 113, False: 12.6k]
  ------------------
  224|    113|		if (*len < 48) {
  ------------------
  |  Branch (224:7): [True: 0, False: 113]
  ------------------
  225|      0|			*len = 48;
  226|      0|			os_free(ctx);
  ------------------
  |  |  511|      0|#define os_free(p) free((p))
  ------------------
  227|      0|			return -1;
  228|      0|		}
  229|    113|		*len = 48;
  230|    113|		sha384_done(&ctx->u.sha384, mac);
  231|    113|		break;
  232|      0|#endif /* CONFIG_INTERNAL_SHA384 */
  233|       |#ifdef CONFIG_INTERNAL_SHA512
  234|       |	case CRYPTO_HASH_ALG_SHA512:
  235|       |		if (*len < 64) {
  236|       |			*len = 64;
  237|       |			os_free(ctx);
  238|       |			return -1;
  239|       |		}
  240|       |		*len = 64;
  241|       |		sha512_done(&ctx->u.sha512, mac);
  242|       |		break;
  243|       |#endif /* CONFIG_INTERNAL_SHA512 */
  244|  4.60k|	case CRYPTO_HASH_ALG_HMAC_MD5:
  ------------------
  |  Branch (244:2): [True: 4.60k, False: 8.16k]
  ------------------
  245|  4.60k|		if (*len < 16) {
  ------------------
  |  Branch (245:7): [True: 0, False: 4.60k]
  ------------------
  246|      0|			*len = 16;
  247|      0|			os_free(ctx);
  ------------------
  |  |  511|      0|#define os_free(p) free((p))
  ------------------
  248|      0|			return -1;
  249|      0|		}
  250|  4.60k|		*len = 16;
  251|       |
  252|  4.60k|		MD5Final(mac, &ctx->u.md5);
  253|       |
  254|  4.60k|		os_memcpy(k_pad, ctx->key, ctx->key_len);
  ------------------
  |  |  523|  4.60k|#define os_memcpy(d, s, n) memcpy((d), (s), (n))
  ------------------
  255|  4.60k|		os_memset(k_pad + ctx->key_len, 0,
  ------------------
  |  |  529|  4.60k|#define os_memset(s, c, n) memset(s, c, n)
  ------------------
  256|  4.60k|			  sizeof(k_pad) - ctx->key_len);
  257|   299k|		for (i = 0; i < sizeof(k_pad); i++)
  ------------------
  |  Branch (257:15): [True: 294k, False: 4.60k]
  ------------------
  258|   294k|			k_pad[i] ^= 0x5c;
  259|  4.60k|		MD5Init(&ctx->u.md5);
  260|  4.60k|		MD5Update(&ctx->u.md5, k_pad, sizeof(k_pad));
  261|  4.60k|		MD5Update(&ctx->u.md5, mac, 16);
  262|  4.60k|		MD5Final(mac, &ctx->u.md5);
  263|  4.60k|		break;
  264|  3.87k|	case CRYPTO_HASH_ALG_HMAC_SHA1:
  ------------------
  |  Branch (264:2): [True: 3.87k, False: 8.89k]
  ------------------
  265|  3.87k|		if (*len < 20) {
  ------------------
  |  Branch (265:7): [True: 0, False: 3.87k]
  ------------------
  266|      0|			*len = 20;
  267|      0|			os_free(ctx);
  ------------------
  |  |  511|      0|#define os_free(p) free((p))
  ------------------
  268|      0|			return -1;
  269|      0|		}
  270|  3.87k|		*len = 20;
  271|       |
  272|  3.87k|		SHA1Final(mac, &ctx->u.sha1);
  273|       |
  274|  3.87k|		os_memcpy(k_pad, ctx->key, ctx->key_len);
  ------------------
  |  |  523|  3.87k|#define os_memcpy(d, s, n) memcpy((d), (s), (n))
  ------------------
  275|  3.87k|		os_memset(k_pad + ctx->key_len, 0,
  ------------------
  |  |  529|  3.87k|#define os_memset(s, c, n) memset(s, c, n)
  ------------------
  276|  3.87k|			  sizeof(k_pad) - ctx->key_len);
  277|   251k|		for (i = 0; i < sizeof(k_pad); i++)
  ------------------
  |  Branch (277:15): [True: 248k, False: 3.87k]
  ------------------
  278|   248k|			k_pad[i] ^= 0x5c;
  279|  3.87k|		SHA1Init(&ctx->u.sha1);
  280|  3.87k|		SHA1Update(&ctx->u.sha1, k_pad, sizeof(k_pad));
  281|  3.87k|		SHA1Update(&ctx->u.sha1, mac, 20);
  282|  3.87k|		SHA1Final(mac, &ctx->u.sha1);
  283|  3.87k|		break;
  284|      0|#ifdef CONFIG_SHA256
  285|  3.14k|	case CRYPTO_HASH_ALG_HMAC_SHA256:
  ------------------
  |  Branch (285:2): [True: 3.14k, False: 9.62k]
  ------------------
  286|  3.14k|		if (*len < 32) {
  ------------------
  |  Branch (286:7): [True: 0, False: 3.14k]
  ------------------
  287|      0|			*len = 32;
  288|      0|			os_free(ctx);
  ------------------
  |  |  511|      0|#define os_free(p) free((p))
  ------------------
  289|      0|			return -1;
  290|      0|		}
  291|  3.14k|		*len = 32;
  292|       |
  293|  3.14k|		sha256_done(&ctx->u.sha256, mac);
  294|       |
  295|  3.14k|		os_memcpy(k_pad, ctx->key, ctx->key_len);
  ------------------
  |  |  523|  3.14k|#define os_memcpy(d, s, n) memcpy((d), (s), (n))
  ------------------
  296|  3.14k|		os_memset(k_pad + ctx->key_len, 0,
  ------------------
  |  |  529|  3.14k|#define os_memset(s, c, n) memset(s, c, n)
  ------------------
  297|  3.14k|			  sizeof(k_pad) - ctx->key_len);
  298|   204k|		for (i = 0; i < sizeof(k_pad); i++)
  ------------------
  |  Branch (298:15): [True: 200k, False: 3.14k]
  ------------------
  299|   200k|			k_pad[i] ^= 0x5c;
  300|  3.14k|		sha256_init(&ctx->u.sha256);
  301|  3.14k|		sha256_process(&ctx->u.sha256, k_pad, sizeof(k_pad));
  302|  3.14k|		sha256_process(&ctx->u.sha256, mac, 32);
  303|  3.14k|		sha256_done(&ctx->u.sha256, mac);
  304|  3.14k|		break;
  305|      0|#endif /* CONFIG_SHA256 */
  306|      0|	default:
  ------------------
  |  Branch (306:2): [True: 0, False: 12.7k]
  ------------------
  307|      0|		os_free(ctx);
  ------------------
  |  |  511|      0|#define os_free(p) free((p))
  ------------------
  308|      0|		return -1;
  309|  12.7k|	}
  310|       |
  311|  12.7k|	os_free(ctx);
  ------------------
  |  |  511|  12.7k|#define os_free(p) free((p))
  ------------------
  312|       |
  313|  12.7k|	if (TEST_FAIL())
  ------------------
  |  |  688|  12.7k|#define TEST_FAIL() testing_test_fail(NULL, false)
  |  |  ------------------
  |  |  |  Branch (688:21): [True: 0, False: 12.7k]
  |  |  ------------------
  ------------------
  314|      0|		return -1;
  315|       |
  316|  12.7k|	return 0;
  317|  12.7k|}
crypto_global_init:
  321|  5.36k|{
  322|  5.36k|	return 0;
  323|  5.36k|}
crypto_global_deinit:
  327|  5.36k|{
  328|  5.36k|}

des3_key_setup:
  458|    221|{
  459|    221|	deskey(key, 0, dkey->ek[0]);
  460|    221|	deskey(key + 8, 1, dkey->ek[1]);
  461|    221|	deskey(key + 16, 0, dkey->ek[2]);
  462|       |
  463|    221|	deskey(key, 1, dkey->dk[2]);
  464|    221|	deskey(key + 8, 0, dkey->dk[1]);
  465|    221|	deskey(key + 16, 1, dkey->dk[0]);
  466|    221|}
des3_encrypt:
  470|    617|{
  471|    617|	u32 work[2];
  472|       |
  473|    617|	work[0] = WPA_GET_BE32(plain);
  474|    617|	work[1] = WPA_GET_BE32(plain + 4);
  475|    617|	desfunc(work, key->ek[0]);
  476|    617|	desfunc(work, key->ek[1]);
  477|    617|	desfunc(work, key->ek[2]);
  478|    617|	WPA_PUT_BE32(crypt, work[0]);
  479|    617|	WPA_PUT_BE32(crypt + 4, work[1]);
  480|    617|}
des3_decrypt:
  484|  19.3k|{
  485|  19.3k|	u32 work[2];
  486|       |
  487|  19.3k|	work[0] = WPA_GET_BE32(crypt);
  488|  19.3k|	work[1] = WPA_GET_BE32(crypt + 4);
  489|  19.3k|	desfunc(work, key->dk[0]);
  490|  19.3k|	desfunc(work, key->dk[1]);
  491|  19.3k|	desfunc(work, key->dk[2]);
  492|  19.3k|	WPA_PUT_BE32(plain, work[0]);
  493|  19.3k|	WPA_PUT_BE32(plain + 4, work[1]);
  494|  19.3k|}
des-internal.c:deskey:
  274|  1.32k|{
  275|  1.32k|	u32 i, j, l, m, n, kn[32];
  276|  1.32k|	u8 pc1m[56], pcr[56];
  277|       |
  278|  75.5k|	for (j = 0; j < 56; j++) {
  ------------------
  |  Branch (278:14): [True: 74.2k, False: 1.32k]
  ------------------
  279|  74.2k|		l = (u32) pc1[j];
  280|  74.2k|		m = l & 7;
  281|  74.2k|		pc1m[j] = (u8)
  282|  74.2k|			((key[l >> 3U] & bytebit[m]) == bytebit[m] ? 1 : 0);
  ------------------
  |  Branch (282:5): [True: 36.8k, False: 37.3k]
  ------------------
  283|  74.2k|	}
  284|       |
  285|  22.5k|	for (i = 0; i < 16; i++) {
  ------------------
  |  Branch (285:14): [True: 21.2k, False: 1.32k]
  ------------------
  286|  21.2k|		if (decrypt)
  ------------------
  |  Branch (286:7): [True: 10.6k, False: 10.6k]
  ------------------
  287|  10.6k|			m = (15 - i) << 1;
  288|  10.6k|		else
  289|  10.6k|			m = i << 1;
  290|  21.2k|		n = m + 1;
  291|  21.2k|		kn[m] = kn[n] = 0L;
  292|   615k|		for (j = 0; j < 28; j++) {
  ------------------
  |  Branch (292:15): [True: 594k, False: 21.2k]
  ------------------
  293|   594k|			l = j + (u32) totrot[i];
  294|   594k|			if (l < 28)
  ------------------
  |  Branch (294:8): [True: 286k, False: 307k]
  ------------------
  295|   286k|				pcr[j] = pc1m[l];
  296|   307k|			else
  297|   307k|				pcr[j] = pc1m[l - 28];
  298|   594k|		}
  299|   615k|		for (/* j = 28 */; j < 56; j++) {
  ------------------
  |  Branch (299:22): [True: 594k, False: 21.2k]
  ------------------
  300|   594k|			l = j + (u32) totrot[i];
  301|   594k|			if (l < 56)
  ------------------
  |  Branch (301:8): [True: 286k, False: 307k]
  ------------------
  302|   286k|				pcr[j] = pc1m[l];
  303|   307k|			else
  304|   307k|				pcr[j] = pc1m[l - 28];
  305|   594k|		}
  306|   530k|		for (j = 0; j < 24; j++) {
  ------------------
  |  Branch (306:15): [True: 509k, False: 21.2k]
  ------------------
  307|   509k|			if ((int) pcr[(int) pc2[j]] != 0)
  ------------------
  |  Branch (307:8): [True: 254k, False: 254k]
  ------------------
  308|   254k|				kn[m] |= bigbyte[j];
  309|   509k|			if ((int) pcr[(int) pc2[j + 24]] != 0)
  ------------------
  |  Branch (309:8): [True: 251k, False: 258k]
  ------------------
  310|   251k|				kn[n] |= bigbyte[j];
  311|   509k|		}
  312|  21.2k|	}
  313|       |
  314|  1.32k|	cookey(kn, keyout);
  315|  1.32k|}
des-internal.c:cookey:
  250|  1.32k|{
  251|  1.32k|	u32 *cook;
  252|  1.32k|	const u32 *raw0;
  253|  1.32k|	u32 dough[32];
  254|  1.32k|	int i;
  255|       |
  256|  1.32k|	cook = dough;
  257|  22.5k|	for (i = 0; i < 16; i++, raw1++) {
  ------------------
  |  Branch (257:14): [True: 21.2k, False: 1.32k]
  ------------------
  258|  21.2k|		raw0 = raw1++;
  259|  21.2k|		*cook    = (*raw0 & 0x00fc0000L) << 6;
  260|  21.2k|		*cook   |= (*raw0 & 0x00000fc0L) << 10;
  261|  21.2k|		*cook   |= (*raw1 & 0x00fc0000L) >> 10;
  262|  21.2k|		*cook++ |= (*raw1 & 0x00000fc0L) >> 6;
  263|  21.2k|		*cook    = (*raw0 & 0x0003f000L) << 12;
  264|  21.2k|		*cook   |= (*raw0 & 0x0000003fL) << 16;
  265|  21.2k|		*cook   |= (*raw1 & 0x0003f000L) >> 4;
  266|  21.2k|		*cook++ |= (*raw1 & 0x0000003fL);
  267|  21.2k|	}
  268|       |
  269|  1.32k|	os_memcpy(keyout, dough, sizeof(dough));
  ------------------
  |  |  523|  1.32k|#define os_memcpy(d, s, n) memcpy((d), (s), (n))
  ------------------
  270|  1.32k|}
des-internal.c:desfunc:
  319|  59.9k|{
  320|  59.9k|	u32 work, right, leftt;
  321|  59.9k|	int cur_round;
  322|       |
  323|  59.9k|	leftt = block[0];
  324|  59.9k|	right = block[1];
  325|       |
  326|  59.9k|	work = ((leftt >> 4)  ^ right) & 0x0f0f0f0fL;
  327|  59.9k|	right ^= work;
  328|  59.9k|	leftt ^= (work << 4);
  329|       |
  330|  59.9k|	work = ((leftt >> 16) ^ right) & 0x0000ffffL;
  331|  59.9k|	right ^= work;
  332|  59.9k|	leftt ^= (work << 16);
  333|       |
  334|  59.9k|	work = ((right >> 2)  ^ leftt) & 0x33333333L;
  335|  59.9k|	leftt ^= work;
  336|  59.9k|	right ^= (work << 2);
  337|       |
  338|  59.9k|	work = ((right >> 8)  ^ leftt) & 0x00ff00ffL;
  339|  59.9k|	leftt ^= work;
  340|  59.9k|	right ^= (work << 8);
  341|       |
  342|  59.9k|	right = ROLc(right, 1);
  ------------------
  |  |   39|  59.9k|	((((unsigned long) (x) << (unsigned long) ((y) & 31)) | \
  |  |   40|  59.9k|	  (((unsigned long) (x) & 0xFFFFFFFFUL) >> \
  |  |   41|  59.9k|	   (unsigned long) (32 - ((y) & 31)))) & 0xFFFFFFFFUL)
  ------------------
  343|  59.9k|	work = (leftt ^ right) & 0xaaaaaaaaL;
  344|       |
  345|  59.9k|	leftt ^= work;
  346|  59.9k|	right ^= work;
  347|  59.9k|	leftt = ROLc(leftt, 1);
  ------------------
  |  |   39|  59.9k|	((((unsigned long) (x) << (unsigned long) ((y) & 31)) | \
  |  |   40|  59.9k|	  (((unsigned long) (x) & 0xFFFFFFFFUL) >> \
  |  |   41|  59.9k|	   (unsigned long) (32 - ((y) & 31)))) & 0xFFFFFFFFUL)
  ------------------
  348|       |
  349|   539k|	for (cur_round = 0; cur_round < 8; cur_round++) {
  ------------------
  |  Branch (349:22): [True: 479k, False: 59.9k]
  ------------------
  350|   479k|		work  = RORc(right, 4) ^ *keys++;
  ------------------
  |  |   43|   479k|	(((((unsigned long) (x) & 0xFFFFFFFFUL) >> \
  |  |   44|   479k|	   (unsigned long) ((y) & 31)) | \
  |  |   45|   479k|	  ((unsigned long) (x) << (unsigned long) (32 - ((y) & 31)))) & \
  |  |   46|   479k|	 0xFFFFFFFFUL)
  ------------------
  351|   479k|		leftt ^= SP7[work        & 0x3fL]
  352|   479k|			^ SP5[(work >>  8) & 0x3fL]
  353|   479k|			^ SP3[(work >> 16) & 0x3fL]
  354|   479k|			^ SP1[(work >> 24) & 0x3fL];
  355|   479k|		work  = right ^ *keys++;
  356|   479k|		leftt ^= SP8[ work        & 0x3fL]
  357|   479k|			^  SP6[(work >>  8) & 0x3fL]
  358|   479k|			^  SP4[(work >> 16) & 0x3fL]
  359|   479k|			^  SP2[(work >> 24) & 0x3fL];
  360|       |
  361|   479k|		work = RORc(leftt, 4) ^ *keys++;
  ------------------
  |  |   43|   479k|	(((((unsigned long) (x) & 0xFFFFFFFFUL) >> \
  |  |   44|   479k|	   (unsigned long) ((y) & 31)) | \
  |  |   45|   479k|	  ((unsigned long) (x) << (unsigned long) (32 - ((y) & 31)))) & \
  |  |   46|   479k|	 0xFFFFFFFFUL)
  ------------------
  362|   479k|		right ^= SP7[ work        & 0x3fL]
  363|   479k|			^  SP5[(work >>  8) & 0x3fL]
  364|   479k|			^  SP3[(work >> 16) & 0x3fL]
  365|   479k|			^  SP1[(work >> 24) & 0x3fL];
  366|   479k|		work  = leftt ^ *keys++;
  367|   479k|		right ^= SP8[ work        & 0x3fL]
  368|   479k|			^  SP6[(work >>  8) & 0x3fL]
  369|   479k|			^  SP4[(work >> 16) & 0x3fL]
  370|   479k|			^  SP2[(work >> 24) & 0x3fL];
  371|   479k|	}
  372|       |
  373|  59.9k|	right = RORc(right, 1);
  ------------------
  |  |   43|  59.9k|	(((((unsigned long) (x) & 0xFFFFFFFFUL) >> \
  |  |   44|  59.9k|	   (unsigned long) ((y) & 31)) | \
  |  |   45|  59.9k|	  ((unsigned long) (x) << (unsigned long) (32 - ((y) & 31)))) & \
  |  |   46|  59.9k|	 0xFFFFFFFFUL)
  ------------------
  374|  59.9k|	work = (leftt ^ right) & 0xaaaaaaaaL;
  375|  59.9k|	leftt ^= work;
  376|  59.9k|	right ^= work;
  377|  59.9k|	leftt = RORc(leftt, 1);
  ------------------
  |  |   43|  59.9k|	(((((unsigned long) (x) & 0xFFFFFFFFUL) >> \
  |  |   44|  59.9k|	   (unsigned long) ((y) & 31)) | \
  |  |   45|  59.9k|	  ((unsigned long) (x) << (unsigned long) (32 - ((y) & 31)))) & \
  |  |   46|  59.9k|	 0xFFFFFFFFUL)
  ------------------
  378|  59.9k|	work = ((leftt >> 8) ^ right) & 0x00ff00ffL;
  379|  59.9k|	right ^= work;
  380|  59.9k|	leftt ^= (work << 8);
  381|       |	/* -- */
  382|  59.9k|	work = ((leftt >> 2) ^ right) & 0x33333333L;
  383|  59.9k|	right ^= work;
  384|  59.9k|	leftt ^= (work << 2);
  385|  59.9k|	work = ((right >> 16) ^ leftt) & 0x0000ffffL;
  386|  59.9k|	leftt ^= work;
  387|  59.9k|	right ^= (work << 16);
  388|  59.9k|	work = ((right >> 4) ^ leftt) & 0x0f0f0f0fL;
  389|  59.9k|	leftt ^= work;
  390|  59.9k|	right ^= (work << 4);
  391|       |
  392|  59.9k|	block[0] = right;
  393|  59.9k|	block[1] = leftt;
  394|  59.9k|}

md5_vector:
   32|  12.0k|{
   33|  12.0k|	MD5_CTX ctx;
   34|  12.0k|	size_t i;
   35|       |
   36|  12.0k|	if (TEST_FAIL())
  ------------------
  |  |  688|  12.0k|#define TEST_FAIL() testing_test_fail(NULL, false)
  |  |  ------------------
  |  |  |  Branch (688:21): [True: 0, False: 12.0k]
  |  |  ------------------
  ------------------
   37|      0|		return -1;
   38|       |
   39|  12.0k|	MD5Init(&ctx);
   40|  42.2k|	for (i = 0; i < num_elem; i++)
  ------------------
  |  Branch (40:14): [True: 30.1k, False: 12.0k]
  ------------------
   41|  30.1k|		MD5Update(&ctx, addr[i], len[i]);
   42|  12.0k|	MD5Final(mac, &ctx);
   43|  12.0k|	return 0;
   44|  12.0k|}
MD5Init:
   88|  29.4k|{
   89|  29.4k|    ctx->buf[0] = 0x67452301;
   90|  29.4k|    ctx->buf[1] = 0xefcdab89;
   91|  29.4k|    ctx->buf[2] = 0x98badcfe;
   92|  29.4k|    ctx->buf[3] = 0x10325476;
   93|       |
   94|  29.4k|    ctx->bits[0] = 0;
   95|  29.4k|    ctx->bits[1] = 0;
   96|  29.4k|}
MD5Update:
  103|  83.6k|{
  104|  83.6k|    u32 t;
  105|       |
  106|       |    /* Update bitcount */
  107|       |
  108|  83.6k|    t = ctx->bits[0];
  109|  83.6k|    if ((ctx->bits[0] = t + ((u32) len << 3)) < t)
  ------------------
  |  Branch (109:9): [True: 0, False: 83.6k]
  ------------------
  110|      0|	ctx->bits[1]++;		/* Carry from low to high */
  111|  83.6k|    ctx->bits[1] += len >> 29;
  112|       |
  113|  83.6k|    t = (t >> 3) & 0x3f;	/* Bytes already in shsInfo->data */
  114|       |
  115|       |    /* Handle any leading odd-sized chunks */
  116|       |
  117|  83.6k|    if (t) {
  ------------------
  |  Branch (117:9): [True: 32.7k, False: 50.9k]
  ------------------
  118|  32.7k|	unsigned char *p = (unsigned char *) ctx->in + t;
  119|       |
  120|  32.7k|	t = 64 - t;
  121|  32.7k|	if (len < t) {
  ------------------
  |  Branch (121:6): [True: 21.0k, False: 11.7k]
  ------------------
  122|  21.0k|	    os_memcpy(p, buf, len);
  ------------------
  |  |  523|  21.0k|#define os_memcpy(d, s, n) memcpy((d), (s), (n))
  ------------------
  123|  21.0k|	    return;
  124|  21.0k|	}
  125|  11.7k|	os_memcpy(p, buf, t);
  ------------------
  |  |  523|  11.7k|#define os_memcpy(d, s, n) memcpy((d), (s), (n))
  ------------------
  126|  11.7k|	byteReverse(ctx->in, 16);
  127|  11.7k|	MD5Transform(ctx->buf, (u32 *) ctx->in);
  128|  11.7k|	buf += t;
  129|  11.7k|	len -= t;
  130|  11.7k|    }
  131|       |    /* Process data in 64-byte chunks */
  132|       |
  133|   135k|    while (len >= 64) {
  ------------------
  |  Branch (133:12): [True: 72.7k, False: 62.6k]
  ------------------
  134|  72.7k|	os_memcpy(ctx->in, buf, 64);
  ------------------
  |  |  523|  72.7k|#define os_memcpy(d, s, n) memcpy((d), (s), (n))
  ------------------
  135|  72.7k|	byteReverse(ctx->in, 16);
  136|  72.7k|	MD5Transform(ctx->buf, (u32 *) ctx->in);
  137|  72.7k|	buf += 64;
  138|  72.7k|	len -= 64;
  139|  72.7k|    }
  140|       |
  141|       |    /* Handle any remaining bytes of data. */
  142|       |
  143|  62.6k|    os_memcpy(ctx->in, buf, len);
  ------------------
  |  |  523|  62.6k|#define os_memcpy(d, s, n) memcpy((d), (s), (n))
  ------------------
  144|  62.6k|}
MD5Final:
  151|  21.6k|{
  152|  21.6k|    unsigned count;
  153|  21.6k|    unsigned char *p;
  154|       |
  155|       |    /* Compute number of bytes mod 64 */
  156|  21.6k|    count = (ctx->bits[0] >> 3) & 0x3F;
  157|       |
  158|       |    /* Set the first char of padding to 0x80.  This is safe since there is
  159|       |       always at least one byte free */
  160|  21.6k|    p = ctx->in + count;
  161|  21.6k|    *p++ = 0x80;
  162|       |
  163|       |    /* Bytes of padding needed to make 64 bytes */
  164|  21.6k|    count = 64 - 1 - count;
  165|       |
  166|       |    /* Pad out to 56 mod 64 */
  167|  21.6k|    if (count < 8) {
  ------------------
  |  Branch (167:9): [True: 341, False: 21.2k]
  ------------------
  168|       |	/* Two lots of padding:  Pad the first block to 64 bytes */
  169|    341|	os_memset(p, 0, count);
  ------------------
  |  |  529|    341|#define os_memset(s, c, n) memset(s, c, n)
  ------------------
  170|    341|	byteReverse(ctx->in, 16);
  171|    341|	MD5Transform(ctx->buf, (u32 *) ctx->in);
  172|       |
  173|       |	/* Now fill the next block with 56 bytes */
  174|    341|	os_memset(ctx->in, 0, 56);
  ------------------
  |  |  529|    341|#define os_memset(s, c, n) memset(s, c, n)
  ------------------
  175|  21.2k|    } else {
  176|       |	/* Pad block to 56 bytes */
  177|  21.2k|	os_memset(p, 0, count - 8);
  ------------------
  |  |  529|  21.2k|#define os_memset(s, c, n) memset(s, c, n)
  ------------------
  178|  21.2k|    }
  179|  21.6k|    byteReverse(ctx->in, 14);
  180|       |
  181|       |    /* Append length in bits and transform */
  182|  21.6k|    ((u32 *) aliasing_hide_typecast(ctx->in, u32))[14] = ctx->bits[0];
  ------------------
  |  |  652|  21.6k|#define aliasing_hide_typecast(a,t) (t *) __hide_aliasing_typecast((a))
  ------------------
  183|  21.6k|    ((u32 *) aliasing_hide_typecast(ctx->in, u32))[15] = ctx->bits[1];
  ------------------
  |  |  652|  21.6k|#define aliasing_hide_typecast(a,t) (t *) __hide_aliasing_typecast((a))
  ------------------
  184|       |
  185|  21.6k|    MD5Transform(ctx->buf, (u32 *) ctx->in);
  186|  21.6k|    byteReverse((unsigned char *) ctx->buf, 4);
  187|  21.6k|    os_memcpy(digest, ctx->buf, 16);
  ------------------
  |  |  523|  21.6k|#define os_memcpy(d, s, n) memcpy((d), (s), (n))
  ------------------
  188|  21.6k|    os_memset(ctx, 0, sizeof(*ctx));	/* In case it's sensitive */
  ------------------
  |  |  529|  21.6k|#define os_memset(s, c, n) memset(s, c, n)
  ------------------
  189|  21.6k|}
md5-internal.c:MD5Transform:
  209|   106k|{
  210|   106k|    register u32 a, b, c, d;
  211|       |
  212|   106k|    a = buf[0];
  213|   106k|    b = buf[1];
  214|   106k|    c = buf[2];
  215|   106k|    d = buf[3];
  216|       |
  217|   106k|    MD5STEP(F1, a, b, c, d, in[0] + 0xd76aa478, 7);
  ------------------
  |  |  201|   106k|	( w += f(x, y, z) + data,  w = w<<s | w>>(32-s),  w += x )
  |  |  ------------------
  |  |  |  |  217|   106k|    MD5STEP(F1, a, b, c, d, in[0] + 0xd76aa478, 7);
  |  |  |  |  ------------------
  |  |  |  |  |  |  194|   106k|#define F1(x, y, z) (z ^ (x & (y ^ z)))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  218|   106k|    MD5STEP(F1, d, a, b, c, in[1] + 0xe8c7b756, 12);
  ------------------
  |  |  201|   106k|	( w += f(x, y, z) + data,  w = w<<s | w>>(32-s),  w += x )
  |  |  ------------------
  |  |  |  |  218|   106k|    MD5STEP(F1, d, a, b, c, in[1] + 0xe8c7b756, 12);
  |  |  |  |  ------------------
  |  |  |  |  |  |  194|   106k|#define F1(x, y, z) (z ^ (x & (y ^ z)))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  219|   106k|    MD5STEP(F1, c, d, a, b, in[2] + 0x242070db, 17);
  ------------------
  |  |  201|   106k|	( w += f(x, y, z) + data,  w = w<<s | w>>(32-s),  w += x )
  |  |  ------------------
  |  |  |  |  219|   106k|    MD5STEP(F1, c, d, a, b, in[2] + 0x242070db, 17);
  |  |  |  |  ------------------
  |  |  |  |  |  |  194|   106k|#define F1(x, y, z) (z ^ (x & (y ^ z)))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  220|   106k|    MD5STEP(F1, b, c, d, a, in[3] + 0xc1bdceee, 22);
  ------------------
  |  |  201|   106k|	( w += f(x, y, z) + data,  w = w<<s | w>>(32-s),  w += x )
  |  |  ------------------
  |  |  |  |  220|   106k|    MD5STEP(F1, b, c, d, a, in[3] + 0xc1bdceee, 22);
  |  |  |  |  ------------------
  |  |  |  |  |  |  194|   106k|#define F1(x, y, z) (z ^ (x & (y ^ z)))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  221|   106k|    MD5STEP(F1, a, b, c, d, in[4] + 0xf57c0faf, 7);
  ------------------
  |  |  201|   106k|	( w += f(x, y, z) + data,  w = w<<s | w>>(32-s),  w += x )
  |  |  ------------------
  |  |  |  |  221|   106k|    MD5STEP(F1, a, b, c, d, in[4] + 0xf57c0faf, 7);
  |  |  |  |  ------------------
  |  |  |  |  |  |  194|   106k|#define F1(x, y, z) (z ^ (x & (y ^ z)))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  222|   106k|    MD5STEP(F1, d, a, b, c, in[5] + 0x4787c62a, 12);
  ------------------
  |  |  201|   106k|	( w += f(x, y, z) + data,  w = w<<s | w>>(32-s),  w += x )
  |  |  ------------------
  |  |  |  |  222|   106k|    MD5STEP(F1, d, a, b, c, in[5] + 0x4787c62a, 12);
  |  |  |  |  ------------------
  |  |  |  |  |  |  194|   106k|#define F1(x, y, z) (z ^ (x & (y ^ z)))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  223|   106k|    MD5STEP(F1, c, d, a, b, in[6] + 0xa8304613, 17);
  ------------------
  |  |  201|   106k|	( w += f(x, y, z) + data,  w = w<<s | w>>(32-s),  w += x )
  |  |  ------------------
  |  |  |  |  223|   106k|    MD5STEP(F1, c, d, a, b, in[6] + 0xa8304613, 17);
  |  |  |  |  ------------------
  |  |  |  |  |  |  194|   106k|#define F1(x, y, z) (z ^ (x & (y ^ z)))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  224|   106k|    MD5STEP(F1, b, c, d, a, in[7] + 0xfd469501, 22);
  ------------------
  |  |  201|   106k|	( w += f(x, y, z) + data,  w = w<<s | w>>(32-s),  w += x )
  |  |  ------------------
  |  |  |  |  224|   106k|    MD5STEP(F1, b, c, d, a, in[7] + 0xfd469501, 22);
  |  |  |  |  ------------------
  |  |  |  |  |  |  194|   106k|#define F1(x, y, z) (z ^ (x & (y ^ z)))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  225|   106k|    MD5STEP(F1, a, b, c, d, in[8] + 0x698098d8, 7);
  ------------------
  |  |  201|   106k|	( w += f(x, y, z) + data,  w = w<<s | w>>(32-s),  w += x )
  |  |  ------------------
  |  |  |  |  225|   106k|    MD5STEP(F1, a, b, c, d, in[8] + 0x698098d8, 7);
  |  |  |  |  ------------------
  |  |  |  |  |  |  194|   106k|#define F1(x, y, z) (z ^ (x & (y ^ z)))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  226|   106k|    MD5STEP(F1, d, a, b, c, in[9] + 0x8b44f7af, 12);
  ------------------
  |  |  201|   106k|	( w += f(x, y, z) + data,  w = w<<s | w>>(32-s),  w += x )
  |  |  ------------------
  |  |  |  |  226|   106k|    MD5STEP(F1, d, a, b, c, in[9] + 0x8b44f7af, 12);
  |  |  |  |  ------------------
  |  |  |  |  |  |  194|   106k|#define F1(x, y, z) (z ^ (x & (y ^ z)))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  227|   106k|    MD5STEP(F1, c, d, a, b, in[10] + 0xffff5bb1, 17);
  ------------------
  |  |  201|   106k|	( w += f(x, y, z) + data,  w = w<<s | w>>(32-s),  w += x )
  |  |  ------------------
  |  |  |  |  227|   106k|    MD5STEP(F1, c, d, a, b, in[10] + 0xffff5bb1, 17);
  |  |  |  |  ------------------
  |  |  |  |  |  |  194|   106k|#define F1(x, y, z) (z ^ (x & (y ^ z)))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  228|   106k|    MD5STEP(F1, b, c, d, a, in[11] + 0x895cd7be, 22);
  ------------------
  |  |  201|   106k|	( w += f(x, y, z) + data,  w = w<<s | w>>(32-s),  w += x )
  |  |  ------------------
  |  |  |  |  228|   106k|    MD5STEP(F1, b, c, d, a, in[11] + 0x895cd7be, 22);
  |  |  |  |  ------------------
  |  |  |  |  |  |  194|   106k|#define F1(x, y, z) (z ^ (x & (y ^ z)))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  229|   106k|    MD5STEP(F1, a, b, c, d, in[12] + 0x6b901122, 7);
  ------------------
  |  |  201|   106k|	( w += f(x, y, z) + data,  w = w<<s | w>>(32-s),  w += x )
  |  |  ------------------
  |  |  |  |  229|   106k|    MD5STEP(F1, a, b, c, d, in[12] + 0x6b901122, 7);
  |  |  |  |  ------------------
  |  |  |  |  |  |  194|   106k|#define F1(x, y, z) (z ^ (x & (y ^ z)))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  230|   106k|    MD5STEP(F1, d, a, b, c, in[13] + 0xfd987193, 12);
  ------------------
  |  |  201|   106k|	( w += f(x, y, z) + data,  w = w<<s | w>>(32-s),  w += x )
  |  |  ------------------
  |  |  |  |  230|   106k|    MD5STEP(F1, d, a, b, c, in[13] + 0xfd987193, 12);
  |  |  |  |  ------------------
  |  |  |  |  |  |  194|   106k|#define F1(x, y, z) (z ^ (x & (y ^ z)))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  231|   106k|    MD5STEP(F1, c, d, a, b, in[14] + 0xa679438e, 17);
  ------------------
  |  |  201|   106k|	( w += f(x, y, z) + data,  w = w<<s | w>>(32-s),  w += x )
  |  |  ------------------
  |  |  |  |  231|   106k|    MD5STEP(F1, c, d, a, b, in[14] + 0xa679438e, 17);
  |  |  |  |  ------------------
  |  |  |  |  |  |  194|   106k|#define F1(x, y, z) (z ^ (x & (y ^ z)))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  232|   106k|    MD5STEP(F1, b, c, d, a, in[15] + 0x49b40821, 22);
  ------------------
  |  |  201|   106k|	( w += f(x, y, z) + data,  w = w<<s | w>>(32-s),  w += x )
  |  |  ------------------
  |  |  |  |  232|   106k|    MD5STEP(F1, b, c, d, a, in[15] + 0x49b40821, 22);
  |  |  |  |  ------------------
  |  |  |  |  |  |  194|   106k|#define F1(x, y, z) (z ^ (x & (y ^ z)))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  233|       |
  234|   106k|    MD5STEP(F2, a, b, c, d, in[1] + 0xf61e2562, 5);
  ------------------
  |  |  201|   106k|	( w += f(x, y, z) + data,  w = w<<s | w>>(32-s),  w += x )
  |  |  ------------------
  |  |  |  |  234|   106k|    MD5STEP(F2, a, b, c, d, in[1] + 0xf61e2562, 5);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|   106k|#define F2(x, y, z) F1(z, x, y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  194|   106k|#define F1(x, y, z) (z ^ (x & (y ^ z)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  235|   106k|    MD5STEP(F2, d, a, b, c, in[6] + 0xc040b340, 9);
  ------------------
  |  |  201|   106k|	( w += f(x, y, z) + data,  w = w<<s | w>>(32-s),  w += x )
  |  |  ------------------
  |  |  |  |  235|   106k|    MD5STEP(F2, d, a, b, c, in[6] + 0xc040b340, 9);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|   106k|#define F2(x, y, z) F1(z, x, y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  194|   106k|#define F1(x, y, z) (z ^ (x & (y ^ z)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  236|   106k|    MD5STEP(F2, c, d, a, b, in[11] + 0x265e5a51, 14);
  ------------------
  |  |  201|   106k|	( w += f(x, y, z) + data,  w = w<<s | w>>(32-s),  w += x )
  |  |  ------------------
  |  |  |  |  236|   106k|    MD5STEP(F2, c, d, a, b, in[11] + 0x265e5a51, 14);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|   106k|#define F2(x, y, z) F1(z, x, y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  194|   106k|#define F1(x, y, z) (z ^ (x & (y ^ z)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  237|   106k|    MD5STEP(F2, b, c, d, a, in[0] + 0xe9b6c7aa, 20);
  ------------------
  |  |  201|   106k|	( w += f(x, y, z) + data,  w = w<<s | w>>(32-s),  w += x )
  |  |  ------------------
  |  |  |  |  237|   106k|    MD5STEP(F2, b, c, d, a, in[0] + 0xe9b6c7aa, 20);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|   106k|#define F2(x, y, z) F1(z, x, y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  194|   106k|#define F1(x, y, z) (z ^ (x & (y ^ z)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  238|   106k|    MD5STEP(F2, a, b, c, d, in[5] + 0xd62f105d, 5);
  ------------------
  |  |  201|   106k|	( w += f(x, y, z) + data,  w = w<<s | w>>(32-s),  w += x )
  |  |  ------------------
  |  |  |  |  238|   106k|    MD5STEP(F2, a, b, c, d, in[5] + 0xd62f105d, 5);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|   106k|#define F2(x, y, z) F1(z, x, y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  194|   106k|#define F1(x, y, z) (z ^ (x & (y ^ z)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  239|   106k|    MD5STEP(F2, d, a, b, c, in[10] + 0x02441453, 9);
  ------------------
  |  |  201|   106k|	( w += f(x, y, z) + data,  w = w<<s | w>>(32-s),  w += x )
  |  |  ------------------
  |  |  |  |  239|   106k|    MD5STEP(F2, d, a, b, c, in[10] + 0x02441453, 9);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|   106k|#define F2(x, y, z) F1(z, x, y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  194|   106k|#define F1(x, y, z) (z ^ (x & (y ^ z)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  240|   106k|    MD5STEP(F2, c, d, a, b, in[15] + 0xd8a1e681, 14);
  ------------------
  |  |  201|   106k|	( w += f(x, y, z) + data,  w = w<<s | w>>(32-s),  w += x )
  |  |  ------------------
  |  |  |  |  240|   106k|    MD5STEP(F2, c, d, a, b, in[15] + 0xd8a1e681, 14);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|   106k|#define F2(x, y, z) F1(z, x, y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  194|   106k|#define F1(x, y, z) (z ^ (x & (y ^ z)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  241|   106k|    MD5STEP(F2, b, c, d, a, in[4] + 0xe7d3fbc8, 20);
  ------------------
  |  |  201|   106k|	( w += f(x, y, z) + data,  w = w<<s | w>>(32-s),  w += x )
  |  |  ------------------
  |  |  |  |  241|   106k|    MD5STEP(F2, b, c, d, a, in[4] + 0xe7d3fbc8, 20);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|   106k|#define F2(x, y, z) F1(z, x, y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  194|   106k|#define F1(x, y, z) (z ^ (x & (y ^ z)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  242|   106k|    MD5STEP(F2, a, b, c, d, in[9] + 0x21e1cde6, 5);
  ------------------
  |  |  201|   106k|	( w += f(x, y, z) + data,  w = w<<s | w>>(32-s),  w += x )
  |  |  ------------------
  |  |  |  |  242|   106k|    MD5STEP(F2, a, b, c, d, in[9] + 0x21e1cde6, 5);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|   106k|#define F2(x, y, z) F1(z, x, y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  194|   106k|#define F1(x, y, z) (z ^ (x & (y ^ z)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  243|   106k|    MD5STEP(F2, d, a, b, c, in[14] + 0xc33707d6, 9);
  ------------------
  |  |  201|   106k|	( w += f(x, y, z) + data,  w = w<<s | w>>(32-s),  w += x )
  |  |  ------------------
  |  |  |  |  243|   106k|    MD5STEP(F2, d, a, b, c, in[14] + 0xc33707d6, 9);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|   106k|#define F2(x, y, z) F1(z, x, y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  194|   106k|#define F1(x, y, z) (z ^ (x & (y ^ z)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  244|   106k|    MD5STEP(F2, c, d, a, b, in[3] + 0xf4d50d87, 14);
  ------------------
  |  |  201|   106k|	( w += f(x, y, z) + data,  w = w<<s | w>>(32-s),  w += x )
  |  |  ------------------
  |  |  |  |  244|   106k|    MD5STEP(F2, c, d, a, b, in[3] + 0xf4d50d87, 14);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|   106k|#define F2(x, y, z) F1(z, x, y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  194|   106k|#define F1(x, y, z) (z ^ (x & (y ^ z)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  245|   106k|    MD5STEP(F2, b, c, d, a, in[8] + 0x455a14ed, 20);
  ------------------
  |  |  201|   106k|	( w += f(x, y, z) + data,  w = w<<s | w>>(32-s),  w += x )
  |  |  ------------------
  |  |  |  |  245|   106k|    MD5STEP(F2, b, c, d, a, in[8] + 0x455a14ed, 20);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|   106k|#define F2(x, y, z) F1(z, x, y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  194|   106k|#define F1(x, y, z) (z ^ (x & (y ^ z)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  246|   106k|    MD5STEP(F2, a, b, c, d, in[13] + 0xa9e3e905, 5);
  ------------------
  |  |  201|   106k|	( w += f(x, y, z) + data,  w = w<<s | w>>(32-s),  w += x )
  |  |  ------------------
  |  |  |  |  246|   106k|    MD5STEP(F2, a, b, c, d, in[13] + 0xa9e3e905, 5);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|   106k|#define F2(x, y, z) F1(z, x, y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  194|   106k|#define F1(x, y, z) (z ^ (x & (y ^ z)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  247|   106k|    MD5STEP(F2, d, a, b, c, in[2] + 0xfcefa3f8, 9);
  ------------------
  |  |  201|   106k|	( w += f(x, y, z) + data,  w = w<<s | w>>(32-s),  w += x )
  |  |  ------------------
  |  |  |  |  247|   106k|    MD5STEP(F2, d, a, b, c, in[2] + 0xfcefa3f8, 9);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|   106k|#define F2(x, y, z) F1(z, x, y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  194|   106k|#define F1(x, y, z) (z ^ (x & (y ^ z)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  248|   106k|    MD5STEP(F2, c, d, a, b, in[7] + 0x676f02d9, 14);
  ------------------
  |  |  201|   106k|	( w += f(x, y, z) + data,  w = w<<s | w>>(32-s),  w += x )
  |  |  ------------------
  |  |  |  |  248|   106k|    MD5STEP(F2, c, d, a, b, in[7] + 0x676f02d9, 14);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|   106k|#define F2(x, y, z) F1(z, x, y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  194|   106k|#define F1(x, y, z) (z ^ (x & (y ^ z)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  249|   106k|    MD5STEP(F2, b, c, d, a, in[12] + 0x8d2a4c8a, 20);
  ------------------
  |  |  201|   106k|	( w += f(x, y, z) + data,  w = w<<s | w>>(32-s),  w += x )
  |  |  ------------------
  |  |  |  |  249|   106k|    MD5STEP(F2, b, c, d, a, in[12] + 0x8d2a4c8a, 20);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|   106k|#define F2(x, y, z) F1(z, x, y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  194|   106k|#define F1(x, y, z) (z ^ (x & (y ^ z)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|       |
  251|   106k|    MD5STEP(F3, a, b, c, d, in[5] + 0xfffa3942, 4);
  ------------------
  |  |  201|   106k|	( w += f(x, y, z) + data,  w = w<<s | w>>(32-s),  w += x )
  |  |  ------------------
  |  |  |  |  251|   106k|    MD5STEP(F3, a, b, c, d, in[5] + 0xfffa3942, 4);
  |  |  |  |  ------------------
  |  |  |  |  |  |  196|   106k|#define F3(x, y, z) (x ^ y ^ z)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  252|   106k|    MD5STEP(F3, d, a, b, c, in[8] + 0x8771f681, 11);
  ------------------
  |  |  201|   106k|	( w += f(x, y, z) + data,  w = w<<s | w>>(32-s),  w += x )
  |  |  ------------------
  |  |  |  |  252|   106k|    MD5STEP(F3, d, a, b, c, in[8] + 0x8771f681, 11);
  |  |  |  |  ------------------
  |  |  |  |  |  |  196|   106k|#define F3(x, y, z) (x ^ y ^ z)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  253|   106k|    MD5STEP(F3, c, d, a, b, in[11] + 0x6d9d6122, 16);
  ------------------
  |  |  201|   106k|	( w += f(x, y, z) + data,  w = w<<s | w>>(32-s),  w += x )
  |  |  ------------------
  |  |  |  |  253|   106k|    MD5STEP(F3, c, d, a, b, in[11] + 0x6d9d6122, 16);
  |  |  |  |  ------------------
  |  |  |  |  |  |  196|   106k|#define F3(x, y, z) (x ^ y ^ z)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  254|   106k|    MD5STEP(F3, b, c, d, a, in[14] + 0xfde5380c, 23);
  ------------------
  |  |  201|   106k|	( w += f(x, y, z) + data,  w = w<<s | w>>(32-s),  w += x )
  |  |  ------------------
  |  |  |  |  254|   106k|    MD5STEP(F3, b, c, d, a, in[14] + 0xfde5380c, 23);
  |  |  |  |  ------------------
  |  |  |  |  |  |  196|   106k|#define F3(x, y, z) (x ^ y ^ z)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  255|   106k|    MD5STEP(F3, a, b, c, d, in[1] + 0xa4beea44, 4);
  ------------------
  |  |  201|   106k|	( w += f(x, y, z) + data,  w = w<<s | w>>(32-s),  w += x )
  |  |  ------------------
  |  |  |  |  255|   106k|    MD5STEP(F3, a, b, c, d, in[1] + 0xa4beea44, 4);
  |  |  |  |  ------------------
  |  |  |  |  |  |  196|   106k|#define F3(x, y, z) (x ^ y ^ z)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  256|   106k|    MD5STEP(F3, d, a, b, c, in[4] + 0x4bdecfa9, 11);
  ------------------
  |  |  201|   106k|	( w += f(x, y, z) + data,  w = w<<s | w>>(32-s),  w += x )
  |  |  ------------------
  |  |  |  |  256|   106k|    MD5STEP(F3, d, a, b, c, in[4] + 0x4bdecfa9, 11);
  |  |  |  |  ------------------
  |  |  |  |  |  |  196|   106k|#define F3(x, y, z) (x ^ y ^ z)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  257|   106k|    MD5STEP(F3, c, d, a, b, in[7] + 0xf6bb4b60, 16);
  ------------------
  |  |  201|   106k|	( w += f(x, y, z) + data,  w = w<<s | w>>(32-s),  w += x )
  |  |  ------------------
  |  |  |  |  257|   106k|    MD5STEP(F3, c, d, a, b, in[7] + 0xf6bb4b60, 16);
  |  |  |  |  ------------------
  |  |  |  |  |  |  196|   106k|#define F3(x, y, z) (x ^ y ^ z)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  258|   106k|    MD5STEP(F3, b, c, d, a, in[10] + 0xbebfbc70, 23);
  ------------------
  |  |  201|   106k|	( w += f(x, y, z) + data,  w = w<<s | w>>(32-s),  w += x )
  |  |  ------------------
  |  |  |  |  258|   106k|    MD5STEP(F3, b, c, d, a, in[10] + 0xbebfbc70, 23);
  |  |  |  |  ------------------
  |  |  |  |  |  |  196|   106k|#define F3(x, y, z) (x ^ y ^ z)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  259|   106k|    MD5STEP(F3, a, b, c, d, in[13] + 0x289b7ec6, 4);
  ------------------
  |  |  201|   106k|	( w += f(x, y, z) + data,  w = w<<s | w>>(32-s),  w += x )
  |  |  ------------------
  |  |  |  |  259|   106k|    MD5STEP(F3, a, b, c, d, in[13] + 0x289b7ec6, 4);
  |  |  |  |  ------------------
  |  |  |  |  |  |  196|   106k|#define F3(x, y, z) (x ^ y ^ z)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  260|   106k|    MD5STEP(F3, d, a, b, c, in[0] + 0xeaa127fa, 11);
  ------------------
  |  |  201|   106k|	( w += f(x, y, z) + data,  w = w<<s | w>>(32-s),  w += x )
  |  |  ------------------
  |  |  |  |  260|   106k|    MD5STEP(F3, d, a, b, c, in[0] + 0xeaa127fa, 11);
  |  |  |  |  ------------------
  |  |  |  |  |  |  196|   106k|#define F3(x, y, z) (x ^ y ^ z)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  261|   106k|    MD5STEP(F3, c, d, a, b, in[3] + 0xd4ef3085, 16);
  ------------------
  |  |  201|   106k|	( w += f(x, y, z) + data,  w = w<<s | w>>(32-s),  w += x )
  |  |  ------------------
  |  |  |  |  261|   106k|    MD5STEP(F3, c, d, a, b, in[3] + 0xd4ef3085, 16);
  |  |  |  |  ------------------
  |  |  |  |  |  |  196|   106k|#define F3(x, y, z) (x ^ y ^ z)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  262|   106k|    MD5STEP(F3, b, c, d, a, in[6] + 0x04881d05, 23);
  ------------------
  |  |  201|   106k|	( w += f(x, y, z) + data,  w = w<<s | w>>(32-s),  w += x )
  |  |  ------------------
  |  |  |  |  262|   106k|    MD5STEP(F3, b, c, d, a, in[6] + 0x04881d05, 23);
  |  |  |  |  ------------------
  |  |  |  |  |  |  196|   106k|#define F3(x, y, z) (x ^ y ^ z)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  263|   106k|    MD5STEP(F3, a, b, c, d, in[9] + 0xd9d4d039, 4);
  ------------------
  |  |  201|   106k|	( w += f(x, y, z) + data,  w = w<<s | w>>(32-s),  w += x )
  |  |  ------------------
  |  |  |  |  263|   106k|    MD5STEP(F3, a, b, c, d, in[9] + 0xd9d4d039, 4);
  |  |  |  |  ------------------
  |  |  |  |  |  |  196|   106k|#define F3(x, y, z) (x ^ y ^ z)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  264|   106k|    MD5STEP(F3, d, a, b, c, in[12] + 0xe6db99e5, 11);
  ------------------
  |  |  201|   106k|	( w += f(x, y, z) + data,  w = w<<s | w>>(32-s),  w += x )
  |  |  ------------------
  |  |  |  |  264|   106k|    MD5STEP(F3, d, a, b, c, in[12] + 0xe6db99e5, 11);
  |  |  |  |  ------------------
  |  |  |  |  |  |  196|   106k|#define F3(x, y, z) (x ^ y ^ z)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  265|   106k|    MD5STEP(F3, c, d, a, b, in[15] + 0x1fa27cf8, 16);
  ------------------
  |  |  201|   106k|	( w += f(x, y, z) + data,  w = w<<s | w>>(32-s),  w += x )
  |  |  ------------------
  |  |  |  |  265|   106k|    MD5STEP(F3, c, d, a, b, in[15] + 0x1fa27cf8, 16);
  |  |  |  |  ------------------
  |  |  |  |  |  |  196|   106k|#define F3(x, y, z) (x ^ y ^ z)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  266|   106k|    MD5STEP(F3, b, c, d, a, in[2] + 0xc4ac5665, 23);
  ------------------
  |  |  201|   106k|	( w += f(x, y, z) + data,  w = w<<s | w>>(32-s),  w += x )
  |  |  ------------------
  |  |  |  |  266|   106k|    MD5STEP(F3, b, c, d, a, in[2] + 0xc4ac5665, 23);
  |  |  |  |  ------------------
  |  |  |  |  |  |  196|   106k|#define F3(x, y, z) (x ^ y ^ z)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  267|       |
  268|   106k|    MD5STEP(F4, a, b, c, d, in[0] + 0xf4292244, 6);
  ------------------
  |  |  201|   106k|	( w += f(x, y, z) + data,  w = w<<s | w>>(32-s),  w += x )
  |  |  ------------------
  |  |  |  |  268|   106k|    MD5STEP(F4, a, b, c, d, in[0] + 0xf4292244, 6);
  |  |  |  |  ------------------
  |  |  |  |  |  |  197|   106k|#define F4(x, y, z) (y ^ (x | ~z))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  269|   106k|    MD5STEP(F4, d, a, b, c, in[7] + 0x432aff97, 10);
  ------------------
  |  |  201|   106k|	( w += f(x, y, z) + data,  w = w<<s | w>>(32-s),  w += x )
  |  |  ------------------
  |  |  |  |  269|   106k|    MD5STEP(F4, d, a, b, c, in[7] + 0x432aff97, 10);
  |  |  |  |  ------------------
  |  |  |  |  |  |  197|   106k|#define F4(x, y, z) (y ^ (x | ~z))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  270|   106k|    MD5STEP(F4, c, d, a, b, in[14] + 0xab9423a7, 15);
  ------------------
  |  |  201|   106k|	( w += f(x, y, z) + data,  w = w<<s | w>>(32-s),  w += x )
  |  |  ------------------
  |  |  |  |  270|   106k|    MD5STEP(F4, c, d, a, b, in[14] + 0xab9423a7, 15);
  |  |  |  |  ------------------
  |  |  |  |  |  |  197|   106k|#define F4(x, y, z) (y ^ (x | ~z))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  271|   106k|    MD5STEP(F4, b, c, d, a, in[5] + 0xfc93a039, 21);
  ------------------
  |  |  201|   106k|	( w += f(x, y, z) + data,  w = w<<s | w>>(32-s),  w += x )
  |  |  ------------------
  |  |  |  |  271|   106k|    MD5STEP(F4, b, c, d, a, in[5] + 0xfc93a039, 21);
  |  |  |  |  ------------------
  |  |  |  |  |  |  197|   106k|#define F4(x, y, z) (y ^ (x | ~z))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  272|   106k|    MD5STEP(F4, a, b, c, d, in[12] + 0x655b59c3, 6);
  ------------------
  |  |  201|   106k|	( w += f(x, y, z) + data,  w = w<<s | w>>(32-s),  w += x )
  |  |  ------------------
  |  |  |  |  272|   106k|    MD5STEP(F4, a, b, c, d, in[12] + 0x655b59c3, 6);
  |  |  |  |  ------------------
  |  |  |  |  |  |  197|   106k|#define F4(x, y, z) (y ^ (x | ~z))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  273|   106k|    MD5STEP(F4, d, a, b, c, in[3] + 0x8f0ccc92, 10);
  ------------------
  |  |  201|   106k|	( w += f(x, y, z) + data,  w = w<<s | w>>(32-s),  w += x )
  |  |  ------------------
  |  |  |  |  273|   106k|    MD5STEP(F4, d, a, b, c, in[3] + 0x8f0ccc92, 10);
  |  |  |  |  ------------------
  |  |  |  |  |  |  197|   106k|#define F4(x, y, z) (y ^ (x | ~z))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  274|   106k|    MD5STEP(F4, c, d, a, b, in[10] + 0xffeff47d, 15);
  ------------------
  |  |  201|   106k|	( w += f(x, y, z) + data,  w = w<<s | w>>(32-s),  w += x )
  |  |  ------------------
  |  |  |  |  274|   106k|    MD5STEP(F4, c, d, a, b, in[10] + 0xffeff47d, 15);
  |  |  |  |  ------------------
  |  |  |  |  |  |  197|   106k|#define F4(x, y, z) (y ^ (x | ~z))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  275|   106k|    MD5STEP(F4, b, c, d, a, in[1] + 0x85845dd1, 21);
  ------------------
  |  |  201|   106k|	( w += f(x, y, z) + data,  w = w<<s | w>>(32-s),  w += x )
  |  |  ------------------
  |  |  |  |  275|   106k|    MD5STEP(F4, b, c, d, a, in[1] + 0x85845dd1, 21);
  |  |  |  |  ------------------
  |  |  |  |  |  |  197|   106k|#define F4(x, y, z) (y ^ (x | ~z))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  276|   106k|    MD5STEP(F4, a, b, c, d, in[8] + 0x6fa87e4f, 6);
  ------------------
  |  |  201|   106k|	( w += f(x, y, z) + data,  w = w<<s | w>>(32-s),  w += x )
  |  |  ------------------
  |  |  |  |  276|   106k|    MD5STEP(F4, a, b, c, d, in[8] + 0x6fa87e4f, 6);
  |  |  |  |  ------------------
  |  |  |  |  |  |  197|   106k|#define F4(x, y, z) (y ^ (x | ~z))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  277|   106k|    MD5STEP(F4, d, a, b, c, in[15] + 0xfe2ce6e0, 10);
  ------------------
  |  |  201|   106k|	( w += f(x, y, z) + data,  w = w<<s | w>>(32-s),  w += x )
  |  |  ------------------
  |  |  |  |  277|   106k|    MD5STEP(F4, d, a, b, c, in[15] + 0xfe2ce6e0, 10);
  |  |  |  |  ------------------
  |  |  |  |  |  |  197|   106k|#define F4(x, y, z) (y ^ (x | ~z))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  278|   106k|    MD5STEP(F4, c, d, a, b, in[6] + 0xa3014314, 15);
  ------------------
  |  |  201|   106k|	( w += f(x, y, z) + data,  w = w<<s | w>>(32-s),  w += x )
  |  |  ------------------
  |  |  |  |  278|   106k|    MD5STEP(F4, c, d, a, b, in[6] + 0xa3014314, 15);
  |  |  |  |  ------------------
  |  |  |  |  |  |  197|   106k|#define F4(x, y, z) (y ^ (x | ~z))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  279|   106k|    MD5STEP(F4, b, c, d, a, in[13] + 0x4e0811a1, 21);
  ------------------
  |  |  201|   106k|	( w += f(x, y, z) + data,  w = w<<s | w>>(32-s),  w += x )
  |  |  ------------------
  |  |  |  |  279|   106k|    MD5STEP(F4, b, c, d, a, in[13] + 0x4e0811a1, 21);
  |  |  |  |  ------------------
  |  |  |  |  |  |  197|   106k|#define F4(x, y, z) (y ^ (x | ~z))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  280|   106k|    MD5STEP(F4, a, b, c, d, in[4] + 0xf7537e82, 6);
  ------------------
  |  |  201|   106k|	( w += f(x, y, z) + data,  w = w<<s | w>>(32-s),  w += x )
  |  |  ------------------
  |  |  |  |  280|   106k|    MD5STEP(F4, a, b, c, d, in[4] + 0xf7537e82, 6);
  |  |  |  |  ------------------
  |  |  |  |  |  |  197|   106k|#define F4(x, y, z) (y ^ (x | ~z))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  281|   106k|    MD5STEP(F4, d, a, b, c, in[11] + 0xbd3af235, 10);
  ------------------
  |  |  201|   106k|	( w += f(x, y, z) + data,  w = w<<s | w>>(32-s),  w += x )
  |  |  ------------------
  |  |  |  |  281|   106k|    MD5STEP(F4, d, a, b, c, in[11] + 0xbd3af235, 10);
  |  |  |  |  ------------------
  |  |  |  |  |  |  197|   106k|#define F4(x, y, z) (y ^ (x | ~z))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  282|   106k|    MD5STEP(F4, c, d, a, b, in[2] + 0x2ad7d2bb, 15);
  ------------------
  |  |  201|   106k|	( w += f(x, y, z) + data,  w = w<<s | w>>(32-s),  w += x )
  |  |  ------------------
  |  |  |  |  282|   106k|    MD5STEP(F4, c, d, a, b, in[2] + 0x2ad7d2bb, 15);
  |  |  |  |  ------------------
  |  |  |  |  |  |  197|   106k|#define F4(x, y, z) (y ^ (x | ~z))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  283|   106k|    MD5STEP(F4, b, c, d, a, in[9] + 0xeb86d391, 21);
  ------------------
  |  |  201|   106k|	( w += f(x, y, z) + data,  w = w<<s | w>>(32-s),  w += x )
  |  |  ------------------
  |  |  |  |  283|   106k|    MD5STEP(F4, b, c, d, a, in[9] + 0xeb86d391, 21);
  |  |  |  |  ------------------
  |  |  |  |  |  |  197|   106k|#define F4(x, y, z) (y ^ (x | ~z))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  284|       |
  285|   106k|    buf[0] += a;
  286|   106k|    buf[1] += b;
  287|   106k|    buf[2] += c;
  288|   106k|    buf[3] += d;
  289|   106k|}

hmac_md5_vector:
   28|  6.03k|{
   29|  6.03k|	u8 k_pad[64]; /* padding - key XORd with ipad/opad */
   30|  6.03k|	u8 tk[16];
   31|  6.03k|	const u8 *_addr[6];
   32|  6.03k|	size_t i, _len[6];
   33|  6.03k|	int res;
   34|       |
   35|  6.03k|	if (num_elem > 5) {
  ------------------
  |  Branch (35:6): [True: 0, False: 6.03k]
  ------------------
   36|       |		/*
   37|       |		 * Fixed limit on the number of fragments to avoid having to
   38|       |		 * allocate memory (which could fail).
   39|       |		 */
   40|      0|		return -1;
   41|      0|	}
   42|       |
   43|       |        /* if key is longer than 64 bytes reset it to key = MD5(key) */
   44|  6.03k|        if (key_len > 64) {
  ------------------
  |  Branch (44:13): [True: 0, False: 6.03k]
  ------------------
   45|      0|		if (md5_vector(1, &key, &key_len, tk))
  ------------------
  |  Branch (45:7): [True: 0, False: 0]
  ------------------
   46|      0|			return -1;
   47|      0|		key = tk;
   48|      0|		key_len = 16;
   49|      0|        }
   50|       |
   51|       |	/* the HMAC_MD5 transform looks like:
   52|       |	 *
   53|       |	 * MD5(K XOR opad, MD5(K XOR ipad, text))
   54|       |	 *
   55|       |	 * where K is an n byte key
   56|       |	 * ipad is the byte 0x36 repeated 64 times
   57|       |	 * opad is the byte 0x5c repeated 64 times
   58|       |	 * and text is the data being protected */
   59|       |
   60|       |	/* start out by storing key in ipad */
   61|  6.03k|	os_memset(k_pad, 0, sizeof(k_pad));
  ------------------
  |  |  529|  6.03k|#define os_memset(s, c, n) memset(s, c, n)
  ------------------
   62|  6.03k|	os_memcpy(k_pad, key, key_len);
  ------------------
  |  |  523|  6.03k|#define os_memcpy(d, s, n) memcpy((d), (s), (n))
  ------------------
   63|       |
   64|       |	/* XOR key with ipad values */
   65|   392k|	for (i = 0; i < 64; i++)
  ------------------
  |  Branch (65:14): [True: 386k, False: 6.03k]
  ------------------
   66|   386k|		k_pad[i] ^= 0x36;
   67|       |
   68|       |	/* perform inner MD5 */
   69|  6.03k|	_addr[0] = k_pad;
   70|  6.03k|	_len[0] = 64;
   71|  18.0k|	for (i = 0; i < num_elem; i++) {
  ------------------
  |  Branch (71:14): [True: 12.0k, False: 6.03k]
  ------------------
   72|  12.0k|		_addr[i + 1] = addr[i];
   73|  12.0k|		_len[i + 1] = len[i];
   74|  12.0k|	}
   75|  6.03k|	if (md5_vector(1 + num_elem, _addr, _len, mac))
  ------------------
  |  Branch (75:6): [True: 0, False: 6.03k]
  ------------------
   76|      0|		return -1;
   77|       |
   78|  6.03k|	os_memset(k_pad, 0, sizeof(k_pad));
  ------------------
  |  |  529|  6.03k|#define os_memset(s, c, n) memset(s, c, n)
  ------------------
   79|  6.03k|	os_memcpy(k_pad, key, key_len);
  ------------------
  |  |  523|  6.03k|#define os_memcpy(d, s, n) memcpy((d), (s), (n))
  ------------------
   80|       |	/* XOR key with opad values */
   81|   392k|	for (i = 0; i < 64; i++)
  ------------------
  |  Branch (81:14): [True: 386k, False: 6.03k]
  ------------------
   82|   386k|		k_pad[i] ^= 0x5c;
   83|       |
   84|       |	/* perform outer MD5 */
   85|  6.03k|	_addr[0] = k_pad;
   86|  6.03k|	_len[0] = 64;
   87|  6.03k|	_addr[1] = mac;
   88|  6.03k|	_len[1] = MD5_MAC_LEN;
  ------------------
  |  |   12|  6.03k|#define MD5_MAC_LEN 16
  ------------------
   89|  6.03k|	res = md5_vector(2, _addr, _len, mac);
   90|  6.03k|	os_memset(k_pad, 0, sizeof(k_pad));
  ------------------
  |  |  529|  6.03k|#define os_memset(s, c, n) memset(s, c, n)
  ------------------
   91|  6.03k|	os_memset(tk, 0, sizeof(tk));
  ------------------
  |  |  529|  6.03k|#define os_memset(s, c, n) memset(s, c, n)
  ------------------
   92|  6.03k|	return res;
   93|  6.03k|}
hmac_md5:
  107|  2.65k|{
  108|  2.65k|	return hmac_md5_vector(key, key_len, 1, &data, &data_len, mac);
  109|  2.65k|}

rc4_skip:
   18|  6.15k|{
   19|  6.15k|	u32 i, j, k;
   20|  6.15k|	u8 S[256], *pos;
   21|  6.15k|	size_t kpos;
   22|       |
   23|       |	/* Setup RC4 state */
   24|  1.58M|	for (i = 0; i < 256; i++)
  ------------------
  |  Branch (24:14): [True: 1.57M, False: 6.15k]
  ------------------
   25|  1.57M|		S[i] = i;
   26|  6.15k|	j = 0;
   27|  6.15k|	kpos = 0;
   28|  1.58M|	for (i = 0; i < 256; i++) {
  ------------------
  |  Branch (28:14): [True: 1.57M, False: 6.15k]
  ------------------
   29|  1.57M|		j = (j + S[i] + key[kpos]) & 0xff;
   30|  1.57M|		kpos++;
   31|  1.57M|		if (kpos >= keylen)
  ------------------
  |  Branch (31:7): [True: 98.4k, False: 1.47M]
  ------------------
   32|  98.4k|			kpos = 0;
   33|  1.57M|		S_SWAP(i, j);
  ------------------
  |  |   14|  1.57M|#define S_SWAP(a,b) do { u8 t = S[a]; S[a] = S[b]; S[b] = t; } while(0)
  |  |  ------------------
  |  |  |  Branch (14:70): [Folded, False: 1.57M]
  |  |  ------------------
  ------------------
   34|  1.57M|	}
   35|       |
   36|       |	/* Skip the start of the stream */
   37|  6.15k|	i = j = 0;
   38|  8.10M|	for (k = 0; k < skip; k++) {
  ------------------
  |  Branch (38:14): [True: 8.09M, False: 6.15k]
  ------------------
   39|  8.09M|		i = (i + 1) & 0xff;
   40|  8.09M|		j = (j + S[i]) & 0xff;
   41|  8.09M|		S_SWAP(i, j);
  ------------------
  |  |   14|  8.09M|#define S_SWAP(a,b) do { u8 t = S[a]; S[a] = S[b]; S[b] = t; } while(0)
  |  |  ------------------
  |  |  |  Branch (14:70): [Folded, False: 8.09M]
  |  |  ------------------
  ------------------
   42|  8.09M|	}
   43|       |
   44|       |	/* Apply RC4 to data */
   45|  6.15k|	pos = data;
   46|   146k|	for (k = 0; k < data_len; k++) {
  ------------------
  |  Branch (46:14): [True: 139k, False: 6.15k]
  ------------------
   47|   139k|		i = (i + 1) & 0xff;
   48|   139k|		j = (j + S[i]) & 0xff;
   49|   139k|		S_SWAP(i, j);
  ------------------
  |  |   14|   139k|#define S_SWAP(a,b) do { u8 t = S[a]; S[a] = S[b]; S[b] = t; } while(0)
  |  |  ------------------
  |  |  |  Branch (14:70): [Folded, False: 139k]
  |  |  ------------------
  ------------------
   50|   139k|		*pos++ ^= S[(S[i] + S[j]) & 0xff];
   51|   139k|	}
   52|       |
   53|  6.15k|	return 0;
   54|  6.15k|}

sha1_vector:
   32|  11.0k|{
   33|  11.0k|	SHA1_CTX ctx;
   34|  11.0k|	size_t i;
   35|       |
   36|  11.0k|	if (TEST_FAIL())
  ------------------
  |  |  688|  11.0k|#define TEST_FAIL() testing_test_fail(NULL, false)
  |  |  ------------------
  |  |  |  Branch (688:21): [True: 0, False: 11.0k]
  |  |  ------------------
  ------------------
   37|      0|		return -1;
   38|       |
   39|  11.0k|	SHA1Init(&ctx);
   40|  38.6k|	for (i = 0; i < num_elem; i++)
  ------------------
  |  Branch (40:14): [True: 27.6k, False: 11.0k]
  ------------------
   41|  27.6k|		SHA1Update(&ctx, addr[i], len[i]);
   42|  11.0k|	SHA1Final(mac, &ctx);
   43|  11.0k|	return 0;
   44|  11.0k|}
SHA1Transform:
  177|   101k|{
  178|   101k|	u32 a, b, c, d, e;
  179|   101k|	typedef union {
  180|   101k|		unsigned char c[64];
  181|   101k|		u32 l[16];
  182|   101k|	} CHAR64LONG16;
  183|   101k|	CHAR64LONG16* block;
  184|   101k|#ifdef SHA1HANDSOFF
  185|   101k|	CHAR64LONG16 workspace;
  186|   101k|	block = &workspace;
  187|   101k|	os_memcpy(block, buffer, 64);
  ------------------
  |  |  523|   101k|#define os_memcpy(d, s, n) memcpy((d), (s), (n))
  ------------------
  188|       |#else
  189|       |	block = (CHAR64LONG16 *) buffer;
  190|       |#endif
  191|       |	/* Copy context->state[] to working vars */
  192|   101k|	a = state[0];
  193|   101k|	b = state[1];
  194|   101k|	c = state[2];
  195|   101k|	d = state[3];
  196|   101k|	e = state[4];
  197|       |	/* 4 rounds of 20 operations each. Loop unrolled. */
  198|   101k|	R0(a,b,c,d,e, 0); R0(e,a,b,c,d, 1); R0(d,e,a,b,c, 2); R0(c,d,e,a,b, 3);
  ------------------
  |  |  145|   101k|	z += ((w & (x ^ y)) ^ y) + blk0(i) + 0x5A827999 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  135|   101k|#define blk0(i) (block->l[i] = (rol(block->l[i], 24) & 0xFF00FF00) | \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  136|   101k|	(rol(block->l[i], 8) & 0x00FF00FF))
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               	z += ((w & (x ^ y)) ^ y) + blk0(i) + 0x5A827999 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |  146|   101k|	w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
              	R0(a,b,c,d,e, 0); R0(e,a,b,c,d, 1); R0(d,e,a,b,c, 2); R0(c,d,e,a,b, 3);
  ------------------
  |  |  145|   101k|	z += ((w & (x ^ y)) ^ y) + blk0(i) + 0x5A827999 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  135|   101k|#define blk0(i) (block->l[i] = (rol(block->l[i], 24) & 0xFF00FF00) | \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  136|   101k|	(rol(block->l[i], 8) & 0x00FF00FF))
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               	z += ((w & (x ^ y)) ^ y) + blk0(i) + 0x5A827999 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |  146|   101k|	w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
              	R0(a,b,c,d,e, 0); R0(e,a,b,c,d, 1); R0(d,e,a,b,c, 2); R0(c,d,e,a,b, 3);
  ------------------
  |  |  145|   101k|	z += ((w & (x ^ y)) ^ y) + blk0(i) + 0x5A827999 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  135|   101k|#define blk0(i) (block->l[i] = (rol(block->l[i], 24) & 0xFF00FF00) | \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  136|   101k|	(rol(block->l[i], 8) & 0x00FF00FF))
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               	z += ((w & (x ^ y)) ^ y) + blk0(i) + 0x5A827999 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |  146|   101k|	w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
              	R0(a,b,c,d,e, 0); R0(e,a,b,c,d, 1); R0(d,e,a,b,c, 2); R0(c,d,e,a,b, 3);
  ------------------
  |  |  145|   101k|	z += ((w & (x ^ y)) ^ y) + blk0(i) + 0x5A827999 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  135|   101k|#define blk0(i) (block->l[i] = (rol(block->l[i], 24) & 0xFF00FF00) | \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  136|   101k|	(rol(block->l[i], 8) & 0x00FF00FF))
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               	z += ((w & (x ^ y)) ^ y) + blk0(i) + 0x5A827999 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |  146|   101k|	w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
  199|   101k|	R0(b,c,d,e,a, 4); R0(a,b,c,d,e, 5); R0(e,a,b,c,d, 6); R0(d,e,a,b,c, 7);
  ------------------
  |  |  145|   101k|	z += ((w & (x ^ y)) ^ y) + blk0(i) + 0x5A827999 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  135|   101k|#define blk0(i) (block->l[i] = (rol(block->l[i], 24) & 0xFF00FF00) | \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  136|   101k|	(rol(block->l[i], 8) & 0x00FF00FF))
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               	z += ((w & (x ^ y)) ^ y) + blk0(i) + 0x5A827999 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |  146|   101k|	w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
              	R0(b,c,d,e,a, 4); R0(a,b,c,d,e, 5); R0(e,a,b,c,d, 6); R0(d,e,a,b,c, 7);
  ------------------
  |  |  145|   101k|	z += ((w & (x ^ y)) ^ y) + blk0(i) + 0x5A827999 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  135|   101k|#define blk0(i) (block->l[i] = (rol(block->l[i], 24) & 0xFF00FF00) | \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  136|   101k|	(rol(block->l[i], 8) & 0x00FF00FF))
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               	z += ((w & (x ^ y)) ^ y) + blk0(i) + 0x5A827999 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |  146|   101k|	w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
              	R0(b,c,d,e,a, 4); R0(a,b,c,d,e, 5); R0(e,a,b,c,d, 6); R0(d,e,a,b,c, 7);
  ------------------
  |  |  145|   101k|	z += ((w & (x ^ y)) ^ y) + blk0(i) + 0x5A827999 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  135|   101k|#define blk0(i) (block->l[i] = (rol(block->l[i], 24) & 0xFF00FF00) | \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  136|   101k|	(rol(block->l[i], 8) & 0x00FF00FF))
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               	z += ((w & (x ^ y)) ^ y) + blk0(i) + 0x5A827999 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |  146|   101k|	w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
              	R0(b,c,d,e,a, 4); R0(a,b,c,d,e, 5); R0(e,a,b,c,d, 6); R0(d,e,a,b,c, 7);
  ------------------
  |  |  145|   101k|	z += ((w & (x ^ y)) ^ y) + blk0(i) + 0x5A827999 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  135|   101k|#define blk0(i) (block->l[i] = (rol(block->l[i], 24) & 0xFF00FF00) | \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  136|   101k|	(rol(block->l[i], 8) & 0x00FF00FF))
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               	z += ((w & (x ^ y)) ^ y) + blk0(i) + 0x5A827999 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |  146|   101k|	w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
  200|   101k|	R0(c,d,e,a,b, 8); R0(b,c,d,e,a, 9); R0(a,b,c,d,e,10); R0(e,a,b,c,d,11);
  ------------------
  |  |  145|   101k|	z += ((w & (x ^ y)) ^ y) + blk0(i) + 0x5A827999 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  135|   101k|#define blk0(i) (block->l[i] = (rol(block->l[i], 24) & 0xFF00FF00) | \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  136|   101k|	(rol(block->l[i], 8) & 0x00FF00FF))
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               	z += ((w & (x ^ y)) ^ y) + blk0(i) + 0x5A827999 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |  146|   101k|	w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
              	R0(c,d,e,a,b, 8); R0(b,c,d,e,a, 9); R0(a,b,c,d,e,10); R0(e,a,b,c,d,11);
  ------------------
  |  |  145|   101k|	z += ((w & (x ^ y)) ^ y) + blk0(i) + 0x5A827999 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  135|   101k|#define blk0(i) (block->l[i] = (rol(block->l[i], 24) & 0xFF00FF00) | \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  136|   101k|	(rol(block->l[i], 8) & 0x00FF00FF))
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               	z += ((w & (x ^ y)) ^ y) + blk0(i) + 0x5A827999 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |  146|   101k|	w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
              	R0(c,d,e,a,b, 8); R0(b,c,d,e,a, 9); R0(a,b,c,d,e,10); R0(e,a,b,c,d,11);
  ------------------
  |  |  145|   101k|	z += ((w & (x ^ y)) ^ y) + blk0(i) + 0x5A827999 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  135|   101k|#define blk0(i) (block->l[i] = (rol(block->l[i], 24) & 0xFF00FF00) | \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  136|   101k|	(rol(block->l[i], 8) & 0x00FF00FF))
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               	z += ((w & (x ^ y)) ^ y) + blk0(i) + 0x5A827999 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |  146|   101k|	w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
              	R0(c,d,e,a,b, 8); R0(b,c,d,e,a, 9); R0(a,b,c,d,e,10); R0(e,a,b,c,d,11);
  ------------------
  |  |  145|   101k|	z += ((w & (x ^ y)) ^ y) + blk0(i) + 0x5A827999 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  135|   101k|#define blk0(i) (block->l[i] = (rol(block->l[i], 24) & 0xFF00FF00) | \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  136|   101k|	(rol(block->l[i], 8) & 0x00FF00FF))
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               	z += ((w & (x ^ y)) ^ y) + blk0(i) + 0x5A827999 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |  146|   101k|	w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
  201|   101k|	R0(d,e,a,b,c,12); R0(c,d,e,a,b,13); R0(b,c,d,e,a,14); R0(a,b,c,d,e,15);
  ------------------
  |  |  145|   101k|	z += ((w & (x ^ y)) ^ y) + blk0(i) + 0x5A827999 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  135|   101k|#define blk0(i) (block->l[i] = (rol(block->l[i], 24) & 0xFF00FF00) | \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  136|   101k|	(rol(block->l[i], 8) & 0x00FF00FF))
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               	z += ((w & (x ^ y)) ^ y) + blk0(i) + 0x5A827999 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |  146|   101k|	w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
              	R0(d,e,a,b,c,12); R0(c,d,e,a,b,13); R0(b,c,d,e,a,14); R0(a,b,c,d,e,15);
  ------------------
  |  |  145|   101k|	z += ((w & (x ^ y)) ^ y) + blk0(i) + 0x5A827999 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  135|   101k|#define blk0(i) (block->l[i] = (rol(block->l[i], 24) & 0xFF00FF00) | \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  136|   101k|	(rol(block->l[i], 8) & 0x00FF00FF))
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               	z += ((w & (x ^ y)) ^ y) + blk0(i) + 0x5A827999 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |  146|   101k|	w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
              	R0(d,e,a,b,c,12); R0(c,d,e,a,b,13); R0(b,c,d,e,a,14); R0(a,b,c,d,e,15);
  ------------------
  |  |  145|   101k|	z += ((w & (x ^ y)) ^ y) + blk0(i) + 0x5A827999 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  135|   101k|#define blk0(i) (block->l[i] = (rol(block->l[i], 24) & 0xFF00FF00) | \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  136|   101k|	(rol(block->l[i], 8) & 0x00FF00FF))
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               	z += ((w & (x ^ y)) ^ y) + blk0(i) + 0x5A827999 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |  146|   101k|	w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
              	R0(d,e,a,b,c,12); R0(c,d,e,a,b,13); R0(b,c,d,e,a,14); R0(a,b,c,d,e,15);
  ------------------
  |  |  145|   101k|	z += ((w & (x ^ y)) ^ y) + blk0(i) + 0x5A827999 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  135|   101k|#define blk0(i) (block->l[i] = (rol(block->l[i], 24) & 0xFF00FF00) | \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  136|   101k|	(rol(block->l[i], 8) & 0x00FF00FF))
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               	z += ((w & (x ^ y)) ^ y) + blk0(i) + 0x5A827999 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |  146|   101k|	w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
  202|   101k|	R1(e,a,b,c,d,16); R1(d,e,a,b,c,17); R1(c,d,e,a,b,18); R1(b,c,d,e,a,19);
  ------------------
  |  |  148|   101k|	z += ((w & (x ^ y)) ^ y) + blk(i) + 0x5A827999 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  140|   101k|#define blk(i) (block->l[i & 15] = rol(block->l[(i + 13) & 15] ^ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  141|   101k|	block->l[(i + 8) & 15] ^ block->l[(i + 2) & 15] ^ block->l[i & 15], 1))
  |  |  ------------------
  |  |               	z += ((w & (x ^ y)) ^ y) + blk(i) + 0x5A827999 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |  149|   101k|	w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
              	R1(e,a,b,c,d,16); R1(d,e,a,b,c,17); R1(c,d,e,a,b,18); R1(b,c,d,e,a,19);
  ------------------
  |  |  148|   101k|	z += ((w & (x ^ y)) ^ y) + blk(i) + 0x5A827999 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  140|   101k|#define blk(i) (block->l[i & 15] = rol(block->l[(i + 13) & 15] ^ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  141|   101k|	block->l[(i + 8) & 15] ^ block->l[(i + 2) & 15] ^ block->l[i & 15], 1))
  |  |  ------------------
  |  |               	z += ((w & (x ^ y)) ^ y) + blk(i) + 0x5A827999 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |  149|   101k|	w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
              	R1(e,a,b,c,d,16); R1(d,e,a,b,c,17); R1(c,d,e,a,b,18); R1(b,c,d,e,a,19);
  ------------------
  |  |  148|   101k|	z += ((w & (x ^ y)) ^ y) + blk(i) + 0x5A827999 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  140|   101k|#define blk(i) (block->l[i & 15] = rol(block->l[(i + 13) & 15] ^ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  141|   101k|	block->l[(i + 8) & 15] ^ block->l[(i + 2) & 15] ^ block->l[i & 15], 1))
  |  |  ------------------
  |  |               	z += ((w & (x ^ y)) ^ y) + blk(i) + 0x5A827999 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |  149|   101k|	w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
              	R1(e,a,b,c,d,16); R1(d,e,a,b,c,17); R1(c,d,e,a,b,18); R1(b,c,d,e,a,19);
  ------------------
  |  |  148|   101k|	z += ((w & (x ^ y)) ^ y) + blk(i) + 0x5A827999 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  140|   101k|#define blk(i) (block->l[i & 15] = rol(block->l[(i + 13) & 15] ^ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  141|   101k|	block->l[(i + 8) & 15] ^ block->l[(i + 2) & 15] ^ block->l[i & 15], 1))
  |  |  ------------------
  |  |               	z += ((w & (x ^ y)) ^ y) + blk(i) + 0x5A827999 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |  149|   101k|	w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
  203|   101k|	R2(a,b,c,d,e,20); R2(e,a,b,c,d,21); R2(d,e,a,b,c,22); R2(c,d,e,a,b,23);
  ------------------
  |  |  151|   101k|	z += (w ^ x ^ y) + blk(i) + 0x6ED9EBA1 + rol(v, 5); w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  140|   101k|#define blk(i) (block->l[i & 15] = rol(block->l[(i + 13) & 15] ^ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  141|   101k|	block->l[(i + 8) & 15] ^ block->l[(i + 2) & 15] ^ block->l[i & 15], 1))
  |  |  ------------------
  |  |               	z += (w ^ x ^ y) + blk(i) + 0x6ED9EBA1 + rol(v, 5); w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |               	z += (w ^ x ^ y) + blk(i) + 0x6ED9EBA1 + rol(v, 5); w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
              	R2(a,b,c,d,e,20); R2(e,a,b,c,d,21); R2(d,e,a,b,c,22); R2(c,d,e,a,b,23);
  ------------------
  |  |  151|   101k|	z += (w ^ x ^ y) + blk(i) + 0x6ED9EBA1 + rol(v, 5); w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  140|   101k|#define blk(i) (block->l[i & 15] = rol(block->l[(i + 13) & 15] ^ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  141|   101k|	block->l[(i + 8) & 15] ^ block->l[(i + 2) & 15] ^ block->l[i & 15], 1))
  |  |  ------------------
  |  |               	z += (w ^ x ^ y) + blk(i) + 0x6ED9EBA1 + rol(v, 5); w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |               	z += (w ^ x ^ y) + blk(i) + 0x6ED9EBA1 + rol(v, 5); w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
              	R2(a,b,c,d,e,20); R2(e,a,b,c,d,21); R2(d,e,a,b,c,22); R2(c,d,e,a,b,23);
  ------------------
  |  |  151|   101k|	z += (w ^ x ^ y) + blk(i) + 0x6ED9EBA1 + rol(v, 5); w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  140|   101k|#define blk(i) (block->l[i & 15] = rol(block->l[(i + 13) & 15] ^ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  141|   101k|	block->l[(i + 8) & 15] ^ block->l[(i + 2) & 15] ^ block->l[i & 15], 1))
  |  |  ------------------
  |  |               	z += (w ^ x ^ y) + blk(i) + 0x6ED9EBA1 + rol(v, 5); w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |               	z += (w ^ x ^ y) + blk(i) + 0x6ED9EBA1 + rol(v, 5); w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
              	R2(a,b,c,d,e,20); R2(e,a,b,c,d,21); R2(d,e,a,b,c,22); R2(c,d,e,a,b,23);
  ------------------
  |  |  151|   101k|	z += (w ^ x ^ y) + blk(i) + 0x6ED9EBA1 + rol(v, 5); w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  140|   101k|#define blk(i) (block->l[i & 15] = rol(block->l[(i + 13) & 15] ^ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  141|   101k|	block->l[(i + 8) & 15] ^ block->l[(i + 2) & 15] ^ block->l[i & 15], 1))
  |  |  ------------------
  |  |               	z += (w ^ x ^ y) + blk(i) + 0x6ED9EBA1 + rol(v, 5); w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |               	z += (w ^ x ^ y) + blk(i) + 0x6ED9EBA1 + rol(v, 5); w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
  204|   101k|	R2(b,c,d,e,a,24); R2(a,b,c,d,e,25); R2(e,a,b,c,d,26); R2(d,e,a,b,c,27);
  ------------------
  |  |  151|   101k|	z += (w ^ x ^ y) + blk(i) + 0x6ED9EBA1 + rol(v, 5); w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  140|   101k|#define blk(i) (block->l[i & 15] = rol(block->l[(i + 13) & 15] ^ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  141|   101k|	block->l[(i + 8) & 15] ^ block->l[(i + 2) & 15] ^ block->l[i & 15], 1))
  |  |  ------------------
  |  |               	z += (w ^ x ^ y) + blk(i) + 0x6ED9EBA1 + rol(v, 5); w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |               	z += (w ^ x ^ y) + blk(i) + 0x6ED9EBA1 + rol(v, 5); w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
              	R2(b,c,d,e,a,24); R2(a,b,c,d,e,25); R2(e,a,b,c,d,26); R2(d,e,a,b,c,27);
  ------------------
  |  |  151|   101k|	z += (w ^ x ^ y) + blk(i) + 0x6ED9EBA1 + rol(v, 5); w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  140|   101k|#define blk(i) (block->l[i & 15] = rol(block->l[(i + 13) & 15] ^ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  141|   101k|	block->l[(i + 8) & 15] ^ block->l[(i + 2) & 15] ^ block->l[i & 15], 1))
  |  |  ------------------
  |  |               	z += (w ^ x ^ y) + blk(i) + 0x6ED9EBA1 + rol(v, 5); w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |               	z += (w ^ x ^ y) + blk(i) + 0x6ED9EBA1 + rol(v, 5); w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
              	R2(b,c,d,e,a,24); R2(a,b,c,d,e,25); R2(e,a,b,c,d,26); R2(d,e,a,b,c,27);
  ------------------
  |  |  151|   101k|	z += (w ^ x ^ y) + blk(i) + 0x6ED9EBA1 + rol(v, 5); w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  140|   101k|#define blk(i) (block->l[i & 15] = rol(block->l[(i + 13) & 15] ^ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  141|   101k|	block->l[(i + 8) & 15] ^ block->l[(i + 2) & 15] ^ block->l[i & 15], 1))
  |  |  ------------------
  |  |               	z += (w ^ x ^ y) + blk(i) + 0x6ED9EBA1 + rol(v, 5); w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |               	z += (w ^ x ^ y) + blk(i) + 0x6ED9EBA1 + rol(v, 5); w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
              	R2(b,c,d,e,a,24); R2(a,b,c,d,e,25); R2(e,a,b,c,d,26); R2(d,e,a,b,c,27);
  ------------------
  |  |  151|   101k|	z += (w ^ x ^ y) + blk(i) + 0x6ED9EBA1 + rol(v, 5); w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  140|   101k|#define blk(i) (block->l[i & 15] = rol(block->l[(i + 13) & 15] ^ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  141|   101k|	block->l[(i + 8) & 15] ^ block->l[(i + 2) & 15] ^ block->l[i & 15], 1))
  |  |  ------------------
  |  |               	z += (w ^ x ^ y) + blk(i) + 0x6ED9EBA1 + rol(v, 5); w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |               	z += (w ^ x ^ y) + blk(i) + 0x6ED9EBA1 + rol(v, 5); w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
  205|   101k|	R2(c,d,e,a,b,28); R2(b,c,d,e,a,29); R2(a,b,c,d,e,30); R2(e,a,b,c,d,31);
  ------------------
  |  |  151|   101k|	z += (w ^ x ^ y) + blk(i) + 0x6ED9EBA1 + rol(v, 5); w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  140|   101k|#define blk(i) (block->l[i & 15] = rol(block->l[(i + 13) & 15] ^ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  141|   101k|	block->l[(i + 8) & 15] ^ block->l[(i + 2) & 15] ^ block->l[i & 15], 1))
  |  |  ------------------
  |  |               	z += (w ^ x ^ y) + blk(i) + 0x6ED9EBA1 + rol(v, 5); w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |               	z += (w ^ x ^ y) + blk(i) + 0x6ED9EBA1 + rol(v, 5); w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
              	R2(c,d,e,a,b,28); R2(b,c,d,e,a,29); R2(a,b,c,d,e,30); R2(e,a,b,c,d,31);
  ------------------
  |  |  151|   101k|	z += (w ^ x ^ y) + blk(i) + 0x6ED9EBA1 + rol(v, 5); w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  140|   101k|#define blk(i) (block->l[i & 15] = rol(block->l[(i + 13) & 15] ^ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  141|   101k|	block->l[(i + 8) & 15] ^ block->l[(i + 2) & 15] ^ block->l[i & 15], 1))
  |  |  ------------------
  |  |               	z += (w ^ x ^ y) + blk(i) + 0x6ED9EBA1 + rol(v, 5); w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |               	z += (w ^ x ^ y) + blk(i) + 0x6ED9EBA1 + rol(v, 5); w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
              	R2(c,d,e,a,b,28); R2(b,c,d,e,a,29); R2(a,b,c,d,e,30); R2(e,a,b,c,d,31);
  ------------------
  |  |  151|   101k|	z += (w ^ x ^ y) + blk(i) + 0x6ED9EBA1 + rol(v, 5); w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  140|   101k|#define blk(i) (block->l[i & 15] = rol(block->l[(i + 13) & 15] ^ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  141|   101k|	block->l[(i + 8) & 15] ^ block->l[(i + 2) & 15] ^ block->l[i & 15], 1))
  |  |  ------------------
  |  |               	z += (w ^ x ^ y) + blk(i) + 0x6ED9EBA1 + rol(v, 5); w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |               	z += (w ^ x ^ y) + blk(i) + 0x6ED9EBA1 + rol(v, 5); w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
              	R2(c,d,e,a,b,28); R2(b,c,d,e,a,29); R2(a,b,c,d,e,30); R2(e,a,b,c,d,31);
  ------------------
  |  |  151|   101k|	z += (w ^ x ^ y) + blk(i) + 0x6ED9EBA1 + rol(v, 5); w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  140|   101k|#define blk(i) (block->l[i & 15] = rol(block->l[(i + 13) & 15] ^ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  141|   101k|	block->l[(i + 8) & 15] ^ block->l[(i + 2) & 15] ^ block->l[i & 15], 1))
  |  |  ------------------
  |  |               	z += (w ^ x ^ y) + blk(i) + 0x6ED9EBA1 + rol(v, 5); w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |               	z += (w ^ x ^ y) + blk(i) + 0x6ED9EBA1 + rol(v, 5); w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
  206|   101k|	R2(d,e,a,b,c,32); R2(c,d,e,a,b,33); R2(b,c,d,e,a,34); R2(a,b,c,d,e,35);
  ------------------
  |  |  151|   101k|	z += (w ^ x ^ y) + blk(i) + 0x6ED9EBA1 + rol(v, 5); w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  140|   101k|#define blk(i) (block->l[i & 15] = rol(block->l[(i + 13) & 15] ^ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  141|   101k|	block->l[(i + 8) & 15] ^ block->l[(i + 2) & 15] ^ block->l[i & 15], 1))
  |  |  ------------------
  |  |               	z += (w ^ x ^ y) + blk(i) + 0x6ED9EBA1 + rol(v, 5); w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |               	z += (w ^ x ^ y) + blk(i) + 0x6ED9EBA1 + rol(v, 5); w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
              	R2(d,e,a,b,c,32); R2(c,d,e,a,b,33); R2(b,c,d,e,a,34); R2(a,b,c,d,e,35);
  ------------------
  |  |  151|   101k|	z += (w ^ x ^ y) + blk(i) + 0x6ED9EBA1 + rol(v, 5); w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  140|   101k|#define blk(i) (block->l[i & 15] = rol(block->l[(i + 13) & 15] ^ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  141|   101k|	block->l[(i + 8) & 15] ^ block->l[(i + 2) & 15] ^ block->l[i & 15], 1))
  |  |  ------------------
  |  |               	z += (w ^ x ^ y) + blk(i) + 0x6ED9EBA1 + rol(v, 5); w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |               	z += (w ^ x ^ y) + blk(i) + 0x6ED9EBA1 + rol(v, 5); w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
              	R2(d,e,a,b,c,32); R2(c,d,e,a,b,33); R2(b,c,d,e,a,34); R2(a,b,c,d,e,35);
  ------------------
  |  |  151|   101k|	z += (w ^ x ^ y) + blk(i) + 0x6ED9EBA1 + rol(v, 5); w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  140|   101k|#define blk(i) (block->l[i & 15] = rol(block->l[(i + 13) & 15] ^ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  141|   101k|	block->l[(i + 8) & 15] ^ block->l[(i + 2) & 15] ^ block->l[i & 15], 1))
  |  |  ------------------
  |  |               	z += (w ^ x ^ y) + blk(i) + 0x6ED9EBA1 + rol(v, 5); w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |               	z += (w ^ x ^ y) + blk(i) + 0x6ED9EBA1 + rol(v, 5); w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
              	R2(d,e,a,b,c,32); R2(c,d,e,a,b,33); R2(b,c,d,e,a,34); R2(a,b,c,d,e,35);
  ------------------
  |  |  151|   101k|	z += (w ^ x ^ y) + blk(i) + 0x6ED9EBA1 + rol(v, 5); w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  140|   101k|#define blk(i) (block->l[i & 15] = rol(block->l[(i + 13) & 15] ^ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  141|   101k|	block->l[(i + 8) & 15] ^ block->l[(i + 2) & 15] ^ block->l[i & 15], 1))
  |  |  ------------------
  |  |               	z += (w ^ x ^ y) + blk(i) + 0x6ED9EBA1 + rol(v, 5); w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |               	z += (w ^ x ^ y) + blk(i) + 0x6ED9EBA1 + rol(v, 5); w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
  207|   101k|	R2(e,a,b,c,d,36); R2(d,e,a,b,c,37); R2(c,d,e,a,b,38); R2(b,c,d,e,a,39);
  ------------------
  |  |  151|   101k|	z += (w ^ x ^ y) + blk(i) + 0x6ED9EBA1 + rol(v, 5); w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  140|   101k|#define blk(i) (block->l[i & 15] = rol(block->l[(i + 13) & 15] ^ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  141|   101k|	block->l[(i + 8) & 15] ^ block->l[(i + 2) & 15] ^ block->l[i & 15], 1))
  |  |  ------------------
  |  |               	z += (w ^ x ^ y) + blk(i) + 0x6ED9EBA1 + rol(v, 5); w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |               	z += (w ^ x ^ y) + blk(i) + 0x6ED9EBA1 + rol(v, 5); w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
              	R2(e,a,b,c,d,36); R2(d,e,a,b,c,37); R2(c,d,e,a,b,38); R2(b,c,d,e,a,39);
  ------------------
  |  |  151|   101k|	z += (w ^ x ^ y) + blk(i) + 0x6ED9EBA1 + rol(v, 5); w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  140|   101k|#define blk(i) (block->l[i & 15] = rol(block->l[(i + 13) & 15] ^ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  141|   101k|	block->l[(i + 8) & 15] ^ block->l[(i + 2) & 15] ^ block->l[i & 15], 1))
  |  |  ------------------
  |  |               	z += (w ^ x ^ y) + blk(i) + 0x6ED9EBA1 + rol(v, 5); w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |               	z += (w ^ x ^ y) + blk(i) + 0x6ED9EBA1 + rol(v, 5); w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
              	R2(e,a,b,c,d,36); R2(d,e,a,b,c,37); R2(c,d,e,a,b,38); R2(b,c,d,e,a,39);
  ------------------
  |  |  151|   101k|	z += (w ^ x ^ y) + blk(i) + 0x6ED9EBA1 + rol(v, 5); w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  140|   101k|#define blk(i) (block->l[i & 15] = rol(block->l[(i + 13) & 15] ^ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  141|   101k|	block->l[(i + 8) & 15] ^ block->l[(i + 2) & 15] ^ block->l[i & 15], 1))
  |  |  ------------------
  |  |               	z += (w ^ x ^ y) + blk(i) + 0x6ED9EBA1 + rol(v, 5); w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |               	z += (w ^ x ^ y) + blk(i) + 0x6ED9EBA1 + rol(v, 5); w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
              	R2(e,a,b,c,d,36); R2(d,e,a,b,c,37); R2(c,d,e,a,b,38); R2(b,c,d,e,a,39);
  ------------------
  |  |  151|   101k|	z += (w ^ x ^ y) + blk(i) + 0x6ED9EBA1 + rol(v, 5); w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  140|   101k|#define blk(i) (block->l[i & 15] = rol(block->l[(i + 13) & 15] ^ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  141|   101k|	block->l[(i + 8) & 15] ^ block->l[(i + 2) & 15] ^ block->l[i & 15], 1))
  |  |  ------------------
  |  |               	z += (w ^ x ^ y) + blk(i) + 0x6ED9EBA1 + rol(v, 5); w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |               	z += (w ^ x ^ y) + blk(i) + 0x6ED9EBA1 + rol(v, 5); w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
  208|   101k|	R3(a,b,c,d,e,40); R3(e,a,b,c,d,41); R3(d,e,a,b,c,42); R3(c,d,e,a,b,43);
  ------------------
  |  |  153|   101k|	z += (((w | x) & y) | (w & x)) + blk(i) + 0x8F1BBCDC + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  140|   101k|#define blk(i) (block->l[i & 15] = rol(block->l[(i + 13) & 15] ^ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  141|   101k|	block->l[(i + 8) & 15] ^ block->l[(i + 2) & 15] ^ block->l[i & 15], 1))
  |  |  ------------------
  |  |               	z += (((w | x) & y) | (w & x)) + blk(i) + 0x8F1BBCDC + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |  154|   101k|	w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
              	R3(a,b,c,d,e,40); R3(e,a,b,c,d,41); R3(d,e,a,b,c,42); R3(c,d,e,a,b,43);
  ------------------
  |  |  153|   101k|	z += (((w | x) & y) | (w & x)) + blk(i) + 0x8F1BBCDC + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  140|   101k|#define blk(i) (block->l[i & 15] = rol(block->l[(i + 13) & 15] ^ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  141|   101k|	block->l[(i + 8) & 15] ^ block->l[(i + 2) & 15] ^ block->l[i & 15], 1))
  |  |  ------------------
  |  |               	z += (((w | x) & y) | (w & x)) + blk(i) + 0x8F1BBCDC + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |  154|   101k|	w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
              	R3(a,b,c,d,e,40); R3(e,a,b,c,d,41); R3(d,e,a,b,c,42); R3(c,d,e,a,b,43);
  ------------------
  |  |  153|   101k|	z += (((w | x) & y) | (w & x)) + blk(i) + 0x8F1BBCDC + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  140|   101k|#define blk(i) (block->l[i & 15] = rol(block->l[(i + 13) & 15] ^ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  141|   101k|	block->l[(i + 8) & 15] ^ block->l[(i + 2) & 15] ^ block->l[i & 15], 1))
  |  |  ------------------
  |  |               	z += (((w | x) & y) | (w & x)) + blk(i) + 0x8F1BBCDC + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |  154|   101k|	w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
              	R3(a,b,c,d,e,40); R3(e,a,b,c,d,41); R3(d,e,a,b,c,42); R3(c,d,e,a,b,43);
  ------------------
  |  |  153|   101k|	z += (((w | x) & y) | (w & x)) + blk(i) + 0x8F1BBCDC + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  140|   101k|#define blk(i) (block->l[i & 15] = rol(block->l[(i + 13) & 15] ^ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  141|   101k|	block->l[(i + 8) & 15] ^ block->l[(i + 2) & 15] ^ block->l[i & 15], 1))
  |  |  ------------------
  |  |               	z += (((w | x) & y) | (w & x)) + blk(i) + 0x8F1BBCDC + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |  154|   101k|	w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
  209|   101k|	R3(b,c,d,e,a,44); R3(a,b,c,d,e,45); R3(e,a,b,c,d,46); R3(d,e,a,b,c,47);
  ------------------
  |  |  153|   101k|	z += (((w | x) & y) | (w & x)) + blk(i) + 0x8F1BBCDC + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  140|   101k|#define blk(i) (block->l[i & 15] = rol(block->l[(i + 13) & 15] ^ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  141|   101k|	block->l[(i + 8) & 15] ^ block->l[(i + 2) & 15] ^ block->l[i & 15], 1))
  |  |  ------------------
  |  |               	z += (((w | x) & y) | (w & x)) + blk(i) + 0x8F1BBCDC + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |  154|   101k|	w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
              	R3(b,c,d,e,a,44); R3(a,b,c,d,e,45); R3(e,a,b,c,d,46); R3(d,e,a,b,c,47);
  ------------------
  |  |  153|   101k|	z += (((w | x) & y) | (w & x)) + blk(i) + 0x8F1BBCDC + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  140|   101k|#define blk(i) (block->l[i & 15] = rol(block->l[(i + 13) & 15] ^ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  141|   101k|	block->l[(i + 8) & 15] ^ block->l[(i + 2) & 15] ^ block->l[i & 15], 1))
  |  |  ------------------
  |  |               	z += (((w | x) & y) | (w & x)) + blk(i) + 0x8F1BBCDC + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |  154|   101k|	w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
              	R3(b,c,d,e,a,44); R3(a,b,c,d,e,45); R3(e,a,b,c,d,46); R3(d,e,a,b,c,47);
  ------------------
  |  |  153|   101k|	z += (((w | x) & y) | (w & x)) + blk(i) + 0x8F1BBCDC + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  140|   101k|#define blk(i) (block->l[i & 15] = rol(block->l[(i + 13) & 15] ^ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  141|   101k|	block->l[(i + 8) & 15] ^ block->l[(i + 2) & 15] ^ block->l[i & 15], 1))
  |  |  ------------------
  |  |               	z += (((w | x) & y) | (w & x)) + blk(i) + 0x8F1BBCDC + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |  154|   101k|	w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
              	R3(b,c,d,e,a,44); R3(a,b,c,d,e,45); R3(e,a,b,c,d,46); R3(d,e,a,b,c,47);
  ------------------
  |  |  153|   101k|	z += (((w | x) & y) | (w & x)) + blk(i) + 0x8F1BBCDC + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  140|   101k|#define blk(i) (block->l[i & 15] = rol(block->l[(i + 13) & 15] ^ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  141|   101k|	block->l[(i + 8) & 15] ^ block->l[(i + 2) & 15] ^ block->l[i & 15], 1))
  |  |  ------------------
  |  |               	z += (((w | x) & y) | (w & x)) + blk(i) + 0x8F1BBCDC + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |  154|   101k|	w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
  210|   101k|	R3(c,d,e,a,b,48); R3(b,c,d,e,a,49); R3(a,b,c,d,e,50); R3(e,a,b,c,d,51);
  ------------------
  |  |  153|   101k|	z += (((w | x) & y) | (w & x)) + blk(i) + 0x8F1BBCDC + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  140|   101k|#define blk(i) (block->l[i & 15] = rol(block->l[(i + 13) & 15] ^ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  141|   101k|	block->l[(i + 8) & 15] ^ block->l[(i + 2) & 15] ^ block->l[i & 15], 1))
  |  |  ------------------
  |  |               	z += (((w | x) & y) | (w & x)) + blk(i) + 0x8F1BBCDC + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |  154|   101k|	w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
              	R3(c,d,e,a,b,48); R3(b,c,d,e,a,49); R3(a,b,c,d,e,50); R3(e,a,b,c,d,51);
  ------------------
  |  |  153|   101k|	z += (((w | x) & y) | (w & x)) + blk(i) + 0x8F1BBCDC + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  140|   101k|#define blk(i) (block->l[i & 15] = rol(block->l[(i + 13) & 15] ^ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  141|   101k|	block->l[(i + 8) & 15] ^ block->l[(i + 2) & 15] ^ block->l[i & 15], 1))
  |  |  ------------------
  |  |               	z += (((w | x) & y) | (w & x)) + blk(i) + 0x8F1BBCDC + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |  154|   101k|	w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
              	R3(c,d,e,a,b,48); R3(b,c,d,e,a,49); R3(a,b,c,d,e,50); R3(e,a,b,c,d,51);
  ------------------
  |  |  153|   101k|	z += (((w | x) & y) | (w & x)) + blk(i) + 0x8F1BBCDC + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  140|   101k|#define blk(i) (block->l[i & 15] = rol(block->l[(i + 13) & 15] ^ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  141|   101k|	block->l[(i + 8) & 15] ^ block->l[(i + 2) & 15] ^ block->l[i & 15], 1))
  |  |  ------------------
  |  |               	z += (((w | x) & y) | (w & x)) + blk(i) + 0x8F1BBCDC + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |  154|   101k|	w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
              	R3(c,d,e,a,b,48); R3(b,c,d,e,a,49); R3(a,b,c,d,e,50); R3(e,a,b,c,d,51);
  ------------------
  |  |  153|   101k|	z += (((w | x) & y) | (w & x)) + blk(i) + 0x8F1BBCDC + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  140|   101k|#define blk(i) (block->l[i & 15] = rol(block->l[(i + 13) & 15] ^ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  141|   101k|	block->l[(i + 8) & 15] ^ block->l[(i + 2) & 15] ^ block->l[i & 15], 1))
  |  |  ------------------
  |  |               	z += (((w | x) & y) | (w & x)) + blk(i) + 0x8F1BBCDC + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |  154|   101k|	w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
  211|   101k|	R3(d,e,a,b,c,52); R3(c,d,e,a,b,53); R3(b,c,d,e,a,54); R3(a,b,c,d,e,55);
  ------------------
  |  |  153|   101k|	z += (((w | x) & y) | (w & x)) + blk(i) + 0x8F1BBCDC + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  140|   101k|#define blk(i) (block->l[i & 15] = rol(block->l[(i + 13) & 15] ^ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  141|   101k|	block->l[(i + 8) & 15] ^ block->l[(i + 2) & 15] ^ block->l[i & 15], 1))
  |  |  ------------------
  |  |               	z += (((w | x) & y) | (w & x)) + blk(i) + 0x8F1BBCDC + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |  154|   101k|	w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
              	R3(d,e,a,b,c,52); R3(c,d,e,a,b,53); R3(b,c,d,e,a,54); R3(a,b,c,d,e,55);
  ------------------
  |  |  153|   101k|	z += (((w | x) & y) | (w & x)) + blk(i) + 0x8F1BBCDC + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  140|   101k|#define blk(i) (block->l[i & 15] = rol(block->l[(i + 13) & 15] ^ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  141|   101k|	block->l[(i + 8) & 15] ^ block->l[(i + 2) & 15] ^ block->l[i & 15], 1))
  |  |  ------------------
  |  |               	z += (((w | x) & y) | (w & x)) + blk(i) + 0x8F1BBCDC + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |  154|   101k|	w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
              	R3(d,e,a,b,c,52); R3(c,d,e,a,b,53); R3(b,c,d,e,a,54); R3(a,b,c,d,e,55);
  ------------------
  |  |  153|   101k|	z += (((w | x) & y) | (w & x)) + blk(i) + 0x8F1BBCDC + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  140|   101k|#define blk(i) (block->l[i & 15] = rol(block->l[(i + 13) & 15] ^ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  141|   101k|	block->l[(i + 8) & 15] ^ block->l[(i + 2) & 15] ^ block->l[i & 15], 1))
  |  |  ------------------
  |  |               	z += (((w | x) & y) | (w & x)) + blk(i) + 0x8F1BBCDC + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |  154|   101k|	w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
              	R3(d,e,a,b,c,52); R3(c,d,e,a,b,53); R3(b,c,d,e,a,54); R3(a,b,c,d,e,55);
  ------------------
  |  |  153|   101k|	z += (((w | x) & y) | (w & x)) + blk(i) + 0x8F1BBCDC + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  140|   101k|#define blk(i) (block->l[i & 15] = rol(block->l[(i + 13) & 15] ^ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  141|   101k|	block->l[(i + 8) & 15] ^ block->l[(i + 2) & 15] ^ block->l[i & 15], 1))
  |  |  ------------------
  |  |               	z += (((w | x) & y) | (w & x)) + blk(i) + 0x8F1BBCDC + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |  154|   101k|	w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
  212|   101k|	R3(e,a,b,c,d,56); R3(d,e,a,b,c,57); R3(c,d,e,a,b,58); R3(b,c,d,e,a,59);
  ------------------
  |  |  153|   101k|	z += (((w | x) & y) | (w & x)) + blk(i) + 0x8F1BBCDC + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  140|   101k|#define blk(i) (block->l[i & 15] = rol(block->l[(i + 13) & 15] ^ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  141|   101k|	block->l[(i + 8) & 15] ^ block->l[(i + 2) & 15] ^ block->l[i & 15], 1))
  |  |  ------------------
  |  |               	z += (((w | x) & y) | (w & x)) + blk(i) + 0x8F1BBCDC + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |  154|   101k|	w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
              	R3(e,a,b,c,d,56); R3(d,e,a,b,c,57); R3(c,d,e,a,b,58); R3(b,c,d,e,a,59);
  ------------------
  |  |  153|   101k|	z += (((w | x) & y) | (w & x)) + blk(i) + 0x8F1BBCDC + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  140|   101k|#define blk(i) (block->l[i & 15] = rol(block->l[(i + 13) & 15] ^ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  141|   101k|	block->l[(i + 8) & 15] ^ block->l[(i + 2) & 15] ^ block->l[i & 15], 1))
  |  |  ------------------
  |  |               	z += (((w | x) & y) | (w & x)) + blk(i) + 0x8F1BBCDC + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |  154|   101k|	w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
              	R3(e,a,b,c,d,56); R3(d,e,a,b,c,57); R3(c,d,e,a,b,58); R3(b,c,d,e,a,59);
  ------------------
  |  |  153|   101k|	z += (((w | x) & y) | (w & x)) + blk(i) + 0x8F1BBCDC + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  140|   101k|#define blk(i) (block->l[i & 15] = rol(block->l[(i + 13) & 15] ^ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  141|   101k|	block->l[(i + 8) & 15] ^ block->l[(i + 2) & 15] ^ block->l[i & 15], 1))
  |  |  ------------------
  |  |               	z += (((w | x) & y) | (w & x)) + blk(i) + 0x8F1BBCDC + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |  154|   101k|	w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
              	R3(e,a,b,c,d,56); R3(d,e,a,b,c,57); R3(c,d,e,a,b,58); R3(b,c,d,e,a,59);
  ------------------
  |  |  153|   101k|	z += (((w | x) & y) | (w & x)) + blk(i) + 0x8F1BBCDC + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  140|   101k|#define blk(i) (block->l[i & 15] = rol(block->l[(i + 13) & 15] ^ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  141|   101k|	block->l[(i + 8) & 15] ^ block->l[(i + 2) & 15] ^ block->l[i & 15], 1))
  |  |  ------------------
  |  |               	z += (((w | x) & y) | (w & x)) + blk(i) + 0x8F1BBCDC + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |  154|   101k|	w = rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
  213|   101k|	R4(a,b,c,d,e,60); R4(e,a,b,c,d,61); R4(d,e,a,b,c,62); R4(c,d,e,a,b,63);
  ------------------
  |  |  156|   101k|	z += (w ^ x ^ y) + blk(i) + 0xCA62C1D6 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  140|   101k|#define blk(i) (block->l[i & 15] = rol(block->l[(i + 13) & 15] ^ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  141|   101k|	block->l[(i + 8) & 15] ^ block->l[(i + 2) & 15] ^ block->l[i & 15], 1))
  |  |  ------------------
  |  |               	z += (w ^ x ^ y) + blk(i) + 0xCA62C1D6 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |  157|   101k|	w=rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
              	R4(a,b,c,d,e,60); R4(e,a,b,c,d,61); R4(d,e,a,b,c,62); R4(c,d,e,a,b,63);
  ------------------
  |  |  156|   101k|	z += (w ^ x ^ y) + blk(i) + 0xCA62C1D6 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  140|   101k|#define blk(i) (block->l[i & 15] = rol(block->l[(i + 13) & 15] ^ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  141|   101k|	block->l[(i + 8) & 15] ^ block->l[(i + 2) & 15] ^ block->l[i & 15], 1))
  |  |  ------------------
  |  |               	z += (w ^ x ^ y) + blk(i) + 0xCA62C1D6 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |  157|   101k|	w=rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
              	R4(a,b,c,d,e,60); R4(e,a,b,c,d,61); R4(d,e,a,b,c,62); R4(c,d,e,a,b,63);
  ------------------
  |  |  156|   101k|	z += (w ^ x ^ y) + blk(i) + 0xCA62C1D6 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  140|   101k|#define blk(i) (block->l[i & 15] = rol(block->l[(i + 13) & 15] ^ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  141|   101k|	block->l[(i + 8) & 15] ^ block->l[(i + 2) & 15] ^ block->l[i & 15], 1))
  |  |  ------------------
  |  |               	z += (w ^ x ^ y) + blk(i) + 0xCA62C1D6 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |  157|   101k|	w=rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
              	R4(a,b,c,d,e,60); R4(e,a,b,c,d,61); R4(d,e,a,b,c,62); R4(c,d,e,a,b,63);
  ------------------
  |  |  156|   101k|	z += (w ^ x ^ y) + blk(i) + 0xCA62C1D6 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  140|   101k|#define blk(i) (block->l[i & 15] = rol(block->l[(i + 13) & 15] ^ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  141|   101k|	block->l[(i + 8) & 15] ^ block->l[(i + 2) & 15] ^ block->l[i & 15], 1))
  |  |  ------------------
  |  |               	z += (w ^ x ^ y) + blk(i) + 0xCA62C1D6 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |  157|   101k|	w=rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
  214|   101k|	R4(b,c,d,e,a,64); R4(a,b,c,d,e,65); R4(e,a,b,c,d,66); R4(d,e,a,b,c,67);
  ------------------
  |  |  156|   101k|	z += (w ^ x ^ y) + blk(i) + 0xCA62C1D6 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  140|   101k|#define blk(i) (block->l[i & 15] = rol(block->l[(i + 13) & 15] ^ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  141|   101k|	block->l[(i + 8) & 15] ^ block->l[(i + 2) & 15] ^ block->l[i & 15], 1))
  |  |  ------------------
  |  |               	z += (w ^ x ^ y) + blk(i) + 0xCA62C1D6 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |  157|   101k|	w=rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
              	R4(b,c,d,e,a,64); R4(a,b,c,d,e,65); R4(e,a,b,c,d,66); R4(d,e,a,b,c,67);
  ------------------
  |  |  156|   101k|	z += (w ^ x ^ y) + blk(i) + 0xCA62C1D6 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  140|   101k|#define blk(i) (block->l[i & 15] = rol(block->l[(i + 13) & 15] ^ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  141|   101k|	block->l[(i + 8) & 15] ^ block->l[(i + 2) & 15] ^ block->l[i & 15], 1))
  |  |  ------------------
  |  |               	z += (w ^ x ^ y) + blk(i) + 0xCA62C1D6 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |  157|   101k|	w=rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
              	R4(b,c,d,e,a,64); R4(a,b,c,d,e,65); R4(e,a,b,c,d,66); R4(d,e,a,b,c,67);
  ------------------
  |  |  156|   101k|	z += (w ^ x ^ y) + blk(i) + 0xCA62C1D6 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  140|   101k|#define blk(i) (block->l[i & 15] = rol(block->l[(i + 13) & 15] ^ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  141|   101k|	block->l[(i + 8) & 15] ^ block->l[(i + 2) & 15] ^ block->l[i & 15], 1))
  |  |  ------------------
  |  |               	z += (w ^ x ^ y) + blk(i) + 0xCA62C1D6 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |  157|   101k|	w=rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
              	R4(b,c,d,e,a,64); R4(a,b,c,d,e,65); R4(e,a,b,c,d,66); R4(d,e,a,b,c,67);
  ------------------
  |  |  156|   101k|	z += (w ^ x ^ y) + blk(i) + 0xCA62C1D6 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  140|   101k|#define blk(i) (block->l[i & 15] = rol(block->l[(i + 13) & 15] ^ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  141|   101k|	block->l[(i + 8) & 15] ^ block->l[(i + 2) & 15] ^ block->l[i & 15], 1))
  |  |  ------------------
  |  |               	z += (w ^ x ^ y) + blk(i) + 0xCA62C1D6 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |  157|   101k|	w=rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
  215|   101k|	R4(c,d,e,a,b,68); R4(b,c,d,e,a,69); R4(a,b,c,d,e,70); R4(e,a,b,c,d,71);
  ------------------
  |  |  156|   101k|	z += (w ^ x ^ y) + blk(i) + 0xCA62C1D6 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  140|   101k|#define blk(i) (block->l[i & 15] = rol(block->l[(i + 13) & 15] ^ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  141|   101k|	block->l[(i + 8) & 15] ^ block->l[(i + 2) & 15] ^ block->l[i & 15], 1))
  |  |  ------------------
  |  |               	z += (w ^ x ^ y) + blk(i) + 0xCA62C1D6 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |  157|   101k|	w=rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
              	R4(c,d,e,a,b,68); R4(b,c,d,e,a,69); R4(a,b,c,d,e,70); R4(e,a,b,c,d,71);
  ------------------
  |  |  156|   101k|	z += (w ^ x ^ y) + blk(i) + 0xCA62C1D6 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  140|   101k|#define blk(i) (block->l[i & 15] = rol(block->l[(i + 13) & 15] ^ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  141|   101k|	block->l[(i + 8) & 15] ^ block->l[(i + 2) & 15] ^ block->l[i & 15], 1))
  |  |  ------------------
  |  |               	z += (w ^ x ^ y) + blk(i) + 0xCA62C1D6 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |  157|   101k|	w=rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
              	R4(c,d,e,a,b,68); R4(b,c,d,e,a,69); R4(a,b,c,d,e,70); R4(e,a,b,c,d,71);
  ------------------
  |  |  156|   101k|	z += (w ^ x ^ y) + blk(i) + 0xCA62C1D6 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  140|   101k|#define blk(i) (block->l[i & 15] = rol(block->l[(i + 13) & 15] ^ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  141|   101k|	block->l[(i + 8) & 15] ^ block->l[(i + 2) & 15] ^ block->l[i & 15], 1))
  |  |  ------------------
  |  |               	z += (w ^ x ^ y) + blk(i) + 0xCA62C1D6 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |  157|   101k|	w=rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
              	R4(c,d,e,a,b,68); R4(b,c,d,e,a,69); R4(a,b,c,d,e,70); R4(e,a,b,c,d,71);
  ------------------
  |  |  156|   101k|	z += (w ^ x ^ y) + blk(i) + 0xCA62C1D6 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  140|   101k|#define blk(i) (block->l[i & 15] = rol(block->l[(i + 13) & 15] ^ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  141|   101k|	block->l[(i + 8) & 15] ^ block->l[(i + 2) & 15] ^ block->l[i & 15], 1))
  |  |  ------------------
  |  |               	z += (w ^ x ^ y) + blk(i) + 0xCA62C1D6 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |  157|   101k|	w=rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
  216|   101k|	R4(d,e,a,b,c,72); R4(c,d,e,a,b,73); R4(b,c,d,e,a,74); R4(a,b,c,d,e,75);
  ------------------
  |  |  156|   101k|	z += (w ^ x ^ y) + blk(i) + 0xCA62C1D6 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  140|   101k|#define blk(i) (block->l[i & 15] = rol(block->l[(i + 13) & 15] ^ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  141|   101k|	block->l[(i + 8) & 15] ^ block->l[(i + 2) & 15] ^ block->l[i & 15], 1))
  |  |  ------------------
  |  |               	z += (w ^ x ^ y) + blk(i) + 0xCA62C1D6 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |  157|   101k|	w=rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
              	R4(d,e,a,b,c,72); R4(c,d,e,a,b,73); R4(b,c,d,e,a,74); R4(a,b,c,d,e,75);
  ------------------
  |  |  156|   101k|	z += (w ^ x ^ y) + blk(i) + 0xCA62C1D6 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  140|   101k|#define blk(i) (block->l[i & 15] = rol(block->l[(i + 13) & 15] ^ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  141|   101k|	block->l[(i + 8) & 15] ^ block->l[(i + 2) & 15] ^ block->l[i & 15], 1))
  |  |  ------------------
  |  |               	z += (w ^ x ^ y) + blk(i) + 0xCA62C1D6 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |  157|   101k|	w=rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
              	R4(d,e,a,b,c,72); R4(c,d,e,a,b,73); R4(b,c,d,e,a,74); R4(a,b,c,d,e,75);
  ------------------
  |  |  156|   101k|	z += (w ^ x ^ y) + blk(i) + 0xCA62C1D6 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  140|   101k|#define blk(i) (block->l[i & 15] = rol(block->l[(i + 13) & 15] ^ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  141|   101k|	block->l[(i + 8) & 15] ^ block->l[(i + 2) & 15] ^ block->l[i & 15], 1))
  |  |  ------------------
  |  |               	z += (w ^ x ^ y) + blk(i) + 0xCA62C1D6 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |  157|   101k|	w=rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
              	R4(d,e,a,b,c,72); R4(c,d,e,a,b,73); R4(b,c,d,e,a,74); R4(a,b,c,d,e,75);
  ------------------
  |  |  156|   101k|	z += (w ^ x ^ y) + blk(i) + 0xCA62C1D6 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  140|   101k|#define blk(i) (block->l[i & 15] = rol(block->l[(i + 13) & 15] ^ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  141|   101k|	block->l[(i + 8) & 15] ^ block->l[(i + 2) & 15] ^ block->l[i & 15], 1))
  |  |  ------------------
  |  |               	z += (w ^ x ^ y) + blk(i) + 0xCA62C1D6 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |  157|   101k|	w=rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
  217|   101k|	R4(e,a,b,c,d,76); R4(d,e,a,b,c,77); R4(c,d,e,a,b,78); R4(b,c,d,e,a,79);
  ------------------
  |  |  156|   101k|	z += (w ^ x ^ y) + blk(i) + 0xCA62C1D6 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  140|   101k|#define blk(i) (block->l[i & 15] = rol(block->l[(i + 13) & 15] ^ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  141|   101k|	block->l[(i + 8) & 15] ^ block->l[(i + 2) & 15] ^ block->l[i & 15], 1))
  |  |  ------------------
  |  |               	z += (w ^ x ^ y) + blk(i) + 0xCA62C1D6 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |  157|   101k|	w=rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
              	R4(e,a,b,c,d,76); R4(d,e,a,b,c,77); R4(c,d,e,a,b,78); R4(b,c,d,e,a,79);
  ------------------
  |  |  156|   101k|	z += (w ^ x ^ y) + blk(i) + 0xCA62C1D6 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  140|   101k|#define blk(i) (block->l[i & 15] = rol(block->l[(i + 13) & 15] ^ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  141|   101k|	block->l[(i + 8) & 15] ^ block->l[(i + 2) & 15] ^ block->l[i & 15], 1))
  |  |  ------------------
  |  |               	z += (w ^ x ^ y) + blk(i) + 0xCA62C1D6 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |  157|   101k|	w=rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
              	R4(e,a,b,c,d,76); R4(d,e,a,b,c,77); R4(c,d,e,a,b,78); R4(b,c,d,e,a,79);
  ------------------
  |  |  156|   101k|	z += (w ^ x ^ y) + blk(i) + 0xCA62C1D6 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  140|   101k|#define blk(i) (block->l[i & 15] = rol(block->l[(i + 13) & 15] ^ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  141|   101k|	block->l[(i + 8) & 15] ^ block->l[(i + 2) & 15] ^ block->l[i & 15], 1))
  |  |  ------------------
  |  |               	z += (w ^ x ^ y) + blk(i) + 0xCA62C1D6 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |  157|   101k|	w=rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
              	R4(e,a,b,c,d,76); R4(d,e,a,b,c,77); R4(c,d,e,a,b,78); R4(b,c,d,e,a,79);
  ------------------
  |  |  156|   101k|	z += (w ^ x ^ y) + blk(i) + 0xCA62C1D6 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  140|   101k|#define blk(i) (block->l[i & 15] = rol(block->l[(i + 13) & 15] ^ \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  |  |  ------------------
  |  |  |  |  141|   101k|	block->l[(i + 8) & 15] ^ block->l[(i + 2) & 15] ^ block->l[i & 15], 1))
  |  |  ------------------
  |  |               	z += (w ^ x ^ y) + blk(i) + 0xCA62C1D6 + rol(v, 5); \
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  |  |  157|   101k|	w=rol(w, 30);
  |  |  ------------------
  |  |  |  |  130|   101k|#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
  |  |  ------------------
  ------------------
  218|       |	/* Add the working vars back into context.state[] */
  219|   101k|	state[0] += a;
  220|   101k|	state[1] += b;
  221|   101k|	state[2] += c;
  222|   101k|	state[3] += d;
  223|   101k|	state[4] += e;
  224|       |	/* Wipe variables */
  225|   101k|	a = b = c = d = e = 0;
  226|   101k|#ifdef SHA1HANDSOFF
  227|   101k|	forced_memzero(block, 64);
  228|   101k|#endif
  229|   101k|}
SHA1Init:
  235|  26.9k|{
  236|       |	/* SHA1 initialization constants */
  237|  26.9k|	context->state[0] = 0x67452301;
  238|  26.9k|	context->state[1] = 0xEFCDAB89;
  239|  26.9k|	context->state[2] = 0x98BADCFE;
  240|  26.9k|	context->state[3] = 0x10325476;
  241|  26.9k|	context->state[4] = 0xC3D2E1F0;
  242|  26.9k|	context->count[0] = context->count[1] = 0;
  243|  26.9k|}
SHA1Update:
  249|   743k|{
  250|   743k|	u32 i, j;
  251|   743k|	const unsigned char *data = _data;
  252|       |
  253|       |#ifdef VERBOSE
  254|       |	SHAPrintContext(context, "before");
  255|       |#endif
  256|   743k|	j = (context->count[0] >> 3) & 63;
  257|   743k|	if ((context->count[0] += len << 3) < (len << 3))
  ------------------
  |  Branch (257:6): [True: 0, False: 743k]
  ------------------
  258|      0|		context->count[1]++;
  259|   743k|	context->count[1] += (len >> 29);
  260|   743k|	if ((j + len) > 63) {
  ------------------
  |  Branch (260:6): [True: 58.4k, False: 684k]
  ------------------
  261|  58.4k|		os_memcpy(&context->buffer[j], data, (i = 64-j));
  ------------------
  |  |  523|  58.4k|#define os_memcpy(d, s, n) memcpy((d), (s), (n))
  ------------------
  262|  58.4k|		SHA1Transform(context->state, context->buffer);
  263|   101k|		for ( ; i + 63 < len; i += 64) {
  ------------------
  |  Branch (263:11): [True: 43.1k, False: 58.4k]
  ------------------
  264|  43.1k|			SHA1Transform(context->state, &data[i]);
  265|  43.1k|		}
  266|  58.4k|		j = 0;
  267|  58.4k|	}
  268|   684k|	else i = 0;
  269|   743k|	os_memcpy(&context->buffer[j], &data[i], len - i);
  ------------------
  |  |  523|   743k|#define os_memcpy(d, s, n) memcpy((d), (s), (n))
  ------------------
  270|       |#ifdef VERBOSE
  271|       |	SHAPrintContext(context, "after ");
  272|       |#endif
  273|   743k|}
SHA1Final:
  279|  19.1k|{
  280|  19.1k|	u32 i;
  281|  19.1k|	unsigned char finalcount[8];
  282|       |
  283|   172k|	for (i = 0; i < 8; i++) {
  ------------------
  |  Branch (283:14): [True: 153k, False: 19.1k]
  ------------------
  284|   153k|		finalcount[i] = (unsigned char)
  285|   153k|			((context->count[(i >= 4 ? 0 : 1)] >>
  ------------------
  |  Branch (285:22): [True: 76.5k, False: 76.5k]
  ------------------
  286|   153k|			  ((3-(i & 3)) * 8) ) & 255);  /* Endian independent */
  287|   153k|	}
  288|  19.1k|	SHA1Update(context, (unsigned char *) "\200", 1);
  289|   648k|	while ((context->count[0] & 504) != 448) {
  ------------------
  |  Branch (289:9): [True: 628k, False: 19.1k]
  ------------------
  290|   628k|		SHA1Update(context, (unsigned char *) "\0", 1);
  291|   628k|	}
  292|  19.1k|	SHA1Update(context, finalcount, 8);  /* Should cause a SHA1Transform()
  293|       |					      */
  294|   401k|	for (i = 0; i < 20; i++) {
  ------------------
  |  Branch (294:14): [True: 382k, False: 19.1k]
  ------------------
  295|   382k|		digest[i] = (unsigned char)
  296|   382k|			((context->state[i >> 2] >> ((3 - (i & 3)) * 8)) &
  297|   382k|			 255);
  298|   382k|	}
  299|       |	/* Wipe variables */
  300|  19.1k|	os_memset(context->buffer, 0, 64);
  ------------------
  |  |  529|  19.1k|#define os_memset(s, c, n) memset(s, c, n)
  ------------------
  301|  19.1k|	os_memset(context->state, 0, 20);
  ------------------
  |  |  529|  19.1k|#define os_memset(s, c, n) memset(s, c, n)
  ------------------
  302|  19.1k|	os_memset(context->count, 0, 8);
  ------------------
  |  |  529|  19.1k|#define os_memset(s, c, n) memset(s, c, n)
  ------------------
  303|  19.1k|	forced_memzero(finalcount, sizeof(finalcount));
  304|  19.1k|}

tls_prf_sha1_md5:
   32|    723|{
   33|    723|	size_t L_S1, L_S2, i;
   34|    723|	const u8 *S1, *S2;
   35|    723|	u8 A_MD5[MD5_MAC_LEN], A_SHA1[SHA1_MAC_LEN];
   36|    723|	u8 P_MD5[MD5_MAC_LEN], P_SHA1[SHA1_MAC_LEN];
   37|    723|	int MD5_pos, SHA1_pos;
   38|    723|	const u8 *MD5_addr[3];
   39|    723|	size_t MD5_len[3];
   40|    723|	const unsigned char *SHA1_addr[3];
   41|    723|	size_t SHA1_len[3];
   42|       |
   43|    723|	MD5_addr[0] = A_MD5;
   44|    723|	MD5_len[0] = MD5_MAC_LEN;
  ------------------
  |  |   12|    723|#define MD5_MAC_LEN 16
  ------------------
   45|    723|	MD5_addr[1] = (unsigned char *) label;
   46|    723|	MD5_len[1] = os_strlen(label);
  ------------------
  |  |  536|    723|#define os_strlen(s) strlen(s)
  ------------------
   47|    723|	MD5_addr[2] = seed;
   48|    723|	MD5_len[2] = seed_len;
   49|       |
   50|    723|	SHA1_addr[0] = A_SHA1;
   51|    723|	SHA1_len[0] = SHA1_MAC_LEN;
  ------------------
  |  |   12|    723|#define SHA1_MAC_LEN 20
  ------------------
   52|    723|	SHA1_addr[1] = (unsigned char *) label;
   53|    723|	SHA1_len[1] = os_strlen(label);
  ------------------
  |  |  536|    723|#define os_strlen(s) strlen(s)
  ------------------
   54|    723|	SHA1_addr[2] = seed;
   55|    723|	SHA1_len[2] = seed_len;
   56|       |
   57|       |	/* RFC 2246, Chapter 5
   58|       |	 * A(0) = seed, A(i) = HMAC(secret, A(i-1))
   59|       |	 * P_hash = HMAC(secret, A(1) + seed) + HMAC(secret, A(2) + seed) + ..
   60|       |	 * PRF = P_MD5(S1, label + seed) XOR P_SHA-1(S2, label + seed)
   61|       |	 */
   62|       |
   63|    723|	L_S1 = L_S2 = (secret_len + 1) / 2;
   64|    723|	S1 = secret;
   65|    723|	S2 = secret + L_S1;
   66|    723|	if (secret_len & 1) {
  ------------------
  |  Branch (66:6): [True: 0, False: 723]
  ------------------
   67|       |		/* The last byte of S1 will be shared with S2 */
   68|      0|		S2--;
   69|      0|	}
   70|       |
   71|    723|	hmac_md5_vector(S1, L_S1, 2, &MD5_addr[1], &MD5_len[1], A_MD5);
   72|    723|	hmac_sha1_vector(S2, L_S2, 2, &SHA1_addr[1], &SHA1_len[1], A_SHA1);
   73|       |
   74|    723|	MD5_pos = MD5_MAC_LEN;
  ------------------
  |  |   12|    723|#define MD5_MAC_LEN 16
  ------------------
   75|    723|	SHA1_pos = SHA1_MAC_LEN;
  ------------------
  |  |   12|    723|#define SHA1_MAC_LEN 20
  ------------------
   76|  41.3k|	for (i = 0; i < outlen; i++) {
  ------------------
  |  Branch (76:14): [True: 40.6k, False: 723]
  ------------------
   77|  40.6k|		if (MD5_pos == MD5_MAC_LEN) {
  ------------------
  |  |   12|  40.6k|#define MD5_MAC_LEN 16
  ------------------
  |  Branch (77:7): [True: 2.65k, False: 37.9k]
  ------------------
   78|  2.65k|			hmac_md5_vector(S1, L_S1, 3, MD5_addr, MD5_len, P_MD5);
   79|  2.65k|			MD5_pos = 0;
   80|  2.65k|			hmac_md5(S1, L_S1, A_MD5, MD5_MAC_LEN, A_MD5);
  ------------------
  |  |   12|  2.65k|#define MD5_MAC_LEN 16
  ------------------
   81|  2.65k|		}
   82|  40.6k|		if (SHA1_pos == SHA1_MAC_LEN) {
  ------------------
  |  |   12|  40.6k|#define SHA1_MAC_LEN 20
  ------------------
  |  Branch (82:7): [True: 2.40k, False: 38.2k]
  ------------------
   83|  2.40k|			hmac_sha1_vector(S2, L_S2, 3, SHA1_addr, SHA1_len,
   84|  2.40k|					 P_SHA1);
   85|  2.40k|			SHA1_pos = 0;
   86|  2.40k|			hmac_sha1(S2, L_S2, A_SHA1, SHA1_MAC_LEN, A_SHA1);
  ------------------
  |  |   12|  2.40k|#define SHA1_MAC_LEN 20
  ------------------
   87|  2.40k|		}
   88|       |
   89|  40.6k|		out[i] = P_MD5[MD5_pos] ^ P_SHA1[SHA1_pos];
   90|       |
   91|  40.6k|		MD5_pos++;
   92|  40.6k|		SHA1_pos++;
   93|  40.6k|	}
   94|       |
   95|    723|	forced_memzero(A_MD5, MD5_MAC_LEN);
  ------------------
  |  |   12|    723|#define MD5_MAC_LEN 16
  ------------------
   96|    723|	forced_memzero(P_MD5, MD5_MAC_LEN);
  ------------------
  |  |   12|    723|#define MD5_MAC_LEN 16
  ------------------
   97|    723|	forced_memzero(A_SHA1, SHA1_MAC_LEN);
  ------------------
  |  |   12|    723|#define SHA1_MAC_LEN 20
  ------------------
   98|    723|	forced_memzero(P_SHA1, SHA1_MAC_LEN);
  ------------------
  |  |   12|    723|#define SHA1_MAC_LEN 20
  ------------------
   99|       |
  100|    723|	return 0;
  101|    723|}

hmac_sha1_vector:
   28|  5.52k|{
   29|  5.52k|	unsigned char k_pad[64]; /* padding - key XORd with ipad/opad */
   30|  5.52k|	unsigned char tk[20];
   31|  5.52k|	const u8 *_addr[6];
   32|  5.52k|	size_t _len[6], i;
   33|  5.52k|	int ret;
   34|       |
   35|  5.52k|	if (num_elem > 5) {
  ------------------
  |  Branch (35:6): [True: 0, False: 5.52k]
  ------------------
   36|       |		/*
   37|       |		 * Fixed limit on the number of fragments to avoid having to
   38|       |		 * allocate memory (which could fail).
   39|       |		 */
   40|      0|		return -1;
   41|      0|	}
   42|       |
   43|       |        /* if key is longer than 64 bytes reset it to key = SHA1(key) */
   44|  5.52k|        if (key_len > 64) {
  ------------------
  |  Branch (44:13): [True: 0, False: 5.52k]
  ------------------
   45|      0|		if (sha1_vector(1, &key, &key_len, tk))
  ------------------
  |  Branch (45:7): [True: 0, False: 0]
  ------------------
   46|      0|			return -1;
   47|      0|		key = tk;
   48|      0|		key_len = 20;
   49|      0|        }
   50|       |
   51|       |	/* the HMAC_SHA1 transform looks like:
   52|       |	 *
   53|       |	 * SHA1(K XOR opad, SHA1(K XOR ipad, text))
   54|       |	 *
   55|       |	 * where K is an n byte key
   56|       |	 * ipad is the byte 0x36 repeated 64 times
   57|       |	 * opad is the byte 0x5c repeated 64 times
   58|       |	 * and text is the data being protected */
   59|       |
   60|       |	/* start out by storing key in ipad */
   61|  5.52k|	os_memset(k_pad, 0, sizeof(k_pad));
  ------------------
  |  |  529|  5.52k|#define os_memset(s, c, n) memset(s, c, n)
  ------------------
   62|  5.52k|	os_memcpy(k_pad, key, key_len);
  ------------------
  |  |  523|  5.52k|#define os_memcpy(d, s, n) memcpy((d), (s), (n))
  ------------------
   63|       |	/* XOR key with ipad values */
   64|   358k|	for (i = 0; i < 64; i++)
  ------------------
  |  Branch (64:14): [True: 353k, False: 5.52k]
  ------------------
   65|   353k|		k_pad[i] ^= 0x36;
   66|       |
   67|       |	/* perform inner SHA1 */
   68|  5.52k|	_addr[0] = k_pad;
   69|  5.52k|	_len[0] = 64;
   70|  16.5k|	for (i = 0; i < num_elem; i++) {
  ------------------
  |  Branch (70:14): [True: 11.0k, False: 5.52k]
  ------------------
   71|  11.0k|		_addr[i + 1] = addr[i];
   72|  11.0k|		_len[i + 1] = len[i];
   73|  11.0k|	}
   74|  5.52k|	if (sha1_vector(1 + num_elem, _addr, _len, mac))
  ------------------
  |  Branch (74:6): [True: 0, False: 5.52k]
  ------------------
   75|      0|		return -1;
   76|       |
   77|  5.52k|	os_memset(k_pad, 0, sizeof(k_pad));
  ------------------
  |  |  529|  5.52k|#define os_memset(s, c, n) memset(s, c, n)
  ------------------
   78|  5.52k|	os_memcpy(k_pad, key, key_len);
  ------------------
  |  |  523|  5.52k|#define os_memcpy(d, s, n) memcpy((d), (s), (n))
  ------------------
   79|       |	/* XOR key with opad values */
   80|   358k|	for (i = 0; i < 64; i++)
  ------------------
  |  Branch (80:14): [True: 353k, False: 5.52k]
  ------------------
   81|   353k|		k_pad[i] ^= 0x5c;
   82|       |
   83|       |	/* perform outer SHA1 */
   84|  5.52k|	_addr[0] = k_pad;
   85|  5.52k|	_len[0] = 64;
   86|  5.52k|	_addr[1] = mac;
   87|  5.52k|	_len[1] = SHA1_MAC_LEN;
  ------------------
  |  |   12|  5.52k|#define SHA1_MAC_LEN 20
  ------------------
   88|  5.52k|	ret = sha1_vector(2, _addr, _len, mac);
   89|  5.52k|	forced_memzero(k_pad, sizeof(k_pad));
   90|  5.52k|	forced_memzero(tk, sizeof(tk));
   91|  5.52k|	return ret;
   92|  5.52k|}
hmac_sha1:
  106|  2.40k|{
  107|  2.40k|	return hmac_sha1_vector(key, key_len, 1, &data, &data_len, mac);
  108|  2.40k|}

sha256_vector:
   27|  5.86k|{
   28|  5.86k|	struct sha256_state ctx;
   29|  5.86k|	size_t i;
   30|       |
   31|  5.86k|	if (TEST_FAIL())
  ------------------
  |  |  688|  5.86k|#define TEST_FAIL() testing_test_fail(NULL, false)
  |  |  ------------------
  |  |  |  Branch (688:21): [True: 0, False: 5.86k]
  |  |  ------------------
  ------------------
   32|      0|		return -1;
   33|       |
   34|  5.86k|	sha256_init(&ctx);
   35|  20.0k|	for (i = 0; i < num_elem; i++)
  ------------------
  |  Branch (35:14): [True: 14.1k, False: 5.86k]
  ------------------
   36|  14.1k|		if (sha256_process(&ctx, addr[i], len[i]))
  ------------------
  |  Branch (36:7): [True: 0, False: 14.1k]
  ------------------
   37|      0|			return -1;
   38|  5.86k|	if (sha256_done(&ctx, mac))
  ------------------
  |  Branch (38:6): [True: 0, False: 5.86k]
  ------------------
   39|      0|		return -1;
   40|  5.86k|	return 0;
   41|  5.86k|}
sha256_init:
  125|  20.3k|{
  126|  20.3k|	md->curlen = 0;
  127|  20.3k|	md->length = 0;
  128|  20.3k|	md->state[0] = 0x6A09E667UL;
  129|  20.3k|	md->state[1] = 0xBB67AE85UL;
  130|  20.3k|	md->state[2] = 0x3C6EF372UL;
  131|  20.3k|	md->state[3] = 0xA54FF53AUL;
  132|  20.3k|	md->state[4] = 0x510E527FUL;
  133|  20.3k|	md->state[5] = 0x9B05688CUL;
  134|  20.3k|	md->state[6] = 0x1F83D9ABUL;
  135|  20.3k|	md->state[7] = 0x5BE0CD19UL;
  136|  20.3k|}
sha256_process:
  147|  57.3k|{
  148|  57.3k|	unsigned long n;
  149|       |
  150|  57.3k|	if (md->curlen >= sizeof(md->buf))
  ------------------
  |  Branch (150:6): [True: 0, False: 57.3k]
  ------------------
  151|      0|		return -1;
  152|       |
  153|   173k|	while (inlen > 0) {
  ------------------
  |  Branch (153:9): [True: 115k, False: 57.3k]
  ------------------
  154|   115k|		if (md->curlen == 0 && inlen >= SHA256_BLOCK_SIZE) {
  ------------------
  |  |   12|  92.8k|#define SHA256_BLOCK_SIZE 64
  ------------------
  |  Branch (154:7): [True: 92.8k, False: 22.9k]
  |  Branch (154:26): [True: 62.5k, False: 30.3k]
  ------------------
  155|  62.5k|			if (sha256_compress(md, (unsigned char *) in) < 0)
  ------------------
  |  Branch (155:8): [True: 0, False: 62.5k]
  ------------------
  156|      0|				return -1;
  157|  62.5k|			md->length += SHA256_BLOCK_SIZE * 8;
  ------------------
  |  |   12|  62.5k|#define SHA256_BLOCK_SIZE 64
  ------------------
  158|  62.5k|			in += SHA256_BLOCK_SIZE;
  ------------------
  |  |   12|  62.5k|#define SHA256_BLOCK_SIZE 64
  ------------------
  159|  62.5k|			inlen -= SHA256_BLOCK_SIZE;
  ------------------
  |  |   12|  62.5k|#define SHA256_BLOCK_SIZE 64
  ------------------
  160|  62.5k|		} else {
  161|  53.2k|			n = MIN(inlen, (SHA256_BLOCK_SIZE - md->curlen));
  ------------------
  |  |  468|  53.2k|#define MIN(a, b) ((a) < (b) ? (a) : (b))
  |  |  ------------------
  |  |  |  Branch (468:20): [True: 42.8k, False: 10.3k]
  |  |  ------------------
  ------------------
  162|  53.2k|			os_memcpy(md->buf + md->curlen, in, n);
  ------------------
  |  |  523|  53.2k|#define os_memcpy(d, s, n) memcpy((d), (s), (n))
  ------------------
  163|  53.2k|			md->curlen += n;
  164|  53.2k|			in += n;
  165|  53.2k|			inlen -= n;
  166|  53.2k|			if (md->curlen == SHA256_BLOCK_SIZE) {
  ------------------
  |  |   12|  53.2k|#define SHA256_BLOCK_SIZE 64
  ------------------
  |  Branch (166:8): [True: 10.3k, False: 42.8k]
  ------------------
  167|  10.3k|				if (sha256_compress(md, md->buf) < 0)
  ------------------
  |  Branch (167:9): [True: 0, False: 10.3k]
  ------------------
  168|      0|					return -1;
  169|  10.3k|				md->length += 8 * SHA256_BLOCK_SIZE;
  ------------------
  |  |   12|  10.3k|#define SHA256_BLOCK_SIZE 64
  ------------------
  170|  10.3k|				md->curlen = 0;
  171|  10.3k|			}
  172|  53.2k|		}
  173|   115k|	}
  174|       |
  175|  57.3k|	return 0;
  176|  57.3k|}
sha256_done:
  186|  12.4k|{
  187|  12.4k|	int i;
  188|       |
  189|  12.4k|	if (md->curlen >= sizeof(md->buf))
  ------------------
  |  Branch (189:6): [True: 0, False: 12.4k]
  ------------------
  190|      0|		return -1;
  191|       |
  192|       |	/* increase the length of the message */
  193|  12.4k|	md->length += md->curlen * 8;
  194|       |
  195|       |	/* append the '1' bit */
  196|  12.4k|	md->buf[md->curlen++] = (unsigned char) 0x80;
  197|       |
  198|       |	/* if the length is currently above 56 bytes we append zeros
  199|       |	 * then compress.  Then we can fall back to padding zeros and length
  200|       |	 * encoding like normal.
  201|       |	 */
  202|  12.4k|	if (md->curlen > 56) {
  ------------------
  |  Branch (202:6): [True: 314, False: 12.1k]
  ------------------
  203|  1.12k|		while (md->curlen < SHA256_BLOCK_SIZE) {
  ------------------
  |  |   12|  1.12k|#define SHA256_BLOCK_SIZE 64
  ------------------
  |  Branch (203:10): [True: 811, False: 314]
  ------------------
  204|    811|			md->buf[md->curlen++] = (unsigned char) 0;
  205|    811|		}
  206|    314|		sha256_compress(md, md->buf);
  207|    314|		md->curlen = 0;
  208|    314|	}
  209|       |
  210|       |	/* pad up to 56 bytes of zeroes */
  211|   363k|	while (md->curlen < 56) {
  ------------------
  |  Branch (211:9): [True: 350k, False: 12.4k]
  ------------------
  212|   350k|		md->buf[md->curlen++] = (unsigned char) 0;
  213|   350k|	}
  214|       |
  215|       |	/* store length */
  216|  12.4k|	WPA_PUT_BE64(md->buf + 56, md->length);
  217|  12.4k|	sha256_compress(md, md->buf);
  218|       |
  219|       |	/* copy output */
  220|   112k|	for (i = 0; i < 8; i++)
  ------------------
  |  Branch (220:14): [True: 99.9k, False: 12.4k]
  ------------------
  221|  99.9k|		WPA_PUT_BE32(out + (4 * i), md->state[i]);
  222|       |
  223|  12.4k|	return 0;
  224|  12.4k|}
sha256-internal.c:sha256_compress:
   82|  85.7k|{
   83|  85.7k|	u32 S[8], W[64], t0, t1;
   84|  85.7k|	u32 t;
   85|  85.7k|	int i;
   86|       |
   87|       |	/* copy state into S */
   88|   771k|	for (i = 0; i < 8; i++) {
  ------------------
  |  Branch (88:14): [True: 685k, False: 85.7k]
  ------------------
   89|   685k|		S[i] = md->state[i];
   90|   685k|	}
   91|       |
   92|       |	/* copy the state into 512-bits into W[0..15] */
   93|  1.45M|	for (i = 0; i < 16; i++)
  ------------------
  |  Branch (93:14): [True: 1.37M, False: 85.7k]
  ------------------
   94|  1.37M|		W[i] = WPA_GET_BE32(buf + (4 * i));
   95|       |
   96|       |	/* fill W[16..63] */
   97|  4.20M|	for (i = 16; i < 64; i++) {
  ------------------
  |  Branch (97:15): [True: 4.11M, False: 85.7k]
  ------------------
   98|  4.11M|		W[i] = Gamma1(W[i - 2]) + W[i - 7] + Gamma0(W[i - 15]) +
  ------------------
  |  |   78|  4.11M|#define Gamma1(x)       (S(x, 17) ^ S(x, 19) ^ R(x, 10))
  |  |  ------------------
  |  |  |  |   73|  4.11M|#define S(x, n)         RORc((x), (n))
  |  |  |  |  ------------------
  |  |  |  |  |  |   68|  4.11M|#define RORc(x, y) \
  |  |  |  |  |  |   69|  4.11M|( ((((unsigned long) (x) & 0xFFFFFFFFUL) >> (unsigned long) ((y) & 31)) | \
  |  |  |  |  |  |   70|  4.11M|   ((unsigned long) (x) << (unsigned long) (32 - ((y) & 31)))) & 0xFFFFFFFFUL)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define Gamma1(x)       (S(x, 17) ^ S(x, 19) ^ R(x, 10))
  |  |  ------------------
  |  |  |  |   73|  4.11M|#define S(x, n)         RORc((x), (n))
  |  |  |  |  ------------------
  |  |  |  |  |  |   68|  4.11M|#define RORc(x, y) \
  |  |  |  |  |  |   69|  4.11M|( ((((unsigned long) (x) & 0xFFFFFFFFUL) >> (unsigned long) ((y) & 31)) | \
  |  |  |  |  |  |   70|  4.11M|   ((unsigned long) (x) << (unsigned long) (32 - ((y) & 31)))) & 0xFFFFFFFFUL)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define Gamma1(x)       (S(x, 17) ^ S(x, 19) ^ R(x, 10))
  |  |  ------------------
  |  |  |  |   74|  4.11M|#define R(x, n)         (((x)&0xFFFFFFFFUL)>>(n))
  |  |  ------------------
  ------------------
              		W[i] = Gamma1(W[i - 2]) + W[i - 7] + Gamma0(W[i - 15]) +
  ------------------
  |  |   77|  4.11M|#define Gamma0(x)       (S(x, 7) ^ S(x, 18) ^ R(x, 3))
  |  |  ------------------
  |  |  |  |   73|  4.11M|#define S(x, n)         RORc((x), (n))
  |  |  |  |  ------------------
  |  |  |  |  |  |   68|  4.11M|#define RORc(x, y) \
  |  |  |  |  |  |   69|  4.11M|( ((((unsigned long) (x) & 0xFFFFFFFFUL) >> (unsigned long) ((y) & 31)) | \
  |  |  |  |  |  |   70|  4.11M|   ((unsigned long) (x) << (unsigned long) (32 - ((y) & 31)))) & 0xFFFFFFFFUL)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define Gamma0(x)       (S(x, 7) ^ S(x, 18) ^ R(x, 3))
  |  |  ------------------
  |  |  |  |   73|  4.11M|#define S(x, n)         RORc((x), (n))
  |  |  |  |  ------------------
  |  |  |  |  |  |   68|  4.11M|#define RORc(x, y) \
  |  |  |  |  |  |   69|  4.11M|( ((((unsigned long) (x) & 0xFFFFFFFFUL) >> (unsigned long) ((y) & 31)) | \
  |  |  |  |  |  |   70|  4.11M|   ((unsigned long) (x) << (unsigned long) (32 - ((y) & 31)))) & 0xFFFFFFFFUL)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define Gamma0(x)       (S(x, 7) ^ S(x, 18) ^ R(x, 3))
  |  |  ------------------
  |  |  |  |   74|  4.11M|#define R(x, n)         (((x)&0xFFFFFFFFUL)>>(n))
  |  |  ------------------
  ------------------
   99|  4.11M|			W[i - 16];
  100|  4.11M|	}
  101|       |
  102|       |	/* Compress */
  103|  85.7k|#define RND(a,b,c,d,e,f,g,h,i)                          \
  104|  85.7k|	t0 = h + Sigma1(e) + Ch(e, f, g) + K[i] + W[i];	\
  105|  85.7k|	t1 = Sigma0(a) + Maj(a, b, c);			\
  106|  85.7k|	d += t0;					\
  107|  85.7k|	h  = t0 + t1;
  108|       |
  109|  5.57M|	for (i = 0; i < 64; ++i) {
  ------------------
  |  Branch (109:14): [True: 5.48M, False: 85.7k]
  ------------------
  110|  5.48M|		RND(S[0], S[1], S[2], S[3], S[4], S[5], S[6], S[7], i);
  ------------------
  |  |  104|  5.48M|	t0 = h + Sigma1(e) + Ch(e, f, g) + K[i] + W[i];	\
  |  |  ------------------
  |  |  |  |   76|  5.48M|#define Sigma1(x)       (S(x, 6) ^ S(x, 11) ^ S(x, 25))
  |  |  |  |  ------------------
  |  |  |  |  |  |   73|  5.48M|#define S(x, n)         RORc((x), (n))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|  5.48M|#define RORc(x, y) \
  |  |  |  |  |  |  |  |   69|  5.48M|( ((((unsigned long) (x) & 0xFFFFFFFFUL) >> (unsigned long) ((y) & 31)) | \
  |  |  |  |  |  |  |  |   70|  5.48M|   ((unsigned long) (x) << (unsigned long) (32 - ((y) & 31)))) & 0xFFFFFFFFUL)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define Sigma1(x)       (S(x, 6) ^ S(x, 11) ^ S(x, 25))
  |  |  |  |  ------------------
  |  |  |  |  |  |   73|  5.48M|#define S(x, n)         RORc((x), (n))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|  5.48M|#define RORc(x, y) \
  |  |  |  |  |  |  |  |   69|  5.48M|( ((((unsigned long) (x) & 0xFFFFFFFFUL) >> (unsigned long) ((y) & 31)) | \
  |  |  |  |  |  |  |  |   70|  5.48M|   ((unsigned long) (x) << (unsigned long) (32 - ((y) & 31)))) & 0xFFFFFFFFUL)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define Sigma1(x)       (S(x, 6) ^ S(x, 11) ^ S(x, 25))
  |  |  |  |  ------------------
  |  |  |  |  |  |   73|  5.48M|#define S(x, n)         RORc((x), (n))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|  5.48M|#define RORc(x, y) \
  |  |  |  |  |  |  |  |   69|  5.48M|( ((((unsigned long) (x) & 0xFFFFFFFFUL) >> (unsigned long) ((y) & 31)) | \
  |  |  |  |  |  |  |  |   70|  5.48M|   ((unsigned long) (x) << (unsigned long) (32 - ((y) & 31)))) & 0xFFFFFFFFUL)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               	t0 = h + Sigma1(e) + Ch(e, f, g) + K[i] + W[i];	\
  |  |  ------------------
  |  |  |  |   71|  5.48M|#define Ch(x,y,z)       (z ^ (x & (y ^ z)))
  |  |  ------------------
  |  |  105|  5.48M|	t1 = Sigma0(a) + Maj(a, b, c);			\
  |  |  ------------------
  |  |  |  |   75|  5.48M|#define Sigma0(x)       (S(x, 2) ^ S(x, 13) ^ S(x, 22))
  |  |  |  |  ------------------
  |  |  |  |  |  |   73|  5.48M|#define S(x, n)         RORc((x), (n))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|  5.48M|#define RORc(x, y) \
  |  |  |  |  |  |  |  |   69|  5.48M|( ((((unsigned long) (x) & 0xFFFFFFFFUL) >> (unsigned long) ((y) & 31)) | \
  |  |  |  |  |  |  |  |   70|  5.48M|   ((unsigned long) (x) << (unsigned long) (32 - ((y) & 31)))) & 0xFFFFFFFFUL)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define Sigma0(x)       (S(x, 2) ^ S(x, 13) ^ S(x, 22))
  |  |  |  |  ------------------
  |  |  |  |  |  |   73|  5.48M|#define S(x, n)         RORc((x), (n))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|  5.48M|#define RORc(x, y) \
  |  |  |  |  |  |  |  |   69|  5.48M|( ((((unsigned long) (x) & 0xFFFFFFFFUL) >> (unsigned long) ((y) & 31)) | \
  |  |  |  |  |  |  |  |   70|  5.48M|   ((unsigned long) (x) << (unsigned long) (32 - ((y) & 31)))) & 0xFFFFFFFFUL)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define Sigma0(x)       (S(x, 2) ^ S(x, 13) ^ S(x, 22))
  |  |  |  |  ------------------
  |  |  |  |  |  |   73|  5.48M|#define S(x, n)         RORc((x), (n))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|  5.48M|#define RORc(x, y) \
  |  |  |  |  |  |  |  |   69|  5.48M|( ((((unsigned long) (x) & 0xFFFFFFFFUL) >> (unsigned long) ((y) & 31)) | \
  |  |  |  |  |  |  |  |   70|  5.48M|   ((unsigned long) (x) << (unsigned long) (32 - ((y) & 31)))) & 0xFFFFFFFFUL)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               	t1 = Sigma0(a) + Maj(a, b, c);			\
  |  |  ------------------
  |  |  |  |   72|  5.48M|#define Maj(x,y,z)      (((x | y) & z) | (x & y))
  |  |  ------------------
  |  |  106|  5.48M|	d += t0;					\
  |  |  107|  5.48M|	h  = t0 + t1;
  ------------------
  111|  5.48M|		t = S[7]; S[7] = S[6]; S[6] = S[5]; S[5] = S[4];
  112|  5.48M|		S[4] = S[3]; S[3] = S[2]; S[2] = S[1]; S[1] = S[0]; S[0] = t;
  113|  5.48M|	}
  114|       |
  115|       |	/* feedback */
  116|   771k|	for (i = 0; i < 8; i++) {
  ------------------
  |  Branch (116:14): [True: 685k, False: 85.7k]
  ------------------
  117|   685k|		md->state[i] = md->state[i] + S[i];
  118|   685k|	}
  119|  85.7k|	return 0;
  120|  85.7k|}

tls_prf_sha256:
   31|    546|{
   32|    546|	size_t clen;
   33|    546|	u8 A[SHA256_MAC_LEN];
   34|    546|	u8 P[SHA256_MAC_LEN];
   35|    546|	size_t pos;
   36|    546|	const unsigned char *addr[3];
   37|    546|	size_t len[3];
   38|       |
   39|    546|	addr[0] = A;
   40|    546|	len[0] = SHA256_MAC_LEN;
  ------------------
  |  |   12|    546|#define SHA256_MAC_LEN 32
  ------------------
   41|    546|	addr[1] = (unsigned char *) label;
   42|    546|	len[1] = os_strlen(label);
  ------------------
  |  |  536|    546|#define os_strlen(s) strlen(s)
  ------------------
   43|    546|	addr[2] = seed;
   44|    546|	len[2] = seed_len;
   45|       |
   46|       |	/*
   47|       |	 * RFC 5246, Chapter 5
   48|       |	 * A(0) = seed, A(i) = HMAC(secret, A(i-1))
   49|       |	 * P_hash = HMAC(secret, A(1) + seed) + HMAC(secret, A(2) + seed) + ..
   50|       |	 * PRF(secret, label, seed) = P_SHA256(secret, label + seed)
   51|       |	 */
   52|       |
   53|    546|	if (hmac_sha256_vector(secret, secret_len, 2, &addr[1], &len[1], A) < 0)
  ------------------
  |  Branch (53:6): [True: 0, False: 546]
  ------------------
   54|      0|		return -1;
   55|       |
   56|    546|	pos = 0;
   57|  1.65k|	while (pos < outlen) {
  ------------------
  |  Branch (57:9): [True: 1.10k, False: 546]
  ------------------
   58|  1.10k|		if (hmac_sha256_vector(secret, secret_len, 3, addr, len, P) <
  ------------------
  |  Branch (58:7): [True: 0, False: 1.10k]
  ------------------
   59|  1.10k|		    0 ||
   60|  1.10k|		    hmac_sha256(secret, secret_len, A, SHA256_MAC_LEN, A) < 0)
  ------------------
  |  |   12|  1.10k|#define SHA256_MAC_LEN 32
  ------------------
  |  Branch (60:7): [True: 0, False: 1.10k]
  ------------------
   61|      0|			return -1;
   62|       |
   63|  1.10k|		clen = outlen - pos;
   64|  1.10k|		if (clen > SHA256_MAC_LEN)
  ------------------
  |  |   12|  1.10k|#define SHA256_MAC_LEN 32
  ------------------
  |  Branch (64:7): [True: 560, False: 546]
  ------------------
   65|    560|			clen = SHA256_MAC_LEN;
  ------------------
  |  |   12|    560|#define SHA256_MAC_LEN 32
  ------------------
   66|  1.10k|		os_memcpy(out + pos, P, clen);
  ------------------
  |  |  523|  1.10k|#define os_memcpy(d, s, n) memcpy((d), (s), (n))
  ------------------
   67|  1.10k|		pos += clen;
   68|  1.10k|	}
   69|       |
   70|    546|	return 0;
   71|    546|}

hmac_sha256_vector:
   28|  2.75k|{
   29|  2.75k|	unsigned char k_pad[64]; /* padding - key XORd with ipad/opad */
   30|  2.75k|	unsigned char tk[32];
   31|  2.75k|	const u8 *_addr[HMAC_VECTOR_MAX_ELEM + 1];
   32|  2.75k|	size_t _len[HMAC_VECTOR_MAX_ELEM + 1], i;
   33|  2.75k|	int ret;
   34|       |
   35|  2.75k|	if (num_elem > HMAC_VECTOR_MAX_ELEM) {
  ------------------
  |  |   24|  2.75k|#define HMAC_VECTOR_MAX_ELEM 11
  ------------------
  |  Branch (35:6): [True: 0, False: 2.75k]
  ------------------
   36|       |		/*
   37|       |		 * Fixed limit on the number of fragments to avoid having to
   38|       |		 * allocate memory (which could fail).
   39|       |		 */
   40|      0|		return -1;
   41|      0|	}
   42|       |
   43|       |        /* if key is longer than 64 bytes reset it to key = SHA256(key) */
   44|  2.75k|        if (key_len > 64) {
  ------------------
  |  Branch (44:13): [True: 350, False: 2.40k]
  ------------------
   45|    350|		if (sha256_vector(1, &key, &key_len, tk) < 0)
  ------------------
  |  Branch (45:7): [True: 0, False: 350]
  ------------------
   46|      0|			return -1;
   47|    350|		key = tk;
   48|    350|		key_len = 32;
   49|    350|        }
   50|       |
   51|       |	/* the HMAC_SHA256 transform looks like:
   52|       |	 *
   53|       |	 * SHA256(K XOR opad, SHA256(K XOR ipad, text))
   54|       |	 *
   55|       |	 * where K is an n byte key
   56|       |	 * ipad is the byte 0x36 repeated 64 times
   57|       |	 * opad is the byte 0x5c repeated 64 times
   58|       |	 * and text is the data being protected */
   59|       |
   60|       |	/* start out by storing key in ipad */
   61|  2.75k|	os_memset(k_pad, 0, sizeof(k_pad));
  ------------------
  |  |  529|  2.75k|#define os_memset(s, c, n) memset(s, c, n)
  ------------------
   62|  2.75k|	os_memcpy(k_pad, key, key_len);
  ------------------
  |  |  523|  2.75k|#define os_memcpy(d, s, n) memcpy((d), (s), (n))
  ------------------
   63|       |	/* XOR key with ipad values */
   64|   179k|	for (i = 0; i < 64; i++)
  ------------------
  |  Branch (64:14): [True: 176k, False: 2.75k]
  ------------------
   65|   176k|		k_pad[i] ^= 0x36;
   66|       |
   67|       |	/* perform inner SHA256 */
   68|  2.75k|	_addr[0] = k_pad;
   69|  2.75k|	_len[0] = 64;
   70|  8.27k|	for (i = 0; i < num_elem; i++) {
  ------------------
  |  Branch (70:14): [True: 5.51k, False: 2.75k]
  ------------------
   71|  5.51k|		_addr[i + 1] = addr[i];
   72|  5.51k|		_len[i + 1] = len[i];
   73|  5.51k|	}
   74|  2.75k|	ret = sha256_vector(1 + num_elem, _addr, _len, mac);
   75|  2.75k|	if (ret < 0)
  ------------------
  |  Branch (75:6): [True: 0, False: 2.75k]
  ------------------
   76|      0|		goto fail;
   77|       |
   78|  2.75k|	os_memset(k_pad, 0, sizeof(k_pad));
  ------------------
  |  |  529|  2.75k|#define os_memset(s, c, n) memset(s, c, n)
  ------------------
   79|  2.75k|	os_memcpy(k_pad, key, key_len);
  ------------------
  |  |  523|  2.75k|#define os_memcpy(d, s, n) memcpy((d), (s), (n))
  ------------------
   80|       |	/* XOR key with opad values */
   81|   179k|	for (i = 0; i < 64; i++)
  ------------------
  |  Branch (81:14): [True: 176k, False: 2.75k]
  ------------------
   82|   176k|		k_pad[i] ^= 0x5c;
   83|       |
   84|       |	/* perform outer SHA256 */
   85|  2.75k|	_addr[0] = k_pad;
   86|  2.75k|	_len[0] = 64;
   87|  2.75k|	_addr[1] = mac;
   88|  2.75k|	_len[1] = SHA256_MAC_LEN;
  ------------------
  |  |   12|  2.75k|#define SHA256_MAC_LEN 32
  ------------------
   89|       |
   90|  2.75k|	ret = sha256_vector(2, _addr, _len, mac);
   91|       |
   92|  2.75k|fail:
   93|  2.75k|	forced_memzero(k_pad, sizeof(k_pad));
   94|  2.75k|	forced_memzero(tk, sizeof(tk));
   95|       |
   96|  2.75k|	return ret;
   97|  2.75k|}
hmac_sha256:
  111|  1.10k|{
  112|  1.10k|	return hmac_sha256_vector(key, key_len, 1, &data, &data_len, mac);
  113|  1.10k|}

sha384_init:
   53|    113|{
   54|    113|	md->curlen = 0;
   55|    113|	md->length = 0;
   56|    113|	md->state[0] = CONST64(0xcbbb9d5dc1059ed8);
  ------------------
  |  |   45|    113|#define CONST64(n) n ## ULL
  ------------------
   57|    113|	md->state[1] = CONST64(0x629a292a367cd507);
  ------------------
  |  |   45|    113|#define CONST64(n) n ## ULL
  ------------------
   58|    113|	md->state[2] = CONST64(0x9159015a3070dd17);
  ------------------
  |  |   45|    113|#define CONST64(n) n ## ULL
  ------------------
   59|    113|	md->state[3] = CONST64(0x152fecd8f70e5939);
  ------------------
  |  |   45|    113|#define CONST64(n) n ## ULL
  ------------------
   60|    113|	md->state[4] = CONST64(0x67332667ffc00b31);
  ------------------
  |  |   45|    113|#define CONST64(n) n ## ULL
  ------------------
   61|    113|	md->state[5] = CONST64(0x8eb44a8768581511);
  ------------------
  |  |   45|    113|#define CONST64(n) n ## ULL
  ------------------
   62|    113|	md->state[6] = CONST64(0xdb0c2e0d64f98fa7);
  ------------------
  |  |   45|    113|#define CONST64(n) n ## ULL
  ------------------
   63|    113|	md->state[7] = CONST64(0x47b5481dbefa4fa4);
  ------------------
  |  |   45|    113|#define CONST64(n) n ## ULL
  ------------------
   64|    113|}
sha384_process:
   68|    339|{
   69|    339|	return sha512_process(md, in, inlen);
   70|    339|}
sha384_done:
   79|    113|{
   80|    113|	unsigned char buf[64];
   81|       |
   82|    113|	if (md->curlen >= sizeof(md->buf))
  ------------------
  |  Branch (82:6): [True: 0, False: 113]
  ------------------
   83|      0|		return -1;
   84|       |
   85|    113|	if (sha512_done(md, buf) != 0)
  ------------------
  |  Branch (85:6): [True: 0, False: 113]
  ------------------
   86|      0|		return -1;
   87|       |
   88|    113|	os_memcpy(out, buf, 48);
  ------------------
  |  |  523|    113|#define os_memcpy(d, s, n) memcpy((d), (s), (n))
  ------------------
   89|    113|	return 0;
   90|    113|}

sha512_process:
  185|    339|{
  186|    339|	unsigned long n;
  187|       |
  188|    339|	if (md->curlen >= sizeof(md->buf))
  ------------------
  |  Branch (188:6): [True: 0, False: 339]
  ------------------
  189|      0|		return -1;
  190|       |
  191|  1.04k|	while (inlen > 0) {
  ------------------
  |  Branch (191:9): [True: 706, False: 339]
  ------------------
  192|    706|		if (md->curlen == 0 && inlen >= SHA512_BLOCK_SIZE) {
  ------------------
  |  |   12|    480|#define SHA512_BLOCK_SIZE 128
  ------------------
  |  Branch (192:7): [True: 480, False: 226]
  |  Branch (192:26): [True: 254, False: 226]
  ------------------
  193|    254|			if (sha512_compress(md, (unsigned char *) in) < 0)
  ------------------
  |  Branch (193:8): [True: 0, False: 254]
  ------------------
  194|      0|				return -1;
  195|    254|			md->length += SHA512_BLOCK_SIZE * 8;
  ------------------
  |  |   12|    254|#define SHA512_BLOCK_SIZE 128
  ------------------
  196|    254|			in += SHA512_BLOCK_SIZE;
  ------------------
  |  |   12|    254|#define SHA512_BLOCK_SIZE 128
  ------------------
  197|    254|			inlen -= SHA512_BLOCK_SIZE;
  ------------------
  |  |   12|    254|#define SHA512_BLOCK_SIZE 128
  ------------------
  198|    452|		} else {
  199|    452|			n = MIN(inlen, (SHA512_BLOCK_SIZE - md->curlen));
  ------------------
  |  |  468|    452|#define MIN(a, b) ((a) < (b) ? (a) : (b))
  |  |  ------------------
  |  |  |  Branch (468:20): [True: 339, False: 113]
  |  |  ------------------
  ------------------
  200|    452|			os_memcpy(md->buf + md->curlen, in, n);
  ------------------
  |  |  523|    452|#define os_memcpy(d, s, n) memcpy((d), (s), (n))
  ------------------
  201|    452|			md->curlen += n;
  202|    452|			in += n;
  203|    452|			inlen -= n;
  204|    452|			if (md->curlen == SHA512_BLOCK_SIZE) {
  ------------------
  |  |   12|    452|#define SHA512_BLOCK_SIZE 128
  ------------------
  |  Branch (204:8): [True: 113, False: 339]
  ------------------
  205|    113|				if (sha512_compress(md, md->buf) < 0)
  ------------------
  |  Branch (205:9): [True: 0, False: 113]
  ------------------
  206|      0|					return -1;
  207|    113|				md->length += 8 * SHA512_BLOCK_SIZE;
  ------------------
  |  |   12|    113|#define SHA512_BLOCK_SIZE 128
  ------------------
  208|    113|				md->curlen = 0;
  209|    113|			}
  210|    452|		}
  211|    706|	}
  212|       |
  213|    339|	return 0;
  214|    339|}
sha512_done:
  224|    113|{
  225|    113|	int i;
  226|       |
  227|    113|	if (md->curlen >= sizeof(md->buf))
  ------------------
  |  Branch (227:6): [True: 0, False: 113]
  ------------------
  228|      0|		return -1;
  229|       |
  230|       |	/* increase the length of the message */
  231|    113|	md->length += md->curlen * CONST64(8);
  ------------------
  |  |   45|    113|#define CONST64(n) n ## ULL
  ------------------
  232|       |
  233|       |	/* append the '1' bit */
  234|    113|	md->buf[md->curlen++] = (unsigned char) 0x80;
  235|       |
  236|       |	/* if the length is currently above 112 bytes we append zeros
  237|       |	 * then compress.  Then we can fall back to padding zeros and length
  238|       |	 * encoding like normal.
  239|       |	 */
  240|    113|	if (md->curlen > 112) {
  ------------------
  |  Branch (240:6): [True: 3, False: 110]
  ------------------
  241|     27|		while (md->curlen < 128) {
  ------------------
  |  Branch (241:10): [True: 24, False: 3]
  ------------------
  242|     24|			md->buf[md->curlen++] = (unsigned char) 0;
  243|     24|		}
  244|      3|		sha512_compress(md, md->buf);
  245|      3|		md->curlen = 0;
  246|      3|	}
  247|       |
  248|       |	/* pad up to 120 bytes of zeroes
  249|       |	 * note: that from 112 to 120 is the 64 MSB of the length.  We assume
  250|       |	 * that you won't hash > 2^64 bits of data... :-)
  251|       |	 */
  252|  5.68k|	while (md->curlen < 120) {
  ------------------
  |  Branch (252:9): [True: 5.57k, False: 113]
  ------------------
  253|  5.57k|		md->buf[md->curlen++] = (unsigned char) 0;
  254|  5.57k|	}
  255|       |
  256|       |	/* store length */
  257|    113|	WPA_PUT_BE64(md->buf + 120, md->length);
  258|    113|	sha512_compress(md, md->buf);
  259|       |
  260|       |	/* copy output */
  261|  1.01k|	for (i = 0; i < 8; i++)
  ------------------
  |  Branch (261:14): [True: 904, False: 113]
  ------------------
  262|    904|		WPA_PUT_BE64(out + (8 * i), md->state[i]);
  263|       |
  264|    113|	return 0;
  265|    113|}
sha512-internal.c:sha512_compress:
  108|    483|{
  109|    483|	u64 S[8], t0, t1;
  110|    483|	u64 *W;
  111|    483|	int i;
  112|       |
  113|    483|	W = os_malloc(80 * sizeof(u64));
  ------------------
  |  |  505|    483|#define os_malloc(s) malloc((s))
  ------------------
  114|    483|	if (!W)
  ------------------
  |  Branch (114:6): [True: 0, False: 483]
  ------------------
  115|      0|		return -1;
  116|       |
  117|       |	/* copy state into S */
  118|  4.34k|	for (i = 0; i < 8; i++) {
  ------------------
  |  Branch (118:14): [True: 3.86k, False: 483]
  ------------------
  119|  3.86k|		S[i] = md->state[i];
  120|  3.86k|	}
  121|       |
  122|       |	/* copy the state into 1024-bits into W[0..15] */
  123|  8.21k|	for (i = 0; i < 16; i++)
  ------------------
  |  Branch (123:14): [True: 7.72k, False: 483]
  ------------------
  124|  7.72k|		W[i] = WPA_GET_BE64(buf + (8 * i));
  125|       |
  126|       |	/* fill W[16..79] */
  127|  31.3k|	for (i = 16; i < 80; i++) {
  ------------------
  |  Branch (127:15): [True: 30.9k, False: 483]
  ------------------
  128|  30.9k|		W[i] = Gamma1(W[i - 2]) + W[i - 7] + Gamma0(W[i - 15]) +
  ------------------
  |  |   99|  30.9k|#define Gamma1(x)       (S(x, 19) ^ S(x, 61) ^ R(x, 6))
  |  |  ------------------
  |  |  |  |   94|  30.9k|#define S(x, n)         ROR64c(x, n)
  |  |  |  |  ------------------
  |  |  |  |  |  |  102|  30.9k|    ( ((((x) & CONST64(0xFFFFFFFFFFFFFFFF)) >> ((u64) (y) & CONST64(63))) | \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   45|  30.9k|#define CONST64(n) n ## ULL
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                   ( ((((x) & CONST64(0xFFFFFFFFFFFFFFFF)) >> ((u64) (y) & CONST64(63))) | \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   45|  30.9k|#define CONST64(n) n ## ULL
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  103|  30.9k|      ((x) << ((u64) (64 - ((y) & CONST64(63)))))) & \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   45|  30.9k|#define CONST64(n) n ## ULL
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  104|  30.9k|      CONST64(0xFFFFFFFFFFFFFFFF))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   45|  30.9k|#define CONST64(n) n ## ULL
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define Gamma1(x)       (S(x, 19) ^ S(x, 61) ^ R(x, 6))
  |  |  ------------------
  |  |  |  |   94|  30.9k|#define S(x, n)         ROR64c(x, n)
  |  |  |  |  ------------------
  |  |  |  |  |  |  102|  30.9k|    ( ((((x) & CONST64(0xFFFFFFFFFFFFFFFF)) >> ((u64) (y) & CONST64(63))) | \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   45|  30.9k|#define CONST64(n) n ## ULL
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                   ( ((((x) & CONST64(0xFFFFFFFFFFFFFFFF)) >> ((u64) (y) & CONST64(63))) | \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   45|  30.9k|#define CONST64(n) n ## ULL
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  103|  30.9k|      ((x) << ((u64) (64 - ((y) & CONST64(63)))))) & \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   45|  30.9k|#define CONST64(n) n ## ULL
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  104|  30.9k|      CONST64(0xFFFFFFFFFFFFFFFF))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   45|  30.9k|#define CONST64(n) n ## ULL
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define Gamma1(x)       (S(x, 19) ^ S(x, 61) ^ R(x, 6))
  |  |  ------------------
  |  |  |  |   95|  30.9k|#define R(x, n)         (((x) & CONST64(0xFFFFFFFFFFFFFFFF)) >> ((u64) n))
  |  |  |  |  ------------------
  |  |  |  |  |  |   45|  30.9k|#define CONST64(n) n ## ULL
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
              		W[i] = Gamma1(W[i - 2]) + W[i - 7] + Gamma0(W[i - 15]) +
  ------------------
  |  |   98|  30.9k|#define Gamma0(x)       (S(x, 1) ^ S(x, 8) ^ R(x, 7))
  |  |  ------------------
  |  |  |  |   94|  30.9k|#define S(x, n)         ROR64c(x, n)
  |  |  |  |  ------------------
  |  |  |  |  |  |  102|  30.9k|    ( ((((x) & CONST64(0xFFFFFFFFFFFFFFFF)) >> ((u64) (y) & CONST64(63))) | \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   45|  30.9k|#define CONST64(n) n ## ULL
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                   ( ((((x) & CONST64(0xFFFFFFFFFFFFFFFF)) >> ((u64) (y) & CONST64(63))) | \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   45|  30.9k|#define CONST64(n) n ## ULL
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  103|  30.9k|      ((x) << ((u64) (64 - ((y) & CONST64(63)))))) & \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   45|  30.9k|#define CONST64(n) n ## ULL
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  104|  30.9k|      CONST64(0xFFFFFFFFFFFFFFFF))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   45|  30.9k|#define CONST64(n) n ## ULL
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define Gamma0(x)       (S(x, 1) ^ S(x, 8) ^ R(x, 7))
  |  |  ------------------
  |  |  |  |   94|  30.9k|#define S(x, n)         ROR64c(x, n)
  |  |  |  |  ------------------
  |  |  |  |  |  |  102|  30.9k|    ( ((((x) & CONST64(0xFFFFFFFFFFFFFFFF)) >> ((u64) (y) & CONST64(63))) | \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   45|  30.9k|#define CONST64(n) n ## ULL
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                   ( ((((x) & CONST64(0xFFFFFFFFFFFFFFFF)) >> ((u64) (y) & CONST64(63))) | \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   45|  30.9k|#define CONST64(n) n ## ULL
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  103|  30.9k|      ((x) << ((u64) (64 - ((y) & CONST64(63)))))) & \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   45|  30.9k|#define CONST64(n) n ## ULL
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  104|  30.9k|      CONST64(0xFFFFFFFFFFFFFFFF))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   45|  30.9k|#define CONST64(n) n ## ULL
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define Gamma0(x)       (S(x, 1) ^ S(x, 8) ^ R(x, 7))
  |  |  ------------------
  |  |  |  |   95|  30.9k|#define R(x, n)         (((x) & CONST64(0xFFFFFFFFFFFFFFFF)) >> ((u64) n))
  |  |  |  |  ------------------
  |  |  |  |  |  |   45|  30.9k|#define CONST64(n) n ## ULL
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  129|  30.9k|			W[i - 16];
  130|  30.9k|	}
  131|       |
  132|       |	/* Compress */
  133|  39.1k|	for (i = 0; i < 80; i++) {
  ------------------
  |  Branch (133:14): [True: 38.6k, False: 483]
  ------------------
  134|  38.6k|		t0 = S[7] + Sigma1(S[4]) + Ch(S[4], S[5], S[6]) + K[i] + W[i];
  ------------------
  |  |   97|  38.6k|#define Sigma1(x)       (S(x, 14) ^ S(x, 18) ^ S(x, 41))
  |  |  ------------------
  |  |  |  |   94|  38.6k|#define S(x, n)         ROR64c(x, n)
  |  |  |  |  ------------------
  |  |  |  |  |  |  102|  38.6k|    ( ((((x) & CONST64(0xFFFFFFFFFFFFFFFF)) >> ((u64) (y) & CONST64(63))) | \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   45|  38.6k|#define CONST64(n) n ## ULL
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                   ( ((((x) & CONST64(0xFFFFFFFFFFFFFFFF)) >> ((u64) (y) & CONST64(63))) | \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   45|  38.6k|#define CONST64(n) n ## ULL
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  103|  38.6k|      ((x) << ((u64) (64 - ((y) & CONST64(63)))))) & \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   45|  38.6k|#define CONST64(n) n ## ULL
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  104|  38.6k|      CONST64(0xFFFFFFFFFFFFFFFF))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   45|  38.6k|#define CONST64(n) n ## ULL
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define Sigma1(x)       (S(x, 14) ^ S(x, 18) ^ S(x, 41))
  |  |  ------------------
  |  |  |  |   94|  38.6k|#define S(x, n)         ROR64c(x, n)
  |  |  |  |  ------------------
  |  |  |  |  |  |  102|  38.6k|    ( ((((x) & CONST64(0xFFFFFFFFFFFFFFFF)) >> ((u64) (y) & CONST64(63))) | \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   45|  38.6k|#define CONST64(n) n ## ULL
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                   ( ((((x) & CONST64(0xFFFFFFFFFFFFFFFF)) >> ((u64) (y) & CONST64(63))) | \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   45|  38.6k|#define CONST64(n) n ## ULL
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  103|  38.6k|      ((x) << ((u64) (64 - ((y) & CONST64(63)))))) & \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   45|  38.6k|#define CONST64(n) n ## ULL
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  104|  38.6k|      CONST64(0xFFFFFFFFFFFFFFFF))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   45|  38.6k|#define CONST64(n) n ## ULL
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define Sigma1(x)       (S(x, 14) ^ S(x, 18) ^ S(x, 41))
  |  |  ------------------
  |  |  |  |   94|  38.6k|#define S(x, n)         ROR64c(x, n)
  |  |  |  |  ------------------
  |  |  |  |  |  |  102|  38.6k|    ( ((((x) & CONST64(0xFFFFFFFFFFFFFFFF)) >> ((u64) (y) & CONST64(63))) | \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   45|  38.6k|#define CONST64(n) n ## ULL
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                   ( ((((x) & CONST64(0xFFFFFFFFFFFFFFFF)) >> ((u64) (y) & CONST64(63))) | \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   45|  38.6k|#define CONST64(n) n ## ULL
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  103|  38.6k|      ((x) << ((u64) (64 - ((y) & CONST64(63)))))) & \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   45|  38.6k|#define CONST64(n) n ## ULL
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  104|  38.6k|      CONST64(0xFFFFFFFFFFFFFFFF))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   45|  38.6k|#define CONST64(n) n ## ULL
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
              		t0 = S[7] + Sigma1(S[4]) + Ch(S[4], S[5], S[6]) + K[i] + W[i];
  ------------------
  |  |   92|  38.6k|#define Ch(x,y,z)       (z ^ (x & (y ^ z)))
  ------------------
  135|  38.6k|		t1 = Sigma0(S[0]) + Maj(S[0], S[1], S[2]);
  ------------------
  |  |   96|  38.6k|#define Sigma0(x)       (S(x, 28) ^ S(x, 34) ^ S(x, 39))
  |  |  ------------------
  |  |  |  |   94|  38.6k|#define S(x, n)         ROR64c(x, n)
  |  |  |  |  ------------------
  |  |  |  |  |  |  102|  38.6k|    ( ((((x) & CONST64(0xFFFFFFFFFFFFFFFF)) >> ((u64) (y) & CONST64(63))) | \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   45|  38.6k|#define CONST64(n) n ## ULL
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                   ( ((((x) & CONST64(0xFFFFFFFFFFFFFFFF)) >> ((u64) (y) & CONST64(63))) | \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   45|  38.6k|#define CONST64(n) n ## ULL
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  103|  38.6k|      ((x) << ((u64) (64 - ((y) & CONST64(63)))))) & \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   45|  38.6k|#define CONST64(n) n ## ULL
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  104|  38.6k|      CONST64(0xFFFFFFFFFFFFFFFF))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   45|  38.6k|#define CONST64(n) n ## ULL
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define Sigma0(x)       (S(x, 28) ^ S(x, 34) ^ S(x, 39))
  |  |  ------------------
  |  |  |  |   94|  38.6k|#define S(x, n)         ROR64c(x, n)
  |  |  |  |  ------------------
  |  |  |  |  |  |  102|  38.6k|    ( ((((x) & CONST64(0xFFFFFFFFFFFFFFFF)) >> ((u64) (y) & CONST64(63))) | \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   45|  38.6k|#define CONST64(n) n ## ULL
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                   ( ((((x) & CONST64(0xFFFFFFFFFFFFFFFF)) >> ((u64) (y) & CONST64(63))) | \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   45|  38.6k|#define CONST64(n) n ## ULL
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  103|  38.6k|      ((x) << ((u64) (64 - ((y) & CONST64(63)))))) & \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   45|  38.6k|#define CONST64(n) n ## ULL
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  104|  38.6k|      CONST64(0xFFFFFFFFFFFFFFFF))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   45|  38.6k|#define CONST64(n) n ## ULL
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define Sigma0(x)       (S(x, 28) ^ S(x, 34) ^ S(x, 39))
  |  |  ------------------
  |  |  |  |   94|  38.6k|#define S(x, n)         ROR64c(x, n)
  |  |  |  |  ------------------
  |  |  |  |  |  |  102|  38.6k|    ( ((((x) & CONST64(0xFFFFFFFFFFFFFFFF)) >> ((u64) (y) & CONST64(63))) | \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   45|  38.6k|#define CONST64(n) n ## ULL
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                   ( ((((x) & CONST64(0xFFFFFFFFFFFFFFFF)) >> ((u64) (y) & CONST64(63))) | \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   45|  38.6k|#define CONST64(n) n ## ULL
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  103|  38.6k|      ((x) << ((u64) (64 - ((y) & CONST64(63)))))) & \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   45|  38.6k|#define CONST64(n) n ## ULL
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  104|  38.6k|      CONST64(0xFFFFFFFFFFFFFFFF))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   45|  38.6k|#define CONST64(n) n ## ULL
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
              		t1 = Sigma0(S[0]) + Maj(S[0], S[1], S[2]);
  ------------------
  |  |   93|  38.6k|#define Maj(x,y,z)      (((x | y) & z) | (x & y))
  ------------------
  136|  38.6k|		S[7] = S[6];
  137|  38.6k|		S[6] = S[5];
  138|  38.6k|		S[5] = S[4];
  139|  38.6k|		S[4] = S[3] + t0;
  140|  38.6k|		S[3] = S[2];
  141|  38.6k|		S[2] = S[1];
  142|  38.6k|		S[1] = S[0];
  143|  38.6k|		S[0] = t0 + t1;
  144|  38.6k|	}
  145|       |
  146|       |	/* feedback */
  147|  4.34k|	for (i = 0; i < 8; i++) {
  ------------------
  |  Branch (147:14): [True: 3.86k, False: 483]
  ------------------
  148|  3.86k|		md->state[i] = md->state[i] + S[i];
  149|  3.86k|	}
  150|       |
  151|    483|	os_free(W);
  ------------------
  |  |  511|    483|#define os_free(p) free((p))
  ------------------
  152|    483|	return 0;
  153|    483|}

tls_init:
   41|  2.68k|{
   42|  2.68k|	struct tls_global *global;
   43|       |
   44|  2.68k|	if (tls_ref_count == 0) {
  ------------------
  |  Branch (44:6): [True: 2.68k, False: 0]
  ------------------
   45|  2.68k|#ifdef CONFIG_TLS_INTERNAL_CLIENT
   46|  2.68k|		if (tlsv1_client_global_init())
  ------------------
  |  Branch (46:7): [True: 0, False: 2.68k]
  ------------------
   47|      0|			return NULL;
   48|  2.68k|#endif /* CONFIG_TLS_INTERNAL_CLIENT */
   49|  2.68k|#ifdef CONFIG_TLS_INTERNAL_SERVER
   50|  2.68k|		if (tlsv1_server_global_init())
  ------------------
  |  Branch (50:7): [True: 0, False: 2.68k]
  ------------------
   51|      0|			return NULL;
   52|  2.68k|#endif /* CONFIG_TLS_INTERNAL_SERVER */
   53|  2.68k|	}
   54|  2.68k|	tls_ref_count++;
   55|       |
   56|  2.68k|	global = os_zalloc(sizeof(*global));
   57|  2.68k|	if (global == NULL)
  ------------------
  |  Branch (57:6): [True: 0, False: 2.68k]
  ------------------
   58|      0|		return NULL;
   59|  2.68k|	if (conf) {
  ------------------
  |  Branch (59:6): [True: 2.68k, False: 0]
  ------------------
   60|  2.68k|		global->event_cb = conf->event_cb;
   61|  2.68k|		global->cb_ctx = conf->cb_ctx;
   62|  2.68k|		global->cert_in_cb = conf->cert_in_cb;
   63|  2.68k|	}
   64|       |
   65|  2.68k|	return global;
   66|  2.68k|}
tls_deinit:
   69|  2.68k|{
   70|  2.68k|	struct tls_global *global = ssl_ctx;
   71|  2.68k|	tls_ref_count--;
   72|  2.68k|	if (tls_ref_count == 0) {
  ------------------
  |  Branch (72:6): [True: 2.68k, False: 0]
  ------------------
   73|  2.68k|#ifdef CONFIG_TLS_INTERNAL_CLIENT
   74|  2.68k|		tlsv1_client_global_deinit();
   75|  2.68k|#endif /* CONFIG_TLS_INTERNAL_CLIENT */
   76|  2.68k|#ifdef CONFIG_TLS_INTERNAL_SERVER
   77|  2.68k|		tlsv1_server_global_deinit();
   78|  2.68k|#endif /* CONFIG_TLS_INTERNAL_SERVER */
   79|  2.68k|	}
   80|  2.68k|#ifdef CONFIG_TLS_INTERNAL_SERVER
   81|  2.68k|	tlsv1_cred_free(global->server_cred);
   82|  2.68k|#endif /* CONFIG_TLS_INTERNAL_SERVER */
   83|  2.68k|	os_free(global);
  ------------------
  |  |  511|  2.68k|#define os_free(p) free((p))
  ------------------
   84|  2.68k|}
tls_connection_init:
   94|  2.68k|{
   95|  2.68k|	struct tls_connection *conn;
   96|  2.68k|	struct tls_global *global = tls_ctx;
   97|       |
   98|  2.68k|	conn = os_zalloc(sizeof(*conn));
   99|  2.68k|	if (conn == NULL)
  ------------------
  |  Branch (99:6): [True: 0, False: 2.68k]
  ------------------
  100|      0|		return NULL;
  101|  2.68k|	conn->global = global;
  102|       |
  103|  2.68k|#ifdef CONFIG_TLS_INTERNAL_CLIENT
  104|  2.68k|	if (!global->server) {
  ------------------
  |  Branch (104:6): [True: 2.68k, False: 0]
  ------------------
  105|  2.68k|		conn->client = tlsv1_client_init();
  106|  2.68k|		if (conn->client == NULL) {
  ------------------
  |  Branch (106:7): [True: 0, False: 2.68k]
  ------------------
  107|      0|			os_free(conn);
  ------------------
  |  |  511|      0|#define os_free(p) free((p))
  ------------------
  108|      0|			return NULL;
  109|      0|		}
  110|  2.68k|		tlsv1_client_set_cb(conn->client, global->event_cb,
  111|  2.68k|				    global->cb_ctx, global->cert_in_cb);
  112|  2.68k|	}
  113|  2.68k|#endif /* CONFIG_TLS_INTERNAL_CLIENT */
  114|  2.68k|#ifdef CONFIG_TLS_INTERNAL_SERVER
  115|  2.68k|	if (global->server) {
  ------------------
  |  Branch (115:6): [True: 0, False: 2.68k]
  ------------------
  116|      0|		conn->server = tlsv1_server_init(global->server_cred);
  117|      0|		if (conn->server == NULL) {
  ------------------
  |  Branch (117:7): [True: 0, False: 0]
  ------------------
  118|      0|			os_free(conn);
  ------------------
  |  |  511|      0|#define os_free(p) free((p))
  ------------------
  119|      0|			return NULL;
  120|      0|		}
  121|      0|	}
  122|  2.68k|#endif /* CONFIG_TLS_INTERNAL_SERVER */
  123|       |
  124|  2.68k|	return conn;
  125|  2.68k|}
tls_connection_deinit:
  151|  2.68k|{
  152|  2.68k|	if (conn == NULL)
  ------------------
  |  Branch (152:6): [True: 0, False: 2.68k]
  ------------------
  153|      0|		return;
  154|  2.68k|#ifdef CONFIG_TLS_INTERNAL_CLIENT
  155|  2.68k|	if (conn->client)
  ------------------
  |  Branch (155:6): [True: 2.68k, False: 0]
  ------------------
  156|  2.68k|		tlsv1_client_deinit(conn->client);
  157|  2.68k|#endif /* CONFIG_TLS_INTERNAL_CLIENT */
  158|  2.68k|#ifdef CONFIG_TLS_INTERNAL_SERVER
  159|  2.68k|	if (conn->server)
  ------------------
  |  Branch (159:6): [True: 0, False: 2.68k]
  ------------------
  160|      0|		tlsv1_server_deinit(conn->server);
  161|  2.68k|#endif /* CONFIG_TLS_INTERNAL_SERVER */
  162|  2.68k|	os_free(conn);
  ------------------
  |  |  511|  2.68k|#define os_free(p) free((p))
  ------------------
  163|  2.68k|}
tls_connection_established:
  167|   130k|{
  168|   130k|#ifdef CONFIG_TLS_INTERNAL_CLIENT
  169|   130k|	if (conn->client)
  ------------------
  |  Branch (169:6): [True: 130k, False: 0]
  ------------------
  170|   130k|		return tlsv1_client_established(conn->client);
  171|      0|#endif /* CONFIG_TLS_INTERNAL_CLIENT */
  172|      0|#ifdef CONFIG_TLS_INTERNAL_SERVER
  173|      0|	if (conn->server)
  ------------------
  |  Branch (173:6): [True: 0, False: 0]
  ------------------
  174|      0|		return tlsv1_server_established(conn->server);
  175|      0|#endif /* CONFIG_TLS_INTERNAL_SERVER */
  176|      0|	return 0;
  177|      0|}
tls_connection_handshake:
  468|  66.5k|{
  469|  66.5k|	return tls_connection_handshake2(tls_ctx, conn, in_data, appl_data,
  470|       |					 NULL);
  471|  66.5k|}
tls_connection_handshake2:
  479|  66.5k|{
  480|  66.5k|#ifdef CONFIG_TLS_INTERNAL_CLIENT
  481|  66.5k|	u8 *res, *ad;
  482|  66.5k|	size_t res_len, ad_len;
  483|  66.5k|	struct wpabuf *out;
  484|       |
  485|  66.5k|	if (conn->client == NULL)
  ------------------
  |  Branch (485:6): [True: 0, False: 66.5k]
  ------------------
  486|      0|		return NULL;
  487|       |
  488|  66.5k|	ad = NULL;
  489|  66.5k|	res = tlsv1_client_handshake(conn->client,
  490|  66.5k|				     in_data ? wpabuf_head(in_data) : NULL,
  ------------------
  |  Branch (490:10): [True: 63.8k, False: 2.68k]
  ------------------
  491|  66.5k|				     in_data ? wpabuf_len(in_data) : 0,
  ------------------
  |  Branch (491:10): [True: 63.8k, False: 2.68k]
  ------------------
  492|  66.5k|				     &res_len, &ad, &ad_len, need_more_data);
  493|  66.5k|	if (res == NULL)
  ------------------
  |  Branch (493:6): [True: 181, False: 66.3k]
  ------------------
  494|    181|		return NULL;
  495|  66.3k|	out = wpabuf_alloc_ext_data(res, res_len);
  496|  66.3k|	if (out == NULL) {
  ------------------
  |  Branch (496:6): [True: 0, False: 66.3k]
  ------------------
  497|      0|		os_free(res);
  ------------------
  |  |  511|      0|#define os_free(p) free((p))
  ------------------
  498|      0|		os_free(ad);
  ------------------
  |  |  511|      0|#define os_free(p) free((p))
  ------------------
  499|      0|		return NULL;
  500|      0|	}
  501|  66.3k|	if (appl_data) {
  ------------------
  |  Branch (501:6): [True: 66.3k, False: 0]
  ------------------
  502|  66.3k|		if (ad) {
  ------------------
  |  Branch (502:7): [True: 0, False: 66.3k]
  ------------------
  503|      0|			*appl_data = wpabuf_alloc_ext_data(ad, ad_len);
  504|      0|			if (*appl_data == NULL)
  ------------------
  |  Branch (504:8): [True: 0, False: 0]
  ------------------
  505|      0|				os_free(ad);
  ------------------
  |  |  511|      0|#define os_free(p) free((p))
  ------------------
  506|      0|		} else
  507|  66.3k|			*appl_data = NULL;
  508|  66.3k|	} else
  509|      0|		os_free(ad);
  ------------------
  |  |  511|      0|#define os_free(p) free((p))
  ------------------
  510|       |
  511|  66.3k|	return out;
  512|       |#else /* CONFIG_TLS_INTERNAL_CLIENT */
  513|       |	return NULL;
  514|       |#endif /* CONFIG_TLS_INTERNAL_CLIENT */
  515|  66.3k|}
tls_connection_encrypt:
  556|     45|{
  557|     45|#ifdef CONFIG_TLS_INTERNAL_CLIENT
  558|     45|	if (conn->client) {
  ------------------
  |  Branch (558:6): [True: 45, False: 0]
  ------------------
  559|     45|		struct wpabuf *buf;
  560|     45|		int res;
  561|     45|		buf = wpabuf_alloc(wpabuf_len(in_data) + 300);
  562|     45|		if (buf == NULL)
  ------------------
  |  Branch (562:7): [True: 0, False: 45]
  ------------------
  563|      0|			return NULL;
  564|     45|		res = tlsv1_client_encrypt(conn->client, wpabuf_head(in_data),
  565|     45|					   wpabuf_len(in_data),
  566|     45|					   wpabuf_mhead(buf),
  567|     45|					   wpabuf_size(buf));
  568|     45|		if (res < 0) {
  ------------------
  |  Branch (568:7): [True: 0, False: 45]
  ------------------
  569|      0|			wpabuf_free(buf);
  570|      0|			return NULL;
  571|      0|		}
  572|     45|		wpabuf_put(buf, res);
  573|     45|		return buf;
  574|     45|	}
  575|      0|#endif /* CONFIG_TLS_INTERNAL_CLIENT */
  576|      0|#ifdef CONFIG_TLS_INTERNAL_SERVER
  577|      0|	if (conn->server) {
  ------------------
  |  Branch (577:6): [True: 0, False: 0]
  ------------------
  578|      0|		struct wpabuf *buf;
  579|      0|		int res;
  580|      0|		buf = wpabuf_alloc(wpabuf_len(in_data) + 300);
  581|      0|		if (buf == NULL)
  ------------------
  |  Branch (581:7): [True: 0, False: 0]
  ------------------
  582|      0|			return NULL;
  583|      0|		res = tlsv1_server_encrypt(conn->server, wpabuf_head(in_data),
  584|      0|					   wpabuf_len(in_data),
  585|      0|					   wpabuf_mhead(buf),
  586|      0|					   wpabuf_size(buf));
  587|      0|		if (res < 0) {
  ------------------
  |  Branch (587:7): [True: 0, False: 0]
  ------------------
  588|      0|			wpabuf_free(buf);
  589|      0|			return NULL;
  590|      0|		}
  591|      0|		wpabuf_put(buf, res);
  592|      0|		return buf;
  593|      0|	}
  594|      0|#endif /* CONFIG_TLS_INTERNAL_SERVER */
  595|      0|	return NULL;
  596|      0|}
tls_connection_decrypt:
  602|     44|{
  603|       |	return tls_connection_decrypt2(tls_ctx, conn, in_data, NULL);
  604|     44|}
tls_connection_decrypt2:
  611|     44|{
  612|     44|	if (need_more_data)
  ------------------
  |  Branch (612:6): [True: 0, False: 44]
  ------------------
  613|      0|		*need_more_data = 0;
  614|       |
  615|     44|#ifdef CONFIG_TLS_INTERNAL_CLIENT
  616|     44|	if (conn->client) {
  ------------------
  |  Branch (616:6): [True: 44, False: 0]
  ------------------
  617|     44|		return tlsv1_client_decrypt(conn->client, wpabuf_head(in_data),
  618|     44|					    wpabuf_len(in_data),
  619|     44|					    need_more_data);
  620|     44|	}
  621|      0|#endif /* CONFIG_TLS_INTERNAL_CLIENT */
  622|      0|#ifdef CONFIG_TLS_INTERNAL_SERVER
  623|      0|	if (conn->server) {
  ------------------
  |  Branch (623:6): [True: 0, False: 0]
  ------------------
  624|      0|		struct wpabuf *buf;
  625|      0|		int res;
  626|      0|		buf = wpabuf_alloc((wpabuf_len(in_data) + 500) * 3);
  627|      0|		if (buf == NULL)
  ------------------
  |  Branch (627:7): [True: 0, False: 0]
  ------------------
  628|      0|			return NULL;
  629|      0|		res = tlsv1_server_decrypt(conn->server, wpabuf_head(in_data),
  630|      0|					   wpabuf_len(in_data),
  631|      0|					   wpabuf_mhead(buf),
  632|      0|					   wpabuf_size(buf));
  633|      0|		if (res < 0) {
  ------------------
  |  Branch (633:7): [True: 0, False: 0]
  ------------------
  634|      0|			wpabuf_free(buf);
  635|      0|			return NULL;
  636|      0|		}
  637|      0|		wpabuf_put(buf, res);
  638|      0|		return buf;
  639|      0|	}
  640|      0|#endif /* CONFIG_TLS_INTERNAL_SERVER */
  641|      0|	return NULL;
  642|      0|}
tls_connection_get_failed:
  726|  66.3k|{
  727|  66.3k|#ifdef CONFIG_TLS_INTERNAL_SERVER
  728|  66.3k|	if (conn->server)
  ------------------
  |  Branch (728:6): [True: 0, False: 66.3k]
  ------------------
  729|      0|		return tlsv1_server_get_failed(conn->server);
  730|  66.3k|#endif /* CONFIG_TLS_INTERNAL_SERVER */
  731|  66.3k|	return 0;
  732|  66.3k|}

asn1_get_next:
  172|   131k|{
  173|   131k|	const u8 *pos, *end;
  174|   131k|	u8 tmp;
  175|       |
  176|   131k|	os_memset(hdr, 0, sizeof(*hdr));
  ------------------
  |  |  529|   131k|#define os_memset(s, c, n) memset(s, c, n)
  ------------------
  177|   131k|	pos = buf;
  178|   131k|	end = buf + len;
  179|       |
  180|   131k|	if (pos >= end) {
  ------------------
  |  Branch (180:6): [True: 46, False: 131k]
  ------------------
  181|     46|		wpa_printf(MSG_DEBUG, "ASN.1: No room for Identifier");
  182|     46|		return -1;
  183|     46|	}
  184|   131k|	hdr->identifier = *pos++;
  185|   131k|	hdr->class = hdr->identifier >> 6;
  186|   131k|	hdr->constructed = !!(hdr->identifier & (1 << 5));
  187|       |
  188|   131k|	if ((hdr->identifier & 0x1f) == 0x1f) {
  ------------------
  |  Branch (188:6): [True: 320, False: 130k]
  ------------------
  189|    320|		size_t ext_len = 0;
  190|       |
  191|    320|		hdr->tag = 0;
  192|    320|		if (pos == end || (*pos & 0x7f) == 0) {
  ------------------
  |  Branch (192:7): [True: 9, False: 311]
  |  Branch (192:21): [True: 8, False: 303]
  ------------------
  193|     17|			wpa_printf(MSG_DEBUG,
  194|     17|				   "ASN.1: Invalid extended tag (first octet has to be included with at least one nonzero bit for the tag value)");
  195|     17|			return -1;
  196|     17|		}
  197|  1.54k|		do {
  198|  1.54k|			if (pos >= end) {
  ------------------
  |  Branch (198:8): [True: 6, False: 1.53k]
  ------------------
  199|      6|				wpa_printf(MSG_DEBUG, "ASN.1: Identifier "
  200|      6|					   "underflow");
  201|      6|				return -1;
  202|      6|			}
  203|  1.53k|			ext_len++;
  204|  1.53k|			tmp = *pos++;
  205|  1.53k|			wpa_printf(MSG_MSGDUMP, "ASN.1: Extended tag data: "
  206|  1.53k|				   "0x%02x", tmp);
  207|  1.53k|			hdr->tag = (hdr->tag << 7) | (tmp & 0x7f);
  208|  1.53k|		} while (tmp & 0x80);
  ------------------
  |  Branch (208:12): [True: 1.24k, False: 297]
  ------------------
  209|    297|		wpa_printf(MSG_MSGDUMP, "ASN.1: Extended Tag: 0x%x (len=%zu)",
  210|    297|			   hdr->tag, ext_len);
  211|    297|		if ((hdr->class != ASN1_CLASS_PRIVATE && hdr->tag < 31) ||
  ------------------
  |  |   46|    594|#define ASN1_CLASS_PRIVATE		3
  ------------------
  |  Branch (211:8): [True: 191, False: 106]
  |  Branch (211:44): [True: 5, False: 186]
  ------------------
  212|    292|		    ext_len * 7 > sizeof(hdr->tag) * 8) {
  ------------------
  |  Branch (212:7): [True: 28, False: 264]
  ------------------
  213|     33|			wpa_printf(MSG_DEBUG,
  214|     33|				   "ASN.1: Invalid or unsupported (too large) extended Tag: 0x%x (len=%zu)",
  215|     33|				   hdr->tag, ext_len);
  216|     33|			return -1;
  217|     33|		}
  218|    297|	} else
  219|   130k|		hdr->tag = hdr->identifier & 0x1f;
  220|       |
  221|   131k|	if (pos >= end) {
  ------------------
  |  Branch (221:6): [True: 26, False: 131k]
  ------------------
  222|     26|		wpa_printf(MSG_DEBUG, "ASN.1: No room for Length");
  223|     26|		return -1;
  224|     26|	}
  225|   131k|	tmp = *pos++;
  226|   131k|	if (tmp & 0x80) {
  ------------------
  |  Branch (226:6): [True: 13.2k, False: 117k]
  ------------------
  227|  13.2k|		if (tmp == 0xff) {
  ------------------
  |  Branch (227:7): [True: 24, False: 13.1k]
  ------------------
  228|     24|			wpa_printf(MSG_DEBUG, "ASN.1: Reserved length "
  229|     24|				   "value 0xff used");
  230|     24|			return -1;
  231|     24|		}
  232|  13.1k|		tmp &= 0x7f; /* number of subsequent octets */
  233|  13.1k|		hdr->length = 0;
  234|  13.1k|		if (tmp == 0 || pos == end || *pos == 0) {
  ------------------
  |  Branch (234:7): [True: 3, False: 13.1k]
  |  Branch (234:19): [True: 12, False: 13.1k]
  |  Branch (234:33): [True: 8, False: 13.1k]
  ------------------
  235|     23|			wpa_printf(MSG_DEBUG,
  236|     23|				   "ASN.1: Definite long form of the length does not start with a nonzero value");
  237|     23|			return -1;
  238|     23|		}
  239|  13.1k|		if (tmp > 4) {
  ------------------
  |  Branch (239:7): [True: 42, False: 13.1k]
  ------------------
  240|     42|			wpa_printf(MSG_DEBUG, "ASN.1: Too long length field");
  241|     42|			return -1;
  242|     42|		}
  243|  31.0k|		while (tmp--) {
  ------------------
  |  Branch (243:10): [True: 17.9k, False: 13.1k]
  ------------------
  244|  17.9k|			if (pos >= end) {
  ------------------
  |  Branch (244:8): [True: 2, False: 17.9k]
  ------------------
  245|      2|				wpa_printf(MSG_DEBUG, "ASN.1: Length "
  246|      2|					   "underflow");
  247|      2|				return -1;
  248|      2|			}
  249|  17.9k|			hdr->length = (hdr->length << 8) | *pos++;
  250|  17.9k|		}
  251|  13.1k|		if (hdr->length < 128) {
  ------------------
  |  Branch (251:7): [True: 7, False: 13.1k]
  ------------------
  252|      7|			wpa_printf(MSG_DEBUG,
  253|      7|				   "ASN.1: Definite long form of the length used with too short length");
  254|      7|			return -1;
  255|      7|		}
  256|   117k|	} else {
  257|       |		/* Short form - length 0..127 in one octet */
  258|   117k|		hdr->length = tmp;
  259|   117k|	}
  260|       |
  261|   130k|	if (end < pos || hdr->length > (unsigned int) (end - pos)) {
  ------------------
  |  Branch (261:6): [True: 0, False: 130k]
  |  Branch (261:19): [True: 201, False: 130k]
  ------------------
  262|    201|		wpa_printf(MSG_DEBUG, "ASN.1: Contents underflow");
  263|    201|		return -1;
  264|    201|	}
  265|       |
  266|   130k|	hdr->payload = pos;
  267|       |
  268|   130k|	if (!asn1_valid_der(hdr)) {
  ------------------
  |  Branch (268:6): [True: 116, False: 130k]
  ------------------
  269|    116|		asn1_print_hdr(hdr, "ASN.1: Invalid DER encoding: ");
  270|    116|		return -1;
  271|    116|	}
  272|   130k|	return 0;
  273|   130k|}
asn1_print_hdr:
  277|    116|{
  278|    116|	wpa_printf(MSG_DEBUG, "%sclass %d constructed %d tag 0x%x",
  279|    116|		   title, hdr->class, hdr->constructed, hdr->tag);
  280|    116|}
asn1_unexpected:
  284|    963|{
  285|    963|	wpa_printf(MSG_DEBUG, "%s - found class %d constructed %d tag 0x%x",
  286|    963|		   title, hdr->class, hdr->constructed, hdr->tag);
  287|    963|}
asn1_parse_oid:
  291|  27.6k|{
  292|  27.6k|	const u8 *pos, *end;
  293|  27.6k|	unsigned long val;
  294|  27.6k|	u8 tmp;
  295|       |
  296|  27.6k|	os_memset(oid, 0, sizeof(*oid));
  ------------------
  |  |  529|  27.6k|#define os_memset(s, c, n) memset(s, c, n)
  ------------------
  297|       |
  298|  27.6k|	pos = buf;
  299|  27.6k|	end = buf + len;
  300|       |
  301|   136k|	while (pos < end) {
  ------------------
  |  Branch (301:9): [True: 109k, False: 27.6k]
  ------------------
  302|   109k|		val = 0;
  303|       |
  304|   143k|		do {
  305|   143k|			if (pos >= end)
  ------------------
  |  Branch (305:8): [True: 27, False: 143k]
  ------------------
  306|     27|				return -1;
  307|   143k|			tmp = *pos++;
  308|   143k|			val = (val << 7) | (tmp & 0x7f);
  309|   143k|		} while (tmp & 0x80);
  ------------------
  |  Branch (309:12): [True: 34.8k, False: 109k]
  ------------------
  310|       |
  311|   109k|		if (oid->len >= ASN1_MAX_OID_LEN) {
  ------------------
  |  |   55|   109k|#define ASN1_MAX_OID_LEN 20
  ------------------
  |  Branch (311:7): [True: 11, False: 109k]
  ------------------
  312|     11|			wpa_printf(MSG_DEBUG, "ASN.1: Too long OID value");
  313|     11|			return -1;
  314|     11|		}
  315|   109k|		if (oid->len == 0) {
  ------------------
  |  Branch (315:7): [True: 27.5k, False: 81.5k]
  ------------------
  316|       |			/*
  317|       |			 * The first octet encodes the first two object
  318|       |			 * identifier components in (X*40) + Y formula.
  319|       |			 * X = 0..2.
  320|       |			 */
  321|  27.5k|			oid->oid[0] = val / 40;
  322|  27.5k|			if (oid->oid[0] > 2)
  ------------------
  |  Branch (322:8): [True: 4.50k, False: 23.0k]
  ------------------
  323|  4.50k|				oid->oid[0] = 2;
  324|  27.5k|			oid->oid[1] = val - oid->oid[0] * 40;
  325|  27.5k|			oid->len = 2;
  326|  27.5k|		} else
  327|  81.5k|			oid->oid[oid->len++] = val;
  328|   109k|	}
  329|       |
  330|  27.6k|	return 0;
  331|  27.6k|}
asn1_get_oid:
  336|  27.5k|{
  337|  27.5k|	struct asn1_hdr hdr;
  338|       |
  339|  27.5k|	if (asn1_get_next(buf, len, &hdr) < 0 || hdr.length == 0 ||
  ------------------
  |  Branch (339:6): [True: 74, False: 27.4k]
  |  Branch (339:43): [True: 21, False: 27.4k]
  ------------------
  340|  27.4k|	    !asn1_is_oid(&hdr)) {
  ------------------
  |  Branch (340:6): [True: 27, False: 27.4k]
  ------------------
  341|    122|		asn1_unexpected(&hdr, "ASN.1: Expected OID");
  342|    122|		return -1;
  343|    122|	}
  344|       |
  345|  27.4k|	*next = hdr.payload + hdr.length;
  346|       |
  347|  27.4k|	return asn1_parse_oid(hdr.payload, hdr.length, oid);
  348|  27.5k|}
asn1_oid_to_str:
  352|  5.05k|{
  353|  5.05k|	char *pos = buf;
  354|  5.05k|	size_t i;
  355|  5.05k|	int ret;
  356|       |
  357|  5.05k|	if (len == 0)
  ------------------
  |  Branch (357:6): [True: 0, False: 5.05k]
  ------------------
  358|      0|		return;
  359|       |
  360|  5.05k|	buf[0] = '\0';
  361|       |
  362|  29.7k|	for (i = 0; i < oid->len; i++) {
  ------------------
  |  Branch (362:14): [True: 24.7k, False: 5.00k]
  ------------------
  363|  24.7k|		ret = os_snprintf(pos, buf + len - pos,
  ------------------
  |  |  572|  24.7k|#define os_snprintf snprintf
  ------------------
  364|  24.7k|				  "%s%lu",
  365|  24.7k|				  i == 0 ? "" : ".", oid->oid[i]);
  ------------------
  |  Branch (365:7): [True: 4.97k, False: 19.7k]
  ------------------
  366|  24.7k|		if (os_snprintf_error(buf + len - pos, ret))
  ------------------
  |  Branch (366:7): [True: 57, False: 24.6k]
  ------------------
  367|     57|			break;
  368|  24.6k|		pos += ret;
  369|  24.6k|	}
  370|  5.05k|	buf[len - 1] = '\0';
  371|  5.05k|}
asn1_bit_string_to_long:
  392|     62|{
  393|     62|	unsigned long val = 0;
  394|     62|	const u8 *pos = buf;
  395|       |
  396|       |	/* BER requires that unused bits are zero, so we can ignore the number
  397|       |	 * of unused bits */
  398|     62|	pos++;
  399|       |
  400|     62|	if (len >= 2)
  ------------------
  |  Branch (400:6): [True: 48, False: 14]
  ------------------
  401|     48|		val |= rotate_bits(*pos++);
  402|     62|	if (len >= 3)
  ------------------
  |  Branch (402:6): [True: 47, False: 15]
  ------------------
  403|     47|		val |= ((unsigned long) rotate_bits(*pos++)) << 8;
  404|     62|	if (len >= 4)
  ------------------
  |  Branch (404:6): [True: 40, False: 22]
  ------------------
  405|     40|		val |= ((unsigned long) rotate_bits(*pos++)) << 16;
  406|     62|	if (len >= 5)
  ------------------
  |  Branch (406:6): [True: 38, False: 24]
  ------------------
  407|     38|		val |= ((unsigned long) rotate_bits(*pos++)) << 24;
  408|     62|	if (len >= 6)
  ------------------
  |  Branch (408:6): [True: 31, False: 31]
  ------------------
  409|     31|		wpa_printf(MSG_DEBUG, "X509: %s - some bits ignored "
  410|     31|			   "(BIT STRING length %lu)",
  411|     31|			   __func__, (unsigned long) len);
  412|       |
  413|     62|	return val;
  414|     62|}
asn1.c:asn1_valid_der:
  127|   130k|{
  128|   130k|	if (hdr->class != ASN1_CLASS_UNIVERSAL)
  ------------------
  |  |   43|   130k|#define ASN1_CLASS_UNIVERSAL		0
  ------------------
  |  Branch (128:6): [True: 4.92k, False: 125k]
  ------------------
  129|  4.92k|		return 1;
  130|   125k|	if (hdr->tag == ASN1_TAG_BOOLEAN && !asn1_valid_der_boolean(hdr))
  ------------------
  |  |   13|   251k|#define ASN1_TAG_BOOLEAN	0x01
  ------------------
  |  Branch (130:6): [True: 248, False: 125k]
  |  Branch (130:38): [True: 17, False: 231]
  ------------------
  131|     17|		return 0;
  132|   125k|	if (hdr->tag == ASN1_TAG_NULL && hdr->length != 0)
  ------------------
  |  |   17|   251k|#define ASN1_TAG_NULL		0x05
  ------------------
  |  Branch (132:6): [True: 170, False: 125k]
  |  Branch (132:35): [True: 6, False: 164]
  ------------------
  133|      6|		return 0;
  134|       |
  135|       |	/* Check for allowed primitive/constructed values */
  136|   125k|	if (hdr->constructed &&
  ------------------
  |  Branch (136:6): [True: 62.9k, False: 62.8k]
  ------------------
  137|  62.9k|	    (hdr->tag == ASN1_TAG_BOOLEAN ||
  ------------------
  |  |   13|   125k|#define ASN1_TAG_BOOLEAN	0x01
  ------------------
  |  Branch (137:7): [True: 2, False: 62.9k]
  ------------------
  138|  62.9k|	     hdr->tag == ASN1_TAG_INTEGER ||
  ------------------
  |  |   14|   125k|#define ASN1_TAG_INTEGER	0x02
  ------------------
  |  Branch (138:7): [True: 2, False: 62.9k]
  ------------------
  139|  62.9k|	     hdr->tag == ASN1_TAG_NULL ||
  ------------------
  |  |   17|   125k|#define ASN1_TAG_NULL		0x05
  ------------------
  |  Branch (139:7): [True: 1, False: 62.9k]
  ------------------
  140|  62.9k|	     hdr->tag == ASN1_TAG_OID ||
  ------------------
  |  |   18|   125k|#define ASN1_TAG_OID		0x06
  ------------------
  |  Branch (140:7): [True: 6, False: 62.9k]
  ------------------
  141|  62.9k|	     hdr->tag == ANS1_TAG_RELATIVE_OID ||
  ------------------
  |  |   25|   125k|#define ANS1_TAG_RELATIVE_OID	0x0D
  ------------------
  |  Branch (141:7): [True: 3, False: 62.9k]
  ------------------
  142|  62.9k|	     hdr->tag == ASN1_TAG_REAL ||
  ------------------
  |  |   21|   125k|#define ASN1_TAG_REAL		0x09 /* not yet parsed */
  ------------------
  |  Branch (142:7): [True: 3, False: 62.8k]
  ------------------
  143|  62.8k|	     hdr->tag == ASN1_TAG_ENUMERATED ||
  ------------------
  |  |   22|   125k|#define ASN1_TAG_ENUMERATED	0x0A /* not yet parsed */
  ------------------
  |  Branch (143:7): [True: 4, False: 62.8k]
  ------------------
  144|  62.8k|	     hdr->tag == ASN1_TAG_BITSTRING ||
  ------------------
  |  |   15|   125k|#define ASN1_TAG_BITSTRING	0x03
  ------------------
  |  Branch (144:7): [True: 2, False: 62.8k]
  ------------------
  145|  62.8k|	     hdr->tag == ASN1_TAG_OCTETSTRING ||
  ------------------
  |  |   16|   125k|#define ASN1_TAG_OCTETSTRING	0x04
  ------------------
  |  Branch (145:7): [True: 9, False: 62.8k]
  ------------------
  146|  62.8k|	     hdr->tag == ASN1_TAG_NUMERICSTRING ||
  ------------------
  |  |   29|   125k|#define ASN1_TAG_NUMERICSTRING	0x12 /* not yet parsed */
  ------------------
  |  Branch (146:7): [True: 10, False: 62.8k]
  ------------------
  147|  62.8k|	     hdr->tag == ASN1_TAG_PRINTABLESTRING ||
  ------------------
  |  |   30|   125k|#define ASN1_TAG_PRINTABLESTRING	0x13
  ------------------
  |  Branch (147:7): [True: 7, False: 62.8k]
  ------------------
  148|  62.8k|	     hdr->tag == ASN1_TAG_T61STRING ||
  ------------------
  |  |   31|   125k|#define ASN1_TAG_T61STRING	0x14 /* not yet parsed */
  ------------------
  |  Branch (148:7): [True: 7, False: 62.8k]
  ------------------
  149|  62.8k|	     hdr->tag == ASN1_TAG_VIDEOTEXSTRING ||
  ------------------
  |  |   32|   125k|#define ASN1_TAG_VIDEOTEXSTRING	0x15 /* not yet parsed */
  ------------------
  |  Branch (149:7): [True: 2, False: 62.8k]
  ------------------
  150|  62.8k|	     hdr->tag == ASN1_TAG_VISIBLESTRING ||
  ------------------
  |  |   37|   125k|#define ASN1_TAG_VISIBLESTRING	0x1A
  ------------------
  |  Branch (150:7): [True: 3, False: 62.8k]
  ------------------
  151|  62.8k|	     hdr->tag == ASN1_TAG_IA5STRING ||
  ------------------
  |  |   33|   125k|#define ASN1_TAG_IA5STRING	0x16
  ------------------
  |  Branch (151:7): [True: 3, False: 62.8k]
  ------------------
  152|  62.8k|	     hdr->tag == ASN1_TAG_GRAPHICSTRING ||
  ------------------
  |  |   36|   125k|#define ASN1_TAG_GRAPHICSTRING	0x19 /* not yet parsed */
  ------------------
  |  Branch (152:7): [True: 4, False: 62.8k]
  ------------------
  153|  62.8k|	     hdr->tag == ASN1_TAG_GENERALSTRING ||
  ------------------
  |  |   38|   125k|#define ASN1_TAG_GENERALSTRING	0x1B /* not yet parsed */
  ------------------
  |  Branch (153:7): [True: 1, False: 62.8k]
  ------------------
  154|  62.8k|	     hdr->tag == ASN1_TAG_UNIVERSALSTRING ||
  ------------------
  |  |   39|   125k|#define ASN1_TAG_UNIVERSALSTRING	0x1C /* not yet parsed */
  ------------------
  |  Branch (154:7): [True: 1, False: 62.8k]
  ------------------
  155|  62.8k|	     hdr->tag == ASN1_TAG_UTF8STRING ||
  ------------------
  |  |   24|   125k|#define ASN1_TAG_UTF8STRING	0x0C /* not yet parsed */
  ------------------
  |  Branch (155:7): [True: 1, False: 62.8k]
  ------------------
  156|  62.8k|	     hdr->tag == ASN1_TAG_BMPSTRING ||
  ------------------
  |  |   41|   125k|#define ASN1_TAG_BMPSTRING	0x1E /* not yet parsed */
  ------------------
  |  Branch (156:7): [True: 3, False: 62.8k]
  ------------------
  157|  62.8k|	     hdr->tag == ASN1_TAG_CHARACTERSTRING ||
  ------------------
  |  |   40|   125k|#define ASN1_TAG_CHARACTERSTRING	0x1D /* not yet parsed */
  ------------------
  |  Branch (157:7): [True: 4, False: 62.8k]
  ------------------
  158|  62.8k|	     hdr->tag == ASN1_TAG_UTCTIME ||
  ------------------
  |  |   34|   125k|#define ASN1_TAG_UTCTIME	0x17
  ------------------
  |  Branch (158:7): [True: 5, False: 62.8k]
  ------------------
  159|  62.8k|	     hdr->tag == ASN1_TAG_GENERALIZEDTIME ||
  ------------------
  |  |   35|   125k|#define ASN1_TAG_GENERALIZEDTIME	0x18 /* not yet parsed */
  ------------------
  |  Branch (159:7): [True: 2, False: 62.8k]
  ------------------
  160|  62.8k|	     hdr->tag == ASN1_TAG_TIME))
  ------------------
  |  |   26|  62.8k|#define ASN1_TAG_TIME		0x0E
  ------------------
  |  Branch (160:7): [True: 3, False: 62.8k]
  ------------------
  161|     88|		return 0;
  162|   125k|	if (!hdr->constructed &&
  ------------------
  |  Branch (162:6): [True: 62.8k, False: 62.8k]
  ------------------
  163|  62.8k|	    (hdr->tag == ASN1_TAG_SEQUENCE ||
  ------------------
  |  |   27|   125k|#define ASN1_TAG_SEQUENCE	0x10 /* shall be constructed */
  ------------------
  |  Branch (163:7): [True: 4, False: 62.8k]
  ------------------
  164|  62.8k|	     hdr->tag == ASN1_TAG_SET))
  ------------------
  |  |   28|  62.8k|#define ASN1_TAG_SET		0x11
  ------------------
  |  Branch (164:7): [True: 1, False: 62.8k]
  ------------------
  165|      5|		return 0;
  166|       |
  167|   125k|	return 1;
  168|   125k|}
asn1.c:asn1_valid_der_boolean:
  107|    248|{
  108|       |	/* Enforce DER requirements for a single way of encoding a BOOLEAN */
  109|    248|	if (hdr->length != 1) {
  ------------------
  |  Branch (109:6): [True: 10, False: 238]
  ------------------
  110|     10|		wpa_printf(MSG_DEBUG, "ASN.1: Unexpected BOOLEAN length (%u)",
  111|     10|			   hdr->length);
  112|     10|		return 0;
  113|     10|	}
  114|       |
  115|    238|	if (hdr->payload[0] != 0 && hdr->payload[0] != 0xff) {
  ------------------
  |  Branch (115:6): [True: 209, False: 29]
  |  Branch (115:30): [True: 7, False: 202]
  ------------------
  116|      7|		wpa_printf(MSG_DEBUG,
  117|      7|			   "ASN.1: Invalid BOOLEAN value 0x%x (DER requires 0 or 0xff)",
  118|      7|			   hdr->payload[0]);
  119|      7|		return 0;
  120|      7|	}
  121|       |
  122|    231|	return 1;
  123|    238|}
asn1.c:rotate_bits:
  375|    173|{
  376|    173|	int i;
  377|    173|	u8 res;
  378|       |
  379|    173|	res = 0;
  380|  1.55k|	for (i = 0; i < 8; i++) {
  ------------------
  |  Branch (380:14): [True: 1.38k, False: 173]
  ------------------
  381|  1.38k|		res <<= 1;
  382|  1.38k|		if (octet & 1)
  ------------------
  |  Branch (382:7): [True: 693, False: 691]
  ------------------
  383|    693|			res |= 1;
  384|  1.38k|		octet >>= 1;
  385|  1.38k|	}
  386|       |
  387|    173|	return res;
  388|    173|}

x509v3.c:asn1_is_sequence:
  113|  46.8k|{
  114|  46.8k|	return hdr->class == ASN1_CLASS_UNIVERSAL &&
  ------------------
  |  |   43|  93.6k|#define ASN1_CLASS_UNIVERSAL		0
  ------------------
  |  Branch (114:9): [True: 46.7k, False: 57]
  ------------------
  115|  46.7k|		hdr->tag == ASN1_TAG_SEQUENCE;
  ------------------
  |  |   27|  93.5k|#define ASN1_TAG_SEQUENCE	0x10 /* shall be constructed */
  ------------------
  |  Branch (115:3): [True: 46.5k, False: 184]
  ------------------
  116|  46.8k|}
x509v3.c:asn1_is_set:
  119|  14.6k|{
  120|  14.6k|	return hdr->class == ASN1_CLASS_UNIVERSAL &&
  ------------------
  |  |   43|  29.2k|#define ASN1_CLASS_UNIVERSAL		0
  ------------------
  |  Branch (120:9): [True: 14.6k, False: 16]
  ------------------
  121|  14.6k|		hdr->tag == ASN1_TAG_SET;
  ------------------
  |  |   28|  29.2k|#define ASN1_TAG_SET		0x11
  ------------------
  |  Branch (121:3): [True: 14.5k, False: 44]
  ------------------
  122|  14.6k|}
x509v3.c:asn1_is_string_type:
  149|  14.4k|{
  150|  14.4k|	if (hdr->class != ASN1_CLASS_UNIVERSAL || hdr->constructed)
  ------------------
  |  |   43|  28.9k|#define ASN1_CLASS_UNIVERSAL		0
  ------------------
  |  Branch (150:6): [True: 0, False: 14.4k]
  |  Branch (150:44): [True: 760, False: 13.7k]
  ------------------
  151|    760|		return false;
  152|  13.7k|	return hdr->tag == ASN1_TAG_UTF8STRING ||
  ------------------
  |  |   24|  27.4k|#define ASN1_TAG_UTF8STRING	0x0C /* not yet parsed */
  ------------------
  |  Branch (152:9): [True: 5.92k, False: 7.81k]
  ------------------
  153|  7.81k|		hdr->tag == ASN1_TAG_NUMERICSTRING ||
  ------------------
  |  |   29|  21.5k|#define ASN1_TAG_NUMERICSTRING	0x12 /* not yet parsed */
  ------------------
  |  Branch (153:3): [True: 206, False: 7.60k]
  ------------------
  154|  7.60k|		hdr->tag == ASN1_TAG_PRINTABLESTRING ||
  ------------------
  |  |   30|  21.3k|#define ASN1_TAG_PRINTABLESTRING	0x13
  ------------------
  |  Branch (154:3): [True: 3.07k, False: 4.52k]
  ------------------
  155|  4.52k|		hdr->tag == ASN1_TAG_T61STRING ||
  ------------------
  |  |   31|  18.2k|#define ASN1_TAG_T61STRING	0x14 /* not yet parsed */
  ------------------
  |  Branch (155:3): [True: 142, False: 4.38k]
  ------------------
  156|  4.38k|		hdr->tag == ASN1_TAG_VIDEOTEXSTRING ||
  ------------------
  |  |   32|  18.1k|#define ASN1_TAG_VIDEOTEXSTRING	0x15 /* not yet parsed */
  ------------------
  |  Branch (156:3): [True: 390, False: 3.99k]
  ------------------
  157|  3.99k|		hdr->tag == ASN1_TAG_IA5STRING ||
  ------------------
  |  |   33|  17.7k|#define ASN1_TAG_IA5STRING	0x16
  ------------------
  |  Branch (157:3): [True: 370, False: 3.62k]
  ------------------
  158|  3.62k|		hdr->tag == ASN1_TAG_GRAPHICSTRING ||
  ------------------
  |  |   36|  17.3k|#define ASN1_TAG_GRAPHICSTRING	0x19 /* not yet parsed */
  ------------------
  |  Branch (158:3): [True: 242, False: 3.38k]
  ------------------
  159|  3.38k|		hdr->tag == ASN1_TAG_VISIBLESTRING ||
  ------------------
  |  |   37|  17.1k|#define ASN1_TAG_VISIBLESTRING	0x1A
  ------------------
  |  Branch (159:3): [True: 97, False: 3.28k]
  ------------------
  160|  3.28k|		hdr->tag == ASN1_TAG_GENERALSTRING ||
  ------------------
  |  |   38|  17.0k|#define ASN1_TAG_GENERALSTRING	0x1B /* not yet parsed */
  ------------------
  |  Branch (160:3): [True: 252, False: 3.03k]
  ------------------
  161|  3.03k|		hdr->tag == ASN1_TAG_UNIVERSALSTRING ||
  ------------------
  |  |   39|  16.7k|#define ASN1_TAG_UNIVERSALSTRING	0x1C /* not yet parsed */
  ------------------
  |  Branch (161:3): [True: 412, False: 2.62k]
  ------------------
  162|  2.62k|		hdr->tag == ASN1_TAG_CHARACTERSTRING ||
  ------------------
  |  |   40|  16.3k|#define ASN1_TAG_CHARACTERSTRING	0x1D /* not yet parsed */
  ------------------
  |  Branch (162:3): [True: 57, False: 2.56k]
  ------------------
  163|  2.56k|		hdr->tag == ASN1_TAG_BMPSTRING;
  ------------------
  |  |   41|  16.3k|#define ASN1_TAG_BMPSTRING	0x1E /* not yet parsed */
  ------------------
  |  Branch (163:3): [True: 85, False: 2.48k]
  ------------------
  164|  14.4k|}
x509v3.c:asn1_is_cs_tag:
  185|  3.16k|{
  186|  3.16k|	return hdr->class == ASN1_CLASS_CONTEXT_SPECIFIC &&
  ------------------
  |  |   45|  6.32k|#define ASN1_CLASS_CONTEXT_SPECIFIC	2
  ------------------
  |  Branch (186:9): [True: 2.45k, False: 701]
  ------------------
  187|  2.45k|		hdr->tag == tag;
  ------------------
  |  Branch (187:3): [True: 2.44k, False: 13]
  ------------------
  188|  3.16k|}
x509v3.c:asn1_is_integer:
  101|  5.61k|{
  102|  5.61k|	return hdr->class == ASN1_CLASS_UNIVERSAL &&
  ------------------
  |  |   43|  11.2k|#define ASN1_CLASS_UNIVERSAL		0
  ------------------
  |  Branch (102:9): [True: 5.59k, False: 21]
  ------------------
  103|  5.59k|		hdr->tag == ASN1_TAG_INTEGER;
  ------------------
  |  |   14|  11.2k|#define ASN1_TAG_INTEGER	0x02
  ------------------
  |  Branch (103:3): [True: 5.57k, False: 18]
  ------------------
  104|  5.61k|}
x509v3.c:asn1_is_utctime:
  137|  5.38k|{
  138|  5.38k|	return hdr->class == ASN1_CLASS_UNIVERSAL &&
  ------------------
  |  |   43|  10.7k|#define ASN1_CLASS_UNIVERSAL		0
  ------------------
  |  Branch (138:9): [True: 5.37k, False: 6]
  ------------------
  139|  5.37k|		hdr->tag == ASN1_TAG_UTCTIME;
  ------------------
  |  |   34|  10.7k|#define ASN1_TAG_UTCTIME	0x17
  ------------------
  |  Branch (139:3): [True: 5.28k, False: 91]
  ------------------
  140|  5.38k|}
x509v3.c:asn1_is_generalizedtime:
  143|     97|{
  144|     97|	return hdr->class == ASN1_CLASS_UNIVERSAL &&
  ------------------
  |  |   43|    194|#define ASN1_CLASS_UNIVERSAL		0
  ------------------
  |  Branch (144:9): [True: 91, False: 6]
  ------------------
  145|     91|		hdr->tag == ASN1_TAG_GENERALIZEDTIME;
  ------------------
  |  |   35|    188|#define ASN1_TAG_GENERALIZEDTIME	0x18 /* not yet parsed */
  ------------------
  |  Branch (145:3): [True: 61, False: 30]
  ------------------
  146|     97|}
x509v3.c:asn1_is_boolean:
   95|  4.13k|{
   96|  4.13k|	return hdr->class == ASN1_CLASS_UNIVERSAL &&
  ------------------
  |  |   43|  8.27k|#define ASN1_CLASS_UNIVERSAL		0
  ------------------
  |  Branch (96:9): [True: 4.13k, False: 4]
  ------------------
   97|  4.13k|		hdr->tag == ASN1_TAG_BOOLEAN;
  ------------------
  |  |   13|  8.26k|#define ASN1_TAG_BOOLEAN	0x01
  ------------------
  |  Branch (97:3): [True: 204, False: 3.92k]
  ------------------
   98|  4.13k|}
x509v3.c:asn1_is_bitstring:
  131|  4.80k|{
  132|  4.80k|	return hdr->class == ASN1_CLASS_UNIVERSAL &&
  ------------------
  |  |   43|  9.61k|#define ASN1_CLASS_UNIVERSAL		0
  ------------------
  |  Branch (132:9): [True: 4.80k, False: 5]
  ------------------
  133|  4.80k|		hdr->tag == ASN1_TAG_BITSTRING;
  ------------------
  |  |   15|  9.60k|#define ASN1_TAG_BITSTRING	0x03
  ------------------
  |  Branch (133:3): [True: 4.78k, False: 17]
  ------------------
  134|  4.80k|}
x509v3.c:asn1_is_octetstring:
  125|  3.94k|{
  126|  3.94k|	return hdr->class == ASN1_CLASS_UNIVERSAL &&
  ------------------
  |  |   43|  7.88k|#define ASN1_CLASS_UNIVERSAL		0
  ------------------
  |  Branch (126:9): [True: 3.90k, False: 39]
  ------------------
  127|  3.90k|		hdr->tag == ASN1_TAG_OCTETSTRING;
  ------------------
  |  |   16|  7.84k|#define ASN1_TAG_OCTETSTRING	0x04
  ------------------
  |  Branch (127:3): [True: 3.88k, False: 13]
  ------------------
  128|  3.94k|}
asn1.c:asn1_is_oid:
   89|  27.4k|{
   90|  27.4k|	return hdr->class == ASN1_CLASS_UNIVERSAL &&
  ------------------
  |  |   43|  54.9k|#define ASN1_CLASS_UNIVERSAL		0
  ------------------
  |  Branch (90:9): [True: 27.4k, False: 8]
  ------------------
   91|  27.4k|		hdr->tag == ASN1_TAG_OID;
  ------------------
  |  |   18|  54.9k|#define ASN1_TAG_OID		0x06
  ------------------
  |  Branch (91:3): [True: 27.4k, False: 19]
  ------------------
   92|  27.4k|}
rsa.c:asn1_is_sequence:
  113|    785|{
  114|    785|	return hdr->class == ASN1_CLASS_UNIVERSAL &&
  ------------------
  |  |   43|  1.57k|#define ASN1_CLASS_UNIVERSAL		0
  ------------------
  |  Branch (114:9): [True: 782, False: 3]
  ------------------
  115|    782|		hdr->tag == ASN1_TAG_SEQUENCE;
  ------------------
  |  |   27|  1.56k|#define ASN1_TAG_SEQUENCE	0x10 /* shall be constructed */
  ------------------
  |  Branch (115:3): [True: 777, False: 5]
  ------------------
  116|    785|}
rsa.c:asn1_is_integer:
  101|  1.53k|{
  102|  1.53k|	return hdr->class == ASN1_CLASS_UNIVERSAL &&
  ------------------
  |  |   43|  3.07k|#define ASN1_CLASS_UNIVERSAL		0
  ------------------
  |  Branch (102:9): [True: 1.53k, False: 6]
  ------------------
  103|  1.53k|		hdr->tag == ASN1_TAG_INTEGER;
  ------------------
  |  |   14|  3.06k|#define ASN1_TAG_INTEGER	0x02
  ------------------
  |  Branch (103:3): [True: 1.51k, False: 11]
  ------------------
  104|  1.53k|}

bignum_init:
   31|  2.78k|{
   32|  2.78k|	struct bignum *n = os_zalloc(sizeof(mp_int));
   33|  2.78k|	if (n == NULL)
  ------------------
  |  Branch (33:6): [True: 0, False: 2.78k]
  ------------------
   34|      0|		return NULL;
   35|  2.78k|	if (mp_init((mp_int *) n) != MP_OKAY) {
  ------------------
  |  |   93|  2.78k|#define MP_OKAY       0   /* ok result */
  ------------------
  |  Branch (35:6): [True: 0, False: 2.78k]
  ------------------
   36|      0|		os_free(n);
  ------------------
  |  |  511|      0|#define os_free(p) free((p))
  ------------------
   37|       |		n = NULL;
   38|      0|	}
   39|  2.78k|	return n;
   40|  2.78k|}
bignum_deinit:
   48|  8.77k|{
   49|  8.77k|	if (n) {
  ------------------
  |  Branch (49:6): [True: 2.78k, False: 5.99k]
  ------------------
   50|  2.78k|		mp_clear((mp_int *) n);
   51|  2.78k|		os_free(n);
  ------------------
  |  |  511|  2.78k|#define os_free(p) free((p))
  ------------------
   52|  2.78k|	}
   53|  8.77k|}
bignum_get_unsigned_bin_len:
   62|  2.07k|{
   63|  2.07k|	return mp_unsigned_bin_size((mp_int *) n);
   64|  2.07k|}
bignum_get_unsigned_bin:
   76|    713|{
   77|    713|	size_t need = mp_unsigned_bin_size((mp_int *) n);
   78|    713|	if (len && need > *len) {
  ------------------
  |  Branch (78:6): [True: 140, False: 573]
  |  Branch (78:13): [True: 0, False: 140]
  ------------------
   79|      0|		*len = need;
   80|      0|		return -1;
   81|      0|	}
   82|    713|	if (mp_to_unsigned_bin((mp_int *) n, buf) != MP_OKAY) {
  ------------------
  |  |   93|    713|#define MP_OKAY       0   /* ok result */
  ------------------
  |  Branch (82:6): [True: 0, False: 713]
  ------------------
   83|      0|		wpa_printf(MSG_DEBUG, "BIGNUM: %s failed", __func__);
   84|      0|		return -1;
   85|      0|	}
   86|    713|	if (len)
  ------------------
  |  Branch (86:6): [True: 140, False: 573]
  ------------------
   87|    140|		*len = need;
   88|    713|	return 0;
   89|    713|}
bignum_set_unsigned_bin:
  100|  2.58k|{
  101|  2.58k|	if (mp_read_unsigned_bin((mp_int *) n, (u8 *) buf, len) != MP_OKAY) {
  ------------------
  |  |   93|  2.58k|#define MP_OKAY       0   /* ok result */
  ------------------
  |  Branch (101:6): [True: 0, False: 2.58k]
  ------------------
  102|      0|		wpa_printf(MSG_DEBUG, "BIGNUM: %s failed", __func__);
  103|      0|		return -1;
  104|      0|	}
  105|  2.58k|	return 0;
  106|  2.58k|}
bignum_cmp:
  116|    632|{
  117|    632|	return mp_cmp((mp_int *) a, (mp_int *) b);
  118|    632|}
bignum_exptmod:
  217|    736|{
  218|    736|	if (mp_exptmod((mp_int *) a, (mp_int *) b, (mp_int *) c, (mp_int *) d)
  ------------------
  |  Branch (218:6): [True: 7, False: 729]
  ------------------
  219|    736|	    != MP_OKAY) {
  ------------------
  |  |   93|    736|#define MP_OKAY       0   /* ok result */
  ------------------
  220|      7|		wpa_printf(MSG_DEBUG, "BIGNUM: %s failed", __func__);
  221|      7|		return -1;
  222|      7|	}
  223|    729|	return 0;
  224|    736|}

bignum.c:mp_init:
  368|  1.75M|{
  369|  1.75M|  int i;
  370|       |
  371|       |  /* allocate memory required and clear it */
  372|  1.75M|  a->dp = OPT_CAST(mp_digit) XMALLOC (sizeof (mp_digit) * MP_PREC);
  ------------------
  |  |   79|  1.75M|#define XMALLOC  os_malloc
  |  |  ------------------
  |  |  |  |  505|  1.75M|#define os_malloc(s) malloc((s))
  |  |  ------------------
  ------------------
  373|  1.75M|  if (a->dp == NULL) {
  ------------------
  |  Branch (373:7): [True: 0, False: 1.75M]
  ------------------
  374|      0|    return MP_MEM;
  ------------------
  |  |   94|      0|#define MP_MEM        -2  /* out of mem */
  ------------------
  375|      0|  }
  376|       |
  377|       |  /* set the digits to zero */
  378|  15.7M|  for (i = 0; i < MP_PREC; i++) {
  ------------------
  |  |  110|  15.7M|      #define MP_PREC                 8      /* default digits of precision */
  ------------------
  |  Branch (378:15): [True: 14.0M, False: 1.75M]
  ------------------
  379|  14.0M|      a->dp[i] = 0;
  380|  14.0M|  }
  381|       |
  382|       |  /* set the used to zero, allocated digits to the default precision
  383|       |   * and sign to positive */
  384|  1.75M|  a->used  = 0;
  385|  1.75M|  a->alloc = MP_PREC;
  ------------------
  |  |  110|  1.75M|      #define MP_PREC                 8      /* default digits of precision */
  ------------------
  386|  1.75M|  a->sign  = MP_ZPOS;
  ------------------
  |  |   90|  1.75M|#define MP_ZPOS       0   /* positive integer */
  ------------------
  387|       |
  388|  1.75M|  return MP_OKAY;
  ------------------
  |  |   93|  1.75M|#define MP_OKAY       0   /* ok result */
  ------------------
  389|  1.75M|}
bignum.c:mp_clear:
  394|  2.52M|{
  395|  2.52M|  int i;
  396|       |
  397|       |  /* only do anything if a hasn't been freed previously */
  398|  2.52M|  if (a->dp != NULL) {
  ------------------
  |  Branch (398:7): [True: 2.52M, False: 0]
  ------------------
  399|       |    /* first zero the digits */
  400|  16.7M|    for (i = 0; i < a->used; i++) {
  ------------------
  |  Branch (400:17): [True: 14.2M, False: 2.52M]
  ------------------
  401|  14.2M|        a->dp[i] = 0;
  402|  14.2M|    }
  403|       |
  404|       |    /* free ram */
  405|  2.52M|    XFREE(a->dp);
  ------------------
  |  |   80|  2.52M|#define XFREE    os_free
  |  |  ------------------
  |  |  |  |  511|  2.52M|#define os_free(p) free((p))
  |  |  ------------------
  ------------------
  406|       |
  407|       |    /* reset members to make debugging easier */
  408|  2.52M|    a->dp    = NULL;
  409|  2.52M|    a->alloc = a->used = 0;
  410|  2.52M|    a->sign  = MP_ZPOS;
  ------------------
  |  |   90|  2.52M|#define MP_ZPOS       0   /* positive integer */
  ------------------
  411|  2.52M|  }
  412|  2.52M|}
bignum.c:mp_unsigned_bin_size:
  755|  2.78k|{
  756|  2.78k|  int     size = mp_count_bits (a);
  757|  2.78k|  return (size / 8 + ((size & 7) != 0 ? 1 : 0));
  ------------------
  |  Branch (757:23): [True: 2.15k, False: 626]
  ------------------
  758|  2.78k|}
bignum.c:mp_count_bits:
 1542|  4.99k|{
 1543|  4.99k|  int     r;
 1544|  4.99k|  mp_digit q;
 1545|       |
 1546|       |  /* shortcut */
 1547|  4.99k|  if (a->used == 0) {
  ------------------
  |  Branch (1547:7): [True: 69, False: 4.92k]
  ------------------
 1548|     69|    return 0;
 1549|     69|  }
 1550|       |
 1551|       |  /* get number of digits and add that */
 1552|  4.92k|  r = (a->used - 1) * DIGIT_BIT;
  ------------------
  |  |   68|  4.92k|#define DIGIT_BIT 60
  ------------------
 1553|       |
 1554|       |  /* take the last digit and count the bits in it */
 1555|  4.92k|  q = a->dp[a->used - 1];
 1556|   107k|  while (q > ((mp_digit) 0)) {
  ------------------
  |  Branch (1556:10): [True: 102k, False: 4.92k]
  ------------------
 1557|   102k|    ++r;
 1558|   102k|    q >>= ((mp_digit) 1);
 1559|   102k|  }
 1560|  4.92k|  return r;
 1561|  4.99k|}
bignum.c:mp_to_unsigned_bin:
  990|    713|{
  991|    713|  int     x, res;
  992|    713|  mp_int  t;
  993|       |
  994|    713|  if ((res = mp_init_copy (&t, a)) != MP_OKAY) {
  ------------------
  |  |   93|    713|#define MP_OKAY       0   /* ok result */
  ------------------
  |  Branch (994:7): [True: 0, False: 713]
  ------------------
  995|      0|    return res;
  996|      0|  }
  997|       |
  998|    713|  x = 0;
  999|  79.1k|  while (mp_iszero (&t) == 0) {
  ------------------
  |  |  125|  79.1k|#define mp_iszero(a) (((a)->used == 0) ? MP_YES : MP_NO)
  |  |  ------------------
  |  |  |  |   97|    713|#define MP_YES        1   /* yes response */
  |  |  ------------------
  |  |               #define mp_iszero(a) (((a)->used == 0) ? MP_YES : MP_NO)
  |  |  ------------------
  |  |  |  |   98|  78.4k|#define MP_NO         0   /* no response */
  |  |  ------------------
  |  |  |  Branch (125:23): [True: 713, False: 78.4k]
  |  |  ------------------
  ------------------
  |  Branch (999:10): [True: 78.4k, False: 713]
  ------------------
 1000|  78.4k|#ifndef MP_8BIT
 1001|  78.4k|      b[x++] = (unsigned char) (t.dp[0] & 255);
 1002|       |#else
 1003|       |      b[x++] = (unsigned char) (t.dp[0] | ((t.dp[1] & 0x01) << 7));
 1004|       |#endif
 1005|  78.4k|    if ((res = mp_div_2d (&t, 8, &t, NULL)) != MP_OKAY) {
  ------------------
  |  |   93|  78.4k|#define MP_OKAY       0   /* ok result */
  ------------------
  |  Branch (1005:9): [True: 0, False: 78.4k]
  ------------------
 1006|      0|      mp_clear (&t);
 1007|      0|      return res;
 1008|      0|    }
 1009|  78.4k|  }
 1010|    713|  bn_reverse (b, x);
 1011|    713|  mp_clear (&t);
 1012|    713|  return MP_OKAY;
  ------------------
  |  |   93|    713|#define MP_OKAY       0   /* ok result */
  ------------------
 1013|    713|}
bignum.c:mp_init_copy:
 1094|   257k|{
 1095|   257k|  int     res;
 1096|       |
 1097|   257k|  if ((res = mp_init (a)) != MP_OKAY) {
  ------------------
  |  |   93|   257k|#define MP_OKAY       0   /* ok result */
  ------------------
  |  Branch (1097:7): [True: 0, False: 257k]
  ------------------
 1098|      0|    return res;
 1099|      0|  }
 1100|   257k|  return mp_copy (b, a);
 1101|   257k|}
bignum.c:mp_copy:
 1122|  2.00M|{
 1123|  2.00M|  int     res, n;
 1124|       |
 1125|       |  /* if dst == src do nothing */
 1126|  2.00M|  if (a == b) {
  ------------------
  |  Branch (1126:7): [True: 1.73M, False: 260k]
  ------------------
 1127|  1.73M|    return MP_OKAY;
  ------------------
  |  |   93|  1.73M|#define MP_OKAY       0   /* ok result */
  ------------------
 1128|  1.73M|  }
 1129|       |
 1130|       |  /* grow dest */
 1131|   260k|  if (b->alloc < a->used) {
  ------------------
  |  Branch (1131:7): [True: 230k, False: 30.0k]
  ------------------
 1132|   230k|     if ((res = mp_grow (b, a->used)) != MP_OKAY) {
  ------------------
  |  |   93|   230k|#define MP_OKAY       0   /* ok result */
  ------------------
  |  Branch (1132:10): [True: 0, False: 230k]
  ------------------
 1133|      0|        return res;
 1134|      0|     }
 1135|   230k|  }
 1136|       |
 1137|       |  /* zero b and copy the parameters over */
 1138|   260k|  {
 1139|   260k|    register mp_digit *tmpa, *tmpb;
 1140|       |
 1141|       |    /* pointer aliases */
 1142|       |
 1143|       |    /* source */
 1144|   260k|    tmpa = a->dp;
 1145|       |
 1146|       |    /* destination */
 1147|   260k|    tmpb = b->dp;
 1148|       |
 1149|       |    /* copy all the digits */
 1150|  7.09M|    for (n = 0; n < a->used; n++) {
  ------------------
  |  Branch (1150:17): [True: 6.83M, False: 260k]
  ------------------
 1151|  6.83M|      *tmpb++ = *tmpa++;
 1152|  6.83M|    }
 1153|       |
 1154|       |    /* clear high digits */
 1155|   260k|    for (; n < b->used; n++) {
  ------------------
  |  Branch (1155:12): [True: 0, False: 260k]
  ------------------
 1156|      0|      *tmpb++ = 0;
 1157|      0|    }
 1158|   260k|  }
 1159|       |
 1160|       |  /* copy used count and sign */
 1161|   260k|  b->used = a->used;
 1162|   260k|  b->sign = a->sign;
 1163|   260k|  return MP_OKAY;
  ------------------
  |  |   93|   260k|#define MP_OKAY       0   /* ok result */
  ------------------
 1164|   260k|}
bignum.c:mp_grow:
 1257|   234k|{
 1258|   234k|  int     i;
 1259|   234k|  mp_digit *tmp;
 1260|       |
 1261|       |  /* if the alloc size is smaller alloc more ram */
 1262|   234k|  if (a->alloc < size) {
  ------------------
  |  Branch (1262:7): [True: 234k, False: 42]
  ------------------
 1263|       |    /* ensure there are always at least MP_PREC digits extra on top */
 1264|   234k|    size += (MP_PREC * 2) - (size % MP_PREC);
  ------------------
  |  |  110|   234k|      #define MP_PREC                 8      /* default digits of precision */
  ------------------
                  size += (MP_PREC * 2) - (size % MP_PREC);
  ------------------
  |  |  110|   234k|      #define MP_PREC                 8      /* default digits of precision */
  ------------------
 1265|       |
 1266|       |    /* reallocate the array a->dp
 1267|       |     *
 1268|       |     * We store the return in a temporary variable
 1269|       |     * in case the operation failed we don't want
 1270|       |     * to overwrite the dp member of a.
 1271|       |     */
 1272|   234k|    tmp = OPT_CAST(mp_digit) XREALLOC (a->dp, sizeof (mp_digit) * size);
  ------------------
  |  |   81|   234k|#define XREALLOC os_realloc
  |  |  ------------------
  |  |  |  |  508|   234k|#define os_realloc(p, s) realloc((p), (s))
  |  |  ------------------
  ------------------
 1273|   234k|    if (tmp == NULL) {
  ------------------
  |  Branch (1273:9): [True: 0, False: 234k]
  ------------------
 1274|       |      /* reallocation failed but "a" is still valid [can be freed] */
 1275|      0|      return MP_MEM;
  ------------------
  |  |   94|      0|#define MP_MEM        -2  /* out of mem */
  ------------------
 1276|      0|    }
 1277|       |
 1278|       |    /* reallocation succeeded so set a->dp */
 1279|   234k|    a->dp = tmp;
 1280|       |
 1281|       |    /* zero excess digits */
 1282|   234k|    i        = a->alloc;
 1283|   234k|    a->alloc = size;
 1284|  8.20M|    for (; i < a->alloc; i++) {
  ------------------
  |  Branch (1284:12): [True: 7.96M, False: 234k]
  ------------------
 1285|  7.96M|      a->dp[i] = 0;
 1286|  7.96M|    }
 1287|   234k|  }
 1288|   234k|  return MP_OKAY;
  ------------------
  |  |   93|   234k|#define MP_OKAY       0   /* ok result */
  ------------------
 1289|   234k|}
bignum.c:mp_div_2d:
 1018|  1.48M|{
 1019|  1.48M|  mp_digit D, r, rr;
 1020|  1.48M|  int     x, res;
 1021|  1.48M|  mp_int  t;
 1022|       |
 1023|       |
 1024|       |  /* if the shift count is <= 0 then we do no work */
 1025|  1.48M|  if (b <= 0) {
  ------------------
  |  Branch (1025:7): [True: 0, False: 1.48M]
  ------------------
 1026|      0|    res = mp_copy (a, c);
 1027|      0|    if (d != NULL) {
  ------------------
  |  Branch (1027:9): [True: 0, False: 0]
  ------------------
 1028|      0|      mp_zero (d);
 1029|      0|    }
 1030|      0|    return res;
 1031|      0|  }
 1032|       |
 1033|  1.48M|  if ((res = mp_init (&t)) != MP_OKAY) {
  ------------------
  |  |   93|  1.48M|#define MP_OKAY       0   /* ok result */
  ------------------
  |  Branch (1033:7): [True: 0, False: 1.48M]
  ------------------
 1034|      0|    return res;
 1035|      0|  }
 1036|       |
 1037|       |  /* get the remainder */
 1038|  1.48M|  if (d != NULL) {
  ------------------
  |  Branch (1038:7): [True: 0, False: 1.48M]
  ------------------
 1039|      0|    if ((res = mp_mod_2d (a, b, &t)) != MP_OKAY) {
  ------------------
  |  |   93|      0|#define MP_OKAY       0   /* ok result */
  ------------------
  |  Branch (1039:9): [True: 0, False: 0]
  ------------------
 1040|      0|      mp_clear (&t);
 1041|      0|      return res;
 1042|      0|    }
 1043|      0|  }
 1044|       |
 1045|       |  /* copy */
 1046|  1.48M|  if ((res = mp_copy (a, c)) != MP_OKAY) {
  ------------------
  |  |   93|  1.48M|#define MP_OKAY       0   /* ok result */
  ------------------
  |  Branch (1046:7): [True: 0, False: 1.48M]
  ------------------
 1047|      0|    mp_clear (&t);
 1048|      0|    return res;
 1049|      0|  }
 1050|       |
 1051|       |  /* shift by as many digits in the bit count */
 1052|  1.48M|  if (b >= (int)DIGIT_BIT) {
  ------------------
  |  |   68|  1.48M|#define DIGIT_BIT 60
  ------------------
  |  Branch (1052:7): [True: 0, False: 1.48M]
  ------------------
 1053|      0|    mp_rshd (c, b / DIGIT_BIT);
  ------------------
  |  |   68|      0|#define DIGIT_BIT 60
  ------------------
 1054|      0|  }
 1055|       |
 1056|       |  /* shift any bit count < DIGIT_BIT */
 1057|  1.48M|  D = (mp_digit) (b % DIGIT_BIT);
  ------------------
  |  |   68|  1.48M|#define DIGIT_BIT 60
  ------------------
 1058|  1.48M|  if (D != 0) {
  ------------------
  |  Branch (1058:7): [True: 1.48M, False: 0]
  ------------------
 1059|  1.48M|    register mp_digit *tmpc, mask, shift;
 1060|       |
 1061|       |    /* mask */
 1062|  1.48M|    mask = (((mp_digit)1) << D) - 1;
 1063|       |
 1064|       |    /* shift for lsb */
 1065|  1.48M|    shift = DIGIT_BIT - D;
  ------------------
  |  |   68|  1.48M|#define DIGIT_BIT 60
  ------------------
 1066|       |
 1067|       |    /* alias */
 1068|  1.48M|    tmpc = c->dp + (c->used - 1);
 1069|       |
 1070|       |    /* carry */
 1071|  1.48M|    r = 0;
 1072|  26.6M|    for (x = c->used - 1; x >= 0; x--) {
  ------------------
  |  Branch (1072:27): [True: 25.2M, False: 1.48M]
  ------------------
 1073|       |      /* get the lower  bits of this word in a temp */
 1074|  25.2M|      rr = *tmpc & mask;
 1075|       |
 1076|       |      /* shift the current word and mix in the carry bits from the previous word */
 1077|  25.2M|      *tmpc = (*tmpc >> D) | (r << shift);
 1078|  25.2M|      --tmpc;
 1079|       |
 1080|       |      /* set the carry to the carry bits of the current word found above */
 1081|  25.2M|      r = rr;
 1082|  25.2M|    }
 1083|  1.48M|  }
 1084|  1.48M|  mp_clamp (c);
 1085|  1.48M|  if (d != NULL) {
  ------------------
  |  Branch (1085:7): [True: 0, False: 1.48M]
  ------------------
 1086|      0|    mp_exch (&t, d);
 1087|      0|  }
 1088|  1.48M|  mp_clear (&t);
 1089|  1.48M|  return MP_OKAY;
  ------------------
  |  |   93|  1.48M|#define MP_OKAY       0   /* ok result */
  ------------------
 1090|  1.48M|}
bignum.c:mp_zero:
 1106|  36.8k|{
 1107|  36.8k|  int       n;
 1108|  36.8k|  mp_digit *tmp;
 1109|       |
 1110|  36.8k|  a->sign = MP_ZPOS;
  ------------------
  |  |   90|  36.8k|#define MP_ZPOS       0   /* positive integer */
  ------------------
 1111|  36.8k|  a->used = 0;
 1112|       |
 1113|  36.8k|  tmp = a->dp;
 1114|   611k|  for (n = 0; n < a->alloc; n++) {
  ------------------
  |  Branch (1114:15): [True: 574k, False: 36.8k]
  ------------------
 1115|   574k|     *tmp++ = 0;
 1116|   574k|  }
 1117|  36.8k|}
bignum.c:mp_mod_2d:
 1566|   256k|{
 1567|   256k|  int     x, res;
 1568|       |
 1569|       |  /* if b is <= 0 then zero the int */
 1570|   256k|  if (b <= 0) {
  ------------------
  |  Branch (1570:7): [True: 0, False: 256k]
  ------------------
 1571|      0|    mp_zero (c);
 1572|      0|    return MP_OKAY;
  ------------------
  |  |   93|      0|#define MP_OKAY       0   /* ok result */
  ------------------
 1573|      0|  }
 1574|       |
 1575|       |  /* if the modulus is larger than the value than return */
 1576|   256k|  if (b >= (int) (a->used * DIGIT_BIT)) {
  ------------------
  |  |   68|   256k|#define DIGIT_BIT 60
  ------------------
  |  Branch (1576:7): [True: 28.8k, False: 227k]
  ------------------
 1577|  28.8k|    res = mp_copy (a, c);
 1578|  28.8k|    return res;
 1579|  28.8k|  }
 1580|       |
 1581|       |  /* copy */
 1582|   227k|  if ((res = mp_copy (a, c)) != MP_OKAY) {
  ------------------
  |  |   93|   227k|#define MP_OKAY       0   /* ok result */
  ------------------
  |  Branch (1582:7): [True: 0, False: 227k]
  ------------------
 1583|      0|    return res;
 1584|      0|  }
 1585|       |
 1586|       |  /* zero digits above the last digit of the modulus */
 1587|  3.17M|  for (x = (b / DIGIT_BIT) + ((b % DIGIT_BIT) == 0 ? 0 : 1); x < c->used; x++) {
  ------------------
  |  |   68|   227k|#define DIGIT_BIT 60
  ------------------
                for (x = (b / DIGIT_BIT) + ((b % DIGIT_BIT) == 0 ? 0 : 1); x < c->used; x++) {
  ------------------
  |  |   68|   227k|#define DIGIT_BIT 60
  ------------------
  |  Branch (1587:31): [True: 227k, False: 0]
  |  Branch (1587:62): [True: 2.94M, False: 227k]
  ------------------
 1588|  2.94M|    c->dp[x] = 0;
 1589|  2.94M|  }
 1590|       |  /* clear the digit that is not completely outside/inside the modulus */
 1591|   227k|  c->dp[b / DIGIT_BIT] &=
  ------------------
  |  |   68|   227k|#define DIGIT_BIT 60
  ------------------
 1592|   227k|    (mp_digit) ((((mp_digit) 1) << (((mp_digit) b) % DIGIT_BIT)) - ((mp_digit) 1));
  ------------------
  |  |   68|   227k|#define DIGIT_BIT 60
  ------------------
 1593|   227k|  mp_clamp (c);
 1594|   227k|  return MP_OKAY;
  ------------------
  |  |   93|   227k|#define MP_OKAY       0   /* ok result */
  ------------------
 1595|   227k|}
bignum.c:mp_rshd:
 1169|   513k|{
 1170|   513k|  int     x;
 1171|       |
 1172|       |  /* if b <= 0 then ignore it */
 1173|   513k|  if (b <= 0) {
  ------------------
  |  Branch (1173:7): [True: 3.87k, False: 509k]
  ------------------
 1174|  3.87k|    return;
 1175|  3.87k|  }
 1176|       |
 1177|       |  /* if b > used then simply zero it and return */
 1178|   509k|  if (a->used <= b) {
  ------------------
  |  Branch (1178:7): [True: 24.8k, False: 484k]
  ------------------
 1179|  24.8k|    mp_zero (a);
 1180|  24.8k|    return;
 1181|  24.8k|  }
 1182|       |
 1183|   484k|  {
 1184|   484k|    register mp_digit *bottom, *top;
 1185|       |
 1186|       |    /* shift the digits down */
 1187|       |
 1188|       |    /* bottom */
 1189|   484k|    bottom = a->dp;
 1190|       |
 1191|       |    /* top [offset into digits] */
 1192|   484k|    top = a->dp + b;
 1193|       |
 1194|       |    /* this is implemented as a sliding window where
 1195|       |     * the window is b-digits long and digits from
 1196|       |     * the top of the window are copied to the bottom
 1197|       |     *
 1198|       |     * e.g.
 1199|       |
 1200|       |     b-2 | b-1 | b0 | b1 | b2 | ... | bb |   ---->
 1201|       |                 /\                   |      ---->
 1202|       |                  \-------------------/      ---->
 1203|       |     */
 1204|  7.23M|    for (x = 0; x < (a->used - b); x++) {
  ------------------
  |  Branch (1204:17): [True: 6.75M, False: 484k]
  ------------------
 1205|  6.75M|      *bottom++ = *top++;
 1206|  6.75M|    }
 1207|       |
 1208|       |    /* zero the top digits */
 1209|  7.65M|    for (; x < a->used; x++) {
  ------------------
  |  Branch (1209:12): [True: 7.17M, False: 484k]
  ------------------
 1210|  7.17M|      *bottom++ = 0;
 1211|  7.17M|    }
 1212|   484k|  }
 1213|       |
 1214|       |  /* remove excess digits */
 1215|   484k|  a->used -= b;
 1216|   484k|}
bignum.c:mp_clamp:
 1240|  4.46M|{
 1241|       |  /* decrease used while the most significant digit is
 1242|       |   * zero.
 1243|       |   */
 1244|  9.32M|  while (a->used > 0 && a->dp[a->used - 1] == 0) {
  ------------------
  |  Branch (1244:10): [True: 9.26M, False: 50.9k]
  |  Branch (1244:25): [True: 4.85M, False: 4.41M]
  ------------------
 1245|  4.85M|    --(a->used);
 1246|  4.85M|  }
 1247|       |
 1248|       |  /* reset the sign flag if used == 0 */
 1249|  4.46M|  if (a->used == 0) {
  ------------------
  |  Branch (1249:7): [True: 50.9k, False: 4.41M]
  ------------------
 1250|  50.9k|    a->sign = MP_ZPOS;
  ------------------
  |  |   90|  50.9k|#define MP_ZPOS       0   /* positive integer */
  ------------------
 1251|  50.9k|  }
 1252|  4.46M|}
bignum.c:mp_exch:
 1223|   771k|{
 1224|   771k|  mp_int  t;
 1225|       |
 1226|   771k|  t  = *a;
 1227|   771k|  *a = *b;
 1228|   771k|  *b = t;
 1229|   771k|}
bignum.c:bn_reverse:
  195|    713|{
  196|    713|  int     ix, iy;
  197|    713|  unsigned char t;
  198|       |
  199|    713|  ix = 0;
  200|    713|  iy = len - 1;
  201|  39.7k|  while (ix < iy) {
  ------------------
  |  Branch (201:10): [True: 39.0k, False: 713]
  ------------------
  202|  39.0k|    t     = s[ix];
  203|  39.0k|    s[ix] = s[iy];
  204|  39.0k|    s[iy] = t;
  205|  39.0k|    ++ix;
  206|  39.0k|    --iy;
  207|  39.0k|  }
  208|    713|}
bignum.c:mp_read_unsigned_bin:
  955|  2.58k|{
  956|  2.58k|  int     res;
  957|       |
  958|       |  /* make sure there are at least two digits */
  959|  2.58k|  if (a->alloc < 2) {
  ------------------
  |  Branch (959:7): [True: 0, False: 2.58k]
  ------------------
  960|      0|     if ((res = mp_grow(a, 2)) != MP_OKAY) {
  ------------------
  |  |   93|      0|#define MP_OKAY       0   /* ok result */
  ------------------
  |  Branch (960:10): [True: 0, False: 0]
  ------------------
  961|      0|        return res;
  962|      0|     }
  963|      0|  }
  964|       |
  965|       |  /* zero the int */
  966|  2.58k|  mp_zero (a);
  967|       |
  968|       |  /* read the bytes in */
  969|   215k|  while (c-- > 0) {
  ------------------
  |  Branch (969:10): [True: 212k, False: 2.58k]
  ------------------
  970|   212k|    if ((res = mp_mul_2d (a, 8, a)) != MP_OKAY) {
  ------------------
  |  |   93|   212k|#define MP_OKAY       0   /* ok result */
  ------------------
  |  Branch (970:9): [True: 0, False: 212k]
  ------------------
  971|      0|      return res;
  972|      0|    }
  973|       |
  974|   212k|#ifndef MP_8BIT
  975|   212k|      a->dp[0] |= *b++;
  976|   212k|      a->used += 1;
  977|       |#else
  978|       |      a->dp[0] = (*b & MP_MASK);
  979|       |      a->dp[1] |= ((*b++ >> 7U) & 1);
  980|       |      a->used += 2;
  981|       |#endif
  982|   212k|  }
  983|  2.58k|  mp_clamp (a);
  984|  2.58k|  return MP_OKAY;
  ------------------
  |  |   93|  2.58k|#define MP_OKAY       0   /* ok result */
  ------------------
  985|  2.58k|}
bignum.c:mp_mul_2d:
 1377|   214k|{
 1378|   214k|  mp_digit d;
 1379|   214k|  int      res;
 1380|       |
 1381|       |  /* copy */
 1382|   214k|  if (a != c) {
  ------------------
  |  Branch (1382:7): [True: 0, False: 214k]
  ------------------
 1383|      0|     if ((res = mp_copy (a, c)) != MP_OKAY) {
  ------------------
  |  |   93|      0|#define MP_OKAY       0   /* ok result */
  ------------------
  |  Branch (1383:10): [True: 0, False: 0]
  ------------------
 1384|      0|       return res;
 1385|      0|     }
 1386|      0|  }
 1387|       |
 1388|   214k|  if (c->alloc < (int)(c->used + b/DIGIT_BIT + 1)) {
  ------------------
  |  |   68|   214k|#define DIGIT_BIT 60
  ------------------
  |  Branch (1388:7): [True: 2.94k, False: 211k]
  ------------------
 1389|  2.94k|     if ((res = mp_grow (c, c->used + b / DIGIT_BIT + 1)) != MP_OKAY) {
  ------------------
  |  |   68|  2.94k|#define DIGIT_BIT 60
  ------------------
                   if ((res = mp_grow (c, c->used + b / DIGIT_BIT + 1)) != MP_OKAY) {
  ------------------
  |  |   93|  2.94k|#define MP_OKAY       0   /* ok result */
  ------------------
  |  Branch (1389:10): [True: 0, False: 2.94k]
  ------------------
 1390|      0|       return res;
 1391|      0|     }
 1392|  2.94k|  }
 1393|       |
 1394|       |  /* shift by as many digits in the bit count */
 1395|   214k|  if (b >= (int)DIGIT_BIT) {
  ------------------
  |  |   68|   214k|#define DIGIT_BIT 60
  ------------------
  |  Branch (1395:7): [True: 1.45k, False: 212k]
  ------------------
 1396|  1.45k|    if ((res = mp_lshd (c, b / DIGIT_BIT)) != MP_OKAY) {
  ------------------
  |  |   68|  1.45k|#define DIGIT_BIT 60
  ------------------
                  if ((res = mp_lshd (c, b / DIGIT_BIT)) != MP_OKAY) {
  ------------------
  |  |   93|  1.45k|#define MP_OKAY       0   /* ok result */
  ------------------
  |  Branch (1396:9): [True: 0, False: 1.45k]
  ------------------
 1397|      0|      return res;
 1398|      0|    }
 1399|  1.45k|  }
 1400|       |
 1401|       |  /* shift any bit count < DIGIT_BIT */
 1402|   214k|  d = (mp_digit) (b % DIGIT_BIT);
  ------------------
  |  |   68|   214k|#define DIGIT_BIT 60
  ------------------
 1403|   214k|  if (d != 0) {
  ------------------
  |  Branch (1403:7): [True: 214k, False: 56]
  ------------------
 1404|   214k|    register mp_digit *tmpc, shift, mask, r, rr;
 1405|   214k|    register int x;
 1406|       |
 1407|       |    /* bitmask for carries */
 1408|   214k|    mask = (((mp_digit)1) << d) - 1;
 1409|       |
 1410|       |    /* shift for msbs */
 1411|   214k|    shift = DIGIT_BIT - d;
  ------------------
  |  |   68|   214k|#define DIGIT_BIT 60
  ------------------
 1412|       |
 1413|       |    /* alias */
 1414|   214k|    tmpc = c->dp;
 1415|       |
 1416|       |    /* carry */
 1417|   214k|    r    = 0;
 1418|  10.0M|    for (x = 0; x < c->used; x++) {
  ------------------
  |  Branch (1418:17): [True: 9.81M, False: 214k]
  ------------------
 1419|       |      /* get the higher bits of the current word */
 1420|  9.81M|      rr = (*tmpc >> shift) & mask;
 1421|       |
 1422|       |      /* shift the current word and OR in the carry */
 1423|  9.81M|      *tmpc = ((*tmpc << d) | r) & MP_MASK;
  ------------------
  |  |   84|  9.81M|#define MP_MASK          ((((mp_digit)1)<<((mp_digit)DIGIT_BIT))-((mp_digit)1))
  |  |  ------------------
  |  |  |  |   68|  9.81M|#define DIGIT_BIT 60
  |  |  ------------------
  ------------------
 1424|  9.81M|      ++tmpc;
 1425|       |
 1426|       |      /* set the carry to the carry bits of the current word */
 1427|  9.81M|      r = rr;
 1428|  9.81M|    }
 1429|       |
 1430|       |    /* set final carry */
 1431|   214k|    if (r != 0) {
  ------------------
  |  Branch (1431:9): [True: 710, False: 213k]
  ------------------
 1432|    710|       c->dp[(c->used)++] = r;
 1433|    710|    }
 1434|   214k|  }
 1435|   214k|  mp_clamp (c);
 1436|   214k|  return MP_OKAY;
  ------------------
  |  |   93|   214k|#define MP_OKAY       0   /* ok result */
  ------------------
 1437|   214k|}
bignum.c:mp_lshd:
 1495|  8.69k|{
 1496|  8.69k|  int     x, res;
 1497|       |
 1498|       |  /* if its less than zero return */
 1499|  8.69k|  if (b <= 0) {
  ------------------
  |  Branch (1499:7): [True: 0, False: 8.69k]
  ------------------
 1500|      0|    return MP_OKAY;
  ------------------
  |  |   93|      0|#define MP_OKAY       0   /* ok result */
  ------------------
 1501|      0|  }
 1502|       |
 1503|       |  /* grow to fit the new digits */
 1504|  8.69k|  if (a->alloc < a->used + b) {
  ------------------
  |  Branch (1504:7): [True: 0, False: 8.69k]
  ------------------
 1505|      0|     if ((res = mp_grow (a, a->used + b)) != MP_OKAY) {
  ------------------
  |  |   93|      0|#define MP_OKAY       0   /* ok result */
  ------------------
  |  Branch (1505:10): [True: 0, False: 0]
  ------------------
 1506|      0|       return res;
 1507|      0|     }
 1508|      0|  }
 1509|       |
 1510|  8.69k|  {
 1511|  8.69k|    register mp_digit *top, *bottom;
 1512|       |
 1513|       |    /* increment the used by the shift amount then copy upwards */
 1514|  8.69k|    a->used += b;
 1515|       |
 1516|       |    /* top */
 1517|  8.69k|    top = a->dp + a->used - 1;
 1518|       |
 1519|       |    /* base */
 1520|  8.69k|    bottom = a->dp + a->used - 1 - b;
 1521|       |
 1522|       |    /* much like mp_rshd this is implemented using a sliding window
 1523|       |     * except the window goes the otherway around.  Copying from
 1524|       |     * the bottom to the top.  see bn_mp_rshd.c for more info.
 1525|       |     */
 1526|  27.8k|    for (x = a->used - 1; x >= b; x--) {
  ------------------
  |  Branch (1526:27): [True: 19.1k, False: 8.69k]
  ------------------
 1527|  19.1k|      *top-- = *bottom--;
 1528|  19.1k|    }
 1529|       |
 1530|       |    /* zero the lower digits */
 1531|  8.69k|    top = a->dp;
 1532|  78.1k|    for (x = 0; x < b; x++) {
  ------------------
  |  Branch (1532:17): [True: 69.4k, False: 8.69k]
  ------------------
 1533|  69.4k|      *top++ = 0;
 1534|  69.4k|    }
 1535|  8.69k|  }
 1536|  8.69k|  return MP_OKAY;
  ------------------
  |  |   93|  8.69k|#define MP_OKAY       0   /* ok result */
  ------------------
 1537|  8.69k|}
bignum.c:mp_cmp:
  679|  1.76M|{
  680|       |  /* compare based on sign */
  681|  1.76M|  if (a->sign != b->sign) {
  ------------------
  |  Branch (681:7): [True: 0, False: 1.76M]
  ------------------
  682|      0|     if (a->sign == MP_NEG) {
  ------------------
  |  |   91|      0|#define MP_NEG        1   /* negative */
  ------------------
  |  Branch (682:10): [True: 0, False: 0]
  ------------------
  683|      0|        return MP_LT;
  ------------------
  |  |   86|      0|#define MP_LT        -1   /* less than */
  ------------------
  684|      0|     } else {
  685|      0|        return MP_GT;
  ------------------
  |  |   88|      0|#define MP_GT         1   /* greater than */
  ------------------
  686|      0|     }
  687|      0|  }
  688|       |
  689|       |  /* compare digits */
  690|  1.76M|  if (a->sign == MP_NEG) {
  ------------------
  |  |   91|  1.76M|#define MP_NEG        1   /* negative */
  ------------------
  |  Branch (690:7): [True: 0, False: 1.76M]
  ------------------
  691|       |     /* if negative compare opposite direction */
  692|      0|     return mp_cmp_mag(b, a);
  693|  1.76M|  } else {
  694|  1.76M|     return mp_cmp_mag(a, b);
  695|  1.76M|  }
  696|  1.76M|}
bignum.c:mp_cmp_mag:
  920|  2.38M|{
  921|  2.38M|  int     n;
  922|  2.38M|  mp_digit *tmpa, *tmpb;
  923|       |
  924|       |  /* compare based on # of non-zero digits */
  925|  2.38M|  if (a->used > b->used) {
  ------------------
  |  Branch (925:7): [True: 46.9k, False: 2.33M]
  ------------------
  926|  46.9k|    return MP_GT;
  ------------------
  |  |   88|  46.9k|#define MP_GT         1   /* greater than */
  ------------------
  927|  46.9k|  }
  928|       |
  929|  2.33M|  if (a->used < b->used) {
  ------------------
  |  Branch (929:7): [True: 49.4k, False: 2.28M]
  ------------------
  930|  49.4k|    return MP_LT;
  ------------------
  |  |   86|  49.4k|#define MP_LT        -1   /* less than */
  ------------------
  931|  49.4k|  }
  932|       |
  933|       |  /* alias for a */
  934|  2.28M|  tmpa = a->dp + (a->used - 1);
  935|       |
  936|       |  /* alias for b */
  937|  2.28M|  tmpb = b->dp + (a->used - 1);
  938|       |
  939|       |  /* compare based on digits  */
  940|  2.51M|  for (n = 0; n < a->used; ++n, --tmpa, --tmpb) {
  ------------------
  |  Branch (940:15): [True: 2.50M, False: 7.54k]
  ------------------
  941|  2.50M|    if (*tmpa > *tmpb) {
  ------------------
  |  Branch (941:9): [True: 1.70M, False: 802k]
  ------------------
  942|  1.70M|      return MP_GT;
  ------------------
  |  |   88|  1.70M|#define MP_GT         1   /* greater than */
  ------------------
  943|  1.70M|    }
  944|       |
  945|   802k|    if (*tmpa < *tmpb) {
  ------------------
  |  Branch (945:9): [True: 574k, False: 228k]
  ------------------
  946|   574k|      return MP_LT;
  ------------------
  |  |   86|   574k|#define MP_LT        -1   /* less than */
  ------------------
  947|   574k|    }
  948|   802k|  }
  949|  7.54k|  return MP_EQ;
  ------------------
  |  |   87|  7.54k|#define MP_EQ         0   /* equal to */
  ------------------
  950|  2.28M|}
bignum.c:mp_cmp_d:
  701|   256k|{
  702|       |  /* compare based on sign */
  703|   256k|  if (a->sign == MP_NEG) {
  ------------------
  |  |   91|   256k|#define MP_NEG        1   /* negative */
  ------------------
  |  Branch (703:7): [True: 7.23k, False: 249k]
  ------------------
  704|  7.23k|    return MP_LT;
  ------------------
  |  |   86|  7.23k|#define MP_LT        -1   /* less than */
  ------------------
  705|  7.23k|  }
  706|       |
  707|       |  /* compare based on magnitude */
  708|   249k|  if (a->used > 1) {
  ------------------
  |  Branch (708:7): [True: 234k, False: 14.7k]
  ------------------
  709|   234k|    return MP_GT;
  ------------------
  |  |   88|   234k|#define MP_GT         1   /* greater than */
  ------------------
  710|   234k|  }
  711|       |
  712|       |  /* compare the only digit of a to b */
  713|  14.7k|  if (a->dp[0] > b) {
  ------------------
  |  Branch (713:7): [True: 7.27k, False: 7.47k]
  ------------------
  714|  7.27k|    return MP_GT;
  ------------------
  |  |   88|  7.27k|#define MP_GT         1   /* greater than */
  ------------------
  715|  7.47k|  } else if (a->dp[0] < b) {
  ------------------
  |  Branch (715:14): [True: 0, False: 7.47k]
  ------------------
  716|      0|    return MP_LT;
  ------------------
  |  |   86|      0|#define MP_LT        -1   /* less than */
  ------------------
  717|  7.47k|  } else {
  718|  7.47k|    return MP_EQ;
  ------------------
  |  |   87|  7.47k|#define MP_EQ         0   /* equal to */
  ------------------
  719|  7.47k|  }
  720|  14.7k|}
bignum.c:mp_add:
  417|   359k|{
  418|   359k|  int     sa, sb, res;
  419|       |
  420|       |  /* get sign of both inputs */
  421|   359k|  sa = a->sign;
  422|   359k|  sb = b->sign;
  423|       |
  424|       |  /* handle two cases, not four */
  425|   359k|  if (sa == sb) {
  ------------------
  |  Branch (425:7): [True: 352k, False: 7.23k]
  ------------------
  426|       |    /* both positive or both negative */
  427|       |    /* add their magnitudes, copy the sign */
  428|   352k|    c->sign = sa;
  429|   352k|    res = s_mp_add (a, b, c);
  430|   352k|  } else {
  431|       |    /* one positive, the other negative */
  432|       |    /* subtract the one with the greater magnitude from */
  433|       |    /* the one of the lesser magnitude.  The result gets */
  434|       |    /* the sign of the one with the greater magnitude. */
  435|  7.23k|    if (mp_cmp_mag (a, b) == MP_LT) {
  ------------------
  |  |   86|  7.23k|#define MP_LT        -1   /* less than */
  ------------------
  |  Branch (435:9): [True: 7.23k, False: 0]
  ------------------
  436|  7.23k|      c->sign = sb;
  437|  7.23k|      res = s_mp_sub (b, a, c);
  438|  7.23k|    } else {
  439|      0|      c->sign = sa;
  440|      0|      res = s_mp_sub (a, b, c);
  441|      0|    }
  442|  7.23k|  }
  443|   359k|  return res;
  444|   359k|}
bignum.c:s_mp_add:
  213|   352k|{
  214|   352k|  mp_int *x;
  215|   352k|  int     olduse, res, min, max;
  216|       |
  217|       |  /* find sizes, we let |a| <= |b| which means we have to sort
  218|       |   * them.  "x" will point to the input with the most digits
  219|       |   */
  220|   352k|  if (a->used > b->used) {
  ------------------
  |  Branch (220:7): [True: 337k, False: 15.0k]
  ------------------
  221|   337k|    min = b->used;
  222|   337k|    max = a->used;
  223|   337k|    x = a;
  224|   337k|  } else {
  225|  15.0k|    min = a->used;
  226|  15.0k|    max = b->used;
  227|  15.0k|    x = b;
  228|  15.0k|  }
  229|       |
  230|       |  /* init result */
  231|   352k|  if (c->alloc < max + 1) {
  ------------------
  |  Branch (231:7): [True: 629, False: 351k]
  ------------------
  232|    629|    if ((res = mp_grow (c, max + 1)) != MP_OKAY) {
  ------------------
  |  |   93|    629|#define MP_OKAY       0   /* ok result */
  ------------------
  |  Branch (232:9): [True: 0, False: 629]
  ------------------
  233|      0|      return res;
  234|      0|    }
  235|    629|  }
  236|       |
  237|       |  /* get old used digit count and set new one */
  238|   352k|  olduse = c->used;
  239|   352k|  c->used = max + 1;
  240|       |
  241|   352k|  {
  242|   352k|    register mp_digit u, *tmpa, *tmpb, *tmpc;
  243|   352k|    register int i;
  244|       |
  245|       |    /* alias for digit pointers */
  246|       |
  247|       |    /* first input */
  248|   352k|    tmpa = a->dp;
  249|       |
  250|       |    /* second input */
  251|   352k|    tmpb = b->dp;
  252|       |
  253|       |    /* destination */
  254|   352k|    tmpc = c->dp;
  255|       |
  256|       |    /* zero the carry */
  257|   352k|    u = 0;
  258|  3.63M|    for (i = 0; i < min; i++) {
  ------------------
  |  Branch (258:17): [True: 3.28M, False: 352k]
  ------------------
  259|       |      /* Compute the sum at one digit, T[i] = A[i] + B[i] + U */
  260|  3.28M|      *tmpc = *tmpa++ + *tmpb++ + u;
  261|       |
  262|       |      /* U = carry bit of T[i] */
  263|  3.28M|      u = *tmpc >> ((mp_digit)DIGIT_BIT);
  ------------------
  |  |   68|  3.28M|#define DIGIT_BIT 60
  ------------------
  264|       |
  265|       |      /* take away carry bit from T[i] */
  266|  3.28M|      *tmpc++ &= MP_MASK;
  ------------------
  |  |   84|  3.28M|#define MP_MASK          ((((mp_digit)1)<<((mp_digit)DIGIT_BIT))-((mp_digit)1))
  |  |  ------------------
  |  |  |  |   68|  3.28M|#define DIGIT_BIT 60
  |  |  ------------------
  ------------------
  267|  3.28M|    }
  268|       |
  269|       |    /* now copy higher words if any, that is in A+B
  270|       |     * if A or B has more digits add those in
  271|       |     */
  272|   352k|    if (min != max) {
  ------------------
  |  Branch (272:9): [True: 337k, False: 14.2k]
  ------------------
  273|  3.35M|      for (; i < max; i++) {
  ------------------
  |  Branch (273:14): [True: 3.01M, False: 337k]
  ------------------
  274|       |        /* T[i] = X[i] + U */
  275|  3.01M|        *tmpc = x->dp[i] + u;
  276|       |
  277|       |        /* U = carry bit of T[i] */
  278|  3.01M|        u = *tmpc >> ((mp_digit)DIGIT_BIT);
  ------------------
  |  |   68|  3.01M|#define DIGIT_BIT 60
  ------------------
  279|       |
  280|       |        /* take away carry bit from T[i] */
  281|  3.01M|        *tmpc++ &= MP_MASK;
  ------------------
  |  |   84|  3.01M|#define MP_MASK          ((((mp_digit)1)<<((mp_digit)DIGIT_BIT))-((mp_digit)1))
  |  |  ------------------
  |  |  |  |   68|  3.01M|#define DIGIT_BIT 60
  |  |  ------------------
  ------------------
  282|  3.01M|      }
  283|   337k|    }
  284|       |
  285|       |    /* add carry */
  286|   352k|    *tmpc++ = u;
  287|       |
  288|       |    /* clear digits above oldused */
  289|   352k|    for (i = c->used; i < olduse; i++) {
  ------------------
  |  Branch (289:23): [True: 0, False: 352k]
  ------------------
  290|      0|      *tmpc++ = 0;
  291|      0|    }
  292|   352k|  }
  293|       |
  294|   352k|  mp_clamp (c);
  295|   352k|  return MP_OKAY;
  ------------------
  |  |   93|   352k|#define MP_OKAY       0   /* ok result */
  ------------------
  296|   352k|}
bignum.c:s_mp_sub:
  301|  1.41M|{
  302|  1.41M|  int     olduse, res, min, max;
  303|       |
  304|       |  /* find sizes */
  305|  1.41M|  min = b->used;
  306|  1.41M|  max = a->used;
  307|       |
  308|       |  /* init result */
  309|  1.41M|  if (c->alloc < max) {
  ------------------
  |  Branch (309:7): [True: 0, False: 1.41M]
  ------------------
  310|      0|    if ((res = mp_grow (c, max)) != MP_OKAY) {
  ------------------
  |  |   93|      0|#define MP_OKAY       0   /* ok result */
  ------------------
  |  Branch (310:9): [True: 0, False: 0]
  ------------------
  311|      0|      return res;
  312|      0|    }
  313|      0|  }
  314|  1.41M|  olduse = c->used;
  315|  1.41M|  c->used = max;
  316|       |
  317|  1.41M|  {
  318|  1.41M|    register mp_digit u, *tmpa, *tmpb, *tmpc;
  319|  1.41M|    register int i;
  320|       |
  321|       |    /* alias for digit pointers */
  322|  1.41M|    tmpa = a->dp;
  323|  1.41M|    tmpb = b->dp;
  324|  1.41M|    tmpc = c->dp;
  325|       |
  326|       |    /* set carry to zero */
  327|  1.41M|    u = 0;
  328|  27.4M|    for (i = 0; i < min; i++) {
  ------------------
  |  Branch (328:17): [True: 26.0M, False: 1.41M]
  ------------------
  329|       |      /* T[i] = A[i] - B[i] - U */
  330|  26.0M|      *tmpc = *tmpa++ - *tmpb++ - u;
  331|       |
  332|       |      /* U = carry bit of T[i]
  333|       |       * Note this saves performing an AND operation since
  334|       |       * if a carry does occur it will propagate all the way to the
  335|       |       * MSB.  As a result a single shift is enough to get the carry
  336|       |       */
  337|  26.0M|      u = *tmpc >> ((mp_digit)(CHAR_BIT * sizeof (mp_digit) - 1));
  ------------------
  |  |   18|  26.0M|#define CHAR_BIT 8
  ------------------
  338|       |
  339|       |      /* Clear carry from T[i] */
  340|  26.0M|      *tmpc++ &= MP_MASK;
  ------------------
  |  |   84|  26.0M|#define MP_MASK          ((((mp_digit)1)<<((mp_digit)DIGIT_BIT))-((mp_digit)1))
  |  |  ------------------
  |  |  |  |   68|  26.0M|#define DIGIT_BIT 60
  |  |  ------------------
  ------------------
  341|  26.0M|    }
  342|       |
  343|       |    /* now copy higher words if any, e.g. if A has more digits than B  */
  344|  1.48M|    for (; i < max; i++) {
  ------------------
  |  Branch (344:12): [True: 68.3k, False: 1.41M]
  ------------------
  345|       |      /* T[i] = A[i] - U */
  346|  68.3k|      *tmpc = *tmpa++ - u;
  347|       |
  348|       |      /* U = carry bit of T[i] */
  349|  68.3k|      u = *tmpc >> ((mp_digit)(CHAR_BIT * sizeof (mp_digit) - 1));
  ------------------
  |  |   18|  68.3k|#define CHAR_BIT 8
  ------------------
  350|       |
  351|       |      /* Clear carry from T[i] */
  352|  68.3k|      *tmpc++ &= MP_MASK;
  ------------------
  |  |   84|  68.3k|#define MP_MASK          ((((mp_digit)1)<<((mp_digit)DIGIT_BIT))-((mp_digit)1))
  |  |  ------------------
  |  |  |  |   68|  68.3k|#define DIGIT_BIT 60
  |  |  ------------------
  ------------------
  353|  68.3k|    }
  354|       |
  355|       |    /* clear digits above used (since we may not have grown result above) */
  356|  1.41M|    for (i = c->used; i < olduse; i++) {
  ------------------
  |  Branch (356:23): [True: 0, False: 1.41M]
  ------------------
  357|      0|      *tmpc++ = 0;
  358|      0|    }
  359|  1.41M|  }
  360|       |
  361|  1.41M|  mp_clamp (c);
  362|  1.41M|  return MP_OKAY;
  ------------------
  |  |   93|  1.41M|#define MP_OKAY       0   /* ok result */
  ------------------
  363|  1.41M|}
bignum.c:mp_sub:
  449|   608k|{
  450|   608k|  int     sa, sb, res;
  451|       |
  452|   608k|  sa = a->sign;
  453|   608k|  sb = b->sign;
  454|       |
  455|   608k|  if (sa != sb) {
  ------------------
  |  Branch (455:7): [True: 0, False: 608k]
  ------------------
  456|       |    /* subtract a negative from a positive, OR */
  457|       |    /* subtract a positive from a negative. */
  458|       |    /* In either case, ADD their magnitudes, */
  459|       |    /* and use the sign of the first number. */
  460|      0|    c->sign = sa;
  461|      0|    res = s_mp_add (a, b, c);
  462|   608k|  } else {
  463|       |    /* subtract a positive from a positive, OR */
  464|       |    /* subtract a negative from a negative. */
  465|       |    /* First, take the difference between their */
  466|       |    /* magnitudes, then... */
  467|   608k|    if (mp_cmp_mag (a, b) != MP_LT) {
  ------------------
  |  |   86|   608k|#define MP_LT        -1   /* less than */
  ------------------
  |  Branch (467:9): [True: 601k, False: 7.23k]
  ------------------
  468|       |      /* Copy the sign from the first */
  469|   601k|      c->sign = sa;
  470|       |      /* The first has a larger or equal magnitude */
  471|   601k|      res = s_mp_sub (a, b, c);
  472|   601k|    } else {
  473|       |      /* The result has the *opposite* sign from */
  474|       |      /* the first number. */
  475|  7.23k|      c->sign = (sa == MP_ZPOS) ? MP_NEG : MP_ZPOS;
  ------------------
  |  |   90|  7.23k|#define MP_ZPOS       0   /* positive integer */
  ------------------
                    c->sign = (sa == MP_ZPOS) ? MP_NEG : MP_ZPOS;
  ------------------
  |  |   91|  7.23k|#define MP_NEG        1   /* negative */
  ------------------
                    c->sign = (sa == MP_ZPOS) ? MP_NEG : MP_ZPOS;
  ------------------
  |  |   90|  7.23k|#define MP_ZPOS       0   /* positive integer */
  ------------------
  |  Branch (475:17): [True: 7.23k, False: 0]
  ------------------
  476|       |      /* The second has a larger magnitude */
  477|  7.23k|      res = s_mp_sub (b, a, c);
  478|  7.23k|    }
  479|   608k|  }
  480|   608k|  return res;
  481|   608k|}
bignum.c:mp_mul:
  486|  37.2k|{
  487|  37.2k|  int     res, neg;
  488|  37.2k|  neg = (a->sign == b->sign) ? MP_ZPOS : MP_NEG;
  ------------------
  |  |   90|  37.2k|#define MP_ZPOS       0   /* positive integer */
  ------------------
                neg = (a->sign == b->sign) ? MP_ZPOS : MP_NEG;
  ------------------
  |  |   91|  37.2k|#define MP_NEG        1   /* negative */
  ------------------
  |  Branch (488:9): [True: 37.2k, False: 0]
  ------------------
  489|       |
  490|       |  /* use Toom-Cook? */
  491|       |#ifdef BN_MP_TOOM_MUL_C
  492|       |  if (MIN (a->used, b->used) >= TOOM_MUL_CUTOFF) {
  493|       |    res = mp_toom_mul(a, b, c);
  494|       |  } else
  495|       |#endif
  496|       |#ifdef BN_MP_KARATSUBA_MUL_C
  497|       |  /* use Karatsuba? */
  498|       |  if (MIN (a->used, b->used) >= KARATSUBA_MUL_CUTOFF) {
  499|       |    res = mp_karatsuba_mul (a, b, c);
  500|       |  } else
  501|       |#endif
  502|  37.2k|  {
  503|       |    /* can we use the fast multiplier?
  504|       |     *
  505|       |     * The fast multiplier can be used if the output will
  506|       |     * have less than MP_WARRAY digits and the number of
  507|       |     * digits won't affect carry propagation
  508|       |     */
  509|       |#ifdef BN_FAST_S_MP_MUL_DIGS_C
  510|       |    int     digs = a->used + b->used + 1;
  511|       |
  512|       |    if ((digs < MP_WARRAY) &&
  513|       |        MIN(a->used, b->used) <=
  514|       |        (1 << ((CHAR_BIT * sizeof (mp_word)) - (2 * DIGIT_BIT)))) {
  515|       |      res = fast_s_mp_mul_digs (a, b, c, digs);
  516|       |    } else
  517|       |#endif
  518|  37.2k|#ifdef BN_S_MP_MUL_DIGS_C
  519|  37.2k|      res = s_mp_mul (a, b, c); /* uses s_mp_mul_digs */
  ------------------
  |  |  131|  37.2k|#define s_mp_mul(a, b, c) s_mp_mul_digs(a, b, c, (a)->used + (b)->used + 1)
  ------------------
  520|       |#else
  521|       |#error mp_mul could fail
  522|       |      res = MP_VAL;
  523|       |#endif
  524|       |
  525|  37.2k|  }
  526|  37.2k|  c->sign = (c->used > 0) ? neg : MP_ZPOS;
  ------------------
  |  |   90|  38.1k|#define MP_ZPOS       0   /* positive integer */
  ------------------
  |  Branch (526:13): [True: 36.3k, False: 915]
  ------------------
  527|  37.2k|  return res;
  528|  37.2k|}
bignum.c:s_mp_mul_digs:
 2334|   293k|{
 2335|   293k|  mp_int  t;
 2336|   293k|  int     res, pa, pb, ix, iy;
 2337|   293k|  mp_digit u;
 2338|   293k|  mp_word r;
 2339|   293k|  mp_digit tmpx, *tmpt, *tmpy;
 2340|       |
 2341|       |#ifdef BN_FAST_S_MP_MUL_DIGS_C
 2342|       |  /* can we use the fast multiplier? */
 2343|       |  if (((digs) < MP_WARRAY) &&
 2344|       |      MIN (a->used, b->used) <
 2345|       |          (1 << ((CHAR_BIT * sizeof (mp_word)) - (2 * DIGIT_BIT)))) {
 2346|       |    return fast_s_mp_mul_digs (a, b, c, digs);
 2347|       |  }
 2348|       |#endif
 2349|       |
 2350|   293k|  if ((res = mp_init_size (&t, digs)) != MP_OKAY) {
  ------------------
  |  |   93|   293k|#define MP_OKAY       0   /* ok result */
  ------------------
  |  Branch (2350:7): [True: 0, False: 293k]
  ------------------
 2351|      0|    return res;
 2352|      0|  }
 2353|   293k|  t.used = digs;
 2354|       |
 2355|       |  /* compute the digits of the product directly */
 2356|   293k|  pa = a->used;
 2357|  4.15M|  for (ix = 0; ix < pa; ix++) {
  ------------------
  |  Branch (2357:16): [True: 3.85M, False: 293k]
  ------------------
 2358|       |    /* set the carry to zero */
 2359|  3.85M|    u = 0;
 2360|       |
 2361|       |    /* limit ourselves to making digs digits of output */
 2362|  3.85M|    pb = MIN (b->used, digs - ix);
  ------------------
  |  |  468|  3.85M|#define MIN(a, b) ((a) < (b) ? (a) : (b))
  |  |  ------------------
  |  |  |  Branch (468:20): [True: 765k, False: 3.09M]
  |  |  ------------------
  ------------------
 2363|       |
 2364|       |    /* setup some aliases */
 2365|       |    /* copy of the digit from a used within the nested loop */
 2366|  3.85M|    tmpx = a->dp[ix];
 2367|       |
 2368|       |    /* an alias for the destination shifted ix places */
 2369|  3.85M|    tmpt = t.dp + ix;
 2370|       |
 2371|       |    /* an alias for the digits of b */
 2372|  3.85M|    tmpy = b->dp;
 2373|       |
 2374|       |    /* compute the columns of the output and propagate the carry */
 2375|  42.1M|    for (iy = 0; iy < pb; iy++) {
  ------------------
  |  Branch (2375:18): [True: 38.3M, False: 3.85M]
  ------------------
 2376|       |      /* compute the column as a mp_word */
 2377|  38.3M|      r       = ((mp_word)*tmpt) +
 2378|  38.3M|                ((mp_word)tmpx) * ((mp_word)*tmpy++) +
 2379|  38.3M|                ((mp_word) u);
 2380|       |
 2381|       |      /* the new column is the lower part of the result */
 2382|  38.3M|      *tmpt++ = (mp_digit) (r & ((mp_word) MP_MASK));
  ------------------
  |  |   84|  38.3M|#define MP_MASK          ((((mp_digit)1)<<((mp_digit)DIGIT_BIT))-((mp_digit)1))
  |  |  ------------------
  |  |  |  |   68|  38.3M|#define DIGIT_BIT 60
  |  |  ------------------
  ------------------
 2383|       |
 2384|       |      /* get the carry word from the result */
 2385|  38.3M|      u       = (mp_digit) (r >> ((mp_word) DIGIT_BIT));
  ------------------
  |  |   68|  38.3M|#define DIGIT_BIT 60
  ------------------
 2386|  38.3M|    }
 2387|       |    /* set carry if it is placed below digs */
 2388|  3.85M|    if (ix + iy < digs) {
  ------------------
  |  Branch (2388:9): [True: 765k, False: 3.09M]
  ------------------
 2389|   765k|      *tmpt = u;
 2390|   765k|    }
 2391|  3.85M|  }
 2392|       |
 2393|   293k|  mp_clamp (&t);
 2394|   293k|  mp_exch (&t, c);
 2395|       |
 2396|   293k|  mp_clear (&t);
 2397|   293k|  return MP_OKAY;
  ------------------
  |  |   93|   293k|#define MP_OKAY       0   /* ok result */
  ------------------
 2398|   293k|}
bignum.c:mp_init_size:
 2493|   769k|{
 2494|   769k|  int x;
 2495|       |
 2496|       |  /* pad size so there are always extra digits */
 2497|   769k|  size += (MP_PREC * 2) - (size % MP_PREC);
  ------------------
  |  |  110|   769k|      #define MP_PREC                 8      /* default digits of precision */
  ------------------
                size += (MP_PREC * 2) - (size % MP_PREC);
  ------------------
  |  |  110|   769k|      #define MP_PREC                 8      /* default digits of precision */
  ------------------
 2498|       |
 2499|       |  /* alloc mem */
 2500|   769k|  a->dp = OPT_CAST(mp_digit) XMALLOC (sizeof (mp_digit) * size);
  ------------------
  |  |   79|   769k|#define XMALLOC  os_malloc
  |  |  ------------------
  |  |  |  |  505|   769k|#define os_malloc(s) malloc((s))
  |  |  ------------------
  ------------------
 2501|   769k|  if (a->dp == NULL) {
  ------------------
  |  Branch (2501:7): [True: 0, False: 769k]
  ------------------
 2502|      0|    return MP_MEM;
  ------------------
  |  |   94|      0|#define MP_MEM        -2  /* out of mem */
  ------------------
 2503|      0|  }
 2504|       |
 2505|       |  /* set the members */
 2506|   769k|  a->used  = 0;
 2507|   769k|  a->alloc = size;
 2508|   769k|  a->sign  = MP_ZPOS;
  ------------------
  |  |   90|   769k|#define MP_ZPOS       0   /* positive integer */
  ------------------
 2509|       |
 2510|       |  /* zero the digits */
 2511|  28.4M|  for (x = 0; x < size; x++) {
  ------------------
  |  Branch (2511:15): [True: 27.6M, False: 769k]
  ------------------
 2512|  27.6M|      a->dp[x] = 0;
 2513|  27.6M|  }
 2514|       |
 2515|   769k|  return MP_OKAY;
  ------------------
  |  |   93|   769k|#define MP_OKAY       0   /* ok result */
  ------------------
 2516|   769k|}
bignum.c:mp_mod:
  553|    729|{
  554|    729|  mp_int  t;
  555|    729|  int     res;
  556|       |
  557|    729|  if ((res = mp_init (&t)) != MP_OKAY) {
  ------------------
  |  |   93|    729|#define MP_OKAY       0   /* ok result */
  ------------------
  |  Branch (557:7): [True: 0, False: 729]
  ------------------
  558|      0|    return res;
  559|      0|  }
  560|       |
  561|    729|  if ((res = mp_div (a, b, NULL, &t)) != MP_OKAY) {
  ------------------
  |  |   93|    729|#define MP_OKAY       0   /* ok result */
  ------------------
  |  Branch (561:7): [True: 0, False: 729]
  ------------------
  562|      0|    mp_clear (&t);
  563|      0|    return res;
  564|      0|  }
  565|       |
  566|    729|  if (t.sign != b->sign) {
  ------------------
  |  Branch (566:7): [True: 0, False: 729]
  ------------------
  567|      0|    res = mp_add (b, &t, c);
  568|    729|  } else {
  569|    729|    res = MP_OKAY;
  ------------------
  |  |   93|    729|#define MP_OKAY       0   /* ok result */
  ------------------
  570|    729|    mp_exch (&t, c);
  571|    729|  }
  572|       |
  573|    729|  mp_clear (&t);
  574|    729|  return res;
  575|    729|}
bignum.c:mp_div:
 1602|  1.46k|{
 1603|  1.46k|   mp_int ta, tb, tq, q;
 1604|  1.46k|   int    res, n, n2;
 1605|       |
 1606|       |  /* is divisor zero ? */
 1607|  1.46k|  if (mp_iszero (b) == 1) {
  ------------------
  |  |  125|  1.46k|#define mp_iszero(a) (((a)->used == 0) ? MP_YES : MP_NO)
  |  |  ------------------
  |  |  |  |   97|      7|#define MP_YES        1   /* yes response */
  |  |  ------------------
  |  |               #define mp_iszero(a) (((a)->used == 0) ? MP_YES : MP_NO)
  |  |  ------------------
  |  |  |  |   98|  1.45k|#define MP_NO         0   /* no response */
  |  |  ------------------
  |  |  |  Branch (125:23): [True: 7, False: 1.45k]
  |  |  ------------------
  ------------------
  |  Branch (1607:7): [True: 7, False: 1.45k]
  ------------------
 1608|      7|    return MP_VAL;
  ------------------
  |  |   95|      7|#define MP_VAL        -3  /* invalid input */
  ------------------
 1609|      7|  }
 1610|       |
 1611|       |  /* if a < b then q=0, r = a */
 1612|  1.45k|  if (mp_cmp_mag (a, b) == MP_LT) {
  ------------------
  |  |   86|  1.45k|#define MP_LT        -1   /* less than */
  ------------------
  |  Branch (1612:7): [True: 720, False: 738]
  ------------------
 1613|    720|    if (d != NULL) {
  ------------------
  |  Branch (1613:9): [True: 720, False: 0]
  ------------------
 1614|    720|      res = mp_copy (a, d);
 1615|    720|    } else {
 1616|      0|      res = MP_OKAY;
  ------------------
  |  |   93|      0|#define MP_OKAY       0   /* ok result */
  ------------------
 1617|      0|    }
 1618|    720|    if (c != NULL) {
  ------------------
  |  Branch (1618:9): [True: 0, False: 720]
  ------------------
 1619|      0|      mp_zero (c);
 1620|      0|    }
 1621|    720|    return res;
 1622|    720|  }
 1623|       |
 1624|       |  /* init our temps */
 1625|    738|  if ((res = mp_init_multi(&ta, &tb, &tq, &q, NULL)) != MP_OKAY) {
  ------------------
  |  |   93|    738|#define MP_OKAY       0   /* ok result */
  ------------------
  |  Branch (1625:7): [True: 0, False: 738]
  ------------------
 1626|      0|     return res;
 1627|      0|  }
 1628|       |
 1629|       |
 1630|    738|  mp_set(&tq, 1);
 1631|    738|  n = mp_count_bits(a) - mp_count_bits(b);
 1632|    738|  if (((res = mp_abs(a, &ta)) != MP_OKAY) ||
  ------------------
  |  |   93|    738|#define MP_OKAY       0   /* ok result */
  ------------------
  |  Branch (1632:7): [True: 0, False: 738]
  ------------------
 1633|    738|      ((res = mp_abs(b, &tb)) != MP_OKAY) ||
  ------------------
  |  |   93|    738|#define MP_OKAY       0   /* ok result */
  ------------------
  |  Branch (1633:7): [True: 0, False: 738]
  ------------------
 1634|    738|      ((res = mp_mul_2d(&tb, n, &tb)) != MP_OKAY) ||
  ------------------
  |  |   93|    738|#define MP_OKAY       0   /* ok result */
  ------------------
  |  Branch (1634:7): [True: 0, False: 738]
  ------------------
 1635|    738|      ((res = mp_mul_2d(&tq, n, &tq)) != MP_OKAY)) {
  ------------------
  |  |   93|    738|#define MP_OKAY       0   /* ok result */
  ------------------
  |  Branch (1635:7): [True: 0, False: 738]
  ------------------
 1636|      0|      goto LBL_ERR;
 1637|      0|  }
 1638|       |
 1639|   703k|  while (n-- >= 0) {
  ------------------
  |  Branch (1639:10): [True: 702k, False: 738]
  ------------------
 1640|   702k|     if (mp_cmp(&tb, &ta) != MP_GT) {
  ------------------
  |  |   88|   702k|#define MP_GT         1   /* greater than */
  ------------------
  |  Branch (1640:10): [True: 352k, False: 350k]
  ------------------
 1641|   352k|        if (((res = mp_sub(&ta, &tb, &ta)) != MP_OKAY) ||
  ------------------
  |  |   93|   352k|#define MP_OKAY       0   /* ok result */
  ------------------
  |  Branch (1641:13): [True: 0, False: 352k]
  ------------------
 1642|   352k|            ((res = mp_add(&q, &tq, &q)) != MP_OKAY)) {
  ------------------
  |  |   93|   352k|#define MP_OKAY       0   /* ok result */
  ------------------
  |  Branch (1642:13): [True: 0, False: 352k]
  ------------------
 1643|      0|           goto LBL_ERR;
 1644|      0|        }
 1645|   352k|     }
 1646|   702k|     if (((res = mp_div_2d(&tb, 1, &tb, NULL)) != MP_OKAY) ||
  ------------------
  |  |   93|   702k|#define MP_OKAY       0   /* ok result */
  ------------------
  |  Branch (1646:10): [True: 0, False: 702k]
  ------------------
 1647|   702k|         ((res = mp_div_2d(&tq, 1, &tq, NULL)) != MP_OKAY)) {
  ------------------
  |  |   93|   702k|#define MP_OKAY       0   /* ok result */
  ------------------
  |  Branch (1647:10): [True: 0, False: 702k]
  ------------------
 1648|      0|           goto LBL_ERR;
 1649|      0|     }
 1650|   702k|  }
 1651|       |
 1652|       |  /* now q == quotient and ta == remainder */
 1653|    738|  n  = a->sign;
 1654|    738|  n2 = (a->sign == b->sign ? MP_ZPOS : MP_NEG);
  ------------------
  |  |   90|    738|#define MP_ZPOS       0   /* positive integer */
  ------------------
                n2 = (a->sign == b->sign ? MP_ZPOS : MP_NEG);
  ------------------
  |  |   91|      0|#define MP_NEG        1   /* negative */
  ------------------
  |  Branch (1654:9): [True: 738, False: 0]
  ------------------
 1655|    738|  if (c != NULL) {
  ------------------
  |  Branch (1655:7): [True: 729, False: 9]
  ------------------
 1656|    729|     mp_exch(c, &q);
 1657|    729|     c->sign  = (mp_iszero(c) == MP_YES) ? MP_ZPOS : n2;
  ------------------
  |  |  125|    729|#define mp_iszero(a) (((a)->used == 0) ? MP_YES : MP_NO)
  |  |  ------------------
  |  |  |  |   97|      0|#define MP_YES        1   /* yes response */
  |  |  ------------------
  |  |               #define mp_iszero(a) (((a)->used == 0) ? MP_YES : MP_NO)
  |  |  ------------------
  |  |  |  |   98|    729|#define MP_NO         0   /* no response */
  |  |  ------------------
  |  |  |  Branch (125:23): [True: 0, False: 729]
  |  |  ------------------
  ------------------
                   c->sign  = (mp_iszero(c) == MP_YES) ? MP_ZPOS : n2;
  ------------------
  |  |   97|    729|#define MP_YES        1   /* yes response */
  ------------------
                   c->sign  = (mp_iszero(c) == MP_YES) ? MP_ZPOS : n2;
  ------------------
  |  |   90|      0|#define MP_ZPOS       0   /* positive integer */
  ------------------
  |  Branch (1657:17): [True: 0, False: 729]
  ------------------
 1658|    729|  }
 1659|    738|  if (d != NULL) {
  ------------------
  |  Branch (1659:7): [True: 9, False: 729]
  ------------------
 1660|      9|     mp_exch(d, &ta);
 1661|      9|     d->sign = (mp_iszero(d) == MP_YES) ? MP_ZPOS : n;
  ------------------
  |  |  125|      9|#define mp_iszero(a) (((a)->used == 0) ? MP_YES : MP_NO)
  |  |  ------------------
  |  |  |  |   97|      9|#define MP_YES        1   /* yes response */
  |  |  ------------------
  |  |               #define mp_iszero(a) (((a)->used == 0) ? MP_YES : MP_NO)
  |  |  ------------------
  |  |  |  |   98|      0|#define MP_NO         0   /* no response */
  |  |  ------------------
  |  |  |  Branch (125:23): [True: 9, False: 0]
  |  |  ------------------
  ------------------
                   d->sign = (mp_iszero(d) == MP_YES) ? MP_ZPOS : n;
  ------------------
  |  |   97|      9|#define MP_YES        1   /* yes response */
  ------------------
                   d->sign = (mp_iszero(d) == MP_YES) ? MP_ZPOS : n;
  ------------------
  |  |   90|      9|#define MP_ZPOS       0   /* positive integer */
  ------------------
  |  Branch (1661:16): [True: 9, False: 0]
  ------------------
 1662|      9|  }
 1663|    738|LBL_ERR:
 1664|       |   mp_clear_multi(&ta, &tb, &tq, &q, NULL);
 1665|    738|   return res;
 1666|    738|}
bignum.c:mp_init_multi:
 1442|    738|{
 1443|    738|    mp_err res = MP_OKAY;      /* Assume ok until proven otherwise */
  ------------------
  |  |   93|    738|#define MP_OKAY       0   /* ok result */
  ------------------
 1444|    738|    int n = 0;                 /* Number of ok inits */
 1445|    738|    mp_int* cur_arg = mp;
 1446|    738|    va_list args;
 1447|       |
 1448|    738|    va_start(args, mp);        /* init args to next argument from caller */
 1449|  3.69k|    while (cur_arg != NULL) {
  ------------------
  |  Branch (1449:12): [True: 2.95k, False: 738]
  ------------------
 1450|  2.95k|        if (mp_init(cur_arg) != MP_OKAY) {
  ------------------
  |  |   93|  2.95k|#define MP_OKAY       0   /* ok result */
  ------------------
  |  Branch (1450:13): [True: 0, False: 2.95k]
  ------------------
 1451|       |            /* Oops - error! Back-track and mp_clear what we already
 1452|       |               succeeded in init-ing, then return error.
 1453|       |            */
 1454|      0|            va_list clean_args;
 1455|       |
 1456|       |            /* end the current list */
 1457|      0|            va_end(args);
 1458|       |
 1459|       |            /* now start cleaning up */
 1460|      0|            cur_arg = mp;
 1461|      0|            va_start(clean_args, mp);
 1462|      0|            while (n--) {
  ------------------
  |  Branch (1462:20): [True: 0, False: 0]
  ------------------
 1463|      0|                mp_clear(cur_arg);
 1464|      0|                cur_arg = va_arg(clean_args, mp_int*);
 1465|      0|            }
 1466|      0|            va_end(clean_args);
 1467|      0|            return MP_MEM;
  ------------------
  |  |   94|      0|#define MP_MEM        -2  /* out of mem */
  ------------------
 1468|      0|        }
 1469|  2.95k|        n++;
 1470|  2.95k|        cur_arg = va_arg(args, mp_int*);
 1471|  2.95k|    }
 1472|    738|    va_end(args);
 1473|    738|    return res;                /* Assumed ok, if error flagged above. */
 1474|    738|}
bignum.c:mp_set:
 1318|  8.70k|{
 1319|  8.70k|  mp_zero (a);
 1320|  8.70k|  a->dp[0] = b & MP_MASK;
  ------------------
  |  |   84|  8.70k|#define MP_MASK          ((((mp_digit)1)<<((mp_digit)DIGIT_BIT))-((mp_digit)1))
  |  |  ------------------
  |  |  |  |   68|  8.70k|#define DIGIT_BIT 60
  |  |  ------------------
  ------------------
 1321|  8.70k|  a->used  = (a->dp[0] != 0) ? 1 : 0;
  ------------------
  |  Branch (1321:14): [True: 8.70k, False: 0]
  ------------------
 1322|  8.70k|}
bignum.c:mp_abs:
 1298|  1.47k|{
 1299|  1.47k|  int     res;
 1300|       |
 1301|       |  /* copy a to b */
 1302|  1.47k|  if (a != b) {
  ------------------
  |  Branch (1302:7): [True: 1.47k, False: 0]
  ------------------
 1303|  1.47k|     if ((res = mp_copy (a, b)) != MP_OKAY) {
  ------------------
  |  |   93|  1.47k|#define MP_OKAY       0   /* ok result */
  ------------------
  |  Branch (1303:10): [True: 0, False: 1.47k]
  ------------------
 1304|      0|       return res;
 1305|      0|     }
 1306|  1.47k|  }
 1307|       |
 1308|       |  /* force the sign of b to positive */
 1309|  1.47k|  b->sign = MP_ZPOS;
  ------------------
  |  |   90|  1.47k|#define MP_ZPOS       0   /* positive integer */
  ------------------
 1310|       |
 1311|  1.47k|  return MP_OKAY;
  ------------------
  |  |   93|  1.47k|#define MP_OKAY       0   /* ok result */
  ------------------
 1312|  1.47k|}
bignum.c:mp_clear_multi:
 1480|    738|{
 1481|    738|    mp_int* next_mp = mp;
 1482|    738|    va_list args;
 1483|    738|    va_start(args, mp);
 1484|  3.69k|    while (next_mp != NULL) {
  ------------------
  |  Branch (1484:12): [True: 2.95k, False: 738]
  ------------------
 1485|  2.95k|        mp_clear(next_mp);
 1486|  2.95k|        next_mp = va_arg(args, mp_int*);
 1487|  2.95k|    }
 1488|       |    va_end(args);
 1489|    738|}
bignum.c:mp_exptmod:
  584|    736|{
  585|    736|  int dr;
  586|       |
  587|       |  /* modulus P must be positive */
  588|    736|  if (P->sign == MP_NEG) {
  ------------------
  |  |   91|    736|#define MP_NEG        1   /* negative */
  ------------------
  |  Branch (588:7): [True: 0, False: 736]
  ------------------
  589|      0|     return MP_VAL;
  ------------------
  |  |   95|      0|#define MP_VAL        -3  /* invalid input */
  ------------------
  590|      0|  }
  591|       |
  592|       |  /* if exponent X is negative we have to recurse */
  593|    736|  if (X->sign == MP_NEG) {
  ------------------
  |  |   91|    736|#define MP_NEG        1   /* negative */
  ------------------
  |  Branch (593:7): [True: 0, False: 736]
  ------------------
  594|      0|#ifdef LTM_NO_NEG_EXP
  595|      0|        return MP_VAL;
  ------------------
  |  |   95|      0|#define MP_VAL        -3  /* invalid input */
  ------------------
  596|       |#else /* LTM_NO_NEG_EXP */
  597|       |#ifdef BN_MP_INVMOD_C
  598|       |     mp_int tmpG, tmpX;
  599|       |     int err;
  600|       |
  601|       |     /* first compute 1/G mod P */
  602|       |     if ((err = mp_init(&tmpG)) != MP_OKAY) {
  603|       |        return err;
  604|       |     }
  605|       |     if ((err = mp_invmod(G, P, &tmpG)) != MP_OKAY) {
  606|       |        mp_clear(&tmpG);
  607|       |        return err;
  608|       |     }
  609|       |
  610|       |     /* now get |X| */
  611|       |     if ((err = mp_init(&tmpX)) != MP_OKAY) {
  612|       |        mp_clear(&tmpG);
  613|       |        return err;
  614|       |     }
  615|       |     if ((err = mp_abs(X, &tmpX)) != MP_OKAY) {
  616|       |        mp_clear_multi(&tmpG, &tmpX, NULL);
  617|       |        return err;
  618|       |     }
  619|       |
  620|       |     /* and now compute (1/G)**|X| instead of G**X [X < 0] */
  621|       |     err = mp_exptmod(&tmpG, &tmpX, P, Y);
  622|       |     mp_clear_multi(&tmpG, &tmpX, NULL);
  623|       |     return err;
  624|       |#else
  625|       |#error mp_exptmod would always fail
  626|       |     /* no invmod */
  627|       |     return MP_VAL;
  628|       |#endif
  629|       |#endif /* LTM_NO_NEG_EXP */
  630|      0|  }
  631|       |
  632|       |/* modified diminished radix reduction */
  633|       |#if defined(BN_MP_REDUCE_IS_2K_L_C) && defined(BN_MP_REDUCE_2K_L_C) && defined(BN_S_MP_EXPTMOD_C)
  634|       |  if (mp_reduce_is_2k_l(P) == MP_YES) {
  635|       |     return s_mp_exptmod(G, X, P, Y, 1);
  636|       |  }
  637|       |#endif
  638|       |
  639|       |#ifdef BN_MP_DR_IS_MODULUS_C
  640|       |  /* is it a DR modulus? */
  641|       |  dr = mp_dr_is_modulus(P);
  642|       |#else
  643|       |  /* default to no */
  644|    736|  dr = 0;
  645|    736|#endif
  646|       |
  647|       |#ifdef BN_MP_REDUCE_IS_2K_C
  648|       |  /* if not, is it a unrestricted DR modulus? */
  649|       |  if (dr == 0) {
  650|       |     dr = mp_reduce_is_2k(P) << 1;
  651|       |  }
  652|       |#endif
  653|       |
  654|       |  /* if the modulus is odd or dr != 0 use the montgomery method */
  655|       |#ifdef BN_MP_EXPTMOD_FAST_C
  656|       |  if (mp_isodd (P) == 1 || dr !=  0) {
  657|       |    return mp_exptmod_fast (G, X, P, Y, dr);
  658|       |  } else {
  659|       |#endif
  660|    736|#ifdef BN_S_MP_EXPTMOD_C
  661|       |    /* otherwise use the generic Barrett reduction technique */
  662|    736|    return s_mp_exptmod (G, X, P, Y, 0);
  663|       |#else
  664|       |#error mp_exptmod could fail
  665|       |    /* no exptmod for evens */
  666|       |    return MP_VAL;
  667|       |#endif
  668|       |#ifdef BN_MP_EXPTMOD_FAST_C
  669|       |  }
  670|       |#endif
  671|      0|  if (dr == 0) {
  ------------------
  |  Branch (671:7): [True: 0, False: 0]
  ------------------
  672|       |    /* avoid compiler warnings about possibly unused variable */
  673|      0|  }
  674|      0|}
bignum.c:s_mp_exptmod:
 1876|    736|{
 1877|    736|  mp_int  M[TAB_SIZE], res, mu;
 1878|    736|  mp_digit buf;
 1879|    736|  int     err, bitbuf, bitcpy, bitcnt, mode, digidx, x, y, winsize;
 1880|    736|  int (*redux)(mp_int*,mp_int*,mp_int*);
 1881|       |
 1882|       |  /* find window size */
 1883|    736|  x = mp_count_bits (X);
 1884|    736|  if (x <= 7) {
  ------------------
  |  Branch (1884:7): [True: 95, False: 641]
  ------------------
 1885|     95|    winsize = 2;
 1886|    641|  } else if (x <= 36) {
  ------------------
  |  Branch (1886:14): [True: 380, False: 261]
  ------------------
 1887|    380|    winsize = 3;
 1888|    380|  } else if (x <= 140) {
  ------------------
  |  Branch (1888:14): [True: 1, False: 260]
  ------------------
 1889|      1|    winsize = 4;
 1890|    260|  } else if (x <= 450) {
  ------------------
  |  Branch (1890:14): [True: 32, False: 228]
  ------------------
 1891|     32|    winsize = 5;
 1892|    228|  } else if (x <= 1303) {
  ------------------
  |  Branch (1892:14): [True: 228, False: 0]
  ------------------
 1893|    228|    winsize = 6;
 1894|    228|  } else if (x <= 3529) {
  ------------------
  |  Branch (1894:14): [True: 0, False: 0]
  ------------------
 1895|      0|    winsize = 7;
 1896|      0|  } else {
 1897|      0|    winsize = 8;
 1898|      0|  }
 1899|       |
 1900|    736|#ifdef MP_LOW_MEM
 1901|    736|    if (winsize > 5) {
  ------------------
  |  Branch (1901:9): [True: 228, False: 508]
  ------------------
 1902|    228|       winsize = 5;
 1903|    228|    }
 1904|    736|#endif
 1905|       |
 1906|       |  /* init M array */
 1907|       |  /* init first cell */
 1908|    736|  if ((err = mp_init(&M[1])) != MP_OKAY) {
  ------------------
  |  |   93|    736|#define MP_OKAY       0   /* ok result */
  ------------------
  |  Branch (1908:7): [True: 0, False: 736]
  ------------------
 1909|      0|     return err;
 1910|      0|  }
 1911|       |
 1912|       |  /* now init the second half of the array */
 1913|  6.61k|  for (x = 1<<(winsize-1); x < (1 << winsize); x++) {
  ------------------
  |  Branch (1913:28): [True: 5.87k, False: 736]
  ------------------
 1914|  5.87k|    if ((err = mp_init(&M[x])) != MP_OKAY) {
  ------------------
  |  |   93|  5.87k|#define MP_OKAY       0   /* ok result */
  ------------------
  |  Branch (1914:9): [True: 0, False: 5.87k]
  ------------------
 1915|      0|      for (y = 1<<(winsize-1); y < x; y++) {
  ------------------
  |  Branch (1915:32): [True: 0, False: 0]
  ------------------
 1916|      0|        mp_clear (&M[y]);
 1917|      0|      }
 1918|      0|      mp_clear(&M[1]);
 1919|      0|      return err;
 1920|      0|    }
 1921|  5.87k|  }
 1922|       |
 1923|       |  /* create mu, used for Barrett reduction */
 1924|    736|  if ((err = mp_init (&mu)) != MP_OKAY) {
  ------------------
  |  |   93|    736|#define MP_OKAY       0   /* ok result */
  ------------------
  |  Branch (1924:7): [True: 0, False: 736]
  ------------------
 1925|      0|    goto LBL_M;
 1926|      0|  }
 1927|       |
 1928|    736|  if (redmode == 0) {
  ------------------
  |  Branch (1928:7): [True: 736, False: 0]
  ------------------
 1929|    736|     if ((err = mp_reduce_setup (&mu, P)) != MP_OKAY) {
  ------------------
  |  |   93|    736|#define MP_OKAY       0   /* ok result */
  ------------------
  |  Branch (1929:10): [True: 7, False: 729]
  ------------------
 1930|      7|        goto LBL_MU;
 1931|      7|     }
 1932|    729|     redux = mp_reduce;
 1933|    729|  } else {
 1934|      0|     if ((err = mp_reduce_2k_setup_l (P, &mu)) != MP_OKAY) {
  ------------------
  |  |   93|      0|#define MP_OKAY       0   /* ok result */
  ------------------
  |  Branch (1934:10): [True: 0, False: 0]
  ------------------
 1935|      0|        goto LBL_MU;
 1936|      0|     }
 1937|      0|     redux = mp_reduce_2k_l;
 1938|      0|  }
 1939|       |
 1940|       |  /* create M table
 1941|       |   *
 1942|       |   * The M table contains powers of the base,
 1943|       |   * e.g. M[x] = G**x mod P
 1944|       |   *
 1945|       |   * The first half of the table is not
 1946|       |   * computed though accept for M[0] and M[1]
 1947|       |   */
 1948|    729|  if ((err = mp_mod (G, P, &M[1])) != MP_OKAY) {
  ------------------
  |  |   93|    729|#define MP_OKAY       0   /* ok result */
  ------------------
  |  Branch (1948:7): [True: 0, False: 729]
  ------------------
 1949|      0|    goto LBL_MU;
 1950|      0|  }
 1951|       |
 1952|       |  /* compute the value at M[1<<(winsize-1)] by squaring
 1953|       |   * M[1] (winsize-1) times
 1954|       |   */
 1955|    729|  if ((err = mp_copy (&M[1], &M[1 << (winsize - 1)])) != MP_OKAY) {
  ------------------
  |  |   93|    729|#define MP_OKAY       0   /* ok result */
  ------------------
  |  Branch (1955:7): [True: 0, False: 729]
  ------------------
 1956|      0|    goto LBL_MU;
 1957|      0|  }
 1958|       |
 1959|  2.61k|  for (x = 0; x < (winsize - 1); x++) {
  ------------------
  |  Branch (1959:15): [True: 1.89k, False: 729]
  ------------------
 1960|       |    /* square it */
 1961|  1.89k|    if ((err = mp_sqr (&M[1 << (winsize - 1)],
  ------------------
  |  Branch (1961:9): [True: 0, False: 1.89k]
  ------------------
 1962|  1.89k|                       &M[1 << (winsize - 1)])) != MP_OKAY) {
  ------------------
  |  |   93|  1.89k|#define MP_OKAY       0   /* ok result */
  ------------------
 1963|      0|      goto LBL_MU;
 1964|      0|    }
 1965|       |
 1966|       |    /* reduce modulo P */
 1967|  1.89k|    if ((err = redux (&M[1 << (winsize - 1)], P, &mu)) != MP_OKAY) {
  ------------------
  |  |   93|  1.89k|#define MP_OKAY       0   /* ok result */
  ------------------
  |  Branch (1967:9): [True: 0, False: 1.89k]
  ------------------
 1968|      0|      goto LBL_MU;
 1969|      0|    }
 1970|  1.89k|  }
 1971|       |
 1972|       |  /* create upper table, that is M[x] = M[x-1] * M[1] (mod P)
 1973|       |   * for x = (2**(winsize - 1) + 1) to (2**winsize - 1)
 1974|       |   */
 1975|  5.86k|  for (x = (1 << (winsize - 1)) + 1; x < (1 << winsize); x++) {
  ------------------
  |  Branch (1975:38): [True: 5.13k, False: 729]
  ------------------
 1976|  5.13k|    if ((err = mp_mul (&M[x - 1], &M[1], &M[x])) != MP_OKAY) {
  ------------------
  |  |   93|  5.13k|#define MP_OKAY       0   /* ok result */
  ------------------
  |  Branch (1976:9): [True: 0, False: 5.13k]
  ------------------
 1977|      0|      goto LBL_MU;
 1978|      0|    }
 1979|  5.13k|    if ((err = redux (&M[x], P, &mu)) != MP_OKAY) {
  ------------------
  |  |   93|  5.13k|#define MP_OKAY       0   /* ok result */
  ------------------
  |  Branch (1979:9): [True: 0, False: 5.13k]
  ------------------
 1980|      0|      goto LBL_MU;
 1981|      0|    }
 1982|  5.13k|  }
 1983|       |
 1984|       |  /* setup result */
 1985|    729|  if ((err = mp_init (&res)) != MP_OKAY) {
  ------------------
  |  |   93|    729|#define MP_OKAY       0   /* ok result */
  ------------------
  |  Branch (1985:7): [True: 0, False: 729]
  ------------------
 1986|      0|    goto LBL_MU;
 1987|      0|  }
 1988|    729|  mp_set (&res, 1);
 1989|       |
 1990|       |  /* set initial mode and bit cnt */
 1991|    729|  mode   = 0;
 1992|    729|  bitcnt = 1;
 1993|    729|  buf    = 0;
 1994|    729|  digidx = X->used - 1;
 1995|    729|  bitcpy = 0;
 1996|    729|  bitbuf = 0;
 1997|       |
 1998|   242k|  for (;;) {
 1999|       |    /* grab next digit as required */
 2000|   242k|    if (--bitcnt == 0) {
  ------------------
  |  Branch (2000:9): [True: 4.75k, False: 237k]
  ------------------
 2001|       |      /* if digidx == -1 we are out of digits */
 2002|  4.75k|      if (digidx == -1) {
  ------------------
  |  Branch (2002:11): [True: 729, False: 4.02k]
  ------------------
 2003|    729|        break;
 2004|    729|      }
 2005|       |      /* read next digit and reset the bitcnt */
 2006|  4.02k|      buf    = X->dp[digidx--];
 2007|  4.02k|      bitcnt = (int) DIGIT_BIT;
  ------------------
  |  |   68|  4.02k|#define DIGIT_BIT 60
  ------------------
 2008|  4.02k|    }
 2009|       |
 2010|       |    /* grab the next msb from the exponent */
 2011|   241k|    y     = (buf >> (mp_digit)(DIGIT_BIT - 1)) & 1;
  ------------------
  |  |   68|   241k|#define DIGIT_BIT 60
  ------------------
 2012|   241k|    buf <<= (mp_digit)1;
 2013|       |
 2014|       |    /* if the bit is zero and mode == 0 then we ignore it
 2015|       |     * These represent the leading zero bits before the first 1 bit
 2016|       |     * in the exponent.  Technically this opt is not required but it
 2017|       |     * does lower the # of trivial squaring/reductions used
 2018|       |     */
 2019|   241k|    if (mode == 0 && y == 0) {
  ------------------
  |  Branch (2019:9): [True: 24.8k, False: 216k]
  |  Branch (2019:22): [True: 24.1k, False: 720]
  ------------------
 2020|  24.1k|      continue;
 2021|  24.1k|    }
 2022|       |
 2023|       |    /* if the bit is zero and mode == 1 then we square */
 2024|   217k|    if (mode == 1 && y == 0) {
  ------------------
  |  Branch (2024:9): [True: 92.7k, False: 124k]
  |  Branch (2024:22): [True: 61.4k, False: 31.2k]
  ------------------
 2025|  61.4k|      if ((err = mp_sqr (&res, &res)) != MP_OKAY) {
  ------------------
  |  |   93|  61.4k|#define MP_OKAY       0   /* ok result */
  ------------------
  |  Branch (2025:11): [True: 0, False: 61.4k]
  ------------------
 2026|      0|        goto LBL_RES;
 2027|      0|      }
 2028|  61.4k|      if ((err = redux (&res, P, &mu)) != MP_OKAY) {
  ------------------
  |  |   93|  61.4k|#define MP_OKAY       0   /* ok result */
  ------------------
  |  Branch (2028:11): [True: 0, False: 61.4k]
  ------------------
 2029|      0|        goto LBL_RES;
 2030|      0|      }
 2031|  61.4k|      continue;
 2032|  61.4k|    }
 2033|       |
 2034|       |    /* else we add it to the window */
 2035|   155k|    bitbuf |= (y << (winsize - ++bitcpy));
 2036|   155k|    mode    = 2;
 2037|       |
 2038|   155k|    if (bitcpy == winsize) {
  ------------------
  |  Branch (2038:9): [True: 31.6k, False: 124k]
  ------------------
 2039|       |      /* ok window is filled so square as required and multiply  */
 2040|       |      /* square first */
 2041|   187k|      for (x = 0; x < winsize; x++) {
  ------------------
  |  Branch (2041:19): [True: 155k, False: 31.6k]
  ------------------
 2042|   155k|        if ((err = mp_sqr (&res, &res)) != MP_OKAY) {
  ------------------
  |  |   93|   155k|#define MP_OKAY       0   /* ok result */
  ------------------
  |  Branch (2042:13): [True: 0, False: 155k]
  ------------------
 2043|      0|          goto LBL_RES;
 2044|      0|        }
 2045|   155k|        if ((err = redux (&res, P, &mu)) != MP_OKAY) {
  ------------------
  |  |   93|   155k|#define MP_OKAY       0   /* ok result */
  ------------------
  |  Branch (2045:13): [True: 0, False: 155k]
  ------------------
 2046|      0|          goto LBL_RES;
 2047|      0|        }
 2048|   155k|      }
 2049|       |
 2050|       |      /* then multiply */
 2051|  31.6k|      if ((err = mp_mul (&res, &M[bitbuf], &res)) != MP_OKAY) {
  ------------------
  |  |   93|  31.6k|#define MP_OKAY       0   /* ok result */
  ------------------
  |  Branch (2051:11): [True: 0, False: 31.6k]
  ------------------
 2052|      0|        goto LBL_RES;
 2053|      0|      }
 2054|  31.6k|      if ((err = redux (&res, P, &mu)) != MP_OKAY) {
  ------------------
  |  |   93|  31.6k|#define MP_OKAY       0   /* ok result */
  ------------------
  |  Branch (2054:11): [True: 0, False: 31.6k]
  ------------------
 2055|      0|        goto LBL_RES;
 2056|      0|      }
 2057|       |
 2058|       |      /* empty window and reset */
 2059|  31.6k|      bitcpy = 0;
 2060|  31.6k|      bitbuf = 0;
 2061|  31.6k|      mode   = 1;
 2062|  31.6k|    }
 2063|   155k|  }
 2064|       |
 2065|       |  /* if bits remain then square/multiply */
 2066|    729|  if (mode == 2 && bitcpy > 0) {
  ------------------
  |  Branch (2066:7): [True: 334, False: 395]
  |  Branch (2066:20): [True: 334, False: 0]
  ------------------
 2067|       |    /* square then multiply if the bit is set */
 2068|    827|    for (x = 0; x < bitcpy; x++) {
  ------------------
  |  Branch (2068:17): [True: 493, False: 334]
  ------------------
 2069|    493|      if ((err = mp_sqr (&res, &res)) != MP_OKAY) {
  ------------------
  |  |   93|    493|#define MP_OKAY       0   /* ok result */
  ------------------
  |  Branch (2069:11): [True: 0, False: 493]
  ------------------
 2070|      0|        goto LBL_RES;
 2071|      0|      }
 2072|    493|      if ((err = redux (&res, P, &mu)) != MP_OKAY) {
  ------------------
  |  |   93|    493|#define MP_OKAY       0   /* ok result */
  ------------------
  |  Branch (2072:11): [True: 0, False: 493]
  ------------------
 2073|      0|        goto LBL_RES;
 2074|      0|      }
 2075|       |
 2076|    493|      bitbuf <<= 1;
 2077|    493|      if ((bitbuf & (1 << winsize)) != 0) {
  ------------------
  |  Branch (2077:11): [True: 430, False: 63]
  ------------------
 2078|       |        /* then multiply */
 2079|    430|        if ((err = mp_mul (&res, &M[1], &res)) != MP_OKAY) {
  ------------------
  |  |   93|    430|#define MP_OKAY       0   /* ok result */
  ------------------
  |  Branch (2079:13): [True: 0, False: 430]
  ------------------
 2080|      0|          goto LBL_RES;
 2081|      0|        }
 2082|    430|        if ((err = redux (&res, P, &mu)) != MP_OKAY) {
  ------------------
  |  |   93|    430|#define MP_OKAY       0   /* ok result */
  ------------------
  |  Branch (2082:13): [True: 0, False: 430]
  ------------------
 2083|      0|          goto LBL_RES;
 2084|      0|        }
 2085|    430|      }
 2086|    493|    }
 2087|    334|  }
 2088|       |
 2089|    729|  mp_exch (&res, Y);
 2090|    729|  err = MP_OKAY;
  ------------------
  |  |   93|    729|#define MP_OKAY       0   /* ok result */
  ------------------
 2091|    729|LBL_RES:mp_clear (&res);
 2092|    736|LBL_MU:mp_clear (&mu);
 2093|    736|LBL_M:
 2094|    736|  mp_clear(&M[1]);
 2095|  6.61k|  for (x = 1<<(winsize-1); x < (1 << winsize); x++) {
  ------------------
  |  Branch (2095:28): [True: 5.87k, False: 736]
  ------------------
 2096|  5.87k|    mp_clear (&M[x]);
 2097|  5.87k|  }
 2098|    736|  return err;
 2099|    736|}
bignum.c:mp_reduce_setup:
 2236|    736|{
 2237|    736|  int     res;
 2238|       |
 2239|    736|  if ((res = mp_2expt (a, b->used * 2 * DIGIT_BIT)) != MP_OKAY) {
  ------------------
  |  |   68|    736|#define DIGIT_BIT 60
  ------------------
                if ((res = mp_2expt (a, b->used * 2 * DIGIT_BIT)) != MP_OKAY) {
  ------------------
  |  |   93|    736|#define MP_OKAY       0   /* ok result */
  ------------------
  |  Branch (2239:7): [True: 0, False: 736]
  ------------------
 2240|      0|    return res;
 2241|      0|  }
 2242|    736|  return mp_div (a, b, a, NULL);
 2243|    736|}
bignum.c:mp_2expt:
 2211|    736|{
 2212|    736|  int     res;
 2213|       |
 2214|       |  /* zero a as per default */
 2215|    736|  mp_zero (a);
 2216|       |
 2217|       |  /* grow a to accommodate the single bit */
 2218|    736|  if ((res = mp_grow (a, b / DIGIT_BIT + 1)) != MP_OKAY) {
  ------------------
  |  |   68|    736|#define DIGIT_BIT 60
  ------------------
                if ((res = mp_grow (a, b / DIGIT_BIT + 1)) != MP_OKAY) {
  ------------------
  |  |   93|    736|#define MP_OKAY       0   /* ok result */
  ------------------
  |  Branch (2218:7): [True: 0, False: 736]
  ------------------
 2219|      0|    return res;
 2220|      0|  }
 2221|       |
 2222|       |  /* set the used count of where the bit will go */
 2223|    736|  a->used = b / DIGIT_BIT + 1;
  ------------------
  |  |   68|    736|#define DIGIT_BIT 60
  ------------------
 2224|       |
 2225|       |  /* put the single bit in its place */
 2226|    736|  a->dp[b / DIGIT_BIT] = ((mp_digit)1) << (b % DIGIT_BIT);
  ------------------
  |  |   68|    736|#define DIGIT_BIT 60
  ------------------
                a->dp[b / DIGIT_BIT] = ((mp_digit)1) << (b % DIGIT_BIT);
  ------------------
  |  |   68|    736|#define DIGIT_BIT 60
  ------------------
 2227|       |
 2228|    736|  return MP_OKAY;
  ------------------
  |  |   93|    736|#define MP_OKAY       0   /* ok result */
  ------------------
 2229|    736|}
bignum.c:mp_reduce:
 2251|   256k|{
 2252|   256k|  mp_int  q;
 2253|   256k|  int     res, um = m->used;
 2254|       |
 2255|       |  /* q = x */
 2256|   256k|  if ((res = mp_init_copy (&q, x)) != MP_OKAY) {
  ------------------
  |  |   93|   256k|#define MP_OKAY       0   /* ok result */
  ------------------
  |  Branch (2256:7): [True: 0, False: 256k]
  ------------------
 2257|      0|    return res;
 2258|      0|  }
 2259|       |
 2260|       |  /* q1 = x / b**(k-1)  */
 2261|   256k|  mp_rshd (&q, um - 1);
 2262|       |
 2263|       |  /* according to HAC this optimization is ok */
 2264|   256k|  if (((unsigned long) um) > (((mp_digit)1) << (DIGIT_BIT - 1))) {
  ------------------
  |  |   68|   256k|#define DIGIT_BIT 60
  ------------------
  |  Branch (2264:7): [True: 0, False: 256k]
  ------------------
 2265|      0|    if ((res = mp_mul (&q, mu, &q)) != MP_OKAY) {
  ------------------
  |  |   93|      0|#define MP_OKAY       0   /* ok result */
  ------------------
  |  Branch (2265:9): [True: 0, False: 0]
  ------------------
 2266|      0|      goto CLEANUP;
 2267|      0|    }
 2268|   256k|  } else {
 2269|   256k|#ifdef BN_S_MP_MUL_HIGH_DIGS_C
 2270|   256k|    if ((res = s_mp_mul_high_digs (&q, mu, &q, um)) != MP_OKAY) {
  ------------------
  |  |   93|   256k|#define MP_OKAY       0   /* ok result */
  ------------------
  |  Branch (2270:9): [True: 0, False: 256k]
  ------------------
 2271|      0|      goto CLEANUP;
 2272|      0|    }
 2273|       |#elif defined(BN_FAST_S_MP_MUL_HIGH_DIGS_C)
 2274|       |    if ((res = fast_s_mp_mul_high_digs (&q, mu, &q, um)) != MP_OKAY) {
 2275|       |      goto CLEANUP;
 2276|       |    }
 2277|       |#else
 2278|       |    {
 2279|       |#error mp_reduce would always fail
 2280|       |      res = MP_VAL;
 2281|       |      goto CLEANUP;
 2282|       |    }
 2283|       |#endif
 2284|   256k|  }
 2285|       |
 2286|       |  /* q3 = q2 / b**(k+1) */
 2287|   256k|  mp_rshd (&q, um + 1);
 2288|       |
 2289|       |  /* x = x mod b**(k+1), quick (no division) */
 2290|   256k|  if ((res = mp_mod_2d (x, DIGIT_BIT * (um + 1), x)) != MP_OKAY) {
  ------------------
  |  |   68|   256k|#define DIGIT_BIT 60
  ------------------
                if ((res = mp_mod_2d (x, DIGIT_BIT * (um + 1), x)) != MP_OKAY) {
  ------------------
  |  |   93|   256k|#define MP_OKAY       0   /* ok result */
  ------------------
  |  Branch (2290:7): [True: 0, False: 256k]
  ------------------
 2291|      0|    goto CLEANUP;
 2292|      0|  }
 2293|       |
 2294|       |  /* q = q * m mod b**(k+1), quick (no division) */
 2295|   256k|  if ((res = s_mp_mul_digs (&q, m, &q, um + 1)) != MP_OKAY) {
  ------------------
  |  |   93|   256k|#define MP_OKAY       0   /* ok result */
  ------------------
  |  Branch (2295:7): [True: 0, False: 256k]
  ------------------
 2296|      0|    goto CLEANUP;
 2297|      0|  }
 2298|       |
 2299|       |  /* x = x - q */
 2300|   256k|  if ((res = mp_sub (x, &q, x)) != MP_OKAY) {
  ------------------
  |  |   93|   256k|#define MP_OKAY       0   /* ok result */
  ------------------
  |  Branch (2300:7): [True: 0, False: 256k]
  ------------------
 2301|      0|    goto CLEANUP;
 2302|      0|  }
 2303|       |
 2304|       |  /* If x < 0, add b**(k+1) to it */
 2305|   256k|  if (mp_cmp_d (x, 0) == MP_LT) {
  ------------------
  |  |   86|   256k|#define MP_LT        -1   /* less than */
  ------------------
  |  Branch (2305:7): [True: 7.23k, False: 249k]
  ------------------
 2306|  7.23k|    mp_set (&q, 1);
 2307|  7.23k|    if ((res = mp_lshd (&q, um + 1)) != MP_OKAY) {
  ------------------
  |  |   93|  7.23k|#define MP_OKAY       0   /* ok result */
  ------------------
  |  Branch (2307:9): [True: 0, False: 7.23k]
  ------------------
 2308|      0|      goto CLEANUP;
 2309|      0|    }
 2310|  7.23k|    if ((res = mp_add (x, &q, x)) != MP_OKAY) {
  ------------------
  |  |   93|  7.23k|#define MP_OKAY       0   /* ok result */
  ------------------
  |  Branch (2310:9): [True: 0, False: 7.23k]
  ------------------
 2311|      0|      goto CLEANUP;
 2312|      0|    }
 2313|  7.23k|  }
 2314|       |
 2315|       |  /* Back off if it's too big */
 2316|  1.05M|  while (mp_cmp (x, m) != MP_LT) {
  ------------------
  |  |   86|  1.05M|#define MP_LT        -1   /* less than */
  ------------------
  |  Branch (2316:10): [True: 803k, False: 256k]
  ------------------
 2317|   803k|    if ((res = s_mp_sub (x, m, x)) != MP_OKAY) {
  ------------------
  |  |   93|   803k|#define MP_OKAY       0   /* ok result */
  ------------------
  |  Branch (2317:9): [True: 0, False: 803k]
  ------------------
 2318|      0|      goto CLEANUP;
 2319|      0|    }
 2320|   803k|  }
 2321|       |
 2322|   256k|CLEANUP:
 2323|   256k|  mp_clear (&q);
 2324|       |
 2325|   256k|  return res;
 2326|   256k|}
bignum.c:s_mp_mul_high_digs:
 2587|   256k|{
 2588|   256k|  mp_int  t;
 2589|   256k|  int     res, pa, pb, ix, iy;
 2590|   256k|  mp_digit u;
 2591|   256k|  mp_word r;
 2592|   256k|  mp_digit tmpx, *tmpt, *tmpy;
 2593|       |
 2594|       |  /* can we use the fast multiplier? */
 2595|       |#ifdef BN_FAST_S_MP_MUL_HIGH_DIGS_C
 2596|       |  if (((a->used + b->used + 1) < MP_WARRAY)
 2597|       |      && MIN (a->used, b->used) < (1 << ((CHAR_BIT * sizeof (mp_word)) - (2 * DIGIT_BIT)))) {
 2598|       |    return fast_s_mp_mul_high_digs (a, b, c, digs);
 2599|       |  }
 2600|       |#endif
 2601|       |
 2602|   256k|  if ((res = mp_init_size (&t, a->used + b->used + 1)) != MP_OKAY) {
  ------------------
  |  |   93|   256k|#define MP_OKAY       0   /* ok result */
  ------------------
  |  Branch (2602:7): [True: 0, False: 256k]
  ------------------
 2603|      0|    return res;
 2604|      0|  }
 2605|   256k|  t.used = a->used + b->used + 1;
 2606|       |
 2607|   256k|  pa = a->used;
 2608|   256k|  pb = b->used;
 2609|  3.67M|  for (ix = 0; ix < pa; ix++) {
  ------------------
  |  Branch (2609:16): [True: 3.41M, False: 256k]
  ------------------
 2610|       |    /* clear the carry */
 2611|  3.41M|    u = 0;
 2612|       |
 2613|       |    /* left hand side of A[ix] * B[iy] */
 2614|  3.41M|    tmpx = a->dp[ix];
 2615|       |
 2616|       |    /* alias to the address of where the digits will be stored */
 2617|  3.41M|    tmpt = &(t.dp[digs]);
 2618|       |
 2619|       |    /* alias for where to read the right hand side from */
 2620|  3.41M|    tmpy = b->dp + (digs - ix);
 2621|       |
 2622|  33.3M|    for (iy = digs - ix; iy < pb; iy++) {
  ------------------
  |  Branch (2622:26): [True: 29.9M, False: 3.41M]
  ------------------
 2623|       |      /* calculate the double precision result */
 2624|  29.9M|      r       = ((mp_word)*tmpt) +
 2625|  29.9M|                ((mp_word)tmpx) * ((mp_word)*tmpy++) +
 2626|  29.9M|                ((mp_word) u);
 2627|       |
 2628|       |      /* get the lower part */
 2629|  29.9M|      *tmpt++ = (mp_digit) (r & ((mp_word) MP_MASK));
  ------------------
  |  |   84|  29.9M|#define MP_MASK          ((((mp_digit)1)<<((mp_digit)DIGIT_BIT))-((mp_digit)1))
  |  |  ------------------
  |  |  |  |   68|  29.9M|#define DIGIT_BIT 60
  |  |  ------------------
  ------------------
 2630|       |
 2631|       |      /* carry the carry */
 2632|  29.9M|      u       = (mp_digit) (r >> ((mp_word) DIGIT_BIT));
  ------------------
  |  |   68|  29.9M|#define DIGIT_BIT 60
  ------------------
 2633|  29.9M|    }
 2634|  3.41M|    *tmpt = u;
 2635|  3.41M|  }
 2636|   256k|  mp_clamp (&t);
 2637|   256k|  mp_exch (&t, c);
 2638|   256k|  mp_clear (&t);
 2639|   256k|  return MP_OKAY;
  ------------------
  |  |   93|   256k|#define MP_OKAY       0   /* ok result */
  ------------------
 2640|   256k|}
bignum.c:mp_sqr:
 2104|   219k|{
 2105|   219k|  int     res;
 2106|       |
 2107|       |#ifdef BN_MP_TOOM_SQR_C
 2108|       |  /* use Toom-Cook? */
 2109|       |  if (a->used >= TOOM_SQR_CUTOFF) {
 2110|       |    res = mp_toom_sqr(a, b);
 2111|       |  /* Karatsuba? */
 2112|       |  } else
 2113|       |#endif
 2114|       |#ifdef BN_MP_KARATSUBA_SQR_C
 2115|       |if (a->used >= KARATSUBA_SQR_CUTOFF) {
 2116|       |    res = mp_karatsuba_sqr (a, b);
 2117|       |  } else
 2118|       |#endif
 2119|   219k|  {
 2120|       |#ifdef BN_FAST_S_MP_SQR_C
 2121|       |    /* can we use the fast comba multiplier? */
 2122|       |    if ((a->used * 2 + 1) < MP_WARRAY &&
 2123|       |         a->used <
 2124|       |         (1 << (sizeof(mp_word) * CHAR_BIT - 2*DIGIT_BIT - 1))) {
 2125|       |      res = fast_s_mp_sqr (a, b);
 2126|       |    } else
 2127|       |#endif
 2128|   219k|#ifdef BN_S_MP_SQR_C
 2129|   219k|      res = s_mp_sqr (a, b);
 2130|       |#else
 2131|       |#error mp_sqr could fail
 2132|       |      res = MP_VAL;
 2133|       |#endif
 2134|   219k|  }
 2135|   219k|  b->sign = MP_ZPOS;
  ------------------
  |  |   90|   219k|#define MP_ZPOS       0   /* positive integer */
  ------------------
 2136|   219k|  return res;
 2137|   219k|}
bignum.c:s_mp_sqr:
 2521|   219k|{
 2522|   219k|  mp_int  t;
 2523|   219k|  int     res, ix, iy, pa;
 2524|   219k|  mp_word r;
 2525|   219k|  mp_digit u, tmpx, *tmpt;
 2526|       |
 2527|   219k|  pa = a->used;
 2528|   219k|  if ((res = mp_init_size (&t, 2*pa + 1)) != MP_OKAY) {
  ------------------
  |  |   93|   219k|#define MP_OKAY       0   /* ok result */
  ------------------
  |  Branch (2528:7): [True: 0, False: 219k]
  ------------------
 2529|      0|    return res;
 2530|      0|  }
 2531|       |
 2532|       |  /* default used is maximum possible size */
 2533|   219k|  t.used = 2*pa + 1;
 2534|       |
 2535|  3.26M|  for (ix = 0; ix < pa; ix++) {
  ------------------
  |  Branch (2535:16): [True: 3.04M, False: 219k]
  ------------------
 2536|       |    /* first calculate the digit at 2*ix */
 2537|       |    /* calculate double precision result */
 2538|  3.04M|    r = ((mp_word) t.dp[2*ix]) +
 2539|  3.04M|        ((mp_word)a->dp[ix])*((mp_word)a->dp[ix]);
 2540|       |
 2541|       |    /* store lower part in result */
 2542|  3.04M|    t.dp[ix+ix] = (mp_digit) (r & ((mp_word) MP_MASK));
  ------------------
  |  |   84|  3.04M|#define MP_MASK          ((((mp_digit)1)<<((mp_digit)DIGIT_BIT))-((mp_digit)1))
  |  |  ------------------
  |  |  |  |   68|  3.04M|#define DIGIT_BIT 60
  |  |  ------------------
  ------------------
 2543|       |
 2544|       |    /* get the carry */
 2545|  3.04M|    u           = (mp_digit)(r >> ((mp_word) DIGIT_BIT));
  ------------------
  |  |   68|  3.04M|#define DIGIT_BIT 60
  ------------------
 2546|       |
 2547|       |    /* left hand side of A[ix] * A[iy] */
 2548|  3.04M|    tmpx        = a->dp[ix];
 2549|       |
 2550|       |    /* alias for where to store the results */
 2551|  3.04M|    tmpt        = t.dp + (2*ix + 1);
 2552|       |
 2553|  26.8M|    for (iy = ix + 1; iy < pa; iy++) {
  ------------------
  |  Branch (2553:23): [True: 23.7M, False: 3.04M]
  ------------------
 2554|       |      /* first calculate the product */
 2555|  23.7M|      r       = ((mp_word)tmpx) * ((mp_word)a->dp[iy]);
 2556|       |
 2557|       |      /* now calculate the double precision result, note we use
 2558|       |       * addition instead of *2 since it's easier to optimize
 2559|       |       */
 2560|  23.7M|      r       = ((mp_word) *tmpt) + r + r + ((mp_word) u);
 2561|       |
 2562|       |      /* store lower part */
 2563|  23.7M|      *tmpt++ = (mp_digit) (r & ((mp_word) MP_MASK));
  ------------------
  |  |   84|  23.7M|#define MP_MASK          ((((mp_digit)1)<<((mp_digit)DIGIT_BIT))-((mp_digit)1))
  |  |  ------------------
  |  |  |  |   68|  23.7M|#define DIGIT_BIT 60
  |  |  ------------------
  ------------------
 2564|       |
 2565|       |      /* get carry */
 2566|  23.7M|      u       = (mp_digit)(r >> ((mp_word) DIGIT_BIT));
  ------------------
  |  |   68|  23.7M|#define DIGIT_BIT 60
  ------------------
 2567|  23.7M|    }
 2568|       |    /* propagate upwards */
 2569|  5.70M|    while (u != ((mp_digit) 0)) {
  ------------------
  |  Branch (2569:12): [True: 2.65M, False: 3.04M]
  ------------------
 2570|  2.65M|      r       = ((mp_word) *tmpt) + ((mp_word) u);
 2571|  2.65M|      *tmpt++ = (mp_digit) (r & ((mp_word) MP_MASK));
  ------------------
  |  |   84|  2.65M|#define MP_MASK          ((((mp_digit)1)<<((mp_digit)DIGIT_BIT))-((mp_digit)1))
  |  |  ------------------
  |  |  |  |   68|  2.65M|#define DIGIT_BIT 60
  |  |  ------------------
  ------------------
 2572|  2.65M|      u       = (mp_digit)(r >> ((mp_word) DIGIT_BIT));
  ------------------
  |  |   68|  2.65M|#define DIGIT_BIT 60
  ------------------
 2573|  2.65M|    }
 2574|  3.04M|  }
 2575|       |
 2576|   219k|  mp_clamp (&t);
 2577|   219k|  mp_exch (&t, b);
 2578|   219k|  mp_clear (&t);
 2579|   219k|  return MP_OKAY;
  ------------------
  |  |   93|   219k|#define MP_OKAY       0   /* ok result */
  ------------------
 2580|   219k|}

pkcs1_encrypt:
   84|    337|{
   85|    337|	size_t modlen;
   86|       |
   87|    337|	modlen = crypto_rsa_get_modulus_len(key);
   88|       |
   89|    337|	if (pkcs1_generate_encryption_block(block_type, modlen, in, inlen,
  ------------------
  |  Branch (89:6): [True: 5, False: 332]
  ------------------
   90|    337|					    out, outlen) < 0)
   91|      5|		return -1;
   92|       |
   93|    332|	return crypto_rsa_exptmod(out, modlen, out, outlen, key, use_private);
   94|    337|}
pkcs1_decrypt_public_key:
  137|    300|{
  138|    300|	size_t len;
  139|    300|	u8 *pos;
  140|       |
  141|    300|	len = *plain_len;
  142|    300|	if (crypto_rsa_exptmod(crypt, crypt_len, plain, &len, key, 0) < 0)
  ------------------
  |  Branch (142:6): [True: 59, False: 241]
  ------------------
  143|     59|		return -1;
  144|       |
  145|       |	/*
  146|       |	 * PKCS #1 v1.5, 8.1:
  147|       |	 *
  148|       |	 * EB = 00 || BT || PS || 00 || D
  149|       |	 * BT = 00 or 01
  150|       |	 * PS = k-3-||D|| times (00 if BT=00) or (FF if BT=01)
  151|       |	 * k = length of modulus in octets
  152|       |	 *
  153|       |	 * Based on 10.1.3, "The block type shall be 01" for a signature.
  154|       |	 */
  155|       |
  156|    241|	if (len < 3 + 8 + 16 /* min hash len */ ||
  ------------------
  |  Branch (156:6): [True: 34, False: 207]
  ------------------
  157|    207|	    plain[0] != 0x00 || plain[1] != 0x01) {
  ------------------
  |  Branch (157:6): [True: 39, False: 168]
  |  Branch (157:26): [True: 25, False: 143]
  ------------------
  158|     98|		wpa_printf(MSG_INFO, "LibTomCrypt: Invalid signature EB "
  159|     98|			   "structure");
  160|     98|		wpa_hexdump_key(MSG_DEBUG, "Signature EB", plain, len);
  161|     98|		return -1;
  162|     98|	}
  163|       |
  164|    143|	pos = plain + 3;
  165|       |	/* BT = 01 */
  166|    143|	if (plain[2] != 0xff) {
  ------------------
  |  Branch (166:6): [True: 3, False: 140]
  ------------------
  167|      3|		wpa_printf(MSG_INFO, "LibTomCrypt: Invalid signature "
  168|      3|			   "PS (BT=01)");
  169|      3|		wpa_hexdump_key(MSG_DEBUG, "Signature EB", plain, len);
  170|      3|		return -1;
  171|      3|	}
  172|  7.14k|	while (pos < plain + len && *pos == 0xff)
  ------------------
  |  Branch (172:9): [True: 7.14k, False: 1]
  |  Branch (172:30): [True: 7.00k, False: 139]
  ------------------
  173|  7.00k|		pos++;
  174|       |
  175|    140|	if (pos - plain - 2 < 8) {
  ------------------
  |  Branch (175:6): [True: 9, False: 131]
  ------------------
  176|       |		/* PKCS #1 v1.5, 8.1: At least eight octets long PS */
  177|      9|		wpa_printf(MSG_INFO, "LibTomCrypt: Too short signature "
  178|      9|			   "padding");
  179|      9|		wpa_hexdump_key(MSG_DEBUG, "Signature EB", plain, len);
  180|      9|		return -1;
  181|      9|	}
  182|       |
  183|    131|	if (pos + 16 /* min hash len */ >= plain + len || *pos != 0x00) {
  ------------------
  |  Branch (183:6): [True: 3, False: 128]
  |  Branch (183:52): [True: 6, False: 122]
  ------------------
  184|      9|		wpa_printf(MSG_INFO, "LibTomCrypt: Invalid signature EB "
  185|      9|			   "structure (2)");
  186|      9|		wpa_hexdump_key(MSG_DEBUG, "Signature EB", plain, len);
  187|      9|		return -1;
  188|      9|	}
  189|    122|	pos++;
  190|    122|	len -= pos - plain;
  191|       |
  192|       |	/* Strip PKCS #1 header */
  193|    122|	os_memmove(plain, pos, len);
  ------------------
  |  |  526|    122|#define os_memmove(d, s, n) memmove((d), (s), (n))
  ------------------
  194|    122|	*plain_len = len;
  195|       |
  196|    122|	return 0;
  197|    131|}
pkcs1.c:pkcs1_generate_encryption_block:
   21|    337|{
   22|    337|	size_t ps_len;
   23|    337|	u8 *pos;
   24|       |
   25|       |	/*
   26|       |	 * PKCS #1 v1.5, 8.1:
   27|       |	 *
   28|       |	 * EB = 00 || BT || PS || 00 || D
   29|       |	 * BT = 00 or 01 for private-key operation; 02 for public-key operation
   30|       |	 * PS = k-3-||D||; at least eight octets
   31|       |	 * (BT=0: PS=0x00, BT=1: PS=0xff, BT=2: PS=pseudorandom non-zero)
   32|       |	 * k = length of modulus in octets (modlen)
   33|       |	 */
   34|       |
   35|    337|	if (modlen < 12 || modlen > *outlen || inlen > modlen - 11) {
  ------------------
  |  Branch (35:6): [True: 4, False: 333]
  |  Branch (35:21): [True: 0, False: 333]
  |  Branch (35:41): [True: 1, False: 332]
  ------------------
   36|      5|		wpa_printf(MSG_DEBUG, "PKCS #1: %s - Invalid buffer "
   37|      5|			   "lengths (modlen=%lu outlen=%lu inlen=%lu)",
   38|      5|			   __func__, (unsigned long) modlen,
   39|      5|			   (unsigned long) *outlen,
   40|      5|			   (unsigned long) inlen);
   41|      5|		return -1;
   42|      5|	}
   43|       |
   44|    332|	pos = out;
   45|    332|	*pos++ = 0x00;
   46|    332|	*pos++ = block_type; /* BT */
   47|    332|	ps_len = modlen - inlen - 3;
   48|    332|	switch (block_type) {
   49|      0|	case 0:
  ------------------
  |  Branch (49:2): [True: 0, False: 332]
  ------------------
   50|      0|		os_memset(pos, 0x00, ps_len);
  ------------------
  |  |  529|      0|#define os_memset(s, c, n) memset(s, c, n)
  ------------------
   51|      0|		pos += ps_len;
   52|      0|		break;
   53|      0|	case 1:
  ------------------
  |  Branch (53:2): [True: 0, False: 332]
  ------------------
   54|      0|		os_memset(pos, 0xff, ps_len);
  ------------------
  |  |  529|      0|#define os_memset(s, c, n) memset(s, c, n)
  ------------------
   55|      0|		pos += ps_len;
   56|      0|		break;
   57|    332|	case 2:
  ------------------
  |  Branch (57:2): [True: 332, False: 0]
  ------------------
   58|    332|		if (os_get_random(pos, ps_len) < 0) {
  ------------------
  |  Branch (58:7): [True: 0, False: 332]
  ------------------
   59|      0|			wpa_printf(MSG_DEBUG, "PKCS #1: %s - Failed to get "
   60|      0|				   "random data for PS", __func__);
   61|      0|			return -1;
   62|      0|		}
   63|  24.1k|		while (ps_len--) {
  ------------------
  |  Branch (63:10): [True: 23.8k, False: 332]
  ------------------
   64|  23.8k|			if (*pos == 0x00)
  ------------------
  |  Branch (64:8): [True: 332, False: 23.4k]
  ------------------
   65|    332|				*pos = 0x01;
   66|  23.8k|			pos++;
   67|  23.8k|		}
   68|    332|		break;
   69|      0|	default:
  ------------------
  |  Branch (69:2): [True: 0, False: 332]
  ------------------
   70|      0|		wpa_printf(MSG_DEBUG, "PKCS #1: %s - Unsupported block type "
   71|      0|			   "%d", __func__, block_type);
   72|      0|		return -1;
   73|    332|	}
   74|    332|	*pos++ = 0x00;
   75|    332|	os_memcpy(pos, in, inlen); /* D */
  ------------------
  |  |  523|    332|#define os_memcpy(d, s, n) memcpy((d), (s), (n))
  ------------------
   76|       |
   77|    332|	return 0;
   78|    332|}

crypto_rsa_import_public_key:
   62|    788|{
   63|    788|	struct crypto_rsa_key *key;
   64|    788|	struct asn1_hdr hdr;
   65|    788|	const u8 *pos, *end;
   66|       |
   67|    788|	key = os_zalloc(sizeof(*key));
   68|    788|	if (key == NULL)
  ------------------
  |  Branch (68:6): [True: 0, False: 788]
  ------------------
   69|      0|		return NULL;
   70|       |
   71|    788|	key->n = bignum_init();
   72|    788|	key->e = bignum_init();
   73|    788|	if (key->n == NULL || key->e == NULL) {
  ------------------
  |  Branch (73:6): [True: 0, False: 788]
  |  Branch (73:24): [True: 0, False: 788]
  ------------------
   74|      0|		crypto_rsa_free(key);
   75|      0|		return NULL;
   76|      0|	}
   77|       |
   78|       |	/*
   79|       |	 * PKCS #1, 7.1:
   80|       |	 * RSAPublicKey ::= SEQUENCE {
   81|       |	 *     modulus INTEGER, -- n
   82|       |	 *     publicExponent INTEGER -- e
   83|       |	 * }
   84|       |	 */
   85|       |
   86|    788|	if (asn1_get_next(buf, len, &hdr) < 0 || !asn1_is_sequence(&hdr)) {
  ------------------
  |  Branch (86:6): [True: 3, False: 785]
  |  Branch (86:43): [True: 8, False: 777]
  ------------------
   87|     11|		asn1_unexpected(&hdr, "RSA: Expected SEQUENCE (public key)");
   88|     11|		goto error;
   89|     11|	}
   90|    777|	pos = hdr.payload;
   91|    777|	end = pos + hdr.length;
   92|       |
   93|    777|	pos = crypto_rsa_parse_integer(pos, end, key->n);
   94|    777|	pos = crypto_rsa_parse_integer(pos, end, key->e);
   95|       |
   96|    777|	if (pos == NULL)
  ------------------
  |  Branch (96:6): [True: 26, False: 751]
  ------------------
   97|     26|		goto error;
   98|       |
   99|    751|	if (pos != end) {
  ------------------
  |  Branch (99:6): [True: 2, False: 749]
  ------------------
  100|      2|		wpa_hexdump(MSG_DEBUG,
  101|      2|			    "RSA: Extra data in public key SEQUENCE",
  102|      2|			    pos, end - pos);
  103|      2|		goto error;
  104|      2|	}
  105|       |
  106|    749|	return key;
  107|       |
  108|     39|error:
  109|     39|	crypto_rsa_free(key);
  110|       |	return NULL;
  111|    751|}
crypto_rsa_get_modulus_len:
  241|    926|{
  242|    926|	return bignum_get_unsigned_bin_len(key->n);
  243|    926|}
crypto_rsa_exptmod:
  258|    632|{
  259|    632|	struct bignum *tmp, *a = NULL, *b = NULL;
  260|    632|	int ret = -1;
  261|    632|	size_t modlen;
  262|       |
  263|    632|	if (use_private && !key->private_key)
  ------------------
  |  Branch (263:6): [True: 0, False: 632]
  |  Branch (263:21): [True: 0, False: 0]
  ------------------
  264|      0|		return -1;
  265|       |
  266|    632|	tmp = bignum_init();
  267|    632|	if (tmp == NULL)
  ------------------
  |  Branch (267:6): [True: 0, False: 632]
  ------------------
  268|      0|		return -1;
  269|       |
  270|    632|	if (bignum_set_unsigned_bin(tmp, in, inlen) < 0)
  ------------------
  |  Branch (270:6): [True: 0, False: 632]
  ------------------
  271|      0|		goto error;
  272|    632|	if (bignum_cmp(key->n, tmp) < 0) {
  ------------------
  |  Branch (272:6): [True: 40, False: 592]
  ------------------
  273|       |		/* Too large input value for the RSA key modulus */
  274|     40|		goto error;
  275|     40|	}
  276|       |
  277|    592|	if (use_private) {
  ------------------
  |  Branch (277:6): [True: 0, False: 592]
  ------------------
  278|       |		/*
  279|       |		 * Decrypt (or sign) using Chinese remainder theorem to speed
  280|       |		 * up calculation. This is equivalent to tmp = tmp^d mod n
  281|       |		 * (which would require more CPU to calculate directly).
  282|       |		 *
  283|       |		 * dmp1 = (1/e) mod (p-1)
  284|       |		 * dmq1 = (1/e) mod (q-1)
  285|       |		 * iqmp = (1/q) mod p, where p > q
  286|       |		 * m1 = c^dmp1 mod p
  287|       |		 * m2 = c^dmq1 mod q
  288|       |		 * h = q^-1 (m1 - m2) mod p
  289|       |		 * m = m2 + hq
  290|       |		 */
  291|      0|		a = bignum_init();
  292|      0|		b = bignum_init();
  293|      0|		if (a == NULL || b == NULL)
  ------------------
  |  Branch (293:7): [True: 0, False: 0]
  |  Branch (293:20): [True: 0, False: 0]
  ------------------
  294|      0|			goto error;
  295|       |
  296|       |		/* a = tmp^dmp1 mod p */
  297|      0|		if (bignum_exptmod(tmp, key->dmp1, key->p, a) < 0)
  ------------------
  |  Branch (297:7): [True: 0, False: 0]
  ------------------
  298|      0|			goto error;
  299|       |
  300|       |		/* b = tmp^dmq1 mod q */
  301|      0|		if (bignum_exptmod(tmp, key->dmq1, key->q, b) < 0)
  ------------------
  |  Branch (301:7): [True: 0, False: 0]
  ------------------
  302|      0|			goto error;
  303|       |
  304|       |		/* tmp = (a - b) * (1/q mod p) (mod p) */
  305|      0|		if (bignum_sub(a, b, tmp) < 0 ||
  ------------------
  |  Branch (305:7): [True: 0, False: 0]
  ------------------
  306|      0|		    bignum_mulmod(tmp, key->iqmp, key->p, tmp) < 0)
  ------------------
  |  Branch (306:7): [True: 0, False: 0]
  ------------------
  307|      0|			goto error;
  308|       |
  309|       |		/* tmp = b + q * tmp */
  310|      0|		if (bignum_mul(tmp, key->q, tmp) < 0 ||
  ------------------
  |  Branch (310:7): [True: 0, False: 0]
  ------------------
  311|      0|		    bignum_add(tmp, b, tmp) < 0)
  ------------------
  |  Branch (311:7): [True: 0, False: 0]
  ------------------
  312|      0|			goto error;
  313|    592|	} else {
  314|       |		/* Encrypt (or verify signature) */
  315|       |		/* tmp = tmp^e mod N */
  316|    592|		if (bignum_exptmod(tmp, key->e, key->n, tmp) < 0)
  ------------------
  |  Branch (316:7): [True: 3, False: 589]
  ------------------
  317|      3|			goto error;
  318|    592|	}
  319|       |
  320|    589|	modlen = crypto_rsa_get_modulus_len(key);
  321|    589|	if (modlen > *outlen) {
  ------------------
  |  Branch (321:6): [True: 16, False: 573]
  ------------------
  322|     16|		*outlen = modlen;
  323|     16|		goto error;
  324|     16|	}
  325|       |
  326|    573|	if (bignum_get_unsigned_bin_len(tmp) > modlen)
  ------------------
  |  Branch (326:6): [True: 0, False: 573]
  ------------------
  327|      0|		goto error; /* should never happen */
  328|       |
  329|    573|	*outlen = modlen;
  330|    573|	os_memset(out, 0, modlen);
  ------------------
  |  |  529|    573|#define os_memset(s, c, n) memset(s, c, n)
  ------------------
  331|    573|	if (bignum_get_unsigned_bin(
  ------------------
  |  Branch (331:6): [True: 0, False: 573]
  ------------------
  332|    573|		    tmp, out +
  333|    573|		    (modlen - bignum_get_unsigned_bin_len(tmp)), NULL) < 0)
  334|      0|		goto error;
  335|       |
  336|    573|	ret = 0;
  337|       |
  338|    632|error:
  339|    632|	bignum_deinit(tmp);
  340|    632|	bignum_deinit(a);
  341|    632|	bignum_deinit(b);
  342|    632|	return ret;
  343|    573|}
crypto_rsa_free:
  354|  4.60k|{
  355|  4.60k|	if (key) {
  ------------------
  |  Branch (355:6): [True: 788, False: 3.81k]
  ------------------
  356|    788|		bignum_deinit(key->n);
  357|    788|		bignum_deinit(key->e);
  358|    788|		bignum_deinit(key->d);
  359|    788|		bignum_deinit(key->p);
  360|    788|		bignum_deinit(key->q);
  361|    788|		bignum_deinit(key->dmp1);
  362|    788|		bignum_deinit(key->dmq1);
  363|    788|		bignum_deinit(key->iqmp);
  364|    788|		os_free(key);
  ------------------
  |  |  511|    788|#define os_free(p) free((p))
  ------------------
  365|    788|	}
  366|  4.60k|}
rsa.c:crypto_rsa_parse_integer:
   33|  1.55k|{
   34|  1.55k|	struct asn1_hdr hdr;
   35|       |
   36|  1.55k|	if (pos == NULL)
  ------------------
  |  Branch (36:6): [True: 9, False: 1.54k]
  ------------------
   37|      9|		return NULL;
   38|       |
   39|  1.54k|	if (asn1_get_next(pos, end - pos, &hdr) < 0 ||
  ------------------
  |  Branch (39:6): [True: 9, False: 1.53k]
  ------------------
   40|  1.53k|	    !asn1_is_integer(&hdr)) {
  ------------------
  |  Branch (40:6): [True: 17, False: 1.51k]
  ------------------
   41|     26|		asn1_unexpected(&hdr, "RSA: Expected INTEGER");
   42|     26|		return NULL;
   43|     26|	}
   44|       |
   45|  1.51k|	if (bignum_set_unsigned_bin(num, hdr.payload, hdr.length) < 0) {
  ------------------
  |  Branch (45:6): [True: 0, False: 1.51k]
  ------------------
   46|      0|		wpa_printf(MSG_DEBUG, "RSA: Failed to parse INTEGER");
   47|      0|		return NULL;
   48|      0|	}
   49|       |
   50|  1.51k|	return hdr.payload + hdr.length;
   51|  1.51k|}

tls_alert:
   26|  21.8k|{
   27|  21.8k|	conn->alert_level = level;
   28|  21.8k|	conn->alert_description = description;
   29|  21.8k|}
tlsv1_client_free_dh:
   33|  3.63k|{
   34|  3.63k|	os_free(conn->dh_p);
  ------------------
  |  |  511|  3.63k|#define os_free(p) free((p))
  ------------------
   35|  3.63k|	os_free(conn->dh_g);
  ------------------
  |  |  511|  3.63k|#define os_free(p) free((p))
  ------------------
   36|  3.63k|	os_free(conn->dh_ys);
  ------------------
  |  |  511|  3.63k|#define os_free(p) free((p))
  ------------------
   37|       |	conn->dh_p = conn->dh_g = conn->dh_ys = NULL;
   38|  3.63k|}
tls_client_highest_ver:
   42|  3.02k|{
   43|  3.02k|	u16 tls_version = TLS_VERSION;
  ------------------
  |  |   18|  3.02k|#define TLS_VERSION TLS_VERSION_1_2
  |  |  ------------------
  |  |  |  |   16|  3.02k|#define TLS_VERSION_1_2 0x0303 /* TLSv1.2 */
  |  |  ------------------
  ------------------
   44|       |
   45|       |	/* Pick the highest locally enabled TLS version */
   46|  3.02k|#ifdef CONFIG_TLSV12
   47|  3.02k|	if ((conn->flags & TLS_CONN_DISABLE_TLSv1_2) &&
  ------------------
  |  |  110|  3.02k|#define TLS_CONN_DISABLE_TLSv1_2 BIT(6)
  |  |  ------------------
  |  |  |  |  458|  3.02k|#define BIT(x) (1U << (x))
  |  |  ------------------
  ------------------
  |  Branch (47:6): [True: 0, False: 3.02k]
  ------------------
   48|      0|	    tls_version == TLS_VERSION_1_2)
  ------------------
  |  |   16|      0|#define TLS_VERSION_1_2 0x0303 /* TLSv1.2 */
  ------------------
  |  Branch (48:6): [True: 0, False: 0]
  ------------------
   49|      0|		tls_version = TLS_VERSION_1_1;
  ------------------
  |  |   15|      0|#define TLS_VERSION_1_1 0x0302 /* TLSv1.1 */
  ------------------
   50|  3.02k|#endif /* CONFIG_TLSV12 */
   51|  3.02k|#ifdef CONFIG_TLSV11
   52|  3.02k|	if ((conn->flags & TLS_CONN_DISABLE_TLSv1_1) &&
  ------------------
  |  |  109|  3.02k|#define TLS_CONN_DISABLE_TLSv1_1 BIT(5)
  |  |  ------------------
  |  |  |  |  458|  3.02k|#define BIT(x) (1U << (x))
  |  |  ------------------
  ------------------
  |  Branch (52:6): [True: 0, False: 3.02k]
  ------------------
   53|      0|	    tls_version == TLS_VERSION_1_1)
  ------------------
  |  |   15|      0|#define TLS_VERSION_1_1 0x0302 /* TLSv1.1 */
  ------------------
  |  Branch (53:6): [True: 0, False: 0]
  ------------------
   54|      0|		tls_version = TLS_VERSION_1;
  ------------------
  |  |   14|      0|#define TLS_VERSION_1 0x0301 /* TLSv1 */
  ------------------
   55|  3.02k|#endif /* CONFIG_TLSV11 */
   56|  3.02k|	if ((conn->flags & TLS_CONN_DISABLE_TLSv1_0) &&
  ------------------
  |  |  112|  3.02k|#define TLS_CONN_DISABLE_TLSv1_0 BIT(8)
  |  |  ------------------
  |  |  |  |  458|  3.02k|#define BIT(x) (1U << (x))
  |  |  ------------------
  ------------------
  |  Branch (56:6): [True: 0, False: 3.02k]
  ------------------
   57|      0|	    tls_version == TLS_VERSION_1)
  ------------------
  |  |   14|      0|#define TLS_VERSION_1 0x0301 /* TLSv1 */
  ------------------
  |  Branch (57:6): [True: 0, False: 0]
  ------------------
   58|      0|		return 0;
   59|       |
   60|  3.02k|	return tls_version;
   61|  3.02k|}
tls_derive_pre_master_secret:
   66|    340|{
   67|    340|	WPA_PUT_BE16(pre_master_secret, tls_client_highest_ver(conn));
   68|    340|	if (os_get_random(pre_master_secret + 2,
  ------------------
  |  Branch (68:6): [True: 0, False: 340]
  ------------------
   69|    340|			  TLS_PRE_MASTER_SECRET_LEN - 2))
  ------------------
  |  |   27|    340|#define TLS_PRE_MASTER_SECRET_LEN 48
  ------------------
   70|      0|		return -1;
   71|    340|	return 0;
   72|    340|}
tls_derive_keys:
   77|    410|{
   78|    410|	u8 seed[2 * TLS_RANDOM_LEN];
   79|    410|	u8 key_block[TLS_MAX_KEY_BLOCK_LEN];
   80|    410|	u8 *pos;
   81|    410|	size_t key_block_len;
   82|       |
   83|    410|	if (pre_master_secret) {
  ------------------
  |  Branch (83:6): [True: 410, False: 0]
  ------------------
   84|    410|		wpa_hexdump_key(MSG_MSGDUMP, "TLSv1: pre_master_secret",
   85|    410|				pre_master_secret, pre_master_secret_len);
   86|    410|		os_memcpy(seed, conn->client_random, TLS_RANDOM_LEN);
  ------------------
  |  |  523|    410|#define os_memcpy(d, s, n) memcpy((d), (s), (n))
  ------------------
   87|    410|		os_memcpy(seed + TLS_RANDOM_LEN, conn->server_random,
  ------------------
  |  |  523|    410|#define os_memcpy(d, s, n) memcpy((d), (s), (n))
  ------------------
   88|    410|			  TLS_RANDOM_LEN);
   89|    410|		if (tls_prf(conn->rl.tls_version,
  ------------------
  |  Branch (89:7): [True: 0, False: 410]
  ------------------
   90|    410|			    pre_master_secret, pre_master_secret_len,
   91|    410|			    "master secret", seed, 2 * TLS_RANDOM_LEN,
  ------------------
  |  |   26|    410|#define TLS_RANDOM_LEN 32
  ------------------
   92|    410|			    conn->master_secret, TLS_MASTER_SECRET_LEN)) {
  ------------------
  |  |   28|    410|#define TLS_MASTER_SECRET_LEN 48
  ------------------
   93|      0|			wpa_printf(MSG_DEBUG, "TLSv1: Failed to derive "
   94|      0|				   "master_secret");
   95|      0|			return -1;
   96|      0|		}
   97|    410|		wpa_hexdump_key(MSG_MSGDUMP, "TLSv1: master_secret",
   98|    410|				conn->master_secret, TLS_MASTER_SECRET_LEN);
  ------------------
  |  |   28|    410|#define TLS_MASTER_SECRET_LEN 48
  ------------------
   99|    410|	}
  100|       |
  101|    410|	os_memcpy(seed, conn->server_random, TLS_RANDOM_LEN);
  ------------------
  |  |  523|    410|#define os_memcpy(d, s, n) memcpy((d), (s), (n))
  ------------------
  102|    410|	os_memcpy(seed + TLS_RANDOM_LEN, conn->client_random, TLS_RANDOM_LEN);
  ------------------
  |  |  523|    410|#define os_memcpy(d, s, n) memcpy((d), (s), (n))
  ------------------
  103|    410|	key_block_len = 2 * (conn->rl.hash_size + conn->rl.key_material_len);
  104|    410|	if (conn->rl.tls_version == TLS_VERSION_1)
  ------------------
  |  |   14|    410|#define TLS_VERSION_1 0x0301 /* TLSv1 */
  ------------------
  |  Branch (104:6): [True: 227, False: 183]
  ------------------
  105|    227|		key_block_len += 2 * conn->rl.iv_size;
  106|    410|	if (tls_prf(conn->rl.tls_version,
  ------------------
  |  Branch (106:6): [True: 0, False: 410]
  ------------------
  107|    410|		    conn->master_secret, TLS_MASTER_SECRET_LEN,
  ------------------
  |  |   28|    410|#define TLS_MASTER_SECRET_LEN 48
  ------------------
  108|    410|		    "key expansion", seed, 2 * TLS_RANDOM_LEN,
  ------------------
  |  |   26|    410|#define TLS_RANDOM_LEN 32
  ------------------
  109|    410|		    key_block, key_block_len)) {
  110|      0|		wpa_printf(MSG_DEBUG, "TLSv1: Failed to derive key_block");
  111|      0|		return -1;
  112|      0|	}
  113|    410|	wpa_hexdump_key(MSG_MSGDUMP, "TLSv1: key_block",
  114|    410|			key_block, key_block_len);
  115|       |
  116|    410|	pos = key_block;
  117|       |
  118|       |	/* client_write_MAC_secret */
  119|    410|	os_memcpy(conn->rl.write_mac_secret, pos, conn->rl.hash_size);
  ------------------
  |  |  523|    410|#define os_memcpy(d, s, n) memcpy((d), (s), (n))
  ------------------
  120|    410|	pos += conn->rl.hash_size;
  121|       |	/* server_write_MAC_secret */
  122|    410|	os_memcpy(conn->rl.read_mac_secret, pos, conn->rl.hash_size);
  ------------------
  |  |  523|    410|#define os_memcpy(d, s, n) memcpy((d), (s), (n))
  ------------------
  123|    410|	pos += conn->rl.hash_size;
  124|       |
  125|       |	/* client_write_key */
  126|    410|	os_memcpy(conn->rl.write_key, pos, conn->rl.key_material_len);
  ------------------
  |  |  523|    410|#define os_memcpy(d, s, n) memcpy((d), (s), (n))
  ------------------
  127|    410|	pos += conn->rl.key_material_len;
  128|       |	/* server_write_key */
  129|    410|	os_memcpy(conn->rl.read_key, pos, conn->rl.key_material_len);
  ------------------
  |  |  523|    410|#define os_memcpy(d, s, n) memcpy((d), (s), (n))
  ------------------
  130|    410|	pos += conn->rl.key_material_len;
  131|       |
  132|    410|	if (conn->rl.tls_version == TLS_VERSION_1) {
  ------------------
  |  |   14|    410|#define TLS_VERSION_1 0x0301 /* TLSv1 */
  ------------------
  |  Branch (132:6): [True: 227, False: 183]
  ------------------
  133|       |		/* client_write_IV */
  134|    227|		os_memcpy(conn->rl.write_iv, pos, conn->rl.iv_size);
  ------------------
  |  |  523|    227|#define os_memcpy(d, s, n) memcpy((d), (s), (n))
  ------------------
  135|    227|		pos += conn->rl.iv_size;
  136|       |		/* server_write_IV */
  137|    227|		os_memcpy(conn->rl.read_iv, pos, conn->rl.iv_size);
  ------------------
  |  |  523|    227|#define os_memcpy(d, s, n) memcpy((d), (s), (n))
  ------------------
  138|    227|	} else {
  139|       |		/*
  140|       |		 * Use IV field to set the mask value for TLS v1.1. A fixed
  141|       |		 * mask of zero is used per the RFC 4346, 6.2.3.2 CBC Block
  142|       |		 * Cipher option 2a.
  143|       |		 */
  144|    183|		os_memset(conn->rl.write_iv, 0, conn->rl.iv_size);
  ------------------
  |  |  529|    183|#define os_memset(s, c, n) memset(s, c, n)
  ------------------
  145|    183|	}
  146|       |
  147|    410|	return 0;
  148|    410|}
tlsv1_client_handshake:
  167|  66.5k|{
  168|  66.5k|	const u8 *pos, *end;
  169|  66.5k|	u8 *msg = NULL, *in_msg = NULL, *in_pos, *in_end, alert, ct;
  170|  66.5k|	size_t in_msg_len;
  171|  66.5k|	int no_appl_data;
  172|  66.5k|	int used;
  173|       |
  174|  66.5k|	if (need_more_data)
  ------------------
  |  Branch (174:6): [True: 0, False: 66.5k]
  ------------------
  175|      0|		*need_more_data = 0;
  176|       |
  177|  66.5k|	if (conn->state == CLIENT_HELLO) {
  ------------------
  |  Branch (177:6): [True: 2.68k, False: 63.8k]
  ------------------
  178|  2.68k|		if (in_len)
  ------------------
  |  Branch (178:7): [True: 0, False: 2.68k]
  ------------------
  179|      0|			return NULL;
  180|  2.68k|		return tls_send_client_hello(conn, out_len);
  181|  2.68k|	}
  182|       |
  183|  63.8k|	if (conn->partial_input) {
  ------------------
  |  Branch (183:6): [True: 0, False: 63.8k]
  ------------------
  184|      0|		if (wpabuf_resize(&conn->partial_input, in_len) < 0) {
  ------------------
  |  Branch (184:7): [True: 0, False: 0]
  ------------------
  185|      0|			wpa_printf(MSG_DEBUG, "TLSv1: Failed to allocate "
  186|      0|				   "memory for pending record");
  187|      0|			tls_alert(conn, TLS_ALERT_LEVEL_FATAL,
  ------------------
  |  |  128|      0|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
  188|      0|				  TLS_ALERT_INTERNAL_ERROR);
  ------------------
  |  |  151|      0|#define TLS_ALERT_INTERNAL_ERROR		80
  ------------------
  189|      0|			goto failed;
  190|      0|		}
  191|      0|		wpabuf_put_data(conn->partial_input, in_data, in_len);
  192|      0|		in_data = wpabuf_head(conn->partial_input);
  193|      0|		in_len = wpabuf_len(conn->partial_input);
  194|      0|	}
  195|       |
  196|  63.8k|	if (in_data == NULL || in_len == 0)
  ------------------
  |  Branch (196:6): [True: 0, False: 63.8k]
  |  Branch (196:25): [True: 99, False: 63.7k]
  ------------------
  197|     99|		return NULL;
  198|       |
  199|  63.7k|	pos = in_data;
  200|  63.7k|	end = in_data + in_len;
  201|  63.7k|	in_msg = os_malloc(in_len);
  ------------------
  |  |  505|  63.7k|#define os_malloc(s) malloc((s))
  ------------------
  202|  63.7k|	if (in_msg == NULL)
  ------------------
  |  Branch (202:6): [True: 0, False: 63.7k]
  ------------------
  203|      0|		return NULL;
  204|       |
  205|       |	/* Each received packet may include multiple records */
  206|   174k|	while (pos < end) {
  ------------------
  |  Branch (206:9): [True: 134k, False: 40.6k]
  ------------------
  207|   134k|		in_msg_len = in_len;
  208|   134k|		used = tlsv1_record_receive(&conn->rl, pos, end - pos,
  209|   134k|					    in_msg, &in_msg_len, &alert);
  210|   134k|		if (used < 0) {
  ------------------
  |  Branch (210:7): [True: 19.1k, False: 115k]
  ------------------
  211|  19.1k|			wpa_printf(MSG_DEBUG, "TLSv1: Processing received "
  212|  19.1k|				   "record failed");
  213|  19.1k|			tls_alert(conn, TLS_ALERT_LEVEL_FATAL, alert);
  ------------------
  |  |  128|  19.1k|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
  214|  19.1k|			goto failed;
  215|  19.1k|		}
  216|   115k|		if (used == 0) {
  ------------------
  |  Branch (216:7): [True: 82, False: 115k]
  ------------------
  217|     82|			struct wpabuf *partial;
  218|     82|			wpa_printf(MSG_DEBUG, "TLSv1: Need more data");
  219|     82|			partial = wpabuf_alloc_copy(pos, end - pos);
  220|     82|			wpabuf_free(conn->partial_input);
  221|     82|			conn->partial_input = partial;
  222|     82|			if (conn->partial_input == NULL) {
  ------------------
  |  Branch (222:8): [True: 0, False: 82]
  ------------------
  223|      0|				wpa_printf(MSG_DEBUG, "TLSv1: Failed to "
  224|      0|					   "allocate memory for pending "
  225|      0|					   "record");
  226|      0|				tls_alert(conn, TLS_ALERT_LEVEL_FATAL,
  ------------------
  |  |  128|      0|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
  227|      0|					  TLS_ALERT_INTERNAL_ERROR);
  ------------------
  |  |  151|      0|#define TLS_ALERT_INTERNAL_ERROR		80
  ------------------
  228|      0|				goto failed;
  229|      0|			}
  230|     82|			os_free(in_msg);
  ------------------
  |  |  511|     82|#define os_free(p) free((p))
  ------------------
  231|     82|			if (need_more_data)
  ------------------
  |  Branch (231:8): [True: 0, False: 82]
  ------------------
  232|      0|				*need_more_data = 1;
  233|     82|			return NULL;
  234|     82|		}
  235|   115k|		ct = pos[0];
  236|       |
  237|   115k|		in_pos = in_msg;
  238|   115k|		in_end = in_msg + in_msg_len;
  239|       |
  240|       |		/* Each received record may include multiple messages of the
  241|       |		 * same ContentType. */
  242|   120k|		while (in_pos < in_end) {
  ------------------
  |  Branch (242:10): [True: 8.92k, False: 111k]
  ------------------
  243|  8.92k|			in_msg_len = in_end - in_pos;
  244|  8.92k|			if (tlsv1_client_process_handshake(conn, ct, in_pos,
  ------------------
  |  Branch (244:8): [True: 3.96k, False: 4.96k]
  ------------------
  245|  8.92k|							   &in_msg_len,
  246|  8.92k|							   appl_data,
  247|  8.92k|							   appl_data_len) < 0)
  248|  3.96k|				goto failed;
  249|  4.96k|			in_pos += in_msg_len;
  250|  4.96k|		}
  251|       |
  252|   111k|		pos += used;
  253|   111k|	}
  254|       |
  255|  40.6k|	os_free(in_msg);
  ------------------
  |  |  511|  40.6k|#define os_free(p) free((p))
  ------------------
  256|  40.6k|	in_msg = NULL;
  257|       |
  258|  40.6k|	no_appl_data = appl_data == NULL || *appl_data == NULL;
  ------------------
  |  Branch (258:17): [True: 0, False: 40.6k]
  |  Branch (258:38): [True: 40.6k, False: 0]
  ------------------
  259|  40.6k|	msg = tlsv1_client_handshake_write(conn, out_len, no_appl_data);
  260|       |
  261|  63.6k|failed:
  262|  63.6k|	os_free(in_msg);
  ------------------
  |  |  511|  63.6k|#define os_free(p) free((p))
  ------------------
  263|  63.6k|	if (conn->alert_level) {
  ------------------
  |  Branch (263:6): [True: 46.7k, False: 16.9k]
  ------------------
  264|  46.7k|		wpabuf_free(conn->partial_input);
  265|  46.7k|		conn->partial_input = NULL;
  266|  46.7k|		conn->state = FAILED;
  267|  46.7k|		os_free(msg);
  ------------------
  |  |  511|  46.7k|#define os_free(p) free((p))
  ------------------
  268|  46.7k|		msg = tlsv1_client_send_alert(conn, conn->alert_level,
  269|  46.7k|					      conn->alert_description,
  270|  46.7k|					      out_len);
  271|  46.7k|	} else if (msg == NULL) {
  ------------------
  |  Branch (271:13): [True: 16.5k, False: 447]
  ------------------
  272|  16.5k|		msg = os_zalloc(1);
  273|  16.5k|		*out_len = 0;
  274|  16.5k|	}
  275|       |
  276|  63.6k|	if (need_more_data == NULL || !(*need_more_data)) {
  ------------------
  |  Branch (276:6): [True: 63.6k, False: 0]
  |  Branch (276:32): [True: 0, False: 0]
  ------------------
  277|  63.6k|		wpabuf_free(conn->partial_input);
  278|  63.6k|		conn->partial_input = NULL;
  279|  63.6k|	}
  280|       |
  281|  63.6k|	return msg;
  282|  40.6k|}
tlsv1_client_encrypt:
  300|     45|{
  301|     45|	size_t rlen;
  302|       |
  303|     45|	wpa_hexdump_key(MSG_MSGDUMP, "TLSv1: Plaintext AppData",
  304|     45|			in_data, in_len);
  305|       |
  306|     45|	if (tlsv1_record_send(&conn->rl, TLS_CONTENT_TYPE_APPLICATION_DATA,
  ------------------
  |  Branch (306:6): [True: 0, False: 45]
  ------------------
  307|     45|			      out_data, out_len, in_data, in_len, &rlen) < 0) {
  308|      0|		wpa_printf(MSG_DEBUG, "TLSv1: Failed to create a record");
  309|      0|		tls_alert(conn, TLS_ALERT_LEVEL_FATAL,
  ------------------
  |  |  128|      0|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
  310|      0|			  TLS_ALERT_INTERNAL_ERROR);
  ------------------
  |  |  151|      0|#define TLS_ALERT_INTERNAL_ERROR		80
  ------------------
  311|      0|		return -1;
  312|      0|	}
  313|       |
  314|     45|	return rlen;
  315|     45|}
tlsv1_client_decrypt:
  333|     44|{
  334|     44|	const u8 *in_end, *pos;
  335|     44|	int used;
  336|     44|	u8 alert, *out_pos, ct;
  337|     44|	size_t olen;
  338|     44|	struct wpabuf *buf = NULL;
  339|       |
  340|     44|	if (need_more_data)
  ------------------
  |  Branch (340:6): [True: 0, False: 44]
  ------------------
  341|      0|		*need_more_data = 0;
  342|       |
  343|     44|	if (conn->partial_input) {
  ------------------
  |  Branch (343:6): [True: 0, False: 44]
  ------------------
  344|      0|		if (wpabuf_resize(&conn->partial_input, in_len) < 0) {
  ------------------
  |  Branch (344:7): [True: 0, False: 0]
  ------------------
  345|      0|			wpa_printf(MSG_DEBUG, "TLSv1: Failed to allocate "
  346|      0|				   "memory for pending record");
  347|      0|			alert = TLS_ALERT_INTERNAL_ERROR;
  ------------------
  |  |  151|      0|#define TLS_ALERT_INTERNAL_ERROR		80
  ------------------
  348|      0|			goto fail;
  349|      0|		}
  350|      0|		wpabuf_put_data(conn->partial_input, in_data, in_len);
  351|      0|		in_data = wpabuf_head(conn->partial_input);
  352|      0|		in_len = wpabuf_len(conn->partial_input);
  353|      0|	}
  354|       |
  355|     44|	pos = in_data;
  356|     44|	in_end = in_data + in_len;
  357|       |
  358|     47|	while (pos < in_end) {
  ------------------
  |  Branch (358:9): [True: 45, False: 2]
  ------------------
  359|     45|		ct = pos[0];
  360|     45|		if (wpabuf_resize(&buf, in_end - pos) < 0) {
  ------------------
  |  Branch (360:7): [True: 0, False: 45]
  ------------------
  361|      0|			alert = TLS_ALERT_INTERNAL_ERROR;
  ------------------
  |  |  151|      0|#define TLS_ALERT_INTERNAL_ERROR		80
  ------------------
  362|      0|			goto fail;
  363|      0|		}
  364|     45|		out_pos = wpabuf_put(buf, 0);
  365|     45|		olen = wpabuf_tailroom(buf);
  366|     45|		used = tlsv1_record_receive(&conn->rl, pos, in_end - pos,
  367|     45|					    out_pos, &olen, &alert);
  368|     45|		if (used < 0) {
  ------------------
  |  Branch (368:7): [True: 2, False: 43]
  ------------------
  369|      2|			wpa_printf(MSG_DEBUG, "TLSv1: Record layer processing "
  370|      2|				   "failed");
  371|      2|			goto fail;
  372|      2|		}
  373|     43|		if (used == 0) {
  ------------------
  |  Branch (373:7): [True: 40, False: 3]
  ------------------
  374|     40|			struct wpabuf *partial;
  375|     40|			wpa_printf(MSG_DEBUG, "TLSv1: Need more data");
  376|     40|			partial = wpabuf_alloc_copy(pos, in_end - pos);
  377|     40|			wpabuf_free(conn->partial_input);
  378|     40|			conn->partial_input = partial;
  379|     40|			if (conn->partial_input == NULL) {
  ------------------
  |  Branch (379:8): [True: 0, False: 40]
  ------------------
  380|      0|				wpa_printf(MSG_DEBUG, "TLSv1: Failed to "
  381|      0|					   "allocate memory for pending "
  382|      0|					   "record");
  383|      0|				alert = TLS_ALERT_INTERNAL_ERROR;
  ------------------
  |  |  151|      0|#define TLS_ALERT_INTERNAL_ERROR		80
  ------------------
  384|      0|				goto fail;
  385|      0|			}
  386|     40|			if (need_more_data)
  ------------------
  |  Branch (386:8): [True: 0, False: 40]
  ------------------
  387|      0|				*need_more_data = 1;
  388|     40|			return buf;
  389|     40|		}
  390|       |
  391|      3|		if (ct == TLS_CONTENT_TYPE_ALERT) {
  ------------------
  |  Branch (391:7): [True: 0, False: 3]
  ------------------
  392|      0|			if (olen < 2) {
  ------------------
  |  Branch (392:8): [True: 0, False: 0]
  ------------------
  393|      0|				wpa_printf(MSG_DEBUG, "TLSv1: Alert "
  394|      0|					   "underflow");
  395|      0|				alert = TLS_ALERT_DECODE_ERROR;
  ------------------
  |  |  146|      0|#define TLS_ALERT_DECODE_ERROR			50
  ------------------
  396|      0|				goto fail;
  397|      0|			}
  398|      0|			wpa_printf(MSG_DEBUG, "TLSv1: Received alert %d:%d",
  399|      0|				   out_pos[0], out_pos[1]);
  400|      0|			if (out_pos[0] == TLS_ALERT_LEVEL_WARNING) {
  ------------------
  |  |  127|      0|#define TLS_ALERT_LEVEL_WARNING 1
  ------------------
  |  Branch (400:8): [True: 0, False: 0]
  ------------------
  401|       |				/* Continue processing */
  402|      0|				pos += used;
  403|      0|				continue;
  404|      0|			}
  405|       |
  406|      0|			alert = out_pos[1];
  407|      0|			goto fail;
  408|      0|		}
  409|       |
  410|      3|		if (ct != TLS_CONTENT_TYPE_APPLICATION_DATA) {
  ------------------
  |  Branch (410:7): [True: 0, False: 3]
  ------------------
  411|      0|			wpa_printf(MSG_DEBUG, "TLSv1: Unexpected content type "
  412|      0|				   "0x%x when decrypting application data",
  413|      0|				   pos[0]);
  414|      0|			alert = TLS_ALERT_UNEXPECTED_MESSAGE;
  ------------------
  |  |  132|      0|#define TLS_ALERT_UNEXPECTED_MESSAGE		10
  ------------------
  415|      0|			goto fail;
  416|      0|		}
  417|       |
  418|      3|		wpabuf_put(buf, olen);
  419|       |
  420|      3|		pos += used;
  421|      3|	}
  422|       |
  423|      2|	wpabuf_free(conn->partial_input);
  424|      2|	conn->partial_input = NULL;
  425|      2|	return buf;
  426|       |
  427|      2|fail:
  428|      2|	wpabuf_free(buf);
  429|      2|	wpabuf_free(conn->partial_input);
  430|      2|	conn->partial_input = NULL;
  431|      2|	tls_alert(conn, TLS_ALERT_LEVEL_FATAL, alert);
  ------------------
  |  |  128|      2|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
  432|       |	return NULL;
  433|     44|}
tlsv1_client_global_init:
  443|  2.68k|{
  444|  2.68k|	return crypto_global_init();
  445|  2.68k|}
tlsv1_client_global_deinit:
  456|  2.68k|{
  457|  2.68k|	crypto_global_deinit();
  458|  2.68k|}
tlsv1_client_init:
  466|  2.68k|{
  467|  2.68k|	struct tlsv1_client *conn;
  468|  2.68k|	size_t count;
  469|  2.68k|	u16 *suites;
  470|       |
  471|  2.68k|	conn = os_zalloc(sizeof(*conn));
  472|  2.68k|	if (conn == NULL)
  ------------------
  |  Branch (472:6): [True: 0, False: 2.68k]
  ------------------
  473|      0|		return NULL;
  474|       |
  475|  2.68k|	conn->state = CLIENT_HELLO;
  476|       |
  477|  2.68k|	if (tls_verify_hash_init(&conn->verify) < 0) {
  ------------------
  |  Branch (477:6): [True: 0, False: 2.68k]
  ------------------
  478|      0|		wpa_printf(MSG_DEBUG, "TLSv1: Failed to initialize verify "
  479|      0|			   "hash");
  480|      0|		os_free(conn);
  ------------------
  |  |  511|      0|#define os_free(p) free((p))
  ------------------
  481|      0|		return NULL;
  482|      0|	}
  483|       |
  484|  2.68k|	count = 0;
  485|  2.68k|	suites = conn->cipher_suites;
  486|  2.68k|	suites[count++] = TLS_DHE_RSA_WITH_AES_256_CBC_SHA256;
  ------------------
  |  |  100|  2.68k|#define TLS_DHE_RSA_WITH_AES_256_CBC_SHA256	0x006B /* RFC 5246 */
  ------------------
  487|  2.68k|	suites[count++] = TLS_RSA_WITH_AES_256_CBC_SHA256;
  ------------------
  |  |   92|  2.68k|#define TLS_RSA_WITH_AES_256_CBC_SHA256		0x003D /* RFC 5246 */
  ------------------
  488|  2.68k|	suites[count++] = TLS_DHE_RSA_WITH_AES_256_CBC_SHA;
  ------------------
  |  |   88|  2.68k|#define TLS_DHE_RSA_WITH_AES_256_CBC_SHA	0x0039 /* RFC 3268 */
  ------------------
  489|  2.68k|	suites[count++] = TLS_RSA_WITH_AES_256_CBC_SHA;
  ------------------
  |  |   84|  2.68k|#define TLS_RSA_WITH_AES_256_CBC_SHA		0x0035 /* RFC 3268 */
  ------------------
  490|  2.68k|	suites[count++] = TLS_DHE_RSA_WITH_AES_128_CBC_SHA256;
  ------------------
  |  |   96|  2.68k|#define TLS_DHE_RSA_WITH_AES_128_CBC_SHA256	0x0067 /* RFC 5246 */
  ------------------
  491|  2.68k|	suites[count++] = TLS_RSA_WITH_AES_128_CBC_SHA256;
  ------------------
  |  |   91|  2.68k|#define TLS_RSA_WITH_AES_128_CBC_SHA256		0x003C /* RFC 5246 */
  ------------------
  492|  2.68k|	suites[count++] = TLS_DHE_RSA_WITH_AES_128_CBC_SHA;
  ------------------
  |  |   82|  2.68k|#define TLS_DHE_RSA_WITH_AES_128_CBC_SHA	0x0033 /* RFC 3268 */
  ------------------
  493|  2.68k|	suites[count++] = TLS_RSA_WITH_AES_128_CBC_SHA;
  ------------------
  |  |   78|  2.68k|#define TLS_RSA_WITH_AES_128_CBC_SHA		0x002F /* RFC 3268 */
  ------------------
  494|  2.68k|	suites[count++] = TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA;
  ------------------
  |  |   72|  2.68k|#define TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA	0x0016 /* RFC 2246 */
  ------------------
  495|  2.68k|	suites[count++] = TLS_RSA_WITH_3DES_EDE_CBC_SHA;
  ------------------
  |  |   60|  2.68k|#define TLS_RSA_WITH_3DES_EDE_CBC_SHA		0x000A /* RFC 2246 */
  ------------------
  496|  2.68k|	suites[count++] = TLS_RSA_WITH_RC4_128_SHA;
  ------------------
  |  |   55|  2.68k|#define TLS_RSA_WITH_RC4_128_SHA		0x0005 /* RFC 2246 */
  ------------------
  497|  2.68k|	suites[count++] = TLS_RSA_WITH_RC4_128_MD5;
  ------------------
  |  |   54|  2.68k|#define TLS_RSA_WITH_RC4_128_MD5		0x0004 /* RFC 2246 */
  ------------------
  498|  2.68k|	conn->num_cipher_suites = count;
  499|       |
  500|  2.68k|	conn->rl.tls_version = TLS_VERSION;
  ------------------
  |  |   18|  2.68k|#define TLS_VERSION TLS_VERSION_1_2
  |  |  ------------------
  |  |  |  |   16|  2.68k|#define TLS_VERSION_1_2 0x0303 /* TLSv1.2 */
  |  |  ------------------
  ------------------
  501|       |
  502|  2.68k|	return conn;
  503|  2.68k|}
tlsv1_client_deinit:
  511|  2.68k|{
  512|  2.68k|	crypto_public_key_free(conn->server_rsa_key);
  513|  2.68k|	tlsv1_record_set_cipher_suite(&conn->rl, TLS_NULL_WITH_NULL_NULL);
  ------------------
  |  |   50|  2.68k|#define TLS_NULL_WITH_NULL_NULL			0x0000 /* RFC 2246 */
  ------------------
  514|  2.68k|	tlsv1_record_change_write_cipher(&conn->rl);
  515|  2.68k|	tlsv1_record_change_read_cipher(&conn->rl);
  516|  2.68k|	tls_verify_hash_free(&conn->verify);
  517|  2.68k|	os_free(conn->client_hello_ext);
  ------------------
  |  |  511|  2.68k|#define os_free(p) free((p))
  ------------------
  518|  2.68k|	tlsv1_client_free_dh(conn);
  519|  2.68k|	tlsv1_cred_free(conn->cred);
  520|  2.68k|	wpabuf_free(conn->partial_input);
  521|  2.68k|	x509_certificate_chain_free(conn->server_cert);
  522|  2.68k|	os_free(conn);
  ------------------
  |  |  511|  2.68k|#define os_free(p) free((p))
  ------------------
  523|  2.68k|}
tlsv1_client_established:
  532|   130k|{
  533|   130k|	return conn->state == ESTABLISHED;
  534|   130k|}
tlsv1_client_set_cb:
  891|  2.68k|{
  892|  2.68k|	conn->event_cb = event_cb;
  893|  2.68k|	conn->cb_ctx = cb_ctx;
  894|  2.68k|	conn->cert_in_cb = !!cert_in_cb;
  895|  2.68k|}

tlsv1_client_process_handshake:
 1487|  8.92k|{
 1488|  8.92k|	if (ct == TLS_CONTENT_TYPE_ALERT) {
  ------------------
  |  Branch (1488:6): [True: 476, False: 8.44k]
  ------------------
 1489|    476|		if (*len < 2) {
  ------------------
  |  Branch (1489:7): [True: 391, False: 85]
  ------------------
 1490|    391|			wpa_printf(MSG_DEBUG, "TLSv1: Alert underflow");
 1491|    391|			tls_alert(conn, TLS_ALERT_LEVEL_FATAL,
  ------------------
  |  |  128|    391|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
 1492|    391|				  TLS_ALERT_DECODE_ERROR);
  ------------------
  |  |  146|    391|#define TLS_ALERT_DECODE_ERROR			50
  ------------------
 1493|    391|			return -1;
 1494|    391|		}
 1495|     85|		wpa_printf(MSG_DEBUG, "TLSv1: Received alert %d:%d",
 1496|     85|			   buf[0], buf[1]);
 1497|     85|		*len = 2;
 1498|     85|		conn->state = FAILED;
 1499|     85|		return -1;
 1500|    476|	}
 1501|       |
 1502|  8.44k|	if (ct == TLS_CONTENT_TYPE_HANDSHAKE && *len >= 4 &&
  ------------------
  |  Branch (1502:6): [True: 7.77k, False: 673]
  |  Branch (1502:42): [True: 7.05k, False: 720]
  ------------------
 1503|  7.05k|	    buf[0] == TLS_HANDSHAKE_TYPE_HELLO_REQUEST) {
  ------------------
  |  Branch (1503:6): [True: 1.33k, False: 5.72k]
  ------------------
 1504|  1.33k|		size_t hr_len = WPA_GET_BE24(buf + 1);
 1505|  1.33k|		if (hr_len > *len - 4) {
  ------------------
  |  Branch (1505:7): [True: 273, False: 1.05k]
  ------------------
 1506|    273|			wpa_printf(MSG_DEBUG, "TLSv1: HelloRequest underflow");
 1507|    273|			tls_alert(conn, TLS_ALERT_LEVEL_FATAL,
  ------------------
  |  |  128|    273|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
 1508|    273|				  TLS_ALERT_DECODE_ERROR);
  ------------------
  |  |  146|    273|#define TLS_ALERT_DECODE_ERROR			50
  ------------------
 1509|    273|			return -1;
 1510|    273|		}
 1511|  1.05k|		wpa_printf(MSG_DEBUG, "TLSv1: Ignored HelloRequest");
 1512|  1.05k|		*len = 4 + hr_len;
 1513|  1.05k|		return 0;
 1514|  1.33k|	}
 1515|       |
 1516|  7.11k|	switch (conn->state) {
 1517|  2.43k|	case SERVER_HELLO:
  ------------------
  |  Branch (1517:2): [True: 2.43k, False: 4.67k]
  ------------------
 1518|  2.43k|		if (tls_process_server_hello(conn, ct, buf, len))
  ------------------
  |  Branch (1518:7): [True: 217, False: 2.22k]
  ------------------
 1519|    217|			return -1;
 1520|  2.22k|		break;
 1521|  2.22k|	case SERVER_CERTIFICATE:
  ------------------
  |  Branch (1521:2): [True: 2.21k, False: 4.89k]
  ------------------
 1522|  2.21k|		if (tls_process_certificate(conn, ct, buf, len))
  ------------------
  |  Branch (1522:7): [True: 1.48k, False: 730]
  ------------------
 1523|  1.48k|			return -1;
 1524|    730|		break;
 1525|    730|	case SERVER_KEY_EXCHANGE:
  ------------------
  |  Branch (1525:2): [True: 674, False: 6.44k]
  ------------------
 1526|    674|		if (tls_process_server_key_exchange(conn, ct, buf, len))
  ------------------
  |  Branch (1526:7): [True: 256, False: 418]
  ------------------
 1527|    256|			return -1;
 1528|    418|		break;
 1529|    418|	case SERVER_CERTIFICATE_REQUEST:
  ------------------
  |  Branch (1529:2): [True: 74, False: 7.04k]
  ------------------
 1530|     74|		if (tls_process_certificate_request(conn, ct, buf, len))
  ------------------
  |  Branch (1530:7): [True: 4, False: 70]
  ------------------
 1531|      4|			return -1;
 1532|     70|		break;
 1533|    103|	case SERVER_HELLO_DONE:
  ------------------
  |  Branch (1533:2): [True: 103, False: 7.01k]
  ------------------
 1534|    103|		if (tls_process_server_hello_done(conn, ct, buf, len))
  ------------------
  |  Branch (1534:7): [True: 43, False: 60]
  ------------------
 1535|     43|			return -1;
 1536|     60|		break;
 1537|    364|	case SERVER_CHANGE_CIPHER_SPEC:
  ------------------
  |  Branch (1537:2): [True: 364, False: 6.75k]
  ------------------
 1538|    364|		if (tls_process_server_change_cipher_spec(conn, ct, buf, len))
  ------------------
  |  Branch (1538:7): [True: 6, False: 358]
  ------------------
 1539|      6|			return -1;
 1540|    358|		break;
 1541|    358|	case SERVER_FINISHED:
  ------------------
  |  Branch (1541:2): [True: 76, False: 7.04k]
  ------------------
 1542|     76|		if (tls_process_server_finished(conn, ct, buf, len))
  ------------------
  |  Branch (1542:7): [True: 31, False: 45]
  ------------------
 1543|     31|			return -1;
 1544|     45|		break;
 1545|     45|	case ACK_FINISHED:
  ------------------
  |  Branch (1545:2): [True: 0, False: 7.11k]
  ------------------
 1546|      0|		if (out_data &&
  ------------------
  |  Branch (1546:7): [True: 0, False: 0]
  ------------------
 1547|      0|		    tls_process_application_data(conn, ct, buf, len, out_data,
  ------------------
  |  Branch (1547:7): [True: 0, False: 0]
  ------------------
 1548|      0|						 out_len))
 1549|      0|			return -1;
 1550|      0|		break;
 1551|  1.16k|	default:
  ------------------
  |  Branch (1551:2): [True: 1.16k, False: 5.94k]
  ------------------
 1552|  1.16k|		wpa_printf(MSG_DEBUG, "TLSv1: Unexpected state %d "
 1553|  1.16k|			   "while processing received message",
 1554|  1.16k|			   conn->state);
 1555|  1.16k|		return -1;
 1556|  7.11k|	}
 1557|       |
 1558|  3.90k|	if (ct == TLS_CONTENT_TYPE_HANDSHAKE)
  ------------------
  |  Branch (1558:6): [True: 3.54k, False: 358]
  ------------------
 1559|  3.54k|		tls_verify_hash_add(&conn->verify, buf, *len);
 1560|       |
 1561|  3.90k|	return 0;
 1562|  7.11k|}
tlsv1_client_read.c:tls_process_server_hello:
   80|  2.43k|{
   81|  2.43k|	const u8 *pos, *end;
   82|  2.43k|	size_t left, len, i;
   83|  2.43k|	u16 cipher_suite;
   84|  2.43k|	u16 tls_version;
   85|       |
   86|  2.43k|	if (ct != TLS_CONTENT_TYPE_HANDSHAKE) {
  ------------------
  |  Branch (86:6): [True: 10, False: 2.42k]
  ------------------
   87|     10|		wpa_printf(MSG_DEBUG, "TLSv1: Expected Handshake; "
   88|     10|			   "received content type 0x%x", ct);
   89|     10|		tls_alert(conn, TLS_ALERT_LEVEL_FATAL,
  ------------------
  |  |  128|     10|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
   90|     10|			  TLS_ALERT_UNEXPECTED_MESSAGE);
  ------------------
  |  |  132|     10|#define TLS_ALERT_UNEXPECTED_MESSAGE		10
  ------------------
   91|     10|		return -1;
   92|     10|	}
   93|       |
   94|  2.42k|	pos = in_data;
   95|  2.42k|	left = *in_len;
   96|       |
   97|  2.42k|	if (left < 4)
  ------------------
  |  Branch (97:6): [True: 27, False: 2.40k]
  ------------------
   98|     27|		goto decode_error;
   99|       |
  100|       |	/* HandshakeType msg_type */
  101|  2.40k|	if (*pos != TLS_HANDSHAKE_TYPE_SERVER_HELLO) {
  ------------------
  |  Branch (101:6): [True: 20, False: 2.38k]
  ------------------
  102|     20|		wpa_printf(MSG_DEBUG, "TLSv1: Received unexpected handshake "
  103|     20|			   "message %d (expected ServerHello)", *pos);
  104|     20|		tls_alert(conn, TLS_ALERT_LEVEL_FATAL,
  ------------------
  |  |  128|     20|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
  105|     20|			  TLS_ALERT_UNEXPECTED_MESSAGE);
  ------------------
  |  |  132|     20|#define TLS_ALERT_UNEXPECTED_MESSAGE		10
  ------------------
  106|     20|		return -1;
  107|     20|	}
  108|  2.38k|	wpa_printf(MSG_DEBUG, "TLSv1: Received ServerHello");
  109|  2.38k|	pos++;
  110|       |	/* uint24 length */
  111|  2.38k|	len = WPA_GET_BE24(pos);
  112|  2.38k|	pos += 3;
  113|  2.38k|	left -= 4;
  114|       |
  115|  2.38k|	if (len > left)
  ------------------
  |  Branch (115:6): [True: 23, False: 2.35k]
  ------------------
  116|     23|		goto decode_error;
  117|       |
  118|       |	/* body - ServerHello */
  119|       |
  120|  2.35k|	wpa_hexdump(MSG_MSGDUMP, "TLSv1: ServerHello", pos, len);
  121|  2.35k|	end = pos + len;
  122|       |
  123|       |	/* ProtocolVersion server_version */
  124|  2.35k|	if (end - pos < 2)
  ------------------
  |  Branch (124:6): [True: 7, False: 2.35k]
  ------------------
  125|      7|		goto decode_error;
  126|  2.35k|	tls_version = WPA_GET_BE16(pos);
  127|  2.35k|	if (!tls_version_ok(tls_version) ||
  ------------------
  |  Branch (127:6): [True: 26, False: 2.32k]
  ------------------
  128|  2.32k|	    tls_version_disabled(conn, tls_version)) {
  ------------------
  |  Branch (128:6): [True: 0, False: 2.32k]
  ------------------
  129|     26|		wpa_printf(MSG_DEBUG, "TLSv1: Unexpected protocol version in "
  130|     26|			   "ServerHello %u.%u", pos[0], pos[1]);
  131|     26|		tls_alert(conn, TLS_ALERT_LEVEL_FATAL,
  ------------------
  |  |  128|     26|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
  132|     26|			  TLS_ALERT_PROTOCOL_VERSION);
  ------------------
  |  |  149|     26|#define TLS_ALERT_PROTOCOL_VERSION		70
  ------------------
  133|     26|		return -1;
  134|     26|	}
  135|  2.32k|	pos += 2;
  136|       |
  137|  2.32k|	wpa_printf(MSG_DEBUG, "TLSv1: Using TLS v%s",
  138|  2.32k|		   tls_version_str(tls_version));
  139|  2.32k|	conn->rl.tls_version = tls_version;
  140|       |
  141|       |	/* Random random */
  142|  2.32k|	if (end - pos < TLS_RANDOM_LEN)
  ------------------
  |  |   26|  2.32k|#define TLS_RANDOM_LEN 32
  ------------------
  |  Branch (142:6): [True: 10, False: 2.31k]
  ------------------
  143|     10|		goto decode_error;
  144|       |
  145|  2.31k|	os_memcpy(conn->server_random, pos, TLS_RANDOM_LEN);
  ------------------
  |  |  523|  2.31k|#define os_memcpy(d, s, n) memcpy((d), (s), (n))
  ------------------
  146|  2.31k|	pos += TLS_RANDOM_LEN;
  ------------------
  |  |   26|  2.31k|#define TLS_RANDOM_LEN 32
  ------------------
  147|  2.31k|	wpa_hexdump(MSG_MSGDUMP, "TLSv1: server_random",
  148|  2.31k|		    conn->server_random, TLS_RANDOM_LEN);
  ------------------
  |  |   26|  2.31k|#define TLS_RANDOM_LEN 32
  ------------------
  149|       |
  150|       |	/* SessionID session_id */
  151|  2.31k|	if (end - pos < 1)
  ------------------
  |  Branch (151:6): [True: 1, False: 2.31k]
  ------------------
  152|      1|		goto decode_error;
  153|  2.31k|	if (end - pos < 1 + *pos || *pos > TLS_SESSION_ID_MAX_LEN)
  ------------------
  |  |   29|  2.30k|#define TLS_SESSION_ID_MAX_LEN 32
  ------------------
  |  Branch (153:6): [True: 9, False: 2.30k]
  |  Branch (153:30): [True: 1, False: 2.30k]
  ------------------
  154|     10|		goto decode_error;
  155|  2.30k|	if (conn->session_id_len && conn->session_id_len == *pos &&
  ------------------
  |  Branch (155:6): [True: 0, False: 2.30k]
  |  Branch (155:30): [True: 0, False: 0]
  ------------------
  156|      0|	    os_memcmp(conn->session_id, pos + 1, conn->session_id_len) == 0) {
  ------------------
  |  |  532|      0|#define os_memcmp(s1, s2, n) memcmp((s1), (s2), (n))
  ------------------
  |  Branch (156:6): [True: 0, False: 0]
  ------------------
  157|      0|		pos += 1 + conn->session_id_len;
  158|      0|		wpa_printf(MSG_DEBUG, "TLSv1: Resuming old session");
  159|      0|		conn->session_resumed = 1;
  160|  2.30k|	} else {
  161|  2.30k|		conn->session_id_len = *pos;
  162|  2.30k|		pos++;
  163|  2.30k|		os_memcpy(conn->session_id, pos, conn->session_id_len);
  ------------------
  |  |  523|  2.30k|#define os_memcpy(d, s, n) memcpy((d), (s), (n))
  ------------------
  164|  2.30k|		pos += conn->session_id_len;
  165|  2.30k|	}
  166|  2.30k|	wpa_hexdump(MSG_MSGDUMP, "TLSv1: session_id",
  167|  2.30k|		    conn->session_id, conn->session_id_len);
  168|       |
  169|       |	/* CipherSuite cipher_suite */
  170|  2.30k|	if (end - pos < 2)
  ------------------
  |  Branch (170:6): [True: 4, False: 2.30k]
  ------------------
  171|      4|		goto decode_error;
  172|  2.30k|	cipher_suite = WPA_GET_BE16(pos);
  173|  2.30k|	pos += 2;
  174|  10.8k|	for (i = 0; i < conn->num_cipher_suites; i++) {
  ------------------
  |  Branch (174:14): [True: 10.8k, False: 23]
  ------------------
  175|  10.8k|		if (cipher_suite == conn->cipher_suites[i])
  ------------------
  |  Branch (175:7): [True: 2.27k, False: 8.56k]
  ------------------
  176|  2.27k|			break;
  177|  10.8k|	}
  178|  2.30k|	if (i == conn->num_cipher_suites) {
  ------------------
  |  Branch (178:6): [True: 23, False: 2.27k]
  ------------------
  179|     23|		wpa_printf(MSG_INFO, "TLSv1: Server selected unexpected "
  180|     23|			   "cipher suite 0x%04x", cipher_suite);
  181|     23|		tls_alert(conn, TLS_ALERT_LEVEL_FATAL,
  ------------------
  |  |  128|     23|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
  182|     23|			  TLS_ALERT_ILLEGAL_PARAMETER);
  ------------------
  |  |  143|     23|#define TLS_ALERT_ILLEGAL_PARAMETER		47
  ------------------
  183|     23|		return -1;
  184|     23|	}
  185|       |
  186|  2.27k|	if (conn->session_resumed && cipher_suite != conn->prev_cipher_suite) {
  ------------------
  |  Branch (186:6): [True: 0, False: 2.27k]
  |  Branch (186:31): [True: 0, False: 0]
  ------------------
  187|      0|		wpa_printf(MSG_DEBUG, "TLSv1: Server selected a different "
  188|      0|			   "cipher suite for a resumed connection (0x%04x != "
  189|      0|			   "0x%04x)", cipher_suite, conn->prev_cipher_suite);
  190|      0|		tls_alert(conn, TLS_ALERT_LEVEL_FATAL,
  ------------------
  |  |  128|      0|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
  191|      0|			  TLS_ALERT_ILLEGAL_PARAMETER);
  ------------------
  |  |  143|      0|#define TLS_ALERT_ILLEGAL_PARAMETER		47
  ------------------
  192|      0|		return -1;
  193|      0|	}
  194|       |
  195|  2.27k|	if (tlsv1_record_set_cipher_suite(&conn->rl, cipher_suite) < 0) {
  ------------------
  |  Branch (195:6): [True: 0, False: 2.27k]
  ------------------
  196|      0|		wpa_printf(MSG_DEBUG, "TLSv1: Failed to set CipherSuite for "
  197|      0|			   "record layer");
  198|      0|		tls_alert(conn, TLS_ALERT_LEVEL_FATAL,
  ------------------
  |  |  128|      0|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
  199|      0|			  TLS_ALERT_INTERNAL_ERROR);
  ------------------
  |  |  151|      0|#define TLS_ALERT_INTERNAL_ERROR		80
  ------------------
  200|      0|		return -1;
  201|      0|	}
  202|       |
  203|  2.27k|	conn->prev_cipher_suite = cipher_suite;
  204|       |
  205|       |	/* CompressionMethod compression_method */
  206|  2.27k|	if (end - pos < 1)
  ------------------
  |  Branch (206:6): [True: 2, False: 2.27k]
  ------------------
  207|      2|		goto decode_error;
  208|  2.27k|	if (*pos != TLS_COMPRESSION_NULL) {
  ------------------
  |  |  105|  2.27k|#define TLS_COMPRESSION_NULL 0
  ------------------
  |  Branch (208:6): [True: 9, False: 2.26k]
  ------------------
  209|      9|		wpa_printf(MSG_INFO, "TLSv1: Server selected unexpected "
  210|      9|			   "compression 0x%02x", *pos);
  211|      9|		tls_alert(conn, TLS_ALERT_LEVEL_FATAL,
  ------------------
  |  |  128|      9|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
  212|      9|			  TLS_ALERT_ILLEGAL_PARAMETER);
  ------------------
  |  |  143|      9|#define TLS_ALERT_ILLEGAL_PARAMETER		47
  ------------------
  213|      9|		return -1;
  214|      9|	}
  215|  2.26k|	pos++;
  216|       |
  217|  2.26k|	if (end - pos >= 2) {
  ------------------
  |  Branch (217:6): [True: 49, False: 2.21k]
  ------------------
  218|     49|		u16 ext_len;
  219|       |
  220|     49|		ext_len = WPA_GET_BE16(pos);
  221|     49|		pos += 2;
  222|     49|		if (end - pos < ext_len) {
  ------------------
  |  Branch (222:7): [True: 14, False: 35]
  ------------------
  223|     14|			wpa_printf(MSG_INFO,
  224|     14|				   "TLSv1: Invalid ServerHello extension length: %u (left: %u)",
  225|     14|				   ext_len, (unsigned int) (end - pos));
  226|     14|			goto decode_error;
  227|     14|		}
  228|       |
  229|     35|		if (tls_process_server_hello_extensions(conn, pos, ext_len))
  ------------------
  |  Branch (229:7): [True: 24, False: 11]
  ------------------
  230|     24|			goto decode_error;
  231|     11|		pos += ext_len;
  232|     11|	}
  233|       |
  234|  2.22k|	if (end != pos) {
  ------------------
  |  Branch (234:6): [True: 7, False: 2.22k]
  ------------------
  235|      7|		wpa_hexdump(MSG_DEBUG, "TLSv1: Unexpected extra data in the "
  236|      7|			    "end of ServerHello", pos, end - pos);
  237|      7|		goto decode_error;
  238|      7|	}
  239|       |
  240|  2.22k|	if (conn->session_ticket_included && conn->session_ticket_cb) {
  ------------------
  |  Branch (240:6): [True: 0, False: 2.22k]
  |  Branch (240:39): [True: 0, False: 0]
  ------------------
  241|       |		/* TODO: include SessionTicket extension if one was included in
  242|       |		 * ServerHello */
  243|      0|		int res = conn->session_ticket_cb(
  244|      0|			conn->session_ticket_cb_ctx, NULL, 0,
  245|      0|			conn->client_random, conn->server_random,
  246|      0|			conn->master_secret);
  247|      0|		if (res < 0) {
  ------------------
  |  Branch (247:7): [True: 0, False: 0]
  ------------------
  248|      0|			wpa_printf(MSG_DEBUG, "TLSv1: SessionTicket callback "
  249|      0|				   "indicated failure");
  250|      0|			tls_alert(conn, TLS_ALERT_LEVEL_FATAL,
  ------------------
  |  |  128|      0|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
  251|      0|				  TLS_ALERT_HANDSHAKE_FAILURE);
  ------------------
  |  |  137|      0|#define TLS_ALERT_HANDSHAKE_FAILURE		40
  ------------------
  252|      0|			return -1;
  253|      0|		}
  254|      0|		conn->use_session_ticket = !!res;
  255|      0|	}
  256|       |
  257|  2.22k|	if ((conn->session_resumed || conn->use_session_ticket) &&
  ------------------
  |  Branch (257:7): [True: 0, False: 2.22k]
  |  Branch (257:32): [True: 0, False: 2.22k]
  ------------------
  258|      0|	    tls_derive_keys(conn, NULL, 0)) {
  ------------------
  |  Branch (258:6): [True: 0, False: 0]
  ------------------
  259|      0|		wpa_printf(MSG_DEBUG, "TLSv1: Failed to derive keys");
  260|      0|		tls_alert(conn, TLS_ALERT_LEVEL_FATAL,
  ------------------
  |  |  128|      0|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
  261|      0|			  TLS_ALERT_INTERNAL_ERROR);
  ------------------
  |  |  151|      0|#define TLS_ALERT_INTERNAL_ERROR		80
  ------------------
  262|      0|		return -1;
  263|      0|	}
  264|       |
  265|  2.22k|	*in_len = end - in_data;
  266|       |
  267|  2.22k|	conn->state = (conn->session_resumed || conn->use_session_ticket) ?
  ------------------
  |  Branch (267:17): [True: 0, False: 2.22k]
  |  Branch (267:42): [True: 0, False: 2.22k]
  ------------------
  268|  2.22k|		SERVER_CHANGE_CIPHER_SPEC : SERVER_CERTIFICATE;
  269|       |
  270|  2.22k|	return 0;
  271|       |
  272|    129|decode_error:
  273|    129|	wpa_printf(MSG_DEBUG, "TLSv1: Failed to decode ServerHello");
  274|    129|	tls_alert(conn, TLS_ALERT_LEVEL_FATAL, TLS_ALERT_DECODE_ERROR);
  ------------------
  |  |  128|    129|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
              	tls_alert(conn, TLS_ALERT_LEVEL_FATAL, TLS_ALERT_DECODE_ERROR);
  ------------------
  |  |  146|    129|#define TLS_ALERT_DECODE_ERROR			50
  ------------------
  275|    129|	return -1;
  276|  2.22k|}
tlsv1_client_read.c:tls_version_disabled:
   31|  2.32k|{
   32|  2.32k|	return (((conn->flags & TLS_CONN_DISABLE_TLSv1_0) &&
  ------------------
  |  |  112|  2.32k|#define TLS_CONN_DISABLE_TLSv1_0 BIT(8)
  |  |  ------------------
  |  |  |  |  458|  2.32k|#define BIT(x) (1U << (x))
  |  |  ------------------
  ------------------
  |  Branch (32:11): [True: 0, False: 2.32k]
  ------------------
   33|      0|		 ver == TLS_VERSION_1) ||
  ------------------
  |  |   14|      0|#define TLS_VERSION_1 0x0301 /* TLSv1 */
  ------------------
  |  Branch (33:4): [True: 0, False: 0]
  ------------------
   34|  2.32k|		((conn->flags & TLS_CONN_DISABLE_TLSv1_1) &&
  ------------------
  |  |  109|  2.32k|#define TLS_CONN_DISABLE_TLSv1_1 BIT(5)
  |  |  ------------------
  |  |  |  |  458|  2.32k|#define BIT(x) (1U << (x))
  |  |  ------------------
  ------------------
  |  Branch (34:4): [True: 0, False: 2.32k]
  ------------------
   35|      0|		 ver == TLS_VERSION_1_1) ||
  ------------------
  |  |   15|      0|#define TLS_VERSION_1_1 0x0302 /* TLSv1.1 */
  ------------------
  |  Branch (35:4): [True: 0, False: 0]
  ------------------
   36|  2.32k|		((conn->flags & TLS_CONN_DISABLE_TLSv1_2) &&
  ------------------
  |  |  110|  2.32k|#define TLS_CONN_DISABLE_TLSv1_2 BIT(6)
  |  |  ------------------
  |  |  |  |  458|  2.32k|#define BIT(x) (1U << (x))
  |  |  ------------------
  ------------------
  |  Branch (36:4): [True: 0, False: 2.32k]
  ------------------
   37|      0|		 ver == TLS_VERSION_1_2));
  ------------------
  |  |   16|      0|#define TLS_VERSION_1_2 0x0303 /* TLSv1.2 */
  ------------------
  |  Branch (37:4): [True: 0, False: 0]
  ------------------
   38|  2.32k|}
tlsv1_client_read.c:tls_process_server_hello_extensions:
   43|     35|{
   44|     35|	const u8 *end = pos + len;
   45|       |
   46|     35|	wpa_hexdump(MSG_MSGDUMP, "TLSv1: ServerHello extensions",
   47|     35|		    pos, len);
   48|    480|	while (pos < end) {
  ------------------
  |  Branch (48:9): [True: 469, False: 11]
  ------------------
   49|    469|		u16 ext, elen;
   50|       |
   51|    469|		if (end - pos < 4) {
  ------------------
  |  Branch (51:7): [True: 6, False: 463]
  ------------------
   52|      6|			wpa_printf(MSG_INFO, "TLSv1: Truncated ServerHello extension header");
   53|      6|			return -1;
   54|      6|		}
   55|       |
   56|    463|		ext = WPA_GET_BE16(pos);
   57|    463|		pos += 2;
   58|    463|		elen = WPA_GET_BE16(pos);
   59|    463|		pos += 2;
   60|       |
   61|    463|		if (elen > end - pos) {
  ------------------
  |  Branch (61:7): [True: 18, False: 445]
  ------------------
   62|     18|			wpa_printf(MSG_INFO, "TLSv1: Truncated ServerHello extension");
   63|     18|			return -1;
   64|     18|		}
   65|       |
   66|    445|		wpa_printf(MSG_DEBUG, "TLSv1: ServerHello ExtensionType %u",
   67|    445|			   ext);
   68|    445|		wpa_hexdump(MSG_DEBUG, "TLSv1: ServerHello extension data",
   69|    445|			    pos, elen);
   70|       |
   71|    445|		pos += elen;
   72|    445|	}
   73|       |
   74|     11|	return 0;
   75|     35|}
tlsv1_client_read.c:tls_process_certificate:
  356|  2.21k|{
  357|  2.21k|	const u8 *pos, *end;
  358|  2.21k|	size_t left, len, list_len, cert_len, idx;
  359|  2.21k|	u8 type;
  360|  2.21k|	struct x509_certificate *chain = NULL, *last = NULL, *cert;
  361|  2.21k|	int reason;
  362|       |
  363|  2.21k|	if (ct != TLS_CONTENT_TYPE_HANDSHAKE) {
  ------------------
  |  Branch (363:6): [True: 2, False: 2.21k]
  ------------------
  364|      2|		wpa_printf(MSG_DEBUG, "TLSv1: Expected Handshake; "
  365|      2|			   "received content type 0x%x", ct);
  366|      2|		tls_alert(conn, TLS_ALERT_LEVEL_FATAL,
  ------------------
  |  |  128|      2|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
  367|      2|			  TLS_ALERT_UNEXPECTED_MESSAGE);
  ------------------
  |  |  132|      2|#define TLS_ALERT_UNEXPECTED_MESSAGE		10
  ------------------
  368|      2|		return -1;
  369|      2|	}
  370|       |
  371|  2.21k|	pos = in_data;
  372|  2.21k|	left = *in_len;
  373|       |
  374|  2.21k|	if (left < 4) {
  ------------------
  |  Branch (374:6): [True: 4, False: 2.21k]
  ------------------
  375|      4|		wpa_printf(MSG_DEBUG, "TLSv1: Too short Certificate message "
  376|      4|			   "(len=%lu)", (unsigned long) left);
  377|      4|		tls_alert(conn, TLS_ALERT_LEVEL_FATAL, TLS_ALERT_DECODE_ERROR);
  ------------------
  |  |  128|      4|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
              		tls_alert(conn, TLS_ALERT_LEVEL_FATAL, TLS_ALERT_DECODE_ERROR);
  ------------------
  |  |  146|      4|#define TLS_ALERT_DECODE_ERROR			50
  ------------------
  378|      4|		return -1;
  379|      4|	}
  380|       |
  381|  2.21k|	type = *pos++;
  382|  2.21k|	len = WPA_GET_BE24(pos);
  383|  2.21k|	pos += 3;
  384|  2.21k|	left -= 4;
  385|       |
  386|  2.21k|	if (len > left) {
  ------------------
  |  Branch (386:6): [True: 21, False: 2.19k]
  ------------------
  387|     21|		wpa_printf(MSG_DEBUG, "TLSv1: Unexpected Certificate message "
  388|     21|			   "length (len=%lu != left=%lu)",
  389|     21|			   (unsigned long) len, (unsigned long) left);
  390|     21|		tls_alert(conn, TLS_ALERT_LEVEL_FATAL, TLS_ALERT_DECODE_ERROR);
  ------------------
  |  |  128|     21|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
              		tls_alert(conn, TLS_ALERT_LEVEL_FATAL, TLS_ALERT_DECODE_ERROR);
  ------------------
  |  |  146|     21|#define TLS_ALERT_DECODE_ERROR			50
  ------------------
  391|     21|		return -1;
  392|     21|	}
  393|       |
  394|  2.19k|	if (type == TLS_HANDSHAKE_TYPE_SERVER_KEY_EXCHANGE)
  ------------------
  |  Branch (394:6): [True: 179, False: 2.01k]
  ------------------
  395|    179|		return tls_process_server_key_exchange(conn, ct, in_data,
  396|    179|						       in_len);
  397|  2.01k|	if (type == TLS_HANDSHAKE_TYPE_CERTIFICATE_REQUEST)
  ------------------
  |  Branch (397:6): [True: 43, False: 1.97k]
  ------------------
  398|     43|		return tls_process_certificate_request(conn, ct, in_data,
  399|     43|						       in_len);
  400|  1.97k|	if (type == TLS_HANDSHAKE_TYPE_SERVER_HELLO_DONE)
  ------------------
  |  Branch (400:6): [True: 8, False: 1.96k]
  ------------------
  401|      8|		return tls_process_server_hello_done(conn, ct, in_data,
  402|      8|						     in_len);
  403|  1.96k|	if (type != TLS_HANDSHAKE_TYPE_CERTIFICATE) {
  ------------------
  |  Branch (403:6): [True: 12, False: 1.95k]
  ------------------
  404|     12|		wpa_printf(MSG_DEBUG, "TLSv1: Received unexpected handshake "
  405|     12|			   "message %d (expected Certificate/"
  406|     12|			   "ServerKeyExchange/CertificateRequest/"
  407|     12|			   "ServerHelloDone)", type);
  408|     12|		tls_alert(conn, TLS_ALERT_LEVEL_FATAL,
  ------------------
  |  |  128|     12|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
  409|     12|			  TLS_ALERT_UNEXPECTED_MESSAGE);
  ------------------
  |  |  132|     12|#define TLS_ALERT_UNEXPECTED_MESSAGE		10
  ------------------
  410|     12|		return -1;
  411|     12|	}
  412|       |
  413|  1.95k|	wpa_printf(MSG_DEBUG,
  414|  1.95k|		   "TLSv1: Received Certificate (certificate_list len %lu)",
  415|  1.95k|		   (unsigned long) len);
  416|       |
  417|       |	/*
  418|       |	 * opaque ASN.1Cert<2^24-1>;
  419|       |	 *
  420|       |	 * struct {
  421|       |	 *     ASN.1Cert certificate_list<1..2^24-1>;
  422|       |	 * } Certificate;
  423|       |	 */
  424|       |
  425|  1.95k|	end = pos + len;
  426|       |
  427|  1.95k|	if (end - pos < 3) {
  ------------------
  |  Branch (427:6): [True: 4, False: 1.94k]
  ------------------
  428|      4|		wpa_printf(MSG_DEBUG, "TLSv1: Too short Certificate "
  429|      4|			   "(left=%lu)", (unsigned long) left);
  430|      4|		tls_alert(conn, TLS_ALERT_LEVEL_FATAL, TLS_ALERT_DECODE_ERROR);
  ------------------
  |  |  128|      4|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
              		tls_alert(conn, TLS_ALERT_LEVEL_FATAL, TLS_ALERT_DECODE_ERROR);
  ------------------
  |  |  146|      4|#define TLS_ALERT_DECODE_ERROR			50
  ------------------
  431|      4|		return -1;
  432|      4|	}
  433|       |
  434|  1.94k|	list_len = WPA_GET_BE24(pos);
  435|  1.94k|	pos += 3;
  436|       |
  437|  1.94k|	if ((size_t) (end - pos) != list_len) {
  ------------------
  |  Branch (437:6): [True: 29, False: 1.91k]
  ------------------
  438|     29|		wpa_printf(MSG_DEBUG, "TLSv1: Unexpected certificate_list "
  439|     29|			   "length (len=%lu left=%lu)",
  440|     29|			   (unsigned long) list_len,
  441|     29|			   (unsigned long) (end - pos));
  442|     29|		tls_alert(conn, TLS_ALERT_LEVEL_FATAL, TLS_ALERT_DECODE_ERROR);
  ------------------
  |  |  128|     29|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
              		tls_alert(conn, TLS_ALERT_LEVEL_FATAL, TLS_ALERT_DECODE_ERROR);
  ------------------
  |  |  146|     29|#define TLS_ALERT_DECODE_ERROR			50
  ------------------
  443|     29|		return -1;
  444|     29|	}
  445|       |
  446|  1.91k|	idx = 0;
  447|  3.26k|	while (pos < end) {
  ------------------
  |  Branch (447:9): [True: 2.58k, False: 679]
  ------------------
  448|  2.58k|		if (end - pos < 3) {
  ------------------
  |  Branch (448:7): [True: 2, False: 2.57k]
  ------------------
  449|      2|			wpa_printf(MSG_DEBUG, "TLSv1: Failed to parse "
  450|      2|				   "certificate_list");
  451|      2|			tls_alert(conn, TLS_ALERT_LEVEL_FATAL,
  ------------------
  |  |  128|      2|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
  452|      2|				  TLS_ALERT_DECODE_ERROR);
  ------------------
  |  |  146|      2|#define TLS_ALERT_DECODE_ERROR			50
  ------------------
  453|      2|			x509_certificate_chain_free(chain);
  454|      2|			return -1;
  455|      2|		}
  456|       |
  457|  2.57k|		cert_len = WPA_GET_BE24(pos);
  458|  2.57k|		pos += 3;
  459|       |
  460|  2.57k|		if ((size_t) (end - pos) < cert_len) {
  ------------------
  |  Branch (460:7): [True: 41, False: 2.53k]
  ------------------
  461|     41|			wpa_printf(MSG_DEBUG, "TLSv1: Unexpected certificate "
  462|     41|				   "length (len=%lu left=%lu)",
  463|     41|				   (unsigned long) cert_len,
  464|     41|				   (unsigned long) (end - pos));
  465|     41|			tls_alert(conn, TLS_ALERT_LEVEL_FATAL,
  ------------------
  |  |  128|     41|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
  466|     41|				  TLS_ALERT_DECODE_ERROR);
  ------------------
  |  |  146|     41|#define TLS_ALERT_DECODE_ERROR			50
  ------------------
  467|     41|			x509_certificate_chain_free(chain);
  468|     41|			return -1;
  469|     41|		}
  470|       |
  471|  2.53k|		wpa_printf(MSG_DEBUG, "TLSv1: Certificate %lu (len %lu)",
  472|  2.53k|			   (unsigned long) idx, (unsigned long) cert_len);
  473|       |
  474|  2.53k|		if (idx == 0) {
  ------------------
  |  Branch (474:7): [True: 1.87k, False: 660]
  ------------------
  475|  1.87k|			crypto_public_key_free(conn->server_rsa_key);
  476|  1.87k|			if (tls_parse_cert(pos, cert_len,
  ------------------
  |  Branch (476:8): [True: 1.12k, False: 749]
  ------------------
  477|  1.87k|					   &conn->server_rsa_key)) {
  478|  1.12k|				wpa_printf(MSG_DEBUG, "TLSv1: Failed to parse "
  479|  1.12k|					   "the certificate");
  480|  1.12k|				tls_alert(conn, TLS_ALERT_LEVEL_FATAL,
  ------------------
  |  |  128|  1.12k|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
  481|  1.12k|					  TLS_ALERT_BAD_CERTIFICATE);
  ------------------
  |  |  138|  1.12k|#define TLS_ALERT_BAD_CERTIFICATE		42
  ------------------
  482|  1.12k|				x509_certificate_chain_free(chain);
  483|  1.12k|				return -1;
  484|  1.12k|			}
  485|  1.87k|		}
  486|       |
  487|  1.40k|		cert = x509_certificate_parse(pos, cert_len);
  488|  1.40k|		if (cert == NULL) {
  ------------------
  |  Branch (488:7): [True: 66, False: 1.34k]
  ------------------
  489|     66|			wpa_printf(MSG_DEBUG, "TLSv1: Failed to parse "
  490|     66|				   "the certificate");
  491|     66|			tls_alert(conn, TLS_ALERT_LEVEL_FATAL,
  ------------------
  |  |  128|     66|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
  492|     66|				  TLS_ALERT_BAD_CERTIFICATE);
  ------------------
  |  |  138|     66|#define TLS_ALERT_BAD_CERTIFICATE		42
  ------------------
  493|     66|			x509_certificate_chain_free(chain);
  494|     66|			return -1;
  495|     66|		}
  496|       |
  497|  1.34k|		tls_peer_cert_event(conn, idx, cert);
  498|       |
  499|  1.34k|		if (last == NULL)
  ------------------
  |  Branch (499:7): [True: 749, False: 594]
  ------------------
  500|    749|			chain = cert;
  501|    594|		else
  502|    594|			last->next = cert;
  503|  1.34k|		last = cert;
  504|       |
  505|  1.34k|		idx++;
  506|  1.34k|		pos += cert_len;
  507|  1.34k|	}
  508|       |
  509|    679|	if (conn->cred && conn->cred->server_cert_only && chain) {
  ------------------
  |  Branch (509:6): [True: 0, False: 679]
  |  Branch (509:20): [True: 0, False: 0]
  |  Branch (509:52): [True: 0, False: 0]
  ------------------
  510|      0|		u8 hash[SHA256_MAC_LEN];
  511|      0|		char buf[128];
  512|       |
  513|      0|		wpa_printf(MSG_DEBUG,
  514|      0|			   "TLSv1: Validate server certificate hash");
  515|      0|		x509_name_string(&chain->subject, buf, sizeof(buf));
  516|      0|		wpa_printf(MSG_DEBUG, "TLSv1: 0: %s", buf);
  517|      0|		if (sha256_vector(1, &chain->cert_start, &chain->cert_len,
  ------------------
  |  Branch (517:7): [True: 0, False: 0]
  ------------------
  518|      0|				  hash) < 0 ||
  519|      0|		    os_memcmp(conn->cred->srv_cert_hash, hash,
  ------------------
  |  |  532|      0|#define os_memcmp(s1, s2, n) memcmp((s1), (s2), (n))
  ------------------
  |  Branch (519:7): [True: 0, False: 0]
  ------------------
  520|      0|			      SHA256_MAC_LEN) != 0) {
  521|      0|			wpa_printf(MSG_DEBUG,
  522|      0|				   "TLSv1: Server certificate hash mismatch");
  523|      0|			wpa_hexdump(MSG_MSGDUMP, "TLSv1: SHA256 hash",
  524|      0|				    hash, SHA256_MAC_LEN);
  ------------------
  |  |   12|      0|#define SHA256_MAC_LEN 32
  ------------------
  525|      0|			if (conn->event_cb) {
  ------------------
  |  Branch (525:8): [True: 0, False: 0]
  ------------------
  526|      0|				union tls_event_data ev;
  527|       |
  528|      0|				os_memset(&ev, 0, sizeof(ev));
  ------------------
  |  |  529|      0|#define os_memset(s, c, n) memset(s, c, n)
  ------------------
  529|      0|				ev.cert_fail.reason = TLS_FAIL_UNSPECIFIED;
  530|      0|				ev.cert_fail.reason_txt =
  531|      0|					"Server certificate mismatch";
  532|      0|				ev.cert_fail.subject = buf;
  533|      0|				conn->event_cb(conn->cb_ctx,
  534|      0|					       TLS_CERT_CHAIN_FAILURE, &ev);
  535|      0|			}
  536|      0|			tls_alert(conn, TLS_ALERT_LEVEL_FATAL,
  ------------------
  |  |  128|      0|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
  537|      0|				  TLS_ALERT_BAD_CERTIFICATE);
  ------------------
  |  |  138|      0|#define TLS_ALERT_BAD_CERTIFICATE		42
  ------------------
  538|      0|			x509_certificate_chain_free(chain);
  539|      0|			return -1;
  540|      0|		}
  541|    679|	} else if (conn->cred && conn->cred->cert_probe) {
  ------------------
  |  Branch (541:13): [True: 0, False: 679]
  |  Branch (541:27): [True: 0, False: 0]
  ------------------
  542|      0|		wpa_printf(MSG_DEBUG,
  543|      0|			   "TLSv1: Reject server certificate on probe-only run");
  544|      0|		if (conn->event_cb) {
  ------------------
  |  Branch (544:7): [True: 0, False: 0]
  ------------------
  545|      0|			union tls_event_data ev;
  546|      0|			char buf[128];
  547|       |
  548|      0|			os_memset(&ev, 0, sizeof(ev));
  ------------------
  |  |  529|      0|#define os_memset(s, c, n) memset(s, c, n)
  ------------------
  549|      0|			ev.cert_fail.reason = TLS_FAIL_SERVER_CHAIN_PROBE;
  550|      0|			ev.cert_fail.reason_txt =
  551|      0|				"Server certificate chain probe";
  552|      0|			if (chain) {
  ------------------
  |  Branch (552:8): [True: 0, False: 0]
  ------------------
  553|      0|				x509_name_string(&chain->subject, buf,
  554|      0|						 sizeof(buf));
  555|      0|				ev.cert_fail.subject = buf;
  556|      0|			}
  557|      0|			conn->event_cb(conn->cb_ctx, TLS_CERT_CHAIN_FAILURE,
  558|      0|				       &ev);
  559|      0|		}
  560|      0|		tls_alert(conn, TLS_ALERT_LEVEL_FATAL,
  ------------------
  |  |  128|      0|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
  561|      0|			  TLS_ALERT_BAD_CERTIFICATE);
  ------------------
  |  |  138|      0|#define TLS_ALERT_BAD_CERTIFICATE		42
  ------------------
  562|      0|		x509_certificate_chain_free(chain);
  563|      0|		return -1;
  564|    679|	} else if (conn->cred && conn->cred->ca_cert_verify &&
  ------------------
  |  Branch (564:13): [True: 0, False: 679]
  |  Branch (564:27): [True: 0, False: 0]
  ------------------
  565|      0|		   x509_certificate_chain_validate(
  ------------------
  |  Branch (565:6): [True: 0, False: 0]
  ------------------
  566|      0|			   conn->cred->trusted_certs, chain, &reason,
  567|      0|			   !!(conn->flags & TLS_CONN_DISABLE_TIME_CHECKS))
  ------------------
  |  |  105|      0|#define TLS_CONN_DISABLE_TIME_CHECKS BIT(1)
  |  |  ------------------
  |  |  |  |  458|      0|#define BIT(x) (1U << (x))
  |  |  ------------------
  ------------------
  568|      0|		   < 0) {
  569|      0|		int tls_reason;
  570|      0|		wpa_printf(MSG_DEBUG, "TLSv1: Server certificate chain "
  571|      0|			   "validation failed (reason=%d)", reason);
  572|      0|		switch (reason) {
  573|      0|		case X509_VALIDATE_BAD_CERTIFICATE:
  ------------------
  |  Branch (573:3): [True: 0, False: 0]
  ------------------
  574|      0|			tls_reason = TLS_ALERT_BAD_CERTIFICATE;
  ------------------
  |  |  138|      0|#define TLS_ALERT_BAD_CERTIFICATE		42
  ------------------
  575|      0|			tls_cert_chain_failure_event(
  576|      0|				conn, 0, chain, TLS_FAIL_BAD_CERTIFICATE,
  577|      0|				"bad certificate");
  578|      0|			break;
  579|      0|		case X509_VALIDATE_UNSUPPORTED_CERTIFICATE:
  ------------------
  |  Branch (579:3): [True: 0, False: 0]
  ------------------
  580|      0|			tls_reason = TLS_ALERT_UNSUPPORTED_CERTIFICATE;
  ------------------
  |  |  139|      0|#define TLS_ALERT_UNSUPPORTED_CERTIFICATE	43
  ------------------
  581|      0|			break;
  582|      0|		case X509_VALIDATE_CERTIFICATE_REVOKED:
  ------------------
  |  Branch (582:3): [True: 0, False: 0]
  ------------------
  583|      0|			tls_reason = TLS_ALERT_CERTIFICATE_REVOKED;
  ------------------
  |  |  140|      0|#define TLS_ALERT_CERTIFICATE_REVOKED		44
  ------------------
  584|      0|			tls_cert_chain_failure_event(
  585|      0|				conn, 0, chain, TLS_FAIL_REVOKED,
  586|      0|				"certificate revoked");
  587|      0|			break;
  588|      0|		case X509_VALIDATE_CERTIFICATE_EXPIRED:
  ------------------
  |  Branch (588:3): [True: 0, False: 0]
  ------------------
  589|      0|			tls_reason = TLS_ALERT_CERTIFICATE_EXPIRED;
  ------------------
  |  |  141|      0|#define TLS_ALERT_CERTIFICATE_EXPIRED		45
  ------------------
  590|      0|			tls_cert_chain_failure_event(
  591|      0|				conn, 0, chain, TLS_FAIL_EXPIRED,
  592|      0|				"certificate has expired or is not yet valid");
  593|      0|			break;
  594|      0|		case X509_VALIDATE_CERTIFICATE_UNKNOWN:
  ------------------
  |  Branch (594:3): [True: 0, False: 0]
  ------------------
  595|      0|			tls_reason = TLS_ALERT_CERTIFICATE_UNKNOWN;
  ------------------
  |  |  142|      0|#define TLS_ALERT_CERTIFICATE_UNKNOWN		46
  ------------------
  596|      0|			break;
  597|      0|		case X509_VALIDATE_UNKNOWN_CA:
  ------------------
  |  Branch (597:3): [True: 0, False: 0]
  ------------------
  598|      0|			tls_reason = TLS_ALERT_UNKNOWN_CA;
  ------------------
  |  |  144|      0|#define TLS_ALERT_UNKNOWN_CA			48
  ------------------
  599|      0|			tls_cert_chain_failure_event(
  600|      0|				conn, 0, chain, TLS_FAIL_UNTRUSTED,
  601|      0|				"unknown CA");
  602|      0|			break;
  603|      0|		default:
  ------------------
  |  Branch (603:3): [True: 0, False: 0]
  ------------------
  604|      0|			tls_reason = TLS_ALERT_BAD_CERTIFICATE;
  ------------------
  |  |  138|      0|#define TLS_ALERT_BAD_CERTIFICATE		42
  ------------------
  605|      0|			break;
  606|      0|		}
  607|      0|		tls_alert(conn, TLS_ALERT_LEVEL_FATAL, tls_reason);
  ------------------
  |  |  128|      0|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
  608|      0|		x509_certificate_chain_free(chain);
  609|      0|		return -1;
  610|      0|	}
  611|       |
  612|    679|	if (conn->cred && !conn->cred->server_cert_only && chain &&
  ------------------
  |  Branch (612:6): [True: 0, False: 679]
  |  Branch (612:20): [True: 0, False: 0]
  |  Branch (612:53): [True: 0, False: 0]
  ------------------
  613|      0|	    (chain->extensions_present & X509_EXT_EXT_KEY_USAGE) &&
  ------------------
  |  |   76|      0|#define X509_EXT_EXT_KEY_USAGE			(1 << 5)
  ------------------
  |  Branch (613:6): [True: 0, False: 0]
  ------------------
  614|      0|	    !(chain->ext_key_usage &
  ------------------
  |  Branch (614:6): [True: 0, False: 0]
  ------------------
  615|      0|	      (X509_EXT_KEY_USAGE_ANY | X509_EXT_KEY_USAGE_SERVER_AUTH))) {
  ------------------
  |  |   97|      0|#define X509_EXT_KEY_USAGE_ANY			(1 << 0)
  ------------------
              	      (X509_EXT_KEY_USAGE_ANY | X509_EXT_KEY_USAGE_SERVER_AUTH))) {
  ------------------
  |  |   98|      0|#define X509_EXT_KEY_USAGE_SERVER_AUTH		(1 << 1)
  ------------------
  616|      0|		tls_cert_chain_failure_event(
  617|      0|			conn, 0, chain, TLS_FAIL_BAD_CERTIFICATE,
  618|      0|			"certificate not allowed for server authentication");
  619|      0|		tls_alert(conn, TLS_ALERT_LEVEL_FATAL,
  ------------------
  |  |  128|      0|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
  620|      0|			  TLS_ALERT_BAD_CERTIFICATE);
  ------------------
  |  |  138|      0|#define TLS_ALERT_BAD_CERTIFICATE		42
  ------------------
  621|      0|		x509_certificate_chain_free(chain);
  622|      0|		return -1;
  623|      0|	}
  624|       |
  625|    679|	if (conn->flags & TLS_CONN_REQUEST_OCSP) {
  ------------------
  |  |  107|    679|#define TLS_CONN_REQUEST_OCSP BIT(3)
  |  |  ------------------
  |  |  |  |  458|    679|#define BIT(x) (1U << (x))
  |  |  ------------------
  ------------------
  |  Branch (625:6): [True: 0, False: 679]
  ------------------
  626|      0|		x509_certificate_chain_free(conn->server_cert);
  627|      0|		conn->server_cert = chain;
  628|    679|	} else {
  629|    679|		x509_certificate_chain_free(chain);
  630|    679|	}
  631|       |
  632|    679|	*in_len = end - in_data;
  633|       |
  634|    679|	conn->state = SERVER_KEY_EXCHANGE;
  635|       |
  636|    679|	return 0;
  637|    679|}
tlsv1_client_read.c:tls_peer_cert_event:
  281|  1.34k|{
  282|  1.34k|	union tls_event_data ev;
  283|  1.34k|	struct wpabuf *cert_buf = NULL;
  284|       |#ifdef CONFIG_SHA256
  285|       |	u8 hash[32];
  286|       |#endif /* CONFIG_SHA256 */
  287|  1.34k|	char subject[128];
  288|       |
  289|  1.34k|	if (!conn->event_cb)
  ------------------
  |  Branch (289:6): [True: 1.34k, False: 0]
  ------------------
  290|  1.34k|		return;
  291|       |
  292|      0|	os_memset(&ev, 0, sizeof(ev));
  ------------------
  |  |  529|      0|#define os_memset(s, c, n) memset(s, c, n)
  ------------------
  293|      0|	if ((conn->cred && conn->cred->cert_probe) || conn->cert_in_cb) {
  ------------------
  |  Branch (293:7): [True: 0, False: 0]
  |  Branch (293:21): [True: 0, False: 0]
  |  Branch (293:48): [True: 0, False: 0]
  ------------------
  294|      0|		cert_buf = wpabuf_alloc_copy(cert->cert_start,
  295|      0|					     cert->cert_len);
  296|      0|		ev.peer_cert.cert = cert_buf;
  297|      0|	}
  298|       |#ifdef CONFIG_SHA256
  299|       |	if (cert_buf) {
  300|       |		const u8 *addr[1];
  301|       |		size_t len[1];
  302|       |		addr[0] = wpabuf_head(cert_buf);
  303|       |		len[0] = wpabuf_len(cert_buf);
  304|       |		if (sha256_vector(1, addr, len, hash) == 0) {
  305|       |			ev.peer_cert.hash = hash;
  306|       |			ev.peer_cert.hash_len = sizeof(hash);
  307|       |		}
  308|       |	}
  309|       |#endif /* CONFIG_SHA256 */
  310|       |
  311|      0|	ev.peer_cert.depth = depth;
  312|      0|	x509_name_string(&cert->subject, subject, sizeof(subject));
  313|      0|	ev.peer_cert.subject = subject;
  314|       |
  315|      0|	if (cert->extensions_present & X509_EXT_CERTIFICATE_POLICY) {
  ------------------
  |  |   77|      0|#define X509_EXT_CERTIFICATE_POLICY		(1 << 6)
  ------------------
  |  Branch (315:6): [True: 0, False: 0]
  ------------------
  316|      0|		if (cert->certificate_policy & X509_EXT_CERT_POLICY_TOD_STRICT)
  ------------------
  |  |  105|      0|#define X509_EXT_CERT_POLICY_TOD_STRICT		(1 << 1)
  ------------------
  |  Branch (316:7): [True: 0, False: 0]
  ------------------
  317|      0|			ev.peer_cert.tod = 1;
  318|      0|		else if (cert->certificate_policy &
  ------------------
  |  Branch (318:12): [True: 0, False: 0]
  ------------------
  319|      0|			 X509_EXT_CERT_POLICY_TOD_TOFU)
  ------------------
  |  |  106|      0|#define X509_EXT_CERT_POLICY_TOD_TOFU		(1 << 2)
  ------------------
  320|      0|			ev.peer_cert.tod = 2;
  321|      0|	}
  322|       |
  323|      0|	conn->event_cb(conn->cb_ctx, TLS_PEER_CERTIFICATE, &ev);
  324|      0|	wpabuf_free(cert_buf);
  325|      0|}
tlsv1_client_read.c:tls_process_server_key_exchange:
 1024|    853|{
 1025|    853|	const u8 *pos, *end;
 1026|    853|	size_t left, len;
 1027|    853|	u8 type;
 1028|    853|	const struct tls_cipher_suite *suite;
 1029|       |
 1030|    853|	if (ct != TLS_CONTENT_TYPE_HANDSHAKE) {
  ------------------
  |  Branch (1030:6): [True: 2, False: 851]
  ------------------
 1031|      2|		wpa_printf(MSG_DEBUG, "TLSv1: Expected Handshake; "
 1032|      2|			   "received content type 0x%x", ct);
 1033|      2|		tls_alert(conn, TLS_ALERT_LEVEL_FATAL,
  ------------------
  |  |  128|      2|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
 1034|      2|			  TLS_ALERT_UNEXPECTED_MESSAGE);
  ------------------
  |  |  132|      2|#define TLS_ALERT_UNEXPECTED_MESSAGE		10
  ------------------
 1035|      2|		return -1;
 1036|      2|	}
 1037|       |
 1038|    851|	pos = in_data;
 1039|    851|	left = *in_len;
 1040|       |
 1041|    851|	if (left < 4) {
  ------------------
  |  Branch (1041:6): [True: 2, False: 849]
  ------------------
 1042|      2|		wpa_printf(MSG_DEBUG, "TLSv1: Too short ServerKeyExchange "
 1043|      2|			   "(Left=%lu)", (unsigned long) left);
 1044|      2|		tls_alert(conn, TLS_ALERT_LEVEL_FATAL, TLS_ALERT_DECODE_ERROR);
  ------------------
  |  |  128|      2|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
              		tls_alert(conn, TLS_ALERT_LEVEL_FATAL, TLS_ALERT_DECODE_ERROR);
  ------------------
  |  |  146|      2|#define TLS_ALERT_DECODE_ERROR			50
  ------------------
 1045|      2|		return -1;
 1046|      2|	}
 1047|       |
 1048|    849|	type = *pos++;
 1049|    849|	len = WPA_GET_BE24(pos);
 1050|    849|	pos += 3;
 1051|    849|	left -= 4;
 1052|       |
 1053|    849|	if (len > left) {
  ------------------
  |  Branch (1053:6): [True: 13, False: 836]
  ------------------
 1054|     13|		wpa_printf(MSG_DEBUG, "TLSv1: Mismatch in ServerKeyExchange "
 1055|     13|			   "length (len=%lu != left=%lu)",
 1056|     13|			   (unsigned long) len, (unsigned long) left);
 1057|     13|		tls_alert(conn, TLS_ALERT_LEVEL_FATAL, TLS_ALERT_DECODE_ERROR);
  ------------------
  |  |  128|     13|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
              		tls_alert(conn, TLS_ALERT_LEVEL_FATAL, TLS_ALERT_DECODE_ERROR);
  ------------------
  |  |  146|     13|#define TLS_ALERT_DECODE_ERROR			50
  ------------------
 1058|     13|		return -1;
 1059|     13|	}
 1060|       |
 1061|    836|	end = pos + len;
 1062|       |
 1063|    836|	if ((conn->flags & TLS_CONN_REQUEST_OCSP) &&
  ------------------
  |  |  107|    836|#define TLS_CONN_REQUEST_OCSP BIT(3)
  |  |  ------------------
  |  |  |  |  458|    836|#define BIT(x) (1U << (x))
  |  |  ------------------
  ------------------
  |  Branch (1063:6): [True: 0, False: 836]
  ------------------
 1064|      0|	    type == TLS_HANDSHAKE_TYPE_CERTIFICATE_STATUS)
  ------------------
  |  Branch (1064:6): [True: 0, False: 0]
  ------------------
 1065|      0|		return tls_process_certificate_status(conn, ct, in_data,
 1066|      0|						      in_len);
 1067|    836|	if (type == TLS_HANDSHAKE_TYPE_CERTIFICATE_REQUEST)
  ------------------
  |  Branch (1067:6): [True: 62, False: 774]
  ------------------
 1068|     62|		return tls_process_certificate_request(conn, ct, in_data,
 1069|     62|						       in_len);
 1070|    774|	if (type == TLS_HANDSHAKE_TYPE_SERVER_HELLO_DONE)
  ------------------
  |  Branch (1070:6): [True: 282, False: 492]
  ------------------
 1071|    282|		return tls_process_server_hello_done(conn, ct, in_data,
 1072|    282|						     in_len);
 1073|    492|	if (type != TLS_HANDSHAKE_TYPE_SERVER_KEY_EXCHANGE) {
  ------------------
  |  Branch (1073:6): [True: 8, False: 484]
  ------------------
 1074|      8|		wpa_printf(MSG_DEBUG, "TLSv1: Received unexpected handshake "
 1075|      8|			   "message %d (expected ServerKeyExchange/"
 1076|      8|			   "CertificateRequest/ServerHelloDone%s)", type,
 1077|      8|			   (conn->flags & TLS_CONN_REQUEST_OCSP) ?
  ------------------
  |  |  107|      8|#define TLS_CONN_REQUEST_OCSP BIT(3)
  |  |  ------------------
  |  |  |  |  458|      8|#define BIT(x) (1U << (x))
  |  |  ------------------
  ------------------
  |  Branch (1077:7): [True: 0, False: 8]
  ------------------
 1078|      8|			   "/CertificateStatus" : "");
 1079|      8|		tls_alert(conn, TLS_ALERT_LEVEL_FATAL,
  ------------------
  |  |  128|      8|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
 1080|      8|			  TLS_ALERT_UNEXPECTED_MESSAGE);
  ------------------
  |  |  132|      8|#define TLS_ALERT_UNEXPECTED_MESSAGE		10
  ------------------
 1081|      8|		return -1;
 1082|      8|	}
 1083|       |
 1084|    484|	wpa_printf(MSG_DEBUG, "TLSv1: Received ServerKeyExchange");
 1085|       |
 1086|    484|	if (!tls_server_key_exchange_allowed(conn->rl.cipher_suite)) {
  ------------------
  |  Branch (1086:6): [True: 5, False: 479]
  ------------------
 1087|      5|		wpa_printf(MSG_DEBUG, "TLSv1: ServerKeyExchange not allowed "
 1088|      5|			   "with the selected cipher suite");
 1089|      5|		tls_alert(conn, TLS_ALERT_LEVEL_FATAL,
  ------------------
  |  |  128|      5|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
 1090|      5|			  TLS_ALERT_UNEXPECTED_MESSAGE);
  ------------------
  |  |  132|      5|#define TLS_ALERT_UNEXPECTED_MESSAGE		10
  ------------------
 1091|      5|		return -1;
 1092|      5|	}
 1093|       |
 1094|    479|	wpa_hexdump(MSG_DEBUG, "TLSv1: ServerKeyExchange", pos, len);
 1095|    479|	suite = tls_get_cipher_suite(conn->rl.cipher_suite);
 1096|    479|	if (suite && (suite->key_exchange == TLS_KEY_X_DH_anon ||
  ------------------
  |  Branch (1096:6): [True: 479, False: 0]
  |  Branch (1096:16): [True: 0, False: 479]
  ------------------
 1097|    479|		      suite->key_exchange == TLS_KEY_X_DHE_RSA)) {
  ------------------
  |  Branch (1097:9): [True: 479, False: 0]
  ------------------
 1098|    479|		if (tlsv1_process_diffie_hellman(conn, pos, len,
  ------------------
  |  Branch (1098:7): [True: 405, False: 74]
  ------------------
 1099|    479|						 suite->key_exchange) < 0) {
 1100|    405|			tls_alert(conn, TLS_ALERT_LEVEL_FATAL,
  ------------------
  |  |  128|    405|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
 1101|    405|				  TLS_ALERT_DECODE_ERROR);
  ------------------
  |  |  146|    405|#define TLS_ALERT_DECODE_ERROR			50
  ------------------
 1102|    405|			return -1;
 1103|    405|		}
 1104|    479|	} else {
 1105|      0|		wpa_printf(MSG_DEBUG, "TLSv1: UnexpectedServerKeyExchange");
 1106|      0|		tls_alert(conn, TLS_ALERT_LEVEL_FATAL,
  ------------------
  |  |  128|      0|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
 1107|      0|			  TLS_ALERT_UNEXPECTED_MESSAGE);
  ------------------
  |  |  132|      0|#define TLS_ALERT_UNEXPECTED_MESSAGE		10
  ------------------
 1108|      0|		return -1;
 1109|      0|	}
 1110|       |
 1111|     74|	*in_len = end - in_data;
 1112|       |
 1113|     74|	conn->state = SERVER_CERTIFICATE_REQUEST;
 1114|       |
 1115|     74|	return 0;
 1116|    479|}
tlsv1_client_read.c:tlsv1_process_diffie_hellman:
  667|    479|{
  668|    479|	const u8 *pos, *end, *server_params, *server_params_end;
  669|    479|	u8 alert;
  670|    479|	unsigned int bits;
  671|    479|	u16 val;
  672|       |
  673|    479|	tlsv1_client_free_dh(conn);
  674|       |
  675|    479|	pos = buf;
  676|    479|	end = buf + len;
  677|       |
  678|    479|	if (end - pos < 3)
  ------------------
  |  Branch (678:6): [True: 6, False: 473]
  ------------------
  679|      6|		goto fail;
  680|    473|	server_params = pos;
  681|    473|	val = WPA_GET_BE16(pos);
  682|    473|	pos += 2;
  683|    473|	if (val == 0 || val > (size_t) (end - pos)) {
  ------------------
  |  Branch (683:6): [True: 2, False: 471]
  |  Branch (683:18): [True: 16, False: 455]
  ------------------
  684|     18|		wpa_printf(MSG_DEBUG, "TLSv1: Invalid dh_p length %u", val);
  685|     18|		goto fail;
  686|     18|	}
  687|    455|	conn->dh_p_len = val;
  688|    455|	bits = count_bits(pos, conn->dh_p_len);
  689|    455|	if (bits < 768) {
  ------------------
  |  Branch (689:6): [True: 23, False: 432]
  ------------------
  690|     23|		wpa_printf(MSG_INFO, "TLSv1: Reject under 768-bit DH prime (insecure; only %u bits)",
  691|     23|			   bits);
  692|     23|		wpa_hexdump(MSG_DEBUG, "TLSv1: Rejected DH prime",
  693|     23|			    pos, conn->dh_p_len);
  694|     23|		goto fail;
  695|     23|	}
  696|    432|	conn->dh_p = os_memdup(pos, conn->dh_p_len);
  697|    432|	if (conn->dh_p == NULL)
  ------------------
  |  Branch (697:6): [True: 0, False: 432]
  ------------------
  698|      0|		goto fail;
  699|    432|	pos += conn->dh_p_len;
  700|    432|	wpa_hexdump(MSG_DEBUG, "TLSv1: DH p (prime)",
  701|    432|		    conn->dh_p, conn->dh_p_len);
  702|       |
  703|    432|	if (end - pos < 3)
  ------------------
  |  Branch (703:6): [True: 1, False: 431]
  ------------------
  704|      1|		goto fail;
  705|    431|	val = WPA_GET_BE16(pos);
  706|    431|	pos += 2;
  707|    431|	if (val == 0 || val > (size_t) (end - pos))
  ------------------
  |  Branch (707:6): [True: 1, False: 430]
  |  Branch (707:18): [True: 17, False: 413]
  ------------------
  708|     18|		goto fail;
  709|    413|	conn->dh_g_len = val;
  710|    413|	conn->dh_g = os_memdup(pos, conn->dh_g_len);
  711|    413|	if (conn->dh_g == NULL)
  ------------------
  |  Branch (711:6): [True: 0, False: 413]
  ------------------
  712|      0|		goto fail;
  713|    413|	pos += conn->dh_g_len;
  714|    413|	wpa_hexdump(MSG_DEBUG, "TLSv1: DH g (generator)",
  715|    413|		    conn->dh_g, conn->dh_g_len);
  716|    413|	if (conn->dh_g_len == 1 && conn->dh_g[0] < 2)
  ------------------
  |  Branch (716:6): [True: 248, False: 165]
  |  Branch (716:29): [True: 2, False: 246]
  ------------------
  717|      2|		goto fail;
  718|       |
  719|    411|	if (end - pos < 3)
  ------------------
  |  Branch (719:6): [True: 5, False: 406]
  ------------------
  720|      5|		goto fail;
  721|    406|	val = WPA_GET_BE16(pos);
  722|    406|	pos += 2;
  723|    406|	if (val == 0 || val > (size_t) (end - pos))
  ------------------
  |  Branch (723:6): [True: 5, False: 401]
  |  Branch (723:18): [True: 20, False: 381]
  ------------------
  724|     25|		goto fail;
  725|    381|	conn->dh_ys_len = val;
  726|    381|	conn->dh_ys = os_memdup(pos, conn->dh_ys_len);
  727|    381|	if (conn->dh_ys == NULL)
  ------------------
  |  Branch (727:6): [True: 0, False: 381]
  ------------------
  728|      0|		goto fail;
  729|    381|	pos += conn->dh_ys_len;
  730|    381|	wpa_hexdump(MSG_DEBUG, "TLSv1: DH Ys (server's public value)",
  731|    381|		    conn->dh_ys, conn->dh_ys_len);
  732|    381|	server_params_end = pos;
  733|       |
  734|    381|	if (key_exchange == TLS_KEY_X_DHE_RSA) {
  ------------------
  |  Branch (734:6): [True: 381, False: 0]
  ------------------
  735|    381|		u8 hash[64];
  736|    381|		int hlen;
  737|       |
  738|    381|		if (conn->rl.tls_version == TLS_VERSION_1_2) {
  ------------------
  |  |   16|    381|#define TLS_VERSION_1_2 0x0303 /* TLSv1.2 */
  ------------------
  |  Branch (738:7): [True: 275, False: 106]
  ------------------
  739|    275|#ifdef CONFIG_TLSV12
  740|       |			/*
  741|       |			 * RFC 5246, 4.7:
  742|       |			 * TLS v1.2 adds explicit indication of the used
  743|       |			 * signature and hash algorithms.
  744|       |			 *
  745|       |			 * struct {
  746|       |			 *   HashAlgorithm hash;
  747|       |			 *   SignatureAlgorithm signature;
  748|       |			 * } SignatureAndHashAlgorithm;
  749|       |			 */
  750|    275|			if (end - pos < 2)
  ------------------
  |  Branch (750:8): [True: 2, False: 273]
  ------------------
  751|      2|				goto fail;
  752|    273|			if ((pos[0] != TLS_HASH_ALG_SHA256 &&
  ------------------
  |  Branch (752:9): [True: 133, False: 140]
  ------------------
  753|    133|			     pos[0] != TLS_HASH_ALG_SHA384 &&
  ------------------
  |  Branch (753:9): [True: 18, False: 115]
  ------------------
  754|     18|			     pos[0] != TLS_HASH_ALG_SHA512) ||
  ------------------
  |  Branch (754:9): [True: 14, False: 4]
  ------------------
  755|    259|			    pos[1] != TLS_SIGN_ALG_RSA) {
  ------------------
  |  Branch (755:8): [True: 7, False: 252]
  ------------------
  756|     21|				wpa_printf(MSG_DEBUG, "TLSv1.2: Unsupported hash(%u)/signature(%u) algorithm",
  757|     21|					   pos[0], pos[1]);
  758|     21|				goto fail;
  759|     21|			}
  760|       |
  761|    252|			hlen = tlsv12_key_x_server_params_hash(
  762|    252|				conn->rl.tls_version, pos[0],
  763|    252|				conn->client_random,
  764|    252|				conn->server_random, server_params,
  765|    252|				server_params_end - server_params, hash);
  766|    252|			pos += 2;
  767|       |#else /* CONFIG_TLSV12 */
  768|       |			goto fail;
  769|       |#endif /* CONFIG_TLSV12 */
  770|    252|		} else {
  771|    106|			hlen = tls_key_x_server_params_hash(
  772|    106|				conn->rl.tls_version, conn->client_random,
  773|    106|				conn->server_random, server_params,
  774|    106|				server_params_end - server_params, hash,
  775|    106|				sizeof(hash));
  776|    106|		}
  777|       |
  778|    358|		if (hlen < 0)
  ------------------
  |  Branch (778:7): [True: 1, False: 357]
  ------------------
  779|      1|			goto fail;
  780|    357|		wpa_hexdump(MSG_MSGDUMP, "TLSv1: ServerKeyExchange hash",
  781|    357|			    hash, hlen);
  782|       |
  783|    357|		if (tls_verify_signature(conn->rl.tls_version,
  ------------------
  |  Branch (783:7): [True: 283, False: 74]
  ------------------
  784|    357|					 conn->server_rsa_key,
  785|    357|					 hash, hlen, pos, end - pos,
  786|    357|					 &alert) < 0)
  787|    283|			goto fail;
  788|    357|	}
  789|       |
  790|     74|	return 0;
  791|       |
  792|    405|fail:
  793|    405|	wpa_printf(MSG_DEBUG, "TLSv1: Processing DH params failed");
  794|    405|	tlsv1_client_free_dh(conn);
  795|    405|	return -1;
  796|    381|}
tlsv1_client_read.c:count_bits:
  641|    455|{
  642|    455|	size_t i;
  643|    455|	unsigned int bits;
  644|    455|	u8 tmp;
  645|       |
  646|  1.31k|	for (i = 0; i < len; i++) {
  ------------------
  |  Branch (646:14): [True: 1.31k, False: 4]
  ------------------
  647|  1.31k|		if (val[i])
  ------------------
  |  Branch (647:7): [True: 451, False: 863]
  ------------------
  648|    451|			break;
  649|  1.31k|	}
  650|    455|	if (i == len)
  ------------------
  |  Branch (650:6): [True: 4, False: 451]
  ------------------
  651|      4|		return 0;
  652|       |
  653|    451|	bits = (len - i - 1) * 8;
  654|    451|	tmp = val[i];
  655|  3.42k|	while (tmp) {
  ------------------
  |  Branch (655:9): [True: 2.97k, False: 451]
  ------------------
  656|  2.97k|		bits++;
  657|  2.97k|		tmp >>= 1;
  658|  2.97k|	}
  659|       |
  660|    451|	return bits;
  661|    455|}
tlsv1_client_read.c:tls_process_certificate_request:
 1121|    179|{
 1122|    179|	const u8 *pos, *end;
 1123|    179|	size_t left, len;
 1124|    179|	u8 type;
 1125|       |
 1126|    179|	if (ct != TLS_CONTENT_TYPE_HANDSHAKE) {
  ------------------
  |  Branch (1126:6): [True: 1, False: 178]
  ------------------
 1127|      1|		wpa_printf(MSG_DEBUG, "TLSv1: Expected Handshake; "
 1128|      1|			   "received content type 0x%x", ct);
 1129|      1|		tls_alert(conn, TLS_ALERT_LEVEL_FATAL,
  ------------------
  |  |  128|      1|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
 1130|      1|			  TLS_ALERT_UNEXPECTED_MESSAGE);
  ------------------
  |  |  132|      1|#define TLS_ALERT_UNEXPECTED_MESSAGE		10
  ------------------
 1131|      1|		return -1;
 1132|      1|	}
 1133|       |
 1134|    178|	pos = in_data;
 1135|    178|	left = *in_len;
 1136|       |
 1137|    178|	if (left < 4) {
  ------------------
  |  Branch (1137:6): [True: 1, False: 177]
  ------------------
 1138|      1|		wpa_printf(MSG_DEBUG, "TLSv1: Too short CertificateRequest "
 1139|      1|			   "(left=%lu)", (unsigned long) left);
 1140|      1|		tls_alert(conn, TLS_ALERT_LEVEL_FATAL, TLS_ALERT_DECODE_ERROR);
  ------------------
  |  |  128|      1|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
              		tls_alert(conn, TLS_ALERT_LEVEL_FATAL, TLS_ALERT_DECODE_ERROR);
  ------------------
  |  |  146|      1|#define TLS_ALERT_DECODE_ERROR			50
  ------------------
 1141|      1|		return -1;
 1142|      1|	}
 1143|       |
 1144|    177|	type = *pos++;
 1145|    177|	len = WPA_GET_BE24(pos);
 1146|    177|	pos += 3;
 1147|    177|	left -= 4;
 1148|       |
 1149|    177|	if (len > left) {
  ------------------
  |  Branch (1149:6): [True: 1, False: 176]
  ------------------
 1150|      1|		wpa_printf(MSG_DEBUG, "TLSv1: Mismatch in CertificateRequest "
 1151|      1|			   "length (len=%lu != left=%lu)",
 1152|      1|			   (unsigned long) len, (unsigned long) left);
 1153|      1|		tls_alert(conn, TLS_ALERT_LEVEL_FATAL, TLS_ALERT_DECODE_ERROR);
  ------------------
  |  |  128|      1|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
              		tls_alert(conn, TLS_ALERT_LEVEL_FATAL, TLS_ALERT_DECODE_ERROR);
  ------------------
  |  |  146|      1|#define TLS_ALERT_DECODE_ERROR			50
  ------------------
 1154|      1|		return -1;
 1155|      1|	}
 1156|       |
 1157|    176|	end = pos + len;
 1158|       |
 1159|    176|	if (type == TLS_HANDSHAKE_TYPE_SERVER_HELLO_DONE)
  ------------------
  |  Branch (1159:6): [True: 70, False: 106]
  ------------------
 1160|     70|		return tls_process_server_hello_done(conn, ct, in_data,
 1161|     70|						     in_len);
 1162|    106|	if (type != TLS_HANDSHAKE_TYPE_CERTIFICATE_REQUEST) {
  ------------------
  |  Branch (1162:6): [True: 1, False: 105]
  ------------------
 1163|      1|		wpa_printf(MSG_DEBUG, "TLSv1: Received unexpected handshake "
 1164|      1|			   "message %d (expected CertificateRequest/"
 1165|      1|			   "ServerHelloDone)", type);
 1166|      1|		tls_alert(conn, TLS_ALERT_LEVEL_FATAL,
  ------------------
  |  |  128|      1|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
 1167|      1|			  TLS_ALERT_UNEXPECTED_MESSAGE);
  ------------------
  |  |  132|      1|#define TLS_ALERT_UNEXPECTED_MESSAGE		10
  ------------------
 1168|      1|		return -1;
 1169|      1|	}
 1170|       |
 1171|    105|	wpa_printf(MSG_DEBUG, "TLSv1: Received CertificateRequest");
 1172|       |
 1173|    105|	conn->certificate_requested = 1;
 1174|       |
 1175|    105|	*in_len = end - in_data;
 1176|       |
 1177|    105|	conn->state = SERVER_HELLO_DONE;
 1178|       |
 1179|    105|	return 0;
 1180|    106|}
tlsv1_client_read.c:tls_process_server_hello_done:
 1185|    463|{
 1186|    463|	const u8 *pos, *end;
 1187|    463|	size_t left, len;
 1188|    463|	u8 type;
 1189|       |
 1190|    463|	if (ct != TLS_CONTENT_TYPE_HANDSHAKE) {
  ------------------
  |  Branch (1190:6): [True: 2, False: 461]
  ------------------
 1191|      2|		wpa_printf(MSG_DEBUG, "TLSv1: Expected Handshake; "
 1192|      2|			   "received content type 0x%x", ct);
 1193|      2|		tls_alert(conn, TLS_ALERT_LEVEL_FATAL,
  ------------------
  |  |  128|      2|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
 1194|      2|			  TLS_ALERT_UNEXPECTED_MESSAGE);
  ------------------
  |  |  132|      2|#define TLS_ALERT_UNEXPECTED_MESSAGE		10
  ------------------
 1195|      2|		return -1;
 1196|      2|	}
 1197|       |
 1198|    461|	pos = in_data;
 1199|    461|	left = *in_len;
 1200|       |
 1201|    461|	if (left < 4) {
  ------------------
  |  Branch (1201:6): [True: 6, False: 455]
  ------------------
 1202|      6|		wpa_printf(MSG_DEBUG, "TLSv1: Too short ServerHelloDone "
 1203|      6|			   "(left=%lu)", (unsigned long) left);
 1204|      6|		tls_alert(conn, TLS_ALERT_LEVEL_FATAL, TLS_ALERT_DECODE_ERROR);
  ------------------
  |  |  128|      6|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
              		tls_alert(conn, TLS_ALERT_LEVEL_FATAL, TLS_ALERT_DECODE_ERROR);
  ------------------
  |  |  146|      6|#define TLS_ALERT_DECODE_ERROR			50
  ------------------
 1205|      6|		return -1;
 1206|      6|	}
 1207|       |
 1208|    455|	type = *pos++;
 1209|    455|	len = WPA_GET_BE24(pos);
 1210|    455|	pos += 3;
 1211|    455|	left -= 4;
 1212|       |
 1213|    455|	if (len > left) {
  ------------------
  |  Branch (1213:6): [True: 28, False: 427]
  ------------------
 1214|     28|		wpa_printf(MSG_DEBUG, "TLSv1: Mismatch in ServerHelloDone "
 1215|     28|			   "length (len=%lu != left=%lu)",
 1216|     28|			   (unsigned long) len, (unsigned long) left);
 1217|     28|		tls_alert(conn, TLS_ALERT_LEVEL_FATAL, TLS_ALERT_DECODE_ERROR);
  ------------------
  |  |  128|     28|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
              		tls_alert(conn, TLS_ALERT_LEVEL_FATAL, TLS_ALERT_DECODE_ERROR);
  ------------------
  |  |  146|     28|#define TLS_ALERT_DECODE_ERROR			50
  ------------------
 1218|     28|		return -1;
 1219|     28|	}
 1220|    427|	end = pos + len;
 1221|       |
 1222|    427|	if (type != TLS_HANDSHAKE_TYPE_SERVER_HELLO_DONE) {
  ------------------
  |  Branch (1222:6): [True: 7, False: 420]
  ------------------
 1223|      7|		wpa_printf(MSG_DEBUG, "TLSv1: Received unexpected handshake "
 1224|      7|			   "message %d (expected ServerHelloDone)", type);
 1225|      7|		tls_alert(conn, TLS_ALERT_LEVEL_FATAL,
  ------------------
  |  |  128|      7|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
 1226|      7|			  TLS_ALERT_UNEXPECTED_MESSAGE);
  ------------------
  |  |  132|      7|#define TLS_ALERT_UNEXPECTED_MESSAGE		10
  ------------------
 1227|      7|		return -1;
 1228|      7|	}
 1229|       |
 1230|    420|	wpa_printf(MSG_DEBUG, "TLSv1: Received ServerHelloDone");
 1231|       |
 1232|    420|	if ((conn->flags & TLS_CONN_REQUIRE_OCSP) &&
  ------------------
  |  |  108|    420|#define TLS_CONN_REQUIRE_OCSP BIT(4)
  |  |  ------------------
  |  |  |  |  458|    420|#define BIT(x) (1U << (x))
  |  |  ------------------
  ------------------
  |  Branch (1232:6): [True: 0, False: 420]
  ------------------
 1233|      0|	    !conn->ocsp_resp_received) {
  ------------------
  |  Branch (1233:6): [True: 0, False: 0]
  ------------------
 1234|      0|		wpa_printf(MSG_INFO,
 1235|      0|			   "TLSv1: No OCSP response received - reject handshake");
 1236|      0|		tls_alert(conn, TLS_ALERT_LEVEL_FATAL,
  ------------------
  |  |  128|      0|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
 1237|      0|			  TLS_ALERT_BAD_CERTIFICATE_STATUS_RESPONSE);
  ------------------
  |  |  157|      0|#define TLS_ALERT_BAD_CERTIFICATE_STATUS_RESPONSE	113 /* RFC 4366 */
  ------------------
 1238|      0|		return -1;
 1239|      0|	}
 1240|       |
 1241|    420|	*in_len = end - in_data;
 1242|       |
 1243|    420|	conn->state = CLIENT_KEY_EXCHANGE;
 1244|       |
 1245|    420|	return 0;
 1246|    420|}
tlsv1_client_read.c:tls_process_server_change_cipher_spec:
 1252|    364|{
 1253|    364|	const u8 *pos;
 1254|    364|	size_t left;
 1255|       |
 1256|    364|	if (ct != TLS_CONTENT_TYPE_CHANGE_CIPHER_SPEC) {
  ------------------
  |  Branch (1256:6): [True: 1, False: 363]
  ------------------
 1257|      1|		wpa_printf(MSG_DEBUG, "TLSv1: Expected ChangeCipherSpec; "
 1258|      1|			   "received content type 0x%x", ct);
 1259|      1|		if (conn->use_session_ticket) {
  ------------------
  |  Branch (1259:7): [True: 0, False: 1]
  ------------------
 1260|      0|			int res;
 1261|      0|			wpa_printf(MSG_DEBUG, "TLSv1: Server may have "
 1262|      0|				   "rejected SessionTicket");
 1263|      0|			conn->use_session_ticket = 0;
 1264|       |
 1265|       |			/* Notify upper layers that SessionTicket failed */
 1266|      0|			res = conn->session_ticket_cb(
 1267|      0|				conn->session_ticket_cb_ctx, NULL, 0, NULL,
 1268|      0|				NULL, NULL);
 1269|      0|			if (res < 0) {
  ------------------
  |  Branch (1269:8): [True: 0, False: 0]
  ------------------
 1270|      0|				wpa_printf(MSG_DEBUG, "TLSv1: SessionTicket "
 1271|      0|					   "callback indicated failure");
 1272|      0|				tls_alert(conn, TLS_ALERT_LEVEL_FATAL,
  ------------------
  |  |  128|      0|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
 1273|      0|					  TLS_ALERT_HANDSHAKE_FAILURE);
  ------------------
  |  |  137|      0|#define TLS_ALERT_HANDSHAKE_FAILURE		40
  ------------------
 1274|      0|				return -1;
 1275|      0|			}
 1276|       |
 1277|      0|			conn->state = SERVER_CERTIFICATE;
 1278|      0|			return tls_process_certificate(conn, ct, in_data,
 1279|      0|						       in_len);
 1280|      0|		}
 1281|      1|		tls_alert(conn, TLS_ALERT_LEVEL_FATAL,
  ------------------
  |  |  128|      1|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
 1282|      1|			  TLS_ALERT_UNEXPECTED_MESSAGE);
  ------------------
  |  |  132|      1|#define TLS_ALERT_UNEXPECTED_MESSAGE		10
  ------------------
 1283|      1|		return -1;
 1284|      1|	}
 1285|       |
 1286|    363|	pos = in_data;
 1287|    363|	left = *in_len;
 1288|       |
 1289|    363|	if (left < 1) {
  ------------------
  |  Branch (1289:6): [True: 0, False: 363]
  ------------------
 1290|      0|		wpa_printf(MSG_DEBUG, "TLSv1: Too short ChangeCipherSpec");
 1291|      0|		tls_alert(conn, TLS_ALERT_LEVEL_FATAL, TLS_ALERT_DECODE_ERROR);
  ------------------
  |  |  128|      0|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
              		tls_alert(conn, TLS_ALERT_LEVEL_FATAL, TLS_ALERT_DECODE_ERROR);
  ------------------
  |  |  146|      0|#define TLS_ALERT_DECODE_ERROR			50
  ------------------
 1292|      0|		return -1;
 1293|      0|	}
 1294|       |
 1295|    363|	if (*pos != TLS_CHANGE_CIPHER_SPEC) {
  ------------------
  |  Branch (1295:6): [True: 5, False: 358]
  ------------------
 1296|      5|		wpa_printf(MSG_DEBUG, "TLSv1: Expected ChangeCipherSpec; "
 1297|      5|			   "received data 0x%x", *pos);
 1298|      5|		tls_alert(conn, TLS_ALERT_LEVEL_FATAL,
  ------------------
  |  |  128|      5|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
 1299|      5|			  TLS_ALERT_UNEXPECTED_MESSAGE);
  ------------------
  |  |  132|      5|#define TLS_ALERT_UNEXPECTED_MESSAGE		10
  ------------------
 1300|      5|		return -1;
 1301|      5|	}
 1302|       |
 1303|    358|	wpa_printf(MSG_DEBUG, "TLSv1: Received ChangeCipherSpec");
 1304|    358|	if (tlsv1_record_change_read_cipher(&conn->rl) < 0) {
  ------------------
  |  Branch (1304:6): [True: 0, False: 358]
  ------------------
 1305|      0|		wpa_printf(MSG_DEBUG, "TLSv1: Failed to change read cipher "
 1306|      0|			   "for record layer");
 1307|      0|		tls_alert(conn, TLS_ALERT_LEVEL_FATAL,
  ------------------
  |  |  128|      0|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
 1308|      0|			  TLS_ALERT_INTERNAL_ERROR);
  ------------------
  |  |  151|      0|#define TLS_ALERT_INTERNAL_ERROR		80
  ------------------
 1309|      0|		return -1;
 1310|      0|	}
 1311|       |
 1312|    358|	*in_len = pos + 1 - in_data;
 1313|       |
 1314|    358|	conn->state = SERVER_FINISHED;
 1315|       |
 1316|    358|	return 0;
 1317|    358|}
tlsv1_client_read.c:tls_process_server_finished:
 1322|     76|{
 1323|     76|	const u8 *pos, *end;
 1324|     76|	size_t left, len, hlen;
 1325|     76|	u8 verify_data[TLS_VERIFY_DATA_LEN];
 1326|     76|	u8 hash[MD5_MAC_LEN + SHA1_MAC_LEN];
 1327|       |
 1328|     76|	if (ct != TLS_CONTENT_TYPE_HANDSHAKE) {
  ------------------
  |  Branch (1328:6): [True: 29, False: 47]
  ------------------
 1329|     29|		wpa_printf(MSG_DEBUG, "TLSv1: Expected Finished; "
 1330|     29|			   "received content type 0x%x", ct);
 1331|     29|		tls_alert(conn, TLS_ALERT_LEVEL_FATAL,
  ------------------
  |  |  128|     29|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
 1332|     29|			  TLS_ALERT_UNEXPECTED_MESSAGE);
  ------------------
  |  |  132|     29|#define TLS_ALERT_UNEXPECTED_MESSAGE		10
  ------------------
 1333|     29|		return -1;
 1334|     29|	}
 1335|       |
 1336|     47|	pos = in_data;
 1337|     47|	left = *in_len;
 1338|       |
 1339|     47|	if (left < 4) {
  ------------------
  |  Branch (1339:6): [True: 0, False: 47]
  ------------------
 1340|      0|		wpa_printf(MSG_DEBUG, "TLSv1: Too short record (left=%lu) for "
 1341|      0|			   "Finished",
 1342|      0|			   (unsigned long) left);
 1343|      0|		tls_alert(conn, TLS_ALERT_LEVEL_FATAL,
  ------------------
  |  |  128|      0|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
 1344|      0|			  TLS_ALERT_DECODE_ERROR);
  ------------------
  |  |  146|      0|#define TLS_ALERT_DECODE_ERROR			50
  ------------------
 1345|      0|		return -1;
 1346|      0|	}
 1347|       |
 1348|     47|	if (pos[0] != TLS_HANDSHAKE_TYPE_FINISHED) {
  ------------------
  |  Branch (1348:6): [True: 0, False: 47]
  ------------------
 1349|      0|		wpa_printf(MSG_DEBUG, "TLSv1: Expected Finished; received "
 1350|      0|			   "type 0x%x", pos[0]);
 1351|      0|		tls_alert(conn, TLS_ALERT_LEVEL_FATAL,
  ------------------
  |  |  128|      0|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
 1352|      0|			  TLS_ALERT_UNEXPECTED_MESSAGE);
  ------------------
  |  |  132|      0|#define TLS_ALERT_UNEXPECTED_MESSAGE		10
  ------------------
 1353|      0|		return -1;
 1354|      0|	}
 1355|       |
 1356|     47|	len = WPA_GET_BE24(pos + 1);
 1357|       |
 1358|     47|	pos += 4;
 1359|     47|	left -= 4;
 1360|       |
 1361|     47|	if (len > left) {
  ------------------
  |  Branch (1361:6): [True: 0, False: 47]
  ------------------
 1362|      0|		wpa_printf(MSG_DEBUG, "TLSv1: Too short buffer for Finished "
 1363|      0|			   "(len=%lu > left=%lu)",
 1364|      0|			   (unsigned long) len, (unsigned long) left);
 1365|      0|		tls_alert(conn, TLS_ALERT_LEVEL_FATAL,
  ------------------
  |  |  128|      0|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
 1366|      0|			  TLS_ALERT_DECODE_ERROR);
  ------------------
  |  |  146|      0|#define TLS_ALERT_DECODE_ERROR			50
  ------------------
 1367|      0|		return -1;
 1368|      0|	}
 1369|     47|	end = pos + len;
 1370|     47|	if (len != TLS_VERIFY_DATA_LEN) {
  ------------------
  |  |   30|     47|#define TLS_VERIFY_DATA_LEN 12
  ------------------
  |  Branch (1370:6): [True: 0, False: 47]
  ------------------
 1371|      0|		wpa_printf(MSG_DEBUG, "TLSv1: Unexpected verify_data length "
 1372|      0|			   "in Finished: %lu (expected %d)",
 1373|      0|			   (unsigned long) len, TLS_VERIFY_DATA_LEN);
  ------------------
  |  |   30|      0|#define TLS_VERIFY_DATA_LEN 12
  ------------------
 1374|      0|		tls_alert(conn, TLS_ALERT_LEVEL_FATAL,
  ------------------
  |  |  128|      0|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
 1375|      0|			  TLS_ALERT_DECODE_ERROR);
  ------------------
  |  |  146|      0|#define TLS_ALERT_DECODE_ERROR			50
  ------------------
 1376|      0|		return -1;
 1377|      0|	}
 1378|     47|	wpa_hexdump(MSG_MSGDUMP, "TLSv1: verify_data in Finished",
 1379|     47|		    pos, TLS_VERIFY_DATA_LEN);
  ------------------
  |  |   30|     47|#define TLS_VERIFY_DATA_LEN 12
  ------------------
 1380|       |
 1381|     47|#ifdef CONFIG_TLSV12
 1382|     47|	if (conn->rl.tls_version >= TLS_VERSION_1_2) {
  ------------------
  |  |   16|     47|#define TLS_VERSION_1_2 0x0303 /* TLSv1.2 */
  ------------------
  |  Branch (1382:6): [True: 47, False: 0]
  ------------------
 1383|     47|		hlen = SHA256_MAC_LEN;
  ------------------
  |  |   12|     47|#define SHA256_MAC_LEN 32
  ------------------
 1384|     47|		if (conn->verify.sha256_server == NULL ||
  ------------------
  |  Branch (1384:7): [True: 0, False: 47]
  ------------------
 1385|     47|		    crypto_hash_finish(conn->verify.sha256_server, hash, &hlen)
  ------------------
  |  Branch (1385:7): [True: 0, False: 47]
  ------------------
 1386|     47|		    < 0) {
 1387|      0|			tls_alert(conn, TLS_ALERT_LEVEL_FATAL,
  ------------------
  |  |  128|      0|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
 1388|      0|				  TLS_ALERT_INTERNAL_ERROR);
  ------------------
  |  |  151|      0|#define TLS_ALERT_INTERNAL_ERROR		80
  ------------------
 1389|      0|			conn->verify.sha256_server = NULL;
 1390|      0|			return -1;
 1391|      0|		}
 1392|     47|		conn->verify.sha256_server = NULL;
 1393|     47|	} else {
 1394|      0|#endif /* CONFIG_TLSV12 */
 1395|       |
 1396|      0|	hlen = MD5_MAC_LEN;
  ------------------
  |  |   12|      0|#define MD5_MAC_LEN 16
  ------------------
 1397|      0|	if (conn->verify.md5_server == NULL ||
  ------------------
  |  Branch (1397:6): [True: 0, False: 0]
  ------------------
 1398|      0|	    crypto_hash_finish(conn->verify.md5_server, hash, &hlen) < 0) {
  ------------------
  |  Branch (1398:6): [True: 0, False: 0]
  ------------------
 1399|      0|		tls_alert(conn, TLS_ALERT_LEVEL_FATAL,
  ------------------
  |  |  128|      0|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
 1400|      0|			  TLS_ALERT_INTERNAL_ERROR);
  ------------------
  |  |  151|      0|#define TLS_ALERT_INTERNAL_ERROR		80
  ------------------
 1401|      0|		conn->verify.md5_server = NULL;
 1402|      0|		crypto_hash_finish(conn->verify.sha1_server, NULL, NULL);
 1403|      0|		conn->verify.sha1_server = NULL;
 1404|      0|		return -1;
 1405|      0|	}
 1406|      0|	conn->verify.md5_server = NULL;
 1407|      0|	hlen = SHA1_MAC_LEN;
  ------------------
  |  |   12|      0|#define SHA1_MAC_LEN 20
  ------------------
 1408|      0|	if (conn->verify.sha1_server == NULL ||
  ------------------
  |  Branch (1408:6): [True: 0, False: 0]
  ------------------
 1409|      0|	    crypto_hash_finish(conn->verify.sha1_server, hash + MD5_MAC_LEN,
  ------------------
  |  |   12|      0|#define MD5_MAC_LEN 16
  ------------------
  |  Branch (1409:6): [True: 0, False: 0]
  ------------------
 1410|      0|			       &hlen) < 0) {
 1411|      0|		conn->verify.sha1_server = NULL;
 1412|      0|		tls_alert(conn, TLS_ALERT_LEVEL_FATAL,
  ------------------
  |  |  128|      0|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
 1413|      0|			  TLS_ALERT_INTERNAL_ERROR);
  ------------------
  |  |  151|      0|#define TLS_ALERT_INTERNAL_ERROR		80
  ------------------
 1414|      0|		return -1;
 1415|      0|	}
 1416|      0|	conn->verify.sha1_server = NULL;
 1417|      0|	hlen = MD5_MAC_LEN + SHA1_MAC_LEN;
  ------------------
  |  |   12|      0|#define MD5_MAC_LEN 16
  ------------------
              	hlen = MD5_MAC_LEN + SHA1_MAC_LEN;
  ------------------
  |  |   12|      0|#define SHA1_MAC_LEN 20
  ------------------
 1418|       |
 1419|      0|#ifdef CONFIG_TLSV12
 1420|      0|	}
 1421|     47|#endif /* CONFIG_TLSV12 */
 1422|       |
 1423|     47|	if (tls_prf(conn->rl.tls_version,
  ------------------
  |  Branch (1423:6): [True: 0, False: 47]
  ------------------
 1424|     47|		    conn->master_secret, TLS_MASTER_SECRET_LEN,
  ------------------
  |  |   28|     47|#define TLS_MASTER_SECRET_LEN 48
  ------------------
 1425|     47|		    "server finished", hash, hlen,
 1426|     47|		    verify_data, TLS_VERIFY_DATA_LEN)) {
  ------------------
  |  |   30|     47|#define TLS_VERIFY_DATA_LEN 12
  ------------------
 1427|      0|		wpa_printf(MSG_DEBUG, "TLSv1: Failed to derive verify_data");
 1428|      0|		tls_alert(conn, TLS_ALERT_LEVEL_FATAL,
  ------------------
  |  |  128|      0|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
 1429|      0|			  TLS_ALERT_DECRYPT_ERROR);
  ------------------
  |  |  147|      0|#define TLS_ALERT_DECRYPT_ERROR			51
  ------------------
 1430|      0|		return -1;
 1431|      0|	}
 1432|     47|	wpa_hexdump_key(MSG_DEBUG, "TLSv1: verify_data (server)",
 1433|     47|			verify_data, TLS_VERIFY_DATA_LEN);
  ------------------
  |  |   30|     47|#define TLS_VERIFY_DATA_LEN 12
  ------------------
 1434|       |
 1435|     47|	if (os_memcmp_const(pos, verify_data, TLS_VERIFY_DATA_LEN) != 0) {
  ------------------
  |  |   30|     47|#define TLS_VERIFY_DATA_LEN 12
  ------------------
  |  Branch (1435:6): [True: 2, False: 45]
  ------------------
 1436|      2|		wpa_printf(MSG_INFO, "TLSv1: Mismatch in verify_data");
 1437|      2|		tls_alert(conn, TLS_ALERT_LEVEL_FATAL,
  ------------------
  |  |  128|      2|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
 1438|      2|			  TLS_ALERT_DECRYPT_ERROR);
  ------------------
  |  |  147|      2|#define TLS_ALERT_DECRYPT_ERROR			51
  ------------------
 1439|      2|		return -1;
 1440|      2|	}
 1441|       |
 1442|     45|	wpa_printf(MSG_DEBUG, "TLSv1: Received Finished");
 1443|       |
 1444|     45|	*in_len = end - in_data;
 1445|       |
 1446|     45|	conn->state = (conn->session_resumed || conn->use_session_ticket) ?
  ------------------
  |  Branch (1446:17): [True: 0, False: 45]
  |  Branch (1446:42): [True: 0, False: 45]
  ------------------
 1447|     45|		CHANGE_CIPHER_SPEC : ACK_FINISHED;
 1448|       |
 1449|     45|	return 0;
 1450|     47|}

tls_send_client_hello:
   46|  2.68k|{
   47|  2.68k|	u8 *hello, *end, *pos, *hs_length, *hs_start, *rhdr;
   48|  2.68k|	struct os_time now;
   49|  2.68k|	size_t len, i;
   50|  2.68k|	u8 *ext_start;
   51|  2.68k|	u16 tls_version = tls_client_highest_ver(conn);
   52|       |
   53|  2.68k|	if (!tls_version) {
  ------------------
  |  Branch (53:6): [True: 0, False: 2.68k]
  ------------------
   54|      0|		wpa_printf(MSG_INFO, "TLSv1: No TLS version allowed");
   55|      0|		return NULL;
   56|      0|	}
   57|       |
   58|  2.68k|	wpa_printf(MSG_DEBUG, "TLSv1: Send ClientHello (ver %s)",
   59|  2.68k|		   tls_version_str(tls_version));
   60|  2.68k|	*out_len = 0;
   61|       |
   62|  2.68k|	os_get_time(&now);
   63|  2.68k|#ifdef TEST_FUZZ
   64|  2.68k|	now.sec = 0xfffefdfc;
   65|  2.68k|#endif /* TEST_FUZZ */
   66|  2.68k|	WPA_PUT_BE32(conn->client_random, now.sec);
   67|  2.68k|	if (random_get_bytes(conn->client_random + 4, TLS_RANDOM_LEN - 4)) {
  ------------------
  |  |   16|  2.68k|#define random_get_bytes(b, l) os_get_random((b), (l))
  |  |  ------------------
  |  |  |  Branch (16:32): [True: 0, False: 2.68k]
  |  |  ------------------
  ------------------
   68|      0|		wpa_printf(MSG_ERROR, "TLSv1: Could not generate "
   69|      0|			   "client_random");
   70|      0|		return NULL;
   71|      0|	}
   72|  2.68k|	wpa_hexdump(MSG_MSGDUMP, "TLSv1: client_random",
   73|  2.68k|		    conn->client_random, TLS_RANDOM_LEN);
  ------------------
  |  |   26|  2.68k|#define TLS_RANDOM_LEN 32
  ------------------
   74|       |
   75|  2.68k|	len = 150 + conn->num_cipher_suites * 2 + conn->client_hello_ext_len;
   76|  2.68k|	hello = os_malloc(len);
  ------------------
  |  |  505|  2.68k|#define os_malloc(s) malloc((s))
  ------------------
   77|  2.68k|	if (hello == NULL)
  ------------------
  |  Branch (77:6): [True: 0, False: 2.68k]
  ------------------
   78|      0|		return NULL;
   79|  2.68k|	end = hello + len;
   80|       |
   81|  2.68k|	rhdr = hello;
   82|  2.68k|	pos = rhdr + TLS_RECORD_HEADER_LEN;
  ------------------
  |  |   21|  2.68k|#define TLS_RECORD_HEADER_LEN 5
  ------------------
   83|       |
   84|       |	/* opaque fragment[TLSPlaintext.length] */
   85|       |
   86|       |	/* Handshake */
   87|  2.68k|	hs_start = pos;
   88|       |	/* HandshakeType msg_type */
   89|  2.68k|	*pos++ = TLS_HANDSHAKE_TYPE_CLIENT_HELLO;
   90|       |	/* uint24 length (to be filled) */
   91|  2.68k|	hs_length = pos;
   92|  2.68k|	pos += 3;
   93|       |	/* body - ClientHello */
   94|       |	/* ProtocolVersion client_version */
   95|  2.68k|	WPA_PUT_BE16(pos, tls_version);
   96|  2.68k|	pos += 2;
   97|       |	/* Random random: uint32 gmt_unix_time, opaque random_bytes */
   98|  2.68k|	os_memcpy(pos, conn->client_random, TLS_RANDOM_LEN);
  ------------------
  |  |  523|  2.68k|#define os_memcpy(d, s, n) memcpy((d), (s), (n))
  ------------------
   99|  2.68k|	pos += TLS_RANDOM_LEN;
  ------------------
  |  |   26|  2.68k|#define TLS_RANDOM_LEN 32
  ------------------
  100|       |	/* SessionID session_id */
  101|  2.68k|	*pos++ = conn->session_id_len;
  102|  2.68k|	os_memcpy(pos, conn->session_id, conn->session_id_len);
  ------------------
  |  |  523|  2.68k|#define os_memcpy(d, s, n) memcpy((d), (s), (n))
  ------------------
  103|  2.68k|	pos += conn->session_id_len;
  104|       |	/* CipherSuite cipher_suites<2..2^16-1> */
  105|  2.68k|	WPA_PUT_BE16(pos, 2 * conn->num_cipher_suites);
  106|  2.68k|	pos += 2;
  107|  34.8k|	for (i = 0; i < conn->num_cipher_suites; i++) {
  ------------------
  |  Branch (107:14): [True: 32.1k, False: 2.68k]
  ------------------
  108|  32.1k|		WPA_PUT_BE16(pos, conn->cipher_suites[i]);
  109|  32.1k|		pos += 2;
  110|  32.1k|	}
  111|       |	/* CompressionMethod compression_methods<1..2^8-1> */
  112|  2.68k|	*pos++ = 1;
  113|  2.68k|	*pos++ = TLS_COMPRESSION_NULL;
  ------------------
  |  |  105|  2.68k|#define TLS_COMPRESSION_NULL 0
  ------------------
  114|       |
  115|       |	/* Extension */
  116|  2.68k|	ext_start = pos;
  117|  2.68k|	pos += 2;
  118|       |
  119|  2.68k|#ifdef CONFIG_TLSV12
  120|  2.68k|	if (conn->rl.tls_version >= TLS_VERSION_1_2) {
  ------------------
  |  |   16|  2.68k|#define TLS_VERSION_1_2 0x0303 /* TLSv1.2 */
  ------------------
  |  Branch (120:6): [True: 2.68k, False: 0]
  ------------------
  121|       |		/*
  122|       |		 * Add signature_algorithms extension since we support only
  123|       |		 * SHA256 (and not the default SHA1) with TLSv1.2.
  124|       |		 */
  125|       |		/* ExtensionsType extension_type = signature_algorithms(13) */
  126|  2.68k|		WPA_PUT_BE16(pos, TLS_EXT_SIGNATURE_ALGORITHMS);
  ------------------
  |  |  172|  2.68k|#define TLS_EXT_SIGNATURE_ALGORITHMS		13 /* RFC 5246 */
  ------------------
  127|  2.68k|		pos += 2;
  128|       |		/* opaque extension_data<0..2^16-1> length */
  129|  2.68k|		WPA_PUT_BE16(pos, 8);
  130|  2.68k|		pos += 2;
  131|       |		/* supported_signature_algorithms<2..2^16-2> length */
  132|  2.68k|		WPA_PUT_BE16(pos, 6);
  133|  2.68k|		pos += 2;
  134|       |		/* supported_signature_algorithms */
  135|  2.68k|		*pos++ = TLS_HASH_ALG_SHA512;
  136|  2.68k|		*pos++ = TLS_SIGN_ALG_RSA;
  137|  2.68k|		*pos++ = TLS_HASH_ALG_SHA384;
  138|  2.68k|		*pos++ = TLS_SIGN_ALG_RSA;
  139|  2.68k|		*pos++ = TLS_HASH_ALG_SHA256;
  140|  2.68k|		*pos++ = TLS_SIGN_ALG_RSA;
  141|  2.68k|	}
  142|  2.68k|#endif /* CONFIG_TLSV12 */
  143|       |
  144|  2.68k|	if (conn->client_hello_ext) {
  ------------------
  |  Branch (144:6): [True: 0, False: 2.68k]
  ------------------
  145|      0|		os_memcpy(pos, conn->client_hello_ext,
  ------------------
  |  |  523|      0|#define os_memcpy(d, s, n) memcpy((d), (s), (n))
  ------------------
  146|      0|			  conn->client_hello_ext_len);
  147|      0|		pos += conn->client_hello_ext_len;
  148|      0|	}
  149|       |
  150|  2.68k|	if (conn->flags & TLS_CONN_REQUEST_OCSP) {
  ------------------
  |  |  107|  2.68k|#define TLS_CONN_REQUEST_OCSP BIT(3)
  |  |  ------------------
  |  |  |  |  458|  2.68k|#define BIT(x) (1U << (x))
  |  |  ------------------
  ------------------
  |  Branch (150:6): [True: 0, False: 2.68k]
  ------------------
  151|      0|		wpa_printf(MSG_DEBUG,
  152|      0|			   "TLSv1: Add status_request extension for OCSP stapling");
  153|       |		/* ExtensionsType extension_type = status_request(5) */
  154|      0|		WPA_PUT_BE16(pos, TLS_EXT_STATUS_REQUEST);
  ------------------
  |  |  171|      0|#define TLS_EXT_STATUS_REQUEST			5 /* RFC 4366 */
  ------------------
  155|      0|		pos += 2;
  156|       |		/* opaque extension_data<0..2^16-1> length */
  157|      0|		WPA_PUT_BE16(pos, 5);
  158|      0|		pos += 2;
  159|       |
  160|       |		/*
  161|       |		 * RFC 6066, 8:
  162|       |		 * struct {
  163|       |		 *     CertificateStatusType status_type;
  164|       |		 *     select (status_type) {
  165|       |		 *         case ocsp: OCSPStatusRequest;
  166|       |		 *     } request;
  167|       |		 * } CertificateStatusRequest;
  168|       |		 *
  169|       |		 * enum { ocsp(1), (255) } CertificateStatusType;
  170|       |		 */
  171|      0|		*pos++ = 1; /* status_type = ocsp(1) */
  172|       |
  173|       |		/*
  174|       |		 * struct {
  175|       |		 *     ResponderID responder_id_list<0..2^16-1>;
  176|       |		 *     Extensions  request_extensions;
  177|       |		 * } OCSPStatusRequest;
  178|       |		 *
  179|       |		 * opaque ResponderID<1..2^16-1>;
  180|       |		 * opaque Extensions<0..2^16-1>;
  181|       |		 */
  182|      0|		WPA_PUT_BE16(pos, 0); /* responder_id_list(empty) */
  183|      0|		pos += 2;
  184|      0|		WPA_PUT_BE16(pos, 0); /* request_extensions(empty) */
  185|      0|		pos += 2;
  186|       |
  187|      0|		wpa_printf(MSG_DEBUG,
  188|      0|			   "TLSv1: Add status_request_v2 extension for OCSP stapling");
  189|       |		/* ExtensionsType extension_type = status_request_v2(17) */
  190|      0|		WPA_PUT_BE16(pos, TLS_EXT_STATUS_REQUEST_V2);
  ------------------
  |  |  173|      0|#define TLS_EXT_STATUS_REQUEST_V2		17 /* RFC 6961 */
  ------------------
  191|      0|		pos += 2;
  192|       |		/* opaque extension_data<0..2^16-1> length */
  193|      0|		WPA_PUT_BE16(pos, 7);
  194|      0|		pos += 2;
  195|       |
  196|       |		/*
  197|       |		 * RFC 6961, 2.2:
  198|       |		 * struct {
  199|       |		 *     CertificateStatusType status_type;
  200|       |		 *     uint16 request_length;
  201|       |		 *     select (status_type) {
  202|       |		 *         case ocsp: OCSPStatusRequest;
  203|       |		 *         case ocsp_multi: OCSPStatusRequest;
  204|       |		 *     } request;
  205|       |		 * } CertificateStatusRequestItemV2;
  206|       |		 *
  207|       |		 * enum { ocsp(1), ocsp_multi(2), (255) } CertificateStatusType;
  208|       |		 *
  209|       |		 * struct {
  210|       |		 * CertificateStatusRequestItemV2
  211|       |		 *     certificate_status_req_list<1..2^16-1>;
  212|       |		 * } CertificateStatusRequestListV2;
  213|       |		 */
  214|       |
  215|       |		/* certificate_status_req_list<1..2^16-1> */
  216|      0|		WPA_PUT_BE16(pos, 5);
  217|      0|		pos += 2;
  218|       |
  219|       |		/* CertificateStatusRequestItemV2 */
  220|      0|		*pos++ = 2; /* status_type = ocsp_multi(2) */
  221|       |		/* OCSPStatusRequest as shown above for v1 */
  222|      0|		WPA_PUT_BE16(pos, 0); /* responder_id_list(empty) */
  223|      0|		pos += 2;
  224|      0|		WPA_PUT_BE16(pos, 0); /* request_extensions(empty) */
  225|      0|		pos += 2;
  226|      0|	}
  227|       |
  228|  2.68k|	if (pos == ext_start + 2)
  ------------------
  |  Branch (228:6): [True: 0, False: 2.68k]
  ------------------
  229|      0|		pos -= 2; /* no extensions */
  230|  2.68k|	else
  231|  2.68k|		WPA_PUT_BE16(ext_start, pos - ext_start - 2);
  232|       |
  233|  2.68k|	WPA_PUT_BE24(hs_length, pos - hs_length - 3);
  234|  2.68k|	tls_verify_hash_add(&conn->verify, hs_start, pos - hs_start);
  235|       |
  236|  2.68k|	if (tlsv1_record_send(&conn->rl, TLS_CONTENT_TYPE_HANDSHAKE,
  ------------------
  |  Branch (236:6): [True: 0, False: 2.68k]
  ------------------
  237|  2.68k|			      rhdr, end - rhdr, hs_start, pos - hs_start,
  238|  2.68k|			      out_len) < 0) {
  239|      0|		wpa_printf(MSG_DEBUG, "TLSv1: Failed to create TLS record");
  240|      0|		tls_alert(conn, TLS_ALERT_LEVEL_FATAL,
  ------------------
  |  |  128|      0|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
  241|      0|			  TLS_ALERT_INTERNAL_ERROR);
  ------------------
  |  |  151|      0|#define TLS_ALERT_INTERNAL_ERROR		80
  ------------------
  242|      0|		os_free(hello);
  ------------------
  |  |  511|      0|#define os_free(p) free((p))
  ------------------
  243|      0|		return NULL;
  244|      0|	}
  245|       |
  246|  2.68k|	conn->state = SERVER_HELLO;
  247|       |
  248|  2.68k|	return hello;
  249|  2.68k|}
tlsv1_client_handshake_write:
  937|  40.6k|{
  938|  40.6k|	switch (conn->state) {
  939|    414|	case CLIENT_KEY_EXCHANGE:
  ------------------
  |  Branch (939:2): [True: 414, False: 40.2k]
  ------------------
  940|    414|		return tls_send_client_key_exchange(conn, out_len);
  941|      0|	case CHANGE_CIPHER_SPEC:
  ------------------
  |  Branch (941:2): [True: 0, False: 40.6k]
  ------------------
  942|      0|		return tls_send_change_cipher_spec(conn, out_len);
  943|     45|	case ACK_FINISHED:
  ------------------
  |  Branch (943:2): [True: 45, False: 40.5k]
  ------------------
  944|     45|		wpa_printf(MSG_DEBUG, "TLSv1: Handshake completed "
  945|     45|			   "successfully");
  946|     45|		conn->state = ESTABLISHED;
  947|     45|		*out_len = 0;
  948|     45|		if (no_appl_data) {
  ------------------
  |  Branch (948:7): [True: 45, False: 0]
  ------------------
  949|       |			/* Need to return something to get final TLS ACK. */
  950|     45|			return os_malloc(1);
  ------------------
  |  |  505|     45|#define os_malloc(s) malloc((s))
  ------------------
  951|     45|		}
  952|      0|		return NULL;
  953|  40.1k|	default:
  ------------------
  |  Branch (953:2): [True: 40.1k, False: 459]
  ------------------
  954|  40.1k|		wpa_printf(MSG_DEBUG, "TLSv1: Unexpected state %d while "
  955|  40.1k|			   "generating reply", conn->state);
  956|       |		return NULL;
  957|  40.6k|	}
  958|  40.6k|}
tlsv1_client_send_alert:
  963|  46.7k|{
  964|  46.7k|	u8 *alert, *pos, *length;
  965|       |
  966|  46.7k|	wpa_printf(MSG_DEBUG, "TLSv1: Send Alert(%d:%d)", level, description);
  967|  46.7k|	*out_len = 0;
  968|       |
  969|  46.7k|	alert = os_malloc(10);
  ------------------
  |  |  505|  46.7k|#define os_malloc(s) malloc((s))
  ------------------
  970|  46.7k|	if (alert == NULL)
  ------------------
  |  Branch (970:6): [True: 0, False: 46.7k]
  ------------------
  971|      0|		return NULL;
  972|       |
  973|  46.7k|	pos = alert;
  974|       |
  975|       |	/* TLSPlaintext */
  976|       |	/* ContentType type */
  977|  46.7k|	*pos++ = TLS_CONTENT_TYPE_ALERT;
  978|       |	/* ProtocolVersion version */
  979|  46.7k|	WPA_PUT_BE16(pos, conn->rl.tls_version ? conn->rl.tls_version :
  ------------------
  |  Branch (979:20): [True: 46.7k, False: 0]
  ------------------
  980|  46.7k|		     TLS_VERSION);
  ------------------
  |  |   18|      0|#define TLS_VERSION TLS_VERSION_1_2
  |  |  ------------------
  |  |  |  |   16|  46.7k|#define TLS_VERSION_1_2 0x0303 /* TLSv1.2 */
  |  |  ------------------
  ------------------
  981|  46.7k|	pos += 2;
  982|       |	/* uint16 length (to be filled) */
  983|  46.7k|	length = pos;
  984|  46.7k|	pos += 2;
  985|       |	/* opaque fragment[TLSPlaintext.length] */
  986|       |
  987|       |	/* Alert */
  988|       |	/* AlertLevel level */
  989|  46.7k|	*pos++ = level;
  990|       |	/* AlertDescription description */
  991|  46.7k|	*pos++ = description;
  992|       |
  993|  46.7k|	WPA_PUT_BE16(length, pos - length - 2);
  994|  46.7k|	*out_len = pos - alert;
  995|       |
  996|  46.7k|	return alert;
  997|  46.7k|}
tlsv1_client_write.c:tls_send_client_key_exchange:
  862|    414|{
  863|    414|	u8 *msg, *end, *pos;
  864|    414|	size_t msglen;
  865|       |
  866|    414|	*out_len = 0;
  867|       |
  868|    414|	msglen = 2000;
  869|    414|	if (conn->certificate_requested)
  ------------------
  |  Branch (869:6): [True: 60, False: 354]
  ------------------
  870|     60|		msglen += tls_client_cert_chain_der_len(conn);
  871|       |
  872|    414|	msg = os_malloc(msglen);
  ------------------
  |  |  505|    414|#define os_malloc(s) malloc((s))
  ------------------
  873|    414|	if (msg == NULL)
  ------------------
  |  Branch (873:6): [True: 0, False: 414]
  ------------------
  874|      0|		return NULL;
  875|       |
  876|    414|	pos = msg;
  877|    414|	end = msg + msglen;
  878|       |
  879|    414|	if (conn->certificate_requested) {
  ------------------
  |  Branch (879:6): [True: 60, False: 354]
  ------------------
  880|     60|		if (tls_write_client_certificate(conn, &pos, end) < 0) {
  ------------------
  |  Branch (880:7): [True: 0, False: 60]
  ------------------
  881|      0|			os_free(msg);
  ------------------
  |  |  511|      0|#define os_free(p) free((p))
  ------------------
  882|      0|			return NULL;
  883|      0|		}
  884|     60|	}
  885|       |
  886|    414|	if (tls_write_client_key_exchange(conn, &pos, end) < 0 ||
  ------------------
  |  Branch (886:6): [True: 12, False: 402]
  ------------------
  887|    402|	    (conn->certificate_requested && conn->cred && conn->cred->key &&
  ------------------
  |  Branch (887:7): [True: 58, False: 344]
  |  Branch (887:38): [True: 0, False: 58]
  |  Branch (887:52): [True: 0, False: 0]
  ------------------
  888|      0|	     tls_write_client_certificate_verify(conn, &pos, end) < 0) ||
  ------------------
  |  Branch (888:7): [True: 0, False: 0]
  ------------------
  889|    402|	    tls_write_client_change_cipher_spec(conn, &pos, end) < 0 ||
  ------------------
  |  Branch (889:6): [True: 0, False: 402]
  ------------------
  890|    402|	    tls_write_client_finished(conn, &pos, end) < 0) {
  ------------------
  |  Branch (890:6): [True: 0, False: 402]
  ------------------
  891|     12|		os_free(msg);
  ------------------
  |  |  511|     12|#define os_free(p) free((p))
  ------------------
  892|     12|		return NULL;
  893|     12|	}
  894|       |
  895|    402|	*out_len = pos - msg;
  896|       |
  897|    402|	conn->state = SERVER_CHANGE_CIPHER_SPEC;
  898|       |
  899|    402|	return msg;
  900|    414|}
tlsv1_client_write.c:tls_client_cert_chain_der_len:
   25|     60|{
   26|     60|	size_t len = 0;
   27|     60|	struct x509_certificate *cert;
   28|       |
   29|     60|	if (conn->cred == NULL)
  ------------------
  |  Branch (29:6): [True: 60, False: 0]
  ------------------
   30|     60|		return 0;
   31|       |
   32|      0|	cert = conn->cred->cert;
   33|      0|	while (cert) {
  ------------------
  |  Branch (33:9): [True: 0, False: 0]
  ------------------
   34|      0|		len += 3 + cert->cert_len;
   35|      0|		if (x509_certificate_self_signed(cert))
  ------------------
  |  Branch (35:7): [True: 0, False: 0]
  ------------------
   36|      0|			break;
   37|      0|		cert = x509_certificate_get_subject(conn->cred->trusted_certs,
   38|      0|						    &cert->issuer);
   39|      0|	}
   40|       |
   41|      0|	return len;
   42|     60|}
tlsv1_client_write.c:tls_write_client_certificate:
  254|     60|{
  255|     60|	u8 *pos, *rhdr, *hs_start, *hs_length, *cert_start;
  256|     60|	size_t rlen;
  257|     60|	struct x509_certificate *cert;
  258|       |
  259|     60|	pos = *msgpos;
  260|     60|	if (TLS_RECORD_HEADER_LEN + 1 + 3 + 3 > end - pos) {
  ------------------
  |  |   21|     60|#define TLS_RECORD_HEADER_LEN 5
  ------------------
  |  Branch (260:6): [True: 0, False: 60]
  ------------------
  261|      0|		tls_alert(conn, TLS_ALERT_LEVEL_FATAL,
  ------------------
  |  |  128|      0|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
  262|      0|			  TLS_ALERT_INTERNAL_ERROR);
  ------------------
  |  |  151|      0|#define TLS_ALERT_INTERNAL_ERROR		80
  ------------------
  263|      0|		return -1;
  264|      0|	}
  265|       |
  266|     60|	wpa_printf(MSG_DEBUG, "TLSv1: Send Certificate");
  267|     60|	rhdr = pos;
  268|     60|	pos += TLS_RECORD_HEADER_LEN;
  ------------------
  |  |   21|     60|#define TLS_RECORD_HEADER_LEN 5
  ------------------
  269|       |
  270|       |	/* opaque fragment[TLSPlaintext.length] */
  271|       |
  272|       |	/* Handshake */
  273|     60|	hs_start = pos;
  274|       |	/* HandshakeType msg_type */
  275|     60|	*pos++ = TLS_HANDSHAKE_TYPE_CERTIFICATE;
  276|       |	/* uint24 length (to be filled) */
  277|     60|	hs_length = pos;
  278|     60|	pos += 3;
  279|       |	/* body - Certificate */
  280|       |	/* uint24 length (to be filled) */
  281|     60|	cert_start = pos;
  282|     60|	pos += 3;
  283|     60|	cert = conn->cred ? conn->cred->cert : NULL;
  ------------------
  |  Branch (283:9): [True: 0, False: 60]
  ------------------
  284|     60|	while (cert) {
  ------------------
  |  Branch (284:9): [True: 0, False: 60]
  ------------------
  285|      0|		if (3 + cert->cert_len > (size_t) (end - pos)) {
  ------------------
  |  Branch (285:7): [True: 0, False: 0]
  ------------------
  286|      0|			wpa_printf(MSG_DEBUG, "TLSv1: Not enough buffer space "
  287|      0|				   "for Certificate (cert_len=%lu left=%lu)",
  288|      0|				   (unsigned long) cert->cert_len,
  289|      0|				   (unsigned long) (end - pos));
  290|      0|			tls_alert(conn, TLS_ALERT_LEVEL_FATAL,
  ------------------
  |  |  128|      0|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
  291|      0|				  TLS_ALERT_INTERNAL_ERROR);
  ------------------
  |  |  151|      0|#define TLS_ALERT_INTERNAL_ERROR		80
  ------------------
  292|      0|			return -1;
  293|      0|		}
  294|      0|		WPA_PUT_BE24(pos, cert->cert_len);
  295|      0|		pos += 3;
  296|      0|		os_memcpy(pos, cert->cert_start, cert->cert_len);
  ------------------
  |  |  523|      0|#define os_memcpy(d, s, n) memcpy((d), (s), (n))
  ------------------
  297|      0|		pos += cert->cert_len;
  298|       |
  299|      0|		if (x509_certificate_self_signed(cert))
  ------------------
  |  Branch (299:7): [True: 0, False: 0]
  ------------------
  300|      0|			break;
  301|      0|		cert = x509_certificate_get_subject(conn->cred->trusted_certs,
  302|      0|						    &cert->issuer);
  303|      0|	}
  304|     60|	if (conn->cred == NULL || cert == conn->cred->cert || cert == NULL) {
  ------------------
  |  Branch (304:6): [True: 60, False: 0]
  |  Branch (304:28): [True: 0, False: 0]
  |  Branch (304:56): [True: 0, False: 0]
  ------------------
  305|       |		/*
  306|       |		 * Client was not configured with all the needed certificates
  307|       |		 * to form a full certificate chain. The server may fail to
  308|       |		 * validate the chain unless it is configured with all the
  309|       |		 * missing CA certificates.
  310|       |		 */
  311|     60|		wpa_printf(MSG_DEBUG, "TLSv1: Full client certificate chain "
  312|     60|			   "not configured - validation may fail");
  313|     60|	}
  314|     60|	WPA_PUT_BE24(cert_start, pos - cert_start - 3);
  315|       |
  316|     60|	WPA_PUT_BE24(hs_length, pos - hs_length - 3);
  317|       |
  318|     60|	if (tlsv1_record_send(&conn->rl, TLS_CONTENT_TYPE_HANDSHAKE,
  ------------------
  |  Branch (318:6): [True: 0, False: 60]
  ------------------
  319|     60|			      rhdr, end - rhdr, hs_start, pos - hs_start,
  320|     60|			      &rlen) < 0) {
  321|      0|		wpa_printf(MSG_DEBUG, "TLSv1: Failed to generate a record");
  322|      0|		tls_alert(conn, TLS_ALERT_LEVEL_FATAL,
  ------------------
  |  |  128|      0|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
  323|      0|			  TLS_ALERT_INTERNAL_ERROR);
  ------------------
  |  |  151|      0|#define TLS_ALERT_INTERNAL_ERROR		80
  ------------------
  324|      0|		return -1;
  325|      0|	}
  326|     60|	pos = rhdr + rlen;
  327|       |
  328|     60|	tls_verify_hash_add(&conn->verify, hs_start, pos - hs_start);
  329|       |
  330|     60|	*msgpos = pos;
  331|       |
  332|     60|	return 0;
  333|     60|}
tlsv1_client_write.c:tls_write_client_key_exchange:
  508|    414|{
  509|    414|	u8 *pos, *rhdr, *hs_start, *hs_length;
  510|    414|	size_t rlen;
  511|    414|	tls_key_exchange keyx;
  512|    414|	const struct tls_cipher_suite *suite;
  513|       |
  514|    414|	suite = tls_get_cipher_suite(conn->rl.cipher_suite);
  515|    414|	if (suite == NULL)
  ------------------
  |  Branch (515:6): [True: 0, False: 414]
  ------------------
  516|      0|		keyx = TLS_KEY_X_NULL;
  517|    414|	else
  518|    414|		keyx = suite->key_exchange;
  519|       |
  520|    414|	pos = *msgpos;
  521|       |
  522|    414|	wpa_printf(MSG_DEBUG, "TLSv1: Send ClientKeyExchange");
  523|       |
  524|    414|	rhdr = pos;
  525|    414|	pos += TLS_RECORD_HEADER_LEN;
  ------------------
  |  |   21|    414|#define TLS_RECORD_HEADER_LEN 5
  ------------------
  526|       |
  527|       |	/* opaque fragment[TLSPlaintext.length] */
  528|       |
  529|       |	/* Handshake */
  530|    414|	hs_start = pos;
  531|       |	/* HandshakeType msg_type */
  532|    414|	*pos++ = TLS_HANDSHAKE_TYPE_CLIENT_KEY_EXCHANGE;
  533|       |	/* uint24 length (to be filled) */
  534|    414|	hs_length = pos;
  535|    414|	pos += 3;
  536|       |	/* body - ClientKeyExchange */
  537|    414|	if (keyx == TLS_KEY_X_DH_anon || keyx == TLS_KEY_X_DHE_RSA) {
  ------------------
  |  Branch (537:6): [True: 0, False: 414]
  |  Branch (537:35): [True: 74, False: 340]
  ------------------
  538|     74|		if (tlsv1_key_x_dh(conn, &pos, end) < 0)
  ------------------
  |  Branch (538:7): [True: 4, False: 70]
  ------------------
  539|      4|			return -1;
  540|    340|	} else {
  541|    340|		if (tlsv1_key_x_rsa(conn, &pos, end) < 0)
  ------------------
  |  Branch (541:7): [True: 8, False: 332]
  ------------------
  542|      8|			return -1;
  543|    340|	}
  544|       |
  545|    402|	WPA_PUT_BE24(hs_length, pos - hs_length - 3);
  546|       |
  547|    402|	if (tlsv1_record_send(&conn->rl, TLS_CONTENT_TYPE_HANDSHAKE,
  ------------------
  |  Branch (547:6): [True: 0, False: 402]
  ------------------
  548|    402|			      rhdr, end - rhdr, hs_start, pos - hs_start,
  549|    402|			      &rlen) < 0) {
  550|      0|		wpa_printf(MSG_DEBUG, "TLSv1: Failed to create a record");
  551|      0|		tls_alert(conn, TLS_ALERT_LEVEL_FATAL,
  ------------------
  |  |  128|      0|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
  552|      0|			  TLS_ALERT_INTERNAL_ERROR);
  ------------------
  |  |  151|      0|#define TLS_ALERT_INTERNAL_ERROR		80
  ------------------
  553|      0|		return -1;
  554|      0|	}
  555|    402|	pos = rhdr + rlen;
  556|    402|	tls_verify_hash_add(&conn->verify, hs_start, pos - hs_start);
  557|       |
  558|    402|	*msgpos = pos;
  559|       |
  560|    402|	return 0;
  561|    402|}
tlsv1_client_write.c:tlsv1_key_x_dh:
  337|     74|{
  338|       |	/* ClientDiffieHellmanPublic */
  339|     74|	u8 *csecret, *csecret_start, *dh_yc, *shared;
  340|     74|	size_t csecret_len, dh_yc_len, shared_len;
  341|       |
  342|     74|	csecret_len = conn->dh_p_len;
  343|     74|	csecret = os_malloc(csecret_len);
  ------------------
  |  |  505|     74|#define os_malloc(s) malloc((s))
  ------------------
  344|     74|	if (csecret == NULL) {
  ------------------
  |  Branch (344:6): [True: 0, False: 74]
  ------------------
  345|      0|		wpa_printf(MSG_DEBUG, "TLSv1: Failed to allocate "
  346|      0|			   "memory for Yc (Diffie-Hellman)");
  347|      0|		tls_alert(conn, TLS_ALERT_LEVEL_FATAL,
  ------------------
  |  |  128|      0|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
  348|      0|			  TLS_ALERT_INTERNAL_ERROR);
  ------------------
  |  |  151|      0|#define TLS_ALERT_INTERNAL_ERROR		80
  ------------------
  349|      0|		return -1;
  350|      0|	}
  351|     74|	if (random_get_bytes(csecret, csecret_len)) {
  ------------------
  |  |   16|     74|#define random_get_bytes(b, l) os_get_random((b), (l))
  |  |  ------------------
  |  |  |  Branch (16:32): [True: 0, False: 74]
  |  |  ------------------
  ------------------
  352|      0|		wpa_printf(MSG_DEBUG, "TLSv1: Failed to get random "
  353|      0|			   "data for Diffie-Hellman");
  354|      0|		tls_alert(conn, TLS_ALERT_LEVEL_FATAL,
  ------------------
  |  |  128|      0|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
  355|      0|			  TLS_ALERT_INTERNAL_ERROR);
  ------------------
  |  |  151|      0|#define TLS_ALERT_INTERNAL_ERROR		80
  ------------------
  356|      0|		os_free(csecret);
  ------------------
  |  |  511|      0|#define os_free(p) free((p))
  ------------------
  357|      0|		return -1;
  358|      0|	}
  359|       |
  360|     74|	if (os_memcmp(csecret, conn->dh_p, csecret_len) > 0)
  ------------------
  |  |  532|     74|#define os_memcmp(s1, s2, n) memcmp((s1), (s2), (n))
  ------------------
  |  Branch (360:6): [True: 0, False: 74]
  ------------------
  361|      0|		csecret[0] = 0; /* make sure Yc < p */
  362|       |
  363|     74|	csecret_start = csecret;
  364|    144|	while (csecret_len > 1 && *csecret_start == 0) {
  ------------------
  |  Branch (364:9): [True: 140, False: 4]
  |  Branch (364:28): [True: 70, False: 70]
  ------------------
  365|     70|		csecret_start++;
  366|     70|		csecret_len--;
  367|     70|	}
  368|     74|	wpa_hexdump_key(MSG_DEBUG, "TLSv1: DH client's secret value",
  369|     74|			csecret_start, csecret_len);
  370|       |
  371|       |	/* Yc = g^csecret mod p */
  372|     74|	dh_yc_len = conn->dh_p_len;
  373|     74|	dh_yc = os_malloc(dh_yc_len);
  ------------------
  |  |  505|     74|#define os_malloc(s) malloc((s))
  ------------------
  374|     74|	if (dh_yc == NULL) {
  ------------------
  |  Branch (374:6): [True: 0, False: 74]
  ------------------
  375|      0|		wpa_printf(MSG_DEBUG, "TLSv1: Failed to allocate "
  376|      0|			   "memory for Diffie-Hellman");
  377|      0|		tls_alert(conn, TLS_ALERT_LEVEL_FATAL,
  ------------------
  |  |  128|      0|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
  378|      0|			  TLS_ALERT_INTERNAL_ERROR);
  ------------------
  |  |  151|      0|#define TLS_ALERT_INTERNAL_ERROR		80
  ------------------
  379|      0|		os_free(csecret);
  ------------------
  |  |  511|      0|#define os_free(p) free((p))
  ------------------
  380|      0|		return -1;
  381|      0|	}
  382|     74|	if (crypto_mod_exp(conn->dh_g, conn->dh_g_len,
  ------------------
  |  Branch (382:6): [True: 4, False: 70]
  ------------------
  383|     74|			   csecret_start, csecret_len,
  384|     74|			   conn->dh_p, conn->dh_p_len,
  385|     74|			   dh_yc, &dh_yc_len)) {
  386|      4|		tls_alert(conn, TLS_ALERT_LEVEL_FATAL,
  ------------------
  |  |  128|      4|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
  387|      4|			  TLS_ALERT_INTERNAL_ERROR);
  ------------------
  |  |  151|      4|#define TLS_ALERT_INTERNAL_ERROR		80
  ------------------
  388|      4|		os_free(csecret);
  ------------------
  |  |  511|      4|#define os_free(p) free((p))
  ------------------
  389|      4|		os_free(dh_yc);
  ------------------
  |  |  511|      4|#define os_free(p) free((p))
  ------------------
  390|      4|		return -1;
  391|      4|	}
  392|       |
  393|     70|	wpa_hexdump(MSG_DEBUG, "TLSv1: DH Yc (client's public value)",
  394|     70|		    dh_yc, dh_yc_len);
  395|       |
  396|     70|	if (end - *pos < 2) {
  ------------------
  |  Branch (396:6): [True: 0, False: 70]
  ------------------
  397|      0|		tls_alert(conn, TLS_ALERT_LEVEL_FATAL,
  ------------------
  |  |  128|      0|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
  398|      0|			  TLS_ALERT_INTERNAL_ERROR);
  ------------------
  |  |  151|      0|#define TLS_ALERT_INTERNAL_ERROR		80
  ------------------
  399|      0|		os_free(csecret);
  ------------------
  |  |  511|      0|#define os_free(p) free((p))
  ------------------
  400|      0|		os_free(dh_yc);
  ------------------
  |  |  511|      0|#define os_free(p) free((p))
  ------------------
  401|      0|		return -1;
  402|      0|	}
  403|     70|	WPA_PUT_BE16(*pos, dh_yc_len);
  404|     70|	*pos += 2;
  405|     70|	if (dh_yc_len > (size_t) (end - *pos)) {
  ------------------
  |  Branch (405:6): [True: 0, False: 70]
  ------------------
  406|      0|		wpa_printf(MSG_DEBUG, "TLSv1: Not enough room in the "
  407|      0|			   "message buffer for Yc");
  408|      0|		tls_alert(conn, TLS_ALERT_LEVEL_FATAL,
  ------------------
  |  |  128|      0|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
  409|      0|			  TLS_ALERT_INTERNAL_ERROR);
  ------------------
  |  |  151|      0|#define TLS_ALERT_INTERNAL_ERROR		80
  ------------------
  410|      0|		os_free(csecret);
  ------------------
  |  |  511|      0|#define os_free(p) free((p))
  ------------------
  411|      0|		os_free(dh_yc);
  ------------------
  |  |  511|      0|#define os_free(p) free((p))
  ------------------
  412|      0|		return -1;
  413|      0|	}
  414|     70|	os_memcpy(*pos, dh_yc, dh_yc_len);
  ------------------
  |  |  523|     70|#define os_memcpy(d, s, n) memcpy((d), (s), (n))
  ------------------
  415|     70|	*pos += dh_yc_len;
  416|     70|	os_free(dh_yc);
  ------------------
  |  |  511|     70|#define os_free(p) free((p))
  ------------------
  417|       |
  418|     70|	shared_len = conn->dh_p_len;
  419|     70|	shared = os_malloc(shared_len);
  ------------------
  |  |  505|     70|#define os_malloc(s) malloc((s))
  ------------------
  420|     70|	if (shared == NULL) {
  ------------------
  |  Branch (420:6): [True: 0, False: 70]
  ------------------
  421|      0|		wpa_printf(MSG_DEBUG, "TLSv1: Could not allocate memory for "
  422|      0|			   "DH");
  423|      0|		tls_alert(conn, TLS_ALERT_LEVEL_FATAL,
  ------------------
  |  |  128|      0|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
  424|      0|			  TLS_ALERT_INTERNAL_ERROR);
  ------------------
  |  |  151|      0|#define TLS_ALERT_INTERNAL_ERROR		80
  ------------------
  425|      0|		os_free(csecret);
  ------------------
  |  |  511|      0|#define os_free(p) free((p))
  ------------------
  426|      0|		return -1;
  427|      0|	}
  428|       |
  429|       |	/* shared = Ys^csecret mod p */
  430|     70|	if (crypto_mod_exp(conn->dh_ys, conn->dh_ys_len,
  ------------------
  |  Branch (430:6): [True: 0, False: 70]
  ------------------
  431|     70|			   csecret_start, csecret_len,
  432|     70|			   conn->dh_p, conn->dh_p_len,
  433|     70|			   shared, &shared_len)) {
  434|      0|		tls_alert(conn, TLS_ALERT_LEVEL_FATAL,
  ------------------
  |  |  128|      0|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
  435|      0|			  TLS_ALERT_INTERNAL_ERROR);
  ------------------
  |  |  151|      0|#define TLS_ALERT_INTERNAL_ERROR		80
  ------------------
  436|      0|		os_free(csecret);
  ------------------
  |  |  511|      0|#define os_free(p) free((p))
  ------------------
  437|      0|		os_free(shared);
  ------------------
  |  |  511|      0|#define os_free(p) free((p))
  ------------------
  438|      0|		return -1;
  439|      0|	}
  440|     70|	wpa_hexdump_key(MSG_DEBUG, "TLSv1: Shared secret from DH key exchange",
  441|     70|			shared, shared_len);
  442|       |
  443|     70|	os_memset(csecret_start, 0, csecret_len);
  ------------------
  |  |  529|     70|#define os_memset(s, c, n) memset(s, c, n)
  ------------------
  444|     70|	os_free(csecret);
  ------------------
  |  |  511|     70|#define os_free(p) free((p))
  ------------------
  445|     70|	if (tls_derive_keys(conn, shared, shared_len)) {
  ------------------
  |  Branch (445:6): [True: 0, False: 70]
  ------------------
  446|      0|		wpa_printf(MSG_DEBUG, "TLSv1: Failed to derive keys");
  447|      0|		tls_alert(conn, TLS_ALERT_LEVEL_FATAL,
  ------------------
  |  |  128|      0|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
  448|      0|			  TLS_ALERT_INTERNAL_ERROR);
  ------------------
  |  |  151|      0|#define TLS_ALERT_INTERNAL_ERROR		80
  ------------------
  449|      0|		os_free(shared);
  ------------------
  |  |  511|      0|#define os_free(p) free((p))
  ------------------
  450|      0|		return -1;
  451|      0|	}
  452|     70|	os_memset(shared, 0, shared_len);
  ------------------
  |  |  529|     70|#define os_memset(s, c, n) memset(s, c, n)
  ------------------
  453|     70|	os_free(shared);
  ------------------
  |  |  511|     70|#define os_free(p) free((p))
  ------------------
  454|     70|	tlsv1_client_free_dh(conn);
  455|     70|	return 0;
  456|     70|}
tlsv1_client_write.c:tlsv1_key_x_rsa:
  460|    340|{
  461|    340|	u8 pre_master_secret[TLS_PRE_MASTER_SECRET_LEN];
  462|    340|	size_t clen;
  463|    340|	int res;
  464|       |
  465|    340|	if (tls_derive_pre_master_secret(conn, pre_master_secret) < 0 ||
  ------------------
  |  Branch (465:6): [True: 0, False: 340]
  ------------------
  466|    340|	    tls_derive_keys(conn, pre_master_secret,
  ------------------
  |  Branch (466:6): [True: 0, False: 340]
  ------------------
  467|    340|			    TLS_PRE_MASTER_SECRET_LEN)) {
  ------------------
  |  |   27|    340|#define TLS_PRE_MASTER_SECRET_LEN 48
  ------------------
  468|      0|		wpa_printf(MSG_DEBUG, "TLSv1: Failed to derive keys");
  469|      0|		tls_alert(conn, TLS_ALERT_LEVEL_FATAL,
  ------------------
  |  |  128|      0|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
  470|      0|			  TLS_ALERT_INTERNAL_ERROR);
  ------------------
  |  |  151|      0|#define TLS_ALERT_INTERNAL_ERROR		80
  ------------------
  471|      0|		return -1;
  472|      0|	}
  473|       |
  474|       |	/* EncryptedPreMasterSecret */
  475|    340|	if (conn->server_rsa_key == NULL) {
  ------------------
  |  Branch (475:6): [True: 3, False: 337]
  ------------------
  476|      3|		wpa_printf(MSG_DEBUG, "TLSv1: No server RSA key to "
  477|      3|			   "use for encrypting pre-master secret");
  478|      3|		tls_alert(conn, TLS_ALERT_LEVEL_FATAL,
  ------------------
  |  |  128|      3|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
  479|      3|			  TLS_ALERT_INTERNAL_ERROR);
  ------------------
  |  |  151|      3|#define TLS_ALERT_INTERNAL_ERROR		80
  ------------------
  480|      3|		return -1;
  481|      3|	}
  482|       |
  483|       |	/* RSA encrypted value is encoded with PKCS #1 v1.5 block type 2. */
  484|    337|	*pos += 2;
  485|    337|	clen = end - *pos;
  486|    337|	res = crypto_public_key_encrypt_pkcs1_v15(
  487|    337|		conn->server_rsa_key,
  488|    337|		pre_master_secret, TLS_PRE_MASTER_SECRET_LEN,
  ------------------
  |  |   27|    337|#define TLS_PRE_MASTER_SECRET_LEN 48
  ------------------
  489|    337|		*pos, &clen);
  490|    337|	os_memset(pre_master_secret, 0, TLS_PRE_MASTER_SECRET_LEN);
  ------------------
  |  |  529|    337|#define os_memset(s, c, n) memset(s, c, n)
  ------------------
  491|    337|	if (res < 0) {
  ------------------
  |  Branch (491:6): [True: 5, False: 332]
  ------------------
  492|      5|		wpa_printf(MSG_DEBUG, "TLSv1: RSA encryption failed");
  493|      5|		tls_alert(conn, TLS_ALERT_LEVEL_FATAL,
  ------------------
  |  |  128|      5|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
  494|      5|			  TLS_ALERT_INTERNAL_ERROR);
  ------------------
  |  |  151|      5|#define TLS_ALERT_INTERNAL_ERROR		80
  ------------------
  495|      5|		return -1;
  496|      5|	}
  497|    332|	WPA_PUT_BE16(*pos - 2, clen);
  498|    332|	wpa_hexdump(MSG_MSGDUMP, "TLSv1: Encrypted pre_master_secret",
  499|    332|		    *pos, clen);
  500|    332|	*pos += clen;
  501|       |
  502|    332|	return 0;
  503|    337|}
tlsv1_client_write.c:tls_write_client_change_cipher_spec:
  738|    402|{
  739|    402|	size_t rlen;
  740|    402|	u8 payload[1];
  741|       |
  742|    402|	wpa_printf(MSG_DEBUG, "TLSv1: Send ChangeCipherSpec");
  743|       |
  744|    402|	payload[0] = TLS_CHANGE_CIPHER_SPEC;
  745|       |
  746|    402|	if (tlsv1_record_send(&conn->rl, TLS_CONTENT_TYPE_CHANGE_CIPHER_SPEC,
  ------------------
  |  Branch (746:6): [True: 0, False: 402]
  ------------------
  747|    402|			      *msgpos, end - *msgpos, payload, sizeof(payload),
  748|    402|			      &rlen) < 0) {
  749|      0|		wpa_printf(MSG_DEBUG, "TLSv1: Failed to create a record");
  750|      0|		tls_alert(conn, TLS_ALERT_LEVEL_FATAL,
  ------------------
  |  |  128|      0|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
  751|      0|			  TLS_ALERT_INTERNAL_ERROR);
  ------------------
  |  |  151|      0|#define TLS_ALERT_INTERNAL_ERROR		80
  ------------------
  752|      0|		return -1;
  753|      0|	}
  754|       |
  755|    402|	if (tlsv1_record_change_write_cipher(&conn->rl) < 0) {
  ------------------
  |  Branch (755:6): [True: 0, False: 402]
  ------------------
  756|      0|		wpa_printf(MSG_DEBUG, "TLSv1: Failed to set write cipher for "
  757|      0|			   "record layer");
  758|      0|		tls_alert(conn, TLS_ALERT_LEVEL_FATAL,
  ------------------
  |  |  128|      0|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
  759|      0|			  TLS_ALERT_INTERNAL_ERROR);
  ------------------
  |  |  151|      0|#define TLS_ALERT_INTERNAL_ERROR		80
  ------------------
  760|      0|		return -1;
  761|      0|	}
  762|       |
  763|    402|	*msgpos += rlen;
  764|       |
  765|    402|	return 0;
  766|    402|}
tlsv1_client_write.c:tls_write_client_finished:
  771|    402|{
  772|    402|	u8 *pos, *hs_start;
  773|    402|	size_t rlen, hlen;
  774|    402|	u8 verify_data[1 + 3 + TLS_VERIFY_DATA_LEN];
  775|    402|	u8 hash[MD5_MAC_LEN + SHA1_MAC_LEN];
  776|       |
  777|    402|	wpa_printf(MSG_DEBUG, "TLSv1: Send Finished");
  778|       |
  779|       |	/* Encrypted Handshake Message: Finished */
  780|       |
  781|    402|#ifdef CONFIG_TLSV12
  782|    402|	if (conn->rl.tls_version >= TLS_VERSION_1_2) {
  ------------------
  |  |   16|    402|#define TLS_VERSION_1_2 0x0303 /* TLSv1.2 */
  ------------------
  |  Branch (782:6): [True: 165, False: 237]
  ------------------
  783|    165|		hlen = SHA256_MAC_LEN;
  ------------------
  |  |   12|    165|#define SHA256_MAC_LEN 32
  ------------------
  784|    165|		if (conn->verify.sha256_client == NULL ||
  ------------------
  |  Branch (784:7): [True: 0, False: 165]
  ------------------
  785|    165|		    crypto_hash_finish(conn->verify.sha256_client, hash, &hlen)
  ------------------
  |  Branch (785:7): [True: 0, False: 165]
  ------------------
  786|    165|		    < 0) {
  787|      0|			tls_alert(conn, TLS_ALERT_LEVEL_FATAL,
  ------------------
  |  |  128|      0|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
  788|      0|				  TLS_ALERT_INTERNAL_ERROR);
  ------------------
  |  |  151|      0|#define TLS_ALERT_INTERNAL_ERROR		80
  ------------------
  789|      0|			conn->verify.sha256_client = NULL;
  790|      0|			return -1;
  791|      0|		}
  792|    165|		conn->verify.sha256_client = NULL;
  793|    237|	} else {
  794|    237|#endif /* CONFIG_TLSV12 */
  795|       |
  796|    237|	hlen = MD5_MAC_LEN;
  ------------------
  |  |   12|    237|#define MD5_MAC_LEN 16
  ------------------
  797|    237|	if (conn->verify.md5_client == NULL ||
  ------------------
  |  Branch (797:6): [True: 0, False: 237]
  ------------------
  798|    237|	    crypto_hash_finish(conn->verify.md5_client, hash, &hlen) < 0) {
  ------------------
  |  Branch (798:6): [True: 0, False: 237]
  ------------------
  799|      0|		tls_alert(conn, TLS_ALERT_LEVEL_FATAL,
  ------------------
  |  |  128|      0|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
  800|      0|			  TLS_ALERT_INTERNAL_ERROR);
  ------------------
  |  |  151|      0|#define TLS_ALERT_INTERNAL_ERROR		80
  ------------------
  801|      0|		conn->verify.md5_client = NULL;
  802|      0|		crypto_hash_finish(conn->verify.sha1_client, NULL, NULL);
  803|      0|		conn->verify.sha1_client = NULL;
  804|      0|		return -1;
  805|      0|	}
  806|    237|	conn->verify.md5_client = NULL;
  807|    237|	hlen = SHA1_MAC_LEN;
  ------------------
  |  |   12|    237|#define SHA1_MAC_LEN 20
  ------------------
  808|    237|	if (conn->verify.sha1_client == NULL ||
  ------------------
  |  Branch (808:6): [True: 0, False: 237]
  ------------------
  809|    237|	    crypto_hash_finish(conn->verify.sha1_client, hash + MD5_MAC_LEN,
  ------------------
  |  |   12|    237|#define MD5_MAC_LEN 16
  ------------------
  |  Branch (809:6): [True: 0, False: 237]
  ------------------
  810|    237|			       &hlen) < 0) {
  811|      0|		conn->verify.sha1_client = NULL;
  812|      0|		tls_alert(conn, TLS_ALERT_LEVEL_FATAL,
  ------------------
  |  |  128|      0|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
  813|      0|			  TLS_ALERT_INTERNAL_ERROR);
  ------------------
  |  |  151|      0|#define TLS_ALERT_INTERNAL_ERROR		80
  ------------------
  814|      0|		return -1;
  815|      0|	}
  816|    237|	conn->verify.sha1_client = NULL;
  817|    237|	hlen = MD5_MAC_LEN + SHA1_MAC_LEN;
  ------------------
  |  |   12|    237|#define MD5_MAC_LEN 16
  ------------------
              	hlen = MD5_MAC_LEN + SHA1_MAC_LEN;
  ------------------
  |  |   12|    237|#define SHA1_MAC_LEN 20
  ------------------
  818|       |
  819|    237|#ifdef CONFIG_TLSV12
  820|    237|	}
  821|    402|#endif /* CONFIG_TLSV12 */
  822|       |
  823|    402|	if (tls_prf(conn->rl.tls_version,
  ------------------
  |  Branch (823:6): [True: 0, False: 402]
  ------------------
  824|    402|		    conn->master_secret, TLS_MASTER_SECRET_LEN,
  ------------------
  |  |   28|    402|#define TLS_MASTER_SECRET_LEN 48
  ------------------
  825|    402|		    "client finished", hash, hlen,
  826|    402|		    verify_data + 1 + 3, TLS_VERIFY_DATA_LEN)) {
  ------------------
  |  |   30|    402|#define TLS_VERIFY_DATA_LEN 12
  ------------------
  827|      0|		wpa_printf(MSG_DEBUG, "TLSv1: Failed to generate verify_data");
  828|      0|		tls_alert(conn, TLS_ALERT_LEVEL_FATAL,
  ------------------
  |  |  128|      0|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
  829|      0|			  TLS_ALERT_INTERNAL_ERROR);
  ------------------
  |  |  151|      0|#define TLS_ALERT_INTERNAL_ERROR		80
  ------------------
  830|      0|		return -1;
  831|      0|	}
  832|    402|	wpa_hexdump_key(MSG_DEBUG, "TLSv1: verify_data (client)",
  833|    402|			verify_data + 1 + 3, TLS_VERIFY_DATA_LEN);
  ------------------
  |  |   30|    402|#define TLS_VERIFY_DATA_LEN 12
  ------------------
  834|       |
  835|       |	/* Handshake */
  836|    402|	pos = hs_start = verify_data;
  837|       |	/* HandshakeType msg_type */
  838|    402|	*pos++ = TLS_HANDSHAKE_TYPE_FINISHED;
  839|       |	/* uint24 length */
  840|    402|	WPA_PUT_BE24(pos, TLS_VERIFY_DATA_LEN);
  ------------------
  |  |   30|    402|#define TLS_VERIFY_DATA_LEN 12
  ------------------
  841|    402|	pos += 3;
  842|    402|	pos += TLS_VERIFY_DATA_LEN; /* verify_data already in place */
  ------------------
  |  |   30|    402|#define TLS_VERIFY_DATA_LEN 12
  ------------------
  843|    402|	tls_verify_hash_add(&conn->verify, hs_start, pos - hs_start);
  844|       |
  845|    402|	if (tlsv1_record_send(&conn->rl, TLS_CONTENT_TYPE_HANDSHAKE,
  ------------------
  |  Branch (845:6): [True: 0, False: 402]
  ------------------
  846|    402|			      *msgpos, end - *msgpos, hs_start, pos - hs_start,
  847|    402|			      &rlen) < 0) {
  848|      0|		wpa_printf(MSG_DEBUG, "TLSv1: Failed to create a record");
  849|      0|		tls_alert(conn, TLS_ALERT_LEVEL_FATAL,
  ------------------
  |  |  128|      0|#define TLS_ALERT_LEVEL_FATAL 2
  ------------------
  850|      0|			  TLS_ALERT_INTERNAL_ERROR);
  ------------------
  |  |  151|      0|#define TLS_ALERT_INTERNAL_ERROR		80
  ------------------
  851|      0|		return -1;
  852|      0|	}
  853|       |
  854|    402|	*msgpos += rlen;
  855|       |
  856|    402|	return 0;
  857|    402|}

tls_get_cipher_suite:
  100|  6.33k|{
  101|  6.33k|	size_t i;
  102|  55.4k|	for (i = 0; i < NUM_TLS_CIPHER_SUITES; i++)
  ------------------
  |  |   73|  55.4k|#define NUM_TLS_CIPHER_SUITES ARRAY_SIZE(tls_cipher_suites)
  |  |  ------------------
  |  |  |  |  607|  55.4k|#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
  |  |  ------------------
  ------------------
  |  Branch (102:14): [True: 55.4k, False: 0]
  ------------------
  103|  55.4k|		if (tls_cipher_suites[i].suite == suite)
  ------------------
  |  Branch (103:7): [True: 6.33k, False: 49.1k]
  ------------------
  104|  6.33k|			return &tls_cipher_suites[i];
  105|      0|	return NULL;
  106|  6.33k|}
tls_get_cipher_data:
  110|  4.96k|{
  111|  4.96k|	size_t i;
  112|  14.6k|	for (i = 0; i < NUM_TLS_CIPHER_DATA; i++)
  ------------------
  |  |   91|  14.6k|#define NUM_TLS_CIPHER_DATA ARRAY_SIZE(tls_ciphers)
  |  |  ------------------
  |  |  |  |  607|  14.6k|#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
  |  |  ------------------
  ------------------
  |  Branch (112:14): [True: 14.6k, False: 0]
  ------------------
  113|  14.6k|		if (tls_ciphers[i].cipher == cipher)
  ------------------
  |  Branch (113:7): [True: 4.96k, False: 9.66k]
  ------------------
  114|  4.96k|			return &tls_ciphers[i];
  115|      0|	return NULL;
  116|  4.96k|}
tls_server_key_exchange_allowed:
  120|    484|{
  121|    484|	const struct tls_cipher_suite *suite;
  122|       |
  123|       |	/* RFC 2246, Section 7.4.3 */
  124|    484|	suite = tls_get_cipher_suite(cipher);
  125|    484|	if (suite == NULL)
  ------------------
  |  Branch (125:6): [True: 0, False: 484]
  ------------------
  126|      0|		return 0;
  127|       |
  128|    484|	switch (suite->key_exchange) {
  129|      0|	case TLS_KEY_X_DHE_DSS:
  ------------------
  |  Branch (129:2): [True: 0, False: 484]
  ------------------
  130|      0|	case TLS_KEY_X_DHE_DSS_EXPORT:
  ------------------
  |  Branch (130:2): [True: 0, False: 484]
  ------------------
  131|    479|	case TLS_KEY_X_DHE_RSA:
  ------------------
  |  Branch (131:2): [True: 479, False: 5]
  ------------------
  132|    479|	case TLS_KEY_X_DHE_RSA_EXPORT:
  ------------------
  |  Branch (132:2): [True: 0, False: 484]
  ------------------
  133|    479|	case TLS_KEY_X_DH_anon_EXPORT:
  ------------------
  |  Branch (133:2): [True: 0, False: 484]
  ------------------
  134|    479|	case TLS_KEY_X_DH_anon:
  ------------------
  |  Branch (134:2): [True: 0, False: 484]
  ------------------
  135|    479|		return 1;
  136|      0|	case TLS_KEY_X_RSA_EXPORT:
  ------------------
  |  Branch (136:2): [True: 0, False: 484]
  ------------------
  137|      0|		return 1 /* FIX: public key len > 512 bits */;
  138|      5|	default:
  ------------------
  |  Branch (138:2): [True: 5, False: 479]
  ------------------
  139|      5|		return 0;
  140|    484|	}
  141|    484|}
tls_parse_cert:
  156|  1.87k|{
  157|  1.87k|	struct x509_certificate *cert;
  158|       |
  159|  1.87k|	wpa_hexdump(MSG_MSGDUMP, "TLSv1: Parse ASN.1 DER certificate",
  160|  1.87k|		    buf, len);
  161|       |
  162|  1.87k|	*pk = crypto_public_key_from_cert(buf, len);
  163|  1.87k|	if (*pk)
  ------------------
  |  Branch (163:6): [True: 0, False: 1.87k]
  ------------------
  164|      0|		return 0;
  165|       |
  166|  1.87k|	cert = x509_certificate_parse(buf, len);
  167|  1.87k|	if (cert == NULL) {
  ------------------
  |  Branch (167:6): [True: 1.09k, False: 788]
  ------------------
  168|  1.09k|		wpa_printf(MSG_DEBUG, "TLSv1: Failed to parse X.509 "
  169|  1.09k|			   "certificate");
  170|  1.09k|		return -1;
  171|  1.09k|	}
  172|       |
  173|       |	/* TODO
  174|       |	 * verify key usage (must allow encryption)
  175|       |	 *
  176|       |	 * All certificate profiles, key and cryptographic formats are
  177|       |	 * defined by the IETF PKIX working group [PKIX]. When a key
  178|       |	 * usage extension is present, the digitalSignature bit must be
  179|       |	 * set for the key to be eligible for signing, as described
  180|       |	 * above, and the keyEncipherment bit must be present to allow
  181|       |	 * encryption, as described above. The keyAgreement bit must be
  182|       |	 * set on Diffie-Hellman certificates. (PKIX: RFC 3280)
  183|       |	 */
  184|       |
  185|    788|	*pk = crypto_public_key_import(cert->public_key, cert->public_key_len);
  186|    788|	x509_certificate_free(cert);
  187|       |
  188|    788|	if (*pk == NULL) {
  ------------------
  |  Branch (188:6): [True: 39, False: 749]
  ------------------
  189|     39|		wpa_printf(MSG_ERROR, "TLSv1: Failed to import "
  190|     39|			   "server public key");
  191|     39|		return -1;
  192|     39|	}
  193|       |
  194|    749|	return 0;
  195|    788|}
tls_verify_hash_init:
  199|  2.68k|{
  200|  2.68k|	tls_verify_hash_free(verify);
  201|  2.68k|	verify->md5_client = crypto_hash_init(CRYPTO_HASH_ALG_MD5, NULL, 0);
  202|  2.68k|	verify->md5_server = crypto_hash_init(CRYPTO_HASH_ALG_MD5, NULL, 0);
  203|  2.68k|	verify->md5_cert = crypto_hash_init(CRYPTO_HASH_ALG_MD5, NULL, 0);
  204|  2.68k|	verify->sha1_client = crypto_hash_init(CRYPTO_HASH_ALG_SHA1, NULL, 0);
  205|  2.68k|	verify->sha1_server = crypto_hash_init(CRYPTO_HASH_ALG_SHA1, NULL, 0);
  206|  2.68k|	verify->sha1_cert = crypto_hash_init(CRYPTO_HASH_ALG_SHA1, NULL, 0);
  207|  2.68k|	if (verify->md5_client == NULL || verify->md5_server == NULL ||
  ------------------
  |  Branch (207:6): [True: 0, False: 2.68k]
  |  Branch (207:36): [True: 0, False: 2.68k]
  ------------------
  208|  2.68k|	    verify->md5_cert == NULL || verify->sha1_client == NULL ||
  ------------------
  |  Branch (208:6): [True: 0, False: 2.68k]
  |  Branch (208:34): [True: 0, False: 2.68k]
  ------------------
  209|  2.68k|	    verify->sha1_server == NULL || verify->sha1_cert == NULL) {
  ------------------
  |  Branch (209:6): [True: 0, False: 2.68k]
  |  Branch (209:37): [True: 0, False: 2.68k]
  ------------------
  210|      0|		tls_verify_hash_free(verify);
  211|      0|		return -1;
  212|      0|	}
  213|  2.68k|#ifdef CONFIG_TLSV12
  214|  2.68k|	verify->sha256_client = crypto_hash_init(CRYPTO_HASH_ALG_SHA256, NULL,
  215|  2.68k|						 0);
  216|  2.68k|	verify->sha256_server = crypto_hash_init(CRYPTO_HASH_ALG_SHA256, NULL,
  217|  2.68k|						 0);
  218|  2.68k|	verify->sha256_cert = crypto_hash_init(CRYPTO_HASH_ALG_SHA256, NULL,
  219|  2.68k|					       0);
  220|  2.68k|	if (verify->sha256_client == NULL || verify->sha256_server == NULL ||
  ------------------
  |  Branch (220:6): [True: 0, False: 2.68k]
  |  Branch (220:39): [True: 0, False: 2.68k]
  ------------------
  221|  2.68k|	    verify->sha256_cert == NULL) {
  ------------------
  |  Branch (221:6): [True: 0, False: 2.68k]
  ------------------
  222|      0|		tls_verify_hash_free(verify);
  223|      0|		return -1;
  224|      0|	}
  225|  2.68k|#endif /* CONFIG_TLSV12 */
  226|  2.68k|	return 0;
  227|  2.68k|}
tls_verify_hash_add:
  232|  7.09k|{
  233|  7.09k|	if (verify->md5_client && verify->sha1_client) {
  ------------------
  |  Branch (233:6): [True: 6.85k, False: 237]
  |  Branch (233:28): [True: 6.85k, False: 0]
  ------------------
  234|  6.85k|		crypto_hash_update(verify->md5_client, buf, len);
  235|  6.85k|		crypto_hash_update(verify->sha1_client, buf, len);
  236|  6.85k|	}
  237|  7.09k|	if (verify->md5_server && verify->sha1_server) {
  ------------------
  |  Branch (237:6): [True: 7.09k, False: 0]
  |  Branch (237:28): [True: 7.09k, False: 0]
  ------------------
  238|  7.09k|		crypto_hash_update(verify->md5_server, buf, len);
  239|  7.09k|		crypto_hash_update(verify->sha1_server, buf, len);
  240|  7.09k|	}
  241|  7.09k|	if (verify->md5_cert && verify->sha1_cert) {
  ------------------
  |  Branch (241:6): [True: 7.09k, False: 0]
  |  Branch (241:26): [True: 7.09k, False: 0]
  ------------------
  242|  7.09k|		crypto_hash_update(verify->md5_cert, buf, len);
  243|  7.09k|		crypto_hash_update(verify->sha1_cert, buf, len);
  244|  7.09k|	}
  245|  7.09k|#ifdef CONFIG_TLSV12
  246|  7.09k|	if (verify->sha256_client)
  ------------------
  |  Branch (246:6): [True: 6.88k, False: 210]
  ------------------
  247|  6.88k|		crypto_hash_update(verify->sha256_client, buf, len);
  248|  7.09k|	if (verify->sha256_server)
  ------------------
  |  Branch (248:6): [True: 7.04k, False: 45]
  ------------------
  249|  7.04k|		crypto_hash_update(verify->sha256_server, buf, len);
  250|  7.09k|	if (verify->sha256_cert)
  ------------------
  |  Branch (250:6): [True: 7.09k, False: 0]
  ------------------
  251|  7.09k|		crypto_hash_update(verify->sha256_cert, buf, len);
  252|  7.09k|#endif /* CONFIG_TLSV12 */
  253|  7.09k|}
tls_verify_hash_free:
  257|  5.36k|{
  258|  5.36k|	crypto_hash_finish(verify->md5_client, NULL, NULL);
  259|  5.36k|	crypto_hash_finish(verify->md5_server, NULL, NULL);
  260|  5.36k|	crypto_hash_finish(verify->md5_cert, NULL, NULL);
  261|  5.36k|	crypto_hash_finish(verify->sha1_client, NULL, NULL);
  262|  5.36k|	crypto_hash_finish(verify->sha1_server, NULL, NULL);
  263|  5.36k|	crypto_hash_finish(verify->sha1_cert, NULL, NULL);
  264|  5.36k|	verify->md5_client = NULL;
  265|  5.36k|	verify->md5_server = NULL;
  266|  5.36k|	verify->md5_cert = NULL;
  267|  5.36k|	verify->sha1_client = NULL;
  268|  5.36k|	verify->sha1_server = NULL;
  269|  5.36k|	verify->sha1_cert = NULL;
  270|  5.36k|#ifdef CONFIG_TLSV12
  271|  5.36k|	crypto_hash_finish(verify->sha256_client, NULL, NULL);
  272|  5.36k|	crypto_hash_finish(verify->sha256_server, NULL, NULL);
  273|  5.36k|	crypto_hash_finish(verify->sha256_cert, NULL, NULL);
  274|  5.36k|	verify->sha256_client = NULL;
  275|  5.36k|	verify->sha256_server = NULL;
  276|       |	verify->sha256_cert = NULL;
  277|  5.36k|#endif /* CONFIG_TLSV12 */
  278|  5.36k|}
tls_version_ok:
  282|  2.35k|{
  283|  2.35k|	if (ver == TLS_VERSION_1)
  ------------------
  |  |   14|  2.35k|#define TLS_VERSION_1 0x0301 /* TLSv1 */
  ------------------
  |  Branch (283:6): [True: 593, False: 1.75k]
  ------------------
  284|    593|		return 1;
  285|  1.75k|#ifdef CONFIG_TLSV11
  286|  1.75k|	if (ver == TLS_VERSION_1_1)
  ------------------
  |  |   15|  1.75k|#define TLS_VERSION_1_1 0x0302 /* TLSv1.1 */
  ------------------
  |  Branch (286:6): [True: 475, False: 1.28k]
  ------------------
  287|    475|		return 1;
  288|  1.28k|#endif /* CONFIG_TLSV11 */
  289|  1.28k|#ifdef CONFIG_TLSV12
  290|  1.28k|	if (ver == TLS_VERSION_1_2)
  ------------------
  |  |   16|  1.28k|#define TLS_VERSION_1_2 0x0303 /* TLSv1.2 */
  ------------------
  |  Branch (290:6): [True: 1.25k, False: 26]
  ------------------
  291|  1.25k|		return 1;
  292|     26|#endif /* CONFIG_TLSV12 */
  293|       |
  294|     26|	return 0;
  295|  1.28k|}
tls_version_str:
  299|  5.00k|{
  300|  5.00k|	switch (ver) {
  ------------------
  |  Branch (300:10): [True: 5.00k, False: 0]
  ------------------
  301|    593|	case TLS_VERSION_1:
  ------------------
  |  |   14|    593|#define TLS_VERSION_1 0x0301 /* TLSv1 */
  ------------------
  |  Branch (301:2): [True: 593, False: 4.41k]
  ------------------
  302|    593|		return "1.0";
  303|    475|	case TLS_VERSION_1_1:
  ------------------
  |  |   15|    475|#define TLS_VERSION_1_1 0x0302 /* TLSv1.1 */
  ------------------
  |  Branch (303:2): [True: 475, False: 4.53k]
  ------------------
  304|    475|		return "1.1";
  305|  3.94k|	case TLS_VERSION_1_2:
  ------------------
  |  |   16|  3.94k|#define TLS_VERSION_1_2 0x0303 /* TLSv1.2 */
  ------------------
  |  Branch (305:2): [True: 3.94k, False: 1.06k]
  ------------------
  306|  3.94k|		return "1.2";
  307|  5.00k|	}
  308|       |
  309|      0|	return "?";
  310|  5.00k|}
tls_prf:
  315|  1.26k|{
  316|  1.26k|#ifdef CONFIG_TLSV12
  317|  1.26k|	if (ver >= TLS_VERSION_1_2) {
  ------------------
  |  |   16|  1.26k|#define TLS_VERSION_1_2 0x0303 /* TLSv1.2 */
  ------------------
  |  Branch (317:6): [True: 546, False: 723]
  ------------------
  318|    546|		tls_prf_sha256(secret, secret_len, label, seed, seed_len,
  319|    546|			       out, outlen);
  320|    546|		return 0;
  321|    546|	}
  322|    723|#endif /* CONFIG_TLSV12 */
  323|       |
  324|    723|	return tls_prf_sha1_md5(secret, secret_len, label, seed, seed_len, out,
  325|    723|				outlen);
  326|  1.26k|}
tlsv12_key_x_server_params_hash:
  335|    252|{
  336|    252|	size_t hlen;
  337|    252|	struct crypto_hash *ctx;
  338|    252|	enum crypto_hash_alg alg;
  339|       |
  340|    252|	switch (hash_alg) {
  341|    138|	case TLS_HASH_ALG_SHA256:
  ------------------
  |  Branch (341:2): [True: 138, False: 114]
  ------------------
  342|    138|		alg = CRYPTO_HASH_ALG_SHA256;
  343|    138|		hlen = SHA256_MAC_LEN;
  ------------------
  |  |   12|    138|#define SHA256_MAC_LEN 32
  ------------------
  344|    138|		break;
  345|    113|	case TLS_HASH_ALG_SHA384:
  ------------------
  |  Branch (345:2): [True: 113, False: 139]
  ------------------
  346|    113|		alg = CRYPTO_HASH_ALG_SHA384;
  347|    113|		hlen = 48;
  348|    113|		break;
  349|      1|	case TLS_HASH_ALG_SHA512:
  ------------------
  |  Branch (349:2): [True: 1, False: 251]
  ------------------
  350|      1|		alg = CRYPTO_HASH_ALG_SHA512;
  351|      1|		hlen = 64;
  352|      1|		break;
  353|      0|	default:
  ------------------
  |  Branch (353:2): [True: 0, False: 252]
  ------------------
  354|      0|		return -1;
  355|    252|	}
  356|    252|	ctx = crypto_hash_init(alg, NULL, 0);
  357|    252|	if (ctx == NULL)
  ------------------
  |  Branch (357:6): [True: 1, False: 251]
  ------------------
  358|      1|		return -1;
  359|    251|	crypto_hash_update(ctx, client_random, TLS_RANDOM_LEN);
  ------------------
  |  |   26|    251|#define TLS_RANDOM_LEN 32
  ------------------
  360|    251|	crypto_hash_update(ctx, server_random, TLS_RANDOM_LEN);
  ------------------
  |  |   26|    251|#define TLS_RANDOM_LEN 32
  ------------------
  361|    251|	crypto_hash_update(ctx, server_params, server_params_len);
  362|    251|	if (crypto_hash_finish(ctx, hash, &hlen) < 0)
  ------------------
  |  Branch (362:6): [True: 0, False: 251]
  ------------------
  363|      0|		return -1;
  364|       |
  365|    251|	return hlen;
  366|    251|}
tls_key_x_server_params_hash:
  374|    106|{
  375|    106|	u8 *hpos;
  376|    106|	size_t hlen;
  377|    106|	struct crypto_hash *ctx;
  378|       |
  379|    106|	hpos = hash;
  380|       |
  381|    106|	ctx = crypto_hash_init(CRYPTO_HASH_ALG_MD5, NULL, 0);
  382|    106|	if (ctx == NULL)
  ------------------
  |  Branch (382:6): [True: 0, False: 106]
  ------------------
  383|      0|		return -1;
  384|    106|	crypto_hash_update(ctx, client_random, TLS_RANDOM_LEN);
  ------------------
  |  |   26|    106|#define TLS_RANDOM_LEN 32
  ------------------
  385|    106|	crypto_hash_update(ctx, server_random, TLS_RANDOM_LEN);
  ------------------
  |  |   26|    106|#define TLS_RANDOM_LEN 32
  ------------------
  386|    106|	crypto_hash_update(ctx, server_params, server_params_len);
  387|    106|	hlen = MD5_MAC_LEN;
  ------------------
  |  |   12|    106|#define MD5_MAC_LEN 16
  ------------------
  388|    106|	if (hsz < hlen)
  ------------------
  |  Branch (388:6): [True: 0, False: 106]
  ------------------
  389|      0|		return -1;
  390|    106|	if (crypto_hash_finish(ctx, hash, &hlen) < 0)
  ------------------
  |  Branch (390:6): [True: 0, False: 106]
  ------------------
  391|      0|		return -1;
  392|    106|	hpos += hlen;
  393|       |
  394|    106|	ctx = crypto_hash_init(CRYPTO_HASH_ALG_SHA1, NULL, 0);
  395|    106|	if (ctx == NULL)
  ------------------
  |  Branch (395:6): [True: 0, False: 106]
  ------------------
  396|      0|		return -1;
  397|    106|	crypto_hash_update(ctx, client_random, TLS_RANDOM_LEN);
  ------------------
  |  |   26|    106|#define TLS_RANDOM_LEN 32
  ------------------
  398|    106|	crypto_hash_update(ctx, server_random, TLS_RANDOM_LEN);
  ------------------
  |  |   26|    106|#define TLS_RANDOM_LEN 32
  ------------------
  399|    106|	crypto_hash_update(ctx, server_params, server_params_len);
  400|    106|	hlen = hsz - hlen;
  401|    106|	if (crypto_hash_finish(ctx, hpos, &hlen) < 0)
  ------------------
  |  Branch (401:6): [True: 0, False: 106]
  ------------------
  402|      0|		return -1;
  403|    106|	hpos += hlen;
  404|    106|	return hpos - hash;
  405|    106|}
tls_verify_signature:
  411|    357|{
  412|    357|	u8 *buf;
  413|    357|	const u8 *end = pos + len;
  414|    357|	const u8 *decrypted;
  415|    357|	u16 slen;
  416|    357|	size_t buflen;
  417|       |
  418|    357|	if (end - pos < 2) {
  ------------------
  |  Branch (418:6): [True: 6, False: 351]
  ------------------
  419|      6|		*alert = TLS_ALERT_DECODE_ERROR;
  ------------------
  |  |  146|      6|#define TLS_ALERT_DECODE_ERROR			50
  ------------------
  420|      6|		return -1;
  421|      6|	}
  422|    351|	slen = WPA_GET_BE16(pos);
  423|    351|	pos += 2;
  424|    351|	if (end - pos < slen) {
  ------------------
  |  Branch (424:6): [True: 34, False: 317]
  ------------------
  425|     34|		*alert = TLS_ALERT_DECODE_ERROR;
  ------------------
  |  |  146|     34|#define TLS_ALERT_DECODE_ERROR			50
  ------------------
  426|     34|		return -1;
  427|     34|	}
  428|    317|	if (end - pos > slen) {
  ------------------
  |  Branch (428:6): [True: 168, False: 149]
  ------------------
  429|    168|		wpa_hexdump(MSG_MSGDUMP, "Additional data after Signature",
  430|    168|			    pos + slen, end - pos - slen);
  431|    168|		end = pos + slen;
  432|    168|	}
  433|       |
  434|    317|	wpa_hexdump(MSG_MSGDUMP, "TLSv1: Signature", pos, end - pos);
  435|    317|	if (pk == NULL) {
  ------------------
  |  Branch (435:6): [True: 17, False: 300]
  ------------------
  436|     17|		wpa_printf(MSG_DEBUG, "TLSv1: No public key to verify signature");
  437|     17|		*alert = TLS_ALERT_INTERNAL_ERROR;
  ------------------
  |  |  151|     17|#define TLS_ALERT_INTERNAL_ERROR		80
  ------------------
  438|     17|		return -1;
  439|     17|	}
  440|       |
  441|    300|	buflen = end - pos;
  442|    300|	buf = os_malloc(end - pos);
  ------------------
  |  |  505|    300|#define os_malloc(s) malloc((s))
  ------------------
  443|    300|	if (buf == NULL) {
  ------------------
  |  Branch (443:6): [True: 0, False: 300]
  ------------------
  444|      0|		*alert = TLS_ALERT_INTERNAL_ERROR;
  ------------------
  |  |  151|      0|#define TLS_ALERT_INTERNAL_ERROR		80
  ------------------
  445|      0|		return -1;
  446|      0|	}
  447|    300|	if (crypto_public_key_decrypt_pkcs1(pk, pos, end - pos, buf, &buflen) <
  ------------------
  |  Branch (447:6): [True: 178, False: 122]
  ------------------
  448|    300|	    0) {
  449|    178|		wpa_printf(MSG_DEBUG, "TLSv1: Failed to decrypt signature");
  450|    178|		os_free(buf);
  ------------------
  |  |  511|    178|#define os_free(p) free((p))
  ------------------
  451|    178|		*alert = TLS_ALERT_DECRYPT_ERROR;
  ------------------
  |  |  147|    178|#define TLS_ALERT_DECRYPT_ERROR			51
  ------------------
  452|    178|		return -1;
  453|    178|	}
  454|    122|	decrypted = buf;
  455|       |
  456|    122|	wpa_hexdump_key(MSG_MSGDUMP, "TLSv1: Decrypted Signature",
  457|    122|			decrypted, buflen);
  458|       |
  459|    122|#ifdef CONFIG_TLSV12
  460|    122|	if (tls_version >= TLS_VERSION_1_2) {
  ------------------
  |  |   16|    122|#define TLS_VERSION_1_2 0x0303 /* TLSv1.2 */
  ------------------
  |  Branch (460:6): [True: 114, False: 8]
  ------------------
  461|       |		/*
  462|       |		 * RFC 3447, A.2.4 RSASSA-PKCS1-v1_5
  463|       |		 *
  464|       |		 * DigestInfo ::= SEQUENCE {
  465|       |		 *   digestAlgorithm DigestAlgorithm,
  466|       |		 *   digest OCTET STRING
  467|       |		 * }
  468|       |		 *
  469|       |		 * SHA-256 OID: sha256WithRSAEncryption ::= {pkcs-1 11}
  470|       |		 *
  471|       |		 * DER encoded DigestInfo for SHA256 per RFC 3447:
  472|       |		 * 30 31 30 0d 06 09 60 86 48 01 65 03 04 02 01 05 00 04 20 ||
  473|       |		 * H
  474|       |		 */
  475|    114|		if (buflen >= 19 + 32 &&
  ------------------
  |  Branch (475:7): [True: 110, False: 4]
  ------------------
  476|    110|		    os_memcmp(buf, "\x30\x31\x30\x0d\x06\x09\x60\x86\x48\x01"
  ------------------
  |  |  532|    110|#define os_memcmp(s1, s2, n) memcmp((s1), (s2), (n))
  ------------------
  |  Branch (476:7): [True: 77, False: 33]
  ------------------
  477|    110|			      "\x65\x03\x04\x02\x01\x05\x00\x04\x20", 19) == 0)
  478|     77|		{
  479|     77|			wpa_printf(MSG_DEBUG, "TLSv1.2: DigestAlgorithm = SHA-256");
  480|     77|			decrypted = buf + 19;
  481|     77|			buflen -= 19;
  482|     77|		} else if (buflen >= 19 + 48 &&
  ------------------
  |  Branch (482:14): [True: 32, False: 5]
  ------------------
  483|     32|		    os_memcmp(buf, "\x30\x41\x30\x0d\x06\x09\x60\x86\x48\x01"
  ------------------
  |  |  532|     32|#define os_memcmp(s1, s2, n) memcmp((s1), (s2), (n))
  ------------------
  |  Branch (483:7): [True: 2, False: 30]
  ------------------
  484|     32|			      "\x65\x03\x04\x02\x02\x05\x00\x04\x30", 19) == 0)
  485|      2|		{
  486|      2|			wpa_printf(MSG_DEBUG, "TLSv1.2: DigestAlgorithm = SHA-384");
  487|      2|			decrypted = buf + 19;
  488|      2|			buflen -= 19;
  489|     35|		} else if (buflen >= 19 + 64 &&
  ------------------
  |  Branch (489:14): [True: 28, False: 7]
  ------------------
  490|     28|		    os_memcmp(buf, "\x30\x51\x30\x0d\x06\x09\x60\x86\x48\x01"
  ------------------
  |  |  532|     28|#define os_memcmp(s1, s2, n) memcmp((s1), (s2), (n))
  ------------------
  |  Branch (490:7): [True: 4, False: 24]
  ------------------
  491|     28|			      "\x65\x03\x04\x02\x03\x05\x00\x04\x40", 19) == 0)
  492|      4|		{
  493|      4|			wpa_printf(MSG_DEBUG, "TLSv1.2: DigestAlgorithm = SHA-512");
  494|      4|			decrypted = buf + 19;
  495|      4|			buflen -= 19;
  496|       |
  497|     31|		} else {
  498|     31|			wpa_printf(MSG_DEBUG, "TLSv1.2: Unrecognized DigestInfo");
  499|     31|			os_free(buf);
  ------------------
  |  |  511|     31|#define os_free(p) free((p))
  ------------------
  500|     31|			*alert = TLS_ALERT_DECRYPT_ERROR;
  ------------------
  |  |  147|     31|#define TLS_ALERT_DECRYPT_ERROR			51
  ------------------
  501|     31|			return -1;
  502|     31|		}
  503|    114|	}
  504|     91|#endif /* CONFIG_TLSV12 */
  505|       |
  506|     91|	if (buflen != data_len ||
  ------------------
  |  Branch (506:6): [True: 13, False: 78]
  ------------------
  507|     78|	    os_memcmp_const(decrypted, data, data_len) != 0) {
  ------------------
  |  Branch (507:6): [True: 4, False: 74]
  ------------------
  508|     17|		wpa_printf(MSG_DEBUG, "TLSv1: Invalid Signature in CertificateVerify - did not match calculated hash");
  509|     17|		os_free(buf);
  ------------------
  |  |  511|     17|#define os_free(p) free((p))
  ------------------
  510|     17|		*alert = TLS_ALERT_DECRYPT_ERROR;
  ------------------
  |  |  147|     17|#define TLS_ALERT_DECRYPT_ERROR			51
  ------------------
  511|     17|		return -1;
  512|     17|	}
  513|       |
  514|     74|	os_free(buf);
  ------------------
  |  |  511|     74|#define os_free(p) free((p))
  ------------------
  515|       |
  516|     74|	return 0;
  517|     91|}

tlsv1_cred_free:
   30|  5.36k|{
   31|  5.36k|	if (cred == NULL)
  ------------------
  |  Branch (31:6): [True: 5.36k, False: 0]
  ------------------
   32|  5.36k|		return;
   33|       |
   34|      0|	x509_certificate_chain_free(cred->trusted_certs);
   35|      0|	x509_certificate_chain_free(cred->cert);
   36|      0|	crypto_private_key_free(cred->key);
   37|      0|	os_free(cred->dh_p);
  ------------------
  |  |  511|      0|#define os_free(p) free((p))
  ------------------
   38|      0|	os_free(cred->dh_g);
  ------------------
  |  |  511|      0|#define os_free(p) free((p))
  ------------------
   39|      0|	os_free(cred->ocsp_stapling_response);
  ------------------
  |  |  511|      0|#define os_free(p) free((p))
  ------------------
   40|      0|	os_free(cred->ocsp_stapling_response_multi);
  ------------------
  |  |  511|      0|#define os_free(p) free((p))
  ------------------
   41|      0|	os_free(cred);
  ------------------
  |  |  511|      0|#define os_free(p) free((p))
  ------------------
   42|      0|}

tlsv1_record_set_cipher_suite:
   32|  4.96k|{
   33|  4.96k|	const struct tls_cipher_suite *suite;
   34|  4.96k|	const struct tls_cipher_data *data;
   35|       |
   36|  4.96k|	wpa_printf(MSG_DEBUG, "TLSv1: Selected cipher suite: 0x%04x",
   37|  4.96k|		   cipher_suite);
   38|  4.96k|	rl->cipher_suite = cipher_suite;
   39|       |
   40|  4.96k|	suite = tls_get_cipher_suite(cipher_suite);
   41|  4.96k|	if (suite == NULL)
  ------------------
  |  Branch (41:6): [True: 0, False: 4.96k]
  ------------------
   42|      0|		return -1;
   43|       |
   44|  4.96k|	if (suite->hash == TLS_HASH_MD5) {
  ------------------
  |  Branch (44:6): [True: 133, False: 4.82k]
  ------------------
   45|    133|		rl->hash_alg = CRYPTO_HASH_ALG_HMAC_MD5;
   46|    133|		rl->hash_size = MD5_MAC_LEN;
  ------------------
  |  |   12|    133|#define MD5_MAC_LEN 16
  ------------------
   47|  4.82k|	} else if (suite->hash == TLS_HASH_SHA) {
  ------------------
  |  Branch (47:13): [True: 1.11k, False: 3.71k]
  ------------------
   48|  1.11k|		rl->hash_alg = CRYPTO_HASH_ALG_HMAC_SHA1;
   49|  1.11k|		rl->hash_size = SHA1_MAC_LEN;
  ------------------
  |  |   12|  1.11k|#define SHA1_MAC_LEN 20
  ------------------
   50|  3.71k|	} else if (suite->hash == TLS_HASH_SHA256) {
  ------------------
  |  Branch (50:13): [True: 1.02k, False: 2.68k]
  ------------------
   51|  1.02k|		rl->hash_alg = CRYPTO_HASH_ALG_HMAC_SHA256;
   52|  1.02k|		rl->hash_size = SHA256_MAC_LEN;
  ------------------
  |  |   12|  1.02k|#define SHA256_MAC_LEN 32
  ------------------
   53|  1.02k|	}
   54|       |
   55|  4.96k|	data = tls_get_cipher_data(suite->cipher);
   56|  4.96k|	if (data == NULL)
  ------------------
  |  Branch (56:6): [True: 0, False: 4.96k]
  ------------------
   57|      0|		return -1;
   58|       |
   59|  4.96k|	rl->key_material_len = data->key_material;
   60|  4.96k|	rl->iv_size = data->block_size;
   61|  4.96k|	rl->cipher_alg = data->alg;
   62|       |
   63|  4.96k|	return 0;
   64|  4.96k|}
tlsv1_record_change_write_cipher:
   76|  3.08k|{
   77|  3.08k|	wpa_printf(MSG_DEBUG, "TLSv1: Record Layer - New write cipher suite "
   78|  3.08k|		   "0x%04x", rl->cipher_suite);
   79|  3.08k|	rl->write_cipher_suite = rl->cipher_suite;
   80|  3.08k|	os_memset(rl->write_seq_num, 0, TLS_SEQ_NUM_LEN);
  ------------------
  |  |  529|  3.08k|#define os_memset(s, c, n) memset(s, c, n)
  ------------------
   81|       |
   82|  3.08k|	if (rl->write_cbc) {
  ------------------
  |  Branch (82:6): [True: 402, False: 2.68k]
  ------------------
   83|    402|		crypto_cipher_deinit(rl->write_cbc);
   84|    402|		rl->write_cbc = NULL;
   85|    402|	}
   86|  3.08k|	if (rl->cipher_alg != CRYPTO_CIPHER_NULL) {
  ------------------
  |  Branch (86:6): [True: 402, False: 2.68k]
  ------------------
   87|    402|		rl->write_cbc = crypto_cipher_init(rl->cipher_alg,
   88|    402|						   rl->write_iv, rl->write_key,
   89|    402|						   rl->key_material_len);
   90|    402|		if (rl->write_cbc == NULL) {
  ------------------
  |  Branch (90:7): [True: 0, False: 402]
  ------------------
   91|      0|			wpa_printf(MSG_DEBUG, "TLSv1: Failed to initialize "
   92|      0|				   "cipher");
   93|      0|			return -1;
   94|      0|		}
   95|    402|	}
   96|       |
   97|  3.08k|	return 0;
   98|  3.08k|}
tlsv1_record_change_read_cipher:
  110|  3.04k|{
  111|  3.04k|	wpa_printf(MSG_DEBUG, "TLSv1: Record Layer - New read cipher suite "
  112|  3.04k|		   "0x%04x", rl->cipher_suite);
  113|  3.04k|	rl->read_cipher_suite = rl->cipher_suite;
  114|  3.04k|	os_memset(rl->read_seq_num, 0, TLS_SEQ_NUM_LEN);
  ------------------
  |  |  529|  3.04k|#define os_memset(s, c, n) memset(s, c, n)
  ------------------
  115|       |
  116|  3.04k|	if (rl->read_cbc) {
  ------------------
  |  Branch (116:6): [True: 358, False: 2.68k]
  ------------------
  117|    358|		crypto_cipher_deinit(rl->read_cbc);
  118|    358|		rl->read_cbc = NULL;
  119|    358|	}
  120|  3.04k|	if (rl->cipher_alg != CRYPTO_CIPHER_NULL) {
  ------------------
  |  Branch (120:6): [True: 358, False: 2.68k]
  ------------------
  121|    358|		rl->read_cbc = crypto_cipher_init(rl->cipher_alg,
  122|    358|						  rl->read_iv, rl->read_key,
  123|    358|						  rl->key_material_len);
  124|    358|		if (rl->read_cbc == NULL) {
  ------------------
  |  Branch (124:7): [True: 0, False: 358]
  ------------------
  125|      0|			wpa_printf(MSG_DEBUG, "TLSv1: Failed to initialize "
  126|      0|				   "cipher");
  127|      0|			return -1;
  128|      0|		}
  129|    358|	}
  130|       |
  131|  3.04k|	return 0;
  132|  3.04k|}
tlsv1_record_send:
  153|  3.99k|{
  154|  3.99k|	u8 *pos, *ct_start, *length, *cpayload;
  155|  3.99k|	struct crypto_hash *hmac;
  156|  3.99k|	size_t clen;
  157|  3.99k|	int explicit_iv;
  158|       |
  159|  3.99k|	pos = buf;
  160|  3.99k|	if (pos + TLS_RECORD_HEADER_LEN > buf + buf_size)
  ------------------
  |  |   21|  3.99k|#define TLS_RECORD_HEADER_LEN 5
  ------------------
  |  Branch (160:6): [True: 0, False: 3.99k]
  ------------------
  161|      0|		return -1;
  162|       |
  163|       |	/* ContentType type */
  164|  3.99k|	ct_start = pos;
  165|  3.99k|	*pos++ = content_type;
  166|       |	/* ProtocolVersion version */
  167|  3.99k|	WPA_PUT_BE16(pos, rl->tls_version);
  168|  3.99k|	pos += 2;
  169|       |	/* uint16 length */
  170|  3.99k|	length = pos;
  171|  3.99k|	WPA_PUT_BE16(length, payload_len);
  172|  3.99k|	pos += 2;
  173|       |
  174|  3.99k|	cpayload = pos;
  175|  3.99k|	explicit_iv = rl->write_cipher_suite != TLS_NULL_WITH_NULL_NULL &&
  ------------------
  |  |   50|  7.98k|#define TLS_NULL_WITH_NULL_NULL			0x0000 /* RFC 2246 */
  ------------------
  |  Branch (175:16): [True: 447, False: 3.54k]
  ------------------
  176|    447|		rl->iv_size && rl->tls_version >= TLS_VERSION_1_1;
  ------------------
  |  |   15|  4.32k|#define TLS_VERSION_1_1 0x0302 /* TLSv1.1 */
  ------------------
  |  Branch (176:3): [True: 333, False: 114]
  |  Branch (176:18): [True: 182, False: 151]
  ------------------
  177|  3.99k|	if (explicit_iv) {
  ------------------
  |  Branch (177:6): [True: 182, False: 3.81k]
  ------------------
  178|       |		/* opaque IV[Cipherspec.block_length] */
  179|    182|		if (pos + rl->iv_size > buf + buf_size)
  ------------------
  |  Branch (179:7): [True: 0, False: 182]
  ------------------
  180|      0|			return -1;
  181|       |
  182|       |		/*
  183|       |		 * Use random number R per the RFC 4346, 6.2.3.2 CBC Block
  184|       |		 * Cipher option 2a.
  185|       |		 */
  186|       |
  187|    182|		if (os_get_random(pos, rl->iv_size))
  ------------------
  |  Branch (187:7): [True: 0, False: 182]
  ------------------
  188|      0|			return -1;
  189|    182|		pos += rl->iv_size;
  190|    182|	}
  191|       |
  192|       |	/*
  193|       |	 * opaque fragment[TLSPlaintext.length]
  194|       |	 * (opaque content[TLSCompressed.length] in GenericBlockCipher)
  195|       |	 */
  196|  3.99k|	if (pos + payload_len > buf + buf_size)
  ------------------
  |  Branch (196:6): [True: 0, False: 3.99k]
  ------------------
  197|      0|		return -1;
  198|  3.99k|	os_memmove(pos, payload, payload_len);
  ------------------
  |  |  526|  3.99k|#define os_memmove(d, s, n) memmove((d), (s), (n))
  ------------------
  199|  3.99k|	pos += payload_len;
  200|       |
  201|  3.99k|	if (rl->write_cipher_suite != TLS_NULL_WITH_NULL_NULL) {
  ------------------
  |  |   50|  3.99k|#define TLS_NULL_WITH_NULL_NULL			0x0000 /* RFC 2246 */
  ------------------
  |  Branch (201:6): [True: 447, False: 3.54k]
  ------------------
  202|       |		/*
  203|       |		 * MAC calculated over seq_num + TLSCompressed.type +
  204|       |		 * TLSCompressed.version + TLSCompressed.length +
  205|       |		 * TLSCompressed.fragment
  206|       |		 */
  207|    447|		hmac = crypto_hash_init(rl->hash_alg, rl->write_mac_secret,
  208|    447|					rl->hash_size);
  209|    447|		if (hmac == NULL) {
  ------------------
  |  Branch (209:7): [True: 0, False: 447]
  ------------------
  210|      0|			wpa_printf(MSG_DEBUG, "TLSv1: Record Layer - Failed "
  211|      0|				   "to initialize HMAC");
  212|      0|			return -1;
  213|      0|		}
  214|    447|		crypto_hash_update(hmac, rl->write_seq_num, TLS_SEQ_NUM_LEN);
  ------------------
  |  |   20|    447|#define TLS_SEQ_NUM_LEN 8
  ------------------
  215|       |		/* type + version + length + fragment */
  216|    447|		crypto_hash_update(hmac, ct_start, TLS_RECORD_HEADER_LEN);
  ------------------
  |  |   21|    447|#define TLS_RECORD_HEADER_LEN 5
  ------------------
  217|    447|		crypto_hash_update(hmac, payload, payload_len);
  218|    447|		clen = buf + buf_size - pos;
  219|    447|		if (clen < rl->hash_size) {
  ------------------
  |  Branch (219:7): [True: 0, False: 447]
  ------------------
  220|      0|			wpa_printf(MSG_DEBUG, "TLSv1: Record Layer - Not "
  221|      0|				   "enough room for MAC");
  222|      0|			crypto_hash_finish(hmac, NULL, NULL);
  223|      0|			return -1;
  224|      0|		}
  225|       |
  226|    447|		if (crypto_hash_finish(hmac, pos, &clen) < 0) {
  ------------------
  |  Branch (226:7): [True: 0, False: 447]
  ------------------
  227|      0|			wpa_printf(MSG_DEBUG, "TLSv1: Record Layer - Failed "
  228|      0|				   "to calculate HMAC");
  229|      0|			return -1;
  230|      0|		}
  231|    447|		wpa_hexdump(MSG_MSGDUMP, "TLSv1: Record Layer - Write HMAC",
  232|    447|			    pos, clen);
  233|    447|		pos += clen;
  234|    447|		if (rl->iv_size) {
  ------------------
  |  Branch (234:7): [True: 333, False: 114]
  ------------------
  235|    333|			size_t len = pos - cpayload;
  236|    333|			size_t pad;
  237|    333|			pad = (len + 1) % rl->iv_size;
  238|    333|			if (pad)
  ------------------
  |  Branch (238:8): [True: 333, False: 0]
  ------------------
  239|    333|				pad = rl->iv_size - pad;
  240|    333|			if (pos + pad + 1 > buf + buf_size) {
  ------------------
  |  Branch (240:8): [True: 0, False: 333]
  ------------------
  241|      0|				wpa_printf(MSG_DEBUG, "TLSv1: No room for "
  242|      0|					   "block cipher padding");
  243|      0|				return -1;
  244|      0|			}
  245|    333|			os_memset(pos, pad, pad + 1);
  ------------------
  |  |  529|    333|#define os_memset(s, c, n) memset(s, c, n)
  ------------------
  246|    333|			pos += pad + 1;
  247|    333|		}
  248|       |
  249|    447|		if (crypto_cipher_encrypt(rl->write_cbc, cpayload,
  ------------------
  |  Branch (249:7): [True: 0, False: 447]
  ------------------
  250|    447|					  cpayload, pos - cpayload) < 0)
  251|      0|			return -1;
  252|    447|	}
  253|       |
  254|  3.99k|	WPA_PUT_BE16(length, pos - length - 2);
  255|  3.99k|	inc_byte_array(rl->write_seq_num, TLS_SEQ_NUM_LEN);
  ------------------
  |  |   20|  3.99k|#define TLS_SEQ_NUM_LEN 8
  ------------------
  256|       |
  257|  3.99k|	*out_len = pos - buf;
  258|       |
  259|  3.99k|	return 0;
  260|  3.99k|}
tlsv1_record_receive:
  281|   134k|{
  282|   134k|	size_t i, rlen, hlen;
  283|   134k|	u8 padlen;
  284|   134k|	struct crypto_hash *hmac;
  285|   134k|	u8 len[2], hash[100];
  286|   134k|	int force_mac_error = 0;
  287|   134k|	u8 ct;
  288|       |
  289|   134k|	if (in_len < TLS_RECORD_HEADER_LEN) {
  ------------------
  |  |   21|   134k|#define TLS_RECORD_HEADER_LEN 5
  ------------------
  |  Branch (289:6): [True: 44, False: 134k]
  ------------------
  290|     44|		wpa_printf(MSG_DEBUG, "TLSv1: Too short record (in_len=%lu) - "
  291|     44|			   "need more data",
  292|     44|			   (unsigned long) in_len);
  293|     44|		wpa_hexdump(MSG_MSGDUMP, "TLSv1: Record Layer - Received",
  294|     44|			    in_data, in_len);
  295|     44|		return 0;
  296|     44|	}
  297|       |
  298|   134k|	ct = in_data[0];
  299|   134k|	rlen = WPA_GET_BE16(in_data + 3);
  300|   134k|	wpa_printf(MSG_DEBUG, "TLSv1: Received content type %d version %d.%d "
  301|   134k|		   "length %d", ct, in_data[1], in_data[2], (int) rlen);
  302|       |
  303|       |	/*
  304|       |	 * TLS v1.0 and v1.1 RFCs were not exactly clear on the use of the
  305|       |	 * protocol version in record layer. As such, accept any {03,xx} value
  306|       |	 * to remain compatible with existing implementations.
  307|       |	 */
  308|   134k|	if (in_data[1] != 0x03) {
  ------------------
  |  Branch (308:6): [True: 2.37k, False: 131k]
  ------------------
  309|  2.37k|		wpa_printf(MSG_DEBUG, "TLSv1: Unexpected protocol version "
  310|  2.37k|			   "%u.%u", in_data[1], in_data[2]);
  311|  2.37k|		*alert = TLS_ALERT_PROTOCOL_VERSION;
  ------------------
  |  |  149|  2.37k|#define TLS_ALERT_PROTOCOL_VERSION		70
  ------------------
  312|  2.37k|		return -1;
  313|  2.37k|	}
  314|       |
  315|       |	/* TLSCiphertext must not be more than 2^14+2048 bytes */
  316|   131k|	if (TLS_RECORD_HEADER_LEN + rlen > 18432) {
  ------------------
  |  |   21|   131k|#define TLS_RECORD_HEADER_LEN 5
  ------------------
  |  Branch (316:6): [True: 505, False: 131k]
  ------------------
  317|    505|		wpa_printf(MSG_DEBUG, "TLSv1: Record overflow (len=%lu)",
  318|    505|			   (unsigned long) (TLS_RECORD_HEADER_LEN + rlen));
  ------------------
  |  |   21|    505|#define TLS_RECORD_HEADER_LEN 5
  ------------------
  319|    505|		*alert = TLS_ALERT_RECORD_OVERFLOW;
  ------------------
  |  |  135|    505|#define TLS_ALERT_RECORD_OVERFLOW		22
  ------------------
  320|    505|		return -1;
  321|    505|	}
  322|       |
  323|   131k|	in_data += TLS_RECORD_HEADER_LEN;
  ------------------
  |  |   21|   131k|#define TLS_RECORD_HEADER_LEN 5
  ------------------
  324|   131k|	in_len -= TLS_RECORD_HEADER_LEN;
  ------------------
  |  |   21|   131k|#define TLS_RECORD_HEADER_LEN 5
  ------------------
  325|       |
  326|   131k|	if (rlen > in_len) {
  ------------------
  |  Branch (326:6): [True: 78, False: 131k]
  ------------------
  327|     78|		wpa_printf(MSG_DEBUG, "TLSv1: Not all record data included "
  328|     78|			   "(rlen=%lu > in_len=%lu)",
  329|     78|			   (unsigned long) rlen, (unsigned long) in_len);
  330|     78|		return 0;
  331|     78|	}
  332|       |
  333|   131k|	wpa_hexdump(MSG_MSGDUMP, "TLSv1: Record Layer - Received",
  334|   131k|		    in_data, rlen);
  335|       |
  336|   131k|	if (ct != TLS_CONTENT_TYPE_HANDSHAKE &&
  ------------------
  |  Branch (336:6): [True: 119k, False: 12.2k]
  ------------------
  337|   119k|	    ct != TLS_CONTENT_TYPE_CHANGE_CIPHER_SPEC &&
  ------------------
  |  Branch (337:6): [True: 116k, False: 2.49k]
  ------------------
  338|   116k|	    ct != TLS_CONTENT_TYPE_ALERT &&
  ------------------
  |  Branch (338:6): [True: 7.75k, False: 108k]
  ------------------
  339|  7.75k|	    ct != TLS_CONTENT_TYPE_APPLICATION_DATA) {
  ------------------
  |  Branch (339:6): [True: 767, False: 6.98k]
  ------------------
  340|    767|		wpa_printf(MSG_DEBUG, "TLSv1: Ignore record with unknown "
  341|    767|			   "content type 0x%x", ct);
  342|    767|		*alert = TLS_ALERT_UNEXPECTED_MESSAGE;
  ------------------
  |  |  132|    767|#define TLS_ALERT_UNEXPECTED_MESSAGE		10
  ------------------
  343|    767|		return -1;
  344|    767|	}
  345|       |
  346|   130k|	in_len = rlen;
  347|       |
  348|   130k|	if (*out_len < in_len) {
  ------------------
  |  Branch (348:6): [True: 0, False: 130k]
  ------------------
  349|      0|		wpa_printf(MSG_DEBUG, "TLSv1: Not enough output buffer for "
  350|      0|			   "processing received record");
  351|      0|		*alert = TLS_ALERT_INTERNAL_ERROR;
  ------------------
  |  |  151|      0|#define TLS_ALERT_INTERNAL_ERROR		80
  ------------------
  352|      0|		return -1;
  353|      0|	}
  354|       |
  355|   130k|	if (rl->read_cipher_suite != TLS_NULL_WITH_NULL_NULL) {
  ------------------
  |  |   50|   130k|#define TLS_NULL_WITH_NULL_NULL			0x0000 /* RFC 2246 */
  ------------------
  |  Branch (355:6): [True: 15.5k, False: 115k]
  ------------------
  356|  15.5k|		size_t plen;
  357|  15.5k|		if (crypto_cipher_decrypt(rl->read_cbc, in_data,
  ------------------
  |  Branch (357:7): [True: 638, False: 14.8k]
  ------------------
  358|  15.5k|					  out_data, in_len) < 0) {
  359|    638|			*alert = TLS_ALERT_DECRYPTION_FAILED;
  ------------------
  |  |  134|    638|#define TLS_ALERT_DECRYPTION_FAILED		21
  ------------------
  360|    638|			return -1;
  361|    638|		}
  362|  14.8k|		plen = in_len;
  363|  14.8k|		wpa_hexdump_key(MSG_MSGDUMP, "TLSv1: Record Layer - Decrypted "
  364|  14.8k|				"data", out_data, plen);
  365|       |
  366|  14.8k|		if (rl->iv_size) {
  ------------------
  |  Branch (366:7): [True: 8.83k, False: 6.03k]
  ------------------
  367|       |			/*
  368|       |			 * TLS v1.0 defines different alert values for various
  369|       |			 * failures. That may information to aid in attacks, so
  370|       |			 * use the same bad_record_mac alert regardless of the
  371|       |			 * issues.
  372|       |			 *
  373|       |			 * In addition, instead of returning immediately on
  374|       |			 * error, run through the MAC check to make timing
  375|       |			 * attacks more difficult.
  376|       |			 */
  377|       |
  378|  8.83k|			if (rl->tls_version >= TLS_VERSION_1_1) {
  ------------------
  |  |   15|  8.83k|#define TLS_VERSION_1_1 0x0302 /* TLSv1.1 */
  ------------------
  |  Branch (378:8): [True: 1.22k, False: 7.60k]
  ------------------
  379|       |				/* Remove opaque IV[Cipherspec.block_length] */
  380|  1.22k|				if (plen < rl->iv_size) {
  ------------------
  |  Branch (380:9): [True: 298, False: 928]
  ------------------
  381|    298|					wpa_printf(MSG_DEBUG, "TLSv1.1: Not "
  382|    298|						   "enough room for IV");
  383|    298|					force_mac_error = 1;
  384|    298|					goto check_mac;
  385|    298|				}
  386|    928|				os_memmove(out_data, out_data + rl->iv_size,
  ------------------
  |  |  526|    928|#define os_memmove(d, s, n) memmove((d), (s), (n))
  ------------------
  387|    928|					   plen - rl->iv_size);
  388|    928|				plen -= rl->iv_size;
  389|    928|			}
  390|       |
  391|       |			/* Verify and remove padding */
  392|  8.53k|			if (plen == 0) {
  ------------------
  |  Branch (392:8): [True: 480, False: 8.05k]
  ------------------
  393|    480|				wpa_printf(MSG_DEBUG, "TLSv1: Too short record"
  394|    480|					   " (no pad)");
  395|    480|				force_mac_error = 1;
  396|    480|				goto check_mac;
  397|    480|			}
  398|  8.05k|			padlen = out_data[plen - 1];
  399|  8.05k|			if (padlen >= plen) {
  ------------------
  |  Branch (399:8): [True: 3.86k, False: 4.19k]
  ------------------
  400|  3.86k|				wpa_printf(MSG_DEBUG, "TLSv1: Incorrect pad "
  401|  3.86k|					   "length (%u, plen=%lu) in "
  402|  3.86k|					   "received record",
  403|  3.86k|					   padlen, (unsigned long) plen);
  404|  3.86k|				force_mac_error = 1;
  405|  3.86k|				goto check_mac;
  406|  3.86k|			}
  407|  6.03k|			for (i = plen - padlen - 1; i < plen - 1; i++) {
  ------------------
  |  Branch (407:32): [True: 3.82k, False: 2.20k]
  ------------------
  408|  3.82k|				if (out_data[i] != padlen) {
  ------------------
  |  Branch (408:9): [True: 1.99k, False: 1.83k]
  ------------------
  409|  1.99k|					wpa_hexdump(MSG_DEBUG,
  410|  1.99k|						    "TLSv1: Invalid pad in "
  411|  1.99k|						    "received record",
  412|  1.99k|						    out_data + plen - padlen -
  413|  1.99k|						    1, padlen + 1);
  414|  1.99k|					force_mac_error = 1;
  415|  1.99k|					goto check_mac;
  416|  1.99k|				}
  417|  3.82k|			}
  418|       |
  419|  2.20k|			plen -= padlen + 1;
  420|       |
  421|  2.20k|			wpa_hexdump_key(MSG_MSGDUMP, "TLSv1: Record Layer - "
  422|  2.20k|					"Decrypted data with IV and padding "
  423|  2.20k|					"removed", out_data, plen);
  424|  2.20k|		}
  425|       |
  426|  14.8k|	check_mac:
  427|  14.8k|		if (plen < rl->hash_size) {
  ------------------
  |  Branch (427:7): [True: 3.69k, False: 11.1k]
  ------------------
  428|  3.69k|			wpa_printf(MSG_DEBUG, "TLSv1: Too short record; no "
  429|  3.69k|				   "hash value");
  430|  3.69k|			*alert = TLS_ALERT_BAD_RECORD_MAC;
  ------------------
  |  |  133|  3.69k|#define TLS_ALERT_BAD_RECORD_MAC		20
  ------------------
  431|  3.69k|			return -1;
  432|  3.69k|		}
  433|       |
  434|  11.1k|		plen -= rl->hash_size;
  435|       |
  436|  11.1k|		hmac = crypto_hash_init(rl->hash_alg, rl->read_mac_secret,
  437|  11.1k|					rl->hash_size);
  438|  11.1k|		if (hmac == NULL) {
  ------------------
  |  Branch (438:7): [True: 0, False: 11.1k]
  ------------------
  439|      0|			wpa_printf(MSG_DEBUG, "TLSv1: Record Layer - Failed "
  440|      0|				   "to initialize HMAC");
  441|      0|			*alert = TLS_ALERT_INTERNAL_ERROR;
  ------------------
  |  |  151|      0|#define TLS_ALERT_INTERNAL_ERROR		80
  ------------------
  442|      0|			return -1;
  443|      0|		}
  444|       |
  445|  11.1k|		crypto_hash_update(hmac, rl->read_seq_num, TLS_SEQ_NUM_LEN);
  ------------------
  |  |   20|  11.1k|#define TLS_SEQ_NUM_LEN 8
  ------------------
  446|       |		/* type + version + length + fragment */
  447|  11.1k|		crypto_hash_update(hmac, in_data - TLS_RECORD_HEADER_LEN, 3);
  ------------------
  |  |   21|  11.1k|#define TLS_RECORD_HEADER_LEN 5
  ------------------
  448|  11.1k|		WPA_PUT_BE16(len, plen);
  449|  11.1k|		crypto_hash_update(hmac, len, 2);
  450|  11.1k|		crypto_hash_update(hmac, out_data, plen);
  451|  11.1k|		hlen = sizeof(hash);
  452|  11.1k|		if (crypto_hash_finish(hmac, hash, &hlen) < 0) {
  ------------------
  |  Branch (452:7): [True: 0, False: 11.1k]
  ------------------
  453|      0|			wpa_printf(MSG_DEBUG, "TLSv1: Record Layer - Failed "
  454|      0|				   "to calculate HMAC");
  455|      0|			*alert = TLS_ALERT_INTERNAL_ERROR;
  ------------------
  |  |  151|      0|#define TLS_ALERT_INTERNAL_ERROR		80
  ------------------
  456|      0|			return -1;
  457|      0|		}
  458|  11.1k|		if (hlen != rl->hash_size ||
  ------------------
  |  Branch (458:7): [True: 0, False: 11.1k]
  ------------------
  459|  11.1k|		    os_memcmp_const(hash, out_data + plen, hlen) != 0 ||
  ------------------
  |  Branch (459:7): [True: 11.1k, False: 50]
  ------------------
  460|  11.1k|		    force_mac_error) {
  ------------------
  |  Branch (460:7): [True: 0, False: 50]
  ------------------
  461|  11.1k|			wpa_printf(MSG_DEBUG, "TLSv1: Invalid HMAC value in "
  462|  11.1k|				   "received message (force_mac_error=%d)",
  463|  11.1k|				   force_mac_error);
  464|  11.1k|			*alert = TLS_ALERT_BAD_RECORD_MAC;
  ------------------
  |  |  133|  11.1k|#define TLS_ALERT_BAD_RECORD_MAC		20
  ------------------
  465|  11.1k|			return -1;
  466|  11.1k|		}
  467|       |
  468|     50|		*out_len = plen;
  469|   115k|	} else {
  470|   115k|		os_memcpy(out_data, in_data, in_len);
  ------------------
  |  |  523|   115k|#define os_memcpy(d, s, n) memcpy((d), (s), (n))
  ------------------
  471|   115k|		*out_len = in_len;
  472|   115k|	}
  473|       |
  474|       |	/* TLSCompressed must not be more than 2^14+1024 bytes */
  475|   115k|	if (TLS_RECORD_HEADER_LEN + *out_len > 17408) {
  ------------------
  |  |   21|   115k|#define TLS_RECORD_HEADER_LEN 5
  ------------------
  |  Branch (475:6): [True: 5, False: 115k]
  ------------------
  476|      5|		wpa_printf(MSG_DEBUG, "TLSv1: Record overflow (len=%lu)",
  477|      5|			   (unsigned long) (TLS_RECORD_HEADER_LEN + *out_len));
  ------------------
  |  |   21|      5|#define TLS_RECORD_HEADER_LEN 5
  ------------------
  478|      5|		*alert = TLS_ALERT_RECORD_OVERFLOW;
  ------------------
  |  |  135|      5|#define TLS_ALERT_RECORD_OVERFLOW		22
  ------------------
  479|      5|		return -1;
  480|      5|	}
  481|       |
  482|   115k|	inc_byte_array(rl->read_seq_num, TLS_SEQ_NUM_LEN);
  ------------------
  |  |   20|   115k|#define TLS_SEQ_NUM_LEN 8
  ------------------
  483|       |
  484|   115k|	return TLS_RECORD_HEADER_LEN + rlen;
  ------------------
  |  |   21|   115k|#define TLS_RECORD_HEADER_LEN 5
  ------------------
  485|   115k|}

tlsv1_server_global_init:
  354|  2.68k|{
  355|  2.68k|	return crypto_global_init();
  356|  2.68k|}
tlsv1_server_global_deinit:
  367|  2.68k|{
  368|  2.68k|	crypto_global_deinit();
  369|  2.68k|}

x509_free_name:
   18|  6.79k|{
   19|  6.79k|	size_t i;
   20|       |
   21|  10.5k|	for (i = 0; i < name->num_attr; i++) {
  ------------------
  |  Branch (21:14): [True: 3.78k, False: 6.79k]
  ------------------
   22|  3.78k|		os_free(name->attr[i].value);
  ------------------
  |  |  511|  3.78k|#define os_free(p) free((p))
  ------------------
   23|  3.78k|		name->attr[i].value = NULL;
   24|  3.78k|		name->attr[i].type = X509_NAME_ATTR_NOT_USED;
   25|  3.78k|	}
   26|  6.79k|	name->num_attr = 0;
   27|  6.79k|	os_free(name->email);
  ------------------
  |  |  511|  6.79k|#define os_free(p) free((p))
  ------------------
   28|  6.79k|	name->email = NULL;
   29|       |
   30|  6.79k|	os_free(name->alt_email);
  ------------------
  |  |  511|  6.79k|#define os_free(p) free((p))
  ------------------
   31|  6.79k|	os_free(name->dns);
  ------------------
  |  |  511|  6.79k|#define os_free(p) free((p))
  ------------------
   32|  6.79k|	os_free(name->uri);
  ------------------
  |  |  511|  6.79k|#define os_free(p) free((p))
  ------------------
   33|  6.79k|	os_free(name->ip);
  ------------------
  |  |  511|  6.79k|#define os_free(p) free((p))
  ------------------
   34|  6.79k|	name->alt_email = name->dns = name->uri = NULL;
   35|  6.79k|	name->ip = NULL;
   36|  6.79k|	name->ip_len = 0;
   37|  6.79k|	os_memset(&name->rid, 0, sizeof(name->rid));
  ------------------
  |  |  529|  6.79k|#define os_memset(s, c, n) memset(s, c, n)
  ------------------
   38|  6.79k|}
x509_certificate_free:
   46|  3.28k|{
   47|  3.28k|	if (cert == NULL)
  ------------------
  |  Branch (47:6): [True: 0, False: 3.28k]
  ------------------
   48|      0|		return;
   49|  3.28k|	if (cert->next) {
  ------------------
  |  Branch (49:6): [True: 0, False: 3.28k]
  ------------------
   50|      0|		wpa_printf(MSG_DEBUG, "X509: x509_certificate_free: cer=%p "
   51|      0|			   "was still on a list (next=%p)\n",
   52|      0|			   cert, cert->next);
   53|      0|	}
   54|  3.28k|	x509_free_name(&cert->issuer);
   55|  3.28k|	x509_free_name(&cert->subject);
   56|  3.28k|	os_free(cert->public_key);
  ------------------
  |  |  511|  3.28k|#define os_free(p) free((p))
  ------------------
   57|  3.28k|	os_free(cert->sign_value);
  ------------------
  |  |  511|  3.28k|#define os_free(p) free((p))
  ------------------
   58|  3.28k|	os_free(cert->subject_dn);
  ------------------
  |  |  511|  3.28k|#define os_free(p) free((p))
  ------------------
   59|  3.28k|	os_free(cert);
  ------------------
  |  |  511|  3.28k|#define os_free(p) free((p))
  ------------------
   60|  3.28k|}
x509_certificate_chain_free:
   68|  4.60k|{
   69|  4.60k|	struct x509_certificate *next;
   70|       |
   71|  5.94k|	while (cert) {
  ------------------
  |  Branch (71:9): [True: 1.34k, False: 4.60k]
  ------------------
   72|  1.34k|		next = cert->next;
   73|       |		cert->next = NULL;
   74|  1.34k|		x509_certificate_free(cert);
   75|  1.34k|		cert = next;
   76|  1.34k|	}
   77|  4.60k|}
x509_parse_algorithm_identifier:
  184|  7.89k|{
  185|  7.89k|	struct asn1_hdr hdr;
  186|  7.89k|	const u8 *pos, *end;
  187|       |
  188|       |	/*
  189|       |	 * AlgorithmIdentifier ::= SEQUENCE {
  190|       |	 *     algorithm            OBJECT IDENTIFIER,
  191|       |	 *     parameters           ANY DEFINED BY algorithm OPTIONAL
  192|       |	 * }
  193|       |	 */
  194|       |
  195|  7.89k|	if (asn1_get_next(buf, len, &hdr) < 0 || !asn1_is_sequence(&hdr)) {
  ------------------
  |  Branch (195:6): [True: 34, False: 7.86k]
  |  Branch (195:43): [True: 38, False: 7.82k]
  ------------------
  196|     72|		asn1_unexpected(&hdr,
  197|     72|				"X509: Expected SEQUENCE (AlgorithmIdentifier)");
  198|     72|		return -1;
  199|     72|	}
  200|  7.82k|	if (hdr.length > buf + len - hdr.payload)
  ------------------
  |  Branch (200:6): [True: 0, False: 7.82k]
  ------------------
  201|      0|		return -1;
  202|  7.82k|	pos = hdr.payload;
  203|  7.82k|	end = pos + hdr.length;
  204|       |
  205|  7.82k|	*next = end;
  206|       |
  207|  7.82k|	if (asn1_get_oid(pos, end - pos, &id->oid, &pos))
  ------------------
  |  Branch (207:6): [True: 40, False: 7.78k]
  ------------------
  208|     40|		return -1;
  209|       |
  210|       |	/* TODO: optional parameters */
  211|       |
  212|  7.78k|	return 0;
  213|  7.82k|}
x509_parse_name:
  287|  5.66k|{
  288|  5.66k|	struct asn1_hdr hdr;
  289|  5.66k|	const u8 *pos, *end, *set_pos, *set_end, *seq_pos, *seq_end;
  290|  5.66k|	struct asn1_oid oid;
  291|  5.66k|	char *val;
  292|       |
  293|       |	/*
  294|       |	 * Name ::= CHOICE { RDNSequence }
  295|       |	 * RDNSequence ::= SEQUENCE OF RelativeDistinguishedName
  296|       |	 * RelativeDistinguishedName ::= SET OF AttributeTypeAndValue
  297|       |	 * AttributeTypeAndValue ::= SEQUENCE {
  298|       |	 *     type     AttributeType,
  299|       |	 *     value    AttributeValue
  300|       |	 * }
  301|       |	 * AttributeType ::= OBJECT IDENTIFIER
  302|       |	 * AttributeValue ::= ANY DEFINED BY AttributeType
  303|       |	 */
  304|       |
  305|  5.66k|	if (asn1_get_next(buf, len, &hdr) < 0 || !asn1_is_sequence(&hdr)) {
  ------------------
  |  Branch (305:6): [True: 25, False: 5.63k]
  |  Branch (305:43): [True: 21, False: 5.61k]
  ------------------
  306|     46|		asn1_unexpected(&hdr,
  307|     46|				"X509: Expected SEQUENCE (Name / RDNSequencer)");
  308|     46|		return -1;
  309|     46|	}
  310|  5.61k|	pos = hdr.payload;
  311|       |
  312|  5.61k|	if (hdr.length > buf + len - pos)
  ------------------
  |  Branch (312:6): [True: 0, False: 5.61k]
  ------------------
  313|      0|		return -1;
  314|       |
  315|  5.61k|	end = *next = pos + hdr.length;
  316|       |
  317|  20.1k|	while (pos < end) {
  ------------------
  |  Branch (317:9): [True: 14.7k, False: 5.39k]
  ------------------
  318|  14.7k|		enum x509_name_attr_type type;
  319|       |
  320|  14.7k|		if (asn1_get_next(pos, end - pos, &hdr) < 0 ||
  ------------------
  |  Branch (320:7): [True: 99, False: 14.6k]
  ------------------
  321|  14.6k|		    !asn1_is_set(&hdr)) {
  ------------------
  |  Branch (321:7): [True: 60, False: 14.5k]
  ------------------
  322|    159|			asn1_unexpected(&hdr,
  323|    159|					"X509: Expected SET (RelativeDistinguishedName)");
  324|    159|			x509_free_name(name);
  325|    159|			return -1;
  326|    159|		}
  327|       |
  328|  14.5k|		set_pos = hdr.payload;
  329|  14.5k|		pos = set_end = hdr.payload + hdr.length;
  330|       |
  331|  14.5k|		if (asn1_get_next(set_pos, set_end - set_pos, &hdr) < 0 ||
  ------------------
  |  Branch (331:7): [True: 15, False: 14.5k]
  ------------------
  332|  14.5k|		    !asn1_is_sequence(&hdr)) {
  ------------------
  |  Branch (332:7): [True: 15, False: 14.5k]
  ------------------
  333|     30|			asn1_unexpected(&hdr,
  334|     30|					"X509: Expected SEQUENCE (AttributeTypeAndValue)");
  335|     30|			x509_free_name(name);
  336|     30|			return -1;
  337|     30|		}
  338|       |
  339|  14.5k|		seq_pos = hdr.payload;
  340|  14.5k|		seq_end = hdr.payload + hdr.length;
  341|       |
  342|  14.5k|		if (asn1_get_oid(seq_pos, seq_end - seq_pos, &oid, &seq_pos)) {
  ------------------
  |  Branch (342:7): [True: 15, False: 14.5k]
  ------------------
  343|     15|			x509_free_name(name);
  344|     15|			return -1;
  345|     15|		}
  346|       |
  347|  14.5k|		if (asn1_get_next(seq_pos, seq_end - seq_pos, &hdr) < 0 ||
  ------------------
  |  Branch (347:7): [True: 11, False: 14.5k]
  ------------------
  348|  14.5k|		    hdr.class != ASN1_CLASS_UNIVERSAL) {
  ------------------
  |  |   43|  14.5k|#define ASN1_CLASS_UNIVERSAL		0
  ------------------
  |  Branch (348:7): [True: 3, False: 14.4k]
  ------------------
  349|     14|			wpa_printf(MSG_DEBUG, "X509: Failed to parse "
  350|     14|				   "AttributeValue");
  351|     14|			x509_free_name(name);
  352|     14|			return -1;
  353|     14|		}
  354|       |
  355|  14.4k|		if (!asn1_is_string_type(&hdr)) {
  ------------------
  |  Branch (355:7): [True: 3.24k, False: 11.2k]
  ------------------
  356|  3.24k|			wpa_printf(MSG_DEBUG,
  357|  3.24k|				   "X509: Ignore non-string type attribute (tag 0x%x)",
  358|  3.24k|				   hdr.tag);
  359|  3.24k|			continue;
  360|  3.24k|		}
  361|       |
  362|       |		/* RFC 3280:
  363|       |		 * MUST: country, organization, organizational-unit,
  364|       |		 * distinguished name qualifier, state or province name,
  365|       |		 * common name, serial number.
  366|       |		 * SHOULD: locality, title, surname, given name, initials,
  367|       |		 * pseudonym, generation qualifier.
  368|       |		 * MUST: domainComponent (RFC 2247).
  369|       |		 */
  370|  11.2k|		type = X509_NAME_ATTR_NOT_USED;
  371|  11.2k|		if (oid.len == 4 &&
  ------------------
  |  Branch (371:7): [True: 9.08k, False: 2.16k]
  ------------------
  372|  9.08k|		    oid.oid[0] == 2 && oid.oid[1] == 5 && oid.oid[2] == 4) {
  ------------------
  |  Branch (372:7): [True: 6.93k, False: 2.14k]
  |  Branch (372:26): [True: 5.43k, False: 1.50k]
  |  Branch (372:45): [True: 4.55k, False: 879]
  ------------------
  373|       |			/* id-at ::= 2.5.4 */
  374|  4.55k|			switch (oid.oid[3]) {
  ------------------
  |  Branch (374:12): [True: 3.78k, False: 768]
  ------------------
  375|  1.10k|			case 3:
  ------------------
  |  Branch (375:4): [True: 1.10k, False: 3.45k]
  ------------------
  376|       |				/* commonName */
  377|  1.10k|				type = X509_NAME_ATTR_CN;
  378|  1.10k|				break;
  379|  1.21k|			case 6:
  ------------------
  |  Branch (379:4): [True: 1.21k, False: 3.33k]
  ------------------
  380|       |				/*  countryName */
  381|  1.21k|				type = X509_NAME_ATTR_C;
  382|  1.21k|				break;
  383|     71|			case 7:
  ------------------
  |  Branch (383:4): [True: 71, False: 4.48k]
  ------------------
  384|       |				/* localityName */
  385|     71|				type = X509_NAME_ATTR_L;
  386|     71|				break;
  387|     30|			case 8:
  ------------------
  |  Branch (387:4): [True: 30, False: 4.52k]
  ------------------
  388|       |				/* stateOrProvinceName */
  389|     30|				type = X509_NAME_ATTR_ST;
  390|     30|				break;
  391|  1.20k|			case 10:
  ------------------
  |  Branch (391:4): [True: 1.20k, False: 3.35k]
  ------------------
  392|       |				/* organizationName */
  393|  1.20k|				type = X509_NAME_ATTR_O;
  394|  1.20k|				break;
  395|    161|			case 11:
  ------------------
  |  Branch (395:4): [True: 161, False: 4.39k]
  ------------------
  396|       |				/* organizationalUnitName */
  397|    161|				type = X509_NAME_ATTR_OU;
  398|    161|				break;
  399|  4.55k|			}
  400|  6.70k|		} else if (oid.len == 7 &&
  ------------------
  |  Branch (400:14): [True: 309, False: 6.39k]
  ------------------
  401|    309|			   oid.oid[0] == 1 && oid.oid[1] == 2 &&
  ------------------
  |  Branch (401:7): [True: 164, False: 145]
  |  Branch (401:26): [True: 150, False: 14]
  ------------------
  402|    150|			   oid.oid[2] == 840 && oid.oid[3] == 113549 &&
  ------------------
  |  Branch (402:7): [True: 111, False: 39]
  |  Branch (402:28): [True: 85, False: 26]
  ------------------
  403|     85|			   oid.oid[4] == 1 && oid.oid[5] == 9 &&
  ------------------
  |  Branch (403:7): [True: 57, False: 28]
  |  Branch (403:26): [True: 35, False: 22]
  ------------------
  404|     35|			   oid.oid[6] == 1) {
  ------------------
  |  Branch (404:7): [True: 13, False: 22]
  ------------------
  405|       |			/* 1.2.840.113549.1.9.1 - e-mailAddress */
  406|     13|			os_free(name->email);
  ------------------
  |  |  511|     13|#define os_free(p) free((p))
  ------------------
  407|     13|			name->email = os_malloc(hdr.length + 1);
  ------------------
  |  |  505|     13|#define os_malloc(s) malloc((s))
  ------------------
  408|     13|			if (name->email == NULL) {
  ------------------
  |  Branch (408:8): [True: 0, False: 13]
  ------------------
  409|      0|				x509_free_name(name);
  410|      0|				return -1;
  411|      0|			}
  412|     13|			os_memcpy(name->email, hdr.payload, hdr.length);
  ------------------
  |  |  523|     13|#define os_memcpy(d, s, n) memcpy((d), (s), (n))
  ------------------
  413|     13|			name->email[hdr.length] = '\0';
  414|     13|			continue;
  415|  6.68k|		} else if (oid.len == 7 &&
  ------------------
  |  Branch (415:14): [True: 296, False: 6.39k]
  ------------------
  416|    296|			   oid.oid[0] == 0 && oid.oid[1] == 9 &&
  ------------------
  |  Branch (416:7): [True: 143, False: 153]
  |  Branch (416:26): [True: 115, False: 28]
  ------------------
  417|    115|			   oid.oid[2] == 2342 && oid.oid[3] == 19200300 &&
  ------------------
  |  Branch (417:7): [True: 76, False: 39]
  |  Branch (417:29): [True: 58, False: 18]
  ------------------
  418|     58|			   oid.oid[4] == 100 && oid.oid[5] == 1 &&
  ------------------
  |  Branch (418:7): [True: 41, False: 17]
  |  Branch (418:28): [True: 22, False: 19]
  ------------------
  419|     22|			   oid.oid[6] == 25) {
  ------------------
  |  Branch (419:7): [True: 3, False: 19]
  ------------------
  420|       |			/* 0.9.2342.19200300.100.1.25 - domainComponent */
  421|      3|			type = X509_NAME_ATTR_DC;
  422|      3|		}
  423|       |
  424|  11.2k|		if (type == X509_NAME_ATTR_NOT_USED) {
  ------------------
  |  Branch (424:7): [True: 7.45k, False: 3.79k]
  ------------------
  425|  7.45k|			wpa_hexdump(MSG_DEBUG, "X509: Unrecognized OID",
  426|  7.45k|				    (u8 *) oid.oid,
  427|  7.45k|				    oid.len * sizeof(oid.oid[0]));
  428|  7.45k|			wpa_hexdump_ascii(MSG_MSGDUMP, "X509: Attribute Data",
  429|  7.45k|					  hdr.payload, hdr.length);
  430|  7.45k|			continue;
  431|  7.45k|		}
  432|       |
  433|  3.79k|		if (name->num_attr == X509_MAX_NAME_ATTRIBUTES) {
  ------------------
  |  |   32|  3.79k|#define X509_MAX_NAME_ATTRIBUTES 20
  ------------------
  |  Branch (433:7): [True: 0, False: 3.79k]
  ------------------
  434|      0|			wpa_printf(MSG_INFO, "X509: Too many Name attributes");
  435|      0|			x509_free_name(name);
  436|      0|			return -1;
  437|      0|		}
  438|       |
  439|  3.79k|		val = dup_binstr(hdr.payload, hdr.length);
  440|  3.79k|		if (val == NULL) {
  ------------------
  |  Branch (440:7): [True: 0, False: 3.79k]
  ------------------
  441|      0|			x509_free_name(name);
  442|      0|			return -1;
  443|      0|		}
  444|  3.79k|		if (os_strlen(val) != hdr.length) {
  ------------------
  |  |  536|  3.79k|#define os_strlen(s) strlen(s)
  ------------------
  |  Branch (444:7): [True: 5, False: 3.78k]
  ------------------
  445|      5|			wpa_printf(MSG_INFO, "X509: Reject certificate with "
  446|      5|				   "embedded NUL byte in a string (%s[NUL])",
  447|      5|				   val);
  448|      5|			os_free(val);
  ------------------
  |  |  511|      5|#define os_free(p) free((p))
  ------------------
  449|      5|			x509_free_name(name);
  450|      5|			return -1;
  451|      5|		}
  452|       |
  453|  3.78k|		name->attr[name->num_attr].type = type;
  454|  3.78k|		name->attr[name->num_attr].value = val;
  455|  3.78k|		name->num_attr++;
  456|  3.78k|	}
  457|       |
  458|  5.39k|	return 0;
  459|  5.61k|}
x509_name_string:
  493|  5.39k|{
  494|  5.39k|	char *pos, *end;
  495|  5.39k|	int ret;
  496|  5.39k|	size_t i;
  497|       |
  498|  5.39k|	if (len == 0)
  ------------------
  |  Branch (498:6): [True: 0, False: 5.39k]
  ------------------
  499|      0|		return;
  500|       |
  501|  5.39k|	pos = buf;
  502|  5.39k|	end = buf + len;
  503|       |
  504|  9.09k|	for (i = 0; i < name->num_attr; i++) {
  ------------------
  |  Branch (504:14): [True: 3.70k, False: 5.39k]
  ------------------
  505|  3.70k|		ret = os_snprintf(pos, end - pos, "%s=%s, ",
  ------------------
  |  |  572|  3.70k|#define os_snprintf snprintf
  ------------------
  506|  3.70k|				  x509_name_attr_str(name->attr[i].type),
  507|  3.70k|				  name->attr[i].value);
  508|  3.70k|		if (os_snprintf_error(end - pos, ret))
  ------------------
  |  Branch (508:7): [True: 0, False: 3.70k]
  ------------------
  509|      0|			goto done;
  510|  3.70k|		pos += ret;
  511|  3.70k|	}
  512|       |
  513|  5.39k|	if (pos > buf + 1 && pos[-1] == ' ' && pos[-2] == ',') {
  ------------------
  |  Branch (513:6): [True: 2.16k, False: 3.22k]
  |  Branch (513:23): [True: 2.16k, False: 0]
  |  Branch (513:41): [True: 2.16k, False: 0]
  ------------------
  514|  2.16k|		pos--;
  515|  2.16k|		*pos = '\0';
  516|  2.16k|		pos--;
  517|  2.16k|		*pos = '\0';
  518|  2.16k|	}
  519|       |
  520|  5.39k|	if (name->email) {
  ------------------
  |  Branch (520:6): [True: 10, False: 5.38k]
  ------------------
  521|     10|		ret = os_snprintf(pos, end - pos, "/emailAddress=%s",
  ------------------
  |  |  572|     10|#define os_snprintf snprintf
  ------------------
  522|     10|				  name->email);
  523|     10|		if (os_snprintf_error(end - pos, ret))
  ------------------
  |  Branch (523:7): [True: 0, False: 10]
  ------------------
  524|      0|			goto done;
  525|     10|		pos += ret;
  526|     10|	}
  527|       |
  528|  5.39k|done:
  529|  5.39k|	if (pos < end)
  ------------------
  |  Branch (529:6): [True: 5.39k, False: 0]
  ------------------
  530|  5.39k|		*pos = '\0';
  531|  5.39k|	end[-1] = '\0';
  532|  5.39k|}
x509_parse_time:
  570|  5.34k|{
  571|  5.34k|	const char *pos, *end;
  572|  5.34k|	int year, month, day, hour, min, sec;
  573|       |
  574|       |	/*
  575|       |	 * Time ::= CHOICE {
  576|       |	 *     utcTime        UTCTime,
  577|       |	 *     generalTime    GeneralizedTime
  578|       |	 * }
  579|       |	 *
  580|       |	 * UTCTime: YYMMDDHHMMSSZ
  581|       |	 * GeneralizedTime: YYYYMMDDHHMMSSZ
  582|       |	 */
  583|       |
  584|  5.34k|	pos = (const char *) buf;
  585|  5.34k|	end = pos + len;
  586|       |
  587|  5.34k|	switch (asn1_tag) {
  588|  5.28k|	case ASN1_TAG_UTCTIME:
  ------------------
  |  |   34|  5.28k|#define ASN1_TAG_UTCTIME	0x17
  ------------------
  |  Branch (588:2): [True: 5.28k, False: 61]
  ------------------
  589|  5.28k|		if (len != 13 || buf[12] != 'Z') {
  ------------------
  |  Branch (589:7): [True: 4, False: 5.28k]
  |  Branch (589:20): [True: 5, False: 5.27k]
  ------------------
  590|      9|			wpa_hexdump_ascii(MSG_DEBUG, "X509: Unrecognized "
  591|      9|					  "UTCTime format", buf, len);
  592|      9|			return -1;
  593|      9|		}
  594|  5.27k|		year = parse_uint2(pos, end - pos);
  595|  5.27k|		if (year < 0) {
  ------------------
  |  Branch (595:7): [True: 7, False: 5.27k]
  ------------------
  596|      7|			wpa_hexdump_ascii(MSG_DEBUG, "X509: Failed to parse "
  597|      7|					  "UTCTime year", buf, len);
  598|      7|			return -1;
  599|      7|		}
  600|  5.27k|		if (year < 50)
  ------------------
  |  Branch (600:7): [True: 4.39k, False: 875]
  ------------------
  601|  4.39k|			year += 2000;
  602|    875|		else
  603|    875|			year += 1900;
  604|  5.27k|		pos += 2;
  605|  5.27k|		break;
  606|     61|	case ASN1_TAG_GENERALIZEDTIME:
  ------------------
  |  |   35|     61|#define ASN1_TAG_GENERALIZEDTIME	0x18 /* not yet parsed */
  ------------------
  |  Branch (606:2): [True: 61, False: 5.28k]
  ------------------
  607|     61|		if (len != 15 || buf[14] != 'Z') {
  ------------------
  |  Branch (607:7): [True: 4, False: 57]
  |  Branch (607:20): [True: 4, False: 53]
  ------------------
  608|      8|			wpa_hexdump_ascii(MSG_DEBUG, "X509: Unrecognized "
  609|      8|					  "GeneralizedTime format", buf, len);
  610|      8|			return -1;
  611|      8|		}
  612|     53|		year = parse_uint4(pos, end - pos);
  613|     53|		if (year < 0) {
  ------------------
  |  Branch (613:7): [True: 9, False: 44]
  ------------------
  614|      9|			wpa_hexdump_ascii(MSG_DEBUG, "X509: Failed to parse "
  615|      9|					  "GeneralizedTime year", buf, len);
  616|      9|			return -1;
  617|      9|		}
  618|     44|		pos += 4;
  619|     44|		break;
  620|      0|	default:
  ------------------
  |  Branch (620:2): [True: 0, False: 5.34k]
  ------------------
  621|      0|		wpa_printf(MSG_DEBUG, "X509: Expected UTCTime or "
  622|      0|			   "GeneralizedTime - found tag 0x%x", asn1_tag);
  623|      0|		return -1;
  624|  5.34k|	}
  625|       |
  626|  5.31k|	month = parse_uint2(pos, end - pos);
  627|  5.31k|	if (month < 0) {
  ------------------
  |  Branch (627:6): [True: 5, False: 5.31k]
  ------------------
  628|      5|		wpa_hexdump_ascii(MSG_DEBUG, "X509: Failed to parse Time "
  629|      5|				  "(month)", buf, len);
  630|      5|		return -1;
  631|      5|	}
  632|  5.31k|	pos += 2;
  633|       |
  634|  5.31k|	day = parse_uint2(pos, end - pos);
  635|  5.31k|	if (day < 0) {
  ------------------
  |  Branch (635:6): [True: 5, False: 5.30k]
  ------------------
  636|      5|		wpa_hexdump_ascii(MSG_DEBUG, "X509: Failed to parse Time "
  637|      5|				  "(day)", buf, len);
  638|      5|		return -1;
  639|      5|	}
  640|  5.30k|	pos += 2;
  641|       |
  642|  5.30k|	hour = parse_uint2(pos, end - pos);
  643|  5.30k|	if (hour < 0) {
  ------------------
  |  Branch (643:6): [True: 3, False: 5.30k]
  ------------------
  644|      3|		wpa_hexdump_ascii(MSG_DEBUG, "X509: Failed to parse Time "
  645|      3|				  "(hour)", buf, len);
  646|      3|		return -1;
  647|      3|	}
  648|  5.30k|	pos += 2;
  649|       |
  650|  5.30k|	min = parse_uint2(pos, end - pos);
  651|  5.30k|	if (min < 0) {
  ------------------
  |  Branch (651:6): [True: 5, False: 5.29k]
  ------------------
  652|      5|		wpa_hexdump_ascii(MSG_DEBUG, "X509: Failed to parse Time "
  653|      5|				  "(min)", buf, len);
  654|      5|		return -1;
  655|      5|	}
  656|  5.29k|	pos += 2;
  657|       |
  658|  5.29k|	sec = parse_uint2(pos, end - pos);
  659|  5.29k|	if (sec < 0) {
  ------------------
  |  Branch (659:6): [True: 2, False: 5.29k]
  ------------------
  660|      2|		wpa_hexdump_ascii(MSG_DEBUG, "X509: Failed to parse Time "
  661|      2|				  "(sec)", buf, len);
  662|      2|		return -1;
  663|      2|	}
  664|       |
  665|  5.29k|	if (os_mktime(year, month, day, hour, min, sec, val) < 0) {
  ------------------
  |  Branch (665:6): [True: 622, False: 4.67k]
  ------------------
  666|    622|		wpa_hexdump_ascii(MSG_DEBUG, "X509: Failed to convert Time",
  667|    622|				  buf, len);
  668|    622|		if (year < 1970) {
  ------------------
  |  Branch (668:7): [True: 613, False: 9]
  ------------------
  669|       |			/*
  670|       |			 * At least some test certificates have been configured
  671|       |			 * to use dates prior to 1970. Set the date to
  672|       |			 * beginning of 1970 to handle these case.
  673|       |			 */
  674|    613|			wpa_printf(MSG_DEBUG, "X509: Year=%d before epoch - "
  675|    613|				   "assume epoch as the time", year);
  676|    613|			*val = 0;
  677|    613|			return 0;
  678|    613|		}
  679|      9|		return -1;
  680|    622|	}
  681|       |
  682|  4.67k|	return 0;
  683|  5.29k|}
x509_certificate_parse:
 1728|  3.28k|{
 1729|  3.28k|	struct asn1_hdr hdr;
 1730|  3.28k|	const u8 *pos, *end, *hash_start;
 1731|  3.28k|	struct x509_certificate *cert;
 1732|       |
 1733|  3.28k|	cert = os_zalloc(sizeof(*cert) + len);
 1734|  3.28k|	if (cert == NULL)
  ------------------
  |  Branch (1734:6): [True: 0, False: 3.28k]
  ------------------
 1735|      0|		return NULL;
 1736|  3.28k|	os_memcpy(cert + 1, buf, len);
  ------------------
  |  |  523|  3.28k|#define os_memcpy(d, s, n) memcpy((d), (s), (n))
  ------------------
 1737|  3.28k|	cert->cert_start = (u8 *) (cert + 1);
 1738|  3.28k|	cert->cert_len = len;
 1739|       |
 1740|  3.28k|	pos = buf;
 1741|  3.28k|	end = buf + len;
 1742|       |
 1743|       |	/* RFC 3280 - X.509 v3 certificate / ASN.1 DER */
 1744|       |
 1745|       |	/* Certificate ::= SEQUENCE */
 1746|  3.28k|	if (asn1_get_next(pos, len, &hdr) < 0 || !asn1_is_sequence(&hdr)) {
  ------------------
  |  Branch (1746:6): [True: 66, False: 3.22k]
  |  Branch (1746:43): [True: 19, False: 3.20k]
  ------------------
 1747|     85|		asn1_unexpected(&hdr,
 1748|     85|				"X509: Certificate did not start with a valid SEQUENCE");
 1749|     85|		x509_certificate_free(cert);
 1750|     85|		return NULL;
 1751|     85|	}
 1752|  3.20k|	pos = hdr.payload;
 1753|       |
 1754|  3.20k|	if (hdr.length > end - pos) {
  ------------------
  |  Branch (1754:6): [True: 0, False: 3.20k]
  ------------------
 1755|      0|		x509_certificate_free(cert);
 1756|      0|		return NULL;
 1757|      0|	}
 1758|       |
 1759|  3.20k|	if (hdr.length < end - pos) {
  ------------------
  |  Branch (1759:6): [True: 1.32k, False: 1.87k]
  ------------------
 1760|  1.32k|		wpa_hexdump(MSG_MSGDUMP, "X509: Ignoring extra data after DER "
 1761|  1.32k|			    "encoded certificate",
 1762|  1.32k|			    pos + hdr.length, end - (pos + hdr.length));
 1763|  1.32k|		end = pos + hdr.length;
 1764|  1.32k|	}
 1765|       |
 1766|  3.20k|	hash_start = pos;
 1767|  3.20k|	cert->tbs_cert_start = cert->cert_start + (hash_start - buf);
 1768|  3.20k|	if (x509_parse_tbs_certificate(pos, end - pos, cert, &pos)) {
  ------------------
  |  Branch (1768:6): [True: 1.00k, False: 2.19k]
  ------------------
 1769|  1.00k|		x509_certificate_free(cert);
 1770|  1.00k|		return NULL;
 1771|  1.00k|	}
 1772|  2.19k|	cert->tbs_cert_len = pos - hash_start;
 1773|       |
 1774|       |	/* signatureAlgorithm AlgorithmIdentifier */
 1775|  2.19k|	if (x509_parse_algorithm_identifier(pos, end - pos,
  ------------------
  |  Branch (1775:6): [True: 41, False: 2.15k]
  ------------------
 1776|  2.19k|					    &cert->signature_alg, &pos)) {
 1777|     41|		x509_certificate_free(cert);
 1778|     41|		return NULL;
 1779|     41|	}
 1780|       |
 1781|       |	/* signatureValue BIT STRING */
 1782|  2.15k|	if (asn1_get_next(pos, end - pos, &hdr) < 0 ||
  ------------------
  |  Branch (1782:6): [True: 4, False: 2.15k]
  ------------------
 1783|  2.15k|	    !asn1_is_bitstring(&hdr)) {
  ------------------
  |  Branch (1783:6): [True: 9, False: 2.14k]
  ------------------
 1784|     13|		asn1_unexpected(&hdr,
 1785|     13|				"X509: Expected BITSTRING (signatureValue)");
 1786|     13|		x509_certificate_free(cert);
 1787|     13|		return NULL;
 1788|     13|	}
 1789|  2.14k|	if (hdr.length < 1) {
  ------------------
  |  Branch (1789:6): [True: 1, False: 2.14k]
  ------------------
 1790|      1|		x509_certificate_free(cert);
 1791|      1|		return NULL;
 1792|      1|	}
 1793|  2.14k|	pos = hdr.payload;
 1794|  2.14k|	if (*pos) {
  ------------------
  |  Branch (1794:6): [True: 11, False: 2.13k]
  ------------------
 1795|     11|		wpa_printf(MSG_DEBUG,
 1796|     11|			   "X509: BITSTRING (signatureValue) - %d unused bits",
 1797|     11|			   *pos);
 1798|       |		/* PKCS #1 v1.5 10.2.1:
 1799|       |		 * It is an error if the length in bits of the signature S is
 1800|       |		 * not a multiple of eight.
 1801|       |		 */
 1802|     11|		x509_certificate_free(cert);
 1803|     11|		return NULL;
 1804|     11|	}
 1805|  2.13k|	os_free(cert->sign_value);
  ------------------
  |  |  511|  2.13k|#define os_free(p) free((p))
  ------------------
 1806|  2.13k|	cert->sign_value = os_memdup(pos + 1, hdr.length - 1);
 1807|  2.13k|	if (cert->sign_value == NULL) {
  ------------------
  |  Branch (1807:6): [True: 0, False: 2.13k]
  ------------------
 1808|      0|		wpa_printf(MSG_DEBUG, "X509: Failed to allocate memory for "
 1809|      0|			   "signatureValue");
 1810|      0|		x509_certificate_free(cert);
 1811|      0|		return NULL;
 1812|      0|	}
 1813|  2.13k|	cert->sign_value_len = hdr.length - 1;
 1814|  2.13k|	wpa_hexdump(MSG_MSGDUMP, "X509: signature",
 1815|  2.13k|		    cert->sign_value, cert->sign_value_len);
 1816|       |
 1817|  2.13k|	return cert;
 1818|  2.13k|}
x509v3.c:x509_name_attr_str:
  463|  3.70k|{
  464|  3.70k|	switch (type) {
  ------------------
  |  Branch (464:10): [True: 3.70k, False: 0]
  ------------------
  465|      0|	case X509_NAME_ATTR_NOT_USED:
  ------------------
  |  Branch (465:2): [True: 0, False: 3.70k]
  ------------------
  466|      0|		return "[N/A]";
  467|      0|	case X509_NAME_ATTR_DC:
  ------------------
  |  Branch (467:2): [True: 0, False: 3.70k]
  ------------------
  468|      0|		return "DC";
  469|  1.09k|	case X509_NAME_ATTR_CN:
  ------------------
  |  Branch (469:2): [True: 1.09k, False: 2.60k]
  ------------------
  470|  1.09k|		return "CN";
  471|  1.17k|	case X509_NAME_ATTR_C:
  ------------------
  |  Branch (471:2): [True: 1.17k, False: 2.52k]
  ------------------
  472|  1.17k|		return "C";
  473|     57|	case X509_NAME_ATTR_L:
  ------------------
  |  Branch (473:2): [True: 57, False: 3.64k]
  ------------------
  474|     57|		return "L";
  475|     26|	case X509_NAME_ATTR_ST:
  ------------------
  |  Branch (475:2): [True: 26, False: 3.67k]
  ------------------
  476|     26|		return "ST";
  477|  1.19k|	case X509_NAME_ATTR_O:
  ------------------
  |  Branch (477:2): [True: 1.19k, False: 2.50k]
  ------------------
  478|  1.19k|		return "O";
  479|    151|	case X509_NAME_ATTR_OU:
  ------------------
  |  Branch (479:2): [True: 151, False: 3.55k]
  ------------------
  480|    151|		return "OU";
  481|  3.70k|	}
  482|      0|	return "?";
  483|  3.70k|}
x509v3.c:parse_uint2:
  536|  31.8k|{
  537|  31.8k|	char buf[3];
  538|  31.8k|	int ret;
  539|       |
  540|  31.8k|	if (len < 2)
  ------------------
  |  Branch (540:6): [True: 0, False: 31.8k]
  ------------------
  541|      0|		return -1;
  542|  31.8k|	buf[0] = pos[0];
  543|  31.8k|	buf[1] = pos[1];
  544|  31.8k|	buf[2] = 0x00;
  545|  31.8k|	if (sscanf(buf, "%2d", &ret) != 1)
  ------------------
  |  Branch (545:6): [True: 12, False: 31.8k]
  ------------------
  546|     12|		return -1;
  547|  31.8k|	return ret;
  548|  31.8k|}
x509v3.c:parse_uint4:
  552|     53|{
  553|     53|	char buf[5];
  554|     53|	int ret;
  555|       |
  556|     53|	if (len < 4)
  ------------------
  |  Branch (556:6): [True: 0, False: 53]
  ------------------
  557|      0|		return -1;
  558|     53|	buf[0] = pos[0];
  559|     53|	buf[1] = pos[1];
  560|     53|	buf[2] = pos[2];
  561|     53|	buf[3] = pos[3];
  562|     53|	buf[4] = 0x00;
  563|     53|	if (sscanf(buf, "%4d", &ret) != 1)
  ------------------
  |  Branch (563:6): [True: 3, False: 50]
  ------------------
  564|      3|		return -1;
  565|     50|	return ret;
  566|     53|}
x509v3.c:x509_parse_tbs_certificate:
 1458|  3.20k|{
 1459|  3.20k|	struct asn1_hdr hdr;
 1460|  3.20k|	const u8 *pos, *end;
 1461|  3.20k|	size_t left;
 1462|  3.20k|	char sbuf[128];
 1463|  3.20k|	unsigned long value;
 1464|  3.20k|	const u8 *subject_dn;
 1465|       |
 1466|       |	/* tbsCertificate TBSCertificate ::= SEQUENCE */
 1467|  3.20k|	if (asn1_get_next(buf, len, &hdr) < 0 || !asn1_is_sequence(&hdr)) {
  ------------------
  |  Branch (1467:6): [True: 18, False: 3.18k]
  |  Branch (1467:43): [True: 17, False: 3.16k]
  ------------------
 1468|     35|		asn1_unexpected(&hdr,
 1469|     35|				"X509: tbsCertificate did not start with a valid SEQUENCE");
 1470|     35|		return -1;
 1471|     35|	}
 1472|  3.16k|	pos = hdr.payload;
 1473|  3.16k|	end = *next = pos + hdr.length;
 1474|       |
 1475|       |	/*
 1476|       |	 * version [0]  EXPLICIT Version DEFAULT v1
 1477|       |	 * Version  ::=  INTEGER  {  v1(0), v2(1), v3(2)  }
 1478|       |	 */
 1479|  3.16k|	if (asn1_get_next(pos, end - pos, &hdr) < 0)
  ------------------
  |  Branch (1479:6): [True: 7, False: 3.16k]
  ------------------
 1480|      7|		return -1;
 1481|  3.16k|	pos = hdr.payload;
 1482|       |
 1483|  3.16k|	if (asn1_is_cs_tag(&hdr, 0) && hdr.constructed) {
  ------------------
  |  Branch (1483:6): [True: 2.44k, False: 714]
  |  Branch (1483:33): [True: 2.44k, False: 1]
  ------------------
 1484|  2.44k|		if (asn1_get_next(pos, end - pos, &hdr) < 0 ||
  ------------------
  |  Branch (1484:7): [True: 7, False: 2.43k]
  ------------------
 1485|  2.43k|		    !asn1_is_integer(&hdr)) {
  ------------------
  |  Branch (1485:7): [True: 9, False: 2.42k]
  ------------------
 1486|     16|			asn1_unexpected(&hdr,
 1487|     16|					"X509: No INTEGER tag found for version field");
 1488|     16|			return -1;
 1489|     16|		}
 1490|  2.42k|		if (hdr.length != 1) {
  ------------------
  |  Branch (1490:7): [True: 1, False: 2.42k]
  ------------------
 1491|      1|			wpa_printf(MSG_DEBUG, "X509: Unexpected version field "
 1492|      1|				   "length %u (expected 1)", hdr.length);
 1493|      1|			return -1;
 1494|      1|		}
 1495|  2.42k|		pos = hdr.payload;
 1496|  2.42k|		left = hdr.length;
 1497|  2.42k|		value = 0;
 1498|  4.85k|		while (left) {
  ------------------
  |  Branch (1498:10): [True: 2.42k, False: 2.42k]
  ------------------
 1499|  2.42k|			value <<= 8;
 1500|  2.42k|			value |= *pos++;
 1501|  2.42k|			left--;
 1502|  2.42k|		}
 1503|       |
 1504|  2.42k|		cert->version = value;
 1505|  2.42k|		if (cert->version != X509_CERT_V1 &&
  ------------------
  |  Branch (1505:7): [True: 1.62k, False: 806]
  ------------------
 1506|  1.62k|		    cert->version != X509_CERT_V2 &&
  ------------------
  |  Branch (1506:7): [True: 1.58k, False: 34]
  ------------------
 1507|  1.58k|		    cert->version != X509_CERT_V3) {
  ------------------
  |  Branch (1507:7): [True: 9, False: 1.57k]
  ------------------
 1508|      9|			wpa_printf(MSG_DEBUG, "X509: Unsupported version %d",
 1509|      9|				   cert->version + 1);
 1510|      9|			return -1;
 1511|      9|		}
 1512|       |
 1513|  2.41k|		if (asn1_get_next(pos, end - pos, &hdr) < 0)
  ------------------
  |  Branch (1513:7): [True: 3, False: 2.41k]
  ------------------
 1514|      3|			return -1;
 1515|  2.41k|	} else
 1516|    715|		cert->version = X509_CERT_V1;
 1517|  3.13k|	wpa_printf(MSG_MSGDUMP, "X509: Version X.509v%d", cert->version + 1);
 1518|       |
 1519|       |	/* serialNumber CertificateSerialNumber ::= INTEGER */
 1520|  3.13k|	if (!asn1_is_integer(&hdr) ||
  ------------------
  |  Branch (1520:6): [True: 26, False: 3.10k]
  ------------------
 1521|  3.10k|	    hdr.length < 1 || hdr.length > X509_MAX_SERIAL_NUM_LEN) {
  ------------------
  |  |   48|  3.10k|#define X509_MAX_SERIAL_NUM_LEN 20
  ------------------
  |  Branch (1521:6): [True: 1, False: 3.10k]
  |  Branch (1521:24): [True: 3, False: 3.10k]
  ------------------
 1522|     30|		asn1_unexpected(&hdr,
 1523|     30|				"X509: No INTEGER tag found for serialNumber");
 1524|     30|		return -1;
 1525|     30|	}
 1526|       |
 1527|  3.10k|	pos = hdr.payload + hdr.length;
 1528|  6.42k|	while (hdr.length > 0 && hdr.payload[0] == 0) {
  ------------------
  |  Branch (1528:9): [True: 6.34k, False: 75]
  |  Branch (1528:27): [True: 3.31k, False: 3.02k]
  ------------------
 1529|  3.31k|		hdr.payload++;
 1530|  3.31k|		hdr.length--;
 1531|  3.31k|	}
 1532|  3.10k|	os_memcpy(cert->serial_number, hdr.payload, hdr.length);
  ------------------
  |  |  523|  3.10k|#define os_memcpy(d, s, n) memcpy((d), (s), (n))
  ------------------
 1533|  3.10k|	cert->serial_number_len = hdr.length;
 1534|  3.10k|	wpa_hexdump(MSG_MSGDUMP, "X509: serialNumber", cert->serial_number,
 1535|  3.10k|		    cert->serial_number_len);
 1536|       |
 1537|       |	/* signature AlgorithmIdentifier */
 1538|  3.10k|	if (x509_parse_algorithm_identifier(pos, end - pos, &cert->signature,
  ------------------
  |  Branch (1538:6): [True: 60, False: 3.04k]
  ------------------
 1539|  3.10k|					    &pos))
 1540|     60|		return -1;
 1541|       |
 1542|       |	/* issuer Name */
 1543|  3.04k|	if (x509_parse_name(pos, end - pos, &cert->issuer, &pos))
  ------------------
  |  Branch (1543:6): [True: 261, False: 2.78k]
  ------------------
 1544|    261|		return -1;
 1545|  2.78k|	x509_name_string(&cert->issuer, sbuf, sizeof(sbuf));
 1546|  2.78k|	wpa_printf(MSG_MSGDUMP, "X509: issuer %s", sbuf);
 1547|       |
 1548|       |	/* validity Validity */
 1549|  2.78k|	if (x509_parse_validity(pos, end - pos, cert, &pos))
  ------------------
  |  Branch (1549:6): [True: 160, False: 2.62k]
  ------------------
 1550|    160|		return -1;
 1551|       |
 1552|       |	/* subject Name */
 1553|  2.62k|	subject_dn = pos;
 1554|  2.62k|	if (x509_parse_name(pos, end - pos, &cert->subject, &pos))
  ------------------
  |  Branch (1554:6): [True: 8, False: 2.61k]
  ------------------
 1555|      8|		return -1;
 1556|  2.61k|	cert->subject_dn = os_malloc(pos - subject_dn);
  ------------------
  |  |  505|  2.61k|#define os_malloc(s) malloc((s))
  ------------------
 1557|  2.61k|	if (!cert->subject_dn)
  ------------------
  |  Branch (1557:6): [True: 0, False: 2.61k]
  ------------------
 1558|      0|		return -1;
 1559|  2.61k|	cert->subject_dn_len = pos - subject_dn;
 1560|  2.61k|	os_memcpy(cert->subject_dn, subject_dn, cert->subject_dn_len);
  ------------------
  |  |  523|  2.61k|#define os_memcpy(d, s, n) memcpy((d), (s), (n))
  ------------------
 1561|  2.61k|	x509_name_string(&cert->subject, sbuf, sizeof(sbuf));
 1562|  2.61k|	wpa_printf(MSG_MSGDUMP, "X509: subject %s", sbuf);
 1563|       |
 1564|       |	/* subjectPublicKeyInfo SubjectPublicKeyInfo */
 1565|  2.61k|	if (x509_parse_public_key(pos, end - pos, cert, &pos))
  ------------------
  |  Branch (1565:6): [True: 36, False: 2.57k]
  ------------------
 1566|     36|		return -1;
 1567|       |
 1568|  2.57k|	if (pos == end)
  ------------------
  |  Branch (1568:6): [True: 233, False: 2.34k]
  ------------------
 1569|    233|		return 0;
 1570|       |
 1571|  2.34k|	if (cert->version == X509_CERT_V1)
  ------------------
  |  Branch (1571:6): [True: 800, False: 1.54k]
  ------------------
 1572|    800|		return 0;
 1573|       |
 1574|  1.54k|	if (asn1_get_next(pos, end - pos, &hdr) < 0 ||
  ------------------
  |  Branch (1574:6): [True: 6, False: 1.53k]
  ------------------
 1575|  1.53k|	    hdr.class != ASN1_CLASS_CONTEXT_SPECIFIC) {
  ------------------
  |  |   45|  1.53k|#define ASN1_CLASS_CONTEXT_SPECIFIC	2
  ------------------
  |  Branch (1575:6): [True: 4, False: 1.53k]
  ------------------
 1576|     10|		asn1_unexpected(&hdr,
 1577|     10|				"X509: Expected Context-Specific tag to parse optional tbsCertificate field(s)");
 1578|     10|		return -1;
 1579|     10|	}
 1580|       |
 1581|  1.53k|	if (hdr.tag == 1) {
  ------------------
  |  Branch (1581:6): [True: 51, False: 1.48k]
  ------------------
 1582|       |		/* issuerUniqueID  [1]  IMPLICIT UniqueIdentifier OPTIONAL */
 1583|     51|		wpa_printf(MSG_DEBUG, "X509: issuerUniqueID");
 1584|       |		/* TODO: parse UniqueIdentifier ::= BIT STRING */
 1585|       |
 1586|     51|		pos = hdr.payload + hdr.length;
 1587|     51|		if (pos == end)
  ------------------
  |  Branch (1587:7): [True: 35, False: 16]
  ------------------
 1588|     35|			return 0;
 1589|       |
 1590|     16|		if (asn1_get_next(pos, end - pos, &hdr) < 0 ||
  ------------------
  |  Branch (1590:7): [True: 1, False: 15]
  ------------------
 1591|     15|		    hdr.class != ASN1_CLASS_CONTEXT_SPECIFIC) {
  ------------------
  |  |   45|     15|#define ASN1_CLASS_CONTEXT_SPECIFIC	2
  ------------------
  |  Branch (1591:7): [True: 3, False: 12]
  ------------------
 1592|      4|			asn1_unexpected(&hdr,
 1593|      4|					"X509: Expected Context-Specific tag to parse optional tbsCertificate field(s)");
 1594|      4|			return -1;
 1595|      4|		}
 1596|     16|	}
 1597|       |
 1598|  1.49k|	if (hdr.tag == 2) {
  ------------------
  |  Branch (1598:6): [True: 159, False: 1.33k]
  ------------------
 1599|       |		/* subjectUniqueID [2]  IMPLICIT UniqueIdentifier OPTIONAL */
 1600|    159|		wpa_printf(MSG_DEBUG, "X509: subjectUniqueID");
 1601|       |		/* TODO: parse UniqueIdentifier ::= BIT STRING */
 1602|       |
 1603|    159|		pos = hdr.payload + hdr.length;
 1604|    159|		if (pos == end)
  ------------------
  |  Branch (1604:7): [True: 43, False: 116]
  ------------------
 1605|     43|			return 0;
 1606|       |
 1607|    116|		if (asn1_get_next(pos, end - pos, &hdr) < 0 ||
  ------------------
  |  Branch (1607:7): [True: 1, False: 115]
  ------------------
 1608|    115|		    hdr.class != ASN1_CLASS_CONTEXT_SPECIFIC) {
  ------------------
  |  |   45|    115|#define ASN1_CLASS_CONTEXT_SPECIFIC	2
  ------------------
  |  Branch (1608:7): [True: 3, False: 112]
  ------------------
 1609|      4|			asn1_unexpected(&hdr,
 1610|      4|					"X509: Expected Context-Specific tag to parse optional tbsCertificate field(s)");
 1611|      4|			return -1;
 1612|      4|		}
 1613|    116|	}
 1614|       |
 1615|  1.44k|	if (hdr.tag != 3) {
  ------------------
  |  Branch (1615:6): [True: 494, False: 953]
  ------------------
 1616|    494|		wpa_printf(MSG_DEBUG,
 1617|    494|			   "X509: Ignored unexpected Context-Specific constructed %d tag %d in optional tbsCertificate fields",
 1618|    494|			   hdr.constructed, hdr.tag);
 1619|    494|		return 0;
 1620|    494|	}
 1621|       |
 1622|       |	/* extensions      [3]  EXPLICIT Extensions OPTIONAL */
 1623|       |
 1624|    953|	if (cert->version != X509_CERT_V3) {
  ------------------
  |  Branch (1624:6): [True: 3, False: 950]
  ------------------
 1625|      3|		wpa_printf(MSG_DEBUG, "X509: X.509%d certificate and "
 1626|      3|			   "Extensions data which are only allowed for "
 1627|      3|			   "version 3", cert->version + 1);
 1628|      3|		return -1;
 1629|      3|	}
 1630|       |
 1631|    950|	if (x509_parse_extensions(cert, hdr.payload, hdr.length) < 0)
  ------------------
  |  Branch (1631:6): [True: 358, False: 592]
  ------------------
 1632|    358|		return -1;
 1633|       |
 1634|    592|	pos = hdr.payload + hdr.length;
 1635|    592|	if (pos < end) {
  ------------------
  |  Branch (1635:6): [True: 21, False: 571]
  ------------------
 1636|     21|		wpa_hexdump(MSG_DEBUG,
 1637|     21|			    "X509: Ignored extra tbsCertificate data",
 1638|     21|			    pos, end - pos);
 1639|     21|	}
 1640|       |
 1641|    592|	return 0;
 1642|    950|}
x509v3.c:x509_parse_validity:
  688|  2.78k|{
  689|  2.78k|	struct asn1_hdr hdr;
  690|  2.78k|	const u8 *pos;
  691|  2.78k|	size_t plen;
  692|       |
  693|       |	/*
  694|       |	 * Validity ::= SEQUENCE {
  695|       |	 *     notBefore      Time,
  696|       |	 *     notAfter       Time
  697|       |	 * }
  698|       |	 *
  699|       |	 * RFC 3280, 4.1.2.5:
  700|       |	 * CAs conforming to this profile MUST always encode certificate
  701|       |	 * validity dates through the year 2049 as UTCTime; certificate
  702|       |	 * validity dates in 2050 or later MUST be encoded as GeneralizedTime.
  703|       |	 */
  704|       |
  705|  2.78k|	if (asn1_get_next(buf, len, &hdr) < 0 || !asn1_is_sequence(&hdr)) {
  ------------------
  |  Branch (705:6): [True: 33, False: 2.74k]
  |  Branch (705:43): [True: 19, False: 2.72k]
  ------------------
  706|     52|		asn1_unexpected(&hdr, "X509: Expected SEQUENCE (Validity)");
  707|     52|		return -1;
  708|     52|	}
  709|  2.72k|	pos = hdr.payload;
  710|  2.72k|	plen = hdr.length;
  711|       |
  712|  2.72k|	if (plen > (size_t) (buf + len - pos))
  ------------------
  |  Branch (712:6): [True: 0, False: 2.72k]
  ------------------
  713|      0|		return -1;
  714|       |
  715|  2.72k|	*next = pos + plen;
  716|       |
  717|  2.72k|	if (asn1_get_next(pos, plen, &hdr) < 0 ||
  ------------------
  |  Branch (717:6): [True: 7, False: 2.72k]
  ------------------
  718|  2.72k|	    (!asn1_is_utctime(&hdr) && !asn1_is_generalizedtime(&hdr)) ||
  ------------------
  |  Branch (718:7): [True: 61, False: 2.66k]
  |  Branch (718:33): [True: 23, False: 38]
  ------------------
  719|  2.69k|	    x509_parse_time(hdr.payload, hdr.length, hdr.tag,
  ------------------
  |  Branch (719:6): [True: 31, False: 2.66k]
  ------------------
  720|  2.69k|			    &cert->not_before) < 0) {
  721|     61|		wpa_hexdump_ascii(MSG_DEBUG, "X509: Failed to parse notBefore "
  722|     61|				  "Time", hdr.payload, hdr.length);
  723|     61|		return -1;
  724|     61|	}
  725|       |
  726|  2.66k|	pos = hdr.payload + hdr.length;
  727|  2.66k|	plen = *next - pos;
  728|       |
  729|  2.66k|	if (asn1_get_next(pos, plen, &hdr) < 0 ||
  ------------------
  |  Branch (729:6): [True: 3, False: 2.66k]
  ------------------
  730|  2.66k|	    (!asn1_is_utctime(&hdr) && !asn1_is_generalizedtime(&hdr)) ||
  ------------------
  |  Branch (730:7): [True: 36, False: 2.62k]
  |  Branch (730:33): [True: 13, False: 23]
  ------------------
  731|  2.65k|	    x509_parse_time(hdr.payload, hdr.length, hdr.tag,
  ------------------
  |  Branch (731:6): [True: 31, False: 2.62k]
  ------------------
  732|  2.65k|			    &cert->not_after) < 0) {
  733|     47|		wpa_hexdump_ascii(MSG_DEBUG, "X509: Failed to parse notAfter "
  734|     47|				  "Time", hdr.payload, hdr.length);
  735|     47|		return -1;
  736|     47|	}
  737|       |
  738|  2.62k|	wpa_printf(MSG_MSGDUMP, "X509: Validity: notBefore: %lu notAfter: %lu",
  739|  2.62k|		   (unsigned long) cert->not_before,
  740|  2.62k|		   (unsigned long) cert->not_after);
  741|       |
  742|  2.62k|	return 0;
  743|  2.66k|}
x509v3.c:x509_parse_public_key:
  219|  2.61k|{
  220|  2.61k|	struct asn1_hdr hdr;
  221|  2.61k|	const u8 *pos, *end;
  222|       |
  223|       |	/*
  224|       |	 * SubjectPublicKeyInfo ::= SEQUENCE {
  225|       |	 *     algorithm            AlgorithmIdentifier,
  226|       |	 *     subjectPublicKey     BIT STRING
  227|       |	 * }
  228|       |	 */
  229|       |
  230|  2.61k|	pos = buf;
  231|  2.61k|	end = buf + len;
  232|       |
  233|  2.61k|	if (asn1_get_next(pos, end - pos, &hdr) < 0 ||
  ------------------
  |  Branch (233:6): [True: 5, False: 2.60k]
  ------------------
  234|  2.60k|	    !asn1_is_sequence(&hdr)) {
  ------------------
  |  Branch (234:6): [True: 10, False: 2.59k]
  ------------------
  235|     15|		asn1_unexpected(&hdr,
  236|     15|				"X509: Expected SEQUENCE (SubjectPublicKeyInfo)");
  237|     15|		return -1;
  238|     15|	}
  239|  2.59k|	pos = hdr.payload;
  240|       |
  241|  2.59k|	if (hdr.length > end - pos)
  ------------------
  |  Branch (241:6): [True: 0, False: 2.59k]
  ------------------
  242|      0|		return -1;
  243|  2.59k|	end = pos + hdr.length;
  244|  2.59k|	*next = end;
  245|       |
  246|  2.59k|	if (x509_parse_algorithm_identifier(pos, end - pos,
  ------------------
  |  Branch (246:6): [True: 11, False: 2.58k]
  ------------------
  247|  2.59k|					    &cert->public_key_alg, &pos))
  248|     11|		return -1;
  249|       |
  250|  2.58k|	if (asn1_get_next(pos, end - pos, &hdr) < 0 ||
  ------------------
  |  Branch (250:6): [True: 2, False: 2.58k]
  ------------------
  251|  2.58k|	    !asn1_is_bitstring(&hdr)) {
  ------------------
  |  Branch (251:6): [True: 7, False: 2.57k]
  ------------------
  252|      9|		asn1_unexpected(&hdr,
  253|      9|				"X509: Expected BITSTRING (subjectPublicKey)");
  254|      9|		return -1;
  255|      9|	}
  256|  2.57k|	if (hdr.length < 1)
  ------------------
  |  Branch (256:6): [True: 1, False: 2.57k]
  ------------------
  257|      1|		return -1;
  258|  2.57k|	pos = hdr.payload;
  259|  2.57k|	if (*pos) {
  ------------------
  |  Branch (259:6): [True: 1.00k, False: 1.57k]
  ------------------
  260|  1.00k|		wpa_printf(MSG_DEBUG,
  261|  1.00k|			   "X509: BITSTRING (subjectPublicKey) - %d unused bits",
  262|  1.00k|			   *pos);
  263|       |		/*
  264|       |		 * TODO: should this be rejected? X.509 certificates are
  265|       |		 * unlikely to use such a construction. Now we would end up
  266|       |		 * including the extra bits in the buffer which may also be
  267|       |		 * ok.
  268|       |		 */
  269|  1.00k|	}
  270|  2.57k|	os_free(cert->public_key);
  ------------------
  |  |  511|  2.57k|#define os_free(p) free((p))
  ------------------
  271|  2.57k|	cert->public_key = os_memdup(pos + 1, hdr.length - 1);
  272|  2.57k|	if (cert->public_key == NULL) {
  ------------------
  |  Branch (272:6): [True: 0, False: 2.57k]
  ------------------
  273|      0|		wpa_printf(MSG_DEBUG, "X509: Failed to allocate memory for "
  274|      0|			   "public key");
  275|      0|		return -1;
  276|      0|	}
  277|  2.57k|	cert->public_key_len = hdr.length - 1;
  278|  2.57k|	wpa_hexdump(MSG_MSGDUMP, "X509: subjectPublicKey",
  279|  2.57k|		    cert->public_key, cert->public_key_len);
  280|       |
  281|  2.57k|	return 0;
  282|  2.57k|}
x509v3.c:x509_parse_extensions:
 1431|    950|{
 1432|    950|	const u8 *end;
 1433|    950|	struct asn1_hdr hdr;
 1434|       |
 1435|       |	/* Extensions  ::=  SEQUENCE SIZE (1..MAX) OF Extension */
 1436|       |
 1437|    950|	if (asn1_get_next(pos, len, &hdr) < 0 || !asn1_is_sequence(&hdr)) {
  ------------------
  |  Branch (1437:6): [True: 2, False: 948]
  |  Branch (1437:43): [True: 8, False: 940]
  ------------------
 1438|     10|		asn1_unexpected(&hdr, "X509: Expected SEQUENCE for Extensions");
 1439|     10|		return -1;
 1440|     10|	}
 1441|       |
 1442|    940|	pos = hdr.payload;
 1443|    940|	end = pos + hdr.length;
 1444|       |
 1445|  4.60k|	while (pos < end) {
  ------------------
  |  Branch (1445:9): [True: 4.01k, False: 592]
  ------------------
 1446|  4.01k|		if (x509_parse_extension(cert, pos, end - pos, &pos)
  ------------------
  |  Branch (1446:7): [True: 348, False: 3.66k]
  ------------------
 1447|  4.01k|		    < 0)
 1448|    348|			return -1;
 1449|  4.01k|	}
 1450|       |
 1451|    592|	return 0;
 1452|    940|}
x509v3.c:x509_parse_extension:
 1357|  4.01k|{
 1358|  4.01k|	const u8 *end;
 1359|  4.01k|	struct asn1_hdr hdr;
 1360|  4.01k|	struct asn1_oid oid;
 1361|  4.01k|	int critical_ext = 0, res;
 1362|  4.01k|	char buf[80];
 1363|       |
 1364|       |	/*
 1365|       |	 * Extension  ::=  SEQUENCE  {
 1366|       |	 *     extnID      OBJECT IDENTIFIER,
 1367|       |	 *     critical    BOOLEAN DEFAULT FALSE,
 1368|       |	 *     extnValue   OCTET STRING
 1369|       |	 * }
 1370|       |	 */
 1371|       |
 1372|  4.01k|	if (asn1_get_next(pos, len, &hdr) < 0 || !asn1_is_sequence(&hdr)) {
  ------------------
  |  Branch (1372:6): [True: 38, False: 3.97k]
  |  Branch (1372:43): [True: 28, False: 3.95k]
  ------------------
 1373|     66|		asn1_unexpected(&hdr, "X509: Expected SEQUENCE in Extensions");
 1374|     66|		return -1;
 1375|     66|	}
 1376|  3.95k|	pos = hdr.payload;
 1377|  3.95k|	*next = end = pos + hdr.length;
 1378|       |
 1379|  3.95k|	if (asn1_get_oid(pos, end - pos, &oid, &pos) < 0) {
  ------------------
  |  Branch (1379:6): [True: 7, False: 3.94k]
  ------------------
 1380|      7|		wpa_printf(MSG_DEBUG, "X509: Unexpected ASN.1 data for "
 1381|      7|			   "Extension (expected OID)");
 1382|      7|		return -1;
 1383|      7|	}
 1384|       |
 1385|  3.94k|	if (asn1_get_next(pos, end - pos, &hdr) < 0 ||
  ------------------
  |  Branch (1385:6): [True: 3, False: 3.94k]
  ------------------
 1386|  3.94k|	    (!asn1_is_boolean(&hdr) && !asn1_is_octetstring(&hdr))) {
  ------------------
  |  Branch (1386:7): [True: 3.90k, False: 39]
  |  Branch (1386:33): [True: 14, False: 3.88k]
  ------------------
 1387|     17|		asn1_unexpected(&hdr,
 1388|     17|				"X509: Expected BOOLEAN or OCTETSTRING in Extensions");
 1389|     17|		return -1;
 1390|     17|	}
 1391|       |
 1392|  3.92k|	if (hdr.tag == ASN1_TAG_BOOLEAN) {
  ------------------
  |  |   13|  3.92k|#define ASN1_TAG_BOOLEAN	0x01
  ------------------
  |  Branch (1392:6): [True: 39, False: 3.88k]
  ------------------
 1393|     39|		critical_ext = hdr.payload[0];
 1394|     39|		pos = hdr.payload;
 1395|       |		/*
 1396|       |		 * Number of CA certificates seem to be using Private class in
 1397|       |		 * one of the X.509v3 extensions, so let's accept that instead
 1398|       |		 * of rejecting the certificate. asn1_is_octetstring() covers
 1399|       |		 * the more common case.
 1400|       |		 */
 1401|     39|		if (asn1_get_next(pos, end - pos, &hdr) < 0 ||
  ------------------
  |  Branch (1401:7): [True: 1, False: 38]
  ------------------
 1402|     38|		    (!asn1_is_octetstring(&hdr) &&
  ------------------
  |  Branch (1402:8): [True: 38, False: 0]
  ------------------
 1403|     38|		     !(hdr.class == ASN1_CLASS_PRIVATE &&
  ------------------
  |  |   46|     76|#define ASN1_CLASS_PRIVATE		3
  ------------------
  |  Branch (1403:10): [True: 36, False: 2]
  ------------------
 1404|     36|		       hdr.tag == ASN1_TAG_OCTETSTRING))) {
  ------------------
  |  |   16|     36|#define ASN1_TAG_OCTETSTRING	0x04
  ------------------
  |  Branch (1404:10): [True: 31, False: 5]
  ------------------
 1405|      8|			asn1_unexpected(&hdr,
 1406|      8|					"X509: Expected OCTETSTRING in Extensions");
 1407|      8|			return -1;
 1408|      8|		}
 1409|     39|	}
 1410|       |
 1411|  3.91k|	asn1_oid_to_str(&oid, buf, sizeof(buf));
 1412|  3.91k|	wpa_printf(MSG_DEBUG, "X509: Extension: extnID=%s critical=%d",
 1413|  3.91k|		   buf, critical_ext);
 1414|  3.91k|	wpa_hexdump(MSG_MSGDUMP, "X509: extnValue", hdr.payload, hdr.length);
 1415|       |
 1416|  3.91k|	res = x509_parse_extension_data(cert, &oid, hdr.payload, hdr.length);
 1417|  3.91k|	if (res < 0)
  ------------------
  |  Branch (1417:6): [True: 249, False: 3.67k]
  ------------------
 1418|    249|		return res;
 1419|  3.67k|	if (res == 1 && critical_ext) {
  ------------------
  |  Branch (1419:6): [True: 2.23k, False: 1.43k]
  |  Branch (1419:18): [True: 1, False: 2.23k]
  ------------------
 1420|      1|		wpa_printf(MSG_INFO, "X509: Unknown critical extension %s",
 1421|      1|			   buf);
 1422|      1|		return -1;
 1423|      1|	}
 1424|       |
 1425|  3.66k|	return 0;
 1426|  3.67k|}
x509v3.c:x509_parse_extension_data:
 1327|  3.91k|{
 1328|  3.91k|	if (!x509_id_ce_oid(oid))
  ------------------
  |  Branch (1328:6): [True: 1.38k, False: 2.53k]
  ------------------
 1329|  1.38k|		return 1;
 1330|       |
 1331|       |	/* TODO: add other extensions required by RFC 3280, Ch 4.2:
 1332|       |	 * name constraints (section 4.2.1.11)
 1333|       |	 * policy constraints (section 4.2.1.12)
 1334|       |	 * inhibit any-policy (section 4.2.1.15)
 1335|       |	 */
 1336|  2.53k|	switch (oid->oid[3]) {
 1337|     73|	case 15: /* id-ce-keyUsage */
  ------------------
  |  Branch (1337:2): [True: 73, False: 2.46k]
  ------------------
 1338|     73|		return x509_parse_ext_key_usage(cert, pos, len);
 1339|    292|	case 17: /* id-ce-subjectAltName */
  ------------------
  |  Branch (1339:2): [True: 292, False: 2.24k]
  ------------------
 1340|    292|		return x509_parse_ext_subject_alt_name(cert, pos, len);
 1341|    116|	case 18: /* id-ce-issuerAltName */
  ------------------
  |  Branch (1341:2): [True: 116, False: 2.41k]
  ------------------
 1342|    116|		return x509_parse_ext_issuer_alt_name(cert, pos, len);
 1343|    426|	case 19: /* id-ce-basicConstraints */
  ------------------
  |  Branch (1343:2): [True: 426, False: 2.10k]
  ------------------
 1344|    426|		return x509_parse_ext_basic_constraints(cert, pos, len);
 1345|    400|	case 32: /* id-ce-certificatePolicies */
  ------------------
  |  Branch (1345:2): [True: 400, False: 2.13k]
  ------------------
 1346|    400|		return x509_parse_ext_certificate_policies(cert, pos, len);
 1347|    381|	case 37: /* id-ce-extKeyUsage */
  ------------------
  |  Branch (1347:2): [True: 381, False: 2.15k]
  ------------------
 1348|    381|		return x509_parse_ext_ext_key_usage(cert, pos, len);
 1349|    846|	default:
  ------------------
  |  Branch (1349:2): [True: 846, False: 1.68k]
  ------------------
 1350|    846|		return 1;
 1351|  2.53k|	}
 1352|  2.53k|}
x509v3.c:x509_id_ce_oid:
  747|  4.14k|{
  748|       |	/* id-ce arc from X.509 for standard X.509v3 extensions */
  749|  4.14k|	return oid->len >= 4 &&
  ------------------
  |  Branch (749:9): [True: 3.84k, False: 301]
  ------------------
  750|  3.84k|		oid->oid[0] == 2 /* joint-iso-ccitt */ &&
  ------------------
  |  Branch (750:3): [True: 3.27k, False: 575]
  ------------------
  751|  3.27k|		oid->oid[1] == 5 /* ds */ &&
  ------------------
  |  Branch (751:3): [True: 2.83k, False: 440]
  ------------------
  752|  2.83k|		oid->oid[2] == 29 /* id-ce */;
  ------------------
  |  Branch (752:3): [True: 2.58k, False: 252]
  ------------------
  753|  4.14k|}
x509v3.c:x509_parse_ext_key_usage:
  767|     73|{
  768|     73|	struct asn1_hdr hdr;
  769|       |
  770|       |	/*
  771|       |	 * KeyUsage ::= BIT STRING {
  772|       |	 *     digitalSignature        (0),
  773|       |	 *     nonRepudiation          (1),
  774|       |	 *     keyEncipherment         (2),
  775|       |	 *     dataEncipherment        (3),
  776|       |	 *     keyAgreement            (4),
  777|       |	 *     keyCertSign             (5),
  778|       |	 *     cRLSign                 (6),
  779|       |	 *     encipherOnly            (7),
  780|       |	 *     decipherOnly            (8) }
  781|       |	 */
  782|       |
  783|     73|	if (asn1_get_next(pos, len, &hdr) < 0 || !asn1_is_bitstring(&hdr) ||
  ------------------
  |  Branch (783:6): [True: 4, False: 69]
  |  Branch (783:43): [True: 6, False: 63]
  ------------------
  784|     63|	    hdr.length < 1) {
  ------------------
  |  Branch (784:6): [True: 1, False: 62]
  ------------------
  785|     11|		asn1_unexpected(&hdr, "X509: Expected BIT STRING in KeyUsage");
  786|     11|		return -1;
  787|     11|	}
  788|       |
  789|     62|	cert->extensions_present |= X509_EXT_KEY_USAGE;
  ------------------
  |  |   73|     62|#define X509_EXT_KEY_USAGE			(1 << 2)
  ------------------
  790|     62|	cert->key_usage = asn1_bit_string_to_long(hdr.payload, hdr.length);
  791|       |
  792|     62|	wpa_printf(MSG_DEBUG, "X509: KeyUsage 0x%lx", cert->key_usage);
  793|       |
  794|     62|	return 0;
  795|     73|}
x509v3.c:x509_parse_ext_subject_alt_name:
 1051|    292|{
 1052|    292|	struct asn1_hdr hdr;
 1053|       |
 1054|       |	/* SubjectAltName ::= GeneralNames */
 1055|       |
 1056|    292|	if (asn1_get_next(pos, len, &hdr) < 0 || !asn1_is_sequence(&hdr)) {
  ------------------
  |  Branch (1056:6): [True: 2, False: 290]
  |  Branch (1056:43): [True: 7, False: 283]
  ------------------
 1057|      9|		asn1_unexpected(&hdr,
 1058|      9|				"X509: Expected SEQUENCE in SubjectAltName");
 1059|      9|		return -1;
 1060|      9|	}
 1061|       |
 1062|    283|	wpa_printf(MSG_DEBUG, "X509: SubjectAltName");
 1063|    283|	cert->extensions_present |= X509_EXT_SUBJECT_ALT_NAME;
  ------------------
  |  |   74|    283|#define X509_EXT_SUBJECT_ALT_NAME		(1 << 3)
  ------------------
 1064|       |
 1065|    283|	if (hdr.length == 0)
  ------------------
  |  Branch (1065:6): [True: 27, False: 256]
  ------------------
 1066|     27|		return 0;
 1067|       |
 1068|    256|	return x509_parse_ext_alt_name(&cert->subject, hdr.payload,
 1069|    256|				       hdr.length);
 1070|    283|}
x509v3.c:x509_parse_ext_alt_name:
  973|    314|{
  974|    314|	struct asn1_hdr hdr;
  975|    314|	const u8 *p, *end;
  976|       |
  977|       |	/*
  978|       |	 * GeneralNames ::= SEQUENCE SIZE (1..MAX) OF GeneralName
  979|       |	 *
  980|       |	 * GeneralName ::= CHOICE {
  981|       |	 *     otherName                       [0]     OtherName,
  982|       |	 *     rfc822Name                      [1]     IA5String,
  983|       |	 *     dNSName                         [2]     IA5String,
  984|       |	 *     x400Address                     [3]     ORAddress,
  985|       |	 *     directoryName                   [4]     Name,
  986|       |	 *     ediPartyName                    [5]     EDIPartyName,
  987|       |	 *     uniformResourceIdentifier       [6]     IA5String,
  988|       |	 *     iPAddress                       [7]     OCTET STRING,
  989|       |	 *     registeredID                    [8]     OBJECT IDENTIFIER }
  990|       |	 *
  991|       |	 * OtherName ::= SEQUENCE {
  992|       |	 *     type-id    OBJECT IDENTIFIER,
  993|       |	 *     value      [0] EXPLICIT ANY DEFINED BY type-id }
  994|       |	 *
  995|       |	 * EDIPartyName ::= SEQUENCE {
  996|       |	 *     nameAssigner            [0]     DirectoryString OPTIONAL,
  997|       |	 *     partyName               [1]     DirectoryString }
  998|       |	 */
  999|       |
 1000|  1.11k|	for (p = pos, end = pos + len; p < end; p = hdr.payload + hdr.length) {
  ------------------
  |  Branch (1000:33): [True: 844, False: 272]
  ------------------
 1001|    844|		int res;
 1002|       |
 1003|    844|		if (asn1_get_next(p, end - p, &hdr) < 0) {
  ------------------
  |  Branch (1003:7): [True: 18, False: 826]
  ------------------
 1004|     18|			wpa_printf(MSG_DEBUG, "X509: Failed to parse "
 1005|     18|				   "SubjectAltName item");
 1006|     18|			return -1;
 1007|     18|		}
 1008|       |
 1009|    826|		if (hdr.class != ASN1_CLASS_CONTEXT_SPECIFIC)
  ------------------
  |  |   45|    826|#define ASN1_CLASS_CONTEXT_SPECIFIC	2
  ------------------
  |  Branch (1009:7): [True: 213, False: 613]
  ------------------
 1010|    213|			continue;
 1011|       |
 1012|    613|		switch (hdr.tag) {
 1013|     44|		case 1:
  ------------------
  |  Branch (1013:3): [True: 44, False: 569]
  ------------------
 1014|     44|			res = x509_parse_alt_name_rfc8222(name, hdr.payload,
 1015|     44|							  hdr.length);
 1016|     44|			break;
 1017|    198|		case 2:
  ------------------
  |  Branch (1017:3): [True: 198, False: 415]
  ------------------
 1018|    198|			res = x509_parse_alt_name_dns(name, hdr.payload,
 1019|    198|						      hdr.length);
 1020|    198|			break;
 1021|     39|		case 6:
  ------------------
  |  Branch (1021:3): [True: 39, False: 574]
  ------------------
 1022|     39|			res = x509_parse_alt_name_uri(name, hdr.payload,
 1023|     39|						      hdr.length);
 1024|     39|			break;
 1025|     43|		case 7:
  ------------------
  |  Branch (1025:3): [True: 43, False: 570]
  ------------------
 1026|     43|			res = x509_parse_alt_name_ip(name, hdr.payload,
 1027|     43|						     hdr.length);
 1028|     43|			break;
 1029|    197|		case 8:
  ------------------
  |  Branch (1029:3): [True: 197, False: 416]
  ------------------
 1030|    197|			res = x509_parse_alt_name_rid(name, hdr.payload,
 1031|    197|						      hdr.length);
 1032|    197|			break;
 1033|     48|		case 0: /* TODO: otherName */
  ------------------
  |  Branch (1033:3): [True: 48, False: 565]
  ------------------
 1034|     48|		case 3: /* TODO: x500Address */
  ------------------
  |  Branch (1034:3): [True: 0, False: 613]
  ------------------
 1035|     48|		case 4: /* TODO: directoryName */
  ------------------
  |  Branch (1035:3): [True: 0, False: 613]
  ------------------
 1036|     51|		case 5: /* TODO: ediPartyName */
  ------------------
  |  Branch (1036:3): [True: 3, False: 610]
  ------------------
 1037|     92|		default:
  ------------------
  |  Branch (1037:3): [True: 41, False: 572]
  ------------------
 1038|     92|			res = 0;
 1039|     92|			break;
 1040|    613|		}
 1041|    613|		if (res < 0)
  ------------------
  |  Branch (1041:7): [True: 24, False: 589]
  ------------------
 1042|     24|			return res;
 1043|    613|	}
 1044|       |
 1045|    272|	return 0;
 1046|    314|}
x509v3.c:x509_parse_alt_name_rfc8222:
  875|     44|{
  876|       |	/* rfc822Name IA5String */
  877|     44|	wpa_hexdump_ascii(MSG_MSGDUMP, "X509: altName - rfc822Name", pos, len);
  878|     44|	os_free(name->alt_email);
  ------------------
  |  |  511|     44|#define os_free(p) free((p))
  ------------------
  879|     44|	name->alt_email = os_zalloc(len + 1);
  880|     44|	if (name->alt_email == NULL)
  ------------------
  |  Branch (880:6): [True: 0, False: 44]
  ------------------
  881|      0|		return -1;
  882|     44|	os_memcpy(name->alt_email, pos, len);
  ------------------
  |  |  523|     44|#define os_memcpy(d, s, n) memcpy((d), (s), (n))
  ------------------
  883|     44|	if (os_strlen(name->alt_email) != len) {
  ------------------
  |  |  536|     44|#define os_strlen(s) strlen(s)
  ------------------
  |  Branch (883:6): [True: 6, False: 38]
  ------------------
  884|      6|		wpa_printf(MSG_INFO, "X509: Reject certificate with "
  885|      6|			   "embedded NUL byte in rfc822Name (%s[NUL])",
  886|      6|			   name->alt_email);
  887|      6|		os_free(name->alt_email);
  ------------------
  |  |  511|      6|#define os_free(p) free((p))
  ------------------
  888|      6|		name->alt_email = NULL;
  889|      6|		return -1;
  890|      6|	}
  891|     38|	return 0;
  892|     44|}
x509v3.c:x509_parse_alt_name_dns:
  897|    198|{
  898|       |	/* dNSName IA5String */
  899|    198|	wpa_hexdump_ascii(MSG_MSGDUMP, "X509: altName - dNSName", pos, len);
  900|    198|	os_free(name->dns);
  ------------------
  |  |  511|    198|#define os_free(p) free((p))
  ------------------
  901|    198|	name->dns = os_zalloc(len + 1);
  902|    198|	if (name->dns == NULL)
  ------------------
  |  Branch (902:6): [True: 0, False: 198]
  ------------------
  903|      0|		return -1;
  904|    198|	os_memcpy(name->dns, pos, len);
  ------------------
  |  |  523|    198|#define os_memcpy(d, s, n) memcpy((d), (s), (n))
  ------------------
  905|    198|	if (os_strlen(name->dns) != len) {
  ------------------
  |  |  536|    198|#define os_strlen(s) strlen(s)
  ------------------
  |  Branch (905:6): [True: 1, False: 197]
  ------------------
  906|      1|		wpa_printf(MSG_INFO, "X509: Reject certificate with "
  907|      1|			   "embedded NUL byte in dNSName (%s[NUL])",
  908|      1|			   name->dns);
  909|      1|		os_free(name->dns);
  ------------------
  |  |  511|      1|#define os_free(p) free((p))
  ------------------
  910|      1|		name->dns = NULL;
  911|      1|		return -1;
  912|      1|	}
  913|    197|	return 0;
  914|    198|}
x509v3.c:x509_parse_alt_name_uri:
  919|     39|{
  920|       |	/* uniformResourceIdentifier IA5String */
  921|     39|	wpa_hexdump_ascii(MSG_MSGDUMP,
  922|     39|			  "X509: altName - uniformResourceIdentifier",
  923|     39|			  pos, len);
  924|     39|	os_free(name->uri);
  ------------------
  |  |  511|     39|#define os_free(p) free((p))
  ------------------
  925|     39|	name->uri = os_zalloc(len + 1);
  926|     39|	if (name->uri == NULL)
  ------------------
  |  Branch (926:6): [True: 0, False: 39]
  ------------------
  927|      0|		return -1;
  928|     39|	os_memcpy(name->uri, pos, len);
  ------------------
  |  |  523|     39|#define os_memcpy(d, s, n) memcpy((d), (s), (n))
  ------------------
  929|     39|	if (os_strlen(name->uri) != len) {
  ------------------
  |  |  536|     39|#define os_strlen(s) strlen(s)
  ------------------
  |  Branch (929:6): [True: 1, False: 38]
  ------------------
  930|      1|		wpa_printf(MSG_INFO, "X509: Reject certificate with "
  931|      1|			   "embedded NUL byte in uniformResourceIdentifier "
  932|      1|			   "(%s[NUL])", name->uri);
  933|      1|		os_free(name->uri);
  ------------------
  |  |  511|      1|#define os_free(p) free((p))
  ------------------
  934|      1|		name->uri = NULL;
  935|      1|		return -1;
  936|      1|	}
  937|     38|	return 0;
  938|     39|}
x509v3.c:x509_parse_alt_name_ip:
  943|     43|{
  944|       |	/* iPAddress OCTET STRING */
  945|     43|	wpa_hexdump(MSG_MSGDUMP, "X509: altName - iPAddress", pos, len);
  946|     43|	os_free(name->ip);
  ------------------
  |  |  511|     43|#define os_free(p) free((p))
  ------------------
  947|     43|	name->ip = os_memdup(pos, len);
  948|     43|	if (name->ip == NULL)
  ------------------
  |  Branch (948:6): [True: 0, False: 43]
  ------------------
  949|      0|		return -1;
  950|     43|	name->ip_len = len;
  951|     43|	return 0;
  952|     43|}
x509v3.c:x509_parse_alt_name_rid:
  957|    197|{
  958|    197|	char buf[80];
  959|       |
  960|       |	/* registeredID OBJECT IDENTIFIER */
  961|    197|	if (asn1_parse_oid(pos, len, &name->rid) < 0)
  ------------------
  |  Branch (961:6): [True: 16, False: 181]
  ------------------
  962|     16|		return -1;
  963|       |
  964|    181|	asn1_oid_to_str(&name->rid, buf, sizeof(buf));
  965|    181|	wpa_printf(MSG_MSGDUMP, "X509: altName - registeredID: %s", buf);
  966|       |
  967|    181|	return 0;
  968|    197|}
x509v3.c:x509_parse_ext_issuer_alt_name:
 1075|    116|{
 1076|    116|	struct asn1_hdr hdr;
 1077|       |
 1078|       |	/* IssuerAltName ::= GeneralNames */
 1079|       |
 1080|    116|	if (asn1_get_next(pos, len, &hdr) < 0 || !asn1_is_sequence(&hdr)) {
  ------------------
  |  Branch (1080:6): [True: 1, False: 115]
  |  Branch (1080:43): [True: 7, False: 108]
  ------------------
 1081|      8|		asn1_unexpected(&hdr,
 1082|      8|				"X509: Expected SEQUENCE in IssuerAltName");
 1083|      8|		return -1;
 1084|      8|	}
 1085|       |
 1086|    108|	wpa_printf(MSG_DEBUG, "X509: IssuerAltName");
 1087|    108|	cert->extensions_present |= X509_EXT_ISSUER_ALT_NAME;
  ------------------
  |  |   75|    108|#define X509_EXT_ISSUER_ALT_NAME		(1 << 4)
  ------------------
 1088|       |
 1089|    108|	if (hdr.length == 0)
  ------------------
  |  Branch (1089:6): [True: 50, False: 58]
  ------------------
 1090|     50|		return 0;
 1091|       |
 1092|     58|	return x509_parse_ext_alt_name(&cert->issuer, hdr.payload,
 1093|     58|				       hdr.length);
 1094|    108|}
x509v3.c:x509_parse_ext_basic_constraints:
  800|    426|{
  801|    426|	struct asn1_hdr hdr;
  802|    426|	unsigned long value;
  803|    426|	size_t left;
  804|    426|	const u8 *end_seq;
  805|       |
  806|       |	/*
  807|       |	 * BasicConstraints ::= SEQUENCE {
  808|       |	 * cA                      BOOLEAN DEFAULT FALSE,
  809|       |	 * pathLenConstraint       INTEGER (0..MAX) OPTIONAL }
  810|       |	 */
  811|       |
  812|    426|	if (asn1_get_next(pos, len, &hdr) < 0 || !asn1_is_sequence(&hdr)) {
  ------------------
  |  Branch (812:6): [True: 3, False: 423]
  |  Branch (812:43): [True: 13, False: 410]
  ------------------
  813|     16|		asn1_unexpected(&hdr,
  814|     16|				"X509: Expected SEQUENCE in BasicConstraints");
  815|     16|		return -1;
  816|     16|	}
  817|       |
  818|    410|	cert->extensions_present |= X509_EXT_BASIC_CONSTRAINTS;
  ------------------
  |  |   71|    410|#define X509_EXT_BASIC_CONSTRAINTS		(1 << 0)
  ------------------
  819|       |
  820|    410|	if (hdr.length == 0)
  ------------------
  |  Branch (820:6): [True: 214, False: 196]
  ------------------
  821|    214|		return 0;
  822|       |
  823|    196|	end_seq = hdr.payload + hdr.length;
  824|    196|	if (asn1_get_next(hdr.payload, hdr.length, &hdr) < 0) {
  ------------------
  |  Branch (824:6): [True: 1, False: 195]
  ------------------
  825|      1|		wpa_printf(MSG_DEBUG, "X509: Failed to parse "
  826|      1|			   "BasicConstraints");
  827|      1|		return -1;
  828|      1|	}
  829|       |
  830|    195|	if (asn1_is_boolean(&hdr)) {
  ------------------
  |  Branch (830:6): [True: 165, False: 30]
  ------------------
  831|    165|		cert->ca = hdr.payload[0];
  832|       |
  833|    165|		pos = hdr.payload + hdr.length;
  834|    165|		if (pos >= end_seq) {
  ------------------
  |  Branch (834:7): [True: 152, False: 13]
  ------------------
  835|       |			/* No optional pathLenConstraint */
  836|    152|			wpa_printf(MSG_DEBUG, "X509: BasicConstraints - cA=%d",
  837|    152|				   cert->ca);
  838|    152|			return 0;
  839|    152|		}
  840|     13|		if (asn1_get_next(pos, end_seq - pos, &hdr) < 0) {
  ------------------
  |  Branch (840:7): [True: 1, False: 12]
  ------------------
  841|      1|			wpa_printf(MSG_DEBUG, "X509: Failed to parse "
  842|      1|				   "BasicConstraints");
  843|      1|			return -1;
  844|      1|		}
  845|     13|	}
  846|       |
  847|     42|	if (!asn1_is_integer(&hdr)) {
  ------------------
  |  Branch (847:6): [True: 4, False: 38]
  ------------------
  848|      4|		asn1_unexpected(&hdr,
  849|      4|				"X509: Expected INTEGER in BasicConstraints");
  850|      4|		return -1;
  851|      4|	}
  852|       |
  853|     38|	pos = hdr.payload;
  854|     38|	left = hdr.length;
  855|     38|	value = 0;
  856|     87|	while (left) {
  ------------------
  |  Branch (856:9): [True: 49, False: 38]
  ------------------
  857|     49|		value <<= 8;
  858|     49|		value |= *pos++;
  859|     49|		left--;
  860|     49|	}
  861|       |
  862|     38|	cert->path_len_constraint = value;
  863|     38|	cert->extensions_present |= X509_EXT_PATH_LEN_CONSTRAINT;
  ------------------
  |  |   72|     38|#define X509_EXT_PATH_LEN_CONSTRAINT		(1 << 1)
  ------------------
  864|       |
  865|     38|	wpa_printf(MSG_DEBUG, "X509: BasicConstraints - cA=%d "
  866|     38|		   "pathLenConstraint=%lu",
  867|     38|		   cert->ca, cert->path_len_constraint);
  868|       |
  869|     38|	return 0;
  870|     42|}
x509v3.c:x509_parse_ext_certificate_policies:
 1148|    400|{
 1149|    400|	struct asn1_hdr hdr;
 1150|    400|	const u8 *end;
 1151|       |
 1152|       |	/*
 1153|       |	 * certificatePolicies ::= SEQUENCE SIZE (1..MAX) OF PolicyInformation
 1154|       |	 *
 1155|       |	 * PolicyInformation ::= SEQUENCE {
 1156|       |	 *      policyIdentifier   CertPolicyId,
 1157|       |	 *      policyQualifiers   SEQUENCE SIZE (1..MAX) OF
 1158|       |	 *                              PolicyQualifierInfo OPTIONAL }
 1159|       |	 *
 1160|       |	 * CertPolicyId ::= OBJECT IDENTIFIER
 1161|       |	 */
 1162|       |
 1163|    400|	if (asn1_get_next(pos, len, &hdr) < 0 || !asn1_is_sequence(&hdr)) {
  ------------------
  |  Branch (1163:6): [True: 2, False: 398]
  |  Branch (1163:43): [True: 9, False: 389]
  ------------------
 1164|     11|		asn1_unexpected(&hdr,
 1165|     11|				"X509: Expected SEQUENCE (certificatePolicies)");
 1166|     11|		return -1;
 1167|     11|	}
 1168|    389|	if (hdr.length > pos + len - hdr.payload)
  ------------------
  |  Branch (1168:6): [True: 0, False: 389]
  ------------------
 1169|      0|		return -1;
 1170|    389|	pos = hdr.payload;
 1171|    389|	end = pos + hdr.length;
 1172|       |
 1173|    389|	wpa_hexdump(MSG_MSGDUMP, "X509: certificatePolicies", pos, end - pos);
 1174|       |
 1175|    852|	while (pos < end) {
  ------------------
  |  Branch (1175:9): [True: 516, False: 336]
  ------------------
 1176|    516|		const u8 *pol_end;
 1177|    516|		struct asn1_oid oid;
 1178|    516|		char buf[80];
 1179|       |
 1180|    516|		if (asn1_get_next(pos, end - pos, &hdr) < 0 ||
  ------------------
  |  Branch (1180:7): [True: 30, False: 486]
  ------------------
 1181|    486|		    !asn1_is_sequence(&hdr)) {
  ------------------
  |  Branch (1181:7): [True: 20, False: 466]
  ------------------
 1182|     50|			asn1_unexpected(&hdr,
 1183|     50|					"X509: Expected SEQUENCE (PolicyInformation)");
 1184|     50|			return -1;
 1185|     50|		}
 1186|    466|		if (hdr.length > end - hdr.payload)
  ------------------
  |  Branch (1186:7): [True: 0, False: 466]
  ------------------
 1187|      0|			return -1;
 1188|    466|		pos = hdr.payload;
 1189|    466|		pol_end = pos + hdr.length;
 1190|    466|		wpa_hexdump(MSG_MSGDUMP, "X509: PolicyInformation",
 1191|    466|			    pos, pol_end - pos);
 1192|       |
 1193|    466|		if (asn1_get_oid(pos, pol_end - pos, &oid, &pos))
  ------------------
  |  Branch (1193:7): [True: 3, False: 463]
  ------------------
 1194|      3|			return -1;
 1195|    463|		if (x509_id_cert_policy_any_oid(&oid)) {
  ------------------
  |  Branch (1195:7): [True: 12, False: 451]
  ------------------
 1196|     12|			os_strlcpy(buf, "anyPolicy-STRICT", sizeof(buf));
 1197|     12|			cert->certificate_policy |=
 1198|     12|				X509_EXT_CERT_POLICY_ANY;
  ------------------
  |  |  104|     12|#define X509_EXT_CERT_POLICY_ANY		(1 << 0)
  ------------------
 1199|    451|		} else if (x509_id_wfa_tod_strict_oid(&oid)) {
  ------------------
  |  Branch (1199:14): [True: 11, False: 440]
  ------------------
 1200|     11|			os_strlcpy(buf, "TOD-STRICT", sizeof(buf));
 1201|     11|			cert->certificate_policy |=
 1202|     11|				X509_EXT_CERT_POLICY_TOD_STRICT;
  ------------------
  |  |  105|     11|#define X509_EXT_CERT_POLICY_TOD_STRICT		(1 << 1)
  ------------------
 1203|    440|		} else if (x509_id_wfa_tod_tofu_oid(&oid)) {
  ------------------
  |  Branch (1203:14): [True: 14, False: 426]
  ------------------
 1204|     14|			os_strlcpy(buf, "TOD-TOFU", sizeof(buf));
 1205|     14|			cert->certificate_policy |=
 1206|     14|				X509_EXT_CERT_POLICY_TOD_TOFU;
  ------------------
  |  |  106|     14|#define X509_EXT_CERT_POLICY_TOD_TOFU		(1 << 2)
  ------------------
 1207|    426|		} else {
 1208|    426|			asn1_oid_to_str(&oid, buf, sizeof(buf));
 1209|    426|		}
 1210|    463|		wpa_printf(MSG_DEBUG, "policyIdentifier: %s", buf);
 1211|       |
 1212|    463|		pos = pol_end;
 1213|    463|	}
 1214|       |
 1215|    336|	cert->extensions_present |= X509_EXT_CERTIFICATE_POLICY;
  ------------------
  |  |   77|    336|#define X509_EXT_CERTIFICATE_POLICY		(1 << 6)
  ------------------
 1216|       |
 1217|    336|	return 0;
 1218|    389|}
x509v3.c:x509_id_cert_policy_any_oid:
 1098|    463|{
 1099|    463|	return oid->len == 5 &&
  ------------------
  |  Branch (1099:9): [True: 174, False: 289]
  ------------------
 1100|    174|		oid->oid[0] == 2 /* iso/itu-t */ &&
  ------------------
  |  Branch (1100:3): [True: 133, False: 41]
  ------------------
 1101|    133|		oid->oid[1] == 5 /* X.500 Directory Services */ &&
  ------------------
  |  Branch (1101:3): [True: 81, False: 52]
  ------------------
 1102|     81|		oid->oid[2] == 29 /* id-ce */ &&
  ------------------
  |  Branch (1102:3): [True: 47, False: 34]
  ------------------
 1103|     47|		oid->oid[3] == 32 /* id-ce-certificate-policies */ &&
  ------------------
  |  Branch (1103:3): [True: 25, False: 22]
  ------------------
 1104|     25|		oid->oid[4] == 0 /* anyPolicy */;
  ------------------
  |  Branch (1104:3): [True: 12, False: 13]
  ------------------
 1105|    463|}
x509v3.c:x509_id_wfa_tod_strict_oid:
 1131|    451|{
 1132|    451|	return oid->len == 10 &&
  ------------------
  |  Branch (1132:9): [True: 259, False: 192]
  ------------------
 1133|    259|		x509_id_wfa_tod_oid(oid) &&
  ------------------
  |  Branch (1133:3): [True: 35, False: 224]
  ------------------
 1134|     35|		oid->oid[9] == 1;
  ------------------
  |  Branch (1134:3): [True: 11, False: 24]
  ------------------
 1135|    451|}
x509v3.c:x509_id_wfa_tod_oid:
 1122|    507|{
 1123|    507|	return oid->len >= 9 &&
  ------------------
  |  Branch (1123:9): [True: 507, False: 0]
  ------------------
 1124|    507|		x509_id_wfa_oid(oid) &&
  ------------------
  |  Branch (1124:3): [True: 113, False: 394]
  ------------------
 1125|    113|		oid->oid[7] == 1 &&
  ------------------
  |  Branch (1125:3): [True: 67, False: 46]
  ------------------
 1126|     67|		oid->oid[8] == 3;
  ------------------
  |  Branch (1126:3): [True: 59, False: 8]
  ------------------
 1127|    507|}
x509v3.c:x509_id_wfa_oid:
 1109|    507|{
 1110|    507|	return oid->len >= 7 &&
  ------------------
  |  Branch (1110:9): [True: 507, False: 0]
  ------------------
 1111|    507|		oid->oid[0] == 1 /* iso */ &&
  ------------------
  |  Branch (1111:3): [True: 421, False: 86]
  ------------------
 1112|    421|		oid->oid[1] == 3 /* identified-organization */ &&
  ------------------
  |  Branch (1112:3): [True: 347, False: 74]
  ------------------
 1113|    347|		oid->oid[2] == 6 /* dod */ &&
  ------------------
  |  Branch (1113:3): [True: 295, False: 52]
  ------------------
 1114|    295|		oid->oid[3] == 1 /* internet */ &&
  ------------------
  |  Branch (1114:3): [True: 245, False: 50]
  ------------------
 1115|    245|		oid->oid[4] == 4 /* private */ &&
  ------------------
  |  Branch (1115:3): [True: 197, False: 48]
  ------------------
 1116|    197|		oid->oid[5] == 1 /* enterprise */ &&
  ------------------
  |  Branch (1116:3): [True: 151, False: 46]
  ------------------
 1117|    151|		oid->oid[6] == 40808 /* WFA */;
  ------------------
  |  Branch (1117:3): [True: 113, False: 38]
  ------------------
 1118|    507|}
x509v3.c:x509_id_wfa_tod_tofu_oid:
 1139|    440|{
 1140|    440|	return oid->len == 10 &&
  ------------------
  |  Branch (1140:9): [True: 248, False: 192]
  ------------------
 1141|    248|		x509_id_wfa_tod_oid(oid) &&
  ------------------
  |  Branch (1141:3): [True: 24, False: 224]
  ------------------
 1142|     24|		oid->oid[9] == 2;
  ------------------
  |  Branch (1142:3): [True: 14, False: 10]
  ------------------
 1143|    440|}
x509v3.c:x509_parse_ext_ext_key_usage:
 1272|    381|{
 1273|    381|	struct asn1_hdr hdr;
 1274|    381|	const u8 *end;
 1275|    381|	struct asn1_oid oid;
 1276|       |
 1277|       |	/*
 1278|       |	 * ExtKeyUsageSyntax ::= SEQUENCE SIZE (1..MAX) OF KeyPurposeId
 1279|       |	 *
 1280|       |	 * KeyPurposeId ::= OBJECT IDENTIFIER
 1281|       |	 */
 1282|       |
 1283|    381|	if (asn1_get_next(pos, len, &hdr) < 0 || !asn1_is_sequence(&hdr)) {
  ------------------
  |  Branch (1283:6): [True: 4, False: 377]
  |  Branch (1283:43): [True: 10, False: 367]
  ------------------
 1284|     14|		asn1_unexpected(&hdr,
 1285|     14|				"X509: Expected SEQUENCE (ExtKeyUsageSyntax)");
 1286|     14|		return -1;
 1287|     14|	}
 1288|    367|	if (hdr.length > pos + len - hdr.payload)
  ------------------
  |  Branch (1288:6): [True: 0, False: 367]
  ------------------
 1289|      0|		return -1;
 1290|    367|	pos = hdr.payload;
 1291|    367|	end = pos + hdr.length;
 1292|       |
 1293|    367|	wpa_hexdump(MSG_MSGDUMP, "X509: ExtKeyUsageSyntax", pos, end - pos);
 1294|       |
 1295|  1.09k|	while (pos < end) {
  ------------------
  |  Branch (1295:9): [True: 803, False: 288]
  ------------------
 1296|    803|		char buf[80];
 1297|       |
 1298|    803|		if (asn1_get_oid(pos, end - pos, &oid, &pos))
  ------------------
  |  Branch (1298:7): [True: 79, False: 724]
  ------------------
 1299|     79|			return -1;
 1300|    724|		if (x509_any_ext_key_usage_oid(&oid)) {
  ------------------
  |  Branch (1300:7): [True: 10, False: 714]
  ------------------
 1301|     10|			os_strlcpy(buf, "anyExtendedKeyUsage", sizeof(buf));
 1302|     10|			cert->ext_key_usage |= X509_EXT_KEY_USAGE_ANY;
  ------------------
  |  |   97|     10|#define X509_EXT_KEY_USAGE_ANY			(1 << 0)
  ------------------
 1303|    714|		} else if (x509_id_kp_server_auth_oid(&oid)) {
  ------------------
  |  Branch (1303:14): [True: 158, False: 556]
  ------------------
 1304|    158|			os_strlcpy(buf, "id-kp-serverAuth", sizeof(buf));
 1305|    158|			cert->ext_key_usage |= X509_EXT_KEY_USAGE_SERVER_AUTH;
  ------------------
  |  |   98|    158|#define X509_EXT_KEY_USAGE_SERVER_AUTH		(1 << 1)
  ------------------
 1306|    556|		} else if (x509_id_kp_client_auth_oid(&oid)) {
  ------------------
  |  Branch (1306:14): [True: 11, False: 545]
  ------------------
 1307|     11|			os_strlcpy(buf, "id-kp-clientAuth", sizeof(buf));
 1308|     11|			cert->ext_key_usage |= X509_EXT_KEY_USAGE_CLIENT_AUTH;
  ------------------
  |  |   99|     11|#define X509_EXT_KEY_USAGE_CLIENT_AUTH		(1 << 2)
  ------------------
 1309|    545|		} else if (x509_id_kp_ocsp_oid(&oid)) {
  ------------------
  |  Branch (1309:14): [True: 13, False: 532]
  ------------------
 1310|     13|			os_strlcpy(buf, "id-kp-OCSPSigning", sizeof(buf));
 1311|     13|			cert->ext_key_usage |= X509_EXT_KEY_USAGE_OCSP;
  ------------------
  |  |  100|     13|#define X509_EXT_KEY_USAGE_OCSP			(1 << 3)
  ------------------
 1312|    532|		} else {
 1313|    532|			asn1_oid_to_str(&oid, buf, sizeof(buf));
 1314|    532|		}
 1315|    724|		wpa_printf(MSG_DEBUG, "ExtKeyUsage KeyPurposeId: %s", buf);
 1316|    724|	}
 1317|       |
 1318|    288|	cert->extensions_present |= X509_EXT_EXT_KEY_USAGE;
  ------------------
  |  |   76|    288|#define X509_EXT_EXT_KEY_USAGE			(1 << 5)
  ------------------
 1319|       |
 1320|    288|	return 0;
 1321|    367|}
x509v3.c:x509_any_ext_key_usage_oid:
  757|    724|{
  758|    724|	return oid->len == 6 &&
  ------------------
  |  Branch (758:9): [True: 229, False: 495]
  ------------------
  759|    229|		x509_id_ce_oid(oid) &&
  ------------------
  |  Branch (759:3): [True: 46, False: 183]
  ------------------
  760|     46|		oid->oid[3] == 37 /* extKeyUsage */ &&
  ------------------
  |  Branch (760:3): [True: 21, False: 25]
  ------------------
  761|     21|		oid->oid[4] == 0 /* anyExtendedKeyUsage */;
  ------------------
  |  Branch (761:3): [True: 10, False: 11]
  ------------------
  762|    724|}
x509v3.c:x509_id_kp_server_auth_oid:
 1244|    714|{
 1245|       |	/* id-kp */
 1246|    714|	return oid->len == 9 &&
  ------------------
  |  Branch (1246:9): [True: 396, False: 318]
  ------------------
 1247|    396|		x509_id_kp_oid(oid) &&
  ------------------
  |  Branch (1247:3): [True: 203, False: 193]
  ------------------
 1248|    203|		oid->oid[8] == 1 /* id-kp-serverAuth */;
  ------------------
  |  Branch (1248:3): [True: 158, False: 45]
  ------------------
 1249|    714|}
x509v3.c:x509_id_kp_oid:
 1235|    861|{
 1236|       |	/* id-kp */
 1237|    861|	return oid->len >= 8 &&
  ------------------
  |  Branch (1237:9): [True: 861, False: 0]
  ------------------
 1238|    861|		x509_id_pkix_oid(oid) &&
  ------------------
  |  Branch (1238:3): [True: 339, False: 522]
  ------------------
 1239|    339|		oid->oid[7] == 3 /* id-kp */;
  ------------------
  |  Branch (1239:3): [True: 282, False: 57]
  ------------------
 1240|    861|}
x509v3.c:x509_id_pkix_oid:
 1222|    861|{
 1223|    861|	return oid->len >= 7 &&
  ------------------
  |  Branch (1223:9): [True: 861, False: 0]
  ------------------
 1224|    861|		oid->oid[0] == 1 /* iso */ &&
  ------------------
  |  Branch (1224:3): [True: 789, False: 72]
  ------------------
 1225|    789|		oid->oid[1] == 3 /* identified-organization */ &&
  ------------------
  |  Branch (1225:3): [True: 720, False: 69]
  ------------------
 1226|    720|		oid->oid[2] == 6 /* dod */ &&
  ------------------
  |  Branch (1226:3): [True: 594, False: 126]
  ------------------
 1227|    594|		oid->oid[3] == 1 /* internet */ &&
  ------------------
  |  Branch (1227:3): [True: 519, False: 75]
  ------------------
 1228|    519|		oid->oid[4] == 5 /* security */ &&
  ------------------
  |  Branch (1228:3): [True: 447, False: 72]
  ------------------
 1229|    447|		oid->oid[5] == 5 /* mechanisms */ &&
  ------------------
  |  Branch (1229:3): [True: 390, False: 57]
  ------------------
 1230|    390|		oid->oid[6] == 7 /* id-pkix */;
  ------------------
  |  Branch (1230:3): [True: 339, False: 51]
  ------------------
 1231|    861|}
x509v3.c:x509_id_kp_client_auth_oid:
 1253|    556|{
 1254|       |	/* id-kp */
 1255|    556|	return oid->len == 9 &&
  ------------------
  |  Branch (1255:9): [True: 238, False: 318]
  ------------------
 1256|    238|		x509_id_kp_oid(oid) &&
  ------------------
  |  Branch (1256:3): [True: 45, False: 193]
  ------------------
 1257|     45|		oid->oid[8] == 2 /* id-kp-clientAuth */;
  ------------------
  |  Branch (1257:3): [True: 11, False: 34]
  ------------------
 1258|    556|}
x509v3.c:x509_id_kp_ocsp_oid:
 1262|    545|{
 1263|       |	/* id-kp */
 1264|    545|	return oid->len == 9 &&
  ------------------
  |  Branch (1264:9): [True: 227, False: 318]
  ------------------
 1265|    227|		x509_id_kp_oid(oid) &&
  ------------------
  |  Branch (1265:3): [True: 34, False: 193]
  ------------------
 1266|     34|		oid->oid[8] == 9 /* id-kp-OCSPSigning */;
  ------------------
  |  Branch (1266:3): [True: 13, False: 21]
  ------------------
 1267|    545|}

inc_byte_array:
  223|   119k|{
  224|   119k|	int pos = len - 1;
  225|   119k|	while (pos >= 0) {
  ------------------
  |  Branch (225:9): [True: 119k, False: 0]
  ------------------
  226|   119k|		counter[pos]++;
  227|   119k|		if (counter[pos] != 0)
  ------------------
  |  Branch (227:7): [True: 119k, False: 412]
  ------------------
  228|   119k|			break;
  229|    412|		pos--;
  230|    412|	}
  231|   119k|}
__hide_aliasing_typecast:
  637|  43.2k|{
  638|  43.2k|	return foo;
  639|  43.2k|}
dup_binstr:
  767|  3.79k|{
  768|  3.79k|	char *res;
  769|       |
  770|  3.79k|	if (src == NULL)
  ------------------
  |  Branch (770:6): [True: 0, False: 3.79k]
  ------------------
  771|      0|		return NULL;
  772|  3.79k|	res = os_malloc(len + 1);
  ------------------
  |  |  505|  3.79k|#define os_malloc(s) malloc((s))
  ------------------
  773|  3.79k|	if (res == NULL)
  ------------------
  |  Branch (773:6): [True: 0, False: 3.79k]
  ------------------
  774|      0|		return NULL;
  775|  3.79k|	os_memcpy(res, src, len);
  ------------------
  |  |  523|  3.79k|#define os_memcpy(d, s, n) memcpy((d), (s), (n))
  ------------------
  776|  3.79k|	res[len] = '\0';
  777|       |
  778|  3.79k|	return res;
  779|  3.79k|}
forced_memzero:
 1343|   140k|{
 1344|   140k|	memset_func(ptr, 0, len);
 1345|   140k|	if (len)
  ------------------
  |  Branch (1345:6): [True: 140k, False: 0]
  ------------------
 1346|   140k|		forced_memzero_val = ((u8 *) ptr)[0];
 1347|   140k|}

tls-client.c:WPA_GET_BE16:
  214|  64.5k|{
  215|  64.5k|	return (a[0] << 8) | a[1];
  216|  64.5k|}
tlsv1_client.c:WPA_PUT_BE16:
  219|    340|{
  220|    340|	a[0] = val >> 8;
  221|    340|	a[1] = val & 0xff;
  222|    340|}
tlsv1_client_read.c:WPA_GET_BE24:
  236|  11.9k|{
  237|  11.9k|	return (a[0] << 16) | (a[1] << 8) | a[2];
  238|  11.9k|}
tlsv1_client_read.c:WPA_GET_BE16:
  214|  6.93k|{
  215|  6.93k|	return (a[0] << 8) | a[1];
  216|  6.93k|}
tlsv1_client_write.c:WPA_PUT_BE32:
  265|  2.68k|{
  266|  2.68k|	a[0] = (val >> 24) & 0xff;
  267|  2.68k|	a[1] = (val >> 16) & 0xff;
  268|  2.68k|	a[2] = (val >> 8) & 0xff;
  269|  2.68k|	a[3] = val & 0xff;
  270|  2.68k|}
tlsv1_client_write.c:WPA_PUT_BE16:
  219|   142k|{
  220|   142k|	a[0] = val >> 8;
  221|   142k|	a[1] = val & 0xff;
  222|   142k|}
tlsv1_client_write.c:WPA_PUT_BE24:
  241|  3.60k|{
  242|  3.60k|	a[0] = (val >> 16) & 0xff;
  243|  3.60k|	a[1] = (val >> 8) & 0xff;
  244|  3.60k|	a[2] = val & 0xff;
  245|  3.60k|}
tlsv1_common.c:WPA_GET_BE16:
  214|    351|{
  215|    351|	return (a[0] << 8) | a[1];
  216|    351|}
tlsv1_record.c:WPA_PUT_BE16:
  219|  23.1k|{
  220|  23.1k|	a[0] = val >> 8;
  221|  23.1k|	a[1] = val & 0xff;
  222|  23.1k|}
tlsv1_record.c:WPA_GET_BE16:
  214|   134k|{
  215|   134k|	return (a[0] << 8) | a[1];
  216|   134k|}
sha256-internal.c:WPA_GET_BE32:
  260|  1.37M|{
  261|  1.37M|	return ((u32) a[0] << 24) | (a[1] << 16) | (a[2] << 8) | a[3];
  262|  1.37M|}
sha256-internal.c:WPA_PUT_BE64:
  311|  12.4k|{
  312|  12.4k|	a[0] = val >> 56;
  313|  12.4k|	a[1] = val >> 48;
  314|  12.4k|	a[2] = val >> 40;
  315|  12.4k|	a[3] = val >> 32;
  316|  12.4k|	a[4] = val >> 24;
  317|  12.4k|	a[5] = val >> 16;
  318|  12.4k|	a[6] = val >> 8;
  319|  12.4k|	a[7] = val & 0xff;
  320|  12.4k|}
sha256-internal.c:WPA_PUT_BE32:
  265|  99.9k|{
  266|  99.9k|	a[0] = (val >> 24) & 0xff;
  267|  99.9k|	a[1] = (val >> 16) & 0xff;
  268|  99.9k|	a[2] = (val >> 8) & 0xff;
  269|  99.9k|	a[3] = val & 0xff;
  270|  99.9k|}
sha512-internal.c:WPA_GET_BE64:
  303|  7.72k|{
  304|  7.72k|	return (((u64) a[0]) << 56) | (((u64) a[1]) << 48) |
  305|  7.72k|		(((u64) a[2]) << 40) | (((u64) a[3]) << 32) |
  306|  7.72k|		(((u64) a[4]) << 24) | (((u64) a[5]) << 16) |
  307|  7.72k|		(((u64) a[6]) << 8) | ((u64) a[7]);
  308|  7.72k|}
sha512-internal.c:WPA_PUT_BE64:
  311|  1.01k|{
  312|  1.01k|	a[0] = val >> 56;
  313|  1.01k|	a[1] = val >> 48;
  314|  1.01k|	a[2] = val >> 40;
  315|  1.01k|	a[3] = val >> 32;
  316|  1.01k|	a[4] = val >> 24;
  317|  1.01k|	a[5] = val >> 16;
  318|  1.01k|	a[6] = val >> 8;
  319|  1.01k|	a[7] = val & 0xff;
  320|  1.01k|}
des-internal.c:WPA_GET_BE32:
  260|  39.9k|{
  261|  39.9k|	return ((u32) a[0] << 24) | (a[1] << 16) | (a[2] << 8) | a[3];
  262|  39.9k|}
des-internal.c:WPA_PUT_BE32:
  265|  39.9k|{
  266|  39.9k|	a[0] = (val >> 24) & 0xff;
  267|  39.9k|	a[1] = (val >> 16) & 0xff;
  268|  39.9k|	a[2] = (val >> 8) & 0xff;
  269|  39.9k|	a[3] = val & 0xff;
  270|  39.9k|}

x509v3.c:os_snprintf_error:
  580|  3.71k|{
  581|  3.71k|	return res < 0 || (unsigned int) res >= size;
  ------------------
  |  Branch (581:9): [True: 0, False: 3.71k]
  |  Branch (581:20): [True: 0, False: 3.71k]
  ------------------
  582|  3.71k|}
asn1.c:os_snprintf_error:
  580|  24.7k|{
  581|  24.7k|	return res < 0 || (unsigned int) res >= size;
  ------------------
  |  Branch (581:9): [True: 0, False: 24.7k]
  |  Branch (581:20): [True: 57, False: 24.6k]
  ------------------
  582|  24.7k|}
md5-internal.c:testing_test_fail:
  697|  12.0k|{
  698|  12.0k|	return 0;
  699|  12.0k|}
sha1-internal.c:testing_test_fail:
  697|  11.0k|{
  698|  11.0k|	return 0;
  699|  11.0k|}
sha256-internal.c:testing_test_fail:
  697|  5.86k|{
  698|  5.86k|	return 0;
  699|  5.86k|}
crypto_internal.c:testing_test_fail:
  697|  12.7k|{
  698|  12.7k|	return 0;
  699|  12.7k|}
aes-internal-enc.c:testing_test_fail:
  697|    333|{
  698|    333|	return 0;
  699|    333|}

os_get_time:
   66|  2.68k|{
   67|  2.68k|	int res;
   68|  2.68k|	struct timeval tv;
   69|       |	res = gettimeofday(&tv, NULL);
   70|  2.68k|	t->sec = tv.tv_sec;
   71|  2.68k|	t->usec = tv.tv_usec;
   72|  2.68k|	return res;
   73|  2.68k|}
os_mktime:
  136|  5.29k|{
  137|  5.29k|	struct tm tm, *tm1;
  138|  5.29k|	time_t t_local, t1, t2;
  139|  5.29k|	os_time_t tz_offset;
  140|       |
  141|  5.29k|	if (year < 1970 || month < 1 || month > 12 || day < 1 || day > 31 ||
  ------------------
  |  Branch (141:6): [True: 613, False: 4.68k]
  |  Branch (141:21): [True: 1, False: 4.68k]
  |  Branch (141:34): [True: 3, False: 4.67k]
  |  Branch (141:48): [True: 1, False: 4.67k]
  |  Branch (141:59): [True: 1, False: 4.67k]
  ------------------
  142|  4.67k|	    hour < 0 || hour > 23 || min < 0 || min > 59 || sec < 0 ||
  ------------------
  |  Branch (142:6): [True: 0, False: 4.67k]
  |  Branch (142:18): [True: 1, False: 4.67k]
  |  Branch (142:31): [True: 0, False: 4.67k]
  |  Branch (142:42): [True: 1, False: 4.67k]
  |  Branch (142:54): [True: 0, False: 4.67k]
  ------------------
  143|  4.67k|	    sec > 60)
  ------------------
  |  Branch (143:6): [True: 1, False: 4.67k]
  ------------------
  144|    622|		return -1;
  145|       |
  146|  4.67k|	memset(&tm, 0, sizeof(tm));
  147|  4.67k|	tm.tm_year = year - 1900;
  148|  4.67k|	tm.tm_mon = month - 1;
  149|  4.67k|	tm.tm_mday = day;
  150|  4.67k|	tm.tm_hour = hour;
  151|  4.67k|	tm.tm_min = min;
  152|  4.67k|	tm.tm_sec = sec;
  153|       |
  154|  4.67k|	t_local = mktime(&tm);
  155|       |
  156|       |	/* figure out offset to UTC */
  157|  4.67k|	tm1 = localtime(&t_local);
  158|  4.67k|	if (tm1) {
  ------------------
  |  Branch (158:6): [True: 4.67k, False: 0]
  ------------------
  159|  4.67k|		t1 = mktime(tm1);
  160|  4.67k|		tm1 = gmtime(&t_local);
  161|  4.67k|		if (tm1) {
  ------------------
  |  Branch (161:7): [True: 4.67k, False: 0]
  ------------------
  162|  4.67k|			t2 = mktime(tm1);
  163|  4.67k|			tz_offset = t2 - t1;
  164|  4.67k|		} else
  165|      0|			tz_offset = 0;
  166|  4.67k|	} else
  167|      0|		tz_offset = 0;
  168|       |
  169|  4.67k|	*t = (os_time_t) t_local - tz_offset;
  170|  4.67k|	return 0;
  171|  5.29k|}
os_get_random:
  258|  3.61k|{
  259|  3.61k|#ifdef TEST_FUZZ
  260|  3.61k|	size_t i;
  261|       |
  262|   129k|	for (i = 0; i < len; i++)
  ------------------
  |  Branch (262:14): [True: 126k, False: 3.61k]
  ------------------
  263|   126k|		buf[i] = i & 0xff;
  264|  3.61k|	return 0;
  265|       |#else /* TEST_FUZZ */
  266|       |	FILE *f;
  267|       |	size_t rc;
  268|       |
  269|       |	if (TEST_FAIL())
  270|       |		return -1;
  271|       |
  272|       |	f = fopen("/dev/urandom", "rb");
  273|       |	if (f == NULL) {
  274|       |		printf("Could not open /dev/urandom.\n");
  275|       |		return -1;
  276|       |	}
  277|       |
  278|       |	rc = fread(buf, 1, len, f);
  279|       |	fclose(f);
  280|       |
  281|       |	return rc != len ? -1 : 0;
  282|       |#endif /* TEST_FUZZ */
  283|  3.61k|}
os_zalloc:
  485|   199k|{
  486|   199k|	return calloc(1, size);
  487|   199k|}
os_strlcpy:
  492|    229|{
  493|    229|	const char *s = src;
  494|    229|	size_t left = siz;
  495|       |
  496|    229|	if (left) {
  ------------------
  |  Branch (496:6): [True: 229, False: 0]
  ------------------
  497|       |		/* Copy string up to the maximum size of the dest buffer */
  498|  3.75k|		while (--left != 0) {
  ------------------
  |  Branch (498:10): [True: 3.75k, False: 0]
  ------------------
  499|  3.75k|			if ((*dest++ = *s++) == '\0')
  ------------------
  |  Branch (499:8): [True: 229, False: 3.52k]
  ------------------
  500|    229|				break;
  501|  3.75k|		}
  502|    229|	}
  503|       |
  504|    229|	if (left == 0) {
  ------------------
  |  Branch (504:6): [True: 0, False: 229]
  ------------------
  505|       |		/* Not enough room for the string; force NUL-termination */
  506|      0|		if (siz != 0)
  ------------------
  |  Branch (506:7): [True: 0, False: 0]
  ------------------
  507|      0|			*dest = '\0';
  508|      0|		while (*s++)
  ------------------
  |  Branch (508:10): [True: 0, False: 0]
  ------------------
  509|      0|			; /* determine total src string length */
  510|      0|	}
  511|       |
  512|    229|	return s - src - 1;
  513|    229|}
os_memcmp_const:
  517|  11.2k|{
  518|  11.2k|	const u8 *aa = a;
  519|  11.2k|	const u8 *bb = b;
  520|  11.2k|	size_t i;
  521|  11.2k|	u8 res;
  522|       |
  523|   255k|	for (res = 0, i = 0; i < len; i++)
  ------------------
  |  Branch (523:23): [True: 243k, False: 11.2k]
  ------------------
  524|   243k|		res |= aa[i] ^ bb[i];
  525|       |
  526|  11.2k|	return res;
  527|  11.2k|}
os_memdup:
  531|  5.97k|{
  532|  5.97k|	void *r = os_malloc(len);
  ------------------
  |  |  505|  5.97k|#define os_malloc(s) malloc((s))
  ------------------
  533|       |
  534|  5.97k|	if (r && src)
  ------------------
  |  Branch (534:6): [True: 5.97k, False: 0]
  |  Branch (534:11): [True: 5.97k, False: 0]
  ------------------
  535|  5.97k|		os_memcpy(r, src, len);
  ------------------
  |  |  523|  5.97k|#define os_memcpy(d, s, n) memcpy((d), (s), (n))
  ------------------
  536|  5.97k|	return r;
  537|  5.97k|}

wpa_printf:
  224|   325k|{
  225|   325k|	va_list ap;
  226|       |
  227|   325k|	if (level >= wpa_debug_level) {
  ------------------
  |  Branch (227:6): [True: 0, False: 325k]
  ------------------
  228|       |#ifdef CONFIG_ANDROID_LOG
  229|       |		va_start(ap, fmt);
  230|       |		__android_log_vprint(wpa_to_android_level(level),
  231|       |				     ANDROID_LOG_NAME, fmt, ap);
  232|       |		va_end(ap);
  233|       |#else /* CONFIG_ANDROID_LOG */
  234|       |#ifdef CONFIG_DEBUG_SYSLOG
  235|       |		if (wpa_debug_syslog) {
  236|       |			va_start(ap, fmt);
  237|       |			vsyslog(syslog_priority(level), fmt, ap);
  238|       |			va_end(ap);
  239|       |		}
  240|       |#endif /* CONFIG_DEBUG_SYSLOG */
  241|      0|		wpa_debug_print_timestamp();
  242|      0|#ifdef CONFIG_DEBUG_FILE
  243|      0|		if (out_file) {
  ------------------
  |  Branch (243:7): [True: 0, False: 0]
  ------------------
  244|      0|			va_start(ap, fmt);
  245|      0|			vfprintf(out_file, fmt, ap);
  246|      0|			fprintf(out_file, "\n");
  247|      0|			va_end(ap);
  248|      0|		}
  249|      0|#endif /* CONFIG_DEBUG_FILE */
  250|      0|		if (!wpa_debug_syslog && !out_file) {
  ------------------
  |  Branch (250:7): [True: 0, False: 0]
  |  Branch (250:28): [True: 0, False: 0]
  ------------------
  251|      0|			va_start(ap, fmt);
  252|      0|			vprintf(fmt, ap);
  253|      0|			printf("\n");
  254|      0|			va_end(ap);
  255|      0|		}
  256|      0|#endif /* CONFIG_ANDROID_LOG */
  257|      0|	}
  258|       |
  259|       |#ifdef CONFIG_DEBUG_LINUX_TRACING
  260|       |	if (wpa_debug_tracing_file != NULL) {
  261|       |		va_start(ap, fmt);
  262|       |		fprintf(wpa_debug_tracing_file, WPAS_TRACE_PFX, level);
  263|       |		vfprintf(wpa_debug_tracing_file, fmt, ap);
  264|       |		fprintf(wpa_debug_tracing_file, "\n");
  265|       |		fflush(wpa_debug_tracing_file);
  266|       |		va_end(ap);
  267|       |	}
  268|       |#endif /* CONFIG_DEBUG_LINUX_TRACING */
  269|   325k|}
wpa_hexdump:
  400|   234k|{
  401|   234k|	_wpa_hexdump(level, title, buf, len, 1, 0);
  402|   234k|}
wpa_hexdump_key:
  406|  19.1k|{
  407|  19.1k|	_wpa_hexdump(level, title, buf, len, wpa_debug_show_keys, 0);
  408|  19.1k|}
wpa_hexdump_ascii:
  526|  8.51k|{
  527|  8.51k|	_wpa_hexdump_ascii(level, title, buf, len, 1);
  528|  8.51k|}
wpa_debug.c:_wpa_hexdump:
  274|   253k|{
  275|   253k|	size_t i;
  276|       |
  277|       |#ifdef CONFIG_DEBUG_LINUX_TRACING
  278|       |	if (wpa_debug_tracing_file != NULL) {
  279|       |		fprintf(wpa_debug_tracing_file,
  280|       |			WPAS_TRACE_PFX "%s - hexdump(len=%lu):",
  281|       |			level, title, (unsigned long) len);
  282|       |		if (buf == NULL) {
  283|       |			fprintf(wpa_debug_tracing_file, " [NULL]\n");
  284|       |		} else if (!show) {
  285|       |			fprintf(wpa_debug_tracing_file, " [REMOVED]\n");
  286|       |		} else {
  287|       |			for (i = 0; i < len; i++)
  288|       |				fprintf(wpa_debug_tracing_file,
  289|       |					" %02x", buf[i]);
  290|       |		}
  291|       |		fflush(wpa_debug_tracing_file);
  292|       |	}
  293|       |#endif /* CONFIG_DEBUG_LINUX_TRACING */
  294|       |
  295|   253k|	if (level < wpa_debug_level)
  ------------------
  |  Branch (295:6): [True: 253k, False: 0]
  ------------------
  296|   253k|		return;
  297|       |#ifdef CONFIG_ANDROID_LOG
  298|       |	{
  299|       |		const char *display;
  300|       |		char *strbuf = NULL;
  301|       |		size_t slen = len;
  302|       |		if (buf == NULL) {
  303|       |			display = " [NULL]";
  304|       |		} else if (len == 0) {
  305|       |			display = "";
  306|       |		} else if (show && len) {
  307|       |			/* Limit debug message length for Android log */
  308|       |			if (slen > 32)
  309|       |				slen = 32;
  310|       |			strbuf = os_malloc(1 + 3 * slen);
  311|       |			if (strbuf == NULL) {
  312|       |				wpa_printf(MSG_ERROR, "wpa_hexdump: Failed to "
  313|       |					   "allocate message buffer");
  314|       |				return;
  315|       |			}
  316|       |
  317|       |			for (i = 0; i < slen; i++)
  318|       |				os_snprintf(&strbuf[i * 3], 4, " %02x",
  319|       |					    buf[i]);
  320|       |
  321|       |			display = strbuf;
  322|       |		} else {
  323|       |			display = " [REMOVED]";
  324|       |		}
  325|       |
  326|       |		__android_log_print(wpa_to_android_level(level),
  327|       |				    ANDROID_LOG_NAME,
  328|       |				    "%s - hexdump(len=%lu):%s%s",
  329|       |				    title, (long unsigned int) len, display,
  330|       |				    len > slen ? " ..." : "");
  331|       |		bin_clear_free(strbuf, 1 + 3 * slen);
  332|       |		return;
  333|       |	}
  334|       |#else /* CONFIG_ANDROID_LOG */
  335|       |#ifdef CONFIG_DEBUG_SYSLOG
  336|       |	if (wpa_debug_syslog) {
  337|       |		const char *display;
  338|       |		char *strbuf = NULL;
  339|       |
  340|       |		if (buf == NULL) {
  341|       |			display = " [NULL]";
  342|       |		} else if (len == 0) {
  343|       |			display = "";
  344|       |		} else if (show && len) {
  345|       |			strbuf = os_malloc(1 + 3 * len);
  346|       |			if (strbuf == NULL) {
  347|       |				wpa_printf(MSG_ERROR, "wpa_hexdump: Failed to "
  348|       |					   "allocate message buffer");
  349|       |				return;
  350|       |			}
  351|       |
  352|       |			for (i = 0; i < len; i++)
  353|       |				os_snprintf(&strbuf[i * 3], 4, " %02x",
  354|       |					    buf[i]);
  355|       |
  356|       |			display = strbuf;
  357|       |		} else {
  358|       |			display = " [REMOVED]";
  359|       |		}
  360|       |
  361|       |		syslog(syslog_priority(level), "%s - hexdump(len=%lu):%s",
  362|       |		       title, (unsigned long) len, display);
  363|       |		bin_clear_free(strbuf, 1 + 3 * len);
  364|       |		if (only_syslog)
  365|       |			return;
  366|       |	}
  367|       |#endif /* CONFIG_DEBUG_SYSLOG */
  368|      0|	wpa_debug_print_timestamp();
  369|      0|#ifdef CONFIG_DEBUG_FILE
  370|      0|	if (out_file) {
  ------------------
  |  Branch (370:6): [True: 0, False: 0]
  ------------------
  371|      0|		fprintf(out_file, "%s - hexdump(len=%lu):",
  372|      0|			title, (unsigned long) len);
  373|      0|		if (buf == NULL) {
  ------------------
  |  Branch (373:7): [True: 0, False: 0]
  ------------------
  374|      0|			fprintf(out_file, " [NULL]");
  375|      0|		} else if (show) {
  ------------------
  |  Branch (375:14): [True: 0, False: 0]
  ------------------
  376|      0|			for (i = 0; i < len; i++)
  ------------------
  |  Branch (376:16): [True: 0, False: 0]
  ------------------
  377|      0|				fprintf(out_file, " %02x", buf[i]);
  378|      0|		} else {
  379|      0|			fprintf(out_file, " [REMOVED]");
  380|      0|		}
  381|      0|		fprintf(out_file, "\n");
  382|      0|	}
  383|      0|#endif /* CONFIG_DEBUG_FILE */
  384|      0|	if (!wpa_debug_syslog && !out_file) {
  ------------------
  |  Branch (384:6): [True: 0, False: 0]
  |  Branch (384:27): [True: 0, False: 0]
  ------------------
  385|      0|		printf("%s - hexdump(len=%lu):", title, (unsigned long) len);
  386|      0|		if (buf == NULL) {
  ------------------
  |  Branch (386:7): [True: 0, False: 0]
  ------------------
  387|      0|			printf(" [NULL]");
  388|      0|		} else if (show) {
  ------------------
  |  Branch (388:14): [True: 0, False: 0]
  ------------------
  389|      0|			for (i = 0; i < len; i++)
  ------------------
  |  Branch (389:16): [True: 0, False: 0]
  ------------------
  390|      0|				printf(" %02x", buf[i]);
  391|      0|		} else {
  392|      0|			printf(" [REMOVED]");
  393|      0|		}
  394|      0|		printf("\n");
  395|      0|	}
  396|      0|#endif /* CONFIG_ANDROID_LOG */
  397|      0|}
wpa_debug.c:_wpa_hexdump_ascii:
  413|  8.51k|{
  414|  8.51k|	size_t i, llen;
  415|  8.51k|	const u8 *pos = buf;
  416|  8.51k|	const size_t line_len = 16;
  417|       |
  418|       |#ifdef CONFIG_DEBUG_LINUX_TRACING
  419|       |	if (wpa_debug_tracing_file != NULL) {
  420|       |		fprintf(wpa_debug_tracing_file,
  421|       |			WPAS_TRACE_PFX "%s - hexdump_ascii(len=%lu):",
  422|       |			level, title, (unsigned long) len);
  423|       |		if (buf == NULL) {
  424|       |			fprintf(wpa_debug_tracing_file, " [NULL]\n");
  425|       |		} else if (!show) {
  426|       |			fprintf(wpa_debug_tracing_file, " [REMOVED]\n");
  427|       |		} else {
  428|       |			/* can do ascii processing in userspace */
  429|       |			for (i = 0; i < len; i++)
  430|       |				fprintf(wpa_debug_tracing_file,
  431|       |					" %02x", pos[i]);
  432|       |		}
  433|       |		fflush(wpa_debug_tracing_file);
  434|       |	}
  435|       |#endif /* CONFIG_DEBUG_LINUX_TRACING */
  436|       |
  437|  8.51k|	if (level < wpa_debug_level)
  ------------------
  |  Branch (437:6): [True: 8.51k, False: 0]
  ------------------
  438|  8.51k|		return;
  439|       |#ifdef CONFIG_ANDROID_LOG
  440|       |	_wpa_hexdump(level, title, buf, len, show, 0);
  441|       |#else /* CONFIG_ANDROID_LOG */
  442|       |#ifdef CONFIG_DEBUG_SYSLOG
  443|       |	if (wpa_debug_syslog)
  444|       |		_wpa_hexdump(level, title, buf, len, show, 1);
  445|       |#endif /* CONFIG_DEBUG_SYSLOG */
  446|      0|	wpa_debug_print_timestamp();
  447|      0|#ifdef CONFIG_DEBUG_FILE
  448|      0|	if (out_file) {
  ------------------
  |  Branch (448:6): [True: 0, False: 0]
  ------------------
  449|      0|		if (!show) {
  ------------------
  |  Branch (449:7): [True: 0, False: 0]
  ------------------
  450|      0|			fprintf(out_file,
  451|      0|				"%s - hexdump_ascii(len=%lu): [REMOVED]\n",
  452|      0|				title, (unsigned long) len);
  453|      0|			goto file_done;
  454|      0|		}
  455|      0|		if (buf == NULL) {
  ------------------
  |  Branch (455:7): [True: 0, False: 0]
  ------------------
  456|      0|			fprintf(out_file,
  457|      0|				"%s - hexdump_ascii(len=%lu): [NULL]\n",
  458|      0|				title, (unsigned long) len);
  459|      0|			goto file_done;
  460|      0|		}
  461|      0|		fprintf(out_file, "%s - hexdump_ascii(len=%lu):\n",
  462|      0|			title, (unsigned long) len);
  463|      0|		while (len) {
  ------------------
  |  Branch (463:10): [True: 0, False: 0]
  ------------------
  464|      0|			llen = len > line_len ? line_len : len;
  ------------------
  |  Branch (464:11): [True: 0, False: 0]
  ------------------
  465|      0|			fprintf(out_file, "    ");
  466|      0|			for (i = 0; i < llen; i++)
  ------------------
  |  Branch (466:16): [True: 0, False: 0]
  ------------------
  467|      0|				fprintf(out_file, " %02x", pos[i]);
  468|      0|			for (i = llen; i < line_len; i++)
  ------------------
  |  Branch (468:19): [True: 0, False: 0]
  ------------------
  469|      0|				fprintf(out_file, "   ");
  470|      0|			fprintf(out_file, "   ");
  471|      0|			for (i = 0; i < llen; i++) {
  ------------------
  |  Branch (471:16): [True: 0, False: 0]
  ------------------
  472|      0|				if (isprint(pos[i]))
  ------------------
  |  Branch (472:9): [True: 0, False: 0]
  ------------------
  473|      0|					fprintf(out_file, "%c", pos[i]);
  474|      0|				else
  475|      0|					fprintf(out_file, "_");
  476|      0|			}
  477|      0|			for (i = llen; i < line_len; i++)
  ------------------
  |  Branch (477:19): [True: 0, False: 0]
  ------------------
  478|      0|				fprintf(out_file, " ");
  479|      0|			fprintf(out_file, "\n");
  480|      0|			pos += llen;
  481|      0|			len -= llen;
  482|      0|		}
  483|      0|	}
  484|      0|file_done:
  485|      0|#endif /* CONFIG_DEBUG_FILE */
  486|      0|	if (!wpa_debug_syslog && !out_file) {
  ------------------
  |  Branch (486:6): [True: 0, False: 0]
  |  Branch (486:27): [True: 0, False: 0]
  ------------------
  487|      0|		if (!show) {
  ------------------
  |  Branch (487:7): [True: 0, False: 0]
  ------------------
  488|      0|			printf("%s - hexdump_ascii(len=%lu): [REMOVED]\n",
  489|      0|			       title, (unsigned long) len);
  490|      0|			return;
  491|      0|		}
  492|      0|		if (buf == NULL) {
  ------------------
  |  Branch (492:7): [True: 0, False: 0]
  ------------------
  493|      0|			printf("%s - hexdump_ascii(len=%lu): [NULL]\n",
  494|      0|			       title, (unsigned long) len);
  495|      0|			return;
  496|      0|		}
  497|      0|		printf("%s - hexdump_ascii(len=%lu):\n", title,
  498|      0|		       (unsigned long) len);
  499|      0|		while (len) {
  ------------------
  |  Branch (499:10): [True: 0, False: 0]
  ------------------
  500|      0|			llen = len > line_len ? line_len : len;
  ------------------
  |  Branch (500:11): [True: 0, False: 0]
  ------------------
  501|      0|			printf("    ");
  502|      0|			for (i = 0; i < llen; i++)
  ------------------
  |  Branch (502:16): [True: 0, False: 0]
  ------------------
  503|      0|				printf(" %02x", pos[i]);
  504|      0|			for (i = llen; i < line_len; i++)
  ------------------
  |  Branch (504:19): [True: 0, False: 0]
  ------------------
  505|      0|				printf("   ");
  506|      0|			printf("   ");
  507|      0|			for (i = 0; i < llen; i++) {
  ------------------
  |  Branch (507:16): [True: 0, False: 0]
  ------------------
  508|      0|				if (isprint(pos[i]))
  ------------------
  |  Branch (508:9): [True: 0, False: 0]
  ------------------
  509|      0|					printf("%c", pos[i]);
  510|      0|				else
  511|      0|					printf("_");
  512|      0|			}
  513|      0|			for (i = llen; i < line_len; i++)
  ------------------
  |  Branch (513:19): [True: 0, False: 0]
  ------------------
  514|      0|				printf(" ");
  515|      0|			printf("\n");
  516|      0|			pos += llen;
  517|      0|			len -= llen;
  518|      0|		}
  519|      0|	}
  520|      0|#endif /* CONFIG_ANDROID_LOG */
  521|      0|}

tls-client.c:wpa_hexdump_buf:
  117|  63.9k|{
  118|  63.9k|	wpa_hexdump(level, title, buf ? wpabuf_head(buf) : NULL,
  ------------------
  |  Branch (118:28): [True: 63.9k, False: 0]
  ------------------
  119|  63.9k|		    buf ? wpabuf_len(buf) : 0);
  ------------------
  |  Branch (119:7): [True: 63.9k, False: 0]
  ------------------
  120|  63.9k|}

wpabuf_resize:
   48|     45|{
   49|     45|	struct wpabuf *buf = *_buf;
   50|       |#ifdef WPA_TRACE
   51|       |	struct wpabuf_trace *trace;
   52|       |#endif /* WPA_TRACE */
   53|       |
   54|     45|	if (buf == NULL) {
  ------------------
  |  Branch (54:6): [True: 43, False: 2]
  ------------------
   55|     43|		*_buf = wpabuf_alloc(add_len);
   56|     43|		return *_buf == NULL ? -1 : 0;
  ------------------
  |  Branch (56:10): [True: 0, False: 43]
  ------------------
   57|     43|	}
   58|       |
   59|       |#ifdef WPA_TRACE
   60|       |	trace = wpabuf_get_trace(buf);
   61|       |	if (trace->magic != WPABUF_MAGIC) {
   62|       |		wpa_printf(MSG_ERROR, "wpabuf: invalid magic %x",
   63|       |			   trace->magic);
   64|       |		wpa_trace_show("wpabuf_resize invalid magic");
   65|       |		abort();
   66|       |	}
   67|       |#endif /* WPA_TRACE */
   68|       |
   69|      2|	if (buf->used + add_len > buf->size) {
  ------------------
  |  Branch (69:6): [True: 0, False: 2]
  ------------------
   70|      0|		unsigned char *nbuf;
   71|      0|		if (buf->flags & WPABUF_FLAG_EXT_DATA) {
  ------------------
  |  |   13|      0|#define WPABUF_FLAG_EXT_DATA BIT(0)
  |  |  ------------------
  |  |  |  |  458|      0|#define BIT(x) (1U << (x))
  |  |  ------------------
  ------------------
  |  Branch (71:7): [True: 0, False: 0]
  ------------------
   72|      0|			nbuf = os_realloc(buf->buf, buf->used + add_len);
  ------------------
  |  |  508|      0|#define os_realloc(p, s) realloc((p), (s))
  ------------------
   73|      0|			if (nbuf == NULL)
  ------------------
  |  Branch (73:8): [True: 0, False: 0]
  ------------------
   74|      0|				return -1;
   75|      0|			os_memset(nbuf + buf->used, 0, add_len);
  ------------------
  |  |  529|      0|#define os_memset(s, c, n) memset(s, c, n)
  ------------------
   76|      0|			buf->buf = nbuf;
   77|      0|		} else {
   78|       |#ifdef WPA_TRACE
   79|       |			nbuf = os_realloc(trace, sizeof(struct wpabuf_trace) +
   80|       |					  sizeof(struct wpabuf) +
   81|       |					  buf->used + add_len);
   82|       |			if (nbuf == NULL)
   83|       |				return -1;
   84|       |			trace = (struct wpabuf_trace *) nbuf;
   85|       |			buf = (struct wpabuf *) (trace + 1);
   86|       |			os_memset(nbuf + sizeof(struct wpabuf_trace) +
   87|       |				  sizeof(struct wpabuf) + buf->used, 0,
   88|       |				  add_len);
   89|       |#else /* WPA_TRACE */
   90|      0|			nbuf = os_realloc(buf, sizeof(struct wpabuf) +
  ------------------
  |  |  508|      0|#define os_realloc(p, s) realloc((p), (s))
  ------------------
   91|      0|					  buf->used + add_len);
   92|      0|			if (nbuf == NULL)
  ------------------
  |  Branch (92:8): [True: 0, False: 0]
  ------------------
   93|      0|				return -1;
   94|      0|			buf = (struct wpabuf *) nbuf;
   95|      0|			os_memset(nbuf + sizeof(struct wpabuf) + buf->used, 0,
  ------------------
  |  |  529|      0|#define os_memset(s, c, n) memset(s, c, n)
  ------------------
   96|      0|				  add_len);
   97|      0|#endif /* WPA_TRACE */
   98|      0|			buf->buf = (u8 *) (buf + 1);
   99|      0|			*_buf = buf;
  100|      0|		}
  101|      0|		buf->size = buf->used + add_len;
  102|      0|	}
  103|       |
  104|      2|	return 0;
  105|      2|}
wpabuf_alloc:
  114|  64.8k|{
  115|       |#ifdef WPA_TRACE
  116|       |	struct wpabuf_trace *trace = os_zalloc(sizeof(struct wpabuf_trace) +
  117|       |					       sizeof(struct wpabuf) + len);
  118|       |	struct wpabuf *buf;
  119|       |	if (trace == NULL)
  120|       |		return NULL;
  121|       |	trace->magic = WPABUF_MAGIC;
  122|       |	buf = (struct wpabuf *) (trace + 1);
  123|       |#else /* WPA_TRACE */
  124|  64.8k|	struct wpabuf *buf = os_zalloc(sizeof(struct wpabuf) + len);
  125|  64.8k|	if (buf == NULL)
  ------------------
  |  Branch (125:6): [True: 0, False: 64.8k]
  ------------------
  126|      0|		return NULL;
  127|  64.8k|#endif /* WPA_TRACE */
  128|       |
  129|  64.8k|	buf->size = len;
  130|  64.8k|	buf->buf = (u8 *) (buf + 1);
  131|  64.8k|	return buf;
  132|  64.8k|}
wpabuf_alloc_ext_data:
  136|  66.3k|{
  137|       |#ifdef WPA_TRACE
  138|       |	struct wpabuf_trace *trace = os_zalloc(sizeof(struct wpabuf_trace) +
  139|       |					       sizeof(struct wpabuf));
  140|       |	struct wpabuf *buf;
  141|       |	if (trace == NULL)
  142|       |		return NULL;
  143|       |	trace->magic = WPABUF_MAGIC;
  144|       |	buf = (struct wpabuf *) (trace + 1);
  145|       |#else /* WPA_TRACE */
  146|  66.3k|	struct wpabuf *buf = os_zalloc(sizeof(struct wpabuf));
  147|  66.3k|	if (buf == NULL)
  ------------------
  |  Branch (147:6): [True: 0, False: 66.3k]
  ------------------
  148|      0|		return NULL;
  149|  66.3k|#endif /* WPA_TRACE */
  150|       |
  151|  66.3k|	buf->size = len;
  152|  66.3k|	buf->used = len;
  153|  66.3k|	buf->buf = data;
  154|  66.3k|	buf->flags |= WPABUF_FLAG_EXT_DATA;
  ------------------
  |  |   13|  66.3k|#define WPABUF_FLAG_EXT_DATA BIT(0)
  |  |  ------------------
  |  |  |  |  458|  66.3k|#define BIT(x) (1U << (x))
  |  |  ------------------
  ------------------
  155|       |
  156|  66.3k|	return buf;
  157|  66.3k|}
wpabuf_alloc_copy:
  161|    122|{
  162|    122|	struct wpabuf *buf = wpabuf_alloc(len);
  163|    122|	if (buf)
  ------------------
  |  Branch (163:6): [True: 122, False: 0]
  ------------------
  164|    122|		wpabuf_put_data(buf, data, len);
  165|    122|	return buf;
  166|    122|}
wpabuf_free:
  187|   252k|{
  188|       |#ifdef WPA_TRACE
  189|       |	struct wpabuf_trace *trace;
  190|       |	if (buf == NULL)
  191|       |		return;
  192|       |	trace = wpabuf_get_trace(buf);
  193|       |	if (trace->magic != WPABUF_MAGIC) {
  194|       |		wpa_printf(MSG_ERROR, "wpabuf_free: invalid magic %x",
  195|       |			   trace->magic);
  196|       |		wpa_trace_show("wpabuf_free magic mismatch");
  197|       |		abort();
  198|       |	}
  199|       |	if (buf->flags & WPABUF_FLAG_EXT_DATA)
  200|       |		os_free(buf->buf);
  201|       |	os_free(trace);
  202|       |#else /* WPA_TRACE */
  203|   252k|	if (buf == NULL)
  ------------------
  |  Branch (203:6): [True: 121k, False: 131k]
  ------------------
  204|   121k|		return;
  205|   131k|	if (buf->flags & WPABUF_FLAG_EXT_DATA)
  ------------------
  |  |   13|   131k|#define WPABUF_FLAG_EXT_DATA BIT(0)
  |  |  ------------------
  |  |  |  |  458|   131k|#define BIT(x) (1U << (x))
  |  |  ------------------
  ------------------
  |  Branch (205:6): [True: 66.3k, False: 64.8k]
  ------------------
  206|  66.3k|		os_free(buf->buf);
  ------------------
  |  |  511|  66.3k|#define os_free(p) free((p))
  ------------------
  207|   131k|	os_free(buf);
  ------------------
  |  |  511|   131k|#define os_free(p) free((p))
  ------------------
  208|   131k|#endif /* WPA_TRACE */
  209|   131k|}
wpabuf_put:
  222|  64.2k|{
  223|  64.2k|	void *tmp = wpabuf_mhead_u8(buf) + wpabuf_len(buf);
  224|  64.2k|	buf->used += len;
  225|  64.2k|	if (buf->used > buf->size) {
  ------------------
  |  Branch (225:6): [True: 0, False: 64.2k]
  ------------------
  226|      0|		wpabuf_overflow(buf, len);
  227|      0|	}
  228|  64.2k|	return tmp;
  229|  64.2k|}

tls-client.c:wpabuf_put_data:
  174|  64.0k|{
  175|  64.0k|	if (data)
  ------------------
  |  Branch (175:6): [True: 64.0k, False: 0]
  ------------------
  176|  64.0k|		os_memcpy(wpabuf_put(buf, len), data, len);
  ------------------
  |  |  523|  64.0k|#define os_memcpy(d, s, n) memcpy((d), (s), (n))
  ------------------
  177|  64.0k|}
tls-client.c:wpabuf_put_str:
  193|     90|{
  194|     90|	wpabuf_put_data(dst, str, os_strlen(str));
  ------------------
  |  |  536|     90|#define os_strlen(s) strlen(s)
  ------------------
  195|     90|}
tls-client.c:wpabuf_head:
   94|  63.9k|{
   95|  63.9k|	return buf->buf;
   96|  63.9k|}
tls-client.c:wpabuf_len:
   59|  63.9k|{
   60|  63.9k|	return buf->used;
   61|  63.9k|}
tls_internal.c:wpabuf_head:
   94|  63.9k|{
   95|  63.9k|	return buf->buf;
   96|  63.9k|}
tls_internal.c:wpabuf_len:
   59|  64.0k|{
   60|  64.0k|	return buf->used;
   61|  64.0k|}
tls_internal.c:wpabuf_mhead:
  109|     45|{
  110|     45|	return buf->buf;
  111|     45|}
tls_internal.c:wpabuf_size:
   49|     45|{
   50|     45|	return buf->size;
   51|     45|}
tlsv1_client.c:wpabuf_tailroom:
   69|     45|{
   70|     45|	return buf->size - buf->used;
   71|     45|}
wpabuf.c:wpabuf_put_data:
  174|    122|{
  175|    122|	if (data)
  ------------------
  |  Branch (175:6): [True: 122, False: 0]
  ------------------
  176|    122|		os_memcpy(wpabuf_put(buf, len), data, len);
  ------------------
  |  |  523|    122|#define os_memcpy(d, s, n) memcpy((d), (s), (n))
  ------------------
  177|    122|}
wpabuf.c:wpabuf_len:
   59|  64.2k|{
   60|  64.2k|	return buf->used;
   61|  64.2k|}
wpabuf.c:wpabuf_mhead:
  109|  64.2k|{
  110|  64.2k|	return buf->buf;
  111|  64.2k|}
wpabuf.c:wpabuf_mhead_u8:
  114|  64.2k|{
  115|  64.2k|	return (u8 *) wpabuf_mhead(buf);
  116|  64.2k|}

wpa_fuzzer_set_debug_level:
   15|  2.68k|{
   16|  2.68k|	static int first = 1;
   17|       |
   18|  2.68k|	if (first) {
  ------------------
  |  Branch (18:6): [True: 1, False: 2.68k]
  ------------------
   19|      1|		char *env;
   20|       |
   21|      1|		first = 0;
   22|      1|		env = getenv("WPADEBUG");
   23|      1|		if (env)
  ------------------
  |  Branch (23:7): [True: 0, False: 1]
  ------------------
   24|      0|			wpa_debug_level = atoi(env);
   25|      1|		else
   26|      1|			wpa_debug_level = MSG_ERROR + 1;
   27|       |
   28|      1|		wpa_debug_show_keys = 1;
   29|      1|	}
   30|  2.68k|}

LLVMFuzzerTestOneInput:
   56|  2.68k|{
   57|  2.68k|	struct context ctx;
   58|  2.68k|	struct tls_config conf;
   59|  2.68k|	void *tls_client;
   60|  2.68k|	struct tls_connection_params params;
   61|  2.68k|	struct tls_connection *conn_client = NULL;
   62|  2.68k|	int ret = -1;
   63|  2.68k|	struct wpabuf *in = NULL, *out = NULL, *appl;
   64|       |
   65|  2.68k|	wpa_fuzzer_set_debug_level();
   66|       |
   67|  2.68k|	os_memset(&ctx, 0, sizeof(ctx));
  ------------------
  |  |  529|  2.68k|#define os_memset(s, c, n) memset(s, c, n)
  ------------------
   68|  2.68k|	ctx.data = data;
   69|  2.68k|	ctx.data_len = size;
   70|       |
   71|  2.68k|	os_memset(&conf, 0, sizeof(conf));
  ------------------
  |  |  529|  2.68k|#define os_memset(s, c, n) memset(s, c, n)
  ------------------
   72|  2.68k|	tls_client = tls_init(&conf);
   73|  2.68k|	if (!tls_client)
  ------------------
  |  Branch (73:6): [True: 0, False: 2.68k]
  ------------------
   74|      0|		goto fail;
   75|       |
   76|  2.68k|	os_memset(&params, 0, sizeof(params));
  ------------------
  |  |  529|  2.68k|#define os_memset(s, c, n) memset(s, c, n)
  ------------------
   77|  2.68k|	params.ca_cert = CERTDIR "ca.pem";
  ------------------
  |  |   16|  2.68k|#define CERTDIR "../../hwsim/auth_serv/"
  ------------------
   78|  2.68k|	params.client_cert = CERTDIR "server.pem";
  ------------------
  |  |   16|  2.68k|#define CERTDIR "../../hwsim/auth_serv/"
  ------------------
   79|  2.68k|	params.private_key = CERTDIR "server.key";
  ------------------
  |  |   16|  2.68k|#define CERTDIR "../../hwsim/auth_serv/"
  ------------------
   80|       |
   81|  2.68k|	conn_client = tls_connection_init(tls_client);
   82|  2.68k|	if (!conn_client)
  ------------------
  |  Branch (82:6): [True: 0, False: 2.68k]
  ------------------
   83|      0|		goto fail;
   84|       |
   85|  2.68k|	in = NULL;
   86|  66.5k|	for (;;) {
   87|  66.5k|		appl = NULL;
   88|  66.5k|		out = tls_connection_handshake(tls_client, conn_client, in,
   89|  66.5k|					       &appl);
   90|  66.5k|		wpabuf_free(in);
   91|  66.5k|		in = NULL;
   92|  66.5k|		if (!out)
  ------------------
  |  Branch (92:7): [True: 181, False: 66.3k]
  ------------------
   93|    181|			goto fail;
   94|  66.3k|		if (tls_connection_get_failed(tls_client, conn_client)) {
  ------------------
  |  Branch (94:7): [True: 0, False: 66.3k]
  ------------------
   95|      0|			wpa_printf(MSG_ERROR, "TLS handshake failed");
   96|      0|			goto fail;
   97|      0|		}
   98|  66.3k|		if (tls_connection_established(tls_client, conn_client))
  ------------------
  |  Branch (98:7): [True: 45, False: 66.3k]
  ------------------
   99|     45|			break;
  100|       |
  101|  66.3k|		appl = NULL;
  102|  66.3k|		in = read_msg(&ctx);
  103|  66.3k|		wpabuf_free(out);
  104|  66.3k|		out = NULL;
  105|  66.3k|		if (!in)
  ------------------
  |  Branch (105:7): [True: 2.45k, False: 63.8k]
  ------------------
  106|  2.45k|			goto fail;
  107|  63.8k|		if (tls_connection_established(tls_client, conn_client))
  ------------------
  |  Branch (107:7): [True: 0, False: 63.8k]
  ------------------
  108|      0|			break;
  109|  63.8k|	}
  110|       |
  111|     45|	wpabuf_free(in);
  112|     45|	in = wpabuf_alloc(100);
  113|     45|	if (!in)
  ------------------
  |  Branch (113:6): [True: 0, False: 45]
  ------------------
  114|      0|		goto fail;
  115|     45|	wpabuf_put_str(in, "PING");
  116|     45|	wpabuf_free(out);
  117|     45|	out = tls_connection_encrypt(tls_client, conn_client, in);
  118|     45|	wpabuf_free(in);
  119|     45|	in = NULL;
  120|     45|	if (!out)
  ------------------
  |  Branch (120:6): [True: 0, False: 45]
  ------------------
  121|      0|		goto fail;
  122|       |
  123|     45|	wpabuf_free(in);
  124|     45|	in = wpabuf_alloc(100);
  125|     45|	if (!in)
  ------------------
  |  Branch (125:6): [True: 0, False: 45]
  ------------------
  126|      0|		goto fail;
  127|     45|	wpabuf_put_str(in, "PONG");
  128|     45|	wpabuf_free(out);
  129|     45|	out = read_msg(&ctx);
  130|     45|	wpabuf_free(in);
  131|     45|	in = NULL;
  132|     45|	if (!out)
  ------------------
  |  Branch (132:6): [True: 1, False: 44]
  ------------------
  133|      1|		goto fail;
  134|       |
  135|     44|	in = tls_connection_decrypt(tls_client, conn_client, out);
  136|     44|	wpabuf_free(out);
  137|     44|	out = NULL;
  138|     44|	if (!in)
  ------------------
  |  Branch (138:6): [True: 3, False: 41]
  ------------------
  139|      3|		goto fail;
  140|     41|	wpa_hexdump_buf(MSG_DEBUG, "Client decrypted ApplData", in);
  141|       |
  142|     41|	ret = 0;
  143|  2.68k|fail:
  144|  2.68k|	if (tls_client) {
  ------------------
  |  Branch (144:6): [True: 2.68k, False: 0]
  ------------------
  145|  2.68k|		if (conn_client)
  ------------------
  |  Branch (145:7): [True: 2.68k, False: 0]
  ------------------
  146|  2.68k|			tls_connection_deinit(tls_client, conn_client);
  147|  2.68k|		tls_deinit(tls_client);
  148|  2.68k|	}
  149|  2.68k|	wpabuf_free(in);
  150|  2.68k|	wpabuf_free(out);
  151|       |
  152|  2.68k|	return ret;
  153|     41|}
tls-client.c:read_msg:
   27|  66.3k|{
   28|  66.3k|	u16 msg_len;
   29|  66.3k|	struct wpabuf *msg;
   30|       |
   31|  66.3k|	if (ctx->data_len - ctx->data_offset < 2) {
  ------------------
  |  Branch (31:6): [True: 1.79k, False: 64.5k]
  ------------------
   32|  1.79k|		wpa_printf(MSG_ERROR, "TEST-ERROR: Could not read msg len");
   33|  1.79k|		return NULL;
   34|  1.79k|	}
   35|  64.5k|	msg_len = WPA_GET_BE16(&ctx->data[ctx->data_offset]);
   36|  64.5k|	ctx->data_offset += 2;
   37|       |
   38|  64.5k|	msg = wpabuf_alloc(msg_len);
   39|  64.5k|	if (!msg)
  ------------------
  |  Branch (39:6): [True: 0, False: 64.5k]
  ------------------
   40|      0|		return NULL;
   41|  64.5k|	if (msg_len > 0 && ctx->data_len - ctx->data_offset < msg_len) {
  ------------------
  |  Branch (41:6): [True: 64.4k, False: 100]
  |  Branch (41:21): [True: 659, False: 63.8k]
  ------------------
   42|    659|		wpa_printf(MSG_ERROR, "TEST-ERROR: Truncated msg (msg_len=%u)",
   43|    659|			   msg_len);
   44|    659|		wpabuf_free(msg);
   45|    659|		return NULL;
   46|    659|	}
   47|  63.9k|	wpabuf_put_data(msg, &ctx->data[ctx->data_offset], msg_len);
   48|  63.9k|	ctx->data_offset += msg_len;
   49|  63.9k|	wpa_hexdump_buf(MSG_DEBUG, "TEST: Read message from file", msg);
   50|       |
   51|  63.9k|	return msg;
   52|  64.5k|}

