aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJ08nY2020-08-08 19:06:45 +0200
committerJ08nY2020-08-08 19:06:45 +0200
commit7991278b3ff953a83bf7f7a91c22640597caaa19 (patch)
tree385801bc33542fdf34119f9564b4bc32fc41e0d7
parent28d25d938c2ba09a7014e4851a4f721e48c8caa6 (diff)
downloadstd-curves-7991278b3ff953a83bf7f7a91c22640597caaa19.tar.gz
std-curves-7991278b3ff953a83bf7f7a91c22640597caaa19.tar.zst
std-curves-7991278b3ff953a83bf7f7a91c22640597caaa19.zip
Add support for extension field curves.
-rw-r--r--.gitignore4
-rwxr-xr-xanalyze.sage17
-rw-r--r--nist/curves.json154
-rw-r--r--other/curves.json32
-rw-r--r--schema.json75
-rw-r--r--secg/curves.json240
-rw-r--r--wtls/curves.json80
-rw-r--r--x962/curves.json192
-rw-r--r--x963/curves.json167
9 files changed, 569 insertions, 392 deletions
diff --git a/.gitignore b/.gitignore
index 85a3099..c6682af 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,4 +2,6 @@
node_modules/
package-lock.json
public/
-src/ \ No newline at end of file
+src/
+.idea/
+*.sage.py \ No newline at end of file
diff --git a/analyze.sage b/analyze.sage
index c3f45a0..5f82677 100755
--- a/analyze.sage
+++ b/analyze.sage
@@ -110,12 +110,25 @@ def get_curve_group(data):
return E, G
elif data["field"]["type"] == "Binary":
F.<x> = GF(2)[]
- poly = sum(x^i for i in [data["field"]["poly"]["m"], data["field"]["poly"].get("e1"), data["field"]["poly"].get("e2"), data["field"]["poly"].get("e3"), 0] if i is not None)
- K = GF(2^data["field"]["poly"]["m"], name="x", modulus=poly)
+ poly = sum(F(int(elem["coeff"], 16)) * x^elem["power"] for elem in data["field"]["poly"])
+ K = GF(2^data["field"]["degree"], name="x", modulus=poly)
E = EllipticCurve(K, (1, K.fetch_int(int(data["params"]["a"], 16)), 0, 0, K.fetch_int(int(data["params"]["b"], 16))))
E.set_order(int(data["order"], 16) * int(data["cofactor"], 16))
G = E(K.fetch_int(int(data["generator"]["x"], 16)), K.fetch_int(int(data["generator"]["y"], 16)))
return E, G
+ elif data["field"]["type"] == "Extension":
+ base = int(data["field"]["base"], 16)
+ F.<x> = GF(base)[]
+ poly = sum(F(int(elem["coeff"], 16)) * x^elem["power"] for elem in data["field"]["poly"])
+ K = GF(base^data["field"]["degree"], name="x", modulus=poly)
+ a = K(sum(F(int(elem["coeff"], 16)) * x^elem["power"] for elem in data["params"]["a"]))
+ b = K(sum(F(int(elem["coeff"], 16)) * x^elem["power"] for elem in data["params"]["b"]))
+ E = EllipticCurve(K, (a, b))
+ E.set_order(int(data["order"], 16) * int(data["cofactor"], 16))
+ gx = K(sum(F(int(elem["coeff"], 16)) * x^elem["power"] for elem in data["generator"]["x"]))
+ gy = K(sum(F(int(elem["coeff"], 16)) * x^elem["power"] for elem in data["generator"]["y"]))
+ G = E(gx, gy)
+ return E, G
else:
raise ValueError()
diff --git a/nist/curves.json b/nist/curves.json
index e50efcd..67d9957 100644
--- a/nist/curves.json
+++ b/nist/curves.json
@@ -242,16 +242,18 @@
{
"name": "K-163",
"category": "nist",
- "desc": "",
+ "desc": "Koblitz curve.",
"field": {
"type": "Binary",
- "poly": {
- "m": 163,
- "e1": 7,
- "e2": 6,
- "e3": 3
- },
- "bits": 163
+ "poly": [
+ {"power": 163, "coeff": "0x01"},
+ {"power": 7, "coeff": "0x01"},
+ {"power": 6, "coeff": "0x01"},
+ {"power": 3, "coeff": "0x01"},
+ {"power": 0, "coeff": "0x01"}
+ ],
+ "bits": 163,
+ "degree": 163
},
"form": "Weierstrass",
"params": {
@@ -283,13 +285,15 @@
"desc": "",
"field": {
"type": "Binary",
- "poly": {
- "m": 163,
- "e1": 7,
- "e2": 6,
- "e3": 3
- },
- "bits": 163
+ "poly": [
+ {"power": 163, "coeff": "0x01"},
+ {"power": 7, "coeff": "0x01"},
+ {"power": 6, "coeff": "0x01"},
+ {"power": 3, "coeff": "0x01"},
+ {"power": 0, "coeff": "0x01"}
+ ],
+ "bits": 163,
+ "degree": 163
},
"form": "Weierstrass",
"params": {
@@ -319,14 +323,16 @@
{
"name": "K-233",
"category": "nist",
- "desc": "",
+ "desc": "Koblitz curve.",
"field": {
"type": "Binary",
- "poly": {
- "m": 233,
- "e1": 74
- },
- "bits": 233
+ "poly": [
+ {"power": 233, "coeff": "0x01"},
+ {"power": 74, "coeff": "0x01"},
+ {"power": 0, "coeff": "0x01"}
+ ],
+ "bits": 233,
+ "degree": 233
},
"form": "Weierstrass",
"params": {
@@ -359,11 +365,13 @@
"desc": "",
"field": {
"type": "Binary",
- "poly": {
- "m": 233,
- "e1": 74
- },
- "bits": 233
+ "poly": [
+ {"power": 233, "coeff": "0x01"},
+ {"power": 74, "coeff": "0x01"},
+ {"power": 0, "coeff": "0x01"}
+ ],
+ "bits": 233,
+ "degree": 233
},
"form": "Weierstrass",
"params": {
@@ -394,16 +402,18 @@
{
"name": "K-283",
"category": "nist",
- "desc": "",
+ "desc": "Koblitz curve.",
"field": {
"type": "Binary",
- "poly": {
- "m": 283,
- "e1": 12,
- "e2": 7,
- "e3": 5
- },
- "bits": 283
+ "poly": [
+ {"power": 283, "coeff": "0x01"},
+ {"power": 12, "coeff": "0x01"},
+ {"power": 7, "coeff": "0x01"},
+ {"power": 5, "coeff": "0x01"},
+ {"power": 0, "coeff": "0x01"}
+ ],
+ "bits": 283,
+ "degree": 283
},
"form": "Weierstrass",
"params": {
@@ -436,13 +446,15 @@
"desc": "",
"field": {
"type": "Binary",
- "poly": {
- "m": 283,
- "e1": 12,
- "e2": 7,
- "e3": 5
- },
- "bits": 283
+ "poly": [
+ {"power": 283, "coeff": "0x01"},
+ {"power": 12, "coeff": "0x01"},
+ {"power": 7, "coeff": "0x01"},
+ {"power": 5, "coeff": "0x01"},
+ {"power": 0, "coeff": "0x01"}
+ ],
+ "bits": 283,
+ "degree": 283
},
"form": "Weierstrass",
"params": {
@@ -472,14 +484,16 @@
{
"name": "K-409",
"category": "nist",
- "desc": "",
+ "desc": "Koblitz curve.",
"field": {
"type": "Binary",
- "poly": {
- "m": 409,
- "e1": 87
- },
- "bits": 409
+ "poly": [
+ {"power": 409, "coeff": "0x01"},
+ {"power": 87, "coeff": "0x01"},
+ {"power": 0, "coeff": "0x01"}
+ ],
+ "bits": 409,
+ "degree": 409
},
"form": "Weierstrass",
"params": {
@@ -510,11 +524,13 @@
"desc": "",
"field": {
"type": "Binary",
- "poly": {
- "m": 409,
- "e1": 87
- },
- "bits": 409
+ "poly": [
+ {"power": 409, "coeff": "0x01"},
+ {"power": 87, "coeff": "0x01"},
+ {"power": 0, "coeff": "0x01"}
+ ],
+ "bits": 409,
+ "degree": 409
},
"form": "Weierstrass",
"params": {
@@ -542,16 +558,18 @@
{
"name": "K-571",
"category": "nist",
- "desc": "",
+ "desc": "Koblitz curve.",
"field": {
"type": "Binary",
- "poly": {
- "m": 571,
- "e1": 10,
- "e2": 5,
- "e3": 2
- },
- "bits": 571
+ "poly": [
+ {"power": 571, "coeff": "0x01"},
+ {"power": 10, "coeff": "0x01"},
+ {"power": 5, "coeff": "0x01"},
+ {"power": 2, "coeff": "0x01"},
+ {"power": 0, "coeff": "0x01"}
+ ],
+ "bits": 571,
+ "degree": 571
},
"form": "Weierstrass",
"params": {
@@ -582,13 +600,15 @@
"desc": "",
"field": {
"type": "Binary",
- "poly": {
- "m": 571,
- "e1": 10,
- "e2": 5,
- "e3": 2
- },
- "bits": 571
+ "poly": [
+ {"power": 571, "coeff": "0x01"},
+ {"power": 10, "coeff": "0x01"},
+ {"power": 5, "coeff": "0x01"},
+ {"power": 2, "coeff": "0x01"},
+ {"power": 0, "coeff": "0x01"}
+ ],
+ "bits": 571,
+ "degree": 571
},
"form": "Weierstrass",
"params": {
diff --git a/other/curves.json b/other/curves.json
index a67be8a..d886142 100644
--- a/other/curves.json
+++ b/other/curves.json
@@ -364,6 +364,38 @@
}
},
{
+ "name": "Fp254n2BNa",
+ "category": "other",
+ "desc": "Curve used in: https://eprint.iacr.org/2010/354.pdf",
+ "field": {
+ "type": "Extension",
+ "base": "0x2370fb049d410fbe4e761a9886e502417d023f40180000017e80600000000001",
+ "bits": 508,
+ "degree": 2,
+ "poly": [
+ {"power": 2, "coeff": "0x01"},
+ {"power": 0, "coeff": "0x05"}
+ ]
+ },
+ "form": "Weierstrass",
+ "params": {
+ "a": [{"power": 0, "coeff": "0x00"}],
+ "b": [{"power": 1, "coeff": "0x2370fb049d410fbe4e761a9886e502417d023f40180000017e80600000000000"}]
+ },
+ "generator": {
+ "x": [
+ {"power": 1, "coeff": "0xa1cf585585a61c6e9880b1f2a5c539f7d906fff238fa6341e1de1a2e45c3f72"},
+ {"power": 0, "coeff": "0x19b0bea4afe4c330da93cc3533da38a9f430b471c6f8a536e81962ed967909b5"}
+ ],
+ "y": [
+ {"power": 1, "coeff": "0x0ee97d6de9902a27d00e952232a78700863bc9aa9be960C32f5bf9fd0a32d345"},
+ {"power": 0, "coeff": "0x17abd366ebbd65333e49c711a80a0cf6d24adf1b9b3990eedcc91731384d2627"}
+ ]
+ },
+ "order": "0x2370fb049d410fbe4e761a9886e502411dc1af70120000017e80600000000001",
+ "cofactor": "0x2370fb049d410fbe4e761a9886e50241dc42cf101e0000017e80600000000001"
+ },
+ {
"name": "Fp254BNb",
"category": "other",
"desc": "Curve used in https://www.iacr.org/archive/eurocrypt2011/66320047/66320047.pdf",
diff --git a/schema.json b/schema.json
index d1ff298..6a91758 100644
--- a/schema.json
+++ b/schema.json
@@ -5,35 +5,51 @@
"type": "string",
"pattern": "^(0x[0-9a-fA-F]+|[0-9]+)$"
},
+ "Polynomial": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "power": {"type": "integer"},
+ "coeff": {"$ref": "#/definitions/Number"}
+ }
+ }
+ },
+ "Element": {
+ "anyOf": [
+ {"$ref": "#/definitions/Number"},
+ {"$ref": "#/definitions/Polynomial"}
+ ]
+ },
"Weierstrass": {
"type": "object",
"properties": {
- "a": {"$ref": "#/definitions/Number"},
- "b": {"$ref": "#/definitions/Number"}
+ "a": {"$ref": "#/definitions/Element"},
+ "b": {"$ref": "#/definitions/Element"}
},
"required": ["a", "b"]
},
"Edwards": {
"type": "object",
"properties": {
- "c": {"$ref": "#/definitions/Number"},
- "d": {"$ref": "#/definitions/Number"}
+ "c": {"$ref": "#/definitions/Element"},
+ "d": {"$ref": "#/definitions/Element"}
},
"required": ["c", "d"]
},
"TwistedEdwards": {
"type": "object",
"properties": {
- "a": {"$ref": "#/definitions/Number"},
- "d": {"$ref": "#/definitions/Number"}
+ "a": {"$ref": "#/definitions/Element"},
+ "d": {"$ref": "#/definitions/Element"}
},
"required": ["a", "d"]
},
"Montgomery": {
"type": "object",
"properties": {
- "a": {"$ref": "#/definitions/Number"},
- "b": {"$ref": "#/definitions/Number"}
+ "a": {"$ref": "#/definitions/Element"},
+ "b": {"$ref": "#/definitions/Element"}
},
"required": ["a", "b"]
},
@@ -46,43 +62,33 @@
},
"required": ["p", "bits"]
},
- "Trinomial": {
- "type": "object",
- "properties": {
- "m": {"type": "integer"},
- "e1": {"type": "integer"}
- },
- "required": ["m", "e1"]
- },
- "Pentanomial": {
+ "BinaryField": {
"type": "object",
"properties": {
- "m": {"type": "integer"},
- "e1": {"type": "integer"},
- "e2": {"type": "integer"},
- "e3": {"type": "integer"}
+ "type": {"const": "Binary"},
+ "base": {"const": "0x02"},
+ "degree": {"type": "integer"},
+ "poly": {"$ref": "#/definitions/Polynomial"},
+ "bits": {"type": "integer"}
},
- "required": ["m", "e1", "e2", "e3"]
+ "required": ["degree", "poly", "bits"]
},
- "BinaryField": {
+ "ExtenstionField": {
"type": "object",
"properties": {
- "type": {"const": "Binary"},
- "poly": {
- "anyOf": [
- {"$ref": "#/definitions/Trinomial"},
- {"$ref": "#/definitions/Pentanomial"}
- ]
- },
+ "type": {"const": "Extension"},
+ "base": {"$ref": "#/definitions/Number"},
+ "degree": {"type": "integer"},
+ "poly": {"$ref": "#/definitions/Polynomial"},
"bits": {"type": "integer"}
},
- "required": ["poly", "bits"]
+ "required": ["base", "degree", "poly", "bits"]
},
"Point": {
"type": "object",
"properties": {
- "x": {"$ref": "#/definitions/Number"},
- "y": {"$ref": "#/definitions/Number"}
+ "x": {"$ref": "#/definitions/Element"},
+ "y": {"$ref": "#/definitions/Element"}
},
"required": ["x", "y"]
},
@@ -96,7 +102,8 @@
"field": {
"oneOf": [
{"$ref": "#/definitions/PrimeField"},
- {"$ref": "#/definitions/BinaryField"}
+ {"$ref": "#/definitions/BinaryField"},
+ {"$ref": "#/definitions/ExtenstionField"}
]
},
"form": {
diff --git a/secg/curves.json b/secg/curves.json
index 982b03d..a7d2952 100644
--- a/secg/curves.json
+++ b/secg/curves.json
@@ -899,10 +899,12 @@
"field": {
"type": "Binary",
"bits": 113,
- "poly": {
- "m": 113,
- "e1": 9
- }
+ "poly": [
+ {"power": 113, "coeff": "0x01"},
+ {"power": 9, "coeff": "0x01"},
+ {"power": 0, "coeff": "0x01"}
+ ],
+ "degree": 113
},
"params": {
"a": "0x003088250ca6e7c7fe649ce85820f7",
@@ -927,10 +929,12 @@
"field": {
"type": "Binary",
"bits": 113,
- "poly": {
- "m": 113,
- "e1": 9
- }
+ "poly": [
+ {"power": 113, "coeff": "0x01"},
+ {"power": 9, "coeff": "0x01"},
+ {"power": 0, "coeff": "0x01"}
+ ],
+ "degree": 113
},
"params": {
"a": "0x00689918dbec7e5a0dd6dfc0aa55c7",
@@ -952,12 +956,14 @@
"field": {
"type": "Binary",
"bits": 131,
- "poly": {
- "m": 131,
- "e1": 8,
- "e2": 3,
- "e3": 2
- }
+ "poly": [
+ {"power": 131, "coeff": "0x01"},
+ {"power": 8, "coeff": "0x01"},
+ {"power": 3, "coeff": "0x01"},
+ {"power": 2, "coeff": "0x01"},
+ {"power": 0, "coeff": "0x01"}
+ ],
+ "degree": 131
},
"params": {
"a": "0x07a11b09a76b562144418ff3ff8c2570b8",
@@ -979,12 +985,14 @@
"field": {
"type": "Binary",
"bits": 131,
- "poly": {
- "m": 131,
- "e1": 8,
- "e2": 3,
- "e3": 2
- }
+ "poly": [
+ {"power": 131, "coeff": "0x01"},
+ {"power": 8, "coeff": "0x01"},
+ {"power": 3, "coeff": "0x01"},
+ {"power": 2, "coeff": "0x01"},
+ {"power": 0, "coeff": "0x01"}
+ ],
+ "degree": 131
},
"params": {
"a": "0x03e5a88919d7cafcbf415f07c2176573b2",
@@ -1004,13 +1012,15 @@
"oid": "1.3.132.0.1",
"field": {
"type": "Binary",
- "poly": {
- "m": 163,
- "e1": 7,
- "e2": 6,
- "e3": 3
- },
- "bits": 163
+ "poly": [
+ {"power": 163, "coeff": "0x01"},
+ {"power": 7, "coeff": "0x01"},
+ {"power": 6, "coeff": "0x01"},
+ {"power": 3, "coeff": "0x01"},
+ {"power": 0, "coeff": "0x01"}
+ ],
+ "bits": 163,
+ "degree": 163
},
"form": "Weierstrass",
"params": {
@@ -1045,13 +1055,15 @@
"oid": "1.3.132.0.2",
"field": {
"type": "Binary",
- "poly": {
- "m": 163,
- "e1": 7,
- "e2": 6,
- "e3": 3
- },
- "bits": 163
+ "poly": [
+ {"power": 163, "coeff": "0x01"},
+ {"power": 7, "coeff": "0x01"},
+ {"power": 6, "coeff": "0x01"},
+ {"power": 3, "coeff": "0x01"},
+ {"power": 0, "coeff": "0x01"}
+ ],
+ "bits": 163,
+ "degree": 163
},
"form": "Weierstrass",
"params": {
@@ -1084,13 +1096,15 @@
"oid": "1.3.132.0.15",
"field": {
"type": "Binary",
- "poly": {
- "m": 163,
- "e1": 7,
- "e2": 6,
- "e3": 3
- },
- "bits": 163
+ "poly": [
+ {"power": 163, "coeff": "0x01"},
+ {"power": 7, "coeff": "0x01"},
+ {"power": 6, "coeff": "0x01"},
+ {"power": 3, "coeff": "0x01"},
+ {"power": 0, "coeff": "0x01"}
+ ],
+ "bits": 163,
+ "degree": 163
},
"form": "Weierstrass",
"params": {
@@ -1126,10 +1140,12 @@
"field": {
"type": "Binary",
"bits": 193,
- "poly": {
- "m": 193,
- "e1": 15
- }
+ "poly": [
+ {"power": 193, "coeff": "0x01"},
+ {"power": 15, "coeff": "0x01"},
+ {"power": 0, "coeff": "0x01"}
+ ],
+ "degree": 193
},
"params": {
"a": "0x0017858feb7a98975169e171f77b4087de098ac8a911df7b01",
@@ -1154,10 +1170,12 @@
"field": {
"type": "Binary",
"bits": 193,
- "poly": {
- "m": 193,
- "e1": 15
- }
+ "poly": [
+ {"power": 193, "coeff": "0x01"},
+ {"power": 15, "coeff": "0x01"},
+ {"power": 0, "coeff": "0x01"}
+ ],
+ "degree": 193
},
"params": {
"a": "0x0163f35a5137c2ce3ea6ed8667190b0bc43ecd69977702709b",
@@ -1180,11 +1198,13 @@
"oid": "1.3.132.0.26",
"field": {
"type": "Binary",
- "poly": {
- "m": 233,
- "e1": 74
- },
- "bits": 233
+ "poly": [
+ {"power": 233, "coeff": "0x01"},
+ {"power": 74, "coeff": "0x01"},
+ {"power": 0, "coeff": "0x01"}
+ ],
+ "bits": 233,
+ "degree": 233
},
"form": "Weierstrass",
"params": {
@@ -1217,11 +1237,13 @@
"oid": "1.3.132.0.27",
"field": {
"type": "Binary",
- "poly": {
- "m": 233,
- "e1": 74
- },
- "bits": 233
+ "poly": [
+ {"power": 233, "coeff": "0x01"},
+ {"power": 74, "coeff": "0x01"},
+ {"power": 0, "coeff": "0x01"}
+ ],
+ "bits": 233,
+ "degree": 233
},
"form": "Weierstrass",
"params": {
@@ -1256,11 +1278,13 @@
"oid": "1.3.132.0.3",
"field": {
"type": "Binary",
- "poly": {
- "m": 239,
- "e1": 158
- },
- "bits": 233
+ "poly": [
+ {"power": 239, "coeff": "0x01"},
+ {"power": 158, "coeff": "0x01"},
+ {"power": 0, "coeff": "0x01"}
+ ],
+ "bits": 233,
+ "degree": 233
},
"form": "Weierstrass",
"params": {
@@ -1293,13 +1317,15 @@
"oid": "1.3.132.0.16",
"field": {
"type": "Binary",
- "poly": {
- "m": 283,
- "e1": 12,
- "e2": 7,
- "e3": 5
- },
- "bits": 283
+ "poly": [
+ {"power": 283, "coeff": "0x01"},
+ {"power": 12, "coeff": "0x01"},
+ {"power": 7, "coeff": "0x01"},
+ {"power": 5, "coeff": "0x01"},
+ {"power": 0, "coeff": "0x01"}
+ ],
+ "bits": 283,
+ "degree": 283
},
"form": "Weierstrass",
"params": {
@@ -1333,13 +1359,15 @@
"oid": "1.3.132.0.17",
"field": {
"type": "Binary",
- "poly": {
- "m": 283,
- "e1": 12,
- "e2": 7,
- "e3": 5
- },
- "bits": 283
+ "poly": [
+ {"power": 283, "coeff": "0x01"},
+ {"power": 12, "coeff": "0x01"},
+ {"power": 7, "coeff": "0x01"},
+ {"power": 5, "coeff": "0x01"},
+ {"power": 0, "coeff": "0x01"}
+ ],
+ "bits": 283,
+ "degree": 283
},
"form": "Weierstrass",
"params": {
@@ -1373,11 +1401,13 @@
"oid": "1.3.132.0.36",
"field": {
"type": "Binary",
- "poly": {
- "m": 409,
- "e1": 87
- },
- "bits": 409
+ "poly": [
+ {"power": 409, "coeff": "0x01"},
+ {"power": 87, "coeff": "0x01"},
+ {"power": 0, "coeff": "0x01"}
+ ],
+ "bits": 409,
+ "degree": 409
},
"form": "Weierstrass",
"params": {
@@ -1409,11 +1439,13 @@
"oid": "1.3.132.0.37",
"field": {
"type": "Binary",
- "poly": {
- "m": 409,
- "e1": 87
- },
- "bits": 409
+ "poly": [
+ {"power": 409, "coeff": "0x01"},
+ {"power": 87, "coeff": "0x01"},
+ {"power": 0, "coeff": "0x01"}
+ ],
+ "bits": 409,
+ "degree": 409
},
"form": "Weierstrass",
"params": {
@@ -1445,13 +1477,15 @@
"oid": "1.3.132.0.38",
"field": {
"type": "Binary",
- "poly": {
- "m": 571,
- "e1": 10,
- "e2": 5,
- "e3": 2
- },
- "bits": 571
+ "poly": [
+ {"power": 571, "coeff": "0x01"},
+ {"power": 10, "coeff": "0x01"},
+ {"power": 5, "coeff": "0x01"},
+ {"power": 2, "coeff": "0x01"},
+ {"power": 0, "coeff": "0x01"}
+ ],
+ "bits": 571,
+ "degree": 571
},
"form": "Weierstrass",
"params": {
@@ -1483,13 +1517,15 @@
"oid": "1.3.132.0.39",
"field": {
"type": "Binary",
- "poly": {
- "m": 571,
- "e1": 10,
- "e2": 5,
- "e3": 2
- },
- "bits": 571
+ "poly": [
+ {"power": 571, "coeff": "0x01"},
+ {"power": 10, "coeff": "0x01"},
+ {"power": 5, "coeff": "0x01"},
+ {"power": 2, "coeff": "0x01"},
+ {"power": 0, "coeff": "0x01"}
+ ],
+ "bits": 571,
+ "degree": 571
},
"form": "Weierstrass",
"params": {
diff --git a/wtls/curves.json b/wtls/curves.json
index 3b9ac5f..3b3ef17 100644
--- a/wtls/curves.json
+++ b/wtls/curves.json
@@ -6,10 +6,12 @@
"desc": "",
"field": {
"bits": 113,
- "poly": {
- "e1": 9,
- "m": 113
- },
+ "degree": 113,
+ "poly": [
+ {"power": 113, "coeff": "0x01"},
+ {"power": 9, "coeff": "0x01"},
+ {"power": 0, "coeff": "0x01"}
+ ],
"type": "Binary"
},
"form": "Weierstrass",
@@ -30,14 +32,16 @@
"cofactor": "0x2",
"desc": "",
"field": {
+ "type": "Binary",
+ "poly": [
+ {"power": 163, "coeff": "0x01"},
+ {"power": 7, "coeff": "0x01"},
+ {"power": 6, "coeff": "0x01"},
+ {"power": 3, "coeff": "0x01"},
+ {"power": 0, "coeff": "0x01"}
+ ],
"bits": 163,
- "poly": {
- "e1": 7,
- "e2": 6,
- "e3": 2,
- "m": 163
- },
- "type": "Binary"
+ "degree": 163
},
"form": "Weierstrass",
"generator": {
@@ -63,10 +67,12 @@
"desc": "",
"field": {
"bits": 113,
- "poly": {
- "e1": 9,
- "m": 113
- },
+ "degree": 113,
+ "poly": [
+ {"power": 113, "coeff": "0x01"},
+ {"power": 9, "coeff": "0x01"},
+ {"power": 0, "coeff": "0x01"}
+ ],
"type": "Binary"
},
"form": "Weierstrass",
@@ -94,12 +100,14 @@
"field": {
"type": "Binary",
"bits": 163,
- "poly": {
- "m": 163,
- "e1": 8,
- "e2": 2,
- "e3": 1
- }
+ "degree": 163,
+ "poly": [
+ {"power": 163, "coeff": "0x01"},
+ {"power": 8, "coeff": "0x01"},
+ {"power": 2, "coeff": "0x01"},
+ {"power": 1, "coeff": "0x01"},
+ {"power": 0, "coeff": "0x01"}
+ ]
},
"params": {
"a": "0x072546b5435234a422e0789675f432c89435de5242",
@@ -126,7 +134,7 @@
},
"form": "Weierstrass",
"generator": {
- "x": "0x09487239995a5ee76b55f9c2f098,",
+ "x": "0x09487239995a5ee76b55f9c2f098",
"y": "0xa89ce5af8724c0a23e0e0ff77500"
},
"name": "wap-wsg-idm-ecid-wtls6",
@@ -151,7 +159,7 @@
},
"form": "Weierstrass",
"generator": {
- "x": "0x4a96b5688ef573284664698968c38bb913cbfc82,",
+ "x": "0x4a96b5688ef573284664698968c38bb913cbfc82",
"y": "0x23a628553168947d59dcc912042351377ac5fb32"
},
"name": "wap-wsg-idm-ecid-wtls7",
@@ -215,16 +223,18 @@
"cofactor": "0x4",
"desc": "",
"field": {
+ "type": "Binary",
+ "poly": [
+ {"power": 233, "coeff": "0x01"},
+ {"power": 74, "coeff": "0x01"},
+ {"power": 0, "coeff": "0x01"}
+ ],
"bits": 233,
- "poly": {
- "e1": 74,
- "m": 233
- },
- "type": "Binary"
+ "degree": 233
},
"form": "Weierstrass",
"generator": {
- "x": "0x017232ba853a7e731af129f22ff4149563a419c26bf50a4c9d6eefad6126,",
+ "x": "0x017232ba853a7e731af129f22ff4149563a419c26bf50a4c9d6eefad6126",
"y": "0x01db537dece819b7f70f555a67c427a8cd9bf18aeb9b56e0c11056fae6a3"
},
"name": "wap-wsg-idm-ecid-wtls10",
@@ -245,12 +255,14 @@
"cofactor": "0x2",
"desc": "",
"field": {
+ "type": "Binary",
+ "poly": [
+ {"power": 233, "coeff": "0x01"},
+ {"power": 74, "coeff": "0x01"},
+ {"power": 0, "coeff": "0x01"}
+ ],
"bits": 233,
- "poly": {
- "e1": 74,
- "m": 233
- },
- "type": "Binary"
+ "degree": 233
},
"form": "Weierstrass",
"generator": {
diff --git a/x962/curves.json b/x962/curves.json
index 3431df4..1058ded 100644
--- a/x962/curves.json
+++ b/x962/curves.json
@@ -352,12 +352,14 @@
"field": {
"type": "Binary",
"bits": 176,
- "poly": {
- "m": 176,
- "e1": 43,
- "e2": 2,
- "e3": 1
- }
+ "degree": 176,
+ "poly": [
+ {"power": 176, "coeff": "0x01"},
+ {"power": 43, "coeff": "0x01"},
+ {"power": 2, "coeff": "0x01"},
+ {"power": 1, "coeff": "0x01"},
+ {"power": 0, "coeff": "0x01"}
+ ]
},
"params": {
"a": "0xe4e6db2995065c407d9d39b8d0967b96704ba8e9c90b",
@@ -379,12 +381,14 @@
"field": {
"type": "Binary",
"bits": 163,
- "poly": {
- "m": 163,
- "e1": 8,
- "e2": 2,
- "e3": 1
- }
+ "degree": 163,
+ "poly": [
+ {"power": 163, "coeff": "0x01"},
+ {"power": 8, "coeff": "0x01"},
+ {"power": 2, "coeff": "0x01"},
+ {"power": 1, "coeff": "0x01"},
+ {"power": 0, "coeff": "0x01"}
+ ]
},
"params": {
"a": "0x072546b5435234a422e0789675f432c89435de5242",
@@ -406,12 +410,14 @@
"field": {
"type": "Binary",
"bits": 163,
- "poly": {
- "m": 163,
- "e1": 8,
- "e2": 2,
- "e3": 1
- }
+ "degree": 163,
+ "poly": [
+ {"power": 163, "coeff": "0x01"},
+ {"power": 8, "coeff": "0x01"},
+ {"power": 2, "coeff": "0x01"},
+ {"power": 1, "coeff": "0x01"},
+ {"power": 0, "coeff": "0x01"}
+ ]
},
"params": {
"a": "0x0108b39e77c4b108bed981ed0e890e117c511cf072",
@@ -433,12 +439,14 @@
"field": {
"type": "Binary",
"bits": 163,
- "poly": {
- "m": 163,
- "e1": 8,
- "e2": 2,
- "e3": 1
- }
+ "degree": 163,
+ "poly": [
+ {"power": 163, "coeff": "0x01"},
+ {"power": 8, "coeff": "0x01"},
+ {"power": 2, "coeff": "0x01"},
+ {"power": 1, "coeff": "0x01"},
+ {"power": 0, "coeff": "0x01"}
+ ]
},
"params": {
"a": "0x07a526c63d3e25a256a007699f5447e32ae456b50e",
@@ -460,12 +468,14 @@
"field": {
"type": "Binary",
"bits": 208,
- "poly": {
- "m": 208,
- "e1": 83,
- "e2": 2,
- "e3": 1
- }
+ "degree": 208,
+ "poly": [
+ {"power": 208, "coeff": "0x01"},
+ {"power": 83, "coeff": "0x01"},
+ {"power": 2, "coeff": "0x01"},
+ {"power": 1, "coeff": "0x01"},
+ {"power": 0, "coeff": "0x01"}
+ ]
},
"params": {
"a": "0x0",
@@ -487,10 +497,12 @@
"field": {
"type": "Binary",
"bits": 191,
- "poly": {
- "m": 191,
- "e1": 9
- }
+ "degree": 191,
+ "poly": [
+ {"power": 191, "coeff": "0x01"},
+ {"power": 9, "coeff": "0x01"},
+ {"power": 0, "coeff": "0x01"}
+ ]
},
"params": {
"a": "0x6c01074756099122221056911c77d77e77a777e7e7e77fcb",
@@ -512,10 +524,12 @@
"field": {
"type": "Binary",
"bits": 191,
- "poly": {
- "m": 191,
- "e1": 9
- }
+ "degree": 191,
+ "poly": [
+ {"power": 191, "coeff": "0x01"},
+ {"power": 9, "coeff": "0x01"},
+ {"power": 0, "coeff": "0x01"}
+ ]
},
"params": {
"a": "0x401028774d7777c7b7666d1366ea432071274f89ff01e718",
@@ -537,10 +551,12 @@
"field": {
"type": "Binary",
"bits": 191,
- "poly": {
- "m": 191,
- "e1": 9
- }
+ "degree": 191,
+ "poly": [
+ {"power": 191, "coeff": "0x01"},
+ {"power": 9, "coeff": "0x01"},
+ {"power": 0, "coeff": "0x01"}
+ ]
},
"params": {
"a": "0x2866537b676752636a68f56554e12640276b649ef7526267",
@@ -562,10 +578,12 @@
"field": {
"type": "Binary",
"bits": 239,
- "poly": {
- "m": 239,
- "e1": 36
- }
+ "degree": 239,
+ "poly": [
+ {"power": 239, "coeff": "0x01"},
+ {"power": 36, "coeff": "0x01"},
+ {"power": 0, "coeff": "0x01"}
+ ]
},
"params": {
"a": "0x01238774666a67766d6676f778e676b66999176666e687666d8766c66a9f",
@@ -587,10 +605,12 @@
"field": {
"type": "Binary",
"bits": 239,
- "poly": {
- "m": 239,
- "e1": 36
- }
+ "degree": 239,
+ "poly": [
+ {"power": 239, "coeff": "0x01"},
+ {"power": 36, "coeff": "0x01"},
+ {"power": 0, "coeff": "0x01"}
+ ]
},
"params": {
"a": "0x4230017757a767fae42398569b746325d45313af0766266479b75654e65f",
@@ -612,10 +632,12 @@
"field": {
"type": "Binary",
"bits": 239,
- "poly": {
- "m": 239,
- "e1": 36
- }
+ "degree": 239,
+ "poly": [
+ {"power": 239, "coeff": "0x01"},
+ {"power": 36, "coeff": "0x01"},
+ {"power": 0, "coeff": "0x01"}
+ ]
},
"params": {
"a": "0x32010857077c5431123a46b808906756f543423e8d27877578125778ac76",
@@ -637,12 +659,14 @@
"field": {
"type": "Binary",
"bits": 272,
- "poly": {
- "m": 272,
- "e1": 56,
- "e2": 3,
- "e3": 1
- }
+ "degree": 272,
+ "poly": [
+ {"power": 272, "coeff": "0x01"},
+ {"power": 56, "coeff": "0x01"},
+ {"power": 3, "coeff": "0x01"},
+ {"power": 1, "coeff": "0x01"},
+ {"power": 0, "coeff": "0x01"}
+ ]
},
"params": {
"a": "0x91a091f03b5fba4ab2ccf49c4edd220fb028712d42be752b2c40094dbacdb586fb20",
@@ -664,12 +688,14 @@
"field": {
"type": "Binary",
"bits": 304,
- "poly": {
- "m": 304,
- "e1": 11,
- "e2": 2,
- "e3": 1
- }
+ "degree": 304,
+ "poly": [
+ {"power": 304, "coeff": "0x01"},
+ {"power": 11, "coeff": "0x01"},
+ {"power": 2, "coeff": "0x01"},
+ {"power": 1, "coeff": "0x01"},
+ {"power": 0, "coeff": "0x01"}
+ ]
},
"params": {
"a": "0xfd0d693149a118f651e6dce6802085377e5f882d1b510b44160074c1288078365a0396c8e681",
@@ -691,12 +717,14 @@
"field": {
"type": "Binary",
"bits": 368,
- "poly": {
- "m": 368,
- "e1": 85,
- "e2": 2,
- "e3": 1
- }
+ "degree": 368,
+ "poly": [
+ {"power": 368, "coeff": "0x01"},
+ {"power": 85, "coeff": "0x01"},
+ {"power": 2, "coeff": "0x01"},
+ {"power": 1, "coeff": "0x01"},
+ {"power": 0, "coeff": "0x01"}
+ ]
},
"params": {
"a": "0xe0d2ee25095206f5e2a4f9ed229f1f256e79a0e2b455970d8d0d865bd94778c576d62f0ab7519ccd2a1a906ae30d",
@@ -718,10 +746,12 @@
"field": {
"type": "Binary",
"bits": 359,
- "poly": {
- "m": 359,
- "e1": 68
- }
+ "degree": 359,
+ "poly": [
+ {"power": 359, "coeff": "0x01"},
+ {"power": 68, "coeff": "0x01"},
+ {"power": 0, "coeff": "0x01"}
+ ]
},
"params": {
"a": "0x5667676a654b20754f356ea92017d946567c46675556f19556a04616b567d223a5e05656fb549016a96656a557",
@@ -743,10 +773,12 @@
"field": {
"type": "Binary",
"bits": 431,
- "poly": {
- "m": 431,
- "e1": 120
- }
+ "degree": 431,
+ "poly": [
+ {"power": 431, "coeff": "0x01"},
+ {"power": 120, "coeff": "0x01"},
+ {"power": 0, "coeff": "0x01"}
+ ]
},
"params": {
"a": "0x1a827ef00dd6fc0e234caf046c6a5d8a85395b236cc4ad2cf32a0cadbdc9ddf620b0eb9906d0957f6c6feacd615468df104de296cd8f",
diff --git a/x963/curves.json b/x963/curves.json
index 54293dd..8004a2b 100644
--- a/x963/curves.json
+++ b/x963/curves.json
@@ -10,13 +10,15 @@
"oid": "",
"field": {
"type": "Binary",
+ "poly": [
+ {"power": 163, "coeff": "0x01"},
+ {"power": 7, "coeff": "0x01"},
+ {"power": 6, "coeff": "0x01"},
+ {"power": 3, "coeff": "0x01"},
+ {"power": 0, "coeff": "0x01"}
+ ],
"bits": 163,
- "poly": {
- "m": 163,
- "e1": 7,
- "e2": 6,
- "e3": 3
- }
+ "degree": 163
},
"params": {
"a": "0x000000000000000000000000000000000000000001",
@@ -36,13 +38,15 @@
"oid": "",
"field": {
"type": "Binary",
- "poly": {
- "m": 163,
- "e1": 7,
- "e2": 6,
- "e3": 3
- },
- "bits": 163
+ "poly": [
+ {"power": 163, "coeff": "0x01"},
+ {"power": 7, "coeff": "0x01"},
+ {"power": 6, "coeff": "0x01"},
+ {"power": 3, "coeff": "0x01"},
+ {"power": 0, "coeff": "0x01"}
+ ],
+ "bits": 163,
+ "degree": 163
},
"form": "Weierstrass",
"params": {
@@ -67,13 +71,15 @@
"oid": "",
"field": {
"type": "Binary",
- "bits": 193,
- "poly": {
- "m": 163,
- "e1": 7,
- "e2": 6,
- "e3": 3
- }
+ "poly": [
+ {"power": 163, "coeff": "0x01"},
+ {"power": 7, "coeff": "0x01"},
+ {"power": 6, "coeff": "0x01"},
+ {"power": 3, "coeff": "0x01"},
+ {"power": 0, "coeff": "0x01"}
+ ],
+ "bits": 163,
+ "degree": 163
},
"params": {
"a": "0x000000000000000000000000000000000000000001",
@@ -99,10 +105,11 @@
"field": {
"type": "Binary",
"bits": 193,
- "poly": {
- "m": 193,
- "e1": 15
- }
+ "poly": [
+ {"power": 193, "coeff": "0x01"},
+ {"power": 15, "coeff": "0x01"},
+ {"power": 0, "coeff": "0x01"}
+ ]
},
"params": {
"a": "0x0017858feb7a98975169e171f77b4087de098ac8a911df7b01",
@@ -127,10 +134,11 @@
"field": {
"type": "Binary",
"bits": 193,
- "poly": {
- "m": 193,
- "e1": 15
- }
+ "poly": [
+ {"power": 193, "coeff": "0x01"},
+ {"power": 15, "coeff": "0x01"},
+ {"power": 0, "coeff": "0x01"}
+ ]
},
"params": {
"a": "0x0163f35a5137c2ce3ea6ed8667190b0bc43ecd69977702709b",
@@ -154,11 +162,13 @@
"oid": "",
"field": {
"type": "Binary",
+ "poly": [
+ {"power": 233, "coeff": "0x01"},
+ {"power": 74, "coeff": "0x01"},
+ {"power": 0, "coeff": "0x01"}
+ ],
"bits": 233,
- "poly": {
- "m": 233,
- "e1": 74
- }
+ "degree": 233
},
"params": {
"a": "0x000000000000000000000000000000000000000000000000000000000000",
@@ -184,11 +194,13 @@
"oid": "",
"field": {
"type": "Binary",
+ "poly": [
+ {"power": 233, "coeff": "0x01"},
+ {"power": 74, "coeff": "0x01"},
+ {"power": 0, "coeff": "0x01"}
+ ],
"bits": 233,
- "poly": {
- "m": 233,
- "e1": 74
- }
+ "degree": 233
},
"params": {
"a": "0x000000000000000000000000000000000000000000000000000000000001",
@@ -215,10 +227,11 @@
"field": {
"type": "Binary",
"bits": 239,
- "poly": {
- "m": 239,
- "e1": 158
- }
+ "poly": [
+ {"power": 239, "coeff": "0x01"},
+ {"power": 158, "coeff": "0x01"},
+ {"power": 0, "coeff": "0x01"}
+ ]
},
"params": {
"a": "0x000000000000000000000000000000000000000000000000000000000000",
@@ -243,12 +256,13 @@
"field": {
"type": "Binary",
"bits": 283,
- "poly": {
- "m": 283,
- "e1": 12,
- "e2": 7,
- "e3": 5
- }
+ "poly": [
+ {"power": 283, "coeff": "0x01"},
+ {"power": 12, "coeff": "0x01"},
+ {"power": 7, "coeff": "0x01"},
+ {"power": 5, "coeff": "0x01"},
+ {"power": 0, "coeff": "0x01"}
+ ]
},
"params": {
"a": "0x000000000000000000000000000000000000000000000000000000000000000000000000",
@@ -274,12 +288,13 @@
"field": {
"type": "Binary",
"bits": 283,
- "poly": {
- "m": 283,
- "e1": 12,
- "e2": 7,
- "e3": 5
- }
+ "poly": [
+ {"power": 283, "coeff": "0x01"},
+ {"power": 12, "coeff": "0x01"},
+ {"power": 7, "coeff": "0x01"},
+ {"power": 5, "coeff": "0x01"},
+ {"power": 0, "coeff": "0x01"}
+ ]
},
"params": {
"a": "0x000000000000000000000000000000000000000000000000000000000000000000000001",
@@ -304,11 +319,13 @@
"oid": "",
"field": {
"type": "Binary",
+ "poly": [
+ {"power": 409, "coeff": "0x01"},
+ {"power": 87, "coeff": "0x01"},
+ {"power": 0, "coeff": "0x01"}
+ ],
"bits": 409,
- "poly": {
- "m": 409,
- "e1": 87
- }
+ "degree": 409
},
"params": {
"a": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
@@ -333,11 +350,13 @@
"oid": "",
"field": {
"type": "Binary",
+ "poly": [
+ {"power": 409, "coeff": "0x01"},
+ {"power": 87, "coeff": "0x01"},
+ {"power": 0, "coeff": "0x01"}
+ ],
"bits": 409,
- "poly": {
- "m": 409,
- "e1": 87
- }
+ "degree": 409
},
"params": {
"a": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001",
@@ -362,13 +381,15 @@
"oid": "",
"field": {
"type": "Binary",
+ "poly": [
+ {"power": 571, "coeff": "0x01"},
+ {"power": 10, "coeff": "0x01"},
+ {"power": 5, "coeff": "0x01"},
+ {"power": 2, "coeff": "0x01"},
+ {"power": 0, "coeff": "0x01"}
+ ],
"bits": 571,
- "poly": {
- "m": 571,
- "e1": 10,
- "e2": 5,
- "e3": 2
- }
+ "degree": 571
},
"params": {
"a": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
@@ -393,13 +414,15 @@
"oid": "",
"field": {
"type": "Binary",
+ "poly": [
+ {"power": 571, "coeff": "0x01"},
+ {"power": 10, "coeff": "0x01"},
+ {"power": 5, "coeff": "0x01"},
+ {"power": 2, "coeff": "0x01"},
+ {"power": 0, "coeff": "0x01"}
+ ],
"bits": 571,
- "poly": {
- "m": 571,
- "e1": 10,
- "e2": 5,
- "e3": 2
- }
+ "degree": 571
},
"params": {
"a": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001",