diff options
author | Jakob Kaivo <jkk@ung.org> | 2020-11-12 19:52:42 -0500 |
---|---|---|
committer | Jakob Kaivo <jkk@ung.org> | 2020-11-12 19:52:42 -0500 |
commit | e8c696ab548854e2fe2368f476acf9cbc5fb68be (patch) | |
tree | ac6a4889a605feb3c6d3a89b3ca1565111ac56b6 | |
parent | b257773cddc3a2a6d556a597276bdd3e801c5dfe (diff) |
add flags for reading and generating key
-rw-r--r-- | deonebook.c | 41 |
1 files changed, 32 insertions, 9 deletions
diff --git a/deonebook.c b/deonebook.c index cd8bb75..075f505 100644 --- a/deonebook.c +++ b/deonebook.c @@ -1,16 +1,25 @@ #define _XOPEN_SOURCE 700 #include <stdio.h> #include <unistd.h> +#include "deonebook.h" int main(int argc, char *argv[]) { - char *serial = NULL; + enum { DECRYPT, GENERATE, READ } mode = DECRYPT; int c; - while ((c = getopt(argc, argv, "s:")) != -1) { + while ((c = getopt(argc, argv, "RGk:")) != -1) { switch (c) { - case 's': - serial = optarg; + case 'R': + mode = READ; + break; + + case 'G': + mode = GENERATE; + break; + + case 'k': + /* keyfile = optarg; */ break; default: @@ -18,10 +27,24 @@ int main(int argc, char *argv[]) } } - if (serial == NULL) { - fprintf(stderr, "%s: missing serial number (provide via -s)\n", - argv[0]); - return 1; + if (mode != DECRYPT) { + unsigned char *key = NULL; + if (mode == READ) { + key = readkey("./.shm"); + } else { + char *device = "mmcblk0"; + if (optind < argc) { + device = argv[optind]; + } + key = genkey(device); + } + + if (key == NULL) { + return 1; + } + + fwrite(key, 16, 1, stdout); + return 0; } if (optind >= argc) { @@ -30,6 +53,6 @@ int main(int argc, char *argv[]) } do { - printf("decrypting %s [%s]\n", argv[optind], serial); + printf("decrypting %s\n", argv[optind]); } while (++optind < argc); } |