1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package io.github.tonywasher.joceanus.gordianknot.api.keypair.spec;
19
20 import io.github.tonywasher.joceanus.gordianknot.api.base.GordianLength;
21 import io.github.tonywasher.joceanus.gordianknot.api.keypair.spec.GordianLMSSpec.GordianLMSHash;
22 import io.github.tonywasher.joceanus.gordianknot.api.keypair.spec.GordianLMSSpec.GordianLMSHeight;
23 import io.github.tonywasher.joceanus.gordianknot.api.keypair.spec.GordianLMSSpec.GordianLMSWidth;
24 import io.github.tonywasher.joceanus.gordianknot.api.keypair.spec.GordianNTRUPrimeSpec.GordianNTRUPrimeParams;
25 import io.github.tonywasher.joceanus.gordianknot.api.keypair.spec.GordianNTRUPrimeSpec.GordianNTRUPrimeType;
26 import io.github.tonywasher.joceanus.gordianknot.api.keypair.spec.GordianXMSSSpec.GordianXMSSDigestType;
27 import io.github.tonywasher.joceanus.gordianknot.api.keypair.spec.GordianXMSSSpec.GordianXMSSHeight;
28 import io.github.tonywasher.joceanus.gordianknot.api.keypair.spec.GordianXMSSSpec.GordianXMSSMTLayers;
29
30 import java.util.Arrays;
31 import java.util.List;
32
33
34
35
36 public interface GordianKeyPairSpecBuilder {
37
38
39
40
41
42
43 GordianKeyPairSpecBuilder withKeyPairType(GordianKeyPairType pType);
44
45
46
47
48
49
50
51 GordianKeyPairSpecBuilder withEnumSubSpec(Enum<?> pSubSpec);
52
53
54
55
56
57
58
59
60 GordianKeyPairSpecBuilder withXMSSSubSpec(GordianXMSSDigestType pDigestType,
61 GordianXMSSHeight pHeight);
62
63
64
65
66
67
68
69
70
71 GordianKeyPairSpecBuilder withXMSSMTSubSpec(GordianXMSSDigestType pDigestType,
72 GordianXMSSHeight pHeight,
73 GordianXMSSMTLayers pLayers);
74
75
76
77
78
79
80
81
82
83
84
85 GordianKeyPairSpecBuilder withLMSSubSpec(GordianLMSHash pHashType,
86 GordianLMSHeight pHeight,
87 GordianLMSWidth pWidth,
88 GordianLength pLength,
89 int pDepth);
90
91
92
93
94
95
96
97
98 GordianKeyPairSpecBuilder withNTRUPrimeSubSpec(GordianNTRUPrimeType pType,
99 GordianNTRUPrimeParams pParams);
100
101
102
103
104
105
106
107 GordianKeyPairSpecBuilder withKeyPairSpecs(List<GordianKeyPairSpec> pSpecs);
108
109
110
111
112
113
114 GordianKeyPairSpec build();
115
116
117
118
119
120
121
122 default GordianKeyPairSpec rsa(final GordianRSASpec pSpec) {
123 return withKeyPairType(GordianKeyPairType.RSA).withEnumSubSpec(pSpec).build();
124 }
125
126
127
128
129
130
131
132 default GordianKeyPairSpec ec(final GordianECSpec pCurve) {
133 return withKeyPairType(GordianKeyPairType.EC).withEnumSubSpec(pCurve).build();
134 }
135
136
137
138
139
140
141
142 default GordianKeyPairSpec sm2(final GordianSM2Spec pCurve) {
143 return withKeyPairType(GordianKeyPairType.SM2).withEnumSubSpec(pCurve).build();
144 }
145
146
147
148
149
150
151
152 default GordianKeyPairSpec dstu4145(final GordianDSTUSpec pCurve) {
153 return withKeyPairType(GordianKeyPairType.DSTU).withEnumSubSpec(pCurve).build();
154 }
155
156
157
158
159
160
161
162 default GordianKeyPairSpec gost2012(final GordianGOSTSpec pCurve) {
163 return withKeyPairType(GordianKeyPairType.GOST).withEnumSubSpec(pCurve).build();
164 }
165
166
167
168
169
170
171
172 default GordianKeyPairSpec dsa(final GordianDSASpec pSpec) {
173 return withKeyPairType(GordianKeyPairType.DSA).withEnumSubSpec(pSpec).build();
174 }
175
176
177
178
179
180
181
182 default GordianKeyPairSpec dh(final GordianDHSpec pSpec) {
183 return withKeyPairType(GordianKeyPairType.DH).withEnumSubSpec(pSpec).build();
184 }
185
186
187
188
189
190
191
192 default GordianKeyPairSpec elGamal(final GordianDHSpec pSpec) {
193 return withKeyPairType(GordianKeyPairType.ELGAMAL).withEnumSubSpec(pSpec).build();
194 }
195
196
197
198
199
200
201 default GordianKeyPairSpec x25519() {
202 return withKeyPairType(GordianKeyPairType.XDH).withEnumSubSpec(GordianEdwardsSpec.CURVE25519).build();
203 }
204
205
206
207
208
209
210 default GordianKeyPairSpec x448() {
211 return withKeyPairType(GordianKeyPairType.XDH).withEnumSubSpec(GordianEdwardsSpec.CURVE448).build();
212 }
213
214
215
216
217
218
219 default GordianKeyPairSpec ed25519() {
220 return withKeyPairType(GordianKeyPairType.EDDSA).withEnumSubSpec(GordianEdwardsSpec.CURVE25519).build();
221 }
222
223
224
225
226
227
228 default GordianKeyPairSpec ed448() {
229 return withKeyPairType(GordianKeyPairType.EDDSA).withEnumSubSpec(GordianEdwardsSpec.CURVE448).build();
230 }
231
232
233
234
235
236
237
238
239 default GordianKeyPairSpec xmss(final GordianXMSSDigestType pDigestType,
240 final GordianXMSSHeight pHeight) {
241 return withKeyPairType(GordianKeyPairType.XMSS).withXMSSSubSpec(pDigestType, pHeight).build();
242 }
243
244
245
246
247
248
249
250
251
252 default GordianKeyPairSpec xmssmt(final GordianXMSSDigestType pDigestType,
253 final GordianXMSSHeight pHeight,
254 final GordianXMSSMTLayers pLayers) {
255 return withKeyPairType(GordianKeyPairType.XMSS).withXMSSMTSubSpec(pDigestType, pHeight, pLayers).build();
256 }
257
258
259
260
261
262
263
264
265
266
267 default GordianKeyPairSpec lms(final GordianLMSHash pHashType,
268 final GordianLMSHeight pHeight,
269 final GordianLMSWidth pWidth,
270 final GordianLength pLength) {
271 return hss(pHashType, pHeight, pWidth, pLength, 1);
272 }
273
274
275
276
277
278
279
280
281
282
283
284 default GordianKeyPairSpec hss(final GordianLMSHash pHashType,
285 final GordianLMSHeight pHeight,
286 final GordianLMSWidth pWidth,
287 final GordianLength pLength,
288 final int pDepth) {
289 return withKeyPairType(GordianKeyPairType.LMS).withLMSSubSpec(pHashType, pHeight, pWidth, pLength, pDepth).build();
290 }
291
292
293
294
295
296
297 default GordianKeyPairSpec newHope() {
298 return withKeyPairType(GordianKeyPairType.NEWHOPE).build();
299 }
300
301
302
303
304
305
306
307 default GordianKeyPairSpec slhdsa(final GordianSLHDSASpec pSpec) {
308 return withKeyPairType(GordianKeyPairType.SLHDSA).withEnumSubSpec(pSpec).build();
309 }
310
311
312
313
314
315
316
317 default GordianKeyPairSpec cmce(final GordianCMCESpec pSpec) {
318 return withKeyPairType(GordianKeyPairType.CMCE).withEnumSubSpec(pSpec).build();
319 }
320
321
322
323
324
325
326
327 default GordianKeyPairSpec frodo(final GordianFRODOSpec pSpec) {
328 return withKeyPairType(GordianKeyPairType.FRODO).withEnumSubSpec(pSpec).build();
329 }
330
331
332
333
334
335
336
337 default GordianKeyPairSpec saber(final GordianSABERSpec pSpec) {
338 return withKeyPairType(GordianKeyPairType.SABER).withEnumSubSpec(pSpec).build();
339 }
340
341
342
343
344
345
346
347 default GordianKeyPairSpec mlkem(final GordianMLKEMSpec pSpec) {
348 return withKeyPairType(GordianKeyPairType.MLKEM).withEnumSubSpec(pSpec).build();
349 }
350
351
352
353
354
355
356
357 default GordianKeyPairSpec mldsa(final GordianMLDSASpec pSpec) {
358 return withKeyPairType(GordianKeyPairType.MLDSA).withEnumSubSpec(pSpec).build();
359 }
360
361
362
363
364
365
366
367 default GordianKeyPairSpec hqc(final GordianHQCSpec pSpec) {
368 return withKeyPairType(GordianKeyPairType.HQC).withEnumSubSpec(pSpec).build();
369 }
370
371
372
373
374
375
376
377 default GordianKeyPairSpec bike(final GordianBIKESpec pSpec) {
378 return withKeyPairType(GordianKeyPairType.BIKE).withEnumSubSpec(pSpec).build();
379 }
380
381
382
383
384
385
386
387 default GordianKeyPairSpec ntru(final GordianNTRUSpec pSpec) {
388 return withKeyPairType(GordianKeyPairType.NTRU).withEnumSubSpec(pSpec).build();
389 }
390
391
392
393
394
395
396
397 default GordianKeyPairSpec ntruPlus(final GordianNTRUPlusSpec pSpec) {
398 return withKeyPairType(GordianKeyPairType.NTRUPLUS).withEnumSubSpec(pSpec).build();
399 }
400
401
402
403
404
405
406
407
408 default GordianKeyPairSpec ntruprime(final GordianNTRUPrimeType pType,
409 final GordianNTRUPrimeParams pParams) {
410 return withKeyPairType(GordianKeyPairType.NTRUPRIME).withNTRUPrimeSubSpec(pType, pParams).build();
411 }
412
413
414
415
416
417
418
419 default GordianKeyPairSpec falcon(final GordianFalconSpec pSpec) {
420 return withKeyPairType(GordianKeyPairType.FALCON).withEnumSubSpec(pSpec).build();
421 }
422
423
424
425
426
427
428
429 default GordianKeyPairSpec picnic(final GordianPicnicSpec pSpec) {
430 return withKeyPairType(GordianKeyPairType.PICNIC).withEnumSubSpec(pSpec).build();
431 }
432
433
434
435
436
437
438
439 default GordianKeyPairSpec mayo(final GordianMayoSpec pSpec) {
440 return withKeyPairType(GordianKeyPairType.MAYO).withEnumSubSpec(pSpec).build();
441 }
442
443
444
445
446
447
448
449 default GordianKeyPairSpec snova(final GordianSnovaSpec pSpec) {
450 return withKeyPairType(GordianKeyPairType.SNOVA).withEnumSubSpec(pSpec).build();
451 }
452
453
454
455
456
457
458
459 default GordianKeyPairSpec composite(final GordianKeyPairSpec... pSpecs) {
460 return composite(Arrays.asList(pSpecs));
461 }
462
463
464
465
466
467
468
469 default GordianKeyPairSpec composite(final List<GordianKeyPairSpec> pSpecs) {
470 return withKeyPairType(GordianKeyPairType.COMPOSITE).withKeyPairSpecs(pSpecs).build();
471 }
472 }