■■■ 提供する API ■■■ Openssl の API の簡単なラッパーで,socket とほぼ同様のインターフェースを提供します. 具体的には,以下のデータ構造と関数を提供する C のライブラリです. 各関数は,名前から類推される通りの機能を提供します. struct opt_t { char *priv_key; char *password; char *certificate; char *ca_cert; }; void grid_initialize ( const struct opt_t *opt ); void grid_finalize ( void ); int grid_connect( int sockfd, const struct sockaddr *serv_addr, socklen_t addrlen ); int grid_bind ( int sockfd, struct sockaddr *my_addr, socklen_t addrlen ); int grid_listen ( int s, int backlog ); int grid_accept ( int s, struct sockaddr *addr, socklen_t *addrlen ); ssize_t grid_send ( int s, const void *buf, size_t len, int flags ); ssize_t grid_recv ( int s, void *buf, size_t len, int flags ); int grid_shutdown ( int s, int how ); /* Grid_xxx () functions are same as grid_xxx () functions except that * the Grid_xxx () functions abort when they fail. */ int Grid_connect( int sockfd, const struct sockaddr *serv_addr, socklen_t addrlen ); void Grid_bind ( int sockfd, struct sockaddr *my_addr, socklen_t addrlen ); void Grid_listen ( int s, int backlog ); int Grid_accept( int s, struct sockaddr *addr , socklen_t *addrlen ); size_t Grid_send( int s, const void *buf, size_t len, int flags ); size_t Grid_recv( int s, void *buf, size_t len, int flags ); /* conveninent functions for network programming */ int Socket ( int domain, int type, int protocol ); void Setsockopt_reuseaddr ( int s ); in_addr_t in_addr_of_hostname ( const char *name ); struct sockaddr_in create_inet_sockaddr ( in_addr_t in_addr, int port ); プロセスを立ち上げる時に,ユーザは - 自分の秘密鍵 - 秘密鍵のパスワード - 自分の証明書 (C) - C に署名した CA の証明書 を与えるようにします. ユーザから与えられた情報を元にコネクション確立時に認証を行います. 今現在は, 自分が指定された CA を X とすると, X 以外の CA によって署名された秘密鍵・証明書を使っている プロセスからの connect は拒否するようにしています. ■■■ ライブラリのビルド & インストール ■■■ > cvs -d :pserver:anonymous@oop7.is.s.u-tokyo.ac.jp:/roots/phoenix login Logging in to :pserver:anonymous@oop7.is.s.u-tokyo.ac.jp:2401/roots/phoenix CVS password: (空パスワード) > cvs -d :pserver:anonymous@oop7.is.s.u-tokyo.ac.jp:/roots/phoenix co libgrid > cd libgrid/ > ./configure -prefix=$INSTALL_PREFIX > make > make install ■■■ ライブラリの使用例 ■■■ Linux ならば > gcc -I$INSTALL_DIR/include -L$INSTALL_DIR/lib -lgrid -lssl foo.c -o foo などとすることで,コンパイルすることができます. 生成された実行ファイルを > LD_LIBRARY_PATH=$INSTALL_DIR/lib ./foo というように実行することができます. sample/sample.c にサンプルコードが置いてあります.