Project

General

Profile

Actions

Bug #2604

closed

test_dsa_sign_verify() in test/openssl/test_ec.rb failes

Added by taca (Takahiro Kambe) over 14 years ago. Updated almost 13 years ago.

Status:
Rejected
ruby -v:
ruby 1.8.7 (2010-01-10 patchlevel 249) [i486-netbsdelf]
[ruby-dev:40077]

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


Related issues 1 (0 open1 closed)

Related to Ruby master - Feature #2022: Patch for openssl-1.0Closedephoenix (Evan Phoenix)08/31/2009Actions
Actions #1

Updated by nahi (Hiroshi Nakamura) over 14 years ago

=begin
2010/1/14 Takahiro Kambe :

このテストは 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

Actions #2

Updated by taca (Takahiro Kambe) over 14 years ago

=begin
In message
on Sun, 17 Jan 2010 12:11:24 +0900,
"NAKAMURA, Hiroshi" wrote:

2010/1/14 Takahiro Kambe :

このテストは 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

Actions #3

Updated by nahi (Hiroshi Nakamura) about 14 years ago

=begin
2010/1/19 Takahiro 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といっ
たブランチにも同じ修正が施さされています。従って、何かの事情でこれらの
ブランチからリリースされると、反映された内容で出て来る可能性が高いと
思います。

遅くなりましたが、先日リリースされた0.9.8mに反映されていて、ruby_1_8で該当テストが失敗する(95T1194A1F0E)のを確認しました。ruby_1_8は私が修正します。

=end

Actions #4

Updated by nahi (Hiroshi Nakamura) about 14 years ago

=begin
2010/3/4 NAKAMURA, Hiroshi :

ruby_1_8は私が修正します。

ruby_1_8はr26837で修正しました。
http://redmine.ruby-lang.org/repositories/revision/ruby-18?rev=26837

=end

Actions #5

Updated by sheepman (Takashi Tamura) about 14 years ago

=begin
この件、1.9 の trunk でもテストが失敗します。
参考までに。

  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.

$ ./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

Actions #6

Updated by nahi (Hiroshi Nakamura) about 14 years ago

=begin
2010/3/28 Takashi Tamura :

この件、1.9 の trunk でもテストが失敗します。
参考までに。

たぶんこれが当たると思います。ruby_1_8からのbackportです。
http://github.com/nahi/ruby/commit/274b9e41a4dd387c32ea4aebd7ba623f1753fb05
試していただけます?

=end

Actions #7

Updated by sheepman (Takashi Tamura) about 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.

  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をつけるとちゃんとパッチを生成してくれるんですね。
=end

Actions #8

Updated by nahi (Hiroshi Nakamura) about 14 years ago

=begin
2010/3/31 Takashi Tamura :

ダメでした。エラーはそのままです。

すいません、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

Actions #9

Updated by sheepman (Takashi Tamura) about 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

Actions #10

Updated by nahi (Hiroshi Nakamura) over 13 years ago

  • Assignee set to nahi (Hiroshi Nakamura)

=begin

=end

Actions #11

Updated by nahi (Hiroshi Nakamura) over 13 years ago

  • Status changed from Open to Rejected

=begin
ruby 1.8.7-p302で、shyouheiさんに取り込んでもらいました。
ECのテストにせよOpenSSL 1.0.0対応にせよ、不具合が残っているようであれば
reopenしてください。
=end

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0