2005-07-21

ルーク、ソースを使え (Use the Soruce, Luke)  [by miyachi]

と古いSWネタですみません。BouncyCastleを使おうとするとどうしてもソースを見る必要があると言う意味でした。オープンソースの最大の利点はソースを見る事が出来ると言えるでしょう。これは使う時に非常に参考になります。

BouncyCastleのソースを追っていると何だかデジャブに陥ります。昔々遠い銀河の彼方では…じゃ無くて、昔々アップルのMacintosh向けの開発を始めたばかりの頃と重なって見えるのです。当時は開発環境はMPWでクラスライブラリとしてMacAppと言う物が提供されていました。Photoshopをはじめ古いマックのアプリのAbout画面には大抵MacAppを使っていると表記があったものです。

MPWはともかく、このMacAppは優れものでした。膨大な量のソースが提供され、最後の最後に低レベルのMacOSのAPIが呼ばれていたんです。MacAppのソースや説明を見る為の専用ブラウザ"MacApp Browser"も準備(SmallTalk風でした)されており、ノウハウの宝庫でした。何かやりたい処理があればソースを検索すると似たような処理をしているメソッドが見つかって、それを参考にして自分のコードをプログラミングしていました。

MacAppのクラス構成としては、MSのMFCに近かった…と言うか最初はどう見てもMFCはMacAppのタイニー版としか見えませんでした。しかもMFCはソースを追ってもすぐにWindowsAPIに入ってしまい、当時はMacAppとは比べ物になりませんでした。が、他に選択肢が無かったので仕方が無くMFCを使っていたのですが、現在のMFCは拡張に拡張を重ねて当時と比較すると化け物みたいですね。ちなみにMacAppはダウンロードは出来ますが既に終わっている開発環境です。

何はともあれ昔も今もマックの開発環境は情報が少なく、あっても英語だけだったりと最後はMacAppのソースを見るのが基本でした。BouncyCastleやCrypto++を使っていてもやはり最後はソースを見て何をどうやって行っているのかを見るのが重要だと思います。暗号関係も情報が少ないです…あっても英語と言うのも同じです。まぁBouncyCastleCrypto++もメーリングリストがあって検索が出来るだけマシとも思えますね。

他の人の優れたソースを見る事は自分のプログラマとしてのレベルアップには欠かせないようにも思います。ですから「ソースの力を信じろ。ルーク、ソースを使え!」と言っておきましょう。そうやって使っていると不満な点や足りない点が見えてくるかもしれません。そうしたら貢献のチャンスですね。早くそのレベル(ジェダイ・マスター?)になりたいと日々精進するのでした。
2005-07-21 12:31:21 - miyachi - - [公開活動] -

2005-07-19

BouncyCastleのインストール手順と確認  [by miyachi]

オープンソース活動と言う事でJava用暗号ライブラリであるBouncyCastleのインストール手順に関してまとめておきます。まずはインストール手順ですが、

手順1:
BouncyCastleのjarファイルを http://www.bouncycastle.org/ からダウンロードする。利用するJDKのバージョンと一致した物か全てをダウンロードするが、jarファイル別々もダウンロードは可能。私は色々便利(ソースも含んでいるのでお勧め)なので全て含んでいる物をダウンロードしている。現在のVer1.29だと crypto-129.tar.gz か crypto-129.zip となります。情報が少ないから結局ソースを追う事が多いです(^^;

手順2:
BouncyCastleのjarファイル(例:bcprov-jdk14-129.jar/bcmail-jdk14-129.jar/bctsp-jdk14-129.jar/bcpg-jdk14-129.jar/bctest-jdk14-129.jar)をJREかJDKの jre/lib/ext/ の下にコピーする。

手順3:
JREかJDKの jre/lib/security/java.security を編集してBouncyCastleの行を挿入する。

---------------------------------------------------------------
       :
#
# List of providers and their preference orders (see above):
#
security.provider.1=sun.security.provider.Sun
security.provider.2=org.bouncycastle.jce.provider.BouncyCastleProvider
security.provider.3=com.sun.net.ssl.internal.ssl.Provider
       :
---------------------------------------------------------------

※ この時に出来れば2番目に挿入して以下のリストを繰り上げて行く事が間違いが無くて望ましい。同じAPIが複数ある場合に別のプロバイダの物を使ってしまう事があるから。

以上でインストールは完了です。なお注意としてはWindows環境でJ2SDK(JDK)をインストールすると、JREと2重にインストールされる事があるので、最悪は両方の jre/lib 以下に設定をする必要がある事です。ちなみにJDKは指定場所にインストールされますが、JREは C:\Program Files\Java\j2re1.4.2_08 と言うようにインストールされてしまうようです。環境によって多少は異なるかもしれませんが参考まで。

また場合によってはJUnit(junit.jar)JavaMail(mail.jar/src.jar)のモジュールも要求されるかもしれません。その場合にはダウンロードしてインストールしましょう。

次に以下のコードを実行してみて「BouncyCastle Security Provider v1.29」と表示されればOKです。なおここでは全てBouncyCastleのバージョンはVer1.29を前提としてファイル名やメッセージを示していますが、BouncyCastleはバージョンアップも早いので最新の物を使いましょう。

---------------------------------------------------------------
import java.security.Provider;
import java.security.Security;
public class BcTest {
 public static void main( String[] args ) throws Exception {

  Provider provider = Security.getProvider ( "BC" );
  System.out.println ( provider.getInfo() );
 }
}

---------------------------------------------------------------

"BC"がBouncyCastleを示すプロバイダ文字列となります。さぁこれであなたもオープンソース&フリーソフトの暗号ライブラリBouncyCastleを使う準備が出来ました。暗号の世界を楽しみましょう!

[2006-12-01追記]
む?あるお助け掲示板からリンクが。そうか確かにプログラムの一部だけだとわかり難いですね。と言う事で実行ソース例を修正しました。赤字の部分が今回追加した部分です。
2005-07-19 18:17:02 - miyachi - - [公開活動] -