ecb_crypt()
と
cbc_crypt()
は、
NBS
DES
(Data Encryption Standard) を実現しています。これらのルーチンは、
crypt(3)
より高速で汎用的です。また、
DES
ハードウェアが用意されていれば、それも利用できます。
ecb_crypt()
は、
ECB
(Electronic Code Book) モードで暗号化します。
これはデータのブロックを独立に暗号化するものです。
cbc_crypt()
は、
CBC
(Cipher Block Chaining) モードで暗号化します。これは
連続するブロックを一つにつなげるものです。
CBC
モードは、ブロックの挿入、削除、置き換えに対する保護を行ないます。
また、通常のテキストにおける正規性は暗号テキストには現れません。
これらのルーチンを使用する方法は次のとおりです。最初のパラメータ
key,
は、パリティ付き 8 バイトの暗号化キーです。キーのパリティ (
DES
の場合、これは各バイトの下位ビットにあります) を設定するためには、
des_setparity()
を使用します。2 番めのパラメータ
data
には、暗号化または暗号解除されるデータが入っています。
3 番めのパラメータ
datalen
は、
data
の長さ (バイト単位) であり、これは 8 の倍数でなければなりません。
4 番めのパラメータ
mode
は、いくつかのものの論理和 (
OR'ing
) によって作成されます。暗号化の方向に関しては、
DES_ENCRYPT
か
DES_DECRYPT
どちらかの
論理和
を、ソフトウェア対ハードウェアの暗号化については、
DES_HW
か
DES_SW
のどちらかの
論理和
を取り、
DES_HW
が指定されており、しかもハードウェアがない場合は、
暗号化はソフトウェアで実行され、ルーチンは
DESERR_NOHWDEVICE
を返します。
cbc_crypt()
の場合、パラメータ
ivec
はチェイン作成用の 8 バイトの初期化ベクトルです。
これは戻り時に、次の初期化ベクトルへと更新されます。