プログラマのつれづれなるままにプログラマのつれづれなるままに音宮志久が思ったことなどをネタにします。プログラムネタ・数学ネタがメインです。その他コメントを残すその他もありますが、今日はがんばってRIPEMD-160関係の実装をしていました。何となくわかると思いますが、160bitのハッシュアルゴリズムです。SHA-1とためを張っているアルゴリズムですが、日本ではほとんど使われていません。そのため、実装の資料もほとんどなく、特にエンディアン操作でかなり苦労しました。アルゴリズム本体は本家の説明からそのまんま組めば簡単です。難しければ説明文のテンポラリ変数を一つではなく二つとして左右ブロックそれぞれで処理を書いてみれば対称のアルゴリズムなので見通しがよくなると思います。面倒なのは定数が多いことですね。回転シフトの回数制御やブロック指定の添え字が左右に分かれて制御する分二倍になる、ということです。ちなみに、RIPEMD系で使用されているエンディアンはSHA系とは違いリトルエンディアンですので間違えないように。RIPEMD-128、RIPEMD-256、RIPEMD-320はもののついでで簡単に実装できます。それぞれ微妙な差分があるだけで記述する演算式そのものはほとんど同じです。使われている定数もラウンド関数もほぼ流用できます。回転シフト数の定義とブロックの添え字は同じ定義ですし、加算定数もほとんど変化なしなので定義を共通化すればOKです。本当にほとんどコピペですむので楽勝ですね。ラウンド関数の切れ目にハッシュ交換処理が入るとかその程度ですし。ちなみに、RIPEMD-128だけはアルゴリズムを文章として確認したわけではありません。RIPEMD-160とRIPEMD-256から実装を推測して組んでみたらその通りだった、というものです。ハッシュの基本処理の実装部を変更するのに時間がかかりました。実装してあるハッシュ処理がかなり多くなってきた(CRC32,MD5,SHA-1,SHA-224/256,SHA-384/512,RIPEMD-128/256,RIPEMD-160/320,Whirlpool)ので、それぞれで共通になるロード処理などをインターフェイスクラス側に移して見通しがよくなるように組み直しました。確認作業が面倒だったのが痛いですが・・・。すべてのハッシュ処理を再テストする羽目になっちゃいましたし。これだけハッシュ処理を実装して何に使うのだろうか?自分で思うことです。見てもゲーム(ADV系)にこれだけのハッシュ処理を使うとはまず思えません。RFCなどで定めてある通信系処理を自前実装するとき、くらいでしょうか。演算処理を最適化してあるわけではないので速度は微妙ですが。SHA-3のアルゴリズムがドラフトで出るはずなのでそれも実装しようかな~とは思っています。使わないと思いますので意味がないと思いますが。内部的なものはだいぶ強化されていると評価されているようですね。CPUコアしかりiOS5しかり。Siriをどう使うかが私が個人的におもしろそうと思う項目です。スマートフォンとしてみるとどうも連続待受時間が大幅に下がっているところがまずすぎると思います。iPhone4の時に比べて2/3まで下がっているんですよね・・・。CPUコアの拡張が変な方向に効いているのだと思いますが。買った人にはこれについての感想を尋ねてみたいものですし、改良版(もしくは次世代品)でちゃんと直るのかも気になるところです。この記事を書いている間にも並んでいる人がいると思うとがんばってください、としかいえなくなりますね・・・。北國新聞でのぼんぼり祭りの扱いが私は北國新聞を購読してはいないのですが、ぼんぼり祭りにいったときに総合案内所に北國新聞での宣伝記事が開かれていたのでちょっと驚いたのでとある経由でぼんぼり祭り前後の北國新聞を手に入れてみてみました。明らかにでかすぎです。いうか(ほぼ)2ページ分の開催告知+別ページのベタ記事に補助内容が、というのがすごいな、と思いました。金沢ローカルな新聞だな~という感想ですね。ちなみに祭りの次の日にもちゃんと写真付きでベタ記事になっていました。ちなみに、金沢大学での学会ポスターにAngelBeats!が使われていて・・・を記事にしたのも北國新聞です。微妙に見てみたかった人です。コメントをキャンセルメールアドレスが公開されることはありません。気になるプログラムネタや数学ネタがあったら書き込みたいのだが残業が長すぎて眠気が全くとれず体調があまりよくない。過労などでぶっ倒れるかもしれない。あと、さすがに独り身が寂しいのでなんとかしたいと考えてはいるのだが...。アクセスカウンタアクセス数:スポンサーリンクモバイルバージョンに。