sylow 0.1.1

Implementation of the BLS signature scheme using the alt-bn128 curve.
Documentation
from sagelib.utils import *
from operator import mul


class FieldMultiplication(metaclass=FieldTestMetaclass):
    def __init__(self):
        self.D = 1
        self.operation = mul


class QuadraticFieldMultiplication(metaclass=FieldTestMetaclass):
    def __init__(self):
        self.D = 2
        self.operation = mul


class SexticFieldMultiplication(metaclass=FieldTestMetaclass):
    def __init__(self):
        self.D = 6
        self.operation = mul


# class DodecticFieldMultiplication(metaclass=FieldTestMetaclass, D=2):
#     pass


class FieldMultiplicationTest(FieldMultiplication):
    Fp_test_values = [
        ([2, 0, 0, 0], [3, 0, 0, 0]),
        ([0xFFFFFFFFFFFFFFFF, 0, 0, 0], [2, 0, 0, 0]),
        (
            [
                0x1E104C0B6C3E7EA3,
                0x4BC0B5488C38E546,
                0x5C28222B40C0AC2E,
                0x18322739709D8814,
            ],
            [2, 0, 0, 0],
        ),
        (
            [
                0xFFFFFFFFFFFFFFFF,
                0xFFFFFFFFFFFFFFFF,
                0xFFFFFFFFFFFFFFFF,
                0x3064497359141831,
            ],
            [
                0xFFFFFFFFFFFFFFFF,
                0xFFFFFFFFFFFFFFFF,
                0xFFFFFFFFFFFFFFFF,
                0x3064497359141831,
            ],
        ),
    ]


class QuadraticFieldMultiplicationTest(QuadraticFieldMultiplication):
    Fp2_test_values = [
        ([[4, 3, 2, 1], [1, 1, 1, 1]], [[1, 1, 1, 1], [1, 2, 3, 4]]),
        (
            [[0xFFFFFFFFFFFFFFFF, 0, 0, 0], [0xFFFFFFFFFFFFFFFF, 0, 0, 0]],
            [[0xFFFFFFFFFFFFFFFF, 0, 0, 0], [2, 0, 0, 0]],
        ),
    ]


#
class SexticFieldMultiplicationTest(SexticFieldMultiplication):
    Fp6_test_values = [
        (
            [
                [[1, 0, 0, 0], [0, 2, 0, 0]],
                [[0, 0, 3, 0], [0, 0, 0, 4]],
                [[5, 0, 0, 0], [0, 6, 0, 0]],
            ],
            [
                [[0, 6, 0, 0], [5, 0, 0, 0]],
                [[0, 0, 0, 4], [0, 0, 3, 0]],
                [[0, 2, 0, 0], [1, 0, 0, 0]],
            ],
        ),
        (
            [
                [
                    [0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0x0, 0x0],
                    [0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0x0, 0x0],
                ],
                [
                    [0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0x0, 0x0],
                    [0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0x0, 0x0],
                ],
                [
                    [0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0x0, 0x0],
                    [0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0x0, 0x0],
                ],
            ],
            [
                [
                    [0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0x0, 0x0],
                    [0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0x0, 0x0],
                ],
                [
                    [0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0x0, 0x0],
                    [0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0x0, 0x0],
                ],
                [
                    [0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0x0, 0x0],
                    [0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0x0, 0x0],
                ],
            ],
        ),
    ]