Add verify tests

Signed-off-by: ilyas585 <niyazov2023@gmail.com>
This commit is contained in:
ilyas585 2025-02-12 10:20:54 +03:00
parent a51ef880fe
commit 595cd63f53
6 changed files with 0 additions and 107 deletions

View file

@ -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

View file

@ -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

View file

@ -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()

View file

@ -1,6 +1,5 @@
import base58
import ecdsa
from hashlib import sha256
class KeyExtension:

View file

@ -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")

View file

@ -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")