diff --git a/tool/CMakeLists.txt b/tool/CMakeLists.txt
index a6cc15f..f0af283 100644
--- a/tool/CMakeLists.txt
+++ b/tool/CMakeLists.txt
@@ -8,6 +8,7 @@
   client.cc
   const.cc
   digest.cc
+  generate_ed25519.cc
   genrsa.cc
   pkcs12.cc
   rand.cc
diff --git a/tool/generate_ed25519.cc b/tool/generate_ed25519.cc
new file mode 100644
index 0000000..15d3692
--- /dev/null
+++ b/tool/generate_ed25519.cc
@@ -0,0 +1,67 @@
+/* Copyright (c) 2015, Google Inc.
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
+
+#include <openssl/curve25519.h>
+
+#include <errno.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "../crypto/test/scoped_types.h"
+#include "internal.h"
+
+
+static const struct argument kArguments[] = {
+    {
+        "-out-public", kRequiredArgument, "The file to write the public key to",
+    },
+    {
+        "-out-private", kRequiredArgument,
+        "The file to write the private key to",
+    },
+    {
+        "", kOptionalArgument, "",
+    },
+};
+
+static bool WriteToFile(const std::string &path, const uint8_t *in,
+                        size_t in_len) {
+  ScopedFILE file(fopen(path.c_str(), "wb"));
+  if (!file) {
+    fprintf(stderr, "Failed to open '%s': %s\n", path.c_str(), strerror(errno));
+    return false;
+  }
+  if (fwrite(in, in_len, 1, file.get()) != 1) {
+    fprintf(stderr, "Failed to write to '%s': %s\n", path.c_str(),
+            strerror(errno));
+    return false;
+  }
+  return true;
+}
+
+bool GenerateEd25519Key(const std::vector<std::string> &args) {
+  std::map<std::string, std::string> args_map;
+
+  if (!ParseKeyValueArguments(&args_map, args, kArguments)) {
+    PrintUsage(kArguments);
+    return false;
+  }
+
+  uint8_t public_key[32], private_key[64];
+  ED25519_keypair(public_key, private_key);
+
+  return WriteToFile(args_map["-out-public"], public_key, sizeof(public_key)) &&
+         WriteToFile(args_map["-out-private"], private_key,
+                     sizeof(private_key));
+}
diff --git a/tool/tool.cc b/tool/tool.cc
index afe6840..b825008 100644
--- a/tool/tool.cc
+++ b/tool/tool.cc
@@ -30,6 +30,7 @@
 bool Ciphers(const std::vector<std::string> &args);
 bool Client(const std::vector<std::string> &args);
 bool DoPKCS12(const std::vector<std::string> &args);
+bool GenerateEd25519Key(const std::vector<std::string> &args);
 bool GenerateRSAKey(const std::vector<std::string> &args);
 bool MD5Sum(const std::vector<std::string> &args);
 bool Rand(const std::vector<std::string> &args);
@@ -44,13 +45,14 @@
 typedef bool (*tool_func_t)(const std::vector<std::string> &args);
 
 struct Tool {
-  char name[16];
+  const char *name;
   tool_func_t func;
 };
 
 static const Tool kTools[] = {
   { "ciphers", Ciphers },
   { "client", Client },
+  { "generate-ed25519", GenerateEd25519Key },
   { "genrsa", GenerateRSAKey },
   { "md5sum", MD5Sum },
   { "pkcs12", DoPKCS12 },
@@ -68,19 +70,17 @@
 };
 
 static void usage(const char *name) {
-  printf("Usage: %s [", name);
+  printf("Usage: %s COMMAND\n", name);
+  printf("\n");
+  printf("Available commands:\n");
 
   for (size_t i = 0;; i++) {
     const Tool &tool = kTools[i];
     if (tool.func == nullptr) {
       break;
     }
-    if (i > 0) {
-      printf("|");
-    }
-    printf("%s", tool.name);
+    printf("    %s\n", tool.name);
   }
-  printf("]\n");
 }
 
 tool_func_t FindTool(const std::string &name) {
