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