Class: OpenSSL::ASN1::Constructive
- Includes:
- Enumerable, TaggedASN1Data
- Defined in:
- ossl_asn1.c,
lib/openssl/asn1.rb,
ossl_asn1.c
Overview
The parent class for all constructed encodings. The value attribute of a Constructive is always an Array. Attributes are the same as for ASN1Data, with the addition of tagging.
SET and SEQUENCE
Most constructed encodings come in the form of a SET or a SEQUENCE. These encodings are represented by one of the two sub-classes of Constructive:
-
OpenSSL::ASN1::Set
-
OpenSSL::ASN1::Sequence
Please note that tagged sequences and sets are still parsed as instances of ASN1Data. Find further details on tagged values there.
Example - constructing a SEQUENCE
int = OpenSSL::ASN1::Integer.new(1)
str = OpenSSL::ASN1::PrintableString.new('abc')
sequence = OpenSSL::ASN1::Sequence.new( [ int, str ] )
Example - constructing a SET
int = OpenSSL::ASN1::Integer.new(1)
str = OpenSSL::ASN1::PrintableString.new('abc')
set = OpenSSL::ASN1::Set.new( [ int, str ] )
Instance Attribute Summary
Attributes included from TaggedASN1Data
Attributes inherited from ASN1Data
#indefinite_length, #tag, #tag_class, #value
Instance Method Summary collapse
-
#each(&blk) ⇒ Object
:call-seq: asn1_ary.each { |asn1| block } => asn1_ary.
-
#to_der ⇒ DER-encoded String
See ASN1Data#to_der for details.
Methods included from TaggedASN1Data
Methods inherited from ASN1Data
Instance Method Details
#each(&blk) ⇒ Object
:call-seq:
asn1_ary.each { |asn1| block } => asn1_ary
Calls the given block once for each element in self, passing that element as parameter asn1. If no block is given, an enumerator is returned instead.
Example
asn1_ary.each do |asn1|
puts asn1
end
148 149 150 151 152 |
# File 'lib/openssl/asn1.rb', line 148 def each(&blk) @value.each(&blk) self end |
#to_der ⇒ DER-encoded String
See ASN1Data#to_der for details.
1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 |
# File 'ossl_asn1.c', line 1074
static VALUE
ossl_asn1cons_to_der(VALUE self)
{
VALUE ary, str;
long i;
int indef_len;
indef_len = RTEST(ossl_asn1_get_indefinite_length(self));
ary = rb_convert_type(ossl_asn1_get_value(self), T_ARRAY, "Array", "to_a");
str = rb_str_new(NULL, 0);
for (i = 0; i < RARRAY_LEN(ary); i++) {
VALUE item = RARRAY_AREF(ary, i);
if (indef_len && rb_obj_is_kind_of(item, cASN1EndOfContent)) {
if (i != RARRAY_LEN(ary) - 1)
ossl_raise(eASN1Error, "illegal EOC octets in value");
/*
* EOC is not really part of the content, but we required to add one
* at the end in the past.
*/
break;
}
item = ossl_to_der_if_possible(item);
StringValue(item);
rb_str_append(str, item);
}
return to_der_internal(self, 1, indef_len, str);
}
|