Bug #2604
test_dsa_sign_verify() in test/openssl/test_ec.rb failes
| Status: | Rejected | Start date: | 01/14/2010 | |
|---|---|---|---|---|
| Priority: | Low | Due date: | ||
| Assignee: | % Done: | 0% |
||
| Category: | ext | |||
| Target version: | - | |||
| ruby -v: | ruby 1.8.7 (2010-01-10 patchlevel 249) [i486-netbsdelf] |
Description
NetBSD current (5.99.23)で make test-all を実行すると、test/openssl/test_ec.rbの
test_dsa_sign_verify()に失敗します。
test_dsa_sign_verify(OpenSSL::TestEC)
[./test/openssl/test_ec.rb:92:in `test_dsa_sign_verify'
./test/openssl/test_ec.rb:88:in `each'
./test/openssl/test_ec.rb:88:in `test_dsa_sign_verify']:
<OpenSSL::PKey::ECError> exception expected but none was thrown.
これは test_dsa_sign_verify()の以下の行で失敗しています。
assert_raises(OpenSSL::PKey::ECError) { key.dsa_sign_asn1(@data2) }
このテストは dsa_sign_asn1に長すぎる値を渡してエラーとなることを期待して
います。OpenSSLのソースを確認するとNetBSD 5.0_STABLEの 0.9.9-dev あたり
までは、openssl/crypto/ecdsa/ecs_ossl.cのecdsa_do_sign()内で、
if (8 * dgst_len > BN_num_bits(order))
{
/* XXX
*
* Should provide for optional hash truncation:
* Keep the BN_num_bits(order) leftmost bits of dgst
* (see March 2006 FIPS 186-3 draft, which has a few
* confusing errors in this part though)
*/
ECDSAerr(ECDSA_F_ECDSA_DO_SIGN,
ECDSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE);
goto err;
}
とチェックされていますが、NetBSD currentのOpenSSL 1.1.0-dev では、この
ECDSA_R_DATA_TOO_LARGE_FOR_KEY_SIZEというエラーを起こすコードは削除され、
代わりに渡されたdigestを切り詰める処理が加えられています。
従って、このエラーとなることを検査するテストは廃止するか、OpenSSLのバー
ジョンに応じて行う必要があると思います。
Related issues
History
Updated by nahi (Hiroshi Nakamura) over 2 years ago
2010/1/14 Takahiro Kambe <redmine@ruby-lang.org>:
> このテストは dsa_sign_asn1に長すぎる値を渡してエラーとなることを期待して
> います。OpenSSLのソースを確認するとNetBSD 5.0_STABLEの 0.9.9-dev あたり
> までは、openssl/crypto/ecdsa/ecs_ossl.cのecdsa_do_sign()内で、
>
> if (8 * dgst_len > BN_num_bits(order))
> {
> /* XXX
> *
> * Should provide for optional hash truncation:
> * Keep the BN_num_bits(order) leftmost bits of dgst
> * (see March 2006 FIPS 186-3 draft, which has a few
> * confusing errors in this part though)
> */
>
> ECDSAerr(ECDSA_F_ECDSA_DO_SIGN,
> ECDSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE);
> goto err;
> }
>
> とチェックされていますが、NetBSD currentのOpenSSL 1.1.0-dev では、この
> ECDSA_R_DATA_TOO_LARGE_FOR_KEY_SIZEというエラーを起こすコードは削除され、
> 代わりに渡されたdigestを切り詰める処理が加えられています。
>
> 従って、このエラーとなることを検査するテストは廃止するか、OpenSSLのバー
> ジョンに応じて行う必要があると思います。
FIPS 186-3は2009年6月にfinalが出て、leftmost取り出し(SHALL)も含まれているので、opensslのこの挙動変更は問題なく、また確定だと思います。というわけで、Kambeさんの分析が正確であり、テスト側の対応が必要です。0.9.8系列はどうするんだろうなあ。
で、実際の対応ですが、cruby-opensslのlead
maintainerが移行の最中なんですよねえ。1.0.0対応と共に、まとめてやったほうがよいと思います([1.8,
1.9]×[0.9.8, 1.0.0]なので、半端にやると混乱します)。
evanphxもOpenSSLの事情はわからんだろうし、この辺ちゃんと対応するのは難しいだろうなあ。誰かやる気のある若者はいませんかね。
Updated by taca (Takahiro Kambe) over 2 years ago
In message <a67aadf81001161911j7f5fbd1bwca86375b70cf514f@mail.gmail.com> on Sun, 17 Jan 2010 12:11:24 +0900, "NAKAMURA, Hiroshi" <nakahiro@gmail.com> wrote: > 2010/1/14 Takahiro Kambe <redmine@ruby-lang.org>: >> このテストは dsa_sign_asn1に長すぎる値を渡してエラーとなることを期待して >> います。OpenSSLのソースを確認するとNetBSD 5.0_STABLEの 0.9.9-dev あたり >> までは、openssl/crypto/ecdsa/ecs_ossl.cのecdsa_do_sign()内で、 (snip) > FIPS 186-3は2009年6月にfinalが出て、leftmost取り出し(SHALL)も含まれて > いるので、opensslのこの挙動変更は問題なく、また確定だと思います。とい > うわけで、Kambeさんの分析が正確であり、テスト側の対応が必要です。 > 0.9.8系列はどうするんだろうなあ。 OpenSSLのCVSリポジトリを確認すると、 http://cvs.openssl.org/rlog?f=openssl/crypto/ecdsa/ecs_ossl.c 2009年12月1日付けで、OpenSSL_0_9_8-stableやOpenSSL_1_0_0-stableといっ たブランチにも同じ修正が施さされています。従って、何かの事情でこれらの ブランチからリリースされると、反映された内容で出て来る可能性が高いと 思います。 -- 神戸 隆博(かんべ たかひろ) at 仕事場
Updated by nahi (Hiroshi Nakamura) about 2 years ago
2010/1/19 Takahiro Kambe <taca@back-street.net>: >> 0.9.8系列はどうするんだろうなあ。 > OpenSSLのCVSリポジトリを確認すると、 > > http://cvs.openssl.org/rlog?f=openssl/crypto/ecdsa/ecs_ossl.c > > 2009年12月1日付けで、OpenSSL_0_9_8-stableやOpenSSL_1_0_0-stableといっ > たブランチにも同じ修正が施さされています。従って、何かの事情でこれらの > ブランチからリリースされると、反映された内容で出て来る可能性が高いと > 思います。 遅くなりましたが、先日リリースされた0.9.8mに反映されていて、ruby_1_8で該当テストが失敗する(95T1194A1F0E)のを確認しました。ruby_1_8は私が修正します。
Updated by nahi (Hiroshi Nakamura) about 2 years ago
2010/3/4 NAKAMURA, Hiroshi <nakahiro@gmail.com>: > ruby_1_8は私が修正します。 ruby_1_8はr26837で修正しました。 http://redmine.ruby-lang.org/repositories/revision/ruby-18?rev=26837
Updated by sheepman (Takashi Tamura) about 2 years ago
この件、1.9 の trunk でもテストが失敗します。 参考までに。 3) Failure: test_dsa_sign_verify(OpenSSL::TestEC) [/Users/tamura/ruby/src/ruby19/test/openssl/test_ec.rb:92]: OpenSSL::PKey::ECError expected but nothing was raised. $ ./ruby -v ruby 1.9.2dev (2010-03-26 trunk 27066) [x86_64-darwin10.2.0] $ openssl version OpenSSL 0.9.8n 24 Mar 2010
Updated by nahi (Hiroshi Nakamura) about 2 years ago
2010/3/28 Takashi Tamura <redmine@ruby-lang.org>: > この件、1.9 の trunk でもテストが失敗します。 > 参考までに。 たぶんこれが当たると思います。ruby_1_8からのbackportです。 http://github.com/nahi/ruby/commit/274b9e41a4dd387c32ea4aebd7ba623f1753fb05 試していただけます?
Updated by sheepman (Takashi Tamura) about 2 years ago
ダメでした。エラーはそのままです。言ってなかったのですが、エラーが出るのは MacPorts でいれた OpenSSL 0.9.8n です。Apple 提供の OpenSSL 0.9.8l ではエラーが出ません。 $ ./miniruby -I../ruby19/lib -I.ext/common -I./- -r../ruby19/ext/purelib.rb ../ruby19/tool/runruby.rb --extout=.ext -- "../ruby19/test/runner.rb" ../ruby19/test/openssl Loaded suite ../ruby19/test/runner Started ..................F................................................................... Finished in 4.755997 seconds. 1) Failure: test_dsa_sign_verify(OpenSSL::TestEC) [/Users/tamura/ruby/src/ruby19/test/openssl/test_ec.rb:92]: OpenSSL::PKey::ECError expected but nothing was raised. 86 tests, 1206 assertions, 1 failures, 0 errors, 0 skips Test run options: --seed 21338 $ ./ruby -v ruby 1.9.2dev (2010-03-31 trunk 27125) [x86_64-darwin10.3.0] 関係ないですが、github のURLに http://github.com/nahi/ruby/commit/274b9e41a4dd387c32ea4aebd7ba623f1753fb05.diff と後ろにdiffをつけるとちゃんとパッチを生成してくれるんですね。
Updated by nahi (Hiroshi Nakamura) about 2 years ago
2010/3/31 Takashi Tamura <redmine@ruby-lang.org>: > ダメでした。エラーはそのままです。 すいません、patchを間違えました。これは1.0.0対応(を修復する)patchでした。 以下をこの順に当ててください。Tamuraさんは、最後のは既に当てていただいてます(不要です)。 http://github.com/nahi/ruby/commit/14c080d3687dd10fb80d38117e179d93e074b092 http://github.com/nahi/ruby/commit/edff118cccd4ea4dd801244d13a53596ec483945 http://github.com/nahi/ruby/commit/3b3f033f9796a720335e2a220c59cef2a512c128 http://github.com/nahi/ruby/commit/5237204392131f126646dddd5b8c09b214b00fdb http://github.com/nahi/ruby/commit/274b9e41a4dd387c32ea4aebd7ba623f1753fb05 # ちゃんと1.9もtopic branch作るか、せめてmergeしなきゃよかった。 > エラーが出るのはMacPorts でいれた OpenSSL 0.9.8n です。 > Apple 提供の OpenSSL 0.9.8l ではエラーが出ません。 はい、そのはずです。OpenSSL側の変更への追従です。
Updated by sheepman (Takashi Tamura) about 2 years ago
OKでした。エラーが出なくなりました。 $ ./miniruby -I../ruby19/lib -I.ext/common -I./- -r../ruby19/ext/purelib.rb ../ruby19/tool/runruby.rb --extout=.ext -- "../ruby19/test/runner.rb" ../ruby19/test/openssl Loaded suite ../ruby19/test/runner Started ........................................................................................................... Finished in 4.961459 seconds. 107 tests, 1219 assertions, 0 failures, 0 errors, 0 skips Test run options: --seed 7315 $ ./ruby -v ruby 1.9.2dev (2010-03-31 trunk 27125) [x86_64-darwin10.3.0]
Updated by nahi (Hiroshi Nakamura) over 1 year ago
- Assignee set to nahi (Hiroshi Nakamura)
Updated by nahi (Hiroshi Nakamura) over 1 year ago
- Status changed from Open to Rejected
ruby 1.8.7-p302で、shyouheiさんに取り込んでもらいました。 ECのテストにせよOpenSSL 1.0.0対応にせよ、不具合が残っているようであれば reopenしてください。