int main (void) { b2n_t k; ec2np_t p, q, r; ec2ng_t g; char buf[BUFSIZE]; b2n_init (k); ec2np_init (p); ec2np_init (q); ec2np_init (r); ec2ng_init (g); printf ("Testing: ec2ng_set* :"); /* Init Group */ ec2ng_set_p_str (g, "0x0800000000000000000000004000000000000001"); CMP_FAIL (g->p, "0x0800000000000000000000004000000000000001"); ec2ng_set_a_ui (g, 0); CMP_FAIL (g->a, "0x00"); ec2ng_set_b_str (g, "0x07338f"); CMP_FAIL (g->b, "0x07338f"); printf ("\nTesting: ec2np_find_y: "); /* Init Point */ ec2np_set_x_ui (p, 0x7b); ec2np_find_y (p, g); CMP_FAIL (p->y, "0x01c8"); printf ("\nTesting: ec2np_ison: "); if (ec2np_ison (p, g)) printf ("OKAY "); else printf ("FAILED "); ec2np_set_x_ui (q, 0x4); ec2np_find_y (q, g); if (ec2np_ison (q, g)) printf ("OKAY "); else printf ("FAILED "); printf ("\nTesting: ec2np_add: "); ec2np_set (r, p); b2n_add (r->y, r->y, r->x); ec2np_add (r, r, p, g); if (!r->inf) printf ("FAILED "); else printf ("OKAY "); ec2np_add (q, p, q, g); CMP_FAIL (q->x, "0x06f32d7cc82cec8612a87a86e026350fb7595469"); CMP_FAIL (q->y, "0x4ab92e21e51358ca8deab3fbbc9f7d8a7d1575"); if (ec2np_ison (q, g)) printf ("OKAY "); else printf ("FAILED "); ec2np_add (p, q, q, g); CMP_FAIL (p->x, "0x0390001461385559a22ac9b6181c1e1889b38451"); CMP_FAIL (p->y, "0x0188e61f38d747d7813c6a8b33d14dfb7418b04c"); if (ec2np_ison (p, g)) printf ("OKAY "); else printf ("FAILED "); printf ("\nTesting: ec2np_mul: "); b2n_set_ui (k, 57); ec2np_set (q, p); ec2np_mul (q, q, k, g); if (ec2np_ison (q, g)) printf ("OKAY "); else printf ("FAILED "); CMP_FAIL (q->x, "0x06bcf88caab88f99399350c46559da3b91afbf9d"); b2n_set_str (k, "0x0800000000000000000057db5698537193aef943"); ec2np_set (q, p); ec2np_mul (q, q, k, g); if (ec2np_ison (q, g)) printf ("OKAY "); else printf ("FAILED "); CMP_FAIL (q->x, "0x0390001461385559a22ac9b6181c1e1889b38451"); printf ("\n"); ec2np_clear (p); ec2np_clear (q); ec2np_clear (r); ec2ng_clear (g); b2n_clear (k); return 1; }
int main (void) { int i; b2n_t n, m, d, r; char buf[BUFSIZE]; b2n_init (n); b2n_init (m); b2n_init (d); b2n_init (r); printf ("Arithimetic Tests for GF(2)[x]:\n"); printf ("Testing: b2n_set*: "); b2n_set_ui (n, 0xffc0); CMP_FAIL (n, "0xffc0"); b2n_set_str (m, "0x180c0"); CMP_FAIL (m, "0x0180c0"); b2n_set_str (m, "0x808b8080c0"); CMP_FAIL (m, "0x808b8080c0"); printf ("\nTesting: b2n_add: "); b2n_add (d, n, m); CMP_FAIL (d, "0x808b807f00"); b2n_add (n, n, m); CMP_FAIL (n, "0x808b807f00"); b2n_add (n, n, n); CMP_FAIL (n, "0x00"); b2n_set_str (n, "0x9090900000000000000000"); b2n_set_ui (m, 0); b2n_add (n, n, m); CMP_FAIL (n, "0x9090900000000000000000"); printf ("\nTesting: b2n_lshift: "); b2n_set_str (m, "0x808b8080c0"); b2n_lshift (n, m, 3); CMP_FAIL (n, "0x04045c040600"); b2n_lshift (n, m, 11); CMP_FAIL (n, "0x04045c04060000"); b2n_set (n, m); for (i = 0; i < 11; i++) b2n_lshift (n, n, 1); CMP_FAIL (n, "0x04045c04060000"); b2n_lshift (d, m, 12); CMP_FAIL (d, "0x0808b8080c0000"); b2n_set_str (m, "0xdeadbeef"); b2n_lshift (d, m, 103); CMP_FAIL (d, "0x6f56df7780000000000000000000000000"); printf ("\nTesting: b2n_rshift: "); b2n_rshift (m, n, 3); CMP_FAIL (m, "0x808b8080c000"); b2n_rshift (m, m, 11); CMP_FAIL (m, "0x1011701018"); b2n_set_str (m, "0x12381998713258186712365"); b2n_rshift (m, m, 23); CMP_FAIL (m, "0x024703330e264b030c"); b2n_set_str (m, "0x12381998713258186712365"); for (i=0; i<23; i++) b2n_rshift (m, m, 1); CMP_FAIL (m, "0x024703330e264b030c"); printf ("\nTesting: b2n_mul: 0x9 o 0x5: "); b2n_set_ui (n, 9); b2n_set_ui (m, 5); b2n_mul (d, n, m); CMP_FAIL (d, "0x2d"); b2n_mul (n, n, m); CMP_FAIL (d, "0x2d"); printf ("\nTesting: b2n_mul: 0x9 o 0x0: "); b2n_set_ui (n, 9); b2n_set_ui (m, 0); b2n_mul (d, n, m); CMP_FAIL (d, "0x00"); b2n_set_ui (n, 0); b2n_set_ui (m, 9); b2n_mul (d, n, m); CMP_FAIL (d, "0x00"); printf ("\nTesting: b2n_mul: 0x9 o 0x1: "); b2n_set_ui (n, 9); b2n_set_ui (m, 1); b2n_mul (d, n, m); CMP_FAIL (d, "0x09"); printf ("\nTesting: b2n_mul: 0x12329 o 0x1235: "); b2n_set_str (n, "0x12329"); b2n_set_str (m, "0x1235"); b2n_mul (d, n, m); CMP_FAIL (d, "0x10473a3d"); b2n_mul (n, n, m); CMP_FAIL (d, "0x10473a3d"); printf ("\nTesting: b2n_square: 0x1235 o 0x1235: "); b2n_set_str (m, "0x1235"); b2n_square (n, m); CMP_FAIL (n, "0x01040511"); printf ("\nTesting: b2n_square: 0x80c1235 o 0x80c1235: "); b2n_set_str (m, "0x80c1235"); b2n_square (n, m); CMP_FAIL (n, "0x40005001040511"); b2n_set_str (m, "0x12329"); printf ("\nTesting: sigbit: 0x12329: %d, %s", b2n_sigbit(m), b2n_sigbit(m) == 17 ? "OKAY" : "FAILED"); b2n_set_ui (m, 0); printf ("\nTesting: sigbit: 0x0: %d, %s", b2n_sigbit(m), b2n_sigbit(m) == 0 ? "OKAY" : "FAILED"); b2n_set_str (m, "0x7f3290000"); printf ("\nTesting: sigbit: 0x7f3290000: %d, %s", b2n_sigbit(m), b2n_sigbit(m) == 35 ? "OKAY" : "FAILED"); printf ("\nTesting: b2n_cmp: "); b2n_set_str (m, "0x2234"); b2n_set_str (n, "0x1234"); printf ("%d <-> %d, ", b2n_sigbit (m), b2n_sigbit(n)); printf ("%d, %d ,%d: ", b2n_cmp (m,m), b2n_cmp (m,n), b2n_cmp (n,m)); if (b2n_cmp (m,m) || b2n_cmp (m,n) != 1 || b2n_cmp (n,m) != -1) printf ("FAILED"); else printf ("OKAY"); printf ("\nTesting: b2n_cmp_null: "); b2n_set_str (m, "0x2234"); b2n_set_ui (n, 0); printf ("%d, %d: ", b2n_cmp_null (m), b2n_cmp_null (n)); if (b2n_cmp_null (m) != 1 || b2n_cmp_null (n)) printf ("FAILED"); else printf ("OKAY"); printf ("\nTesting: b2n_div: 0x2d / 0x5: "); b2n_set_str (n, "0x2d"); b2n_set_ui (m, 5); b2n_div (n, m, n, m); CMP_FAIL (n, "0x09"); CMP_FAIL (m, "0x00"); printf ("\nTesting: b2n_div: 0x2d / 0x1: "); b2n_set_str (n, "0x2d"); b2n_set_ui (m, 1); b2n_div (n, m, n, m); CMP_FAIL (n, "0x2d"); CMP_FAIL (m, "0x00"); printf ("\nTesting: b2n_div: 0x10473a3d / 0x1235: "); b2n_set_str (n, "0x10473a3d"); b2n_set_str (m, "0x1235"); b2n_div (n, m, n, m); CMP_FAIL (n, "0x012329"); CMP_FAIL (m, "0x00"); printf ("\nTesting: b2n_div: 0x10473a3d / 0x1536: "); b2n_set_str (n, "0x10473a3d"); b2n_set_str (m, "0x1536"); b2n_div (n, m, n, m); CMP_FAIL (n, "0x014331"); CMP_FAIL (m, "0xab"); b2n_set_str (n, "0x10473a3d"); b2n_set_str (m, "0x1536"); b2n_div_q (d, n, m); CMP_FAIL (d, "0x014331"); b2n_div_r (d, n, m); CMP_FAIL (d, "0xab"); printf ("\nTesting: b2n_div: " "0x0800000000000000000000004000000000000001 / 0xffab09909a00: "); b2n_set_str (n, "0x0800000000000000000000004000000000000001"); b2n_set_str (m, "0xffab09909a00"); b2n_div_q (d, n, m); CMP_FAIL (d, "0x18083e83a98647cedae0b3e69a5e"); b2n_div_r (d, n, m); CMP_FAIL (d, "0x5b8bf98cac01"); b2n_set (d, m); b2n_div (n, m, n, m); CMP_FAIL (n, "0x18083e83a98647cedae0b3e69a5e"); CMP_FAIL (m, "0x5b8bf98cac01"); printf ("\nTesting: b2n_div: " "0x0800000000000000000000004000000000000001 / 0x7b: "); b2n_set_str (n, "0x0800000000000000000000004000000000000001"); b2n_set_str (m, "0x7b"); b2n_div (n, m, n, m); CMP_FAIL (n, "0x32dea27065bd44e0cb7a89c000000000000000"); CMP_FAIL (m, "0x01"); printf ("\n\nArithimetic Tests for GF(2**m) ~= GF(2)[x]/p(x):\n"); printf ("Testing: b2n_gcd: "); b2n_set_str (d, "0x771"); b2n_set_str (m, "0x26d"); b2n_gcd (n, m, d); CMP_FAIL (n, "0x0b"); b2n_set_str (d, "0x0800000000000000000000004000000000000001"); b2n_set_str (m, "0xffab09909a00"); b2n_gcd (n, m, d); CMP_FAIL (n, "0x01"); b2n_set_str (d, "0x0800000000000000000000004000000000000001"); b2n_set_str (m, "0x7b"); b2n_gcd (n, m, d); CMP_FAIL (n, "0x01"); printf ("\nTesting: b2n_mul_inv: "); b2n_set_str (d, "0x0800000000000000000000004000000000000001"); b2n_set_str (m, "0xffab09909a00"); b2n_mul_inv (n, m, d); CMP_FAIL (n, "0x074029149f69304174d28858ae5c60df208a22a8"); b2n_set_str (n, "0xffab09909a00"); b2n_mul_inv (n, n, d); CMP_FAIL (n, "0x074029149f69304174d28858ae5c60df208a22a8"); b2n_mul (n, n, m); b2n_mod (n, n, d); CMP_FAIL (n, "0x01"); b2n_set_str (d, "0x0800000000000000000000004000000000000001"); b2n_set_str (m, "0x7b"); b2n_mul_inv (n, m, d); CMP_FAIL (n, "0x32dea27065bd44e0cb7a89c000000000000000"); b2n_mul (n, n, m); b2n_mod (n, n, d); CMP_FAIL (n, "0x01"); printf ("\nTesting: b2n_random: "); b2n_random (m, 155); b2n_snprint (buf, BUFSIZE, m); printf ("%s, %d", buf, b2n_sigbit(m)); printf ("\nTesting: b2n_sqrt: "); b2n_set_str (n, "0x0800000000000000000000004000000000000001"); b2n_set_ui (d, 2); b2n_sqrt (m, d, n); b2n_square (d, m); b2n_add (d, d, m); b2n_mod (d, d, n); CMP_FAIL (d, "0x02"); /* x**3 + b */ b2n_set_ui (n, 0x7b); b2n_square (d, n); b2n_mul (d, d, n); b2n_set_str (n, "0x07338f"); b2n_add (d, d, n); b2n_set_str (n, "0x0800000000000000000000004000000000000001"); b2n_mod (d, d, n); /* \alpha = x**3 + b - end */ /* \beta = x**(-2)*\alpha */ b2n_set_ui (m, 0x7b); b2n_mul_inv (m, m, n); b2n_square (m, m); b2n_mod (m, m, n); b2n_mul (d, d, m); b2n_mod (d, d, n); b2n_set (r, d); /* \beta = x**(-2)*\alpha - end */ b2n_sqrt (m, d, n); CMP_FAIL (m, "0x0690aec7cd215d8f9a42bb1f0000000000000004"); b2n_square (d, m); b2n_mod (d, d, n); b2n_add (d, d, m); b2n_mod (d, d, n); printf ("Squaring Check: "); CMP_FAIL (d, "0x03d5af92c8311d9e8f56be4b3e690aec7cd215cc"); printf ("\nTesting: b2n_trace: "); b2n_set_ui (m, 2); b2n_trace (d, m, n); CMP_FAIL (d, "0x00"); b2n_set_ui (m, 0x11223); b2n_trace (d, m, n); CMP_FAIL (d, "0x01"); printf ("\nTesting: b2n_exp_mod: "); b2n_set_ui (m, 0x7b); b2n_exp_mod (d, m, 5, n); CMP_FAIL (d, "0x7cccb7cb"); b2n_set_str (m, "0x123456789abcdef"); b2n_exp_mod (d, m, 13, n); CMP_FAIL (d, "0x043f0a8550cb69b3c50d0340d1c6d5c97ecd60d4"); printf ("\nTesting: b2n_3mul: "); b2n_set_ui (m, 0x7b); b2n_3mul (m, m); CMP_FAIL (m, "0x0171"); b2n_set_ui (m, 0x7fffffff); b2n_3mul (m, m); CMP_FAIL (m, "0x017ffffffd"); printf ("\nTesting: b2n_nadd: "); b2n_set_str (m, "0x7fffffff"); b2n_set_str (n, "0x10203045"); b2n_nadd (d, n, m); CMP_FAIL (d, "0x90203044"); b2n_set_str (m, "0x9a4a54d8b8dfa566112849991214329a233d"); b2n_set_str (n, "0x70ee40dd60c8657e58eda9a17ad9176e28b4b457e5a34a0948e335"); b2n_nadd (d, n, m); CMP_FAIL (d, "0x70ee40dd60c8657e5987f3f65391f7138ec5dca17eb55e3be30672"); printf ("\nTesting: b2n_nsub: "); b2n_set_str (n, "0x90203044"); b2n_set_str (m, "0x10203045"); b2n_nsub (d, n, m); CMP_FAIL (d, "0x7fffffff"); b2n_set_str (n, "0x70ee40dd60c8657e5987f3f65391f7138ec5dca17eb55e3be30672"); b2n_set_str (m, "0x70ee40dd60c8657e58eda9a17ad9176e28b4b457e5a34a0948e335"); b2n_nsub (d, n, m); CMP_FAIL (d, "0x9a4a54d8b8dfa566112849991214329a233d"); b2n_clear (n); b2n_clear (m); b2n_clear (d); b2n_clear (r); printf ("\n"); return 0; }