#先日の bcrypt のテストの件ですが、python (3.9.2) にてテストケースの $2x$ のものを bcrypt.checkpw に渡してみたところ、Invalid salt ということでした
#原因はわかりませんが、私の環境では $2x$ で始まるものだけが使えなくなってる気がします
#Pythonのbcrypt実装って複数見つかるけど現役はどれかな。 https://github.com/pyca/bcrypt/ これとか、コードを見ると $2x$ はサポート自体していないようです ($2x$がサポートされる前のコードから分岐した?) #Gaucheのコードは https://www.openwall.com/crypt/ から取っているので、ここのcrypt_blowfish 1.3 を落としてビルドしてみると、どうなります? そちらでもfailするなら、コード自体に何らかの環境依存性がある、しないならGaucheにポートするときに何かしくじった、ということになりそう。 #システム内の共有ライブラリ呼び出してる前提で試してみたのですが、自前で持ってたんですね…試してみます
#make check まで試してみましたが、エラーは出てないみたいです
#1箇所違いが見つかったけれど関係あるのかな…
#$ diff -b crypt_blowfish-1.3/crypt_blowfish.c Gauche/ext/bcrypt/crypt_blowfish.c
57c57
< #define BF_ASM 1
---
> #define BF_ASM 0
##ifdef __i386__ の直下です。ここを変えると違いが出ますか? x86_64なら変わらないと思うのだけれど
#だめみたいです
#特に変わっていないようです
#あと違うのはコンパイラフラグくらいですよねえ… warningは関係ないし、-O2は同じだし、となると-fPICくらいしか
#少し試してみたのですが…Gauche のツリー内の crypt_blowfish ではなく、システム内にある libcrypt かな?とリンクされて、そちらが使われてるかもしれません
#簡単なコードを書いて試してみたのですが、Gauche 内のツリーのものを使うと成功するのですが、それらを使わず -lcrypt を指定してリンクすると、$2x$ だけ失敗(エラー)するように見えます https://gist.github.com/yuzu46m/fcad2d3c15e4a97466256e1a4a69721d #ああ、なるほど、同名のライブラリ関数がlibcryptの方にあってそっちが呼ばれてるんですかね。
#ということはGaucheソース側をリネームしてやればいいかな。
##Testing bcrypt ... passed.
テスト通るようになりました
#ども!