diff options
| author | J08nY | 2020-08-08 19:06:45 +0200 |
|---|---|---|
| committer | J08nY | 2020-08-08 19:06:45 +0200 |
| commit | 7991278b3ff953a83bf7f7a91c22640597caaa19 (patch) | |
| tree | 385801bc33542fdf34119f9564b4bc32fc41e0d7 | |
| parent | 28d25d938c2ba09a7014e4851a4f721e48c8caa6 (diff) | |
| download | std-curves-7991278b3ff953a83bf7f7a91c22640597caaa19.tar.gz std-curves-7991278b3ff953a83bf7f7a91c22640597caaa19.tar.zst std-curves-7991278b3ff953a83bf7f7a91c22640597caaa19.zip | |
Add support for extension field curves.
| -rw-r--r-- | .gitignore | 4 | ||||
| -rwxr-xr-x | analyze.sage | 17 | ||||
| -rw-r--r-- | nist/curves.json | 154 | ||||
| -rw-r--r-- | other/curves.json | 32 | ||||
| -rw-r--r-- | schema.json | 75 | ||||
| -rw-r--r-- | secg/curves.json | 240 | ||||
| -rw-r--r-- | wtls/curves.json | 80 | ||||
| -rw-r--r-- | x962/curves.json | 192 | ||||
| -rw-r--r-- | x963/curves.json | 167 |
9 files changed, 569 insertions, 392 deletions
@@ -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", |
