Exemple #1
0
    def __init__(self, key: bytes = bytes()) -> None:
        self.value: G2Obj = G2Obj()
        if len(key) == 0:
            MilagroPairing.ECP2_BLS381_inf(byref(self.value))
            return

        if len(key) != 96:
            raise Exception("Invalid length Public Key.")

        if key[48] != (key[48] & CLEAR_FLAGS):
            raise Exception("G2's second G has flags set.")

        g1: Tuple[bool, bool, bool, Big384] = parse(key[0:48])
        g2: Tuple[bool, bool, bool, Big384] = parse(key[48:96], True)

        if g1[0] != (g1[1] & g2[1]):
            raise Exception("Infinite flag set improperly.")

        if g1[0]:
            MilagroPairing.ECP2_BLS381_inf(byref(self.value))
            return

        x: FP2Obj = FP2Obj()
        MilagroPairing.FP2_BLS381_from_BIGs(byref(x), g2[3], g1[3])
        if MilagroPairing.ECP2_BLS381_setx(byref(self.value), byref(x)) == 0:
            raise Exception("Invalid G2.")

        if self.value.y.isLargerThanNegative() != g1[2]:
            MilagroPairing.FP2_BLS381_neg(byref(self.value.y),
                                          byref(self.value.y))
Exemple #2
0
    def __init__(self, key: bytes = bytes()) -> None:
        self.value: G2Obj = G2Obj()
        if len(key) == 0:
            MilagroPairing.ECP2_BLS381_inf(byref(self.value))
            return

        if len(key) != 96:
            raise Exception("Invalid length Public Key.")

        if key[48] != (key[48] & CLEAR_FLAGS):
            raise Exception("G2's second G has flags set.")

        g1: Tuple[bool, bool, bool, Big384] = parse(key[0:48])
        g2: Tuple[bool, bool, bool, Big384] = parse(key[48:96], True)

        if g1[0] != (g1[1] & g2[1]):
            raise Exception("Infinite flag set improperly.")

        if g1[0]:
            MilagroPairing.ECP2_BLS381_inf(byref(self.value))
            return

        x: FP2Obj = FP2Obj()
        MilagroPairing.FP2_BLS381_from_BIGs(byref(x), g2[3], g1[3])
        if MilagroPairing.ECP2_BLS381_setx(byref(self.value), byref(x)) == 0:
            raise Exception("Invalid G2.")

        yNeg: FP2Obj = FP2Obj()
        cmpRes: int
        MilagroPairing.FP2_BLS381_neg(byref(yNeg), byref(self.value.y))

        a: Big384 = Big384()
        b: Big384 = Big384()
        MilagroCurve.FP_BLS381_redc(a, byref(self.value.y.b))
        MilagroCurve.FP_BLS381_redc(b, byref(yNeg.b))
        cmpRes = MilagroCurve.BIG_384_58_comp(a, b)
        if cmpRes == 0:
            MilagroCurve.FP_BLS381_redc(a, byref(self.value.y.a))
            MilagroCurve.FP_BLS381_redc(b, byref(yNeg.a))
            cmpRes = MilagroCurve.BIG_384_58_comp(a, b)

        if (cmpRes == 1) != g1[2]:
            self.value.y = yNeg