1BER(3)                User Contributed Perl Documentation               BER(3)
2
3
4

NAME

6       Convert::BER - ASN.1 Basic Encoding Rules
7

SYNOPSIS

9           use Convert::BER;
10
11           $ber = new Convert::BER;
12
13           $ber->encode(
14               INTEGER => 1,
15               SEQUENCE => [
16                   BOOLEAN => 0,
17                   STRING => "Hello",
18               ],
19               REAL => 3.7,
20           );
21
22           $ber->decode(
23               INTEGER => \$i,
24               SEQUENCE => [
25                   BOOLEAN => \$b,
26                   STRING => \$s,
27               ],
28               REAL => \$r,
29           );
30

DESCRIPTION

32       "Convert::BER" provides an OO interface to encoding and decoding data
33       using the ASN.1 Basic Encoding Rules (BER), a platform independent way
34       of encoding structured binary data together with the structure.
35

METHODS

37       new
38       new ( BUFFER )
39       new ( opList )
40           "new" creates a new "Convert::BER" object.
41
42       encode ( opList )
43           Encode data in opList appending to the data in the buffer.
44
45       decode ( opList )
46           Decode the data in the buffer as described by opList, starting
47           where the last decode finished or position set by "pos".
48
49       buffer ( [ BUFFER ] )
50           Return the buffer contents. If BUFFER is specified set the buffer
51           contents and reset pos to zero.
52
53       pos ( [ POS ] )
54           Without any arguments "pos" returns the offset where the last
55           decode finished, or the last offset set by "pos". If POS is
56           specified then POS will be where the next decode starts.
57
58       tag ( )
59           Returns the tag at the current position in the buffer.
60
61       length ( )
62           Returns the length of the buffer.
63
64       error ( )
65           Returns the error message associated with the last method, if any.
66           This value is not automatically reset. If "encode" or "decode"
67           returns undef, check this.
68
69       dump ( [ FH ] )
70           Dump the buffer to the filehandle "FH", or STDERR if not specified.
71           The output contains the hex dump of each element, and an ASN.1-like
72           text representation of that element.
73
74       hexdump  ( [ FH ] )
75           Dump the buffer to the filehandle "FH", or STDERR if not specified.
76           The output is hex with the possibly-printable text alongside.
77

IO METHODS

79       read ( IO )
80       write ( IO )
81       recv ( SOCK )
82       send ( SOCK [, ADDR ] )
83

OPLIST

85       An opList is a list of operator-value pairs. An operator can be any of
86       those defined below, or any defined by sub-classing "Convert::BER",
87       which will probably be derived from the primitives given here.
88
89       The values depend on whether BER is being encoded or decoded:
90
91       Encoding
92           If the value is a scalar, just encode it. If the value is a
93           reference to a list, then encode each item in the list in turn. If
94           the value is a code reference, then execute the code. If the
95           returned value is a scalar, encode that value. If the returned
96           value is a reference to a list, encode each item in the list in
97           turn.
98
99       Decoding
100           If the value is a reference to a scalar, decode the value into the
101           scalar. If the value is a reference to a list, then decode all the
102           items of this type into the list. Note that there must be at least
103           one item to decode, otherwise the decode will fail. If the value is
104           a code reference, then execute the code and decode the value into
105           the reference returned from the evaluated code.
106

PRIMITIVE OPERATORS

108       These operators encode and decode the basic primitive types defined by
109       BER.
110
111   BOOLEAN
112       A BOOLEAN value is either true or false.
113
114       Encoding
115           The value is tested for boolean truth, and encoded appropriately.
116
117               # Encode a TRUE value
118               $ber->encode(
119                   BOOLEAN => 1,
120               ) or die;
121
122       Decoding
123           The decoded values will be either 1 or 0.
124
125               # Decode a boolean value into $bval
126               $ber->decode(
127                   BOOLEAN => \$bval,
128               ) or die;
129
130   INTEGER
131       An INTEGER value is either a positive whole number, or a negative whole
132       number, or zero. Numbers can either be native perl integers, or values
133       of the "Math::BigInt" class.
134
135       Encoding
136           The value is the integer value to be encoded.
137
138               $ber->encode(
139                   INTEGER => -123456,
140               ) or die;
141
142       Decoding
143           The value will be the decoded integer value.
144
145               $ber->decode(
146                   INTEGER => \$ival,
147               ) or die;
148
149   STRING
150       This is an OCTET STRING, which is an arbitrarily long binary value.
151
152       Encoding
153           The value contains the binary value to be encoded.
154
155               $ber->encode(
156                   STRING => "\xC0First character is hex C0",
157               ) or die;
158
159       Decoding
160           The value will be the binary bytes.
161
162               $ber->decode(
163                   STRING => \$sval,
164               ) or die;
165
166   NULL
167       There is no value for NULL. You often use NULL in ASN.1 when you want
168       to denote that something else is absent rather than just not encoding
169       the 'something else'.
170
171       Encoding
172           The values are ignored, but must be present.
173
174               $ber->encode(
175                   NULL => undef,
176               ) or die;
177
178       Decoding
179           Dummy values are stored in the returned values, as though they were
180           present in the encoding.
181
182               $ber->decode(
183                   NULL => \$nval,
184               ) or die;
185
186   OBJECT_ID
187       An OBJECT_ID value is an OBJECT IDENTIFIER (also called an OID). This
188       is a hierarchically structured value that is used in protocols to
189       uniquely identify something. For example, SNMP (the Simple Network
190       Management Protocol) uses OIDs to denote the information being
191       requested, and LDAP (the Lightweight Directory Access Protocol, RFC
192       2251) uses OIDs to denote each attribute in a directory entry.
193
194       Each level of the OID hierarchy is either zero or a positive integer.
195
196       Encoding
197           The value should be a dotted-decimal representation of the OID.
198
199               $ber->encode(
200                   OBJECT_ID => '2.5.4.0', # LDAP objectClass
201               ) or die;
202
203       Decoding
204           The value will be the dotted-decimal representation of the OID.
205
206               $ber->decode(
207                   OBJECT_ID => \$oval,
208               ) or die;
209
210   ENUM
211       The ENUMERATED type is effectively the same as the INTEGER type. It
212       exists so that friendly names can be assigned to certain integer
213       values. To be useful, you should sub-class this operator.
214
215   BIT_STRING
216       The BIT STRING type is an arbitrarily long string of bits - 0's and
217       1's.
218
219       Encoding
220           The value is a string of arbitrary 0 and 1 characters. As these are
221           packed into 8-bit octets when encoding and there may not be a
222           multiple of 8 bits to be encoded, trailing padding bits are added
223           in the encoding.
224
225               $ber->encode(
226                   BIT_STRING => '0011',
227               ) or die;
228
229       Decoding
230           The value will be a string of 0 and 1 characters. The string will
231           have the same number of bits as were encoded (the padding bits are
232           ignored.)
233
234               $ber->decode(
235                   BIT_STRING => \$bval,
236               ) or die;
237
238   BIT_STRING8
239       This is a variation of the BIT_STRING operator, which is optimized for
240       writing bit strings which are multiples of 8-bits in length. You can
241       use the BIT_STRING operator to decode BER encoded with the BIT_STRING8
242       operator (and vice-versa.)
243
244       Encoding
245           The value should be the packed bits to encode, not a string of 0
246           and 1 characters.
247
248               $ber->encode(
249                   BIT_STRING8 => pack('B8', '10110101'),
250               ) or die;
251
252       Decoding
253           The value will be the decoded packed bits.
254
255               $ber->decode(
256                   BIT_STRING8 => \$bval,
257               ) or die;
258
259   REAL
260       The REAL type encodes an floating-point number. It requires the POSIX
261       module.
262
263       Encoding
264           The value should be the number to encode.
265
266               $ber->encode(
267                   REAL => 3.14159265358979,
268               ) or die;
269
270       Decoding
271           The value will be the decoded floating-point value.
272
273               $ber->decode(
274                   REAL => \$rval,
275               );
276
277   ObjectDescriptor
278       The ObjectDescriptor type encodes an ObjectDescriptor string. It is a
279       sub-class of "STRING".
280
281   UTF8String
282       The UTF8String type encodes a string encoded in UTF-8. It is a sub-
283       class of "STRING".
284
285   NumericString
286       The NumericString type encodes a NumericString, which is defined to
287       only contain the characters 0-9 and space. It is a sub-class of
288       "STRING".
289
290   PrintableString
291       The PrintableString type encodes a PrintableString, which is defined to
292       only contain the characters A-Z, a-z, 0-9, space, and the punctuation
293       characters ()-+=:',./?. It is a sub-class of "STRING".
294
295   TeletexString/T61String
296       The TeletexString type encodes a TeletexString, which is a string
297       containing characters according to the T.61 character set. Each T.61
298       character may be one or more bytes wide. It is a sub-class of "STRING".
299
300       T61String is an alternative name for TeletexString.
301
302   VideotexString
303       The VideotexString type encodes a VideotexString, which is a string. It
304       is a sub-class of "STRING".
305
306   IA5String
307       The IA5String type encodes an IA5String. IA5 (International Alphabet 5)
308       is equivalent to US-ASCII. It is a sub-class of "STRING".
309
310   UTCTime
311       The UTCTime type encodes a UTCTime value. Note this value only
312       represents years using two digits, so it is not recommended in
313       Y2K-compliant applications. It is a sub-class of "STRING".
314
315       UTCTime values must be strings like:
316
317           yymmddHHMM[SS]Z
318       or:
319           yymmddHHMM[SS]sHHMM
320
321       Where yy is the year, mm is the month (01-12), dd is the day (01-31),
322       HH is the hour (00-23), MM is the minutes (00-60). SS is the optional
323       seconds (00-61).
324
325       The time is either terminated by the literal character Z, or a timezone
326       offset. The "Z" character indicates Zulu time or UTC. The timezone
327       offset specifies the sign s, which is + or -, and the difference in
328       hours and minutes.
329
330   GeneralizedTime
331       The GeneralizedTime type encodes a GeneralizedTime value. Unlike
332       "UTCTime" it represents years using 4 digits, so is Y2K-compliant. It
333       is a sub-class of "STRING".
334
335       GeneralizedTime values must be strings like:
336
337           yyyymmddHHMM[SS][.U][Z]
338       or:
339           yyyymmddHHMM[SS][.U]sHHMM
340
341       Where yyyy is the year, mm is the month (01-12), dd is the day (01-31),
342       HH is the hour (00-23), MM is the minutes (00-60). SS is the optional
343       seconds (00-61). U is the optional fractional seconds value; a comma is
344       permitted instead of a dot before this value.
345
346       The time may be terminated by the literal character Z, or a timezone
347       offset. The "Z" character indicates Zulu time or UTC. The timezone
348       offset specifies the sign s, which is + or -, and the difference in
349       hours and minutes. If there is timezone specified UTC is assumed.
350
351   GraphicString
352       The GraphicString type encodes a GraphicString value. It is a sub-class
353       of "STRING".
354
355   VisibleString/ISO646String
356       The VisibleString type encodes a VisibleString value, which is a value
357       using the ISO646 character set. It is a sub-class of "STRING".
358
359       ISO646String is an alternative name for VisibleString.
360
361   GeneralString
362       The GeneralString type encodes a GeneralString value. It is a sub-class
363       of "STRING".
364
365   UniversalString/CharacterString
366       The UniveralString type encodes a UniveralString value, which is a
367       value using the ISO10646 character set. Each character in ISO10646 is
368       4-bytes wide. It is a sub-class of "STRING".
369
370       CharacterString is an alternative name for UniversalString.
371
372   BMPString
373       The BMPString type encodes a BMPString value, which is a value using
374       the Unicode character set. Each character in the Unicode character set
375       is 2-bytes wide. It is a sub-class of "STRING".
376

CONSTRUCTED OPERATORS

378       These operators are used to build constructed types, which contain
379       values in different types, like a C structure.
380
381   SEQUENCE
382       A SEQUENCE is a complex type that contains other types, a bit like a C
383       structure. Elements inside a SEQUENCE are encoded and decoded in the
384       order given.
385
386       Encoding
387           The value should be a reference to an array containing another
388           opList which defines the elements inside the SEQUENCE.
389
390               $ber->encode(
391                   SEQUENCE => [
392                       INTEGER => 123,
393                       BOOLEAN => [ 1, 0 ],
394                   ]
395               ) or die;
396
397       Decoding
398           The value should a reference to an array that contains the opList
399           which decodes the contents of the SEQUENCE.
400
401               $ber->decode(
402                   SEQUENCE => [
403                       INTEGER => \$ival,
404                       BOOLEAN => \@bvals,
405                   ]
406               ) or die;
407
408   SET
409       A SET is an complex type that contains other types, rather like a
410       SEQUENCE. Elements inside a SET may be present in any order.
411
412       Encoding
413           The value is the same as for the SEQUENCE operator.
414
415               $ber->encode(
416                   SET => [
417                       INTEGER => 13,
418                       STRING => 'Hello',
419                   ]
420               ) or die;
421
422       Decoding
423           The value should be a reference to an equivalent opList to that
424           used to encode the SET. The ordering of the opList should not
425           matter.
426
427               $ber->decode(
428                   SET => [
429                       STRING => \$sval,
430                       INTEGER => \$ival,
431                   ]
432               ) or die;
433
434   SEQUENCE_OF
435       A SEQUENCE_OF is an ordered list of other types.
436
437       Encoding
438           The value is a ref followed by an opList. The ref must be a
439           reference to a list or a hash: if it is to a list, then the opList
440           will be repeated once for every element in the list. If it is to a
441           hash, then the opList will be repeated once for every key in the
442           hash (note that ordering of keys in a hash is not guaranteed by
443           perl.)
444
445           The remaining opList will then usually contain values which are
446           code references. If the ref is to a list, then the contents of that
447           item in the list are passed as the only argument to the code
448           reference. If the ref is to a hash, then only the key is passed to
449           the code.
450
451               @vals = ( [ 10, 'Foo' ], [ 20, 'Bar' ] ); # List of refs to lists
452               $ber->encode(
453                   SEQUENCE_OF => [ \@vals,
454                       SEQUENCE => [
455                           INTEGER => sub { $_[0][0] }, # Passed a ref to the inner list
456                           STRING => sub { $_[0][1] }, # Passed a ref to the inner list
457                       ]
458                   ]
459               ) or die;
460               %hash = ( 40 => 'Baz', 30 => 'Bletch' ); # Just a hash
461               $ber->decode(
462                   SEQUENCE_OF => [ \%hash,
463                       SEQUENCE => [
464                           INTEGER => sub { $_[0] }, # Passed the key
465                           STRING => sub { $hash{$_[0]} }, # Passed the key
466                       ]
467                   ]
468               );
469
470       Decoding
471           The value must be a reference to a list containing a ref and an
472           opList. The ref must always be a reference to a scalar. Each value
473           in the <opList> is usually a code reference. The code referenced is
474           called with the value of the ref (dereferenced); the value of the
475           ref is incremented for each item in the SEQUENCE_OF.
476
477               $ber->decode(
478                   SEQUENCE_OF => [ \$count,
479                       # In the following subs, make space at the end of an array, and
480                       # return a reference to that newly created space.
481                       SEQUENCE => [
482                           INTEGER => sub { $ival[$_[0]] = undef; \$ival[-1] },
483                           STRING => sub { $sval[$_[0]] = undef; \$sval[-1] },
484                       ]
485                   ]
486               ) or die;
487
488   SET_OF
489       A SET_OF is an unordered list. This is treated in an identical way to a
490       SEQUENCE_OF, except that no ordering should be inferred from the list
491       passed or returned.
492

SPECIAL OPERATORS

494   BER
495       It is sometimes useful to construct or deconstruct BER encodings in
496       several pieces. The BER operator lets you do this.
497
498       Encoding
499           The value should be another "Convert::BER" object, which will be
500           inserted into the buffer. If value is undefined then nothing is
501           added.
502
503               $tmp->encode(
504                   SEQUENCE => [
505                       INTEGER => 20,
506                       STRING => 'Foo',
507                   ]
508               );
509               $ber->encode(
510                   BER => $tmp,
511                   BOOLEAN => 1
512               );
513
514       Decoding
515           value should be a reference to a scalar, which will contain a
516           "Convert::BER" object. This object will contain the remainder of
517           the current sequence or set being decoded.
518
519               # After this, ber2 will contain the encoded INTEGER B<and> STRING.
520               # sval will be ignored and left undefined, but bval will be decoded. The
521               # decode of ber2 will return the integer and string values.
522               $ber->decode(
523                   SEQUENCE => [
524                       BER => \$ber2,
525                       STRING => \$sval,
526                   ],
527                   BOOLEAN => \$bval,
528               );
529               $ber2->decode(
530                   INTEGER => \$ival,
531                   STRING => \$sval2,
532               );
533
534   ANY
535       This is like the "BER" operator except that when decoding only the next
536       item is decoded and placed into the "Convert::BER" object returned.
537       There is no difference when encoding.
538
539       Decoding
540           value should be a reference to a scalar, which will contain a
541           "Convert::BER" object. This object will only contain the next
542           single item in the current sequence being decoded.
543
544               # After this, ber2 will decode further, and ival and sval
545               # will be decoded.
546               $ber->decode(
547                   INTEGER = \$ival,
548                   ANY => \$ber2,
549                   STRING => \$sval,
550               );
551
552   OPTIONAL
553       This operator allows you to specify that an element is absent from the
554       encoding.
555
556       Encoding
557           The value should be a reference to another list with another
558           opList. If all of the values of the inner opList are defined, the
559           entire OPTIONAL value will be encoded, otherwise it will be
560           omitted.
561
562               $ber->encode(
563                   SEQUENCE => [
564                       INTEGER => 16, # Will be encoded
565                       OPTIONAL => [
566                           INTEGER => undef, # Will not be encoded
567                       ],
568                       STRING => 'Foo', # Will be encoded
569                   ]
570               );
571
572       Decoding
573           The contents of value are decoded if possible, if not then decode
574           continues at the next operator-value pair.
575
576               $ber->decode(
577                   SEQUENCE => [
578                       INTEGER => \$ival1,
579                       OPTIONAL => [
580                           INTEGER => \$ival2,
581                       ],
582                       STRING => \$sval,
583                   ]
584               );
585
586   CHOICE
587       The opList is a list of alternate operator-value pairs. Only one will
588       be encoded, and only one will be decoded.
589
590       Encoding
591           A scalar at the start of the opList identifies which opList
592           alternative to use for encoding the value. A value of 0 means the
593           first one is used, 1 means the second one, etc.
594
595               # Encode the BMPString alternate of the CHOICE
596               $ber->encode(
597                   CHOICE => [ 2,
598                       PrintableString => 'Printable',
599                       TeletexString   => 'Teletex/T61',
600                       BMPString       => 'BMP/Unicode',
601                       UniversalString => 'Universal/ISO10646',
602                   ]
603               ) or die;
604
605       Decoding
606           A reference to a scalar at the start of the opList is used to store
607           which alternative is decoded (0 for the first one, 1 for the second
608           one, etc.) Pass undef instead of the ref if you don't care about
609           this, or you store all the alternate values in different variables.
610
611               # Decode the above.
612               # Afterwards, $alt will be set to 2, $str will be set to 'BMP/Unicode'.
613               $ber->decode(
614                   CHOICE => [ \$alt,
615                       PrintableString => \$str,
616                       TeletexString   => \$str,
617                       BMPString       => \$str,
618                       UniversalString => \$str,
619                   ]
620               ) or die;
621

TAGS

623       In BER everything being encoded has a tag, a length, and a value.
624       Normally the tag is derived from the operator - so INTEGER has a
625       different tag from a BOOLEAN, for instance.
626
627       In some applications it is necessary to change the tags used. For
628       example, a SET may need to contain two different INTEGER values. Tags
629       may be changed in two ways, either IMPLICITly or EXPLICITly. With
630       IMPLICIT tagging, the new tag completely replaces the old tag. With
631       EXPLICIT tagging, the new tag is used as well as the old tag.
632
633       "Convert::BER" supports two ways of using IMPLICIT tagging. One method
634       is to sub-class "Convert::BER", which is described in the next section.
635       For small applications or those that think sub-classing is just too
636       much then the operator may be passed an arrayref. The array must
637       contain two elements, the first is the usual operator name and the
638       second is the tag value to use, as shown below.
639
640           $ber->encode(
641               [ SEQUENCE => 0x34 ] => [
642                   INTEGER => 10,
643                   STRING  => "A"
644               ]
645           ) or die;
646
647       This will encode a sequence, with a tag value of 0x34, which will
648       contain and integer and a string which will have their default tag
649       values.
650
651       You may wish to construct your tags using some pre-defined functions
652       such as &Convert::BER::BER_APPLICATION, &Convert::BER::BER_CONTEXT,
653       etc, instead of calculating the tag values yourself.
654
655       To use EXPLICIT tagging, enclose the original element in a SEQUENCE,
656       and just override the SEQUENCE's tag as above. Don't forget to set the
657       constructed bit using &Convert::BER::BER_CONSTRUCTOR. For example, the
658       ASN.1 definition:
659
660           Foo ::= SEQUENCE {
661               [0] EXPLICIT INTEGER,
662               INTEGER
663           }
664
665       might be encoded using this:
666
667           $ber->encode(
668               SEQUENCE => [
669                   [ SEQUENCE => &Convert::BER::BER_CONTEXT |
670                                 &Convert::BER::BER_CONSTRUCTOR | 0 ] => [
671                       INTEGER => 10,
672                   ],
673                   INTEGER => 11,
674               ],
675           ) or die;
676

SUB-CLASSING

678       For large applications where operators with non default tags are used a
679       lot the above mechanism can be very error-prone. For this reason,
680       "Convert::BER" may be sub-classed.
681
682       To do this the sub-class must call a static method "define". The
683       arguments to "define" is a list of arrayrefs. Each arrayref will define
684       one new operator. Each arrayref contains three values, the first is the
685       name of the operator, the second is how the data is encoded and the
686       third is the tag value. To aid with the creation of these arguments
687       "Convert::BER" exports some variables and constant subroutines.
688
689       For each operator defined by "Convert::BER", or a "Convert::BER" sub-
690       class, a scalar variable with the same name is available for import,
691       for example $INTEGER is available from "Convert::BER". And any
692       operators defined by a new sub-class will be available for import from
693       that class.  One of these variables may be used as the second element
694       of each arrayref.
695
696       "Convert::BER" also exports some constant subroutines that can be used
697       to create the tag value. The subroutines exported are:
698
699               BER_BOOLEAN
700               BER_INTEGER
701               BER_BIT_STR
702               BER_OCTET_STR
703               BER_NULL
704               BER_OBJECT_ID
705               BER_SEQUENCE
706               BER_SET
707
708               BER_UNIVERSAL
709               BER_APPLICATION
710               BER_CONTEXT
711               BER_PRIVATE
712               BER_PRIMITIVE
713               BER_CONSTRUCTOR
714
715       "Convert::BER" also provides a subroutine called "ber_tag" to calculate
716       an integer value that will be used to represent a tag. For tags with
717       values less than 30 this is not needed, but for tags >= 30 then tag
718       value passed for an operator definition must be the result of "ber_tag"
719
720       "ber_tag" takes two arguments, the first is the tag class and the
721       second is the tag value.
722
723       Using this information a sub-class of Convert::BER can be created as
724       shown below.
725
726           package Net::LDAP::BER;
727
728           use Convert::BER qw(/^(\$|BER_)/);
729
730           use strict;
731           use vars qw($VERSION @ISA);
732
733           @ISA = qw(Convert::BER);
734           $VERSION = "1.00";
735
736           Net::LDAP::BER->define(
737
738             # Name            Type      Tag
739             ########################################
740
741             [ REQ_UNBIND     => $NULL,
742                                 BER_APPLICATION                   | 0x02 ],
743
744             [ REQ_COMPARE    => $SEQUENCE,
745                                 BER_APPLICATION | BER_CONSTRUCTOR | 0x0E ],
746
747             [ REQ_ABANDON    => $INTEGER,
748                                 ber_tag(BER_APPLICATION, 0x10) ],
749           );
750
751       This will create a new class "Net::LDAP::BER" which has three new
752       operators available. This class then may be used as follows
753
754           $ber = new Net::LDAP::BER;
755
756           $ber->encode(
757               REQ_UNBIND => 0,
758               REQ_COMPARE => [
759                   REQ_ABANDON => 123,
760               ]
761           );
762
763           $ber->decode(
764               REQ_UNBIND => \$var,
765               REQ_COMPARE => [
766                   REQ_ABANDON => \$num,
767               ]
768           );
769
770       Which will encode or decode the data using the formats and tags defined
771       in the "Net::LDAP::BER" sub-class. It also helps to make the code more
772       readable.
773
774   DEFINING NEW PACKING OPERATORS
775       As well as defining new operators which inherit from existing operators
776       it is also possible to define a new operator and how data is encoded
777       and decoded. The interface for doing this is still changing but will be
778       documented here when it is done. To be continued ...
779

LIMITATIONS

781       Convert::BER cannot support tags that contain more bits than can be
782       stored in a scalar variable, typically this is 32 bits.
783
784       Convert::BER cannot support items that have a packed length which
785       cannot be stored in 32 bits.
786

BUGS

788       The "SET" decode method fails if the encoded order is different to the
789       opList order.
790

AUTHOR

792       Graham Barr <gbarr@pobox.com>
793
794       Significant POD updates from Chris Ridd
795       <Chris.Ridd@messagingdirect.com>
796
798       Copyright (c) 1995-2000 Graham Barr. All rights reserved.  This program
799       is free software; you can redistribute it and/or modify it under the
800       same terms as Perl itself.
801

POD ERRORS

803       Hey! The above document had some coding errors, which are explained
804       below:
805
806       Around line 364:
807           You forgot a '=back' before '=head2'
808
809
810
811perl v5.12.0                      2001-03-21                            BER(3)
Impressum