JunkBox_Lib 1.10.1
|
Go to the source code of this file.
Functions | |
int | send_command_recv_ans (int sock, char *command, int tm, Buffer *key, EVP_CIPHER *cipher) |
Buffer | recv_mesg_until_end (int sock, int tmm, Buffer *key, EVP_CIPHER *cipher) |
Buffer | send_algor_recv_spki (int sock, char *algor, int tm, Buffer *key, EVP_CIPHER *cipher) |
int | send_spki_recv_ans (int sock, Buffer mkey, int tm, Buffer *key, EVP_CIPHER *cipher) |
int | check_auth (Buffer ahost, int aport, Buffer userid, Buffer passwd, int chmod, int keyex, int cryptm, char *cfn, int cont) |
int | start_CRYPT_transfer (int sock, int keyex, int cryptm, Buffer ipaddr, char *cfn, int tm, Buffer *shdkey, EVP_CIPHER **cipher) |
int | stop_CRYPT_transfer (int sock, int tm, Buffer *shdkey, EVP_CIPHER *cipher) |
int check_auth | ( | Buffer | ahost, |
int | aport, | ||
Buffer | userid, | ||
Buffer | passwd, | ||
int | chmode, | ||
int | keyex, | ||
int | cryptm, | ||
char * | cfn, | ||
int | cont ) |
認証サーバに接続し,認証を行なう.
keyex, cryptm が両方指定してある場合には暗号化通信が行なわれる. 暗号化通信を行ない,かつ cfn がNULLで無い場合は,サーバの確認を行う.
ahost | 認証ホストの名前. |
aport | 認証ホストのポート番号. |
userid | ユーザID |
passwd | パスワード |
chmode | チャレンジキー交換モード.OFF:チャレンジキーを交換しない.ON:チャレンジキーを交換する. 暗号化通信が行われない場合は,強制的にチャレンジキーを交換する(ONになる). |
keyex | 鍵交換アルゴリズム |
cryptm | 共有鍵暗号アルゴリズム |
cfn | 認証ホストの公開鍵が保存されたファイル.認証ホスト検証用.NULLの場合は検証しない. |
cont | 暗号合意,またはサーバ確認に失敗した場合に処理を継続するかどうか. TRUE:処理を続ける.FALSE:エラーを返す. |
0 | 正常終了. |
JBXL_ISNET_PASSWD_ERROR | ユーザ認証失敗(ユーザは存在するが,パスワードが一致しない) |
JBXL_ISNET_USER_ERROR | ユーザ認証失敗(ユーザが存在しない) |
JBXL_ISNET_CONNECT_ERROR | 認証サーバとの接続エラー |
JBXL_ISNET_START_ERROR | 認証サーバとの通信開始エラー (相手は認証サーバでない?) |
JBXL_ISNET_AGREE_ERROR | 暗号合意エラー(サーバ認証を含む) |
JBXL_ISNET_CHALLENGE_ERROR | チャレンジキー合意エラー |
Definition at line 207 of file isnet_client.c.
References buf, Buffer::buf, cat_Buffer(), cat_s2Buffer, clear_Buffer(), copy_s2Buffer, DEBUG_MODE, FALSE, free_Buffer(), free_EVP_CIPHER(), freeNull, get_ipaddr_byname(), init_Buffer(), JBXL_ARGS_ERROR, JBXL_ISNET_CHALLENGE_ERROR, JBXL_ISNET_CONNECT_ERROR, JBXL_ISNET_PASSWD_ERROR, JBXL_ISNET_START_ERROR, JBXL_ISNET_USER_ERROR, LBUF, make_Buffer(), make_Buffer_bystr, ON, PRINT_MESG, recv_mesg_until_end(), send_command_recv_ans(), socket_close(), start_CRYPT_transfer(), stop_CRYPT_transfer(), tcp_client_socket, TRUE, and x2crypt().
Buffer recv_mesg_until_end(int sock, int tm, Buffer* key, EVP_CIPHER* cipher)
非暗号化データの場合は "END" が送られて来るまで,メッセージを受信し, バッファに追加する(簡易バッファリング機能あり).
暗号化データの場合は,改行コード(\r\n)が来るまで受信する.
sock | サーバのソケット. |
tm | タイムアウト時間.秒単位. |
key | 暗号鍵 |
cipher | 暗号方式 |
Definition at line 77 of file isnet_client.c.
References buf, Buffer::buf, cat_Buffer(), clear_Buffer(), free_Buffer(), get_plain_sBuffer(), LBUF, make_Buffer(), RECVBUFSZ, strnrvscmp(), and tcp_recv_Buffer_wait().
Referenced by check_auth(), and send_algor_recv_spki().
Buffer send_algor_recv_spki(int sock, char* algor, int tm, Buffer* key, EVP_CIPHER* cipher)
サーバへ公開鍵暗号アルゴリズム algorを使用することを通知し,サーバから SPKIをもらう.
sock | サーバへのソケット |
algor | 使用アルゴリズム.現在サポートしているのは "DH" のみ. |
tm | タイムアウト(sec) |
key | 暗号鍵 |
cipher | 暗号方式 |
Definition at line 120 of file isnet_client.c.
References buf, Buffer::buf, cat_s2Buffer, decode_base64_Buffer(), free_Buffer(), get_line_Buffer(), init_Buffer(), make_Buffer_bystr, recv_mesg_until_end(), send_command_recv_ans(), and Buffer::state.
Referenced by start_CRYPT_transfer().
int send_command_recv_ans | ( | int | sock, |
char * | command, | ||
int | tm, | ||
Buffer * | key, | ||
EVP_CIPHER * | cipher ) |
int send_command_recv_ans(int sock, char* command, int tm, Buffer* key, EVP_CIPHER* cipher)
サーバにコマンド(\r\nを自動的に添付)を送り,"OK" か "ERR" の返答を待つ.
sock | サーバのソケット. |
command | サーバへ送るコマンド. |
tm | タイムアウト時間.秒単位. |
key | 暗号鍵 |
cipher | 暗号方式 |
0 | 正常終了 (サーバから "OK" を受信した) |
1以上 | エラー番号(サーバから "ERR"を受信した). |
JBXL_NET_RECV_ERROR | 通信エラー |
JBXL_ARGS_ERROR | コマンドが NULL. |
JBXL_ISNET_CMD_ERROR | サーバから "OK", "ERR" 以外のものを受信した. |
Definition at line 22 of file isnet_client.c.
References buf, Buffer::buf, cat_s2Buffer, chomp_Buffer(), copy_s2Buffer, DEBUG_MODE, free_Buffer(), get_command(), get_operand(), get_plain_sBuffer(), JBXL_ARGS_ERROR, JBXL_ISNET_CMD_ERROR, LNAME, make_Buffer(), PRINT_MESG, tcp_recv_Buffer_wait(), and tcp_send_crypt_sBuffer().
Referenced by check_auth(), send_algor_recv_spki(), send_spki_recv_ans(), start_CRYPT_transfer(), and stop_CRYPT_transfer().
int send_spki_recv_ans(int sock, Buffer mkey, int tm, Buffer* key, EVP_CIPHER* cipher)
サーバへ自分の SPKI(DER)を送信して,返答を待つ.
sock | サーバへのソケット |
mkey | 自分の SPKI (DER) |
tm | タイムアウト(sec) |
key | 暗号鍵 |
cipher | 暗号方式 |
0 | 正常終了 |
0以外 | サーバからのエラー番号 |
Definition at line 159 of file isnet_client.c.
References Buffer::buf, encode_base64_Buffer(), free_Buffer(), and send_command_recv_ans().
Referenced by start_CRYPT_transfer().
int start_CRYPT_transfer | ( | int | sock, |
int | keyex, | ||
int | cryptm, | ||
Buffer | ipaddr, | ||
char * | cfn, | ||
int | tm, | ||
Buffer * | shdkey, | ||
EVP_CIPHER ** | cipher ) |
サーバ側と暗号化通信を行うためのネゴシエーションを行う.
ネゴシエーションが成功した場合,この関数終了後から暗号化通信が始まる.
sock | 認証ホストへのソケット. | |
keyex | 鍵交換アルゴリズムを指定(現在の所,SSL_DH のみ). | |
cryptm | 共通鍵暗号のアルゴリズム | |
ipaddr | 認証ホストのIPアドレス.認証ホスト検証用. | |
cfn | 認証ホストの公開鍵が保存されたファイル.認証ホスト検証用.NULLの場合は検証しない. | |
tm | タイムアウト(sec) | |
[out] | shdkey | 共通鍵が返る. |
[out] | cipher | 暗号タイプが返る. |
0 | 成功.これ以後,暗号化による通信を行う. |
JBXL_ISNET_SERVER_ERROR | 認証ホストの検証エラー |
JBXL_ISNET_PUBKEYALG_ERROR | 知らない公開鍵暗号アルゴリズム |
JBXL_ISNET_CMNKEYALG_ERROR | 知らない共通鍵暗号アルゴリズム |
JBXL_ISNET_NULLANS_ERROR | サーバからの返答が NULL |
Definition at line 357 of file isnet_client.c.
References Buffer::buf, check_server_spki(), free_Buffer(), gen_CRYPT_SharedKey(), init_EVPAPI_Buffer(), JBXL_ISNET_DHKEY_ERROR, JBXL_ISNET_NULLANS_ERROR, JBXL_ISNET_PUBKEYALG_ERROR, JBXL_ISNET_SERVER_ERROR, PRINT_MESG, send_algor_recv_spki(), send_command_recv_ans(), and send_spki_recv_ans().
Referenced by check_auth().
int stop_CRYPT_transfer | ( | int | sock, |
int | tm, | ||
Buffer * | shdkey, | ||
EVP_CIPHER * | cipher ) |
int stop_CRYPT_transfer(int sock, int tm, Buffer* shdkey, EVP_CIPHER* cipher)
クライアント側での暗号化通信終了処理.
サーバに暗号使用終了を伝え,自分も使用を終了する.
sock | サーバへのソケット |
tm | タイムアウト時間(sec) |
shdkey | 共通鍵 |
cipher | 暗号タイプが返る. |
0 | 正常終了 (サーバから"OK"を受信した) |
1以上 | エラー番号(サーバから"ERR"を受信した). |
負数 | エラー |
Definition at line 436 of file isnet_client.c.
References send_command_recv_ans().
Referenced by check_auth().