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., 59 Temple Place - Suite 330, 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);
69 #define MIN(a,b) (((a) < (b)) ? (a) : (b))
72 read_file(const char *name, unsigned max_size, char **contents)
79 f = fopen(name, "rb");
82 werror("Opening `%s' failed: %s\n", name, strerror(errno));
87 if (max_size && max_size < 100)
92 for (size = 100, done = 0;
93 (!max_size || done < max_size) && !feof(f);
98 if (max_size && size > max_size)
101 /* Space for terminating NUL */
102 p = realloc(buffer, size + 1);
114 done += fread(buffer + done, 1, size - done, f);
122 /* NUL-terminate the data. */
130 write_file(const char *name, unsigned size, const char *buffer)
132 FILE *f = fopen(name, "wb");
138 res = fwrite(buffer, 1, size, f);
143 return fclose(f) == 0 && res > 0;
147 write_string(FILE *f, unsigned size, const char *buffer)
149 size_t res = fwrite(buffer, 1, size, f);
155 simple_random(struct yarrow256_ctx *ctx, const char *name)
161 length = read_file(name, 0, &buffer);
163 length = read_file(RANDOM_DEVICE, 20, &buffer);
168 yarrow256_seed(ctx, length, buffer);
176 hash_file(const struct nettle_hash *hash, void *ctx, FILE *f)
180 char buffer[BUFSIZE];
181 size_t res = fread(buffer, 1, sizeof(buffer), f);
185 hash->update(ctx, res, buffer);