imgtool: Add x25519 key generation and getpriv

Signed-off-by: Fabio Utzig <utzig@apache.org>
diff --git a/scripts/imgtool/main.py b/scripts/imgtool/main.py
index 47d5811..de9b303 100755
--- a/scripts/imgtool/main.py
+++ b/scripts/imgtool/main.py
@@ -22,7 +22,8 @@
 import sys
 from imgtool import image, imgtool_version
 from imgtool.version import decode_version
-from .keys import RSAUsageError, ECDSAUsageError, Ed25519UsageError
+from .keys import (
+    RSAUsageError, ECDSAUsageError, Ed25519UsageError, X25519UsageError)
 
 MIN_PYTHON_VERSION = (3, 6)
 if sys.version_info < MIN_PYTHON_VERSION:
@@ -51,13 +52,18 @@
     keys.Ed25519.generate().export_private(path=keyfile, passwd=passwd)
 
 
+def gen_x25519(keyfile, passwd):
+    keys.X25519.generate().export_private(path=keyfile, passwd=passwd)
+
+
 valid_langs = ['c', 'rust']
 keygens = {
     'rsa-2048':   gen_rsa2048,
     'rsa-3072':   gen_rsa3072,
     'ecdsa-p256': gen_ecdsa_p256,
     'ecdsa-p224': gen_ecdsa_p224,
-    'ed25519': gen_ed25519,
+    'ed25519':    gen_ed25519,
+    'x25519':     gen_x25519,
 }
 
 
@@ -124,7 +130,8 @@
         print("Invalid passphrase")
     try:
         key.emit_private(minimal)
-    except (RSAUsageError, ECDSAUsageError, Ed25519UsageError) as e:
+    except (RSAUsageError, ECDSAUsageError, Ed25519UsageError,
+            X25519UsageError) as e:
         raise click.UsageError(e)