2 * Copyright (C) 1998-2001 D. Hugh Redelmeier
3 * Copyright (C) 2007-2009 Andreas Steffen - Hochschule fuer Technik Rapperswil
5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License as published by the
7 * Free Software Foundation; either version 2 of the License, or (at your
8 * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
10 * This program is distributed in the hope that it will be useful, but
11 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
12 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
18 #include "constants.h"
23 static struct encrypt_desc encrypt_desc_3des
=
25 algo_type
: IKE_ALG_ENCRYPT
,
26 algo_id
: OAKLEY_3DES_CBC
,
29 enc_blocksize
: DES_BLOCK_SIZE
,
30 keydeflen
: DES_BLOCK_SIZE
* 3 * BITS_PER_BYTE
,
31 keyminlen
: DES_BLOCK_SIZE
* 3 * BITS_PER_BYTE
,
32 keymaxlen
: DES_BLOCK_SIZE
* 3 * BITS_PER_BYTE
,
35 #define AES_KEY_MIN_LEN 128
36 #define AES_KEY_DEF_LEN 128
37 #define AES_KEY_MAX_LEN 256
39 static struct encrypt_desc encrypt_desc_aes
=
41 algo_type
: IKE_ALG_ENCRYPT
,
42 algo_id
: OAKLEY_AES_CBC
,
45 enc_blocksize
: AES_BLOCK_SIZE
,
46 keyminlen
: AES_KEY_MIN_LEN
,
47 keydeflen
: AES_KEY_DEF_LEN
,
48 keymaxlen
: AES_KEY_MAX_LEN
,
51 #define CAMELLIA_KEY_MIN_LEN 128
52 #define CAMELLIA_KEY_DEF_LEN 128
53 #define CAMELLIA_KEY_MAX_LEN 256
55 static struct encrypt_desc encrypt_desc_camellia
=
57 algo_type
: IKE_ALG_ENCRYPT
,
58 algo_id
: OAKLEY_CAMELLIA_CBC
,
61 enc_blocksize
: CAMELLIA_BLOCK_SIZE
,
62 keyminlen
: CAMELLIA_KEY_MIN_LEN
,
63 keydeflen
: CAMELLIA_KEY_DEF_LEN
,
64 keymaxlen
: CAMELLIA_KEY_MAX_LEN
,
67 #define BLOWFISH_KEY_MIN_LEN 128
68 #define BLOWFISH_KEY_MAX_LEN 448
70 static struct encrypt_desc encrypt_desc_blowfish
=
72 algo_type
: IKE_ALG_ENCRYPT
,
73 algo_id
: OAKLEY_BLOWFISH_CBC
,
76 enc_blocksize
: BLOWFISH_BLOCK_SIZE
,
77 keyminlen
: BLOWFISH_KEY_MIN_LEN
,
78 keydeflen
: BLOWFISH_KEY_MIN_LEN
,
79 keymaxlen
: BLOWFISH_KEY_MAX_LEN
,
82 #define SERPENT_KEY_MIN_LEN 128
83 #define SERPENT_KEY_DEF_LEN 128
84 #define SERPENT_KEY_MAX_LEN 256
86 static struct encrypt_desc encrypt_desc_serpent
=
88 algo_type
: IKE_ALG_ENCRYPT
,
89 algo_id
: OAKLEY_SERPENT_CBC
,
92 enc_blocksize
: SERPENT_BLOCK_SIZE
,
93 keyminlen
: SERPENT_KEY_MIN_LEN
,
94 keydeflen
: SERPENT_KEY_DEF_LEN
,
95 keymaxlen
: SERPENT_KEY_MAX_LEN
,
98 #define TWOFISH_KEY_MIN_LEN 128
99 #define TWOFISH_KEY_DEF_LEN 128
100 #define TWOFISH_KEY_MAX_LEN 256
102 static struct encrypt_desc encrypt_desc_twofish
=
104 algo_type
: IKE_ALG_ENCRYPT
,
105 algo_id
: OAKLEY_TWOFISH_CBC
,
108 enc_blocksize
: TWOFISH_BLOCK_SIZE
,
109 keydeflen
: TWOFISH_KEY_MIN_LEN
,
110 keyminlen
: TWOFISH_KEY_DEF_LEN
,
111 keymaxlen
: TWOFISH_KEY_MAX_LEN
,
114 static struct encrypt_desc encrypt_desc_twofish_ssh
=
116 algo_type
: IKE_ALG_ENCRYPT
,
117 algo_id
: OAKLEY_TWOFISH_CBC_SSH
,
120 enc_blocksize
: TWOFISH_BLOCK_SIZE
,
121 keydeflen
: TWOFISH_KEY_MIN_LEN
,
122 keyminlen
: TWOFISH_KEY_DEF_LEN
,
123 keymaxlen
: TWOFISH_KEY_MAX_LEN
,
126 static struct hash_desc hash_desc_md5
=
128 algo_type
: IKE_ALG_HASH
,
131 hash_digest_size
: HASH_SIZE_MD5
,
134 static struct hash_desc hash_desc_sha1
=
136 algo_type
: IKE_ALG_HASH
,
139 hash_digest_size
: HASH_SIZE_SHA1
,
142 static struct hash_desc hash_desc_sha2_256
= {
143 algo_type
: IKE_ALG_HASH
,
144 algo_id
: OAKLEY_SHA2_256
,
146 hash_digest_size
: HASH_SIZE_SHA256
,
149 static struct hash_desc hash_desc_sha2_384
= {
150 algo_type
: IKE_ALG_HASH
,
151 algo_id
: OAKLEY_SHA2_384
,
153 hash_digest_size
: HASH_SIZE_SHA384
,
156 static struct hash_desc hash_desc_sha2_512
= {
157 algo_type
: IKE_ALG_HASH
,
158 algo_id
: OAKLEY_SHA2_512
,
160 hash_digest_size
: HASH_SIZE_SHA512
,
163 const struct dh_desc unset_group
= {
164 algo_type
: IKE_ALG_DH_GROUP
,
170 static struct dh_desc dh_desc_modp_1024
= {
171 algo_type
: IKE_ALG_DH_GROUP
,
172 algo_id
: MODP_1024_BIT
,
174 ke_size
: 1024 / BITS_PER_BYTE
177 static struct dh_desc dh_desc_modp_1536
= {
178 algo_type
: IKE_ALG_DH_GROUP
,
179 algo_id
: MODP_1536_BIT
,
181 ke_size
: 1536 / BITS_PER_BYTE
184 static struct dh_desc dh_desc_modp_2048
= {
185 algo_type
: IKE_ALG_DH_GROUP
,
186 algo_id
: MODP_2048_BIT
,
188 ke_size
: 2048 / BITS_PER_BYTE
191 static struct dh_desc dh_desc_modp_3072
= {
192 algo_type
: IKE_ALG_DH_GROUP
,
193 algo_id
: MODP_3072_BIT
,
195 ke_size
: 3072 / BITS_PER_BYTE
198 static struct dh_desc dh_desc_modp_4096
= {
199 algo_type
: IKE_ALG_DH_GROUP
,
200 algo_id
: MODP_4096_BIT
,
202 ke_size
: 4096 / BITS_PER_BYTE
205 static struct dh_desc dh_desc_modp_6144
= {
206 algo_type
: IKE_ALG_DH_GROUP
,
207 algo_id
: MODP_6144_BIT
,
209 ke_size
: 6144 / BITS_PER_BYTE
212 static struct dh_desc dh_desc_modp_8192
= {
213 algo_type
: IKE_ALG_DH_GROUP
,
214 algo_id
: MODP_8192_BIT
,
216 ke_size
: 8192 / BITS_PER_BYTE
219 static struct dh_desc dh_desc_ecp_256
= {
220 algo_type
: IKE_ALG_DH_GROUP
,
221 algo_id
: ECP_256_BIT
,
223 ke_size
: 2*256 / BITS_PER_BYTE
226 static struct dh_desc dh_desc_ecp_384
= {
227 algo_type
: IKE_ALG_DH_GROUP
,
228 algo_id
: ECP_384_BIT
,
230 ke_size
: 2*384 / BITS_PER_BYTE
233 static struct dh_desc dh_desc_ecp_521
= {
234 algo_type
: IKE_ALG_DH_GROUP
,
235 algo_id
: ECP_521_BIT
,
237 ke_size
: 2*528 / BITS_PER_BYTE
240 static struct dh_desc dh_desc_ecp_192
= {
241 algo_type
: IKE_ALG_DH_GROUP
,
242 algo_id
: ECP_192_BIT
,
244 ke_size
: 2*192 / BITS_PER_BYTE
247 static struct dh_desc dh_desc_ecp_224
= {
248 algo_type
: IKE_ALG_DH_GROUP
,
249 algo_id
: ECP_224_BIT
,
251 ke_size
: 2*224 / BITS_PER_BYTE
254 bool init_crypto(void)
256 enumerator_t
*enumerator
;
257 encryption_algorithm_t encryption_alg
;
258 hash_algorithm_t hash_alg
;
259 diffie_hellman_group_t dh_group
;
263 enumerator
= lib
->crypto
->create_hasher_enumerator(lib
->crypto
);
264 while (enumerator
->enumerate(enumerator
, &hash_alg
))
266 const struct hash_desc
*desc
;
271 desc
= &hash_desc_sha1
;
275 desc
= &hash_desc_sha2_256
;
278 desc
= &hash_desc_sha2_384
;
281 desc
= &hash_desc_sha2_512
;
284 desc
= &hash_desc_md5
;
290 ike_alg_add((struct ike_alg
*)desc
);
292 enumerator
->destroy(enumerator
);
294 if (no_sha1
|| no_md5
)
296 plog("pluto cannot run without a %s%s%s hasher",
297 (no_sha1
) ?
"SHA-1" : "",
298 (no_sha1
&& no_md5
) ?
" and " : "",
299 (no_md5
) ?
"MD5" : "");
303 enumerator
= lib
->crypto
->create_crypter_enumerator(lib
->crypto
);
304 while (enumerator
->enumerate(enumerator
, &encryption_alg
))
306 const struct encrypt_desc
*desc
;
308 switch (encryption_alg
)
311 desc
= &encrypt_desc_3des
;
314 desc
= &encrypt_desc_blowfish
;
317 desc
= &encrypt_desc_aes
;
319 case ENCR_CAMELLIA_CBC
:
320 desc
= &encrypt_desc_camellia
;
322 case ENCR_TWOFISH_CBC
:
323 desc
= &encrypt_desc_twofish
;
324 ike_alg_add((struct ike_alg
*)&encrypt_desc_twofish_ssh
);
326 case ENCR_SERPENT_CBC
:
327 desc
= &encrypt_desc_serpent
;
332 ike_alg_add((struct ike_alg
*)desc
);
334 enumerator
->destroy(enumerator
);
336 enumerator
= lib
->crypto
->create_dh_enumerator(lib
->crypto
);
337 while (enumerator
->enumerate(enumerator
, &dh_group
))
339 const struct dh_desc
*desc
;
344 desc
= &dh_desc_modp_1024
;
347 desc
= &dh_desc_modp_1536
;
350 desc
= &dh_desc_modp_2048
;
353 desc
= &dh_desc_modp_3072
;
356 desc
= &dh_desc_modp_4096
;
359 desc
= &dh_desc_modp_6144
;
362 desc
= &dh_desc_modp_8192
;
365 desc
= &dh_desc_ecp_256
;
368 desc
= &dh_desc_ecp_384
;
371 desc
= &dh_desc_ecp_521
;
374 desc
= &dh_desc_ecp_192
;
377 desc
= &dh_desc_ecp_224
;
382 ike_alg_add((struct ike_alg
*)desc
);
384 enumerator
->destroy(enumerator
);
388 void free_crypto(void)
390 /* currently nothing to do */
394 * Converts IKEv1 encryption algorithm name to crypter name
396 encryption_algorithm_t
oakley_to_encryption_algorithm(int alg
)
402 case OAKLEY_IDEA_CBC
:
404 case OAKLEY_BLOWFISH_CBC
:
405 return ENCR_BLOWFISH
;
406 case OAKLEY_RC5_R16_B64_CBC
:
408 case OAKLEY_3DES_CBC
:
410 case OAKLEY_CAST_CBC
:
414 case OAKLEY_CAMELLIA_CBC
:
415 return ENCR_CAMELLIA_CBC
;
416 case OAKLEY_SERPENT_CBC
:
417 return ENCR_SERPENT_CBC
;
418 case OAKLEY_TWOFISH_CBC
:
419 case OAKLEY_TWOFISH_CBC_SSH
:
420 return ENCR_TWOFISH_CBC
;
422 return ENCR_UNDEFINED
;
427 * Converts IKEv1 hash algorithm name to hasher name
429 hash_algorithm_t
oakley_to_hash_algorithm(int alg
)
437 case OAKLEY_SHA2_256
:
439 case OAKLEY_SHA2_384
:
441 case OAKLEY_SHA2_512
:
449 * Converts IKEv1 hash algorithm name to IKEv2 prf name
451 pseudo_random_function_t
oakley_to_prf(int alg
)
458 return PRF_HMAC_SHA1
;
459 case OAKLEY_SHA2_256
:
460 return PRF_HMAC_SHA2_256
;
461 case OAKLEY_SHA2_384
:
462 return PRF_HMAC_SHA2_384
;
463 case OAKLEY_SHA2_512
:
464 return PRF_HMAC_SHA2_512
;
466 return PRF_UNDEFINED
;
471 * Maps IKEv1 authentication method to IKEv2 signature scheme
473 signature_scheme_t
oakley_to_signature_scheme(int method
)
480 return SIGN_RSA_EMSA_PKCS1_NULL
;
481 case OAKLEY_ECDSA_256
:
482 case OAKLEY_ECDSA_384
:
483 case OAKLEY_ECDSA_521
:
484 return SIGN_ECDSA_WITH_NULL
;
491 * Converts IKEv2 encryption to IKEv1 encryption algorithm
493 int oakley_from_encryption_algorithm(encryption_algorithm_t alg
)
498 return OAKLEY_DES_CBC
;
500 return OAKLEY_3DES_CBC
;
502 return OAKLEY_RC5_R16_B64_CBC
;
504 return OAKLEY_IDEA_CBC
;
506 return OAKLEY_CAST_CBC
;
508 return OAKLEY_BLOWFISH_CBC
;
510 return OAKLEY_AES_CBC
;
511 case ENCR_CAMELLIA_CBC
:
512 return OAKLEY_CAMELLIA_CBC
;
513 case ENCR_SERPENT_CBC
:
514 return OAKLEY_SERPENT_CBC
;
515 case ENCR_TWOFISH_CBC
:
516 return OAKLEY_TWOFISH_CBC
;
523 * Converts IKEv2 integrity to IKEv1 hash algorithm
525 int oakley_from_integrity_algorithm(integrity_algorithm_t alg
)
529 case AUTH_HMAC_MD5_96
:
531 case AUTH_HMAC_SHA1_96
:
533 case AUTH_HMAC_SHA2_256_128
:
534 return OAKLEY_SHA2_256
;
535 case AUTH_HMAC_SHA2_384_192
:
536 return OAKLEY_SHA2_384
;
537 case AUTH_HMAC_SHA2_512_256
:
538 return OAKLEY_SHA2_512
;
545 * Converts IKEv2 encryption to IKEv1 ESP encryption algorithm
547 int esp_from_encryption_algorithm(encryption_algorithm_t alg
)
569 case ENCR_AES_CCM_ICV8
:
570 return ESP_AES_CCM_8
;
571 case ENCR_AES_CCM_ICV12
:
572 return ESP_AES_CCM_12
;
573 case ENCR_AES_CCM_ICV16
:
574 return ESP_AES_CCM_16
;
575 case ENCR_AES_GCM_ICV8
:
576 return ESP_AES_GCM_8
;
577 case ENCR_AES_GCM_ICV12
:
578 return ESP_AES_GCM_12
;
579 case ENCR_AES_GCM_ICV16
:
580 return ESP_AES_GCM_16
;
581 case ENCR_CAMELLIA_CBC
:
583 case ENCR_NULL_AUTH_AES_GMAC
:
585 case ENCR_SERPENT_CBC
:
587 case ENCR_TWOFISH_CBC
:
595 * Converts IKEv2 integrity to IKEv1 ESP authentication algorithm
597 int esp_from_integrity_algorithm(integrity_algorithm_t alg
)
601 case AUTH_HMAC_MD5_96
:
602 return AUTH_ALGORITHM_HMAC_MD5
;
603 case AUTH_HMAC_SHA1_96
:
604 return AUTH_ALGORITHM_HMAC_SHA1
;
605 case AUTH_AES_XCBC_96
:
606 return AUTH_ALGORITHM_AES_XCBC_MAC
;
607 case AUTH_HMAC_SHA2_256_96
:
608 return AUTH_ALGORITHM_HMAC_SHA2_256_96
;
609 case AUTH_HMAC_SHA2_256_128
:
610 return AUTH_ALGORITHM_HMAC_SHA2_256
;
611 case AUTH_HMAC_SHA2_384_192
:
612 return AUTH_ALGORITHM_HMAC_SHA2_384
;
613 case AUTH_HMAC_SHA2_512_256
:
614 return AUTH_ALGORITHM_HMAC_SHA2_512
;
615 case AUTH_AES_128_GMAC
:
616 return AUTH_ALGORITHM_AES_128_GMAC
;
617 case AUTH_AES_192_GMAC
:
618 return AUTH_ALGORITHM_AES_192_GMAC
;
619 case AUTH_AES_256_GMAC
:
620 return AUTH_ALGORITHM_AES_256_GMAC
;