Class: OpenSSL::ASN1::Primitive
- Includes:
- TaggedASN1Data
- Defined in:
- ossl_asn1.c,
lib/openssl/asn1.rb,
ossl_asn1.c more...
Overview
The parent class for all primitive encodings. Attributes are the same as for ASN1Data, with the addition of tagging. Primitive values can never be encoded with indefinite length form, thus it is not possible to set the indefinite_length attribute for Primitive and its sub-classes.
Primitive sub-classes and their mapping to Ruby classes
-
OpenSSL::ASN1::EndOfContent <=> value is always
nil
-
OpenSSL::ASN1::Boolean <=> value is
true
orfalse
-
OpenSSL::ASN1::Integer <=> value is an OpenSSL::BN
-
OpenSSL::ASN1::BitString <=> value is a String
-
OpenSSL::ASN1::OctetString <=> value is a String
-
OpenSSL::ASN1::Null <=> value is always
nil
-
OpenSSL::ASN1::Object <=> value is a String
-
OpenSSL::ASN1::Enumerated <=> value is an OpenSSL::BN
-
OpenSSL::ASN1::UTF8String <=> value is a String
-
OpenSSL::ASN1::NumericString <=> value is a String
-
OpenSSL::ASN1::PrintableString <=> value is a String
-
OpenSSL::ASN1::T61String <=> value is a String
-
OpenSSL::ASN1::VideotexString <=> value is a String
-
OpenSSL::ASN1::IA5String <=> value is a String
-
OpenSSL::ASN1::UTCTime <=> value is a Time
-
OpenSSL::ASN1::GeneralizedTime <=> value is a Time
-
OpenSSL::ASN1::GraphicString <=> value is a String
-
OpenSSL::ASN1::ISO64String <=> value is a String
-
OpenSSL::ASN1::GeneralString <=> value is a String
-
OpenSSL::ASN1::UniversalString <=> value is a String
-
OpenSSL::ASN1::BMPString <=> value is a String
OpenSSL::ASN1::BitString
Additional attributes
unused_bits: if the underlying BIT STRING’s length is a multiple of 8 then unused_bits is 0. Otherwise unused_bits indicates the number of bits that are to be ignored in the final octet of the BitString’s value.
OpenSSL::ASN1::ObjectId
NOTE: While OpenSSL::ASN1::ObjectId.new will allocate a new ObjectId, it is not typically allocated this way, but rather that are received from parsed ASN1 encodings.
Additional attributes
-
sn: the short name as defined in <openssl/objects.h>.
-
ln: the long name as defined in <openssl/objects.h>.
-
oid: the object identifier as a String, e.g. “1.2.3.4.5”
-
short_name: alias for sn.
-
long_name: alias for ln.
Examples
With the Exception of OpenSSL::ASN1::EndOfContent, each Primitive class constructor takes at least one parameter, the value.
Creating EndOfContent
eoc = OpenSSL::ASN1::EndOfContent.new
Creating any other Primitive
prim = <class>.new(value) # <class> being one of the sub-classes except EndOfContent
prim_zero_tagged_implicit = <class>.new(value, 0, :IMPLICIT)
prim_zero_tagged_explicit = <class>.new(value, 0, :EXPLICIT)
Direct Known Subclasses
Instance Attribute Summary
Attributes included from TaggedASN1Data
Attributes inherited from ASN1Data
#indefinite_length, #tag, #tag_class, #value
Instance Method Summary collapse
-
#to_der ⇒ DER-encoded String
See ASN1Data#to_der for details.
Methods included from TaggedASN1Data
Methods inherited from ASN1Data
Instance Method Details
permalink #to_der ⇒ DER-encoded String
See ASN1Data#to_der for details.
1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 |
# File 'ossl_asn1.c', line 1027
static VALUE
ossl_asn1prim_to_der(VALUE self)
{
ASN1_TYPE *asn1;
long alllen, bodylen;
unsigned char *p0, *p1;
int j, tag, tc, state;
VALUE str;
if (ossl_asn1_default_tag(self) == -1) {
str = ossl_asn1_get_value(self);
return to_der_internal(self, 0, 0, StringValue(str));
}
asn1 = ossl_asn1_get_asn1type(self);
alllen = i2d_ASN1_TYPE(asn1, NULL);
if (alllen < 0) {
ASN1_TYPE_free(asn1);
ossl_raise(eASN1Error, "i2d_ASN1_TYPE");
}
str = ossl_str_new(NULL, alllen, &state);
if (state) {
ASN1_TYPE_free(asn1);
rb_jump_tag(state);
}
p0 = p1 = (unsigned char *)RSTRING_PTR(str);
if (i2d_ASN1_TYPE(asn1, &p0) < 0) {
ASN1_TYPE_free(asn1);
ossl_raise(eASN1Error, "i2d_ASN1_TYPE");
}
ASN1_TYPE_free(asn1);
ossl_str_adjust(str, p0);
/* Strip header since to_der_internal() wants only the payload */
j = ASN1_get_object((const unsigned char **)&p1, &bodylen, &tag, &tc, alllen);
if (j & 0x80)
ossl_raise(eASN1Error, "ASN1_get_object"); /* should not happen */
return to_der_internal(self, 0, 0, rb_str_drop_bytes(str, alllen - bodylen));
}
|