Added support for Camellia cipher to xcbc

This commit is contained in:
Martin Willi
2010-08-13 17:11:54 +02:00
parent c7776e0aa8
commit c03b0d7e6b
4 changed files with 18 additions and 4 deletions
+3
View File
@@ -195,6 +195,9 @@ static bool derive_ike_keys(private_keymat_t *this, proposal_t *proposal,
/* while rfc4434 defines variable keys for AES-XCBC, rfc3664 does
* not and therefore fixed key semantics apply to XCBC for key
* derivation. */
case PRF_CAMELLIA128_XCBC:
/* draft-kanno-ipsecme-camellia-xcbc refers to rfc 4434, we
* assume fixed key length. */
key_size = this->prf->get_key_size(this->prf)/2;
nonce_i.len = min(nonce_i.len, key_size);
nonce_r.len = min(nonce_r.len, key_size);
+8 -4
View File
@@ -36,9 +36,9 @@ METHOD(plugin_t, destroy, void,
private_xcbc_plugin_t *this)
{
lib->crypto->remove_prf(lib->crypto,
(prf_constructor_t)xcbc_prf_create);
(prf_constructor_t)xcbc_prf_create);
lib->crypto->remove_signer(lib->crypto,
(signer_constructor_t)xcbc_signer_create);
(signer_constructor_t)xcbc_signer_create);
free(this);
}
@@ -54,9 +54,13 @@ plugin_t *xcbc_plugin_create()
);
lib->crypto->add_prf(lib->crypto, PRF_AES128_XCBC,
(prf_constructor_t)xcbc_prf_create);
(prf_constructor_t)xcbc_prf_create);
lib->crypto->add_prf(lib->crypto, PRF_CAMELLIA128_XCBC,
(prf_constructor_t)xcbc_prf_create);
lib->crypto->add_signer(lib->crypto, AUTH_AES_XCBC_96,
(signer_constructor_t)xcbc_signer_create);
(signer_constructor_t)xcbc_signer_create);
lib->crypto->add_signer(lib->crypto, AUTH_CAMELLIA_XCBC_96,
(signer_constructor_t)xcbc_signer_create);
return &this->public.plugin;
}
@@ -94,6 +94,9 @@ xcbc_prf_t *xcbc_prf_create(pseudo_random_function_t algo)
case PRF_AES128_XCBC:
xcbc = xcbc_create(ENCR_AES_CBC, 16);
break;
case PRF_CAMELLIA128_XCBC:
xcbc = xcbc_create(ENCR_CAMELLIA_CBC, 16);
break;
default:
return NULL;
}
@@ -131,6 +131,10 @@ xcbc_signer_t *xcbc_signer_create(integrity_algorithm_t algo)
xcbc = xcbc_create(ENCR_AES_CBC, 16);
trunc = 12;
break;
case AUTH_CAMELLIA_XCBC_96:
xcbc = xcbc_create(ENCR_CAMELLIA_CBC, 16);
trunc = 12;
break;
default:
return NULL;
}