From 7b6d08dd95d57a6fde7ffcda162954da47402395 Mon Sep 17 00:00:00 2001
From: Moul <moul@moul.re>
Date: Fri, 22 Sep 2023 21:18:58 +0200
Subject: [PATCH] Raise exception when no password is passed with EWIF format

---
 duniterpy/key/__init__.py     |  2 +-
 duniterpy/key/signing_key.py  |  4 +++-
 tests/key/test_signing_key.py | 12 +++++++++++-
 3 files changed, 15 insertions(+), 3 deletions(-)

diff --git a/duniterpy/key/__init__.py b/duniterpy/key/__init__.py
index ff6eb1c..9a84db9 100644
--- a/duniterpy/key/__init__.py
+++ b/duniterpy/key/__init__.py
@@ -15,5 +15,5 @@
 
 from .ascii_armor import AsciiArmor
 from .encryption_key import PublicKey, SecretKey
-from .signing_key import SigningKey
+from .signing_key import SigningKey, SigningKeyException
 from .verifying_key import VerifyingKey
diff --git a/duniterpy/key/signing_key.py b/duniterpy/key/signing_key.py
index 95f23ad..71a6dc5 100644
--- a/duniterpy/key/signing_key.py
+++ b/duniterpy/key/signing_key.py
@@ -276,7 +276,9 @@ sec: {base58_signing_key}"
 
         if fi == b"\x01":
             result = SigningKey.from_wif_hex(wif_hex)
-        elif fi == b"\x02" and password is not None:
+        elif fi == b"\x02":
+            if password is None:
+                raise SigningKeyException("Error: no password provided with EWIF")
             result = SigningKey.from_ewif_hex(wif_hex, password)
         else:
             raise SigningKeyException("Error: Bad format: not WIF nor EWIF")
diff --git a/tests/key/test_signing_key.py b/tests/key/test_signing_key.py
index b2589b3..e3326e2 100644
--- a/tests/key/test_signing_key.py
+++ b/tests/key/test_signing_key.py
@@ -17,7 +17,9 @@ import base64
 import os
 import unittest
 
-from duniterpy.key import PublicKey, SigningKey, VerifyingKey
+import pytest
+
+from duniterpy.key import PublicKey, SigningKey, SigningKeyException, VerifyingKey
 from duniterpy.key.scrypt_params import ScryptParams
 
 TEST_FILE_PATH = "/tmp/test_file.txt"
@@ -101,6 +103,14 @@ class TestSigningKey(unittest.TestCase):
         sign_key_load = SigningKey.from_wif_or_ewif_file(TEST_FILE_PATH)
         self.assertEqual(sign_key_save.sk, sign_key_load.sk)
 
+    def test_load_ewif_file_without_password_raise_exception(self):
+        sign_key_save = SigningKey.from_credentials("alice", "password")
+        sign_key_save.save_ewif_file(TEST_FILE_PATH, "password")
+
+        error = "Error: no password provided with EWIF"
+        with pytest.raises(SigningKeyException, match=error):
+            SigningKey.from_wif_or_ewif_file(TEST_FILE_PATH)
+
     def test_load_credentials_file(self):
         salt = password = "test"
 
-- 
GitLab