Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove the curve_name from the fields API #61

Merged
merged 2 commits into from
Mar 7, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
218 changes: 80 additions & 138 deletions py_ecc/fields/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,144 +17,86 @@
)


# Create seperate classes for all Fields for each curve

bn128_FQ = type(
"bn128_FQ",
(FQ,),
{
'curve_name': "bn128",
'field_modulus': field_properties["bn128"]["field_modulus"],
}
)
bn128_FQP = type(
"bn128_FQP",
(FQP,),
{
'curve_name': "bn128",
'field_modulus': field_properties["bn128"]["field_modulus"],
}
)
bn128_FQ2 = type(
"bn128_FQ2",
(FQ2,),
{
'curve_name': "bn128",
'field_modulus': field_properties["bn128"]["field_modulus"],
'FQ2_MODULUS_COEFFS': field_properties["bn128"]["fq2_modulus_coeffs"],
}
)
bn128_FQ12 = type(
"bn128_FQ12",
(FQ12,),
{
'curve_name': "bn128",
'field_modulus': field_properties["bn128"]["field_modulus"],
'FQ12_MODULUS_COEFFS': field_properties["bn128"]["fq12_modulus_coeffs"],
}
)
#
# bn128 curve fields
#
class bn128_FQ(FQ):
field_modulus = field_properties["bn128"]["field_modulus"]

bls12_381_FQ = type(
"bls12_381_FQ",
(FQ,),
{
'curve_name': "bls12_381",
'field_modulus': field_properties["bls12_381"]["field_modulus"],
}
)
bls12_381_FQP = type(
"bls12_381_FQP",
(FQP,),
{
'curve_name': "bls12_381",
'field_modulus': field_properties["bls12_381"]["field_modulus"],
}
)
bls12_381_FQ2 = type(
"bls12_381_FQ2",
(FQ2,),
{
'curve_name': "bls12_381",
'field_modulus': field_properties["bls12_381"]["field_modulus"],
'FQ2_MODULUS_COEFFS': field_properties["bls12_381"]["fq2_modulus_coeffs"],
}
)
bls12_381_FQ12 = type(
"bls12_381_FQ12",
(FQ12,),
{
'curve_name': "bls12_381",
'field_modulus': field_properties["bls12_381"]["field_modulus"],
'FQ12_MODULUS_COEFFS': field_properties["bls12_381"]["fq12_modulus_coeffs"],
}
)

optimized_bn128_FQ = type(
"optimized_bn128_FQ",
(optimized_FQ,),
{
'curve_name': "bn128",
'field_modulus': field_properties["bn128"]["field_modulus"],
}
)
optimized_bn128_FQP = type(
"optimized_bn128_FQP",
(optimized_FQP,),
{
'curve_name': "bn128",
'field_modulus': field_properties["bn128"]["field_modulus"],
}
)
optimized_bn128_FQ2 = type(
"optimized_bn128_FQ2",
(optimized_FQ2,),
{
'curve_name': "bn128",
'field_modulus': field_properties["bn128"]["field_modulus"],
'FQ2_MODULUS_COEFFS': field_properties["bn128"]["fq2_modulus_coeffs"],
}
)
optimized_bn128_FQ12 = type(
"optimized_bn128_FQ12",
(optimized_FQ12,),
{
'curve_name': "bn128",
'field_modulus': field_properties["bn128"]["field_modulus"],
'FQ12_MODULUS_COEFFS': field_properties["bn128"]["fq12_modulus_coeffs"],
}
)
class bn128_FQP(FQP):
field_modulus = field_properties["bn128"]["field_modulus"]

optimized_bls12_381_FQ = type(
"optimized_bls12_381_FQ",
(optimized_FQ,),
{
'curve_name': "bls12_381",
'field_modulus': field_properties["bls12_381"]["field_modulus"],
}
)
optimized_bls12_381_FQP = type(
"optimized_bls12_381_FQP",
(optimized_FQP,),
{
'curve_name': "bls12_381",
'field_modulus': field_properties["bls12_381"]["field_modulus"],
}
)
optimized_bls12_381_FQ2 = type(
"optimized_bls12_381_FQ2",
(optimized_FQ2,),
{
'curve_name': "bls12_381",
'field_modulus': field_properties["bls12_381"]["field_modulus"],
'FQ2_MODULUS_COEFFS': field_properties["bls12_381"]["fq2_modulus_coeffs"],
}
)
optimized_bls12_381_FQ12 = type(
"optimized_bls12_381_FQ12",
(optimized_FQ12,),
{
'curve_name': "bls12_381",
'field_modulus': field_properties["bls12_381"]["field_modulus"],
'FQ12_MODULUS_COEFFS': field_properties["bls12_381"]["fq12_modulus_coeffs"],
}
)

class bn128_FQ2(FQ2):
field_modulus = field_properties["bn128"]["field_modulus"]
FQ2_MODULUS_COEFFS = field_properties["bn128"]["fq2_modulus_coeffs"]


class bn128_FQ12(FQ12):
field_modulus = field_properties["bn128"]["field_modulus"]
FQ12_MODULUS_COEFFS = field_properties["bn128"]["fq12_modulus_coeffs"]


#
# bls12_381 curve fields
#
class bls12_381_FQ(FQ):
field_modulus = field_properties["bls12_381"]["field_modulus"]


class bls12_381_FQP(FQP):
field_modulus = field_properties["bls12_381"]["field_modulus"]


class bls12_381_FQ2(FQ2):
field_modulus = field_properties["bls12_381"]["field_modulus"]
FQ2_MODULUS_COEFFS = field_properties["bls12_381"]["fq2_modulus_coeffs"]


class bls12_381_FQ12(FQ12):
field_modulus = field_properties["bls12_381"]["field_modulus"]
FQ12_MODULUS_COEFFS = field_properties["bls12_381"]["fq12_modulus_coeffs"]


#
# optimized_bn128 curve fields
#

class optimized_bn128_FQ(optimized_FQ):
field_modulus = field_properties["bn128"]["field_modulus"]


class optimized_bn128_FQP(optimized_FQP):
field_modulus = field_properties["bn128"]["field_modulus"]


class optimized_bn128_FQ2(optimized_FQ2):
field_modulus = field_properties["bn128"]["field_modulus"]
FQ2_MODULUS_COEFFS = field_properties["bn128"]["fq2_modulus_coeffs"]


class optimized_bn128_FQ12(optimized_FQ12):
field_modulus = field_properties["bn128"]["field_modulus"]
FQ12_MODULUS_COEFFS = field_properties["bn128"]["fq12_modulus_coeffs"]


#
# optimized_bls12_381 curve fields
#
class optimized_bls12_381_FQ(optimized_FQ):
field_modulus = field_properties["bls12_381"]["field_modulus"]


class optimized_bls12_381_FQP(optimized_FQP):
field_modulus = field_properties["bls12_381"]["field_modulus"]


class optimized_bls12_381_FQ2(optimized_FQ2):
field_modulus = field_properties["bls12_381"]["field_modulus"]
FQ2_MODULUS_COEFFS = field_properties["bls12_381"]["fq2_modulus_coeffs"]


class optimized_bls12_381_FQ12(optimized_FQ12):
field_modulus = field_properties["bls12_381"]["field_modulus"]
FQ12_MODULUS_COEFFS = field_properties["bls12_381"]["fq12_modulus_coeffs"]
19 changes: 3 additions & 16 deletions py_ecc/fields/field_elements.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,14 +22,8 @@ class FQ(object):
"""
n = None # type: int
field_modulus = None
# curve_name can be either 'bn128' or 'bls12_381'
# This is needed to obtain field_modulus, FQ2_MODULUS_COEFFS
# and FQ12_MODULUS_COEFFS from the curve properties
curve_name = None

def __init__(self, val: IntOrFQ) -> None:
if self.curve_name is None:
raise AttributeError("Curve Name hasn't been specified")
if self.field_modulus is None:
raise AttributeError("Field Modulus hasn't been specified")

Expand Down Expand Up @@ -187,26 +181,23 @@ class FQP(object):
A class for elements in polynomial extension fields
"""
degree = 0
curve_name = None
field_modulus = None

def __init__(self,
coeffs: Sequence[IntOrFQ],
modulus_coeffs: Sequence[IntOrFQ]=None) -> None:
if self.curve_name is None:
raise AttributeError("Curve Name hasn't been specified")
if self.field_modulus is None:
raise AttributeError("Field Modulus hasn't been specified")

if len(coeffs) != len(modulus_coeffs):
raise Exception(
"coeffs and modulus_coeffs aren't of the same length"
)
# Encoding all coefficients in type FQ (in regards to the curve name too)
# Encoding all coefficients in the corresponding type FQ
self.FQP_corresponding_FQ_class = type(
"FQP_corresponding_FQ_class_" + self.curve_name,
"FQP_corresponding_FQ_class",
(FQ,),
{'curve_name': self.curve_name, 'field_modulus': self.field_modulus}
{'field_modulus': self.field_modulus}
)
self.coeffs = tuple(self.FQP_corresponding_FQ_class(c) for c in coeffs)
# The coefficients of the modulus, without the leading [1]
Expand Down Expand Up @@ -353,8 +344,6 @@ class FQ2(FQP):
FQ2_MODULUS_COEFFS = None

def __init__(self, coeffs: Sequence[IntOrFQ]) -> None:
if self.curve_name is None:
raise AttributeError("Curve Name hasn't been specified")
if self.FQ2_MODULUS_COEFFS is None:
raise AttributeError("FQ2 Modulus Coeffs haven't been specified")

Expand All @@ -369,8 +358,6 @@ class FQ12(FQP):
FQ12_MODULUS_COEFFS = None

def __init__(self, coeffs: Sequence[IntOrFQ]) -> None:
if self.curve_name is None:
raise AttributeError("Curve Name hasn't been specified")
if self.FQ12_MODULUS_COEFFS is None:
raise AttributeError("FQ12 Modulus Coeffs haven't been specified")

Expand Down
15 changes: 1 addition & 14 deletions py_ecc/fields/optimized_field_elements.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,14 +22,8 @@ class FQ(object):
"""
n = None # type: int
field_modulus = None
# curve_name can be either 'bn128' or 'bls12_381'
# This is needed to obtain field_modulus, FQ2_MODULUS_COEFFS
# and FQ12_MODULUS_COEFFS from the curve properties
curve_name = None

def __init__(self, val: IntOrFQ) -> None:
if self.curve_name is None:
raise AttributeError("Curve Name hasn't been specified")
if self.field_modulus is None:
raise AttributeError("Field Modulus hasn't been specified")

Expand Down Expand Up @@ -187,15 +181,12 @@ class FQP(object):
A class for elements in polynomial extension fields
"""
degree = 0 # type: int
mc_tuples = None # type: List[Tuple[int, int]]
curve_name = None
field_modulus = None
mc_tuples = None # type: List[Tuple[int, int]]

def __init__(self,
coeffs: Sequence[IntOrFQ],
modulus_coeffs: Sequence[IntOrFQ]=None) -> None:
if self.curve_name is None:
raise AttributeError("Curve Name hasn't been specified")
if self.field_modulus is None:
raise AttributeError("Field Modulus hasn't been specified")

Expand Down Expand Up @@ -372,8 +363,6 @@ class FQ2(FQP):
FQ2_MODULUS_COEFFS = None

def __init__(self, coeffs: Sequence[IntOrFQ]) -> None:
if self.curve_name is None:
raise AttributeError("Curve Name hasn't been specified")
if self.FQ2_MODULUS_COEFFS is None:
raise AttributeError("FQ2 Modulus Coeffs haven't been specified")

Expand All @@ -389,8 +378,6 @@ class FQ12(FQP):
FQ12_MODULUS_COEFFS = None

def __init__(self, coeffs: Sequence[IntOrFQ]) -> None:
if self.curve_name is None:
raise AttributeError("Curve Name hasn't been specified")
if self.FQ12_MODULUS_COEFFS is None:
raise AttributeError("FQ12 Modulus Coeffs haven't been specified")

Expand Down