]>
git.ipfire.org Git - thirdparty/openssl.git/blob - test/helpers/predefined_dhparams.c
2 * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved.
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
10 #include <openssl/evp.h>
11 #include <openssl/core_names.h>
12 #include <openssl/param_build.h>
14 #include "predefined_dhparams.h"
18 static EVP_PKEY
*get_dh_from_pg_bn(OSSL_LIB_CTX
*libctx
, const char *type
,
19 BIGNUM
*p
, BIGNUM
*g
, BIGNUM
*q
)
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
;
26 if (pctx
== NULL
|| !EVP_PKEY_key_fromdata_init(pctx
))
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
)
33 && !OSSL_PARAM_BLD_push_BN(tmpl
, OSSL_PKEY_PARAM_FFC_Q
, q
)))
36 params
= OSSL_PARAM_BLD_to_param(tmpl
);
37 if (params
== NULL
|| !EVP_PKEY_fromdata(pctx
, &dhpkey
, params
))
41 EVP_PKEY_CTX_free(pctx
);
42 OSSL_PARAM_BLD_free_params(params
);
43 OSSL_PARAM_BLD_free(tmpl
);
47 static EVP_PKEY
*get_dh_from_pg(OSSL_LIB_CTX
*libctx
, const char *type
,
48 unsigned char *pdata
, size_t plen
,
49 unsigned char *gdata
, size_t glen
,
50 unsigned char *qdata
, size_t qlen
)
52 EVP_PKEY
*dhpkey
= NULL
;
53 BIGNUM
*p
= NULL
, *g
= NULL
, *q
= NULL
;
55 p
= BN_bin2bn(pdata
, plen
, NULL
);
56 g
= BN_bin2bn(gdata
, glen
, NULL
);
57 if (p
== NULL
|| g
== NULL
)
59 if (qdata
!= NULL
&& (q
= BN_bin2bn(qdata
, qlen
, NULL
)) == NULL
)
62 dhpkey
= get_dh_from_pg_bn(libctx
, type
, p
, g
, q
);
71 EVP_PKEY
*get_dh512(OSSL_LIB_CTX
*libctx
)
73 static unsigned char dh512_p
[] = {
74 0xCB, 0xC8, 0xE1, 0x86, 0xD0, 0x1F, 0x94, 0x17, 0xA6, 0x99, 0xF0, 0xC6,
75 0x1F, 0x0D, 0xAC, 0xB6, 0x25, 0x3E, 0x06, 0x39, 0xCA, 0x72, 0x04, 0xB0,
76 0x6E, 0xDA, 0xC0, 0x61, 0xE6, 0x7A, 0x77, 0x25, 0xE8, 0x3B, 0xB9, 0x5F,
77 0x9A, 0xB6, 0xB5, 0xFE, 0x99, 0x0B, 0xA1, 0x93, 0x4E, 0x35, 0x33, 0xB8,
78 0xE1, 0xF1, 0x13, 0x4F, 0x59, 0x1A, 0xD2, 0x57, 0xC0, 0x26, 0x21, 0x33,
79 0x02, 0xC5, 0xAE, 0x23,
81 static unsigned char dh512_g
[] = {
85 return get_dh_from_pg(libctx
, "DH", dh512_p
, sizeof(dh512_p
),
86 dh512_g
, sizeof(dh512_g
), NULL
, 0);
89 EVP_PKEY
*get_dhx512(OSSL_LIB_CTX
*libctx
)
91 static unsigned char dhx512_p
[] = {
92 0x00, 0xe8, 0x1a, 0xb7, 0x9a, 0x02, 0x65, 0x64, 0x94, 0x7b, 0xba, 0x09,
93 0x1c, 0x12, 0x27, 0x1e, 0xea, 0x89, 0x32, 0x64, 0x78, 0xf8, 0x1c, 0x78,
94 0x8e, 0x96, 0xc3, 0xc6, 0x9f, 0x41, 0x05, 0x41, 0x65, 0xae, 0xe3, 0x05,
95 0xea, 0x66, 0x21, 0xf7, 0x38, 0xb7, 0x2b, 0x32, 0x40, 0x5a, 0x14, 0x86,
96 0x51, 0x94, 0xb1, 0xcf, 0x01, 0xe3, 0x27, 0x28, 0xf6, 0x75, 0xa3, 0x15,
97 0xbb, 0x12, 0x4d, 0x99, 0xe7,
99 static unsigned char dhx512_g
[] = {
100 0x00, 0x91, 0xc1, 0x43, 0x6d, 0x0d, 0xb0, 0xa4, 0xde, 0x41, 0xb7, 0x93,
101 0xad, 0x51, 0x94, 0x1b, 0x43, 0xd8, 0x42, 0xf1, 0x5e, 0x46, 0x83, 0x5d,
102 0xf1, 0xd1, 0xf0, 0x41, 0x10, 0xd1, 0x1c, 0x5e, 0xad, 0x9b, 0x68, 0xb1,
103 0x6f, 0xf5, 0x8e, 0xaa, 0x6d, 0x71, 0x88, 0x37, 0xdf, 0x05, 0xf7, 0x6e,
104 0x7a, 0xb4, 0x25, 0x10, 0x6c, 0x7f, 0x38, 0xb4, 0xc8, 0xfc, 0xcc, 0x0c,
105 0x6a, 0x02, 0x08, 0x61, 0xf6,
107 static unsigned char dhx512_q
[] = {
108 0x00, 0xdd, 0xf6, 0x35, 0xad, 0xfa, 0x70, 0xc7, 0xe7, 0xa8, 0xf0, 0xe3,
109 0xda, 0x79, 0x34, 0x3f, 0x5b, 0xcf, 0x73, 0x82, 0x91,
112 return get_dh_from_pg(libctx
, "X9.42 DH",
113 dhx512_p
, sizeof(dhx512_p
),
114 dhx512_g
, sizeof(dhx512_g
),
115 dhx512_q
, sizeof(dhx512_q
));
118 EVP_PKEY
*get_dh1024dsa(OSSL_LIB_CTX
*libctx
)
120 static unsigned char dh1024_p
[] = {
121 0xC8, 0x00, 0xF7, 0x08, 0x07, 0x89, 0x4D, 0x90, 0x53, 0xF3, 0xD5, 0x00,
122 0x21, 0x1B, 0xF7, 0x31, 0xA6, 0xA2, 0xDA, 0x23, 0x9A, 0xC7, 0x87, 0x19,
123 0x3B, 0x47, 0xB6, 0x8C, 0x04, 0x6F, 0xFF, 0xC6, 0x9B, 0xB8, 0x65, 0xD2,
124 0xC2, 0x5F, 0x31, 0x83, 0x4A, 0xA7, 0x5F, 0x2F, 0x88, 0x38, 0xB6, 0x55,
125 0xCF, 0xD9, 0x87, 0x6D, 0x6F, 0x9F, 0xDA, 0xAC, 0xA6, 0x48, 0xAF, 0xFC,
126 0x33, 0x84, 0x37, 0x5B, 0x82, 0x4A, 0x31, 0x5D, 0xE7, 0xBD, 0x52, 0x97,
127 0xA1, 0x77, 0xBF, 0x10, 0x9E, 0x37, 0xEA, 0x64, 0xFA, 0xCA, 0x28, 0x8D,
128 0x9D, 0x3B, 0xD2, 0x6E, 0x09, 0x5C, 0x68, 0xC7, 0x45, 0x90, 0xFD, 0xBB,
129 0x70, 0xC9, 0x3A, 0xBB, 0xDF, 0xD4, 0x21, 0x0F, 0xC4, 0x6A, 0x3C, 0xF6,
130 0x61, 0xCF, 0x3F, 0xD6, 0x13, 0xF1, 0x5F, 0xBC, 0xCF, 0xBC, 0x26, 0x9E,
131 0xBC, 0x0B, 0xBD, 0xAB, 0x5D, 0xC9, 0x54, 0x39,
133 static unsigned char dh1024_g
[] = {
134 0x3B, 0x40, 0x86, 0xE7, 0xF3, 0x6C, 0xDE, 0x67, 0x1C, 0xCC, 0x80, 0x05,
135 0x5A, 0xDF, 0xFE, 0xBD, 0x20, 0x27, 0x74, 0x6C, 0x24, 0xC9, 0x03, 0xF3,
136 0xE1, 0x8D, 0xC3, 0x7D, 0x98, 0x27, 0x40, 0x08, 0xB8, 0x8C, 0x6A, 0xE9,
137 0xBB, 0x1A, 0x3A, 0xD6, 0x86, 0x83, 0x5E, 0x72, 0x41, 0xCE, 0x85, 0x3C,
138 0xD2, 0xB3, 0xFC, 0x13, 0xCE, 0x37, 0x81, 0x9E, 0x4C, 0x1C, 0x7B, 0x65,
139 0xD3, 0xE6, 0xA6, 0x00, 0xF5, 0x5A, 0x95, 0x43, 0x5E, 0x81, 0xCF, 0x60,
140 0xA2, 0x23, 0xFC, 0x36, 0xA7, 0x5D, 0x7A, 0x4C, 0x06, 0x91, 0x6E, 0xF6,
141 0x57, 0xEE, 0x36, 0xCB, 0x06, 0xEA, 0xF5, 0x3D, 0x95, 0x49, 0xCB, 0xA7,
142 0xDD, 0x81, 0xDF, 0x80, 0x09, 0x4A, 0x97, 0x4D, 0xA8, 0x22, 0x72, 0xA1,
143 0x7F, 0xC4, 0x70, 0x56, 0x70, 0xE8, 0x20, 0x10, 0x18, 0x8F, 0x2E, 0x60,
144 0x07, 0xE7, 0x68, 0x1A, 0x82, 0x5D, 0x32, 0xA2,
147 return get_dh_from_pg(libctx
, "DH", dh1024_p
, sizeof(dh1024_p
),
148 dh1024_g
, sizeof(dh1024_g
), NULL
, 0);
151 EVP_PKEY
*get_dh2048(OSSL_LIB_CTX
*libctx
)
153 BIGNUM
*p
= NULL
, *g
= NULL
;
154 EVP_PKEY
*dhpkey
= NULL
;
157 if (g
== NULL
|| !BN_set_word(g
, 2))
160 p
= BN_get_rfc3526_prime_2048(NULL
);
164 dhpkey
= get_dh_from_pg_bn(libctx
, "DH", p
, g
, NULL
);