diff --git a/duniterpy/key/signing_key.py b/duniterpy/key/signing_key.py
index 4f1e444d1bd82a35603de52f438a3a27a2b2d7f0..a36cd80fe9fbfa20a7bb58a107f7a7a0e77d4817 100644
--- a/duniterpy/key/signing_key.py
+++ b/duniterpy/key/signing_key.py
@@ -46,7 +46,7 @@ class SigningKey(libnacl.sign.Signer):
 
         :param salt: Secret salt passphrase credential
         :param password: Secret password credential
-        :param scrypt_params: ScryptParams instance
+        :param scrypt_params: ScryptParams instance or None
         """
         if scrypt_params is None:
             scrypt_params = ScryptParams()
@@ -64,6 +64,28 @@ class SigningKey(libnacl.sign.Signer):
 
         return cls(seed)
 
+    @classmethod
+    def from_credentials_file(
+        cls, path: str, scrypt_params: Optional[ScryptParams] = None
+    ) -> SigningKeyType:
+        """
+        Create a SigningKey object from a credentials file
+
+        A file with the salt on the first line and the password on the second line
+
+        :param path: Credentials file path
+        :param scrypt_params: ScryptParams instance or None
+        :return:
+        """
+        # capture credentials from file
+        with open(path, "r") as fh:
+            lines = fh.readlines()
+            assert len(lines) > 1
+            salt = lines[0].strip()
+            password = lines[1].strip()
+
+        return cls.from_credentials(salt, password, scrypt_params)
+
     def save_seedhex_file(self, path: str) -> None:
         """
         Save hexadecimal seed file from seed
diff --git a/examples/load_credentials_file.py b/examples/load_credentials_file.py
new file mode 100644
index 0000000000000000000000000000000000000000..a3de26d6b6bcb8da0d8451933bb156a64430d239
--- /dev/null
+++ b/examples/load_credentials_file.py
@@ -0,0 +1,24 @@
+import sys
+
+from duniterpy.key import SigningKey
+
+if __name__ == "__main__":
+
+    if len(sys.argv) < 2:
+        print(
+            """
+        Usage:
+            python load_credentials_file.py FILEPATH
+        """
+        )
+
+    # capture filepath argument
+    credentials_filepath = sys.argv[1]
+
+    # create SigningKey instance from file
+    signing_key_instance = SigningKey.from_credentials_file(
+        credentials_filepath
+    )  # type: SigningKey
+
+    # print pubkey
+    print("Public key from credentials file: {}".format(signing_key_instance.pubkey))
diff --git a/tests/key/test_signing_key.py b/tests/key/test_signing_key.py
index 25c240ede874fb38346d5b612bcbb0dc9ec45974..58802fb42667ab6a99f48c59b875ed8544537920 100644
--- a/tests/key/test_signing_key.py
+++ b/tests/key/test_signing_key.py
@@ -77,3 +77,19 @@ 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_credentials_file(self):
+        salt = password = "test"
+
+        # create a dummy credentials file
+        with open(TEST_FILE_PATH, "w") as fh:
+            fh.write("{}\n{}\n".format(salt, password))
+
+        # same key from credentials
+        sign_key_test = SigningKey.from_credentials(salt, password)
+
+        # test load file
+        sign_key_load = SigningKey.from_credentials_file(TEST_FILE_PATH)
+        self.assertEqual(sign_key_test.sk, sign_key_load.sk)
+        self.assertEqual(sign_key_test.pubkey, sign_key_load.pubkey)
+        self.assertEqual(sign_key_test.vk, sign_key_load.vk)