xref: /src/crypto/openssl/test/helpers/predefined_dhparams.c (revision f25b8c9fb4f58cf61adb47d7570abe7caa6d385d)
1 /*
2  * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved.
3  *
4  * Licensed under the Apache License 2.0 (the "License").  You may not use
5  * this file except in compliance with the License.  You can obtain a copy
6  * in the file LICENSE in the source distribution or at
7  * https://www.openssl.org/source/license.html
8  */
9 
10 #include <openssl/evp.h>
11 #include <openssl/core_names.h>
12 #include <openssl/param_build.h>
13 
14 #include "predefined_dhparams.h"
15 
16 #ifndef OPENSSL_NO_DH
17 
get_dh_from_pg_bn(OSSL_LIB_CTX * libctx,const char * type,BIGNUM * p,BIGNUM * g,BIGNUM * q)18 static EVP_PKEY *get_dh_from_pg_bn(OSSL_LIB_CTX *libctx, const char *type,
19     BIGNUM *p, BIGNUM *g, BIGNUM *q)
20 {
21     EVP_PKEY_CTX *pctx = EVP_PKEY_CTX_new_from_name(libctx, type, NULL);
22     OSSL_PARAM_BLD *tmpl = NULL;
23     OSSL_PARAM *params = NULL;
24     EVP_PKEY *dhpkey = NULL;
25 
26     if (pctx == NULL || EVP_PKEY_fromdata_init(pctx) <= 0)
27         goto err;
28 
29     if ((tmpl = OSSL_PARAM_BLD_new()) == NULL
30         || !OSSL_PARAM_BLD_push_BN(tmpl, OSSL_PKEY_PARAM_FFC_P, p)
31         || !OSSL_PARAM_BLD_push_BN(tmpl, OSSL_PKEY_PARAM_FFC_G, g)
32         || (q != NULL
33             && !OSSL_PARAM_BLD_push_BN(tmpl, OSSL_PKEY_PARAM_FFC_Q, q)))
34         goto err;
35 
36     params = OSSL_PARAM_BLD_to_param(tmpl);
37     if (params == NULL
38         || EVP_PKEY_fromdata(pctx, &dhpkey, EVP_PKEY_KEY_PARAMETERS, params) <= 0)
39         goto err;
40 
41 err:
42     EVP_PKEY_CTX_free(pctx);
43     OSSL_PARAM_free(params);
44     OSSL_PARAM_BLD_free(tmpl);
45     return dhpkey;
46 }
47 
get_dh_from_pg(OSSL_LIB_CTX * libctx,const char * type,unsigned char * pdata,size_t plen,unsigned char * gdata,size_t glen,unsigned char * qdata,size_t qlen)48 static EVP_PKEY *get_dh_from_pg(OSSL_LIB_CTX *libctx, const char *type,
49     unsigned char *pdata, size_t plen,
50     unsigned char *gdata, size_t glen,
51     unsigned char *qdata, size_t qlen)
52 {
53     EVP_PKEY *dhpkey = NULL;
54     BIGNUM *p = NULL, *g = NULL, *q = NULL;
55 
56     p = BN_bin2bn(pdata, plen, NULL);
57     g = BN_bin2bn(gdata, glen, NULL);
58     if (p == NULL || g == NULL)
59         goto err;
60     if (qdata != NULL && (q = BN_bin2bn(qdata, qlen, NULL)) == NULL)
61         goto err;
62 
63     dhpkey = get_dh_from_pg_bn(libctx, type, p, g, q);
64 
65 err:
66     BN_free(p);
67     BN_free(g);
68     BN_free(q);
69     return dhpkey;
70 }
71 
get_dh512(OSSL_LIB_CTX * libctx)72 EVP_PKEY *get_dh512(OSSL_LIB_CTX *libctx)
73 {
74     static unsigned char dh512_p[] = {
75         0xCB,
76         0xC8,
77         0xE1,
78         0x86,
79         0xD0,
80         0x1F,
81         0x94,
82         0x17,
83         0xA6,
84         0x99,
85         0xF0,
86         0xC6,
87         0x1F,
88         0x0D,
89         0xAC,
90         0xB6,
91         0x25,
92         0x3E,
93         0x06,
94         0x39,
95         0xCA,
96         0x72,
97         0x04,
98         0xB0,
99         0x6E,
100         0xDA,
101         0xC0,
102         0x61,
103         0xE6,
104         0x7A,
105         0x77,
106         0x25,
107         0xE8,
108         0x3B,
109         0xB9,
110         0x5F,
111         0x9A,
112         0xB6,
113         0xB5,
114         0xFE,
115         0x99,
116         0x0B,
117         0xA1,
118         0x93,
119         0x4E,
120         0x35,
121         0x33,
122         0xB8,
123         0xE1,
124         0xF1,
125         0x13,
126         0x4F,
127         0x59,
128         0x1A,
129         0xD2,
130         0x57,
131         0xC0,
132         0x26,
133         0x21,
134         0x33,
135         0x02,
136         0xC5,
137         0xAE,
138         0x23,
139     };
140     static unsigned char dh512_g[] = {
141         0x02,
142     };
143 
144     return get_dh_from_pg(libctx, "DH", dh512_p, sizeof(dh512_p),
145         dh512_g, sizeof(dh512_g), NULL, 0);
146 }
147 
get_dhx512(OSSL_LIB_CTX * libctx)148 EVP_PKEY *get_dhx512(OSSL_LIB_CTX *libctx)
149 {
150     static unsigned char dhx512_p[] = {
151         0x00,
152         0xe8,
153         0x1a,
154         0xb7,
155         0x9a,
156         0x02,
157         0x65,
158         0x64,
159         0x94,
160         0x7b,
161         0xba,
162         0x09,
163         0x1c,
164         0x12,
165         0x27,
166         0x1e,
167         0xea,
168         0x89,
169         0x32,
170         0x64,
171         0x78,
172         0xf8,
173         0x1c,
174         0x78,
175         0x8e,
176         0x96,
177         0xc3,
178         0xc6,
179         0x9f,
180         0x41,
181         0x05,
182         0x41,
183         0x65,
184         0xae,
185         0xe3,
186         0x05,
187         0xea,
188         0x66,
189         0x21,
190         0xf7,
191         0x38,
192         0xb7,
193         0x2b,
194         0x32,
195         0x40,
196         0x5a,
197         0x14,
198         0x86,
199         0x51,
200         0x94,
201         0xb1,
202         0xcf,
203         0x01,
204         0xe3,
205         0x27,
206         0x28,
207         0xf6,
208         0x75,
209         0xa3,
210         0x15,
211         0xbb,
212         0x12,
213         0x4d,
214         0x99,
215         0xe7,
216     };
217     static unsigned char dhx512_g[] = {
218         0x00,
219         0x91,
220         0xc1,
221         0x43,
222         0x6d,
223         0x0d,
224         0xb0,
225         0xa4,
226         0xde,
227         0x41,
228         0xb7,
229         0x93,
230         0xad,
231         0x51,
232         0x94,
233         0x1b,
234         0x43,
235         0xd8,
236         0x42,
237         0xf1,
238         0x5e,
239         0x46,
240         0x83,
241         0x5d,
242         0xf1,
243         0xd1,
244         0xf0,
245         0x41,
246         0x10,
247         0xd1,
248         0x1c,
249         0x5e,
250         0xad,
251         0x9b,
252         0x68,
253         0xb1,
254         0x6f,
255         0xf5,
256         0x8e,
257         0xaa,
258         0x6d,
259         0x71,
260         0x88,
261         0x37,
262         0xdf,
263         0x05,
264         0xf7,
265         0x6e,
266         0x7a,
267         0xb4,
268         0x25,
269         0x10,
270         0x6c,
271         0x7f,
272         0x38,
273         0xb4,
274         0xc8,
275         0xfc,
276         0xcc,
277         0x0c,
278         0x6a,
279         0x02,
280         0x08,
281         0x61,
282         0xf6,
283     };
284     static unsigned char dhx512_q[] = {
285         0x00,
286         0xdd,
287         0xf6,
288         0x35,
289         0xad,
290         0xfa,
291         0x70,
292         0xc7,
293         0xe7,
294         0xa8,
295         0xf0,
296         0xe3,
297         0xda,
298         0x79,
299         0x34,
300         0x3f,
301         0x5b,
302         0xcf,
303         0x73,
304         0x82,
305         0x91,
306     };
307 
308     return get_dh_from_pg(libctx, "X9.42 DH",
309         dhx512_p, sizeof(dhx512_p),
310         dhx512_g, sizeof(dhx512_g),
311         dhx512_q, sizeof(dhx512_q));
312 }
313 
get_dh1024dsa(OSSL_LIB_CTX * libctx)314 EVP_PKEY *get_dh1024dsa(OSSL_LIB_CTX *libctx)
315 {
316     static unsigned char dh1024_p[] = {
317         0xC8,
318         0x00,
319         0xF7,
320         0x08,
321         0x07,
322         0x89,
323         0x4D,
324         0x90,
325         0x53,
326         0xF3,
327         0xD5,
328         0x00,
329         0x21,
330         0x1B,
331         0xF7,
332         0x31,
333         0xA6,
334         0xA2,
335         0xDA,
336         0x23,
337         0x9A,
338         0xC7,
339         0x87,
340         0x19,
341         0x3B,
342         0x47,
343         0xB6,
344         0x8C,
345         0x04,
346         0x6F,
347         0xFF,
348         0xC6,
349         0x9B,
350         0xB8,
351         0x65,
352         0xD2,
353         0xC2,
354         0x5F,
355         0x31,
356         0x83,
357         0x4A,
358         0xA7,
359         0x5F,
360         0x2F,
361         0x88,
362         0x38,
363         0xB6,
364         0x55,
365         0xCF,
366         0xD9,
367         0x87,
368         0x6D,
369         0x6F,
370         0x9F,
371         0xDA,
372         0xAC,
373         0xA6,
374         0x48,
375         0xAF,
376         0xFC,
377         0x33,
378         0x84,
379         0x37,
380         0x5B,
381         0x82,
382         0x4A,
383         0x31,
384         0x5D,
385         0xE7,
386         0xBD,
387         0x52,
388         0x97,
389         0xA1,
390         0x77,
391         0xBF,
392         0x10,
393         0x9E,
394         0x37,
395         0xEA,
396         0x64,
397         0xFA,
398         0xCA,
399         0x28,
400         0x8D,
401         0x9D,
402         0x3B,
403         0xD2,
404         0x6E,
405         0x09,
406         0x5C,
407         0x68,
408         0xC7,
409         0x45,
410         0x90,
411         0xFD,
412         0xBB,
413         0x70,
414         0xC9,
415         0x3A,
416         0xBB,
417         0xDF,
418         0xD4,
419         0x21,
420         0x0F,
421         0xC4,
422         0x6A,
423         0x3C,
424         0xF6,
425         0x61,
426         0xCF,
427         0x3F,
428         0xD6,
429         0x13,
430         0xF1,
431         0x5F,
432         0xBC,
433         0xCF,
434         0xBC,
435         0x26,
436         0x9E,
437         0xBC,
438         0x0B,
439         0xBD,
440         0xAB,
441         0x5D,
442         0xC9,
443         0x54,
444         0x39,
445     };
446     static unsigned char dh1024_g[] = {
447         0x3B,
448         0x40,
449         0x86,
450         0xE7,
451         0xF3,
452         0x6C,
453         0xDE,
454         0x67,
455         0x1C,
456         0xCC,
457         0x80,
458         0x05,
459         0x5A,
460         0xDF,
461         0xFE,
462         0xBD,
463         0x20,
464         0x27,
465         0x74,
466         0x6C,
467         0x24,
468         0xC9,
469         0x03,
470         0xF3,
471         0xE1,
472         0x8D,
473         0xC3,
474         0x7D,
475         0x98,
476         0x27,
477         0x40,
478         0x08,
479         0xB8,
480         0x8C,
481         0x6A,
482         0xE9,
483         0xBB,
484         0x1A,
485         0x3A,
486         0xD6,
487         0x86,
488         0x83,
489         0x5E,
490         0x72,
491         0x41,
492         0xCE,
493         0x85,
494         0x3C,
495         0xD2,
496         0xB3,
497         0xFC,
498         0x13,
499         0xCE,
500         0x37,
501         0x81,
502         0x9E,
503         0x4C,
504         0x1C,
505         0x7B,
506         0x65,
507         0xD3,
508         0xE6,
509         0xA6,
510         0x00,
511         0xF5,
512         0x5A,
513         0x95,
514         0x43,
515         0x5E,
516         0x81,
517         0xCF,
518         0x60,
519         0xA2,
520         0x23,
521         0xFC,
522         0x36,
523         0xA7,
524         0x5D,
525         0x7A,
526         0x4C,
527         0x06,
528         0x91,
529         0x6E,
530         0xF6,
531         0x57,
532         0xEE,
533         0x36,
534         0xCB,
535         0x06,
536         0xEA,
537         0xF5,
538         0x3D,
539         0x95,
540         0x49,
541         0xCB,
542         0xA7,
543         0xDD,
544         0x81,
545         0xDF,
546         0x80,
547         0x09,
548         0x4A,
549         0x97,
550         0x4D,
551         0xA8,
552         0x22,
553         0x72,
554         0xA1,
555         0x7F,
556         0xC4,
557         0x70,
558         0x56,
559         0x70,
560         0xE8,
561         0x20,
562         0x10,
563         0x18,
564         0x8F,
565         0x2E,
566         0x60,
567         0x07,
568         0xE7,
569         0x68,
570         0x1A,
571         0x82,
572         0x5D,
573         0x32,
574         0xA2,
575     };
576 
577     return get_dh_from_pg(libctx, "DH", dh1024_p, sizeof(dh1024_p),
578         dh1024_g, sizeof(dh1024_g), NULL, 0);
579 }
580 
get_dh2048(OSSL_LIB_CTX * libctx)581 EVP_PKEY *get_dh2048(OSSL_LIB_CTX *libctx)
582 {
583     BIGNUM *p = NULL, *g = NULL;
584     EVP_PKEY *dhpkey = NULL;
585 
586     g = BN_new();
587     if (g == NULL || !BN_set_word(g, 2))
588         goto err;
589 
590     p = BN_get_rfc3526_prime_2048(NULL);
591     if (p == NULL)
592         goto err;
593 
594     dhpkey = get_dh_from_pg_bn(libctx, "DH", p, g, NULL);
595 
596 err:
597     BN_free(p);
598     BN_free(g);
599     return dhpkey;
600 }
601 
get_dh4096(OSSL_LIB_CTX * libctx)602 EVP_PKEY *get_dh4096(OSSL_LIB_CTX *libctx)
603 {
604     BIGNUM *p = NULL, *g = NULL;
605     EVP_PKEY *dhpkey = NULL;
606 
607     g = BN_new();
608     if (g == NULL || !BN_set_word(g, 2))
609         goto err;
610 
611     p = BN_get_rfc3526_prime_4096(NULL);
612     if (p == NULL)
613         goto err;
614 
615     dhpkey = get_dh_from_pg_bn(libctx, "DH", p, g, NULL);
616 
617 err:
618     BN_free(p);
619     BN_free(g);
620     return dhpkey;
621 }
622 
623 #endif
624