Bug #2604

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

Added by taca (Takahiro Kambe) over 2 years ago. Updated about 1 year ago.

[ruby-dev:40077]
Status:Rejected Start date:01/14/2010
Priority:Low Due date:
Assignee:nahi (Hiroshi Nakamura) % 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

related to ruby-trunk - Feature #2022: Patch for openssl-1.0 Closed 08/31/2009

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してください。

Also available in: Atom PDF