blob: 866c95807eb0b2bed76c7a0a1f58520ee41d8905 [file] [log] [blame]
// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// hostkeygen is a minimalist program to generate host keys iff needed.
#include <errno.h>
#include <stdio.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/types.h>
#include "authfile.h"
#include "sshkey.h"
#include "ssherr.h"
int main() {
char* key_type = "ed25519";
char* path = "/data/ssh/ssh_host_ed25519_key";
char* dir = "/data/ssh";
int type, r;
struct stat st;
struct sshkey *private, *public;
// ignore errors, if the dir already exists, this is benign, if it does not
// and this fails, the write will fail.
mkdir(dir, 0700);
if (stat(path, &st) == 0) {
return 0;
} else if (errno != ENOENT) {
perror("stat ssh private key");
return 1;
}
type = sshkey_type_from_name(key_type);
if ((r = sshkey_generate(type, 0, &private)) != 0) {
fprintf(stderr, "sshkey_generate failed: %s\n", ssh_err(r));
return 1;
}
if ((r = sshkey_from_private(private, &public)) != 0) {
fprintf(stderr, "sshkey_from_private failed: %s\n", ssh_err(r));
return 1;
}
if ((r = sshkey_save_private(private, path, "", "", 1, NULL, 0)) != 0) {
fprintf(stderr, "Saving key \"%s\" failed: %s\n", path, ssh_err(r));
return 1;
}
return 0;
}