2005-09-28 (Wed) [長年日記]
_ CryptSignHash/CryptVerifySignatureとバイトオーダ
PVKの件が片付いたと思ったら、rubyでsignしたデータのverifyがどうしてもうまくいかない。 CryptVerifySignatureを呼ぶと、記憶領域が不足しているという旨のエラーが。
ゆうぞうさんに泣きついたら、署名データのバイトオーダが逆になっていることが発覚 (実は家に帰ってからもしやと思って調べてみたのだが、IRCのログを見たら ゆうぞうさんがとっくに調べていたorz...)。 それで記憶領域の不足なのね。 ところどころにこういう罠があるからWindowsは嫌だよなあ(実はそれまでもPRIVATEKEYBLOBをテキストモードで書き出していて、随分長い間はまっていたのは内緒だ)。
key = OpenSSL::PKey::RSA.new(key_data) sign = key.sign(OpenSSL::Digest::SHA1.new, message).reverse
のようにreverseしてやったらCryptVerifySignatureで作成される署名と同じものを 作ることができた。 PKCS #1のバージョンの違いかなとか色々調べてたのがアホみたいだ。
pkcs1.rbを使おうと思ったけど、version 1.5ならOpenSSL::PKey::RSA#signでいいという ことがわかったのも収穫であった。 やっぱり、このへんのことはわからないことがあったらゆうぞうさんに聞くのが早いな。