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

📄 demo.c

📁 Dropbear is an SSH 2 server, designed to be usable in small memory environments. It supports:
💻 C
📖 第 1 页 / 共 2 页
字号:
      mp_add_d(&b, 1, &b);      mp_reduce_2k_l(&b, &a, &d);      mp_sqr(&c, &c);      mp_add_d(&c, 1, &c);      mp_mod(&c, &a, &c);      if (mp_cmp(&b, &c) != MP_EQ) {	 printf("mp_reduce_2k_l() failed at step %lu\n", cnt);	 mp_tohex(&b, buf);	 printf("b == %s\n", buf);	 mp_tohex(&c, buf);	 printf("c == %s\n", buf);	 return EXIT_FAILURE;      }   }   printf("...Passed\n");#endif   div2_n = mul2_n = inv_n = expt_n = lcm_n = gcd_n = add_n =      sub_n = mul_n = div_n = sqr_n = mul2d_n = div2d_n = cnt = add_d_n =      sub_d_n = 0;   /* force KARA and TOOM to enable despite cutoffs */   KARATSUBA_SQR_CUTOFF = KARATSUBA_MUL_CUTOFF = 110;   TOOM_SQR_CUTOFF = TOOM_MUL_CUTOFF = 150;   for (;;) {      /* randomly clear and re-init one variable, this has the affect of triming the alloc space */      switch (abs(rand()) % 7) {      case 0:	 mp_clear(&a);	 mp_init(&a);	 break;      case 1:	 mp_clear(&b);	 mp_init(&b);	 break;      case 2:	 mp_clear(&c);	 mp_init(&c);	 break;      case 3:	 mp_clear(&d);	 mp_init(&d);	 break;      case 4:	 mp_clear(&e);	 mp_init(&e);	 break;      case 5:	 mp_clear(&f);	 mp_init(&f);	 break;      case 6:	 break;			/* don't clear any */      }      printf	 ("%4lu/%4lu/%4lu/%4lu/%4lu/%4lu/%4lu/%4lu/%4lu/%4lu/%4lu/%4lu/%4lu/%4lu/%4lu ",	  add_n, sub_n, mul_n, div_n, sqr_n, mul2d_n, div2d_n, gcd_n, lcm_n,	  expt_n, inv_n, div2_n, mul2_n, add_d_n, sub_d_n);      fgets(cmd, 4095, stdin);      cmd[strlen(cmd) - 1] = 0;      printf("%s  ]\r", cmd);      fflush(stdout);      if (!strcmp(cmd, "mul2d")) {	 ++mul2d_n;	 fgets(buf, 4095, stdin);	 mp_read_radix(&a, buf, 64);	 fgets(buf, 4095, stdin);	 sscanf(buf, "%d", &rr);	 fgets(buf, 4095, stdin);	 mp_read_radix(&b, buf, 64);	 mp_mul_2d(&a, rr, &a);	 a.sign = b.sign;	 if (mp_cmp(&a, &b) != MP_EQ) {	    printf("mul2d failed, rr == %d\n", rr);	    draw(&a);	    draw(&b);	    return 0;	 }      } else if (!strcmp(cmd, "div2d")) {	 ++div2d_n;	 fgets(buf, 4095, stdin);	 mp_read_radix(&a, buf, 64);	 fgets(buf, 4095, stdin);	 sscanf(buf, "%d", &rr);	 fgets(buf, 4095, stdin);	 mp_read_radix(&b, buf, 64);	 mp_div_2d(&a, rr, &a, &e);	 a.sign = b.sign;	 if (a.used == b.used && a.used == 0) {	    a.sign = b.sign = MP_ZPOS;	 }	 if (mp_cmp(&a, &b) != MP_EQ) {	    printf("div2d failed, rr == %d\n", rr);	    draw(&a);	    draw(&b);	    return 0;	 }      } else if (!strcmp(cmd, "add")) {	 ++add_n;	 fgets(buf, 4095, stdin);	 mp_read_radix(&a, buf, 64);	 fgets(buf, 4095, stdin);	 mp_read_radix(&b, buf, 64);	 fgets(buf, 4095, stdin);	 mp_read_radix(&c, buf, 64);	 mp_copy(&a, &d);	 mp_add(&d, &b, &d);	 if (mp_cmp(&c, &d) != MP_EQ) {	    printf("add %lu failure!\n", add_n);	    draw(&a);	    draw(&b);	    draw(&c);	    draw(&d);	    return 0;	 }	 /* test the sign/unsigned storage functions */	 rr = mp_signed_bin_size(&c);	 mp_to_signed_bin(&c, (unsigned char *) cmd);	 memset(cmd + rr, rand() & 255, sizeof(cmd) - rr);	 mp_read_signed_bin(&d, (unsigned char *) cmd, rr);	 if (mp_cmp(&c, &d) != MP_EQ) {	    printf("mp_signed_bin failure!\n");	    draw(&c);	    draw(&d);	    return 0;	 }	 rr = mp_unsigned_bin_size(&c);	 mp_to_unsigned_bin(&c, (unsigned char *) cmd);	 memset(cmd + rr, rand() & 255, sizeof(cmd) - rr);	 mp_read_unsigned_bin(&d, (unsigned char *) cmd, rr);	 if (mp_cmp_mag(&c, &d) != MP_EQ) {	    printf("mp_unsigned_bin failure!\n");	    draw(&c);	    draw(&d);	    return 0;	 }      } else if (!strcmp(cmd, "sub")) {	 ++sub_n;	 fgets(buf, 4095, stdin);	 mp_read_radix(&a, buf, 64);	 fgets(buf, 4095, stdin);	 mp_read_radix(&b, buf, 64);	 fgets(buf, 4095, stdin);	 mp_read_radix(&c, buf, 64);	 mp_copy(&a, &d);	 mp_sub(&d, &b, &d);	 if (mp_cmp(&c, &d) != MP_EQ) {	    printf("sub %lu failure!\n", sub_n);	    draw(&a);	    draw(&b);	    draw(&c);	    draw(&d);	    return 0;	 }      } else if (!strcmp(cmd, "mul")) {	 ++mul_n;	 fgets(buf, 4095, stdin);	 mp_read_radix(&a, buf, 64);	 fgets(buf, 4095, stdin);	 mp_read_radix(&b, buf, 64);	 fgets(buf, 4095, stdin);	 mp_read_radix(&c, buf, 64);	 mp_copy(&a, &d);	 mp_mul(&d, &b, &d);	 if (mp_cmp(&c, &d) != MP_EQ) {	    printf("mul %lu failure!\n", mul_n);	    draw(&a);	    draw(&b);	    draw(&c);	    draw(&d);	    return 0;	 }      } else if (!strcmp(cmd, "div")) {	 ++div_n;	 fgets(buf, 4095, stdin);	 mp_read_radix(&a, buf, 64);	 fgets(buf, 4095, stdin);	 mp_read_radix(&b, buf, 64);	 fgets(buf, 4095, stdin);	 mp_read_radix(&c, buf, 64);	 fgets(buf, 4095, stdin);	 mp_read_radix(&d, buf, 64);	 mp_div(&a, &b, &e, &f);	 if (mp_cmp(&c, &e) != MP_EQ || mp_cmp(&d, &f) != MP_EQ) {	    printf("div %lu %d, %d, failure!\n", div_n, mp_cmp(&c, &e),		   mp_cmp(&d, &f));	    draw(&a);	    draw(&b);	    draw(&c);	    draw(&d);	    draw(&e);	    draw(&f);	    return 0;	 }      } else if (!strcmp(cmd, "sqr")) {	 ++sqr_n;	 fgets(buf, 4095, stdin);	 mp_read_radix(&a, buf, 64);	 fgets(buf, 4095, stdin);	 mp_read_radix(&b, buf, 64);	 mp_copy(&a, &c);	 mp_sqr(&c, &c);	 if (mp_cmp(&b, &c) != MP_EQ) {	    printf("sqr %lu failure!\n", sqr_n);	    draw(&a);	    draw(&b);	    draw(&c);	    return 0;	 }      } else if (!strcmp(cmd, "gcd")) {	 ++gcd_n;	 fgets(buf, 4095, stdin);	 mp_read_radix(&a, buf, 64);	 fgets(buf, 4095, stdin);	 mp_read_radix(&b, buf, 64);	 fgets(buf, 4095, stdin);	 mp_read_radix(&c, buf, 64);	 mp_copy(&a, &d);	 mp_gcd(&d, &b, &d);	 d.sign = c.sign;	 if (mp_cmp(&c, &d) != MP_EQ) {	    printf("gcd %lu failure!\n", gcd_n);	    draw(&a);	    draw(&b);	    draw(&c);	    draw(&d);	    return 0;	 }      } else if (!strcmp(cmd, "lcm")) {	 ++lcm_n;	 fgets(buf, 4095, stdin);	 mp_read_radix(&a, buf, 64);	 fgets(buf, 4095, stdin);	 mp_read_radix(&b, buf, 64);	 fgets(buf, 4095, stdin);	 mp_read_radix(&c, buf, 64);	 mp_copy(&a, &d);	 mp_lcm(&d, &b, &d);	 d.sign = c.sign;	 if (mp_cmp(&c, &d) != MP_EQ) {	    printf("lcm %lu failure!\n", lcm_n);	    draw(&a);	    draw(&b);	    draw(&c);	    draw(&d);	    return 0;	 }      } else if (!strcmp(cmd, "expt")) {	 ++expt_n;	 fgets(buf, 4095, stdin);	 mp_read_radix(&a, buf, 64);	 fgets(buf, 4095, stdin);	 mp_read_radix(&b, buf, 64);	 fgets(buf, 4095, stdin);	 mp_read_radix(&c, buf, 64);	 fgets(buf, 4095, stdin);	 mp_read_radix(&d, buf, 64);	 mp_copy(&a, &e);	 mp_exptmod(&e, &b, &c, &e);	 if (mp_cmp(&d, &e) != MP_EQ) {	    printf("expt %lu failure!\n", expt_n);	    draw(&a);	    draw(&b);	    draw(&c);	    draw(&d);	    draw(&e);	    return 0;	 }      } else if (!strcmp(cmd, "invmod")) {	 ++inv_n;	 fgets(buf, 4095, stdin);	 mp_read_radix(&a, buf, 64);	 fgets(buf, 4095, stdin);	 mp_read_radix(&b, buf, 64);	 fgets(buf, 4095, stdin);	 mp_read_radix(&c, buf, 64);	 mp_invmod(&a, &b, &d);	 mp_mulmod(&d, &a, &b, &e);	 if (mp_cmp_d(&e, 1) != MP_EQ) {	    printf("inv [wrong value from MPI?!] failure\n");	    draw(&a);	    draw(&b);	    draw(&c);	    draw(&d);	    mp_gcd(&a, &b, &e);	    draw(&e);	    return 0;	 }      } else if (!strcmp(cmd, "div2")) {	 ++div2_n;	 fgets(buf, 4095, stdin);	 mp_read_radix(&a, buf, 64);	 fgets(buf, 4095, stdin);	 mp_read_radix(&b, buf, 64);	 mp_div_2(&a, &c);	 if (mp_cmp(&c, &b) != MP_EQ) {	    printf("div_2 %lu failure\n", div2_n);	    draw(&a);	    draw(&b);	    draw(&c);	    return 0;	 }      } else if (!strcmp(cmd, "mul2")) {	 ++mul2_n;	 fgets(buf, 4095, stdin);	 mp_read_radix(&a, buf, 64);	 fgets(buf, 4095, stdin);	 mp_read_radix(&b, buf, 64);	 mp_mul_2(&a, &c);	 if (mp_cmp(&c, &b) != MP_EQ) {	    printf("mul_2 %lu failure\n", mul2_n);	    draw(&a);	    draw(&b);	    draw(&c);	    return 0;	 }      } else if (!strcmp(cmd, "add_d")) {	 ++add_d_n;	 fgets(buf, 4095, stdin);	 mp_read_radix(&a, buf, 64);	 fgets(buf, 4095, stdin);	 sscanf(buf, "%d", &ix);	 fgets(buf, 4095, stdin);	 mp_read_radix(&b, buf, 64);	 mp_add_d(&a, ix, &c);	 if (mp_cmp(&b, &c) != MP_EQ) {	    printf("add_d %lu failure\n", add_d_n);	    draw(&a);	    draw(&b);	    draw(&c);	    printf("d == %d\n", ix);	    return 0;	 }      } else if (!strcmp(cmd, "sub_d")) {	 ++sub_d_n;	 fgets(buf, 4095, stdin);	 mp_read_radix(&a, buf, 64);	 fgets(buf, 4095, stdin);	 sscanf(buf, "%d", &ix);	 fgets(buf, 4095, stdin);	 mp_read_radix(&b, buf, 64);	 mp_sub_d(&a, ix, &c);	 if (mp_cmp(&b, &c) != MP_EQ) {	    printf("sub_d %lu failure\n", sub_d_n);	    draw(&a);	    draw(&b);	    draw(&c);	    printf("d == %d\n", ix);	    return 0;	 }      }   }   return 0;}

⌨️ 快捷键说明

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