⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 reuse.c

📁 a very popular packet of cryptography tools,it encloses the most common used algorithm and protocols
💻 C
📖 第 1 页 / 共 2 页
字号:
	  if (ds_funcs[i] == 0)	    continue;	  if (strcmp (ds_func_names[i], "mpz_sqrt") == 0	      && mpz_sgn (in1) < 0)	    continue;	  (ds_funcs[i]) (ref1, in1);	  mpz_set (res1, in1);	  (ds_funcs[i]) (res1, res1);	  if (mpz_cmp (ref1, res1) != 0)	    FAIL (ds, i, in1, in2, NULL);	}      in2i = mpz_get_ui (in2);      for (i = 0; i < sizeof (dsi_funcs) / sizeof (dsi_func); i++)	{	  if (dsi_funcs[i] == 0)	    continue;	  if (strcmp (dsi_func_names[i], "mpz_fdiv_q_2exp") == 0)	    /* Limit exponent to something reasonable for the division	       functions.  Without this, we'd  normally shift things off	       the end and just generate the trivial values 1, 0, -1.  */	    in2i %= 0x1000;	  if (strcmp (dsi_func_names[i], "mpz_mul_2exp") == 0)	    /* Limit exponent more for mpz_mul_2exp to save time.  */	    in2i %= 0x100;	  if (strcmp (dsi_func_names[i], "mpz_pow_ui") == 0)	    /* Limit exponent yet more for mpz_pow_ui to save time.  */	    in2i %= 0x10;	  (dsi_funcs[i]) (ref1, in1, in2i);	  mpz_set (res1, in1);	  (dsi_funcs[i]) (res1, res1, in2i);	  if (mpz_cmp (ref1, res1) != 0)	    FAIL (dsi, i, in1, in2, NULL);	}      if (in2i != 0)	  /* Don't divide by 0.  */	{	  for (i = 0; i < sizeof (dsi_div_funcs) / sizeof (dsi_div_funcs); i++)	    {	      r1 = (dsi_div_funcs[i]) (ref1, in1, in2i);	      mpz_set (res1, in1);	      r2 = (dsi_div_funcs[i]) (res1, res1, in2i);	      if (mpz_cmp (ref1, res1) != 0 || r1 != r2)		FAIL (dsi_div, i, in1, in2, NULL);	    }	  for (i = 0; i < sizeof (ddsi_div_funcs) / sizeof (ddsi_div_funcs); i++)	    {	      r1 = (ddsi_div_funcs[i]) (ref1, ref2, in1, in2i);	      mpz_set (res1, in1);	      r2 = (ddsi_div_funcs[i]) (res1, res2, res1, in2i);	      if (mpz_cmp (ref1, res1) != 0 || mpz_cmp (ref2, res2) != 0 || r1 != r2)		FAIL (ddsi_div, i, in1, in2, NULL);	      mpz_set (res2, in1);	      (ddsi_div_funcs[i]) (res1, res2, res2, in2i);	      if (mpz_cmp (ref1, res1) != 0 || mpz_cmp (ref2, res2) != 0 || r1 != r2)		FAIL (ddsi_div, i, in1, in2, NULL);	    }	}      if (mpz_sgn (in1) >= 0)	{	  mpz_sqrtrem (ref1, ref2, in1);	  mpz_set (res1, in1);	  mpz_sqrtrem (res1, res2, res1);	  if (mpz_cmp (ref1, res1) != 0 || mpz_cmp (ref2, res2) != 0)	    FAIL2 (mpz_sqrtrem, in1, NULL, NULL);	  mpz_set (res2, in1);	  mpz_sqrtrem (res1, res2, res2);	  if (mpz_cmp (ref1, res1) != 0 || mpz_cmp (ref2, res2) != 0)	    FAIL2 (mpz_sqrtrem, in1, NULL, NULL);	}      if (mpz_sgn (in1) >= 0)	{	  mpz_root (ref1, in1, in2i % 0x100 + 1);	  mpz_set (res1, in1);	  mpz_root (res1, res1, in2i % 0x100 + 1);	  if (mpz_cmp (ref1, res1) != 0)	    FAIL2 (mpz_root, in1, in2, NULL);	}      if (pass < reps / 2)	/* run fewer tests since gcdext lots of time */	{	  mpz_gcdext (ref1, ref2, ref3, in1, in2);	  mpz_set (res1, in1);	  mpz_gcdext (res1, res2, res3, res1, in2);	  if (mpz_cmp (ref1, res1) != 0 || mpz_cmp (ref2, res2) != 0	      || mpz_cmp (ref3, res3) != 0)	    FAIL2 (mpz_gcdext, in1, in2, NULL);	  mpz_set (res2, in1);	  mpz_gcdext (res1, res2, res3, res2, in2);	  if (mpz_cmp (ref1, res1) != 0 || mpz_cmp (ref2, res2) != 0	      || mpz_cmp (ref3, res3) != 0)	    FAIL2 (mpz_gcdext, in1, in2, NULL);	  mpz_set (res3, in1);	  mpz_gcdext (res1, res2, res3, res3, in2);	  if (mpz_cmp (ref1, res1) != 0 || mpz_cmp (ref2, res2) != 0	      || mpz_cmp (ref3, res3) != 0)	    FAIL2 (mpz_gcdext, in1, in2, NULL);	  mpz_set (res1, in2);	  mpz_gcdext (res1, res2, res3, in1, res1);	  if (mpz_cmp (ref1, res1) != 0 || mpz_cmp (ref2, res2) != 0	      || mpz_cmp (ref3, res3) != 0)	    FAIL2 (mpz_gcdext, in1, in2, NULL);	  mpz_set (res2, in2);	  mpz_gcdext (res1, res2, res3, in1, res2);	  if (mpz_cmp (ref1, res1) != 0 || mpz_cmp (ref2, res2) != 0	      || mpz_cmp (ref3, res3) != 0)	    FAIL2 (mpz_gcdext, in1, in2, NULL);	  mpz_set (res3, in2);	  mpz_gcdext (res1, res2, res3, in1, res3);	  if (mpz_cmp (ref1, res1) != 0 || mpz_cmp (ref2, res2) != 0	      || mpz_cmp (ref3, res3) != 0)	    FAIL2 (mpz_gcdext, in1, in2, NULL);	  mpz_set (res1, in1);	  mpz_gcdext (res1, res2, NULL, res1, in2);	  if (mpz_cmp (ref1, res1) != 0 || mpz_cmp (ref2, res2) != 0	      || mpz_cmp (ref3, res3) != 0)	    FAIL2 (mpz_gcdext, in1, in2, NULL);	  mpz_set (res2, in1);	  mpz_gcdext (res1, res2, NULL, res2, in2);	  if (mpz_cmp (ref1, res1) != 0 || mpz_cmp (ref2, res2) != 0	      || mpz_cmp (ref3, res3) != 0)	    FAIL2 (mpz_gcdext, in1, in2, NULL);	  mpz_set (res1, in2);	  mpz_gcdext (res1, res2, NULL, in1, res1);	  if (mpz_cmp (ref1, res1) != 0 || mpz_cmp (ref2, res2) != 0	      || mpz_cmp (ref3, res3) != 0)	    FAIL2 (mpz_gcdext, in1, in2, NULL);	  mpz_set (res2, in2);	  mpz_gcdext (res1, res2, NULL, in1, res2);	  if (mpz_cmp (ref1, res1) != 0 || mpz_cmp (ref2, res2) != 0	      || mpz_cmp (ref3, res3) != 0)	    FAIL2 (mpz_gcdext, in1, in2, NULL);	}      /* Don't run mpz_powm for huge exponents or when undefined.  */      if (mpz_sizeinbase (in2, 2) < 250 && mpz_sgn (in3) != 0	  && (mpz_sgn (in2) >= 0 || mpz_invert (t, in1, in3)))	{	  mpz_powm (ref1, in1, in2, in3);	  mpz_set (res1, in1);	  mpz_powm (res1, res1, in2, in3);	  if (mpz_cmp (ref1, res1) != 0)	    FAIL2 (mpz_powm, in1, in2, in3);	  mpz_set (res1, in2);	  mpz_powm (res1, in1, res1, in3);	  if (mpz_cmp (ref1, res1) != 0)	    FAIL2 (mpz_powm, in1, in2, in3);	  mpz_set (res1, in3);	  mpz_powm (res1, in1, in2, res1);	  if (mpz_cmp (ref1, res1) != 0)	    FAIL2 (mpz_powm, in1, in2, in3);	}      /* Don't run mpz_powm_ui when undefined.  */      if (mpz_sgn (in3) != 0)	{	  mpz_powm_ui (ref1, in1, in2i, in3);	  mpz_set (res1, in1);	  mpz_powm_ui (res1, res1, in2i, in3);	  if (mpz_cmp (ref1, res1) != 0)	    FAIL2 (mpz_powm_ui, in1, in2, in3);	  mpz_set (res1, in3);	  mpz_powm_ui (res1, in1, in2i, res1);	  if (mpz_cmp (ref1, res1) != 0)	    FAIL2 (mpz_powm_ui, in1, in2, in3);	}      {	r1 = mpz_gcd_ui (ref1, in1, in2i);	mpz_set (res1, in1);	r2 = mpz_gcd_ui (res1, res1, in2i);	if (mpz_cmp (ref1, res1) != 0)	  FAIL2 (mpz_gcd_ui, in1, in2, NULL);      }      if (mpz_cmp_ui (in2, 1L) > 0 && mpz_sgn (in1) != 0)	{	  /* Test mpz_remove */	  mpz_remove (ref1, in1, in2);	  mpz_set (res1, in1);	  mpz_remove (res1, res1, in2);	  if (mpz_cmp (ref1, res1) != 0)	    FAIL2 (mpz_remove, in1, in2, NULL);	  mpz_set (res1, in2);	  mpz_remove (res1, in1, res1);	  if (mpz_cmp (ref1, res1) != 0)	    FAIL2 (mpz_remove, in1, in2, NULL);	}      if (mpz_sgn (in2) != 0)	{	  /* Test mpz_divexact */	  mpz_mul (t, in1, in2);	  mpz_divexact (ref1, t, in2);	  mpz_set (res1, t);	  mpz_divexact (res1, res1, in2);	  if (mpz_cmp (ref1, res1) != 0)	    FAIL2 (mpz_divexact, t, in2, NULL);	  mpz_set (res1, in2);	  mpz_divexact (res1, t, res1);	  if (mpz_cmp (ref1, res1) != 0)	    FAIL2 (mpz_divexact, t, in2, NULL);	}      if (mpz_sgn (in2) > 0)	{	  /* Test mpz_divexact_gcd, same as mpz_divexact */	  mpz_mul (t, in1, in2);	  mpz_divexact_gcd (ref1, t, in2);	  mpz_set (res1, t);	  mpz_divexact_gcd (res1, res1, in2);	  if (mpz_cmp (ref1, res1) != 0)	    FAIL2 (mpz_divexact_gcd, t, in2, NULL);	  mpz_set (res1, in2);	  mpz_divexact_gcd (res1, t, res1);	  if (mpz_cmp (ref1, res1) != 0)	    FAIL2 (mpz_divexact_gcd, t, in2, NULL);	}    }  if (failures != 0)    {      fprintf (stderr, "mpz/reuse: %ld error%s\n", failures, "s" + (failures == 1));      exit (1);    }  mpz_clear (bs);  mpz_clear (in1);  mpz_clear (in2);  mpz_clear (in3);  mpz_clear (ref1);  mpz_clear (ref2);  mpz_clear (ref3);  mpz_clear (res1);  mpz_clear (res2);  mpz_clear (res3);  mpz_clear (t);  tests_end ();  exit (0);}voiddump (char *name, mpz_t in1, mpz_t in2, mpz_t in3){  printf ("failure in %s (", name);  mpz_out_str (stdout, -16, in1);  if (in2 != NULL)    {      printf (" ");      mpz_out_str (stdout, -16, in2);    }  if (in3 != NULL)    {      printf (" ");      mpz_out_str (stdout, -16, in3);    }  printf (")\n");}#endif /* ! DLL_EXPORT */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -