Initial commit - libotp with PAD and PACKAGE structures.
[easyotp.git] / libotp.c
blobd278c48ff0ce8c696fbd580329bc9adef85c62cf
1 /** Practical One-time Pad Library
3 * Created:20080514
4 * By Jeff Connelly
5 */
7 #include <stdio.h>
8 #include <stdlib.h>
9 #include <sysexits.h>
10 #include <string.h>
12 #define MARKER_TO "to:"
13 #define MARKER_BEGIN "--EMOTP_BEGIN--"
14 #define MARKER_END "--EMOTP_END--"
16 /** Packaged up encrypted message, ready for transport. */
17 typedef struct _PACKAGE
19 unsigned long offset;
20 char *pad_name;
21 char *cipher_text;
22 } PACKAGE;
24 typedef struct _PAD
26 char *local_filename;
27 char *name;
28 unsigned long offset;
29 FILE *fp;
30 struct _PAD *next;
31 } PAD;
33 PAD *pads = NULL;
35 void add_pad(PAD *new_pad)
37 if (!pads)
39 pads = new_pad;
41 else
43 PAD *p, *tail;
45 /* Find tail */
46 for (p = pads; p; p = p->next)
47 tail = p;
48 tail->next = new_pad;
52 void show_pads()
54 PAD *p;
56 printf("h=%.8x\n", (unsigned int)pads);
57 for (p = pads; p; p = p->next)
59 printf("Pad: %s: %s (next=%.8x)\n", p->name, p->local_filename,
60 (unsigned int)p->next);
64 void load_pad(char *local_filename)
66 FILE *fp;
67 PAD *new_pad;
69 fp = fopen("/Volumes/Not Backed Up/otp/otp-dazzlement", "rb");
70 if (!fp)
72 perror("fopen");
73 exit(EXIT_FAILURE);
76 new_pad = malloc(sizeof(PAD));
77 if (!new_pad)
79 perror("malloc");
80 exit(EX_UNAVAILABLE);
83 new_pad->local_filename = strdup(local_filename);
84 new_pad->name = NULL;
85 /* TODO: new_pad->offset = */
86 new_pad->fp = fp;
87 new_pad->next = NULL;
89 add_pad(new_pad);
90 add_pad(new_pad);
92 free(new_pad);
95 int main()
97 load_pad("/Volumes/Not Backed Up/otp/otp-dazzlement");
98 show_pads();
100 return 0;