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

Private GIT Repository
IDA_new
[Cipher_code.git] / IDA_new / gf-complete / examples / gf_example_4.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_4.c
7  *
8  * Identical to example_3 except it works in GF(2^128)
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 #define LLUI (long long unsigned int) 
22
23 void usage(char *s)
24 {
25   fprintf(stderr, "usage: gf_example_3\n");
26   exit(1);
27 }
28
29 int main(int argc, char **argv)
30 {
31   uint64_t a[2], b[2], c[2];
32   uint64_t *r1, *r2;
33   int i;
34   gf_t gf;
35
36   if (argc != 1) usage(NULL);
37
38   /* Get two random numbers in a and b */
39
40   MOA_Seed(time(0));
41   MOA_Random_128(a);
42   MOA_Random_128(b);
43
44   /* Create the proper instance of the gf_t object using defaults: */
45
46   gf_init_easy(&gf, 128);
47
48   /* And multiply a and b using the galois field: */
49
50   gf.multiply.w128(&gf, a, b, c);
51   printf("%016llx%016llx * %016llx%016llx =\n%016llx%016llx\n", 
52       LLUI a[0], LLUI a[1], LLUI b[0], LLUI b[1], LLUI c[0], LLUI c[1]);
53
54   r1 = (uint64_t *) malloc(32);
55   r2 = (uint64_t *) malloc(32);
56
57   for (i = 0; i < 4; i++) r1[i] = MOA_Random_64();
58
59   gf.multiply_region.w128(&gf, r1, r2, a, 32, 0);
60
61   printf("\nmultiply_region by %016llx%016llx\n\n", LLUI a[0], LLUI a[1]);
62   printf("R1 (the source):  ");
63   for (i = 0; i < 4; i += 2) printf(" %016llx%016llx", LLUI r1[i], LLUI r1[i+1]);
64
65   printf("\nR2 (the product): ");
66   for (i = 0; i < 4; i += 2) printf(" %016llx%016llx", LLUI r2[i], LLUI r2[i+1]);
67   printf("\n");
68   exit(0);
69 }