diff options
author | Kazuki Yamaguchi <k@rhe.jp> | 2016-12-11 02:58:44 +0900 |
---|---|---|
committer | Kazuki Yamaguchi <k@rhe.jp> | 2017-07-23 13:32:35 +0900 |
commit | 22a944fe650efbd9aa685505757d8362773d3d34 (patch) | |
tree | 8da54ef11257b18dd53fd4863afe8b3c2ac1b09a | |
parent | a2b32a48274b592911b91b28072e6f277fa5e116 (diff) | |
download | ruby-openssl-22a944fe650efbd9aa685505757d8362773d3d34.tar.gz |
asn1: allow tag number to be >= 32 for universal tag class
There are actually high-tag universal types such as the time-of-day
type.
-rw-r--r-- | ext/openssl/ossl_asn1.c | 4 | ||||
-rw-r--r-- | test/test_asn1.rb | 2 |
2 files changed, 2 insertions, 4 deletions
diff --git a/ext/openssl/ossl_asn1.c b/ext/openssl/ossl_asn1.c index dfbffecf..95abc321 100644 --- a/ext/openssl/ossl_asn1.c +++ b/ext/openssl/ossl_asn1.c @@ -661,8 +661,6 @@ ossl_asn1data_initialize(VALUE self, VALUE value, VALUE tag, VALUE tag_class) { if(!SYMBOL_P(tag_class)) ossl_raise(eASN1Error, "invalid tag class"); - if (tag_class == sym_UNIVERSAL && NUM2INT(tag) > 31) - ossl_raise(eASN1Error, "tag number for Universal too large"); ossl_asn1_set_tag(self, tag); ossl_asn1_set_value(self, value); ossl_asn1_set_tag_class(self, tag_class); @@ -1085,8 +1083,6 @@ ossl_asn1_initialize(int argc, VALUE *argv, VALUE self) } if(!SYMBOL_P(tag_class)) ossl_raise(eASN1Error, "invalid tag class"); - if (tagging == sym_IMPLICIT && NUM2INT(tag) > 31) - ossl_raise(eASN1Error, "tag number for Universal too large"); } else{ tag = INT2NUM(default_tag); diff --git a/test/test_asn1.rb b/test/test_asn1.rb index 978ab315..bb3b8168 100644 --- a/test/test_asn1.rb +++ b/test/test_asn1.rb @@ -416,6 +416,8 @@ class OpenSSL::TestASN1 < OpenSSL::TestCase encode_decode_test B(%w{ 41 00 }), OpenSSL::ASN1::ASN1Data.new(B(%w{}), 1, :APPLICATION) encode_decode_test B(%w{ 81 00 }), OpenSSL::ASN1::ASN1Data.new(B(%w{}), 1, :CONTEXT_SPECIFIC) encode_decode_test B(%w{ C1 00 }), OpenSSL::ASN1::ASN1Data.new(B(%w{}), 1, :PRIVATE) + encode_decode_test B(%w{ 1F 20 00 }), OpenSSL::ASN1::ASN1Data.new(B(%w{}), 32, :UNIVERSAL) + encode_decode_test B(%w{ 1F C0 20 00 }), OpenSSL::ASN1::ASN1Data.new(B(%w{}), 8224, :UNIVERSAL) encode_decode_test B(%w{ 41 02 AB CD }), OpenSSL::ASN1::ASN1Data.new(B(%w{ AB CD }), 1, :APPLICATION) encode_decode_test B(%w{ 41 81 80 } + %w{ AB CD } * 64), OpenSSL::ASN1::ASN1Data.new(B(%w{ AB CD } * 64), 1, :APPLICATION) encode_decode_test B(%w{ 41 82 01 00 } + %w{ AB CD } * 128), OpenSSL::ASN1::ASN1Data.new(B(%w{ AB CD } * 128), 1, :APPLICATION) |