#include <stdio.h>
#include <string.h>
-#if !HAVE_LIBGMP
+#if !WITH_PUBLIC_KEY
int
main(int argc, char **argv)
{
"and recompile Nettle\n");
return EXIT_FAILURE;
}
-#endif /* !HAVE_LIBGMP */
+#else /* WITH_PUBLIC_KEY */
#include <unistd.h>
#include <fcntl.h>
#include "sexp.h"
#include "yarrow.h"
+#include "io.h"
+
#define KEYSIZE 500
#define ESIZE 30
-#define RANDOM_DEVICE "/dev/urandom"
-
static void
progress(void *ctx, int c)
{
fputc(c, stderr);
}
-static int
-write_file(const char *name, struct nettle_buffer *buffer)
-{
- const uint8_t *data = buffer->contents;
- unsigned length = buffer->size;
- int fd = open(name, O_WRONLY | O_CREAT | O_TRUNC, 0600);
-
- if (fd < 0)
- return 0;
-
- while (length)
- {
- int res = write(fd, data, length);
- if (res < 0)
- {
- if (errno == EINTR)
- continue;
- else
- return 0;
- }
- data += res;
- length -= res;
- }
-
- return 1;
-}
int
main(int argc, char **argv)
struct yarrow256_ctx yarrow;
struct rsa_public_key pub;
struct rsa_private_key priv;
- char buf[16];
- int fd;
int c;
char *pub_name = NULL;
- char *priv_name = NULL;
- struct stat sbuf;
+ const char *priv_name = NULL;
+ const char *random_name = NULL;
struct nettle_buffer pub_buffer;
struct nettle_buffer priv_buffer;
- while ( (c = getopt(argc, argv, "o:")) != -1)
+ while ( (c = getopt(argc, argv, "o:r:")) != -1)
switch (c)
{
case 'o':
priv_name = optarg;
break;
+
+ case 'r':
+ random_name = optarg;
+ break;
+
case '?':
if (isprint (optopt))
fprintf(stderr, "Unknown option `-%c'.\n", optopt);
return EXIT_FAILURE;
}
- if (stat(priv_name, &sbuf) == 0)
- {
- fprintf(stderr, "The output file `%s' already exists.\n", priv_name);
- return EXIT_FAILURE;
- }
-
asprintf(&pub_name, "%s.pub", priv_name);
if (!pub_name)
{
return EXIT_FAILURE;
}
- if (stat(pub_name, &sbuf) == 0)
- {
- fprintf(stderr, "The output file `%s' already exists.\n", pub_name);
- return EXIT_FAILURE;
- }
-
- /* Read some data to seed the generator */
- if ( ( (fd = open(RANDOM_DEVICE, O_RDONLY)) < 0)
- || (sizeof(buf) != read(fd, buf, sizeof(buf))))
- {
- fprintf(stderr, "Failed to open `%s': %s\n",
- RANDOM_DEVICE, strerror(errno));
- return EXIT_FAILURE;
- }
-
/* NOTE: No sources */
yarrow256_init(&yarrow, 0, NULL);
- yarrow256_seed(&yarrow, sizeof(buf), buf);
-
+
+ /* Read some data to seed the generator */
+ simple_random(&yarrow, random_name);
+
rsa_init_public_key(&pub);
rsa_init_private_key(&priv);
return EXIT_FAILURE;
}
- if (!write_file(pub_name, &pub_buffer))
+ if (!write_file(pub_name, pub_buffer.size, pub_buffer.contents))
{
fprintf(stderr, "Failed to write public key: %s\n",
strerror(errno));
return EXIT_FAILURE;
}
- if (!write_file(priv_name, &priv_buffer))
+ if (!write_file(priv_name, priv_buffer.size, priv_buffer.contents))
{
fprintf(stderr, "Failed to write private key: %s\n",
strerror(errno));
return EXIT_SUCCESS;
}
+#endif /* WITH_PUBLIC_KEY */