3 * Miscellaneous functions used by the example programs.
6 /* nettle, low-level cryptographics library
8 * Copyright (C) 2002 Niels Möller
10 * The nettle library is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU Lesser General Public License as published by
12 * the Free Software Foundation; either version 2.1 of the License, or (at your
13 * option) any later version.
15 * The nettle library is distributed in the hope that it will be useful, but
16 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
17 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
18 * License for more details.
20 * You should have received a copy of the GNU Lesser General Public License
21 * along with the nettle library; see the file COPYING.LIB. If not, write to
22 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
33 /* For errno and strerror */
39 #define RANDOM_DEVICE "/dev/urandom"
47 void *p = malloc(size);
50 fprintf(stderr, "Virtual memory exhausted.\n");
58 werror(const char *format, ...)
63 va_start(args, format);
64 vfprintf(stderr, format, args);
70 read_file(const char *name, unsigned max_size, char **contents)
76 f = fopen(name, "rb");
79 werror("Opening `%s' failed: %s\n", name, strerror(errno));
85 for (buffer = NULL, done = 0;; size *= 2)
89 if (max_size && size > max_size)
92 /* Space for terminating NUL */
93 p = realloc(buffer, size + 1);
105 done += fread(buffer + done, 1, size - done, f);
109 /* Short count means EOF or read error */
112 fprintf (stderr, "Reading `%s' failed: %s\n",
113 name, strerror(errno));
118 /* Treat empty file as error */
124 if (size == max_size)
130 /* NUL-terminate the data. */
138 write_string(FILE *f, unsigned size, const char *buffer)
140 size_t res = fwrite(buffer, 1, size, f);
146 write_file(const char *name, unsigned size, const char *buffer)
148 FILE *f = fopen(name, "wb");
154 res = write_string(f, size, buffer);
155 return fclose(f) == 0 && res;
159 simple_random(struct yarrow256_ctx *ctx, const char *name)
165 length = read_file(name, 0, &buffer);
167 length = read_file(RANDOM_DEVICE, 20, &buffer);
172 yarrow256_seed(ctx, length, buffer);
180 hash_file(const struct nettle_hash *hash, void *ctx, FILE *f)
184 char buffer[BUFSIZE];
185 size_t res = fread(buffer, 1, sizeof(buffer), f);
189 hash->update(ctx, res, buffer);