forked from ibphoenix/tomsfastmath
test/mtest/stest: improve a bit
fix compiler warnings make internal buffer size dependant on its possible size fix return values
This commit is contained in:
parent
0b1ad14d7b
commit
56438df4cf
58
demo/stest.c
58
demo/stest.c
@ -11,8 +11,29 @@
|
|||||||
#define DISPLAY_P(...) printf(__VA_ARGS__)
|
#define DISPLAY_P(...) printf(__VA_ARGS__)
|
||||||
#else
|
#else
|
||||||
#define DISPLAY_P(...) (void)0
|
#define DISPLAY_P(...) (void)0
|
||||||
|
#define fp_dump(n,p) do{}while(0)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef fp_dump
|
||||||
|
void fp_dump(const char* n, fp_int* p)
|
||||||
|
{
|
||||||
|
int sz;
|
||||||
|
if (fp_radix_size(p, 2, &sz) != FP_OKAY)
|
||||||
|
return;
|
||||||
|
char* str = malloc(sz);
|
||||||
|
if (!str)
|
||||||
|
return;
|
||||||
|
#ifdef STEST_VERBOSE
|
||||||
|
fp_toradix(p, str, 2);
|
||||||
|
DISPLAY_P("%s = 0b%s\n", n, str);
|
||||||
|
fp_toradix(p, str, 16);
|
||||||
|
DISPLAY_P("%s = 0x%s\n", n, str);
|
||||||
|
#endif
|
||||||
|
fp_toradix(p, str, 10);
|
||||||
|
DISPLAY_P("%s = %s\n", n, str);
|
||||||
|
free(str);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef GBA_MODE
|
#ifdef GBA_MODE
|
||||||
int c_main(void)
|
int c_main(void)
|
||||||
@ -45,7 +66,7 @@ int main(void)
|
|||||||
fp_mul(&a, &b, &d);
|
fp_mul(&a, &b, &d);
|
||||||
if (fp_cmp(&c, &d)) {
|
if (fp_cmp(&c, &d)) {
|
||||||
DISPLAY("mul failed\n");
|
DISPLAY("mul failed\n");
|
||||||
return 0;
|
return -1;
|
||||||
} else {
|
} else {
|
||||||
DISPLAY("mul passed\n");
|
DISPLAY("mul passed\n");
|
||||||
}
|
}
|
||||||
@ -57,7 +78,7 @@ int main(void)
|
|||||||
fp_mul(&a, &b, &d);
|
fp_mul(&a, &b, &d);
|
||||||
if (fp_cmp(&c, &d)) {
|
if (fp_cmp(&c, &d)) {
|
||||||
DISPLAY("mul failed\n");
|
DISPLAY("mul failed\n");
|
||||||
return 0;
|
return -1;
|
||||||
} else {
|
} else {
|
||||||
DISPLAY("mul passed\n");
|
DISPLAY("mul passed\n");
|
||||||
}
|
}
|
||||||
@ -69,7 +90,7 @@ int main(void)
|
|||||||
fp_mul(&a, &b, &d);
|
fp_mul(&a, &b, &d);
|
||||||
if (fp_cmp(&c, &d)) {
|
if (fp_cmp(&c, &d)) {
|
||||||
DISPLAY("mul failed\n");
|
DISPLAY("mul failed\n");
|
||||||
return 0;
|
return -1;
|
||||||
} else {
|
} else {
|
||||||
DISPLAY("mul passed\n");
|
DISPLAY("mul passed\n");
|
||||||
}
|
}
|
||||||
@ -80,7 +101,7 @@ int main(void)
|
|||||||
fp_sqr(&a, &c);
|
fp_sqr(&a, &c);
|
||||||
if (fp_cmp(&c, &b)) {
|
if (fp_cmp(&c, &b)) {
|
||||||
DISPLAY("sqr failed\n");
|
DISPLAY("sqr failed\n");
|
||||||
return 0;
|
return -1;
|
||||||
} else {
|
} else {
|
||||||
DISPLAY("sqr passed\n");
|
DISPLAY("sqr passed\n");
|
||||||
}
|
}
|
||||||
@ -90,7 +111,7 @@ int main(void)
|
|||||||
fp_sqr(&a, &c);
|
fp_sqr(&a, &c);
|
||||||
if (fp_cmp(&c, &b)) {
|
if (fp_cmp(&c, &b)) {
|
||||||
DISPLAY("sqr failed\n");
|
DISPLAY("sqr failed\n");
|
||||||
return 0;
|
return -1;
|
||||||
} else {
|
} else {
|
||||||
DISPLAY("sqr passed\n");
|
DISPLAY("sqr passed\n");
|
||||||
}
|
}
|
||||||
@ -100,7 +121,7 @@ int main(void)
|
|||||||
fp_sqr(&a, &c);
|
fp_sqr(&a, &c);
|
||||||
if (fp_cmp(&c, &b)) {
|
if (fp_cmp(&c, &b)) {
|
||||||
DISPLAY("sqr failed\n");
|
DISPLAY("sqr failed\n");
|
||||||
return 0;
|
return -1;
|
||||||
} else {
|
} else {
|
||||||
DISPLAY("sqr passed\n");
|
DISPLAY("sqr passed\n");
|
||||||
}
|
}
|
||||||
@ -109,12 +130,19 @@ int main(void)
|
|||||||
/* montgomery reductions */
|
/* montgomery reductions */
|
||||||
fp_read_radix(&a, "234892374892374893489123428937892781237863278637826327367637836278362783627836783678363", 10);
|
fp_read_radix(&a, "234892374892374893489123428937892781237863278637826327367637836278362783627836783678363", 10);
|
||||||
fp_read_radix(&b, "4447823492749823749234123489273987393983289319382762756425425425642727352327452374521", 10);
|
fp_read_radix(&b, "4447823492749823749234123489273987393983289319382762756425425425642727352327452374521", 10);
|
||||||
|
#ifdef FP_64BIT
|
||||||
|
fp_read_radix(&c, "942974496560863503657226741422301598807235487941674147660989764036913926327577165648", 10);
|
||||||
|
#else
|
||||||
fp_read_radix(&c, "2396271882990732698083317035605836523697277786556053771759862552557086442129695099100", 10);
|
fp_read_radix(&c, "2396271882990732698083317035605836523697277786556053771759862552557086442129695099100", 10);
|
||||||
fp_montgomery_setup(&b, &dp);
|
#endif
|
||||||
|
if (fp_montgomery_setup(&b, &dp) != FP_OKAY)
|
||||||
|
DISPLAY("mont setup failed\n");
|
||||||
fp_montgomery_reduce(&a, &b, dp);
|
fp_montgomery_reduce(&a, &b, dp);
|
||||||
if (fp_cmp(&a, &c)) {
|
if (fp_cmp(&a, &c)) {
|
||||||
DISPLAY("mont failed\n");
|
DISPLAY("mont failed\n");
|
||||||
return 0;
|
fp_dump("a (is )", &a);
|
||||||
|
fp_dump("c (should)", &c);
|
||||||
|
return -1;
|
||||||
} else {
|
} else {
|
||||||
DISPLAY("mont passed\n");
|
DISPLAY("mont passed\n");
|
||||||
}
|
}
|
||||||
@ -122,11 +150,14 @@ int main(void)
|
|||||||
fp_read_radix(&a, "2348923748923748934891234456645654645645684576353428937892781237863278637826327367637836278362783627836783678363", 10);
|
fp_read_radix(&a, "2348923748923748934891234456645654645645684576353428937892781237863278637826327367637836278362783627836783678363", 10);
|
||||||
fp_read_radix(&b, "444782349274982374923412348927398739398328931938276275642542542564272735232745237452123424324324444121111119", 10);
|
fp_read_radix(&b, "444782349274982374923412348927398739398328931938276275642542542564272735232745237452123424324324444121111119", 10);
|
||||||
fp_read_radix(&c, "45642613844554582908652603086180267403823312390990082328515008314514368668691233331246183943400359349283420", 10);
|
fp_read_radix(&c, "45642613844554582908652603086180267403823312390990082328515008314514368668691233331246183943400359349283420", 10);
|
||||||
fp_montgomery_setup(&b, &dp);
|
if (fp_montgomery_setup(&b, &dp) != FP_OKAY)
|
||||||
|
DISPLAY("mont setup failed\n");
|
||||||
fp_montgomery_reduce(&a, &b, dp);
|
fp_montgomery_reduce(&a, &b, dp);
|
||||||
if (fp_cmp(&a, &c)) {
|
if (fp_cmp(&a, &c)) {
|
||||||
DISPLAY("mont failed\n");
|
DISPLAY("mont failed\n");
|
||||||
return 0;
|
fp_dump("a (is )", &a);
|
||||||
|
fp_dump("c (should)", &c);
|
||||||
|
return -1;
|
||||||
} else {
|
} else {
|
||||||
DISPLAY("mont passed\n");
|
DISPLAY("mont passed\n");
|
||||||
}
|
}
|
||||||
@ -134,11 +165,14 @@ int main(void)
|
|||||||
fp_read_radix(&a, "234823424242342923748923748934891234456645654645645684576353424972378234762378623891236834132352375235378462378489378927812378632786378263273676378362783627555555555539568389052478124618461834763837685723645827529034853490580134568947341278498542893481762349723907847892983627836783678363", 10);
|
fp_read_radix(&a, "234823424242342923748923748934891234456645654645645684576353424972378234762378623891236834132352375235378462378489378927812378632786378263273676378362783627555555555539568389052478124618461834763837685723645827529034853490580134568947341278498542893481762349723907847892983627836783678363", 10);
|
||||||
fp_read_radix(&b, "44478234927456563455982374923412348927398739398328931938276275642485623481638279025465891276312903262837562349056234783648712314678120389173890128905425242424239784256427", 10);
|
fp_read_radix(&b, "44478234927456563455982374923412348927398739398328931938276275642485623481638279025465891276312903262837562349056234783648712314678120389173890128905425242424239784256427", 10);
|
||||||
fp_read_radix(&c, "33160865265453361650564031464519042126185632333462754084489985719613480783282357410514898819797738034600484519472656152351777186694609218202276509271061460265488348645081", 10);
|
fp_read_radix(&c, "33160865265453361650564031464519042126185632333462754084489985719613480783282357410514898819797738034600484519472656152351777186694609218202276509271061460265488348645081", 10);
|
||||||
fp_montgomery_setup(&b, &dp);
|
if (fp_montgomery_setup(&b, &dp) != FP_OKAY)
|
||||||
|
DISPLAY("mont setup failed\n");
|
||||||
fp_montgomery_reduce(&a, &b, dp);
|
fp_montgomery_reduce(&a, &b, dp);
|
||||||
if (fp_cmp(&a, &c)) {
|
if (fp_cmp(&a, &c)) {
|
||||||
DISPLAY("mont failed\n");
|
DISPLAY("mont failed\n");
|
||||||
return 0;
|
fp_dump("a (is )", &a);
|
||||||
|
fp_dump("c (should)", &c);
|
||||||
|
return -1;
|
||||||
} else {
|
} else {
|
||||||
DISPLAY("mont passed\n");
|
DISPLAY("mont passed\n");
|
||||||
}
|
}
|
||||||
|
105
demo/test.c
105
demo/test.c
@ -8,7 +8,11 @@ void draw(fp_int *a)
|
|||||||
int x;
|
int x;
|
||||||
printf("%d, %d, ", a->used, a->sign);
|
printf("%d, %d, ", a->used, a->sign);
|
||||||
for (x = a->used - 1; x >= 0; x--) {
|
for (x = a->used - 1; x >= 0; x--) {
|
||||||
|
#if SIZEOF_FP_DIGIT == 4
|
||||||
printf("%08lx ", a->dp[x]);
|
printf("%08lx ", a->dp[x]);
|
||||||
|
#else
|
||||||
|
printf("%016llx ", a->dp[x]);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
printf("\n");
|
printf("\n");
|
||||||
}
|
}
|
||||||
@ -16,10 +20,12 @@ void draw(fp_int *a)
|
|||||||
int myrng(unsigned char *dst, int len, void *dat)
|
int myrng(unsigned char *dst, int len, void *dat)
|
||||||
{
|
{
|
||||||
int x;
|
int x;
|
||||||
|
(void)dat;
|
||||||
for (x = 0; x < len; x++) dst[x] = rand() & 0xFF;
|
for (x = 0; x < len; x++) dst[x] = rand() & 0xFF;
|
||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef TESTING
|
||||||
/* RDTSC from Scott Duplichan */
|
/* RDTSC from Scott Duplichan */
|
||||||
static ulong64 TIMFUNC (void)
|
static ulong64 TIMFUNC (void)
|
||||||
{
|
{
|
||||||
@ -68,22 +74,30 @@ static ulong64 TIMFUNC (void)
|
|||||||
#error need rdtsc function for this build
|
#error need rdtsc function for this build
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
char cmd[4096], buf[4096];
|
char cmd[4096], buf[4096];
|
||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
fp_int a,b,c,d,e,f;
|
fp_int a,b,c,d,e,f;
|
||||||
|
unsigned long expt_n, add_n, sub_n, mul_n, div_n, sqr_n, mul2d_n, div2d_n, gcd_n, lcm_n, inv_n,
|
||||||
|
div2_n, mul2_n, add_d_n, sub_d_n, mul_d_n, cnt, rr, ix;
|
||||||
|
#ifndef TESTING
|
||||||
|
unsigned long t;
|
||||||
fp_digit fp;
|
fp_digit fp;
|
||||||
int n, err;
|
int n, err;
|
||||||
unsigned long expt_n, add_n, sub_n, mul_n, div_n, sqr_n, mul2d_n, div2d_n, gcd_n, lcm_n, inv_n,
|
ulong64 t1, t2;
|
||||||
div2_n, mul2_n, add_d_n, sub_d_n, mul_d_n, t, cnt, rr, ix;
|
#endif
|
||||||
ulong64 t1, t2;
|
|
||||||
|
|
||||||
srand(time(NULL));
|
srand(time(NULL));
|
||||||
printf("TFM Ident string:\n%s\n\n", fp_ident());
|
printf("TFM Ident string:\n%s\n\n", fp_ident());
|
||||||
fp_zero(&b); fp_zero(&c); fp_zero(&d); fp_zero(&e); fp_zero(&f);
|
fp_zero(&b); fp_zero(&c); fp_zero(&d); fp_zero(&e); fp_zero(&f);
|
||||||
fp_zero(&a); draw(&a);
|
fp_zero(&a);
|
||||||
|
|
||||||
|
#ifndef TESTING
|
||||||
|
|
||||||
|
draw(&a);
|
||||||
|
|
||||||
/* test set and simple shifts */
|
/* test set and simple shifts */
|
||||||
printf("Testing mul/div 2\n");
|
printf("Testing mul/div 2\n");
|
||||||
@ -217,17 +231,12 @@ int main(void)
|
|||||||
}
|
}
|
||||||
printf("\n\n");
|
printf("\n\n");
|
||||||
|
|
||||||
#ifdef TESTING
|
|
||||||
goto testing;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if 1
|
#if 1
|
||||||
|
|
||||||
t1 = TIMFUNC();
|
t1 = TIMFUNC();
|
||||||
sleep(1);
|
sleep(1);
|
||||||
printf("Ticks per second: %llu\n", TIMFUNC() - t1);
|
printf("Ticks per second: %llu\n", TIMFUNC() - t1);
|
||||||
|
|
||||||
goto multtime;
|
|
||||||
/* do some timings... */
|
/* do some timings... */
|
||||||
printf("Addition:\n");
|
printf("Addition:\n");
|
||||||
for (t = 2; t <= FP_SIZE/2; t += 2) {
|
for (t = 2; t <= FP_SIZE/2; t += 2) {
|
||||||
@ -252,7 +261,6 @@ goto multtime;
|
|||||||
}
|
}
|
||||||
printf("%5lu-bit: %9llu\n", t * DIGIT_BIT, t2);
|
printf("%5lu-bit: %9llu\n", t * DIGIT_BIT, t2);
|
||||||
}
|
}
|
||||||
multtime:
|
|
||||||
printf("Multiplication:\n");
|
printf("Multiplication:\n");
|
||||||
for (t = 2; t < FP_SIZE/2; t += 2) {
|
for (t = 2; t < FP_SIZE/2; t += 2) {
|
||||||
fp_zero(&a);
|
fp_zero(&a);
|
||||||
@ -336,8 +344,7 @@ multtime:
|
|||||||
}
|
}
|
||||||
printf("%5lu-bit: %9llu\n", t * DIGIT_BIT, t2);
|
printf("%5lu-bit: %9llu\n", t * DIGIT_BIT, t2);
|
||||||
}
|
}
|
||||||
//#else
|
|
||||||
sqrtime:
|
|
||||||
printf("Squaring:\n");
|
printf("Squaring:\n");
|
||||||
for (t = 2; t < FP_SIZE/2; t += 2) {
|
for (t = 2; t < FP_SIZE/2; t += 2) {
|
||||||
fp_zero(&a);
|
fp_zero(&a);
|
||||||
@ -418,7 +425,7 @@ sqrtime:
|
|||||||
}
|
}
|
||||||
printf("%5lu-bit: %9llu\n", t * DIGIT_BIT, t2);
|
printf("%5lu-bit: %9llu\n", t * DIGIT_BIT, t2);
|
||||||
}
|
}
|
||||||
invmodtime:
|
|
||||||
printf("Invmod:\n");
|
printf("Invmod:\n");
|
||||||
for (t = 2; t < FP_SIZE/2; t += 2) {
|
for (t = 2; t < FP_SIZE/2; t += 2) {
|
||||||
fp_zero(&a);
|
fp_zero(&a);
|
||||||
@ -505,8 +512,7 @@ invmodtime:
|
|||||||
}
|
}
|
||||||
printf("%5lu-bit: %9llu\n", t * DIGIT_BIT, t2);
|
printf("%5lu-bit: %9llu\n", t * DIGIT_BIT, t2);
|
||||||
}
|
}
|
||||||
//#else
|
|
||||||
monttime:
|
|
||||||
printf("Montgomery:\n");
|
printf("Montgomery:\n");
|
||||||
for (t = 2; t <= (FP_SIZE/2)-4; t += 2) {
|
for (t = 2; t <= (FP_SIZE/2)-4; t += 2) {
|
||||||
// printf("%5lu-bit: %9llu\n", t * DIGIT_BIT, t2);
|
// printf("%5lu-bit: %9llu\n", t * DIGIT_BIT, t2);
|
||||||
@ -596,8 +602,7 @@ monttime:
|
|||||||
}
|
}
|
||||||
printf("%5lu-bit: %9llu\n", t * DIGIT_BIT, t2);
|
printf("%5lu-bit: %9llu\n", t * DIGIT_BIT, t2);
|
||||||
}
|
}
|
||||||
//#else
|
|
||||||
expttime:
|
|
||||||
printf("Exptmod:\n");
|
printf("Exptmod:\n");
|
||||||
|
|
||||||
for (t = 512/DIGIT_BIT; t <= (FP_SIZE/2)-2; t += 256/DIGIT_BIT) {
|
for (t = 512/DIGIT_BIT; t <= (FP_SIZE/2)-2; t += 256/DIGIT_BIT) {
|
||||||
@ -629,7 +634,7 @@ expttime:
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
testing:
|
#endif
|
||||||
|
|
||||||
fp_zero(&b); fp_zero(&c); fp_zero(&d); fp_zero(&e); fp_zero(&f); fp_zero(&a);
|
fp_zero(&b); fp_zero(&c); fp_zero(&d); fp_zero(&e); fp_zero(&f); fp_zero(&a);
|
||||||
|
|
||||||
@ -650,7 +655,7 @@ testing:
|
|||||||
fp_mul_2d(&a, rr, &a);
|
fp_mul_2d(&a, rr, &a);
|
||||||
a.sign = b.sign;
|
a.sign = b.sign;
|
||||||
if (fp_cmp(&a, &b) != FP_EQ) {
|
if (fp_cmp(&a, &b) != FP_EQ) {
|
||||||
printf("mul2d failed, rr == %lu\n",rr);
|
printf("\nmul2d failed, rr == %lu\n",rr);
|
||||||
draw(&a);
|
draw(&a);
|
||||||
draw(&b);
|
draw(&b);
|
||||||
return 0;
|
return 0;
|
||||||
@ -664,7 +669,7 @@ testing:
|
|||||||
a.sign = b.sign;
|
a.sign = b.sign;
|
||||||
if (a.used == b.used && a.used == 0) { a.sign = b.sign = FP_ZPOS; }
|
if (a.used == b.used && a.used == 0) { a.sign = b.sign = FP_ZPOS; }
|
||||||
if (fp_cmp(&a, &b) != FP_EQ) {
|
if (fp_cmp(&a, &b) != FP_EQ) {
|
||||||
printf("div2d failed, rr == %lu\n",rr);
|
printf("\ndiv2d failed, rr == %lu\n",rr);
|
||||||
draw(&a);
|
draw(&a);
|
||||||
draw(&b);
|
draw(&b);
|
||||||
return 0;
|
return 0;
|
||||||
@ -676,7 +681,7 @@ testing:
|
|||||||
fp_copy(&a, &d);
|
fp_copy(&a, &d);
|
||||||
fp_add(&d, &b, &d);
|
fp_add(&d, &b, &d);
|
||||||
if (fp_cmp(&c, &d) != FP_EQ) {
|
if (fp_cmp(&c, &d) != FP_EQ) {
|
||||||
printf("add %lu failure!\n", add_n);
|
printf("\nadd %lu failure!\n", add_n);
|
||||||
draw(&a);draw(&b);draw(&c);draw(&d);
|
draw(&a);draw(&b);draw(&c);draw(&d);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -688,7 +693,7 @@ draw(&a);draw(&b);draw(&c);draw(&d);
|
|||||||
memset(cmd+rr, rand()&255, sizeof(cmd)-rr);
|
memset(cmd+rr, rand()&255, sizeof(cmd)-rr);
|
||||||
fp_read_signed_bin(&d, (unsigned char *)cmd, rr);
|
fp_read_signed_bin(&d, (unsigned char *)cmd, rr);
|
||||||
if (fp_cmp(&c, &d) != FP_EQ) {
|
if (fp_cmp(&c, &d) != FP_EQ) {
|
||||||
printf("fp_signed_bin failure!\n");
|
printf("f\np_signed_bin failure!\n");
|
||||||
draw(&c);
|
draw(&c);
|
||||||
draw(&d);
|
draw(&d);
|
||||||
return 0;
|
return 0;
|
||||||
@ -699,7 +704,7 @@ draw(&a);draw(&b);draw(&c);draw(&d);
|
|||||||
memset(cmd+rr, rand()&255, sizeof(cmd)-rr);
|
memset(cmd+rr, rand()&255, sizeof(cmd)-rr);
|
||||||
fp_read_unsigned_bin(&d, (unsigned char *)cmd, rr);
|
fp_read_unsigned_bin(&d, (unsigned char *)cmd, rr);
|
||||||
if (fp_cmp_mag(&c, &d) != FP_EQ) {
|
if (fp_cmp_mag(&c, &d) != FP_EQ) {
|
||||||
printf("fp_unsigned_bin failure!\n");
|
printf("\nfp_unsigned_bin failure!\n");
|
||||||
draw(&c);
|
draw(&c);
|
||||||
draw(&d);
|
draw(&d);
|
||||||
return 0;
|
return 0;
|
||||||
@ -712,98 +717,98 @@ draw(&a);draw(&b);draw(&c);draw(&d);
|
|||||||
fp_copy(&a, &d);
|
fp_copy(&a, &d);
|
||||||
fp_sub(&d, &b, &d);
|
fp_sub(&d, &b, &d);
|
||||||
if (fp_cmp(&c, &d) != FP_EQ) {
|
if (fp_cmp(&c, &d) != FP_EQ) {
|
||||||
printf("sub %lu failure!\n", sub_n);
|
printf("\nsub %lu failure!\n", sub_n);
|
||||||
draw(&a);draw(&b);draw(&c);draw(&d);
|
draw(&a);draw(&b);draw(&c);draw(&d);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
} else if (!strcmp(cmd, "mul")) {
|
} else if (!strcmp(cmd, "mul")) { ++mul_n;
|
||||||
fgets(buf, 4095, stdin); fp_read_radix(&a, buf, 64);
|
fgets(buf, 4095, stdin); fp_read_radix(&a, buf, 64);
|
||||||
fgets(buf, 4095, stdin); fp_read_radix(&b, buf, 64);
|
fgets(buf, 4095, stdin); fp_read_radix(&b, buf, 64);
|
||||||
fgets(buf, 4095, stdin); fp_read_radix(&c, buf, 64);
|
fgets(buf, 4095, stdin); fp_read_radix(&c, buf, 64);
|
||||||
//continue;
|
//continue;
|
||||||
fp_copy(&a, &d);
|
fp_copy(&a, &d);
|
||||||
fp_mul(&d, &b, &d); ++mul_n;
|
fp_mul(&d, &b, &d);
|
||||||
if (fp_cmp(&c, &d) != FP_EQ) {
|
if (fp_cmp(&c, &d) != FP_EQ) {
|
||||||
printf("mul %lu failure!\n", mul_n);
|
printf("\nmul %lu failure!\n", mul_n);
|
||||||
draw(&a);draw(&b);draw(&c);draw(&d);
|
draw(&a);draw(&b);draw(&c);draw(&d);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
} else if (!strcmp(cmd, "div")) {
|
} else if (!strcmp(cmd, "div")) { ++div_n;
|
||||||
fgets(buf, 4095, stdin); fp_read_radix(&a, buf, 64);
|
fgets(buf, 4095, stdin); fp_read_radix(&a, buf, 64);
|
||||||
fgets(buf, 4095, stdin); fp_read_radix(&b, buf, 64);
|
fgets(buf, 4095, stdin); fp_read_radix(&b, buf, 64);
|
||||||
fgets(buf, 4095, stdin); fp_read_radix(&c, buf, 64);
|
fgets(buf, 4095, stdin); fp_read_radix(&c, buf, 64);
|
||||||
fgets(buf, 4095, stdin); fp_read_radix(&d, buf, 64);
|
fgets(buf, 4095, stdin); fp_read_radix(&d, buf, 64);
|
||||||
// continue;
|
// continue;
|
||||||
fp_div(&a, &b, &e, &f); ++div_n;
|
fp_div(&a, &b, &e, &f);
|
||||||
if (fp_cmp(&c, &e) != FP_EQ || fp_cmp(&d, &f) != FP_EQ) {
|
if (fp_cmp(&c, &e) != FP_EQ || fp_cmp(&d, &f) != FP_EQ) {
|
||||||
printf("div %lu failure!\n", div_n);
|
printf("\ndiv %lu failure!\n", div_n);
|
||||||
draw(&a);draw(&b);draw(&c);draw(&d); draw(&e); draw(&f);
|
draw(&a);draw(&b);draw(&c);draw(&d); draw(&e); draw(&f);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if (!strcmp(cmd, "sqr")) {
|
} else if (!strcmp(cmd, "sqr")) { ++sqr_n;
|
||||||
fgets(buf, 4095, stdin); fp_read_radix(&a, buf, 64);
|
fgets(buf, 4095, stdin); fp_read_radix(&a, buf, 64);
|
||||||
fgets(buf, 4095, stdin); fp_read_radix(&b, buf, 64);
|
fgets(buf, 4095, stdin); fp_read_radix(&b, buf, 64);
|
||||||
// continue;
|
// continue;
|
||||||
fp_copy(&a, &c);
|
fp_copy(&a, &c);
|
||||||
fp_sqr(&c, &c); ++sqr_n;
|
fp_sqr(&c, &c);
|
||||||
if (fp_cmp(&b, &c) != FP_EQ) {
|
if (fp_cmp(&b, &c) != FP_EQ) {
|
||||||
printf("sqr %lu failure!\n", sqr_n);
|
printf("\nsqr %lu failure!\n", sqr_n);
|
||||||
draw(&a);draw(&b);draw(&c);
|
draw(&a);draw(&b);draw(&c);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
} else if (!strcmp(cmd, "gcd")) {
|
} else if (!strcmp(cmd, "gcd")) { ++gcd_n;
|
||||||
fgets(buf, 4095, stdin); fp_read_radix(&a, buf, 64);
|
fgets(buf, 4095, stdin); fp_read_radix(&a, buf, 64);
|
||||||
fgets(buf, 4095, stdin); fp_read_radix(&b, buf, 64);
|
fgets(buf, 4095, stdin); fp_read_radix(&b, buf, 64);
|
||||||
fgets(buf, 4095, stdin); fp_read_radix(&c, buf, 64);
|
fgets(buf, 4095, stdin); fp_read_radix(&c, buf, 64);
|
||||||
// continue;
|
// continue;
|
||||||
fp_copy(&a, &d);
|
fp_copy(&a, &d);
|
||||||
fp_gcd(&d, &b, &d); ++gcd_n;
|
fp_gcd(&d, &b, &d);
|
||||||
d.sign = c.sign;
|
d.sign = c.sign;
|
||||||
if (fp_cmp(&c, &d) != FP_EQ) {
|
if (fp_cmp(&c, &d) != FP_EQ) {
|
||||||
printf("gcd %lu failure!\n", gcd_n);
|
printf("\ngcd %lu failure!\n", gcd_n);
|
||||||
draw(&a);draw(&b);draw(&c);draw(&d);
|
draw(&a);draw(&b);draw(&c);draw(&d);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
} else if (!strcmp(cmd, "lcm")) {
|
} else if (!strcmp(cmd, "lcm")) { ++lcm_n;
|
||||||
fgets(buf, 4095, stdin); fp_read_radix(&a, buf, 64);
|
fgets(buf, 4095, stdin); fp_read_radix(&a, buf, 64);
|
||||||
fgets(buf, 4095, stdin); fp_read_radix(&b, buf, 64);
|
fgets(buf, 4095, stdin); fp_read_radix(&b, buf, 64);
|
||||||
fgets(buf, 4095, stdin); fp_read_radix(&c, buf, 64);
|
fgets(buf, 4095, stdin); fp_read_radix(&c, buf, 64);
|
||||||
//continue;
|
//continue;
|
||||||
fp_copy(&a, &d);
|
fp_copy(&a, &d);
|
||||||
fp_lcm(&d, &b, &d); ++lcm_n;
|
fp_lcm(&d, &b, &d);
|
||||||
d.sign = c.sign;
|
d.sign = c.sign;
|
||||||
if (fp_cmp(&c, &d) != FP_EQ) {
|
if (fp_cmp(&c, &d) != FP_EQ) {
|
||||||
printf("lcm %lu failure!\n", lcm_n);
|
printf("\nlcm %lu failure!\n", lcm_n);
|
||||||
draw(&a);draw(&b);draw(&c);draw(&d);
|
draw(&a);draw(&b);draw(&c);draw(&d);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
} else if (!strcmp(cmd, "expt")) {
|
} else if (!strcmp(cmd, "expt")) { ++expt_n;
|
||||||
fgets(buf, 4095, stdin); fp_read_radix(&a, buf, 64);
|
fgets(buf, 4095, stdin); fp_read_radix(&a, buf, 64);
|
||||||
fgets(buf, 4095, stdin); fp_read_radix(&b, buf, 64);
|
fgets(buf, 4095, stdin); fp_read_radix(&b, buf, 64);
|
||||||
fgets(buf, 4095, stdin); fp_read_radix(&c, buf, 64);
|
fgets(buf, 4095, stdin); fp_read_radix(&c, buf, 64);
|
||||||
fgets(buf, 4095, stdin); fp_read_radix(&d, buf, 64);
|
fgets(buf, 4095, stdin); fp_read_radix(&d, buf, 64);
|
||||||
// continue;
|
// continue;
|
||||||
fp_copy(&a, &e);
|
fp_copy(&a, &e);
|
||||||
fp_exptmod(&e, &b, &c, &e); ++expt_n;
|
fp_exptmod(&e, &b, &c, &e);
|
||||||
if (fp_cmp(&d, &e) != FP_EQ) {
|
if (fp_cmp(&d, &e) != FP_EQ) {
|
||||||
printf("expt %lu failure!\n", expt_n);
|
printf("\nexpt %lu failure!\n", expt_n);
|
||||||
draw(&a);draw(&b);draw(&c);draw(&d); draw(&e);
|
draw(&a);draw(&b);draw(&c);draw(&d); draw(&e);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
} else if (!strcmp(cmd, "invmod")) {
|
} else if (!strcmp(cmd, "invmod")) { ++inv_n;
|
||||||
fgets(buf, 4095, stdin); fp_read_radix(&a, buf, 64);
|
fgets(buf, 4095, stdin); fp_read_radix(&a, buf, 64);
|
||||||
fgets(buf, 4095, stdin); fp_read_radix(&b, buf, 64);
|
fgets(buf, 4095, stdin); fp_read_radix(&b, buf, 64);
|
||||||
fgets(buf, 4095, stdin); fp_read_radix(&c, buf, 64);
|
fgets(buf, 4095, stdin); fp_read_radix(&c, buf, 64);
|
||||||
//continue;
|
//continue;
|
||||||
fp_invmod(&a, &b, &d);
|
fp_invmod(&a, &b, &d);
|
||||||
#if 1
|
#if 1
|
||||||
fp_mulmod(&d,&a,&b,&e); ++inv_n;
|
fp_mulmod(&d,&a,&b,&e);
|
||||||
if (fp_cmp_d(&e, 1) != FP_EQ) {
|
if (fp_cmp_d(&e, 1) != FP_EQ) {
|
||||||
#else
|
#else
|
||||||
if (fp_cmp(&d, &c) != FP_EQ) {
|
if (fp_cmp(&d, &c) != FP_EQ) {
|
||||||
#endif
|
#endif
|
||||||
printf("inv [wrong value from MPI?!] failure\n");
|
printf("\ninv [wrong value from MPI?!] failure\n");
|
||||||
draw(&a);draw(&b);draw(&c);draw(&d);
|
draw(&a);draw(&b);draw(&c);draw(&d);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -813,7 +818,7 @@ draw(&a);draw(&b);draw(&c);draw(&d);
|
|||||||
fgets(buf, 4095, stdin); fp_read_radix(&b, buf, 64);
|
fgets(buf, 4095, stdin); fp_read_radix(&b, buf, 64);
|
||||||
fp_div_2(&a, &c);
|
fp_div_2(&a, &c);
|
||||||
if (fp_cmp(&c, &b) != FP_EQ) {
|
if (fp_cmp(&c, &b) != FP_EQ) {
|
||||||
printf("div_2 %lu failure\n", div2_n);
|
printf("\ndiv_2 %lu failure\n", div2_n);
|
||||||
draw(&a);
|
draw(&a);
|
||||||
draw(&b);
|
draw(&b);
|
||||||
draw(&c);
|
draw(&c);
|
||||||
@ -824,7 +829,7 @@ draw(&a);draw(&b);draw(&c);draw(&d);
|
|||||||
fgets(buf, 4095, stdin); fp_read_radix(&b, buf, 64);
|
fgets(buf, 4095, stdin); fp_read_radix(&b, buf, 64);
|
||||||
fp_mul_2(&a, &c);
|
fp_mul_2(&a, &c);
|
||||||
if (fp_cmp(&c, &b) != FP_EQ) {
|
if (fp_cmp(&c, &b) != FP_EQ) {
|
||||||
printf("mul_2 %lu failure\n", mul2_n);
|
printf("\nmul_2 %lu failure\n", mul2_n);
|
||||||
draw(&a);
|
draw(&a);
|
||||||
draw(&b);
|
draw(&b);
|
||||||
draw(&c);
|
draw(&c);
|
||||||
@ -836,7 +841,7 @@ draw(&a);draw(&b);draw(&c);draw(&d);
|
|||||||
fgets(buf, 4095, stdin); fp_read_radix(&b, buf, 64);
|
fgets(buf, 4095, stdin); fp_read_radix(&b, buf, 64);
|
||||||
fp_add_d(&a, ix, &c);
|
fp_add_d(&a, ix, &c);
|
||||||
if (fp_cmp(&b, &c) != FP_EQ) {
|
if (fp_cmp(&b, &c) != FP_EQ) {
|
||||||
printf("add_d %lu failure\n", add_d_n);
|
printf("\nadd_d %lu failure\n", add_d_n);
|
||||||
draw(&a);
|
draw(&a);
|
||||||
draw(&b);
|
draw(&b);
|
||||||
draw(&c);
|
draw(&c);
|
||||||
@ -849,7 +854,7 @@ draw(&a);draw(&b);draw(&c);draw(&d);
|
|||||||
fgets(buf, 4095, stdin); fp_read_radix(&b, buf, 64);
|
fgets(buf, 4095, stdin); fp_read_radix(&b, buf, 64);
|
||||||
fp_sub_d(&a, ix, &c);
|
fp_sub_d(&a, ix, &c);
|
||||||
if (fp_cmp(&b, &c) != FP_EQ) {
|
if (fp_cmp(&b, &c) != FP_EQ) {
|
||||||
printf("sub_d %lu failure\n", sub_d_n);
|
printf("\nsub_d %lu failure\n", sub_d_n);
|
||||||
draw(&a);
|
draw(&a);
|
||||||
draw(&b);
|
draw(&b);
|
||||||
draw(&c);
|
draw(&c);
|
||||||
@ -862,7 +867,7 @@ draw(&a);draw(&b);draw(&c);draw(&d);
|
|||||||
fgets(buf, 4095, stdin); fp_read_radix(&b, buf, 64);
|
fgets(buf, 4095, stdin); fp_read_radix(&b, buf, 64);
|
||||||
fp_mul_d(&a, ix, &c);
|
fp_mul_d(&a, ix, &c);
|
||||||
if (fp_cmp(&b, &c) != FP_EQ) {
|
if (fp_cmp(&b, &c) != FP_EQ) {
|
||||||
printf("mul_d %lu failure\n", sub_d_n);
|
printf("\nmul_d %lu failure\n", mul_d_n);
|
||||||
draw(&a);
|
draw(&a);
|
||||||
draw(&b);
|
draw(&b);
|
||||||
draw(&c);
|
draw(&c);
|
||||||
|
2
makefile
2
makefile
@ -101,6 +101,8 @@ install: $(LIBNAME)
|
|||||||
mtest: $(LIBNAME)
|
mtest: $(LIBNAME)
|
||||||
cd mtest; CC="$(CC)" CFLAGS="$(CFLAGS) -I../" MAKE=${MAKE} ${MAKE} mtest
|
cd mtest; CC="$(CC)" CFLAGS="$(CFLAGS) -I../" MAKE=${MAKE} ${MAKE} mtest
|
||||||
|
|
||||||
|
demo/test.o: CFLAGS+=-Wno-unused-result
|
||||||
|
|
||||||
.PHONY: test
|
.PHONY: test
|
||||||
test: $(LIBNAME) demo/test.o
|
test: $(LIBNAME) demo/test.o
|
||||||
$(CC) $(CFLAGS) demo/test.o $(LIBNAME) $(PROF) -o test
|
$(CC) $(CFLAGS) demo/test.o $(LIBNAME) $(PROF) -o test
|
||||||
|
@ -1,9 +1,10 @@
|
|||||||
CFLAGS += -Wall -W -O3
|
CFLAGS += -Wall -W -O3 -Wno-unused-result
|
||||||
|
|
||||||
default: mtest
|
default: mtest
|
||||||
|
|
||||||
|
.PHONY: mtest
|
||||||
mtest: mtest.o
|
mtest: mtest.o
|
||||||
$(CC) $(CFLAGS) mtest.o -ltommath -o mtest
|
$(CC) $(CFLAGS) mtest.o -ltommath -o mtest
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -f *.o mtest *~
|
rm -f *.o mtest *~ mtest.exe
|
||||||
|
@ -39,6 +39,7 @@ mulmod
|
|||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include <tommath.h>
|
#include <tommath.h>
|
||||||
#define CRYPT
|
#define CRYPT
|
||||||
|
#undef DIGIT_BIT
|
||||||
#include "../src/headers/tfm.h"
|
#include "../src/headers/tfm.h"
|
||||||
|
|
||||||
FILE *rng;
|
FILE *rng;
|
||||||
@ -46,8 +47,8 @@ FILE *rng;
|
|||||||
/* 1-2048 bit numbers */
|
/* 1-2048 bit numbers */
|
||||||
void rand_num(mp_int *a)
|
void rand_num(mp_int *a)
|
||||||
{
|
{
|
||||||
int n, size;
|
int size;
|
||||||
unsigned char buf[2048];
|
unsigned char buf[(FP_MAX_SIZE/16 - DIGIT_BIT/2) + 1];
|
||||||
|
|
||||||
size = 1 + ((fgetc(rng)<<8) + fgetc(rng)) % (FP_MAX_SIZE/16 - DIGIT_BIT/2);
|
size = 1 + ((fgetc(rng)<<8) + fgetc(rng)) % (FP_MAX_SIZE/16 - DIGIT_BIT/2);
|
||||||
buf[0] = (fgetc(rng)&1)?1:0;
|
buf[0] = (fgetc(rng)&1)?1:0;
|
||||||
@ -59,8 +60,8 @@ void rand_num(mp_int *a)
|
|||||||
/* 1-256 bit numbers (to test things like exptmod) */
|
/* 1-256 bit numbers (to test things like exptmod) */
|
||||||
void rand_num2(mp_int *a)
|
void rand_num2(mp_int *a)
|
||||||
{
|
{
|
||||||
int n, size;
|
int size;
|
||||||
unsigned char buf[2048];
|
unsigned char buf[(FP_MAX_SIZE/16 - DIGIT_BIT/2) + 1];
|
||||||
|
|
||||||
size = 1 + ((fgetc(rng)<<8) + fgetc(rng)) % (FP_MAX_SIZE/16 - DIGIT_BIT/2);
|
size = 1 + ((fgetc(rng)<<8) + fgetc(rng)) % (FP_MAX_SIZE/16 - DIGIT_BIT/2);
|
||||||
buf[0] = (fgetc(rng)&1)?1:0;
|
buf[0] = (fgetc(rng)&1)?1:0;
|
||||||
@ -69,13 +70,15 @@ void rand_num2(mp_int *a)
|
|||||||
mp_read_raw(a, buf, 1+size);
|
mp_read_raw(a, buf, 1+size);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define mp_to64(a, b) mp_toradix(a, b, 64)
|
#define mp_to64(a, b) mp_toradix_n(a, b, 64, sizeof(b))
|
||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
int n, tmp;
|
int n, tmp;
|
||||||
mp_int a, b, c, d, e;
|
mp_int a, b, c, d, e;
|
||||||
|
#ifdef MTEST_NO_FULLSPEED
|
||||||
clock_t t1;
|
clock_t t1;
|
||||||
|
#endif
|
||||||
char buf[4096];
|
char buf[4096];
|
||||||
|
|
||||||
mp_init(&a);
|
mp_init(&a);
|
||||||
@ -88,7 +91,7 @@ int main(void)
|
|||||||
/* initial (2^n - 1)^2 testing, makes sure the comba multiplier works [it has the new carry code] */
|
/* initial (2^n - 1)^2 testing, makes sure the comba multiplier works [it has the new carry code] */
|
||||||
/*
|
/*
|
||||||
mp_set(&a, 1);
|
mp_set(&a, 1);
|
||||||
for (n = 1; n < 8192; n++) {
|
for (n = 1; n < ((FP_MAX_SIZE-(8*DIGIT_BIT))/2); n++) {
|
||||||
mp_mul(&a, &a, &c);
|
mp_mul(&a, &a, &c);
|
||||||
printf("mul\n");
|
printf("mul\n");
|
||||||
mp_to64(&a, buf);
|
mp_to64(&a, buf);
|
||||||
@ -111,9 +114,11 @@ int main(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef MTEST_NO_FULLSPEED
|
||||||
t1 = clock();
|
t1 = clock();
|
||||||
|
#endif
|
||||||
for (;;) {
|
for (;;) {
|
||||||
#if 0
|
#ifdef MTEST_NO_FULLSPEED
|
||||||
if (clock() - t1 > CLOCKS_PER_SEC) {
|
if (clock() - t1 > CLOCKS_PER_SEC) {
|
||||||
sleep(2);
|
sleep(2);
|
||||||
t1 = clock();
|
t1 = clock();
|
||||||
|
Loading…
Reference in New Issue
Block a user