Windows 95 対応。OpenSSL 1.0.1o/1.0.0s リリース

OpenSSL: OpenSSL 1.0.0s Release Notes.
OpenSSL: OpenSSL 1.0.1o Release Notes.

例の Windows 95 以降向けのバイナリはこちら
Windows 95 で動作するOpenSSLライブラリ作ったよ!
なにやら、今年末で 1.0.0系と 0.9.8系のサポートが終わってしまうという話なので
同梱バージョンをひとつずらすことにしました。

今回は 1.0.1o 版 の中に
Win95で動作する 1.0.0s 版
Win95で動作する 1.0.1o 版
SSE2対応で動作する 1.0.0s版 (Win95はOS自体が SSE2非対応)
SSE2対応で動作する 1.0.1o版 (Win95はOS自体が SSE2非対応)
の4つが入っています

Windows 95で openssl.exe が動作しない理由が分かったので今回から実行ファイル同梱しています
原因は bss_file.c

    if ((sz = MultiByteToWideChar(CP_UTF8, (flags = MB_ERR_INVALID_CHARS),
                                  filename, len_0, NULL, 0)) > 0 ||
        (GetLastError() == ERROR_INVALID_FLAGS &&
         (sz = MultiByteToWideChar(CP_UTF8, (flags = 0),
                                   filename, len_0, NULL, 0)) > 0)
        ) {
        WCHAR wmode[8];
        WCHAR *wfilename = _alloca(sz * sizeof(WCHAR));

        if (MultiByteToWideChar(CP_UTF8, flags,
                                filename, len_0, wfilename, sz) &&
            MultiByteToWideChar(CP_UTF8, 0, mode, strlen(mode) + 1,
                                wmode, sizeof(wmode) / sizeof(wmode[0])) &&
            (file = _wfopen(wfilename, wmode)) == NULL &&
            (errno == ENOENT || errno == EBADF)
            ) {
            /*
             * UTF-8 decode succeeded, but no file, filename
             * could still have been locale-ized...
             */
            file = fopen(filename, mode);
        } else {
            file = fopen(filename, mode);
        }

    } else if (GetLastError() == ERROR_NO_UNICODE_TRANSLATION) {
        file = fopen(filename, mode);
    } else {
        file = fopen(filename, mode);
    }

追加したコードが赤字の部分

脆弱性を修正した「OpenSSL」の最新版が公開、“Logjam”脆弱性の修正も - 窓の杜

なお、「OpenSSL」のv1.0.0系統とv0.9.8系統のサポートは2015年12月31日で終了する。これらのバージョンを利用中のユーザーは、アップデートを検討してほしい。

後、悲報。openssl.exe の v0.9.8にバグがあることが判明
opssl
openssl s_client を実行すると アプリが落ちる。

後、Windows 95 で openssl1.0.1を動かそうとすると落ちるので変だと思ったら、-DOPENSSL_IA32_SSE2 が指定されていて強制的に SSE2 ONだった。

opssl2
とりあえず完成・ω・

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です