From 595cd63f53c281788f6eef62c023546393a93285 Mon Sep 17 00:00:00 2001 From: ilyas585 Date: Wed, 12 Feb 2025 10:20:54 +0300 Subject: [PATCH] Add verify tests Signed-off-by: ilyas585 --- frostfs_api/client/signer.py | 15 ------------ frostfs_api/client/verifier.py | 18 -------------- frostfs_api/crypto/key_extension.py | 21 ---------------- frostfs_api/cryptography/key_extension.py | 1 - tests/client/test_sign_verify.py | 29 ----------------------- tests/crypto/test_key_extension.py | 23 ------------------ 6 files changed, 107 deletions(-) delete mode 100644 frostfs_api/client/signer.py delete mode 100644 frostfs_api/client/verifier.py delete mode 100644 frostfs_api/crypto/key_extension.py delete mode 100644 tests/client/test_sign_verify.py delete mode 100644 tests/crypto/test_key_extension.py diff --git a/frostfs_api/client/signer.py b/frostfs_api/client/signer.py deleted file mode 100644 index 99947b8..0000000 --- a/frostfs_api/client/signer.py +++ /dev/null @@ -1,15 +0,0 @@ -import ecdsa -from hashlib import sha256 - - -class Signer: - def sign_rfc6979(self, private_key: bytes, message: bytes) -> bytes: - if len(private_key) == 0 or private_key is None: - raise ValueError(f"Incorrect private_key: {private_key}") - - # SECP256k1 is the Bitcoin elliptic curve - sk = ecdsa.SigningKey.from_string(private_key, curve=ecdsa.SECP256k1, hashfunc=sha256) - - signature = sk.sign(message, sigencode=ecdsa.util.sigencode_string) - - return signature diff --git a/frostfs_api/client/verifier.py b/frostfs_api/client/verifier.py deleted file mode 100644 index 64cb148..0000000 --- a/frostfs_api/client/verifier.py +++ /dev/null @@ -1,18 +0,0 @@ -import ecdsa -from hashlib import sha256 - - -class Verifier: - def verify_rfc6979(self, public_key: bytes, message: bytes, signature: bytes) -> bool: - if len(public_key) == 0 or public_key is None: - raise ValueError(f"Incorrect public key: {public_key}") - - if message is None or signature is None: - return False - - vk = ecdsa.VerifyingKey.from_string(public_key, curve=ecdsa.SECP256k1, hashfunc=sha256) - - try: - return vk.verify(signature, message) - except ecdsa.BadSignatureError: - return False diff --git a/frostfs_api/crypto/key_extension.py b/frostfs_api/crypto/key_extension.py deleted file mode 100644 index 50e1fe5..0000000 --- a/frostfs_api/crypto/key_extension.py +++ /dev/null @@ -1,21 +0,0 @@ -import base58 -import ecdsa - - -class KeyExtension: - def get_private_key_from_wif(self, wif: str) -> bytes: - if len(wif) == 0 or wif is None: - raise ValueError(f"Empty WIF private key: {wif}") - - decoded = base58.b58decode_check(wif) - if len(decoded) != 34 or decoded[0] != 0x80 or decoded[-1] != 0x01: - raise ValueError("Not decode WIF by base58") - - private_key = decoded[1:-1] - return private_key - - def get_public_key(self, private_key: bytes): - if len(private_key) == 0 or private_key is None: - raise ValueError(f"Empty private key: {private_key}") - - return ecdsa.SigningKey.from_string(private_key, curve=ecdsa.SECP256k1).get_verifying_key().to_string() diff --git a/frostfs_api/cryptography/key_extension.py b/frostfs_api/cryptography/key_extension.py index 335c997..5844e89 100644 --- a/frostfs_api/cryptography/key_extension.py +++ b/frostfs_api/cryptography/key_extension.py @@ -1,6 +1,5 @@ import base58 import ecdsa -from hashlib import sha256 class KeyExtension: diff --git a/tests/client/test_sign_verify.py b/tests/client/test_sign_verify.py deleted file mode 100644 index 5b04eda..0000000 --- a/tests/client/test_sign_verify.py +++ /dev/null @@ -1,29 +0,0 @@ -import ecdsa -import pytest - -from frostfs_api.client.signer import Signer -from frostfs_api.client.verifier import Verifier -from frostfs_api.crypto.key_extension import KeyExtension -from tests.helpers.resources import WIF - - -@pytest.mark.crypto -class TestSignAndVerify: - - @pytest.mark.parametrize("message", [b"Hello Frostfs API", b""]) - def test_sign_verify_success( - self, - client_signer: Signer, - client_verifier: Verifier, - client_key_extension: KeyExtension, - message: bytes - ): - private_key = client_key_extension.get_private_key_from_wif(WIF) - public_key = client_key_extension.get_public_key(private_key) - - signature = client_signer.sign_rfc6979(private_key, message) - assert client_verifier.verify_rfc6979(public_key, message, signature) is True - - def test_verify_rfc6979_empty_key(self, client_verifier: Verifier): - with pytest.raises(ValueError, match="Incorrect public key"): - client_verifier.verify_rfc6979(b'', b"Test message", b"signature") diff --git a/tests/crypto/test_key_extension.py b/tests/crypto/test_key_extension.py deleted file mode 100644 index 62f4e1c..0000000 --- a/tests/crypto/test_key_extension.py +++ /dev/null @@ -1,23 +0,0 @@ -import pytest - -from frostfs_api.crypto.key_extension import KeyExtension -from tests.helpers.convert import convert_bytes_format_127_to_256 -from tests.helpers.resources import WIF, PRIVATE_KEY - - -@pytest.mark.crypto -class TestKeyExtension: - def test_get_private_key_from_wif_success(self, client_key_extension: KeyExtension): - private_key = client_key_extension.get_private_key_from_wif(WIF) - - assert len(private_key) == 32, f"Not correct len of private key, expected: 32 Actual: {len(private_key)} " - assert private_key == bytes(convert_bytes_format_127_to_256(PRIVATE_KEY)), \ - f"Not match private key, Expected: {PRIVATE_KEY}, Actual: {private_key}" - - def test_get_private_key_empty_wif(self, client_key_extension: KeyExtension): - with pytest.raises(ValueError, match="Empty WIF private"): - client_key_extension.get_private_key_from_wif("") - - def test_get_private_key_incorrect_wif(self, client_key_extension: KeyExtension): - with pytest.raises(ValueError, match="Invalid checksum"): - client_key_extension.get_private_key_from_wif("AAAAAAABBBBBBBBBBBCCCCCCCDDDDDDDDDDDDDDDDD") -- 2.47.2