名 前
encrypt, setkey, encrypt_r, setkey_r − 64 ビ ッ ト の メ ッ セ ー ジ を 暗 号 化 す る
書 式
#define
_XOPEN_SOURCE /* feature_test_macros(7) 参
照 */
#include <unistd.h>
void encrypt(char block[64], int edflag);
#define
_XOPEN_SOURCE /* feature_test_macros(7) 参
照 */
#include <stdlib.h>
void setkey(const char *key);
#define
_GNU_SOURCE /* feature_test_macros(7) 参 照
*/
#include <crypt.h>
void
setkey_r(const char *key, struct crypt_data
*data);
void encrypt_r(char *block, int
edflag, struct crypt_data
*data); こ れ ら
の 関 数 は −lcrypt
で リ ン ク す る
必 要 が あ る 。
説 明
こ れ ら の 関 数 は 、 64 ビ ッ ト の メ ッ セ ー ジ の 暗 号 化 と 復 号 化 を 行 う 。 setkey() 関 数 は encrypt() に よ っ て 使 わ れ る 暗 号 鍵 を 設 定 す る 。 こ こ で 使 わ れ る 引 き 数 key は 64 バ イ ト の 配 列 で あ り 、 各 バ イ ト は 数 値 1 ま た は 0 で あ る 。 n=8*i−1 に 対 す る バ イ ト key[n] は 無 視 さ れ る の で 、 有 効 な 暗 号 鍵 の 長 さ は 56 ビ ッ ト に な る 。
encrypt() 関 数 は 、 edflag が 0 の 場 合 は 暗 号 化 し 、 1 が 渡 さ れ た 場 合 は 復 号 化 す る と い う よ う に 、 渡 さ れ た バ ッ フ ァ ー を 変 更 す る 。 引 き 数 key と 同 様 に 、 block は エ ン コ ー ド さ れ た 実 際 の 値 を 表 現 す る ビ ッ ト の 配 列 で あ る 。 結 果 は こ の 同 じ 配 列 を 使 っ て 返 さ れ る 。 こ れ ら 2 つ の 関 数 は リ エ ン ト ラ ン ト (reentrant) で は な い 。 つ ま り 暗 号 鍵 デ ー タ は 静 的 な 領 域 に 保 存 さ れ る 。 関 数 setkey_r() と encrypt_r() は リ エ ン ト ラ ン ト な バ ー ジ ョ ン で あ る 。 こ れ ら の 関 数 は 暗 号 鍵 デ ー タ を 保 持 す る た め に 以 下 の よ う な 構 造 体 を 使 う 。
struct
crypt_data {
char keysched[16 * 8];
char sb0[32768];
char sb1[32768];
char sb2[32768];
char sb3[32768];
char crypt_3_buf[14];
char current_salt[2];
long int current_saltbits;
int direction;
int initialized; };
setkey_r() を 呼 び 出 す 前 に は 、 data−>initialized を 0 に 設 定 す る こ と 。
返 り 値
こ れ ら の 関 数 は 、 な に も 値 を 返 さ な い 。
エ ラ ー
上 記 の 関 数 を 呼 び 出 す 前 に errno を 0 に 設 定 す る こ と 。 成 功 し た 場 合 、 こ の 値 は 変 更 さ れ な い 。
ENOSYS |
(例 え ば 以 前 の ア メ リ カ 合 衆 国 輸 出 規 制 な ど に よ り ) こ の 関 数 が 提 供 さ れ て い な い 。 |
属 性
マ ル チ ス レ ッ デ ィ ン グ (pthreads(7) 参 照 ) 関 数 encrypt() と setkey() は ス レ ッ ド セ ー フ で は な い 。 関 数 encrypt_r() と setkey_r() は ス レ ッ ド セ ー フ で あ る 。
準 拠
関 数 encrypt() と setkey() は SVr4, SUSv2, and POSIX.1−2001 に 準 拠 す る 。 関 数 encrypt_r() と setkey_r() は GNU 拡 張 で あ る 。
注 意
glibc 2.2 で は 、 こ れ ら の 関 数 は DES ア ル ゴ リ ズ ム を 使 う 。
例
こ の 例 を glibc で コ ン パ イ ル す る に は libcrypt と リ ン ク す る 必 要 が あ る 。 実 際 に 動 作 さ せ る た め に は 、 配 列 key[] と txt[] に 有 効 な ビ ッ ト パ タ ー ン を 指 定 し な け れ ば な ら な い 。
#define
_XOPEN_SOURCE
#include <unistd.h>
#include <stdlib.h>
int
main(void)
{
char key[64]; /* bit pattern for key */
char txt[64]; /* bit pattern for messages */
setkey(key);
encrypt(txt, 0); /* encode */
encrypt(txt, 1); /* decode */ }
関 連 項 目
cbc_crypt(3), crypt(3), ecb_crypt(3)
こ の 文 書 に つ い て
こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。