今年はアドベントカレンダーで BitVisor のID管理(以下、idman)を活用する記事を書きたいと思ってますが、そのまえに idman のソースコードを読む(見る)方法をご紹介したいと思います。すでに知っている方はごめんなさい。
はじめに
BitVisor の idman/ 以下のソースコードは doxygen 形式でコメントが書かれています。簡単にいうとプログラムのコメント欄にタグ付で引数の目的なんかを書いておくと html に整形して自動的に実装仕様書みたいなものを生成してくれる便利ツールです。目的は JavaDoc と同じですが多言語に対応しています。Doxygen の詳細は このへん を参照してください。
idman とは
BitVisor には idman/ と呼ばれるディレクトリがあり、そこにはハイパーバイザからカードリーダ経由でICカードにアクセスするライブラリが入っています。国家公務員身分証ICカードに BitVisor 専用AP(アプリまたはアプレット)を書き込んでおき、それを使って BitVisor 起動時のユーザ認証や IPsec VPN モジュールの鍵交換でのユーザ認証(リモートアクセスVPNの認証的なもの)をするのに使っていたようです。いわゆる公開鍵認証基盤(Public Key Infrastructure, PKI)アプリをつくるためのライブラリといえると思います。
Doxygen をつかう
まず doxygen をインストールします。graphviz は関数の呼び出しグラフを作るのに使います。
$ sudo yum -y install doxygen
$ sudo yum -y install graphviz graphviz-gd
最初に bitvisor/Doxyfile の以下の部分を修正してください。PROJECT_NAME のところに Secure VM って書いてあるのが懐かしいですが、html ページに表示されますから現在の名前に変えておきましょう。
PROJECT_NAME = BitVisor
INPUT = idman
RECURSIVE = YES
CREATE_SUBDIRS = YES
以下の3つは Graphhviz の呼び出しグラフ作成用
HAVE_DOT = YES
CALL_GRAPH = YES
CALLER_GRAPH = YES
bitvisor/Doxyfile のあるディレクトリで doxygen を実行します。グラフなしだと一瞬で html が作られるのですが、グラフがあると数分間待たないといけません。
$ doxygen
Generating namespace index...
Generating graph info page...
Generating directory documentation...
Generating index page...
Generating page index...
Generating module index...
Generating namespace index...
Generating namespace member index...
Generating annotated compound index...
Generating alphabetical compound index...
Generating hierarchical class index...
Generating member index...
Generating file index...
Generating file member index...
Generating example index...
finalizing index lists...
lookup cache used 1540/65536 hits=14109 misses=1613
finished...
html が出力されたのでウェブブラウザで documents/html/index.html を開きます。
ファイル名をクリックして関数のコメントなんかを眺めていきましょう。以下のようにコメントは短いですが十分にわかりやすく書けている感じがします(尊敬の遠い眼差し)。
以下のように関数ごとに CALL GRAPH と CALLER GRAPH が表示されます。
BitVisor の idman はもともと Linux のオープンソースのライブラリ pcsc-lite, pcsc-lite-ccid, libusb を参照して実装されています。ですから、BitVisor の pcsc, ccid, pkcs11 なども同じようにライブラリごとに独立していて、再利用しやすいように実装されているんじゃないかなと思います。どちらにしてもこのようなグラフは全体を理解するのに役立つと思います。
おわりに
ソースコードだけで読むのも味わい深いですが、BitVisor では ID管理(idman)だけちょっとビジネスっぽい雰囲気を醸し出していますから Doxygen でコメントを書いておいてもらってよかったですね。次の記事で idman 以下のライブラリの目的とか使い方を紹介できたらと思ってます。