Manpages

名 前

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/ に 書 か れ て い る 。