柳澤です。
NTTと三菱電機が作った国産ブロック暗号であるCamelliaが
currentのカーネルで使えるようになっていたのに触発されて
geli(8)でCamelliaを使えるようにするpatchを書いてみました。
そこで質問なのですが、こんなちょっとしたpatchを作って
FreeBSD本体に入れて欲しい場合は誰に頼めば良いのでしょうか。
教えて頂ければ幸いです。
このパッチは今日の0時頃のcurrentに対して作りました。
使うにはpatchを当てた後にgeliのカーネルモジュールと
sbin/geonの再コンパイルが必要になります。
使ってみた感想も歓迎します。
# 羅馬は1日にしてならずと言いますが、
# 1日もかけずできちゃいました。 (^^;
# 阿呆みたいに簡単なのでもう誰か作っているかも知れないですね。
# random(4)のyarrowアルゴリズムでCamelliaを使おうともしましたが、
# こちらはAESべったりなのでやりにくいです。
--
-------------------------------------------------------
Yoshisato YANAGISAWA
<[メールアドレス保護]>
Dept. of Mathematical and Computing Sciences,
Graduate School of Information Science and Engineering,
Tokyo Institute of Technology.
/* If you are an *BSD user, let's join http://bsdstats.org/ */
diff -ruN src.bak/sbin/geom/class/eli/geli.8 src/sbin/geom/class/eli/geli.8
--- src.bak/sbin/geom/class/eli/geli.8 2007-03-05 21:39:49.000000000 +0900
+++ src/sbin/geom/class/eli/geli.8 2007-06-16 13:48:37.000000000 +0900
@@ -146,7 +146,8 @@
.It
Supports many cryptographic algorithms (currently
.Nm AES ,
-.Nm Blowfish
+.Nm Blowfish ,
+.Nm Camellia
and
.Nm 3DES ) .
.It
@@ -227,7 +228,8 @@
Encryption algorithm to use.
Currently supported algorithms are:
.Nm AES ,
-.Nm Blowfish
+.Nm Blowfish ,
+.Nm Camellia
and
.Nm 3DES .
The default is
@@ -260,7 +262,9 @@
128 for
.Nm AES ,
128 for
-.Nm Blowfish
+.Nm Blowfish ,
+128 for
+.Nm Camellia
and 192 for
.Nm 3DES .
.It Fl s Ar sectorsize
diff -ruN src.bak/sys/geom/eli/g_eli.h src/sys/geom/eli/g_eli.h
--- src.bak/sys/geom/eli/g_eli.h 2006-09-16 19:43:17.000000000 +0900
+++ src/sys/geom/eli/g_eli.h 2007-06-16 13:50:23.000000000 +0900
@@ -286,6 +286,8 @@
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 @@
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 @@
keylen = 0;
}
return (keylen);
- case CRYPTO_AES_CBC:
+ case CRYPTO_AES_CBC: /* FALLTHROUGH */
+ case CRYPTO_CAMELLIA_CBC:
switch (keylen) {
case 0:
return (128);
diff -ruN src.bak/sys/geom/eli/g_eli_crypto.c src/sys/geom/eli/g_eli_crypto.c
--- src.bak/sys/geom/eli/g_eli_crypto.c 2007-03-21 12:42:50.000000000 +0900
+++ src/sys/geom/eli/g_eli_crypto.c 2007-06-16 13:51:23.000000000 +0900
@@ -158,6 +158,21 @@
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;