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