aboutsummaryrefslogtreecommitdiff
path: root/schema.json
blob: b9be5f63bc194e55c49004e2fcc2ae78e88d45f5 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
{
	"$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"}
	]
}