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_modp_1024_160
= {
241 algo_type
: IKE_ALG_DH_GROUP
,
242 algo_id
: MODP_1024_160
,
244 ke_size
: 1024 / BITS_PER_BYTE
247 static struct dh_desc dh_desc_modp_2048_224
= {
248 algo_type
: IKE_ALG_DH_GROUP
,
249 algo_id
: MODP_2048_224
,
251 ke_size
: 2048 / BITS_PER_BYTE
254 static struct dh_desc dh_desc_modp_2048_256
= {
255 algo_type
: IKE_ALG_DH_GROUP
,
256 algo_id
: MODP_2048_256
,
258 ke_size
: 2048 / BITS_PER_BYTE
261 static struct dh_desc dh_desc_ecp_192
= {
262 algo_type
: IKE_ALG_DH_GROUP
,
263 algo_id
: ECP_192_BIT
,
265 ke_size
: 2*192 / BITS_PER_BYTE
268 static struct dh_desc dh_desc_ecp_224
= {
269 algo_type
: IKE_ALG_DH_GROUP
,
270 algo_id
: ECP_224_BIT
,
272 ke_size
: 2*224 / BITS_PER_BYTE
275 bool init_crypto(void)
277 enumerator_t
*enumerator
;
278 encryption_algorithm_t encryption_alg
;
279 hash_algorithm_t hash_alg
;
280 diffie_hellman_group_t dh_group
;
284 enumerator
= lib
->crypto
->create_hasher_enumerator(lib
->crypto
);
285 while (enumerator
->enumerate(enumerator
, &hash_alg
))
287 const struct hash_desc
*desc
;
292 desc
= &hash_desc_sha1
;
296 desc
= &hash_desc_sha2_256
;
299 desc
= &hash_desc_sha2_384
;
302 desc
= &hash_desc_sha2_512
;
305 desc
= &hash_desc_md5
;
311 ike_alg_add((struct ike_alg
*)desc
);
313 enumerator
->destroy(enumerator
);
315 if (no_sha1
|| no_md5
)
317 plog("pluto cannot run without a %s%s%s hasher",
318 (no_sha1
) ?
"SHA-1" : "",
319 (no_sha1
&& no_md5
) ?
" and " : "",
320 (no_md5
) ?
"MD5" : "");
324 enumerator
= lib
->crypto
->create_crypter_enumerator(lib
->crypto
);
325 while (enumerator
->enumerate(enumerator
, &encryption_alg
))
327 const struct encrypt_desc
*desc
;
329 switch (encryption_alg
)
332 desc
= &encrypt_desc_3des
;
335 desc
= &encrypt_desc_blowfish
;
338 desc
= &encrypt_desc_aes
;
340 case ENCR_CAMELLIA_CBC
:
341 desc
= &encrypt_desc_camellia
;
343 case ENCR_TWOFISH_CBC
:
344 desc
= &encrypt_desc_twofish
;
345 ike_alg_add((struct ike_alg
*)&encrypt_desc_twofish_ssh
);
347 case ENCR_SERPENT_CBC
:
348 desc
= &encrypt_desc_serpent
;
353 ike_alg_add((struct ike_alg
*)desc
);
355 enumerator
->destroy(enumerator
);
357 enumerator
= lib
->crypto
->create_dh_enumerator(lib
->crypto
);
358 while (enumerator
->enumerate(enumerator
, &dh_group
))
360 const struct dh_desc
*desc
;
365 desc
= &dh_desc_modp_1024
;
368 desc
= &dh_desc_modp_1536
;
371 desc
= &dh_desc_modp_2048
;
374 desc
= &dh_desc_modp_3072
;
377 desc
= &dh_desc_modp_4096
;
380 desc
= &dh_desc_modp_6144
;
383 desc
= &dh_desc_modp_8192
;
386 desc
= &dh_desc_ecp_256
;
389 desc
= &dh_desc_ecp_384
;
392 desc
= &dh_desc_ecp_521
;
395 desc
= &dh_desc_modp_1024_160
;
398 desc
= &dh_desc_modp_2048_224
;
401 desc
= &dh_desc_modp_2048_256
;
404 desc
= &dh_desc_ecp_192
;
407 desc
= &dh_desc_ecp_224
;
412 ike_alg_add((struct ike_alg
*)desc
);
414 enumerator
->destroy(enumerator
);
418 void free_crypto(void)
420 /* currently nothing to do */
424 * Converts IKEv1 encryption algorithm name to crypter name
426 encryption_algorithm_t
oakley_to_encryption_algorithm(int alg
)
432 case OAKLEY_IDEA_CBC
:
434 case OAKLEY_BLOWFISH_CBC
:
435 return ENCR_BLOWFISH
;
436 case OAKLEY_RC5_R16_B64_CBC
:
438 case OAKLEY_3DES_CBC
:
440 case OAKLEY_CAST_CBC
:
444 case OAKLEY_CAMELLIA_CBC
:
445 return ENCR_CAMELLIA_CBC
;
446 case OAKLEY_SERPENT_CBC
:
447 return ENCR_SERPENT_CBC
;
448 case OAKLEY_TWOFISH_CBC
:
449 case OAKLEY_TWOFISH_CBC_SSH
:
450 return ENCR_TWOFISH_CBC
;
452 return ENCR_UNDEFINED
;
457 * Converts IKEv1 hash algorithm name to hasher name
459 hash_algorithm_t
oakley_to_hash_algorithm(int alg
)
467 case OAKLEY_SHA2_256
:
469 case OAKLEY_SHA2_384
:
471 case OAKLEY_SHA2_512
:
479 * Converts IKEv1 hash algorithm name to IKEv2 prf name
481 pseudo_random_function_t
oakley_to_prf(int alg
)
488 return PRF_HMAC_SHA1
;
489 case OAKLEY_SHA2_256
:
490 return PRF_HMAC_SHA2_256
;
491 case OAKLEY_SHA2_384
:
492 return PRF_HMAC_SHA2_384
;
493 case OAKLEY_SHA2_512
:
494 return PRF_HMAC_SHA2_512
;
496 return PRF_UNDEFINED
;
501 * Maps IKEv1 authentication method to IKEv2 signature scheme
503 signature_scheme_t
oakley_to_signature_scheme(int method
)
510 return SIGN_RSA_EMSA_PKCS1_NULL
;
511 case OAKLEY_ECDSA_256
:
512 case OAKLEY_ECDSA_384
:
513 case OAKLEY_ECDSA_521
:
514 return SIGN_ECDSA_WITH_NULL
;
521 * Converts IKEv2 encryption to IKEv1 encryption algorithm
523 int oakley_from_encryption_algorithm(encryption_algorithm_t alg
)
528 return OAKLEY_DES_CBC
;
530 return OAKLEY_3DES_CBC
;
532 return OAKLEY_RC5_R16_B64_CBC
;
534 return OAKLEY_IDEA_CBC
;
536 return OAKLEY_CAST_CBC
;
538 return OAKLEY_BLOWFISH_CBC
;
540 return OAKLEY_AES_CBC
;
541 case ENCR_CAMELLIA_CBC
:
542 return OAKLEY_CAMELLIA_CBC
;
543 case ENCR_SERPENT_CBC
:
544 return OAKLEY_SERPENT_CBC
;
545 case ENCR_TWOFISH_CBC
:
546 return OAKLEY_TWOFISH_CBC
;
553 * Converts IKEv2 integrity to IKEv1 hash algorithm
555 int oakley_from_integrity_algorithm(integrity_algorithm_t alg
)
559 case AUTH_HMAC_MD5_96
:
561 case AUTH_HMAC_SHA1_96
:
563 case AUTH_HMAC_SHA2_256_128
:
564 return OAKLEY_SHA2_256
;
565 case AUTH_HMAC_SHA2_384_192
:
566 return OAKLEY_SHA2_384
;
567 case AUTH_HMAC_SHA2_512_256
:
568 return OAKLEY_SHA2_512
;
575 * Converts IKEv2 encryption to IKEv1 ESP encryption algorithm
577 int esp_from_encryption_algorithm(encryption_algorithm_t alg
)
599 case ENCR_AES_CCM_ICV8
:
600 return ESP_AES_CCM_8
;
601 case ENCR_AES_CCM_ICV12
:
602 return ESP_AES_CCM_12
;
603 case ENCR_AES_CCM_ICV16
:
604 return ESP_AES_CCM_16
;
605 case ENCR_AES_GCM_ICV8
:
606 return ESP_AES_GCM_8
;
607 case ENCR_AES_GCM_ICV12
:
608 return ESP_AES_GCM_12
;
609 case ENCR_AES_GCM_ICV16
:
610 return ESP_AES_GCM_16
;
611 case ENCR_CAMELLIA_CBC
:
613 case ENCR_NULL_AUTH_AES_GMAC
:
615 case ENCR_SERPENT_CBC
:
617 case ENCR_TWOFISH_CBC
:
625 * Converts IKEv2 integrity to IKEv1 ESP authentication algorithm
627 int esp_from_integrity_algorithm(integrity_algorithm_t alg
)
631 case AUTH_HMAC_MD5_96
:
632 return AUTH_ALGORITHM_HMAC_MD5
;
633 case AUTH_HMAC_SHA1_96
:
634 return AUTH_ALGORITHM_HMAC_SHA1
;
635 case AUTH_AES_XCBC_96
:
636 return AUTH_ALGORITHM_AES_XCBC_MAC
;
637 case AUTH_HMAC_SHA2_256_96
:
638 return AUTH_ALGORITHM_HMAC_SHA2_256_96
;
639 case AUTH_HMAC_SHA2_256_128
:
640 return AUTH_ALGORITHM_HMAC_SHA2_256
;
641 case AUTH_HMAC_SHA2_384_192
:
642 return AUTH_ALGORITHM_HMAC_SHA2_384
;
643 case AUTH_HMAC_SHA2_512_256
:
644 return AUTH_ALGORITHM_HMAC_SHA2_512
;
645 case AUTH_AES_128_GMAC
:
646 return AUTH_ALGORITHM_AES_128_GMAC
;
647 case AUTH_AES_192_GMAC
:
648 return AUTH_ALGORITHM_AES_192_GMAC
;
649 case AUTH_AES_256_GMAC
:
650 return AUTH_ALGORITHM_AES_256_GMAC
;