diff --git a/scripts/imgtool/image.py b/scripts/imgtool/image.py
index 94ed820..d6899ef 100644
--- a/scripts/imgtool/image.py
+++ b/scripts/imgtool/image.py
@@ -156,13 +156,16 @@
     def load(self, path):
         """Load an image from a given file"""
         ext = os.path.splitext(path)[1][1:].lower()
-        if ext == INTEL_HEX_EXT:
-            ih = IntelHex(path)
-            self.payload = ih.tobinarray()
-            self.base_addr = ih.minaddr()
-        else:
-            with open(path, 'rb') as f:
-                self.payload = f.read()
+        try:
+            if ext == INTEL_HEX_EXT:
+                ih = IntelHex(path)
+                self.payload = ih.tobinarray()
+                self.base_addr = ih.minaddr()
+            else:
+                with open(path, 'rb') as f:
+                    self.payload = f.read()
+        except FileNotFoundError:
+            raise click.UsageError("Input file not found")
 
         # Add the image header if needed.
         if self.pad_header and self.header_size > 0:
@@ -180,8 +183,8 @@
         if ext == INTEL_HEX_EXT:
             # input was in binary format, but HEX needs to know the base addr
             if self.base_addr is None and hex_addr is None:
-                raise Exception("No address exists in input file neither was "
-                                "it provided by user")
+                raise click.UsageError("No address exists in input file "
+                                       "neither was it provided by user")
             h = IntelHex()
             if hex_addr is not None:
                 self.base_addr = hex_addr
@@ -381,7 +384,8 @@
             return MAX_ALIGN * 2 + magic_size
         else:
             if write_size not in set([1, 2, 4, 8]):
-                raise Exception("Invalid alignment: {}".format(write_size))
+                raise click.BadParameter("Invalid alignment: {}".format(
+                    write_size))
             m = DEFAULT_MAX_SECTORS if max_sectors is None else max_sectors
             trailer = m * 3 * write_size  # status area
             if enckey is not None:
diff --git a/scripts/imgtool/main.py b/scripts/imgtool/main.py
index ba58bfd..5ef7943 100755
--- a/scripts/imgtool/main.py
+++ b/scripts/imgtool/main.py
@@ -22,6 +22,7 @@
 import sys
 from imgtool import image, imgtool_version
 from imgtool.version import decode_version
+from .keys import RSAUsageError, ECDSAUsageError, Ed25519UsageError
 
 
 def gen_rsa2048(keyfile, passwd):
@@ -116,7 +117,10 @@
     key = load_key(key)
     if key is None:
         print("Invalid passphrase")
-    key.emit_private(minimal)
+    try:
+        key.emit_private(minimal)
+    except (RSAUsageError, ECDSAUsageError, Ed25519UsageError) as e:
+        raise click.UsageError(e)
 
 
 @click.argument('imgfile')
@@ -254,7 +258,8 @@
                 or (isinstance(key, keys.RSA) and
                     not isinstance(enckey, keys.RSAPublic))):
             # FIXME
-            raise Exception("Signing and encryption must use the same type of key")
+            raise click.UsageError("Signing and encryption must use the same "
+                                   "type of key")
     img.create(key, enckey, dependencies)
     img.save(outfile, hex_addr)
 
