File test_ece.py of Package failed_python-http-ece

from cryptography.hazmat.primitives.asymmetric import ec
from cryptography.hazmat.primitives.serialization import Encoding, PublicFormat
from cryptography.hazmat.backends import default_backend


def make_key():
    return ec.generate_private_key(ec.SECP256R1(), default_backend())


def encode_point_from_public_numbers(pub_numbers):
    """Compatibility helper: prefer existing encode_point(), fall back to serializing a public key."""
    # Some versions of cryptography provide encode_point() on public_numbers;
    # others do not. Try both ways.
    try:
        return pub_numbers.encode_point()
    except Exception:
        pub = ec.EllipticCurvePublicNumbers(pub_numbers.x, pub_numbers.y, pub_numbers.curve).public_key(default_backend())
        return pub.public_bytes(Encoding.X962, PublicFormat.UncompressedPoint)


def test_encode_point_bytes():
    priv = make_key()
    pub_nums = priv.public_key().public_numbers()
    p = encode_point_from_public_numbers(pub_nums)
    assert isinstance(p, (bytes, bytearray))
    # Uncompressed P-256 point should start with 0x04 and be 65 bytes
    assert p[0] == 0x04
    assert len(p) == 65


def test_different_keys_produce_different_points():
    a = make_key()
    b = make_key()
    pa = encode_point_from_public_numbers(a.public_key().public_numbers())
    pb = encode_point_from_public_numbers(b.public_key().public_numbers())
    assert pa != pb


def test_point_roundtrip_via_public_key():
    priv = make_key()
    pub_nums = priv.public_key().public_numbers()
    p = encode_point_from_public_numbers(pub_nums)
    # Construct public key from numbers and serialize again
    pub = ec.EllipticCurvePublicNumbers(pub_nums.x, pub_nums.y, pub_nums.curve).public_key(default_backend())
    p2 = pub.public_bytes(Encoding.X962, PublicFormat.UncompressedPoint)
    assert p == p2
openSUSE Build Service is sponsored by