-void arg_assert_fail(const char *msg) {
- fprintf(stderr, PROGRAM ": argument error: %s\n",msg);
- exit(12);
-}
-
-void sysfail(const char *msg) {
- fprintf(stderr, "%s: fatal system error: %s: %s\n", programid, msg, strerror(errno));
- exit(8);
-}
-
-void fail(const char *msg) {
- fprintf(stderr, "%s: fatal error: %s\n", programid, msg);
- exit(4);
-}
-
-void sysdiag(const char *msg) {
- fprintf(stderr, "%s: system/network error: %s: %s\n", programid, msg, strerror(errno));
-}
-
-void diag(const char *msg) {
- fprintf(stderr, "%s: %s\n", programid, msg);
-}
-
-time_t now(void) {
- time_t r;
- if (time(&r) == (time_t)-1) sysfail("get time of day");
- return r;
-}
-
-void *xmalloc(size_t sz) {
- void *r;
- r= malloc(sz);
- if (!r) sysfail("allocate memory");
- return r;
-}
-
-void get_random(void *ptr, size_t sz) {
- static FILE *randfile;
-
- size_t r;
-
- if (!randfile) {
- randfile= fopen("/dev/urandom","rb");
- if (!randfile && errno==ENOENT) randfile= fopen("/dev/random","rb");
- if (!randfile) sysfail("open random number generator");
+void random_key(void *ptr, size_t sz) {
+ if (encdec_keys_write) {
+ get_random(ptr,sz);
+ write_must(encdec_keys_fd,ptr,sz,"write keys datastream");
+ } else {
+ read_must(encdec_keys_fd,ptr,sz,"read keys datastream");