コード例 #1
0
def test_mul():
    with pytest.raises(TypeError):
        a = FieldElement(number=2, prime=31)
        b = FieldElement(number=2, prime=32)
        a * b

    a = FieldElement(24, 31)
    b = FieldElement(19, 31)
    assert a * b == FieldElement(22, 31)
コード例 #2
0
def test_div():
    with pytest.raises(TypeError):
        a = FieldElement(number=2, prime=31)
        b = FieldElement(number=2, prime=32)
        a / b

    a = FieldElement(3, 31)
    b = FieldElement(24, 31)
    assert a / b == FieldElement(4, 31)
コード例 #3
0
def test_ne():
    with pytest.raises(NotImplementedError):
        FieldElement(number=2, prime=31) == 0

    a = FieldElement(2, 31)
    b = FieldElement(2, 31)
    c = FieldElement(15, 31)
    assert a == b
    assert a != c
    assert not (a != b)
コード例 #4
0
def test_add():
    # tests the following additions on curve y^2=x^3-7 over F_223:

    prime = 223
    a = FieldElement(0, prime)
    b = FieldElement(7, prime)

    additions = (
        # (x1, y1, x2, y2, x3, y3)
        (192, 105, 17, 56, 170, 142),
        (47, 71, 117, 141, 60, 139),
        (143, 98, 76, 66, 47, 71),
    )

    for x1, y1, x2, y2, x3, y3 in additions:
        p1 = Point(x=FieldElement(x1, prime),
                   y=FieldElement(y1, prime),
                   a=a,
                   b=b)
        p2 = Point(x=FieldElement(x2, prime),
                   y=FieldElement(y2, prime),
                   a=a,
                   b=b)
        p3 = Point(x=FieldElement(x3, prime),
                   y=FieldElement(y3, prime),
                   a=a,
                   b=b)

        assert p1 + p2 == p3
コード例 #5
0
def test_pow():
    a = FieldElement(17, 31)
    assert a ** 3 == FieldElement(15, 31)

    a = FieldElement(5, 31)
    assert a ** 5 == FieldElement(25, 31)

    a = FieldElement(17, 31)
    assert a ** -3 == FieldElement(29, 31)

    a = FieldElement(4, 31)
    assert a ** -4 == FieldElement(4, 31)
コード例 #6
0
def test_sub():
    with pytest.raises(TypeError):
        a = FieldElement(number=2, prime=31)
        b = FieldElement(number=2, prime=32)
        a - b

    a = FieldElement(29, 31)
    b = FieldElement(4, 31)
    assert a - b == FieldElement(25, 31)

    a = FieldElement(15, 31)
    b = FieldElement(30, 31)
    assert a - b == FieldElement(16, 31)
コード例 #7
0
def test_add():
    with pytest.raises(TypeError):
        a = FieldElement(number=2, prime=31)
        b = FieldElement(number=2, prime=32)
        a + b

    a = FieldElement(2, 31)
    b = FieldElement(15, 31)
    assert a + b == FieldElement(17, 31)

    a = FieldElement(17, 31)
    b = FieldElement(21, 31)
    assert a + b == FieldElement(7, 31)
コード例 #8
0
def test_rmul():
    prime = 223
    a = FieldElement(0, prime)
    b = FieldElement(7, prime)

    multiplications = (
        # scalar, x1, y1, x2, y2
        (2, 192, 105, 49, 71),
        (2, 143, 98, 64, 168),
        (2, 47, 71, 36, 111),
        (4, 47, 71, 194, 51),
        (8, 47, 71, 116, 55),
        (21, 47, 71, None, None),
    )

    for scalar, x1, y1, x2, y2 in multiplications:
        x1_el = FieldElement(x1, prime)
        y1_el = FieldElement(y1, prime)

        x2_el = x2 and FieldElement(x2, prime)
        y2_el = y2 and FieldElement(y2, prime)

        p = Point(x1_el, y1_el, a, b)

        assert scalar * p == Point(x2_el, y2_el, a, b)
コード例 #9
0
def test_on_curve():
    prime = 223
    a = FieldElement(0, prime)
    b = FieldElement(7, prime)
    valid_points = ((192, 105), (17, 56), (1, 193))
    invalid_points = ((200, 119), (42, 99))
    for x_raw, y_raw in valid_points:
        x = FieldElement(x_raw, prime)
        y = FieldElement(y_raw, prime)
        Point(x, y, a, b)
    for x_raw, y_raw in invalid_points:
        x = FieldElement(x_raw, prime)
        y = FieldElement(y_raw, prime)
        with pytest.raises(ValueError):
            Point(x, y, a, b)
コード例 #10
0
def test_rmul():
    assert 5 * FieldElement(number=18, prime=31) == FieldElement(number=28, prime=31)
    assert -4 * FieldElement(number=11, prime=31) == FieldElement(number=18, prime=31)
コード例 #11
0
def test_number_range():
    with pytest.raises(ValueError):
        FieldElement(number=7, prime=3)