MD5 OPX v0.01 2000年8月14日 Copyright(c) 近藤玲史 v0.02 2002年4月30日 Copyright(c) 近藤玲史 , 河邊径太 v0.03 2003年10月9日 Copyright(c) 近藤玲史 v0.03a 2004年7月11日 Copyright(c) 近藤玲史 本ドキュメントの構成: 1章: MD5 OPX について 2章: インストール方法 3章: 著作権 4章: 配布条件 5章: MD5 OPX の OPL からの使用方法 6章: 更新履歴 ======================================================================== 1. MD5 OPX について MD5 OPX は、EPOC32 マシンで MD5 Message Digest を計算する OPX です。 MD5 OPX を使うことで、OPL プログラム上で簡単に MD5 Message Digest を 計算することができます。 MD5 Message Digest は、さまざまなセキュリティに関するプロトコルや プログラムで使われています。 MD5 アルゴリズムは、RFC1321 に定義されています。 また、RFC2104 に定義されている Keyed-MD5アルゴリズムも実装しています。 ======================================================================== 2. インストール方法 PsiWin または MacConnect で、md5opx-v0.03.sis を指定して インストールして下さい。 または、md5opx-v0.03.sis ファイルを EPOC32 マシン上にコピーした後で それをダブルタップする方法でもインストールすることが可能です。 以下のファイルがインストールされます。 \System\OPX\MD5OPX.OPX OPX本体 \System\OPL\MD5.OXH OPLトランスレート用のヘッダファイル ======================================================================== 3. 著作権 3.1. RSA Data Security の著作物 本 OPX のほとんどの部分は、RFC1321 で公開されている "RSA Data Security, Inc. MD5 Message-Digest Algorithm" サンプル実装を、近藤がそのまま C++ で動くように書き換えたものです。 この実装は、RSA Data Security の著作物で、 上記同一性表記がある限りコピーしたり使ったりすることが 認められているものです。 詳しくは、md5c.cpp 他にあるコメントを参照してください。 Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All rights reserved. Keyed-MD5ハッシュに関する部分は、RFC2104 で公開されているサンプル実装 の EPOCへのポートであり、このサンプル実装自体が RFC1321で公開されてい るコードに基づいている事が明記されております。 3.2. Symbian Ltd. の著作物 本 OPX のソースのうち、幾つかのファイルは Symbian Ltd. の著作物である EPOC Release5 C++ SDK 中の \EPOC32EX\OPX ディレクトリにある サンプルソースコード (EXAMPLE CODE) を改造して使っています。 このサンプルソースコードを改造したものは、Symbian によって 近藤が配布することは許可されていますが、 それを受け取ったエンドユーザが再配布することは禁じられています。 This product includes software licensed from Symbian Ltd (c) Symbian Ltd 1998-9 該当サンプルソースコードは、以下のものです。 md5opx.cpp md5opx.h md5opx.mmp md5opx.pkg 3.3. 河邊の著作物 Keyed-MD5アルゴリズム/CRAM-MD5 アルゴリズムに関する部分は、 河邊が作成したものです。 この部分に関しては、河邊が著作権を保持します。 3.4. 近藤の著作物 上記以外の部分は、近藤が作成したものです。 この部分に関しては、近藤が著作権を保持します。 3.5. 免責事項 本ソフトウェアは作者 (近藤玲史・河邊径太) によって、 "現状のまま" 提供されるものとします。 本ソフトウェアについては、明示黙示を問わず、商用品として通常そなえる べき品質をそなえているとの保証も、特定の目的に適合するとの保証も含め、 何の保証もなされません。 事由のいかんを問わず、損害発生の原因いかんを問わず、且つ、責任の根拠 が契約であるか厳格責任であるか (過失その他) 不法行為であるかを問わず、 作者も個々の貢献者も、仮にそのような損害が発生する可能性を 知らされていたとしても、本ソフトウェアの使用から発生した直接損害、 間接損害、偶発的な損害、特別損害、懲罰的損害または結果損害のいずれに 対しても (代替品または サービスの提供; 使用機会、データまたは利益の損失の補償; または、業務の中断に対する補償を含め) 責任を一切負いません。 ======================================================================== 4. 配布条件 第3章の著作権関係に基づき、MD5 OPX の配布条件を以下のようにします。 4.1. Symbian の制約を受けないファイル 以下の (a)〜(e) の各ファイルは、フリーソフトウェアです。 (a) バイナリファイル md5.opx, md5.oxh (b) ドキュメントファイル README-JA.TXT, README-EN.TXT (c) インストールファイル md5opx-v0.03.sis (d) サンプルファイル md5test.opl (e) ソースファイル global.h, md5.h, md5c.cpp これを受け取った人は、これら全体あるいは一部に対して 以下を行うことができます。 - 使用すること - 有償・無償を問わず 2次配布すること - 他の製品などに含めること 4.2. Symbian の制約を受けるファイル 以下の (f) に該当する各ファイルは、Symbian Ltd. の著作権が及ぶ フリーソフトウェアのソースコードです。 (f) ソースファイル md5opx.cpp, md5opx.h, md5opx.mmp, md5opx.pkg これを受け取った人は、これら全体あるいは一部を使用 (コンパイル・改造など) することができます。 有償・無償を問わず、2次配布することは認められていません。 ただし、Symbian が配布している無償の ER5 C++ SDK を持っている方は、 その License Agreement に従って 2次配布することが可能です。 ======================================================================== 5. OPL からの使用方法 MD5 OPX の使用方法は、サンプル OPL ファイル md5test.opl を参照してください。 以下の関数 (procedure) があります。 ・md5str$:( TextIn$ ) 関数 動作: 入力文字列に対する MD5 Message Digest 文字列を返します。 入力: 文字列 出力: MD5 Message Digest 文字列 (16進表記) ・md5ptr$:( TextPtrIn&, LenIn& ) 関数 動作: 入力文字列に対する MD5 Message Digest 文字列を返します。 入力: 文字列へのポインタ (TextPtrIn&) と、そのバイト数 (LenIn&) 出力: MD5 Message Digest 文字列 (16進表記) ・md5Init&:() 関数 動作: 内部の context を初期化します。 RFC1321 で公開されている md5c.c の MD5Init 関数に相当します。 入力: 無し 出力: context へのポインタ (OPL 側からはアクセスできない領域) ・md5UpdateStr&:( TextIn$ ) 関数 動作: 内部の context を、入力文字列で更新します。 RFC1321 で公開されている md5c.c の MD5Update 関数に相当します。 入力: 文字列 出力: context へのポインタ (OPL 側からはアクセスできない領域) ・md5UpdatePtr&:( TextPtrIn&, LenIn& ) 関数 動作: 内部の context を、入力文字列で更新します。 RFC1321 で公開されている md5c.c の MD5Update 関数に相当します。 入力: 文字列へのポインタ (TextPtrIn&) と、そのバイト数 (LenIn&) 出力: context へのポインタ (OPL 側からはアクセスできない領域) ・md5Final&:() 関数 動作: 内部の context の終了処理を行い、digest へのポインタを返します。 RFC1321 で公開されている md5c.c の MD5Final 関数に相当します。 入力: 文字列 出力: digest へのポインタ (OPL 側からはアクセスできない領域) ・md5makeDigestString$:() 関数 動作: md5Final 関数で得られる digest を、16進表記文字列に変換します。 入力: 無し 出力: MD5 Message Digest 文字列 (16進表記; 32文字) ・md5KeyedMd5String$:(TextIn$, SharedKeyIn$) 関数 ・md5CramMd5String$:(TextIn$, SharedKeyIn$) 関数 動作: Keyed-MD5アルゴリズム (RFC2104) に基づき、入力文字列を鍵で処理 して得られるdigestを文字列として返します。 入力: 文字列 (TextIn$)と、 認証サーバとクライアントの共有鍵 (SharedKeyIn$) 出力: CRAM-MD5 で生成された文字列 (16進表記) 注意: この二つの関数は全く同じ動作をします。 POP/SMTP認証 (RFC2095/2554) において、Keyed-MD5を使用する場合の AUTHENTICATION TYPEは CRAM-MD5ですので、利用者の利便のためにこ のようになっています。 ・md5getDigest$:() 関数 動作: md5Final 関数で得られる digest を文字列に得ます。 文字列の各文字の値は、文字化16進数ではなくバイナリ値です。 入力: 無し 出力: MD5 Message Digest 文字列 (16byte) ======================================================================== 6章: 更新履歴 2000年5月4日 (v0.00、近藤) - 最初の公開 2000年8月14日 (v0.01、近藤) - md5.oxh において、UID が間違っていたので修正した。 - 本ファイル名を、README-JA.TXT から md5opx-ja.txt に変更した。 2002年4月30日 (v0.02、河邊、近藤) - CRAM-MD5アルゴリズムを追加(但し入力は文字列だけなので、テキストもキーも 255文字以内に限られる)。(河邊) - テストアプリに CRAM-MD5 のテスト機能を追加。テストベクトルは固定。(近藤) - v0.02 公開にあわせて、ドキュメントを修正。(河邊・近藤) 2003年8月10日 (v0.03、近藤) - md5getDigest$: 関数を追加。 この関数は、md5Final&: 関数の戻り値の代わりに用いることができる。 - md5Init&: / md5UpdateStr&: / md5UpdatePtr&: の各関数の 戻り値である context へのポインタは、その領域を OPL 側から アクセスできないことを追記。 - md5Final&: 関数の戻り値である digest へのポインタは、 その領域を OPL 側からアクセスできないことを追記。 2004年7月11日 (v0.03a、近藤) - md5opx-v0.03.sis (アーカイブ md5opx-v0.03.zip に含まれる) が 壊れていることが判明した。 コンパイルし直して、区別のため v0.03a として再公開。