Add CLI interface to encrypt/decrypt pads.
[easyotp.git] / libotp.h
blob7e8a0f7ee681bd822b4db4be10194bb6a5db5bfb
1 /** Practical One-time Pad Library
3 * Created:20080514
4 * By Jeff Connelly
5 */
7 #define MARKER_TO "to:"
8 #define MARKER_BEGIN "--EMOTP_BEGIN--"
9 #define MARKER_END "--EMOTP_END--"
11 #define OFFSET_FILE_EXTENSION ".off"
12 #define OFFSET_SIZE 11 /* strlen("4294967296") + 1 */
14 #define PAD_NAME_LENGTH 4
16 #define MAX_CONFIG_LINE 1024 /* should be enough, >MAX_PATH */
18 /* One-time pad. */
19 typedef struct _PAD {
20 char *local_filename;
21 char *name;
22 FILE *fp;
23 struct _PAD *next;
24 /* Use read_offset() and write_offset() to access offset. */
25 } PAD;
28 /** Packaged up encrypted message, ready for transport. */
29 typedef struct _MESSAGE {
30 unsigned long offset;
31 PAD *pad;
32 unsigned long length;
33 char *cipher_text;
34 } MESSAGE;
36 void load_config(char *config_filename);
37 void show_pads();
38 FILE *open_offset_file(PAD *p, char *mode);
39 unsigned long read_offset(PAD *p);
40 void write_offset(PAD *p, unsigned long offset);
41 void load_pad(char *local_filename, char *pad_name);
42 void free_pads();
43 MESSAGE *unpackage(char *input);
44 void free_message(MESSAGE *);
45 char *otp_encrypt(char *input, unsigned int length, char *to, unsigned int *out_length);
46 unsigned int otp_decrypt(char *input, char **out);