Bug #2604
closedtest_dsa_sign_verify() in test/openssl/test_ec.rb failes
Description
=begin
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のバー
ジョンに応じて行う必要があると思います。
=end
Updated by nahi (Hiroshi Nakamura) almost 15 years ago
=begin
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の事情はわからんだろうし、この辺ちゃんと対応するのは難しいだろうなあ。誰かやる気のある若者はいませんかね。
=end
Updated by taca (Takahiro Kambe) almost 15 years ago
=begin
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 仕事場
=end
Updated by nahi (Hiroshi Nakamura) over 14 years ago
=begin
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は私が修正します。
=end
Updated by nahi (Hiroshi Nakamura) over 14 years ago
=begin
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
=end
Updated by sheepman (Takashi Tamura) over 14 years ago
=begin
この件、1.9 の trunk でもテストが失敗します。
参考までに。
- 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
=end
Updated by nahi (Hiroshi Nakamura) over 14 years ago
=begin
2010/3/28 Takashi Tamura redmine@ruby-lang.org:
この件、1.9 の trunk でもテストが失敗します。
参考までに。
たぶんこれが当たると思います。ruby_1_8からのbackportです。
http://github.com/nahi/ruby/commit/274b9e41a4dd387c32ea4aebd7ba623f1753fb05
試していただけます?
=end
Updated by sheepman (Takashi Tamura) over 14 years ago
=begin
ダメでした。エラーはそのままです。言ってなかったのですが、エラーが出るのは
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.
- 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をつけるとちゃんとパッチを生成してくれるんですね。
=end
Updated by nahi (Hiroshi Nakamura) over 14 years ago
=begin
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側の変更への追従です。
=end
Updated by sheepman (Takashi Tamura) over 14 years ago
=begin
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]
=end
Updated by nahi (Hiroshi Nakamura) about 14 years ago
- Assignee set to nahi (Hiroshi Nakamura)
=begin
=end
Updated by nahi (Hiroshi Nakamura) about 14 years ago
- Status changed from Open to Rejected
=begin
ruby 1.8.7-p302で、shyouheiさんに取り込んでもらいました。
ECのテストにせよOpenSSL 1.0.0対応にせよ、不具合が残っているようであれば
reopenしてください。
=end