1 // SPDX-License-Identifier: BSD-2-Clause
2 /* LibTomCrypt, modular cryptographic library -- Tom St Denis
3 *
4 * LibTomCrypt is a library that provides various cryptographic
5 * algorithms in a highly modular and flexible manner.
6 *
7 * The library is free for all purposes without any express
8 * guarantee it works.
9 */
10
11 #include "tomcrypt_private.h"
12
13 #ifdef LTC_MDH
14
15 /* This holds the key settings. ***MUST*** be organized by size from smallest to largest. */
16 const ltc_dh_set_type ltc_dh_sets[] = {
17 #ifdef LTC_DH768
18 { /* 768-bit MODP Group 1 - https://tools.ietf.org/html/rfc7296#appendix-B.1 */
19 96,
20 "DH-768",
21 "2",
22 "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1"
23 "29024E088A67CC74020BBEA63B139B22514A08798E3404DD"
24 "EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245"
25 "E485B576625E7EC6F44C42E9A63A3620FFFFFFFFFFFFFFFF"
26 },
27 #endif
28 #ifdef LTC_DH1024
29 { /* 1024-bit MODP Group 2 - https://tools.ietf.org/html/rfc7296#appendix-B.2 */
30 128,
31 "DH-1024",
32 "2",
33 "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1"
34 "29024E088A67CC74020BBEA63B139B22514A08798E3404DD"
35 "EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245"
36 "E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED"
37 "EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE65381"
38 "FFFFFFFFFFFFFFFF"
39 },
40 #endif
41 #ifdef LTC_DH1536
42 { /* 1536-bit MODP Group 5 - https://tools.ietf.org/html/rfc3526#section-2 */
43 192,
44 "DH-1536",
45 "2",
46 "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1"
47 "29024E088A67CC74020BBEA63B139B22514A08798E3404DD"
48 "EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245"
49 "E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED"
50 "EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D"
51 "C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F"
52 "83655D23DCA3AD961C62F356208552BB9ED529077096966D"
53 "670C354E4ABC9804F1746C08CA237327FFFFFFFFFFFFFFFF"
54 },
55 #endif
56 #ifdef LTC_DH2048
57 { /* 2048-bit MODP Group 14 - https://tools.ietf.org/html/rfc3526#section-3 */
58 256,
59 "DH-2048",
60 "2",
61 "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1"
62 "29024E088A67CC74020BBEA63B139B22514A08798E3404DD"
63 "EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245"
64 "E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED"
65 "EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D"
66 "C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F"
67 "83655D23DCA3AD961C62F356208552BB9ED529077096966D"
68 "670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B"
69 "E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9"
70 "DE2BCBF6955817183995497CEA956AE515D2261898FA0510"
71 "15728E5A8AACAA68FFFFFFFFFFFFFFFF"
72 },
73 #endif
74 #ifdef LTC_DH3072
75 { /* 3072-bit MODP Group 15 - https://tools.ietf.org/html/rfc3526#section-4 */
76 384,
77 "DH-3072",
78 "2",
79 "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1"
80 "29024E088A67CC74020BBEA63B139B22514A08798E3404DD"
81 "EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245"
82 "E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED"
83 "EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D"
84 "C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F"
85 "83655D23DCA3AD961C62F356208552BB9ED529077096966D"
86 "670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B"
87 "E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9"
88 "DE2BCBF6955817183995497CEA956AE515D2261898FA0510"
89 "15728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64"
90 "ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7"
91 "ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6B"
92 "F12FFA06D98A0864D87602733EC86A64521F2B18177B200C"
93 "BBE117577A615D6C770988C0BAD946E208E24FA074E5AB31"
94 "43DB5BFCE0FD108E4B82D120A93AD2CAFFFFFFFFFFFFFFFF"
95 },
96 #endif
97 #ifdef LTC_DH4096
98 { /* 4096-bit MODP Group 16 - https://tools.ietf.org/html/rfc3526#section-5 */
99 512,
100 "DH-4096",
101 "2",
102 "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1"
103 "29024E088A67CC74020BBEA63B139B22514A08798E3404DD"
104 "EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245"
105 "E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED"
106 "EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D"
107 "C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F"
108 "83655D23DCA3AD961C62F356208552BB9ED529077096966D"
109 "670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B"
110 "E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9"
111 "DE2BCBF6955817183995497CEA956AE515D2261898FA0510"
112 "15728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64"
113 "ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7"
114 "ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6B"
115 "F12FFA06D98A0864D87602733EC86A64521F2B18177B200C"
116 "BBE117577A615D6C770988C0BAD946E208E24FA074E5AB31"
117 "43DB5BFCE0FD108E4B82D120A92108011A723C12A787E6D7"
118 "88719A10BDBA5B2699C327186AF4E23C1A946834B6150BDA"
119 "2583E9CA2AD44CE8DBBBC2DB04DE8EF92E8EFC141FBECAA6"
120 "287C59474E6BC05D99B2964FA090C3A2233BA186515BE7ED"
121 "1F612970CEE2D7AFB81BDD762170481CD0069127D5B05AA9"
122 "93B4EA988D8FDDC186FFB7DC90A6C08F4DF435C934063199"
123 "FFFFFFFFFFFFFFFF"
124 },
125 #endif
126 #ifdef LTC_DH6144
127 { /* 6144-bit MODP Group 17 - https://tools.ietf.org/html/rfc3526#section-6 */
128 768,
129 "DH-6144",
130 "2",
131 "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1"
132 "29024E088A67CC74020BBEA63B139B22514A08798E3404DD"
133 "EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245"
134 "E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED"
135 "EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D"
136 "C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F"
137 "83655D23DCA3AD961C62F356208552BB9ED529077096966D"
138 "670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B"
139 "E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9"
140 "DE2BCBF6955817183995497CEA956AE515D2261898FA0510"
141 "15728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64"
142 "ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7"
143 "ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6B"
144 "F12FFA06D98A0864D87602733EC86A64521F2B18177B200C"
145 "BBE117577A615D6C770988C0BAD946E208E24FA074E5AB31"
146 "43DB5BFCE0FD108E4B82D120A92108011A723C12A787E6D7"
147 "88719A10BDBA5B2699C327186AF4E23C1A946834B6150BDA"
148 "2583E9CA2AD44CE8DBBBC2DB04DE8EF92E8EFC141FBECAA6"
149 "287C59474E6BC05D99B2964FA090C3A2233BA186515BE7ED"
150 "1F612970CEE2D7AFB81BDD762170481CD0069127D5B05AA9"
151 "93B4EA988D8FDDC186FFB7DC90A6C08F4DF435C934028492"
152 "36C3FAB4D27C7026C1D4DCB2602646DEC9751E763DBA37BD"
153 "F8FF9406AD9E530EE5DB382F413001AEB06A53ED9027D831"
154 "179727B0865A8918DA3EDBEBCF9B14ED44CE6CBACED4BB1B"
155 "DB7F1447E6CC254B332051512BD7AF426FB8F401378CD2BF"
156 "5983CA01C64B92ECF032EA15D1721D03F482D7CE6E74FEF6"
157 "D55E702F46980C82B5A84031900B1C9E59E7C97FBEC7E8F3"
158 "23A97A7E36CC88BE0F1D45B7FF585AC54BD407B22B4154AA"
159 "CC8F6D7EBF48E1D814CC5ED20F8037E0A79715EEF29BE328"
160 "06A1D58BB7C5DA76F550AA3D8A1FBFF0EB19CCB1A313D55C"
161 "DA56C9EC2EF29632387FE8D76E3C0468043E8F663F4860EE"
162 "12BF2D5B0B7474D6E694F91E6DCC4024FFFFFFFFFFFFFFFF"
163 },
164 #endif
165 #ifdef LTC_DH8192
166 { /* 8192-bit MODP Group 18 - https://tools.ietf.org/html/rfc3526#section-7 */
167 1024,
168 "DH-8192",
169 "2",
170 "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1"
171 "29024E088A67CC74020BBEA63B139B22514A08798E3404DD"
172 "EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245"
173 "E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED"
174 "EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D"
175 "C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F"
176 "83655D23DCA3AD961C62F356208552BB9ED529077096966D"
177 "670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B"
178 "E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9"
179 "DE2BCBF6955817183995497CEA956AE515D2261898FA0510"
180 "15728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64"
181 "ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7"
182 "ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6B"
183 "F12FFA06D98A0864D87602733EC86A64521F2B18177B200C"
184 "BBE117577A615D6C770988C0BAD946E208E24FA074E5AB31"
185 "43DB5BFCE0FD108E4B82D120A92108011A723C12A787E6D7"
186 "88719A10BDBA5B2699C327186AF4E23C1A946834B6150BDA"
187 "2583E9CA2AD44CE8DBBBC2DB04DE8EF92E8EFC141FBECAA6"
188 "287C59474E6BC05D99B2964FA090C3A2233BA186515BE7ED"
189 "1F612970CEE2D7AFB81BDD762170481CD0069127D5B05AA9"
190 "93B4EA988D8FDDC186FFB7DC90A6C08F4DF435C934028492"
191 "36C3FAB4D27C7026C1D4DCB2602646DEC9751E763DBA37BD"
192 "F8FF9406AD9E530EE5DB382F413001AEB06A53ED9027D831"
193 "179727B0865A8918DA3EDBEBCF9B14ED44CE6CBACED4BB1B"
194 "DB7F1447E6CC254B332051512BD7AF426FB8F401378CD2BF"
195 "5983CA01C64B92ECF032EA15D1721D03F482D7CE6E74FEF6"
196 "D55E702F46980C82B5A84031900B1C9E59E7C97FBEC7E8F3"
197 "23A97A7E36CC88BE0F1D45B7FF585AC54BD407B22B4154AA"
198 "CC8F6D7EBF48E1D814CC5ED20F8037E0A79715EEF29BE328"
199 "06A1D58BB7C5DA76F550AA3D8A1FBFF0EB19CCB1A313D55C"
200 "DA56C9EC2EF29632387FE8D76E3C0468043E8F663F4860EE"
201 "12BF2D5B0B7474D6E694F91E6DBE115974A3926F12FEE5E4"
202 "38777CB6A932DF8CD8BEC4D073B931BA3BC832B68D9DD300"
203 "741FA7BF8AFC47ED2576F6936BA424663AAB639C5AE4F568"
204 "3423B4742BF1C978238F16CBE39D652DE3FDB8BEFC848AD9"
205 "22222E04A4037C0713EB57A81A23F0C73473FC646CEA306B"
206 "4BCBC8862F8385DDFA9D4B7FA2C087E879683303ED5BDD3A"
207 "062B3CF5B3A278A66D2A13F83F44F82DDF310EE074AB6A36"
208 "4597E899A0255DC164F31CC50846851DF9AB48195DED7EA1"
209 "B1D510BD7EE74D73FAF36BC31ECFA268359046F4EB879F92"
210 "4009438B481C6CD7889A002ED5EE382BC9190DA6FC026E47"
211 "9558E4475677E9AA9E3050E2765694DFC81F56E880B96E71"
212 "60C980DD98EDD3DFFFFFFFFFFFFFFFFF"
213 },
214 #endif
215 {
216 0,
217 NULL,
218 NULL,
219 NULL
220 }
221 };
222
223 /**
224 Returns the DH group size (octets) for given key
225 @param key The DH key to get the size of
226 @return The group size in octets (0 on error)
227 */
dh_get_groupsize(const dh_key * key)228 int dh_get_groupsize(const dh_key *key)
229 {
230 if (key == NULL) return 0;
231 return mp_unsigned_bin_size(key->prime);
232 }
233
234 #endif /* LTC_MDH */
235
236 /* ref: $Format:%D$ */
237 /* git commit: $Format:%H$ */
238 /* commit time: $Format:%ai$ */
239