From 768b30dab480dcb5c0a858dd42a2da99c3059716 Mon Sep 17 00:00:00 2001 From: yorickdowne <71337066+yorickdowne@users.noreply.github.com> Date: Tue, 3 Sep 2024 18:41:14 -0400 Subject: [PATCH] Increasing Minimum password length to 12 (#129) --- .../intl/ar/utils/validation.json | 4 ++-- .../intl/el/utils/validation.json | 4 ++-- .../intl/en/utils/validation.json | 2 +- .../intl/fr/utils/validation.json | 4 ++-- .../intl/id/utils/validation.json | 4 ++-- .../intl/it/utils/validation.json | 4 ++-- .../intl/ja/utils/validation.json | 4 ++-- .../intl/ko/utils/validation.json | 4 ++-- .../intl/pt-BR/utils/validation.json | 4 ++-- .../intl/ro/utils/validation.json | 4 ++-- .../intl/tr/utils/validation.json | 2 +- .../intl/zh-CN/utils/validation.json | 4 ++-- ethstaker_deposit/utils/validation.py | 2 +- tests/test_cli/test_existing_mnemonic.py | 12 ++++++------ tests/test_cli/test_new_mnemonic.py | 18 +++++++++--------- tests/test_cli/test_partial_deposit.py | 6 +++--- tests/test_cli/test_regeneration.py | 4 ++-- tests/test_deposit.py | 8 ++++---- tests/test_utils/test_crypto.py | 12 ++++++------ tests/test_utils/test_validation.py | 4 ++-- 20 files changed, 55 insertions(+), 55 deletions(-) diff --git a/ethstaker_deposit/intl/ar/utils/validation.json b/ethstaker_deposit/intl/ar/utils/validation.json index 45453753..26b10c64 100644 --- a/ethstaker_deposit/intl/ar/utils/validation.json +++ b/ethstaker_deposit/intl/ar/utils/validation.json @@ -3,6 +3,6 @@ "msg_deposit_verification": "التحقق من الإيداعات الخاصة بك:\t" }, "validate_password_strength": { - "msg_password_length": "يجب أن يكون طول كلمة المرور 8 على الأقل. الرجاء إعادة الكتابة" + "msg_password_length": "يجب أن يكون طول كلمة المرور 12 على الأقل. الرجاء إعادة الكتابة" } -} \ No newline at end of file +} diff --git a/ethstaker_deposit/intl/el/utils/validation.json b/ethstaker_deposit/intl/el/utils/validation.json index cf1cb3de..440815c2 100644 --- a/ethstaker_deposit/intl/el/utils/validation.json +++ b/ethstaker_deposit/intl/el/utils/validation.json @@ -3,6 +3,6 @@ "msg_deposit_verification": "Επαλήθευση των καταθέσεών σας:\t" }, "validate_password_strength": { - "msg_password_length": "Το μήκος του κωδικού πρόσβασης πρέπει να είναι τουλάχιστον 8. Πληκτρολογήστε ξανά" + "msg_password_length": "Το μήκος του κωδικού πρόσβασης πρέπει να είναι τουλάχιστον 12. Πληκτρολογήστε ξανά" } -} \ No newline at end of file +} diff --git a/ethstaker_deposit/intl/en/utils/validation.json b/ethstaker_deposit/intl/en/utils/validation.json index 9559e3f6..14cd1666 100644 --- a/ethstaker_deposit/intl/en/utils/validation.json +++ b/ethstaker_deposit/intl/en/utils/validation.json @@ -3,7 +3,7 @@ "msg_deposit_verification": "Verifying your deposit_data-*.json file(s):\t" }, "validate_password_strength": { - "msg_password_length": "The password length should be at least 8. Please retype.", + "msg_password_length": "The password length should be at least 12. Please retype.", "msg_password_utf8_win32": "Your terminal is not UTF-8 encoded. To ensure the keystore file can be imported on Linux, the password should contain only English-language characters. Please retype.", "msg_password_utf8": "Your terminal is not UTF-8 encoded. To ensure the keystore file can be imported on Linux, the password should contain only English-language characters. Please retype.\nAlternatively, you can quit this program and relaunch it from a UTF-8 encoded terminal." }, diff --git a/ethstaker_deposit/intl/fr/utils/validation.json b/ethstaker_deposit/intl/fr/utils/validation.json index 7a76e7bb..fa8aa800 100644 --- a/ethstaker_deposit/intl/fr/utils/validation.json +++ b/ethstaker_deposit/intl/fr/utils/validation.json @@ -3,6 +3,6 @@ "msg_deposit_verification": "Vérification de vos dépôts :\t" }, "validate_password_strength": { - "msg_password_length": "Le mot de passe doit comporter au moins 8 caractères. Veuillez recommencer." + "msg_password_length": "Le mot de passe doit comporter au moins 12 caractères. Veuillez recommencer." } -} \ No newline at end of file +} diff --git a/ethstaker_deposit/intl/id/utils/validation.json b/ethstaker_deposit/intl/id/utils/validation.json index f2de64f8..17060e4e 100644 --- a/ethstaker_deposit/intl/id/utils/validation.json +++ b/ethstaker_deposit/intl/id/utils/validation.json @@ -3,6 +3,6 @@ "msg_deposit_verification": "Memverifikasi deposit Anda:\t" }, "validate_password_strength": { - "msg_password_length": "Panjang kata sandi minimal harus 8. Harap ketik ulang" + "msg_password_length": "Panjang kata sandi minimal harus 12. Harap ketik ulang" } -} \ No newline at end of file +} diff --git a/ethstaker_deposit/intl/it/utils/validation.json b/ethstaker_deposit/intl/it/utils/validation.json index ec270c20..e9841b31 100644 --- a/ethstaker_deposit/intl/it/utils/validation.json +++ b/ethstaker_deposit/intl/it/utils/validation.json @@ -3,6 +3,6 @@ "msg_deposit_verification": "Verifica dei tuoi depositi:\t" }, "validate_password_strength": { - "msg_password_length": "La lunghezza della password deve essere almeno di 8 caratteri. Ripetila" + "msg_password_length": "La lunghezza della password deve essere almeno di 12 caratteri. Ripetila" } -} \ No newline at end of file +} diff --git a/ethstaker_deposit/intl/ja/utils/validation.json b/ethstaker_deposit/intl/ja/utils/validation.json index e674fe58..a175ac1f 100644 --- a/ethstaker_deposit/intl/ja/utils/validation.json +++ b/ethstaker_deposit/intl/ja/utils/validation.json @@ -3,6 +3,6 @@ "msg_deposit_verification": "入金確認中:" }, "validate_password_strength": { - "msg_password_length": "パスワードの長さは少なくとも8文字でなければなりません。再入力してください" + "msg_password_length": "パスワードの長さは少なくとも12文字でなければなりません。再入力してください" } -} \ No newline at end of file +} diff --git a/ethstaker_deposit/intl/ko/utils/validation.json b/ethstaker_deposit/intl/ko/utils/validation.json index 1c309db3..ea2fbb5b 100644 --- a/ethstaker_deposit/intl/ko/utils/validation.json +++ b/ethstaker_deposit/intl/ko/utils/validation.json @@ -3,6 +3,6 @@ "msg_deposit_verification": "예치금 검증 중:\t" }, "validate_password_strength": { - "msg_password_length": "비밀번호는 8자 이상이어야 합니다. 다시 입력하세요." + "msg_password_length": "비밀번호는 12자 이상이어야 합니다. 다시 입력하세요." } -} \ No newline at end of file +} diff --git a/ethstaker_deposit/intl/pt-BR/utils/validation.json b/ethstaker_deposit/intl/pt-BR/utils/validation.json index f3caa042..e14852e0 100644 --- a/ethstaker_deposit/intl/pt-BR/utils/validation.json +++ b/ethstaker_deposit/intl/pt-BR/utils/validation.json @@ -3,6 +3,6 @@ "msg_deposit_verification": "Verificação dos seus depósitos:\t" }, "validate_password_strength": { - "msg_password_length": "A senha deve ter pelo menos 8 caracteres. Por favor, digite-a novamente" + "msg_password_length": "A senha deve ter pelo menos 12 caracteres. Por favor, digite-a novamente" } -} \ No newline at end of file +} diff --git a/ethstaker_deposit/intl/ro/utils/validation.json b/ethstaker_deposit/intl/ro/utils/validation.json index ad69a6d5..a036fd76 100644 --- a/ethstaker_deposit/intl/ro/utils/validation.json +++ b/ethstaker_deposit/intl/ro/utils/validation.json @@ -3,6 +3,6 @@ "msg_deposit_verification": "Se verifică depozitele tale:\t" }, "validate_password_strength": { - "msg_password_length": "Parola trebuie să aibă o lungime de cel puțin 8. Te rugăm să o reintroduci" + "msg_password_length": "Parola trebuie să aibă o lungime de cel puțin 12. Te rugăm să o reintroduci" } -} \ No newline at end of file +} diff --git a/ethstaker_deposit/intl/tr/utils/validation.json b/ethstaker_deposit/intl/tr/utils/validation.json index c4d0fda3..4ccae0cb 100644 --- a/ethstaker_deposit/intl/tr/utils/validation.json +++ b/ethstaker_deposit/intl/tr/utils/validation.json @@ -3,7 +3,7 @@ "msg_deposit_verification": "Depozitonuz doğrulanıyor:\t" }, "validate_password_strength": { - "msg_password_length": "Şifre uzunluğu en az 8 olmalıdır. Lütfen tekrar girin." + "msg_password_length": "Şifre uzunluğu en az 12 olmalıdır. Lütfen tekrar girin." }, "validate_int_range": { "err_not_positive_integer": "Pozitif tam sayı değil. Lütfen tekrar girin." diff --git a/ethstaker_deposit/intl/zh-CN/utils/validation.json b/ethstaker_deposit/intl/zh-CN/utils/validation.json index f13801f2..144dd154 100644 --- a/ethstaker_deposit/intl/zh-CN/utils/validation.json +++ b/ethstaker_deposit/intl/zh-CN/utils/validation.json @@ -3,6 +3,6 @@ "msg_deposit_verification": "正在验证您的存款:\t" }, "validate_password_strength": { - "msg_password_length": "密码长度至少应为 8。请重新输入" + "msg_password_length": "密码长度至少应为 12。请重新输入" } -} \ No newline at end of file +} diff --git a/ethstaker_deposit/utils/validation.py b/ethstaker_deposit/utils/validation.py index 4dd3e5e8..75526ed4 100644 --- a/ethstaker_deposit/utils/validation.py +++ b/ethstaker_deposit/utils/validation.py @@ -137,7 +137,7 @@ def validate_deposit(deposit_data_dict: Dict[str, Any], credential: Credential = def validate_password_strength(password: str) -> str: - if len(password) < 8: + if len(password) < 12: raise ValidationError(load_text(['msg_password_length'])) encoding = sys.stdin.encoding.lower() diff --git a/tests/test_cli/test_existing_mnemonic.py b/tests/test_cli/test_existing_mnemonic.py index 1fdeb7d0..2e0f823b 100644 --- a/tests/test_cli/test_existing_mnemonic.py +++ b/tests/test_cli/test_existing_mnemonic.py @@ -23,7 +23,7 @@ def test_existing_mnemonic_bls_withdrawal() -> None: inputs = [ 'TREZOR', 'abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about', - '2', '2', '5', 'mainnet', 'MyPassword', 'MyPassword'] + '2', '2', '5', 'mainnet', 'MyPasswordIs', 'MyPasswordIs'] data = '\n'.join(inputs) arguments = [ '--language', 'english', @@ -68,7 +68,7 @@ def test_existing_mnemonic_withdrawal_address() -> None: inputs = [ 'TREZOR', 'abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about', - '2', '2', '5', 'mainnet', 'MyPassword', 'MyPassword', withdrawal_address, withdrawal_address] + '2', '2', '5', 'mainnet', 'MyPasswordIs', 'MyPasswordIs', withdrawal_address, withdrawal_address] data = '\n'.join(inputs) arguments = [ '--language', 'english', @@ -125,7 +125,7 @@ def test_existing_mnemonic_withdrawal_address_bad_checksum() -> None: inputs = [ 'TREZOR', 'abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about', - '2', '2', '5', 'mainnet', 'MyPassword', 'MyPassword', + '2', '2', '5', 'mainnet', 'MyPasswordIs', 'MyPasswordIs', wrong_withdrawal_address, correct_withdrawal_address, correct_withdrawal_address ] data = '\n'.join(inputs) @@ -184,7 +184,7 @@ def test_pbkdf2_new_mnemonic() -> None: runner = CliRunner() inputs = [ 'abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about', - '0', '0', '1', 'mainnet', 'MyPassword', 'MyPassword', + '0', '0', '1', 'mainnet', 'MyPasswordIs', 'MyPasswordIs', ] data = '\n'.join(inputs) arguments = [ @@ -273,7 +273,7 @@ async def test_script() -> None: '--mnemonic_password', 'TREZOR', '--validator_start_index', '1', '--chain', 'mainnet', - '--keystore_password', 'MyPassword', + '--keystore_password', 'MyPasswordIs', '--withdrawal_address', '""', '--folder', my_folder_path, ] @@ -322,7 +322,7 @@ async def test_script_abbreviated_mnemonic() -> None: '--mnemonic_password', 'TREZOR', '--validator_start_index', '1', '--chain', 'mainnet', - '--keystore_password', 'MyPassword', + '--keystore_password', 'MyPasswordIs', '--withdrawal_address', '""', '--folder', my_folder_path, ] diff --git a/tests/test_cli/test_new_mnemonic.py b/tests/test_cli/test_new_mnemonic.py index 433bdc79..3185bfb8 100644 --- a/tests/test_cli/test_new_mnemonic.py +++ b/tests/test_cli/test_new_mnemonic.py @@ -34,7 +34,7 @@ def mock_get_mnemonic(language, words_path, entropy=None) -> str: os.mkdir(my_folder_path) runner = CliRunner() - inputs = ['english', 'english', '1', 'mainnet', 'MyPassword', 'MyPassword', + inputs = ['english', 'english', '1', 'mainnet', 'MyPasswordIs', 'MyPasswordIs', 'abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about'] data = '\n'.join(inputs) arguments = [ @@ -81,7 +81,7 @@ def mock_get_mnemonic(language, words_path, entropy=None) -> str: runner = CliRunner() withdrawal_address = '0x00000000219ab540356cBB839Cbe05303d7705Fa' - inputs = ['english', '1', 'mainnet', 'MyPassword', 'MyPassword', withdrawal_address, withdrawal_address, + inputs = ['english', '1', 'mainnet', 'MyPasswordIs', 'MyPasswordIs', withdrawal_address, withdrawal_address, 'abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about'] data = '\n'.join(inputs) arguments = [ @@ -141,7 +141,7 @@ def mock_get_mnemonic(language, words_path, entropy=None) -> str: wrong_withdrawal_address = '0x00000000219ab540356cBB839Cbe05303d7705FA' correct_withdrawal_address = '0x00000000219ab540356cBB839Cbe05303d7705Fa' - inputs = ['english', '1', 'mainnet', 'MyPassword', 'MyPassword', + inputs = ['english', '1', 'mainnet', 'MyPasswordIs', 'MyPasswordIs', wrong_withdrawal_address, correct_withdrawal_address, correct_withdrawal_address, 'abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about'] data = '\n'.join(inputs) @@ -198,7 +198,7 @@ def mock_get_mnemonic(language, words_path, entropy=None) -> str: runner = CliRunner() withdrawal_address = '0x00000000219ab540356cBB839Cbe05303d7705Fa' - inputs = [withdrawal_address, 'english', '1', 'mainnet', 'MyPassword', 'MyPassword', + inputs = [withdrawal_address, 'english', '1', 'mainnet', 'MyPasswordIs', 'MyPasswordIs', 'abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about'] data = '\n'.join(inputs) arguments = [ @@ -256,7 +256,7 @@ def mock_get_mnemonic(language, words_path, entropy=None) -> str: runner = CliRunner() withdrawal_address = '0x00000000219ab540356cBB839Cbe05303d7705Fa' - inputs = [withdrawal_address, 'english', '1', 'mainnet', 'MyPassword', 'MyPassword', + inputs = [withdrawal_address, 'english', '1', 'mainnet', 'MyPasswordIs', 'MyPasswordIs', 'abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about'] data = '\n'.join(inputs) arguments = [ @@ -314,7 +314,7 @@ def mock_get_mnemonic(language, words_path, entropy=None) -> str: runner = CliRunner() withdrawal_address = '0x00000000219ab540356cBB839Cbe05303d7705Fa' - inputs = [withdrawal_address, 'english', '1', 'mainnet', 'MyPassword', 'MyPassword', + inputs = [withdrawal_address, 'english', '1', 'mainnet', 'MyPasswordIs', 'MyPasswordIs', 'abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about'] data = '\n'.join(inputs) arguments = [ @@ -377,7 +377,7 @@ def mock_get_mnemonic(language, words_path, entropy=None) -> str: runner = CliRunner() - inputs = ['english', '1', 'mainnet', 'MyPassword', 'MyPassword', + inputs = ['english', '1', 'mainnet', 'MyPasswordIs', 'MyPasswordIs', 'abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about'] data = '\n'.join(inputs) arguments = [ @@ -467,7 +467,7 @@ async def test_script_bls_withdrawal() -> None: '--num_validators', '5', '--mnemonic_language', 'english', '--chain', 'mainnet', - '--keystore_password', 'MyPassword', + '--keystore_password', 'MyPasswordIs', '--withdrawal_address', '""', '--folder', my_folder_path, ] @@ -555,7 +555,7 @@ async def test_script_abbreviated_mnemonic() -> None: '--num_validators', '5', '--mnemonic_language', 'english', '--chain', 'mainnet', - '--keystore_password', 'MyPassword', + '--keystore_password', 'MyPasswordIs', '--withdrawal_address', '""', '--folder', my_folder_path, ] diff --git a/tests/test_cli/test_partial_deposit.py b/tests/test_cli/test_partial_deposit.py index 20769594..006cf582 100644 --- a/tests/test_cli/test_partial_deposit.py +++ b/tests/test_cli/test_partial_deposit.py @@ -36,7 +36,7 @@ def test_partial_deposit(amount: str) -> None: os.mkdir(partial_deposit_folder) chain_settings = get_chain_setting() - password = "Password1" + password = "MyPasswordIs" withdrawal_address = "0xcd60A5f152724480c3a95E4Ff4dacEEf4074854d" mnemonic = "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about" @@ -82,7 +82,7 @@ def test_partial_deposit_matches_existing_mnemonic_deposit() -> None: if not os.path.exists(my_folder_path): os.mkdir(my_folder_path) - password = "Password1" + password = "MyPasswordIs" withdrawal_address = "0xcd60A5f152724480c3a95E4Ff4dacEEf4074854d" runner = CliRunner() @@ -152,7 +152,7 @@ def test_partial_deposit_does_not_match_if_amount_differs() -> None: if not os.path.exists(my_folder_path): os.mkdir(my_folder_path) - password = "Password1" + password = "MyPasswordIs" withdrawal_address = "0xcd60A5f152724480c3a95E4Ff4dacEEf4074854d" runner = CliRunner() diff --git a/tests/test_cli/test_regeneration.py b/tests/test_cli/test_regeneration.py index e0a7e82b..160ce145 100644 --- a/tests/test_cli/test_regeneration.py +++ b/tests/test_cli/test_regeneration.py @@ -32,7 +32,7 @@ def mock_get_mnemonic(language, words_path, entropy=None) -> str: runner = CliRunner() # Create index 0 and 1 - my_password = "MyPassword" + my_password = "MyPasswordIs" inputs = ['english', 'english', '2', 'mainnet', my_password, my_password, mock_mnemonic] data = '\n'.join(inputs) arguments = [ @@ -64,7 +64,7 @@ def mock_get_mnemonic(language, words_path, entropy=None) -> str: inputs = [ 'english', mock_mnemonic, - '1', '1', '2', 'mainnet', 'MyPassword', 'MyPassword'] + '1', '1', '2', 'mainnet', 'MyPasswordIs', 'MyPasswordIs'] data = '\n'.join(inputs) arguments = [ '--ignore_connectivity', diff --git a/tests/test_deposit.py b/tests/test_deposit.py index 48d03907..b98b473c 100644 --- a/tests/test_deposit.py +++ b/tests/test_deposit.py @@ -98,7 +98,7 @@ def _mock_socket_getaddrinfo(url, port): runner = CliRunner() inputs = [ 'abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about', - '0', '0', '1', 'mainnet', 'MyPassword', 'MyPassword'] + '0', '0', '1', 'mainnet', 'MyPasswordIs', 'MyPasswordIs'] data = '\n'.join(inputs) arguments = [ '--language', 'english', @@ -131,7 +131,7 @@ def _mock_socket_getaddrinfo(url, port): runner = CliRunner() inputs = [ 'abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about', - '0', '0', '1', 'mainnet', 'MyPassword', 'MyPassword'] + '0', '0', '1', 'mainnet', 'MyPasswordIs', 'MyPasswordIs'] data = '\n'.join(inputs) arguments = [ '--language', 'english', @@ -172,7 +172,7 @@ def _mock_socket_getaddrinfo(url, port): '--mnemonic', 'aban aban aban aban aban aban aban aban aban aban aban abou', '--validator_start_index', '0', '--chain', 'mainnet', - '--keystore_password', 'MyPassword', + '--keystore_password', 'MyPasswordIs', '--withdrawal_address', '', '--folder', my_folder_path, ] @@ -209,7 +209,7 @@ def _mock_socket_getaddrinfo(url, port): '--mnemonic_password', 'TREZOR', '--validator_start_index', '0', '--chain', 'mainnet', - '--keystore_password', 'MyPassword', + '--keystore_password', 'MyPasswordIs', '--withdrawal_address', '', '--folder', my_folder_path, ] diff --git a/tests/test_utils/test_crypto.py b/tests/test_utils/test_crypto.py index b115ab3f..87eb59ad 100644 --- a/tests/test_utils/test_crypto.py +++ b/tests/test_utils/test_crypto.py @@ -18,7 +18,7 @@ def test_scrypt_invalid_params(n, r, valid): if valid: scrypt( - password="mypassword", + password="MyPasswordIs", salt="mysalt", n=n, r=r, @@ -28,7 +28,7 @@ def test_scrypt_invalid_params(n, r, valid): else: with pytest.raises(ValueError): scrypt( - password="mypassword", + password="MyPasswordIs", salt="mysalt", n=n, r=r, @@ -47,7 +47,7 @@ def test_scrypt_invalid_params(n, r, valid): def test_PBKDF2_invalid_prf(prf, valid): if valid: PBKDF2( - password="mypassword", + password="MyPasswordIs", salt="mysalt", dklen=64, c=2048, @@ -56,7 +56,7 @@ def test_PBKDF2_invalid_prf(prf, valid): else: with pytest.raises(ValueError): PBKDF2( - password="mypassword", + password="MyPasswordIs", salt="mysalt", dklen=64, c=2048, @@ -75,7 +75,7 @@ def test_PBKDF2_invalid_prf(prf, valid): def test_PBKDF2_invalid_count(count, prf, valid): if valid: PBKDF2( - password="mypassword", + password="MyPasswordIs", salt="mysalt", dklen=64, c=count, @@ -84,7 +84,7 @@ def test_PBKDF2_invalid_count(count, prf, valid): else: with pytest.raises(ValueError): PBKDF2( - password="mypassword", + password="MyPasswordIs", salt="mysalt", dklen=64, c=2048, diff --git a/tests/test_utils/test_validation.py b/tests/test_utils/test_validation.py index 1c0ecf71..ed662da4 100644 --- a/tests/test_utils/test_validation.py +++ b/tests/test_utils/test_validation.py @@ -18,8 +18,8 @@ @pytest.mark.parametrize( 'password, valid', [ - ('12345678', True), - ('1234567', False), + ('MyPasswordIs', True), + ('MyPassword', False), ] ) def test_validate_password_strength(password: str, valid: bool) -> None: