Files
std-curves/schema.json
2020-10-17 18:19:56 +02:00

200 lines
4.4 KiB
JSON

{
"$schema": "http://json-schema.org/schema#",
"definitions": {
"Number": {
"type": "string",
"pattern": "^(0x[0-9a-fA-F]+|[0-9]+)?$"
},
"Polynomial": {
"type": "array",
"items": {
"type": "object",
"properties": {
"power": {"type": "integer"},
"coeff": {"$ref": "#/definitions/Number"}
},
"required": ["power", "coeff"]
}
},
"Element": {
"anyOf": [
{
"type": "object",
"properties": {
"raw": {"$ref": "#/definitions/Number"}
},
"required": ["raw"]
},
{
"type": "object",
"properties": {
"poly": {"$ref": "#/definitions/Polynomial"}
},
"required": ["poly"]
}
]
},
"Weierstrass": {
"type": "object",
"properties": {
"a": {"$ref": "#/definitions/Element"},
"b": {"$ref": "#/definitions/Element"}
},
"required": ["a", "b"]
},
"Edwards": {
"type": "object",
"properties": {
"c": {"$ref": "#/definitions/Element"},
"d": {"$ref": "#/definitions/Element"}
},
"required": ["c", "d"]
},
"TwistedEdwards": {
"type": "object",
"properties": {
"a": {"$ref": "#/definitions/Element"},
"d": {"$ref": "#/definitions/Element"}
},
"required": ["a", "d"]
},
"Montgomery": {
"type": "object",
"properties": {
"a": {"$ref": "#/definitions/Element"},
"b": {"$ref": "#/definitions/Element"}
},
"required": ["a", "b"]
},
"PrimeField": {
"type": "object",
"properties": {
"type": {"const": "Prime"},
"p": {"$ref": "#/definitions/Number"},
"bits": {"type": "integer"}
},
"required": ["p", "bits"]
},
"BinaryField": {
"type": "object",
"properties": {
"type": {"const": "Binary"},
"base": {"const": "0x02"},
"degree": {"type": "integer"},
"poly": {"$ref": "#/definitions/Polynomial"},
"bits": {"type": "integer"},
"basis": {
"anyOf": [
{"const": "poly"},
{"const": "normal"}
]
}
},
"required": ["degree", "poly", "bits", "basis"]
},
"ExtenstionField": {
"type": "object",
"properties": {
"type": {"const": "Extension"},
"base": {"$ref": "#/definitions/Number"},
"degree": {"type": "integer"},
"poly": {"$ref": "#/definitions/Polynomial"},
"bits": {"type": "integer"}
},
"required": ["base", "degree", "poly", "bits"]
},
"Point": {
"type": "object",
"properties": {
"x": {"$ref": "#/definitions/Element"},
"y": {"$ref": "#/definitions/Element"}
},
"required": ["x", "y"]
},
"Curve": {
"type": "object",
"properties": {
"name": {"type": "string"},
"category": {"type": "string"},
"desc": {"type": "string"},
"oid": {"type": "string"},
"field": {
"oneOf": [
{"$ref": "#/definitions/PrimeField"},
{"$ref": "#/definitions/BinaryField"},
{"$ref": "#/definitions/ExtenstionField"}
]
},
"form": {
"type": "string",
"enum": ["Weierstrass", "Edwards", "TwistedEdwards", "Montgomery"]
},
"generator": {"$ref": "#/definitions/Point"},
"order": {"$ref": "#/definitions/Number"},
"cofactor": {"$ref": "#/definitions/Number"},
"aliases": {
"type": "array",
"items": {
"type": "string"
}
}
},
"allOf": [
{
"if": {
"properties": {"form": {"const": "Weierstrass"}}
},
"then": {
"properties": {
"params": {"$ref": "#/definitions/Weierstrass"}
}
}
},
{
"if": {
"properties": {"form": {"const": "Edwards"}}
},
"then": {
"properties": {
"params": {"$ref": "#/definitions/Edwards"}
}
}
},
{
"if": {
"properties": {"form": {"const": "TwistedEdwards"}}
},
"then": {
"properties": {
"params": {"$ref": "#/definitions/TwistedEdwards"}
}
}
},
{
"if": {
"properties": {"form": {"const": "Montgomery"}}
},
"then": {
"properties": {
"params": {"$ref": "#/definitions/Montgomery"}
}
}
}
],
"required": ["name", "category", "desc", "field", "form", "generator", "order", "cofactor"]
},
"Category": {
"type": "object",
"properties": {
"name": {"type": "string"},
"desc": {"type": "string"},
"curves": {"type": "array", "items": {"$ref": "#/definitions/Curve"}}
},
"required": ["name", "desc", "curves"]
}
},
"oneOf": [
{"$ref": "#/definitions/Category"},
{"$ref": "#/definitions/Curve"}
]
}