StreamRelay.NET.exe の一覧機能を呼び出しているプラグインの実装方法について説明する
StreamRelay.NET.exe/StreamRelay.NET.x86.exeには、いくつかの機能をプラグインとして実装できるようにインターフェイスを公開している。
今回は、暗号ストリームの共通鍵などを拡販するためのインターフェイスを使って、プラグインを作成する方法を記述する。
既存のプラグイン
プラグイン的には、このあたりかな
実装したプラグインの呼び出され方
プラグインで指定された引数が渡されると、一覧を取得して表示する。
という感じ。
実装するインターフェイス
以下のインターフェイスを継承したクラスを実装すればよい
- IPlugin.dll 中の jp.dip.rocketeer.Plugins.IPluginPasswordStirringEntity インターフェイス
- IPlugin.dll 中の jp.dip.rocketeer.Plugins.IPluginPasswordStirring インターフェイス
このクラス2つだけ実装すればよい。
jp.dip.rocketeer.Plugins.IPluginPasswordStirring インターフェイス
StreamRelay.NET.exe/他のプラグインから、IPluginPasswordStirring のCreatePasswordStirringEntityメソッドが呼ばれて、IPluginPasswordStirringEntityオブジェクトを生成して返す。
そしてIPluginPasswordStirringEntityが入力値(パスワード)を攪拌する。
という感じ。
具体的には、IPluginPasswordStirringEntity CreatePasswordStirringEntity(String iArgorithmName, ref String errMsg)が、StreamRelay.NET.exe/他のプラグインから呼び出されるので、IPluginPasswordStirringEntityのインスタンスを返す。
そして、IPluginPasswordStirringEntity#GetHash(byte[]) によって、入力値(パスワード)が攪拌される。
という感じ。
jp.dip.rocketeer.Plugins.IPluginPasswordStirring インターフェイスで定義しているメソッド/プロパティ
実装する必要があるのは以下
jp.dip.rocketeer.Plugins.IPluginPasswordStirringインターフェイスで定義されているのは、以下のとおり
- Dictionary ListDescription(Boolean IsHash)
- 引数文字列などを返す。(引数「Boolean IsHash」は無視{別述のHash/MACオブジェクトとの関係で引数が付いているだけ})
- IPluginPasswordStirringEntity CreatePasswordStirringEntity(String iArgorithmName, ref String errMsg)
- 名称から Hash オブジェクトの実体を作成する。「iArgorithmName」はListDescription()のキー名の方が与えられる。
jp.dip.rocketeer.Plugins.IPluginBaseインターフェイスで定義されている分については、インターフェイス IPluginBase についてを参照
jp.dip.rocketeer.Plugins.IPluginPasswordStirringEntity インターフェイスで定義しているメソッド/プロパティ
実装する必要があるのは以下
jp.dip.rocketeer.Plugins.IPluginPasswordStirringEntityインターフェイスで定義されているのは、以下のとおり
- byte[] GetHash(byte[] buf)
- 入力値の Hash/Mac/PasswordStirring を返す
- String ArgorithmName()
- Hash/Mac/PasswordStirring アルゴリズム名を返す
- IPluginPasswordStirringEntity Copy()
- マルチスレッドを考慮して自分自身のディープコピーを返す。生成された複数の値の順番から内部や次の値や元の値を推察されないようにスレッド(ストリーム)ごとにコイツを呼び出しているので、初期化された自分自身のオブジェクトを返すようにしてほしい。