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,
35 #define RANDOM_DEVICE "/dev/urandom"
41 werror(const char *format, ...)
46 va_start(args, format);
47 vfprintf(stderr, format, args);
52 #define MIN(a,b) (((a) < (b)) ? (a) : (b))
55 read_file(const char *name, unsigned max_size, char **contents)
62 f = fopen(name, "rb");
68 if (max_size && max_size < 100)
73 for (size = 100, done = 0;
74 (!max_size || done < max_size) && !feof(f);
79 if (max_size && size > max_size)
82 /* Space for terminating NUL */
83 p = realloc(buffer, size + 1);
95 done += fread(buffer + done, 1, size - done, f);
103 /* NUL-terminate the data. */
111 write_file(const char *name, unsigned size, const char *buffer)
113 FILE *f = fopen(name, "wb");
119 res = fwrite(buffer, 1, size, f);
124 return fclose(f) == 0 && res > 0;
128 write_string(FILE *f, unsigned size, const char *buffer)
130 size_t res = fwrite(buffer, 1, size, f);
136 simple_random(struct yarrow256_ctx *ctx, const char *name)
142 length = read_file(name, 0, &buffer);
144 length = read_file(RANDOM_DEVICE, 20, &buffer);
149 yarrow256_seed(ctx, length, buffer);
155 hash_file(const struct nettle_hash *hash, void *ctx, FILE *f)
159 char buffer[BUFSIZE];
160 size_t res = fread(buffer, 1, sizeof(buffer), f);
164 hash->update(ctx, res, buffer);
172 read_rsa_key(const char *name,
173 struct rsa_public_key *pub,
174 struct rsa_private_key *priv)
180 length = read_file(name, 0, &buffer);
184 res = rsa_keypair_from_sexp(pub, priv, 0, length, buffer);
189 #endif /* WITH_PUBLIC_KEY */