]> AND Private Git Repository - Cipher_code.git/blob - IDA_new/gf-complete/examples/gf_example_1.c
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
new
[Cipher_code.git] / IDA_new / gf-complete / examples / gf_example_1.c
1 /*
2  * GF-Complete: A Comprehensive Open Source Library for Galois Field Arithmetic
3  * James S. Plank, Ethan L. Miller, Kevin M. Greenan,
4  * Benjamin A. Arnold, John A. Burnum, Adam W. Disney, Allen C. McBride.
5  *
6  * gf_example_1.c
7  *
8  * Demonstrates using the procedures for examples in GF(2^w) for w <= 32.
9  */
10
11 #include <stdio.h>
12 #include <getopt.h>
13 #include <stdint.h>
14 #include <string.h>
15 #include <stdlib.h>
16 #include <time.h>
17
18 #include "gf_complete.h"
19 #include "gf_rand.h"
20
21 void usage(char *s)
22 {
23   fprintf(stderr, "usage: gf_example_1 w - w must be between 1 and 32\n");
24   exit(1);
25 }
26
27 int main(int argc, char **argv)
28 {
29   uint32_t a, b, c;
30   int w;
31   gf_t gf;
32
33   if (argc != 2) usage(NULL);
34   w = atoi(argv[1]);
35   if (w <= 0 || w > 32) usage("Bad w");
36
37   /* Get two random numbers in a and b */
38
39   MOA_Seed(time(0));
40   a = MOA_Random_W(w, 0);
41   b = MOA_Random_W(w, 0);
42  
43   /* Create the proper instance of the gf_t object using defaults: */
44
45   gf_init_easy(&gf, w);
46
47   /* And multiply a and b using the galois field: */
48
49   c = gf.multiply.w32(&gf, a, b);
50   printf("%u * %u = %u\n", a, b, c); 
51
52   /* Divide the product by a and b */
53
54   printf("%u / %u = %u\n", c, a, gf.divide.w32(&gf, c, a));
55   printf("%u / %u = %u\n", c, b, gf.divide.w32(&gf, c, b));
56   
57   exit(0);
58 }