You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
63 lines
1.7 KiB
63 lines
1.7 KiB
from os import urandom
|
|
|
|
import pytest
|
|
|
|
from coincurve.utils import (
|
|
GROUP_ORDER, ZERO, bytes_to_int, chunk_data, der_to_pem, get_valid_secret,
|
|
int_to_bytes, pad_scalar, pem_to_der, validate_secret, verify_signature
|
|
)
|
|
from .samples import (
|
|
MESSAGE, PRIVATE_KEY_DER, PUBLIC_KEY_COMPRESSED, PUBLIC_KEY_UNCOMPRESSED,
|
|
SIGNATURE
|
|
)
|
|
|
|
|
|
class TestPadScalar:
|
|
def test_correct(self):
|
|
assert pad_scalar(b'\x01') == b'\x00' * 31 + b'\x01'
|
|
|
|
def test_pad_limit(self):
|
|
n = urandom(32)
|
|
assert len(pad_scalar(n)) == len(n)
|
|
|
|
def test_empty_scalar(self):
|
|
assert len(pad_scalar(b'')) == 32
|
|
|
|
|
|
def test_get_valid_secret():
|
|
secret = get_valid_secret()
|
|
assert len(secret) == 32 and ZERO < secret < GROUP_ORDER
|
|
|
|
|
|
class TestValidateSecret:
|
|
def test_valid(self):
|
|
secret = validate_secret(b'\x01')
|
|
assert len(secret) == 32 and ZERO < secret < GROUP_ORDER
|
|
|
|
def test_out_of_range(self):
|
|
with pytest.raises(ValueError):
|
|
validate_secret(ZERO)
|
|
|
|
with pytest.raises(ValueError):
|
|
validate_secret(GROUP_ORDER)
|
|
|
|
|
|
def test_bytes_conversion():
|
|
n = b'\x00' + urandom(31)
|
|
assert int_to_bytes(bytes_to_int(n)) == n
|
|
|
|
|
|
def test_der_conversion():
|
|
assert pem_to_der(der_to_pem(PRIVATE_KEY_DER)) == PRIVATE_KEY_DER
|
|
|
|
|
|
def test_verify_signature():
|
|
assert verify_signature(SIGNATURE, MESSAGE, PUBLIC_KEY_COMPRESSED)
|
|
assert verify_signature(SIGNATURE, MESSAGE, PUBLIC_KEY_UNCOMPRESSED)
|
|
|
|
|
|
def test_chunk_data():
|
|
assert list(chunk_data('4fadd1977328c11efc1c1d8a781aa6b9677984d3e0b', 2)) == [
|
|
'4f', 'ad', 'd1', '97', '73', '28', 'c1', '1e', 'fc', '1c', '1d',
|
|
'8a', '78', '1a', 'a6', 'b9', '67', '79', '84', 'd3', 'e0', 'b'
|
|
]
|
|
|