OS2/emx/openssl

OS2/emx/openssl

http://www.openssl.org/

OS/2 版:

Apache for OS/2mos_sslOpenSSL for OS/2

hobbes には 0.9.7a のランタイム(openssl.exe, crypto.dll, ssl.dll, ヘッダ、インポートライブラリ)がある。

0.9.8a for OS/2

emx+gcc でコンパイル

基本的には INSTALL.OS2 に書いてある方法で。 perl 必須(警告がうざいので一時的に set LANG=en_US しておくといいかも)。 あと OS2-EMX.cmd 内で grep、*.mak 中で若干のファイルユーティリティ(cp, rm...) が使われている。

若干の修正が必要。

  • crypto/bn/bn_mul.c と crypto/bn/asm/bn_586.asm とで bn_sub_part_words が重複。 生成された makefile (os2-emx.mak, os2-emx-dll.mak) 中の CFLAGS に -DOPENSSL_BN_ASM_PART_WORDS を書き足し。 あるいはあらかじめ util/pl/OS2-EMX.pl のそれっぽいところに同等の指定を追加しておく。 (たしか最近の cvs で修正がはいってた気がする…)
  • pqueue_print 関数 (crypto/pqueue/pqueue.c) は OS/2 環境だと使われないにもかかわらず def ファイルの EXPORT エントリに記述されてしまい、結果として DLL 生成失敗。 どうしたもんですかね。ダミー関数を置いとくか def 中の pqueue_print を手動でコメントアウト?(コメントアウトすればひとまず通ることは確認した)
    →とりあえずコメントアウトするスクリプトをもう一枚かませることで解決してみた(backward-*.def 生成時に微妙に警告が出るような…)

だいたい手順通りでコンパイルできるようにするパッチ: openssl-0.9.8a-os2-20051113.diff (一応これでいけるといいな、的な)

ためしにバイナリをこっちに捨てておいた。
http://ebisa.hp.infoseek.co.jp/os2/ruby.htm#openssl

もしかすると unix 系ツールをもすこし真面目につっこむと多少改善するのかもしれない、とか思ったがどうしたもんですかね。ux2bs でやるしかないのか?

既存ランタイムとの互換性

ライブラリ名が変更されている(crypto→cryptssl, ssl→open_ssl)。 既存ライブラリとの互換性のため(だと思う)、それぞれについて forwarding DLL が用意されている。というかコンフィグレーション時に勝手に作ってくれる。まあ親切。

しかしこの DLL、ぶっちゃけ ordinal の互換性あるのか激しく不安だ。というか序数については ICONV で絶望したのでぜんぜん信じてないのだった。

しかしおどろいたことに、ざっと見た感じ、序数の整合性は取れているような気配。といいつつ全比較はしてないんだけど。

(2005-11-13) 関数と序数の対応は util/libeay.num と util/ssleay.num にハードコーディングされている。 プラットフォーム毎のシンボル名の差異も考慮されているようにみえるが、どうも利いてないような気がしてならない。mkdef.pl をどうにかすべきなのかもしれないが、perl は見てもさっぱりわかんねえしなあ。

(2005-11-12 08:55) 一部エクスポートされない関数がある。 デフォルトの設定だと MDC2 と RC5 が無効なので Config の引数に enable-mdc2 enable-rc5 追加(Makefile と crypto/opensslconf.h はあらかじめ消しておかないとダメかも)。 それから EVP_*_cfb は微妙に名前が違っている。 あとは ERR_load_CRYPTOlib_strings。

-EVP_aes_128_cfb	crypto		3222 ?
+EVP_aes_128_cfb128	cryptssl	3222 ?

-EVP_aes_192_cfb	crypto		3225 ?
+EVP_aes_192_cfb128	cryptssl	3225 ?

-EVP_aes_256_cfb	crypto		3223 ?
+EVP_aes_256_cfb128	cryptssl	3223 ?

-EVP_bf_cfb		crypto		295 ?
+EVP_bf_cfb64		cryptssl	295 ?

-EVP_cast5_cfb		crypto		984 ?
+EVP_cast5_cfb64	cryptssl	984 ?

-EVP_des_cfb		crypto		300 ?
+EVP_des_cfb64		cryptssl	300 ?

-EVP_des_ede3_cfb	crypto		305 ?
+EVP_des_ede3_cfb64	cryptssl	305 ?

-EVP_idea_cfb		crypto		319 ?
+EVP_idea_cfb64		cryptssl	319 ?

-EVP_rc2_cfb		crypto		326 ?
+EVP_rc2_cfb64		cryptssl	326 ?

-EVP_rc5_32_12_16_cfb	crypto		1088 ?
+EVP_rc5_32_12_16_cfb64	cryptssl	1088 ?

序数が同じ関数はインターフェースも完全に同一、ってことでいいんですかねえ。
(まあ noname なほうの forwarder なら少なくとも名前に気を病む必要はなくなるのですが)

未整理項目