Feature #4309 » class_tag_map3.diff
ruby/ext/openssl/ossl_asn1.c (working copy) | ||
---|---|---|
int ossl_asn1_info_size = (sizeof(ossl_asn1_info)/sizeof(ossl_asn1_info[0]));
|
||
static VALUE class_tag_map;
|
||
static int ossl_asn1_default_tag(VALUE obj);
|
||
ASN1_TYPE*
|
||
... | ... | |
static int
|
||
ossl_asn1_default_tag(VALUE obj)
|
||
{
|
||
int i;
|
||
VALUE tmp_class = CLASS_OF(obj);
|
||
while (tmp_class) {
|
||
VALUE tag = rb_hash_lookup(class_tag_map, tmp_class);
|
||
if (tag != Qnil) {
|
||
return NUM2INT(tag);
|
||
}
|
||
tmp_class = RCLASS_SUPER(tmp_class);
|
||
}
|
||
for(i = 0; i < ossl_asn1_info_size; i++){
|
||
if(ossl_asn1_info[i].klass &&
|
||
rb_obj_is_kind_of(obj, *ossl_asn1_info[i].klass)){
|
||
return i;
|
||
}
|
||
}
|
||
ossl_raise(eASN1Error, "universal tag for %s not found",
|
||
rb_class2name(CLASS_OF(obj)));
|
||
... | ... | |
rb_attr(cASN1BitString, rb_intern("unused_bits"), 1, 1, 0);
|
||
rb_define_method(cASN1EndOfContent, "initialize", ossl_asn1eoc_initialize, 0);
|
||
class_tag_map = rb_hash_new();
|
||
rb_hash_aset(class_tag_map, cASN1EndOfContent, INT2NUM(0));
|
||
rb_hash_aset(class_tag_map, cASN1Boolean, INT2NUM(1));
|
||
rb_hash_aset(class_tag_map, cASN1Integer, INT2NUM(2));
|
||
rb_hash_aset(class_tag_map, cASN1BitString, INT2NUM(3));
|
||
rb_hash_aset(class_tag_map, cASN1OctetString, INT2NUM(4));
|
||
rb_hash_aset(class_tag_map, cASN1Null, INT2NUM(5));
|
||
rb_hash_aset(class_tag_map, cASN1ObjectId, INT2NUM(6));
|
||
rb_hash_aset(class_tag_map, cASN1Enumerated, INT2NUM(10));
|
||
rb_hash_aset(class_tag_map, cASN1UTF8String, INT2NUM(12));
|
||
rb_hash_aset(class_tag_map, cASN1Sequence, INT2NUM(16));
|
||
rb_hash_aset(class_tag_map, cASN1Set, INT2NUM(17));
|
||
rb_hash_aset(class_tag_map, cASN1NumericString, INT2NUM(18));
|
||
rb_hash_aset(class_tag_map, cASN1PrintableString, INT2NUM(19));
|
||
rb_hash_aset(class_tag_map, cASN1T61String, INT2NUM(20));
|
||
rb_hash_aset(class_tag_map, cASN1VideotexString, INT2NUM(21));
|
||
rb_hash_aset(class_tag_map, cASN1IA5String, INT2NUM(22));
|
||
rb_hash_aset(class_tag_map, cASN1UTCTime, INT2NUM(23));
|
||
rb_hash_aset(class_tag_map, cASN1GeneralizedTime, INT2NUM(24));
|
||
rb_hash_aset(class_tag_map, cASN1GraphicString, INT2NUM(25));
|
||
rb_hash_aset(class_tag_map, cASN1ISO64String, INT2NUM(26));
|
||
rb_hash_aset(class_tag_map, cASN1GeneralString, INT2NUM(27));
|
||
rb_hash_aset(class_tag_map, cASN1UniversalString, INT2NUM(28));
|
||
rb_hash_aset(class_tag_map, cASN1BMPString, INT2NUM(30));
|
||
class_tag_map = rb_obj_freeze(class_tag_map);
|
||
rb_define_const(mASN1, "CLASS_TAG_MAP", class_tag_map);
|
||
}
|
ruby/test/openssl/test_asn1.rb (working copy) | ||
---|---|---|
end
|
||
end
|
||
|
||
def test_default_tag_of_class
|
||
assert_equal(0, OpenSSL::ASN1::CLASS_TAG_MAP[OpenSSL::ASN1::EndOfContent])
|
||
assert_equal(1, OpenSSL::ASN1::CLASS_TAG_MAP[OpenSSL::ASN1::Boolean])
|
||
assert_equal(2, OpenSSL::ASN1::CLASS_TAG_MAP[OpenSSL::ASN1::Integer])
|
||
assert_equal(3, OpenSSL::ASN1::CLASS_TAG_MAP[OpenSSL::ASN1::BitString])
|
||
assert_equal(4, OpenSSL::ASN1::CLASS_TAG_MAP[OpenSSL::ASN1::OctetString])
|
||
assert_equal(5, OpenSSL::ASN1::CLASS_TAG_MAP[OpenSSL::ASN1::Null])
|
||
assert_equal(6, OpenSSL::ASN1::CLASS_TAG_MAP[OpenSSL::ASN1::ObjectId])
|
||
assert_equal(10, OpenSSL::ASN1::CLASS_TAG_MAP[OpenSSL::ASN1::Enumerated])
|
||
assert_equal(12, OpenSSL::ASN1::CLASS_TAG_MAP[OpenSSL::ASN1::UTF8String])
|
||
assert_equal(16, OpenSSL::ASN1::CLASS_TAG_MAP[OpenSSL::ASN1::Sequence])
|
||
assert_equal(17, OpenSSL::ASN1::CLASS_TAG_MAP[OpenSSL::ASN1::Set])
|
||
assert_equal(18, OpenSSL::ASN1::CLASS_TAG_MAP[OpenSSL::ASN1::NumericString])
|
||
assert_equal(19, OpenSSL::ASN1::CLASS_TAG_MAP[OpenSSL::ASN1::PrintableString])
|
||
assert_equal(20, OpenSSL::ASN1::CLASS_TAG_MAP[OpenSSL::ASN1::T61String])
|
||
assert_equal(21, OpenSSL::ASN1::CLASS_TAG_MAP[OpenSSL::ASN1::VideotexString])
|
||
assert_equal(22, OpenSSL::ASN1::CLASS_TAG_MAP[OpenSSL::ASN1::IA5String])
|
||
assert_equal(23, OpenSSL::ASN1::CLASS_TAG_MAP[OpenSSL::ASN1::UTCTime])
|
||
assert_equal(24, OpenSSL::ASN1::CLASS_TAG_MAP[OpenSSL::ASN1::GeneralizedTime])
|
||
assert_equal(25, OpenSSL::ASN1::CLASS_TAG_MAP[OpenSSL::ASN1::GraphicString])
|
||
assert_equal(26, OpenSSL::ASN1::CLASS_TAG_MAP[OpenSSL::ASN1::ISO64String])
|
||
assert_equal(27, OpenSSL::ASN1::CLASS_TAG_MAP[OpenSSL::ASN1::GeneralString])
|
||
assert_equal(28, OpenSSL::ASN1::CLASS_TAG_MAP[OpenSSL::ASN1::UniversalString])
|
||
assert_equal(30, OpenSSL::ASN1::CLASS_TAG_MAP[OpenSSL::ASN1::BMPString])
|
||
end
|
||
|
||
def test_class_tag_map_is_frozen
|
||
assert_raises(RuntimeError) do
|
||
OpenSSL::ASN1::CLASS_TAG_MAP[self.class] = 99
|
||
end
|
||
end
|
||
|
||
end if defined?(OpenSSL)
|
- « Previous
- 1
- 2
- 3
- Next »