summaryrefslogtreecommitdiffstats
path: root/sys/geom
diff options
context:
space:
mode:
Diffstat (limited to 'sys/geom')
-rw-r--r--sys/geom/eli/g_eli.h7
-rw-r--r--sys/geom/eli/g_eli_crypto.c15
2 files changed, 21 insertions, 1 deletions
diff --git a/sys/geom/eli/g_eli.h b/sys/geom/eli/g_eli.h
index 5460eea..8079c9d 100644
--- a/sys/geom/eli/g_eli.h
+++ b/sys/geom/eli/g_eli.h
@@ -286,6 +286,8 @@ g_eli_str2ealgo(const char *name)
return (CRYPTO_AES_CBC);
else if (strcasecmp("blowfish", name) == 0)
return (CRYPTO_BLF_CBC);
+ else if (strcasecmp("camellia", name) == 0)
+ return (CRYPTO_CAMELLIA_CBC);
else if (strcasecmp("3des", name) == 0)
return (CRYPTO_3DES_CBC);
return (CRYPTO_ALGORITHM_MIN - 1);
@@ -321,6 +323,8 @@ g_eli_algo2str(u_int algo)
return ("AES-CBC");
case CRYPTO_BLF_CBC:
return ("Blowfish-CBC");
+ case CRYPTO_CAMELLIA_CBC:
+ return ("CAMELLIA-CBC");
case CRYPTO_3DES_CBC:
return ("3DES-CBC");
case CRYPTO_MD5_HMAC:
@@ -390,7 +394,8 @@ g_eli_keylen(u_int algo, u_int keylen)
keylen = 0;
}
return (keylen);
- case CRYPTO_AES_CBC:
+ case CRYPTO_AES_CBC: /* FALLTHROUGH */
+ case CRYPTO_CAMELLIA_CBC:
switch (keylen) {
case 0:
return (128);
diff --git a/sys/geom/eli/g_eli_crypto.c b/sys/geom/eli/g_eli_crypto.c
index b484f90..c26b367 100644
--- a/sys/geom/eli/g_eli_crypto.c
+++ b/sys/geom/eli/g_eli_crypto.c
@@ -158,6 +158,21 @@ g_eli_crypto_cipher(u_int algo, int enc, u_char *data, size_t datasize,
case CRYPTO_BLF_CBC:
type = EVP_bf_cbc();
break;
+ case CRYPTO_CAMELLIA_CBC:
+ switch (keysize) {
+ case 128:
+ type = EVP_camellia_128_cbc();
+ break;
+ case 192:
+ type = EVP_camellia_192_cbc();
+ break;
+ case 256:
+ type = EVP_camellia_256_cbc();
+ break;
+ default:
+ return (EINVAL);
+ }
+ break;
case CRYPTO_3DES_CBC:
type = EVP_des_ede3_cbc();
break;
OpenPOWER on IntegriCloud