/home/cpanrun/depot/main/contrib-patched/perl/CPAN/src/Encoding-BER/blib/html/site/lib/Encoding/BER.html


METHOD/pre <dl> <dt><strong><a name=``new'' class=``item''>new(option =&gt; value, ...)</a></strong>

<dd> <p>constructor.</p> </dd> <dd> <pre> <span class=``variable''>example</span><span class=``operator''>:</span> <span class=``keyword''>my</span> <span class=``variable''>$enc</span> <span class=``operator''>=</span> <span class=``variable''>Encoding::BER</span><span class=``operator''>-&gt;</span><span class=``variable''>new</span><span class=``operator''>(</span> <span class=``string''>error</span> <span class=``operator''>=&gt;</span> <span class=``keyword''>sub</span><span class=``operator''>{</span> <span class=``keyword''>die</span> <span class=``string''>``</span><span class=''variable``>$_</span><span class=''string``>[1]\n''</span> <span class=``operator''>}</span> <span class=``operator''>);</span> </pre> </dd> <dd> <p>the following options are available:</p> </dd> <dl> <dt><strong><a name=``error'' class=``item''>error</a></strong>

<dd> <p>coderef called if there is an error. will be called with 2 parameters, the Encoding::BER object, and the error message.</p> </dd> <dd> <pre> <span class=``comment''># example: die on error</span> <span class=``string''>error</span> <span class=``operator''>=&gt;</span> <span class=``keyword''>sub</span><span class=``operator''>{</span> <span class=``keyword''>die</span> <span class=``string''>``oops! </span><span class=''variable``>$_</span><span class=''string``>[1]\n''</span> <span class=``operator''>}</span>


    <span class="comment">=item warn
    </span>
</pre>
</dd>
<dd>
<p>coderef called if there is something to warn about. will be called with 2 parameters,
the Encoding::BER object, and the error message.</p>
</dd>
<dd>
<pre>
    <span class="comment"># example: warn for warnings</span>
    <span class="string">warn</span> <span class="operator">=&gt;</span> <span class="keyword">sub</span><span class="operator">{</span> <span class="keyword">warn</span> <span class="string">"how odd! </span><span class="variable">$_</span><span class="string">[1]\n"</span> <span class="operator">}</span>
</pre>
</dd>
</li>
<dt><strong><a name="decoded_callback" class="item">decoded_callback</a></strong>

<dd> <p>coderef called for every element decoded. will be called with 2 parameters, the Encoding::BER object, and the decoded data. [see DECODED DATA]</p> </dd> <dd> <pre> <span class=``comment''># example: bless decoded results into a useful class</span> <span class=``string''>decoded_callback</span> <span class=``operator''>=&gt;</span> <span class=``keyword''>sub</span><span class=``operator''>{</span> <span class=``keyword''>bless</span> <span class=``variable''>$_</span><span class=``operator''>[</span><span class=``number''>1</span><span class=``operator''>]</span><span class=``operator''>,</span> <span class=``variable''>MyBER::Result</span> <span class=``operator''>}</span>


    <span class="comment">=item debug
    </span>
</pre>
</dd>
<dd>
<p>boolean. if true, large amounts of useless gibberish will be sent to stderr regarding
the encoding or decoding process.</p>
</dd>
<dd>
<pre>
    # example: enable gibberish output
    debug =&gt; 1</pre>
</dd>
</li>
</dl>
<dt><strong><a name="add_implicit_tag" class="item">add_implicit_tag(class, type, tag-name, tag-number, base-tag)</a></strong>

<dd> <p>add a new tag similar to another tag. class should be one of <code>universal</code>, <code>application</code>, <code>context</code>, or <code>private</code>. type should be either <code>primitive</code> or <code>contructed</code>. tag-name should specify the name of the new tag. tag-number should be the numeric tag number. base-tag should specify the name of the tag this is equivalent to.</p> </dd> <dd> <pre> <span class=``variable''>example</span><span class=``operator''>:</span> <span class=``variable''>add</span> <span class=``variable''>a</span> <span class=``variable''>tagged</span> <span class=``variable''>integer</span> <span class=``variable''>in</span> <span class=``variable''>ASN</span><span class=``number''>.1</span><span class=``operator''>:</span> <span class=``variable''>width</span><span class=``operator''>-</span><span class=``keyword''>index</span> <span class=``variable''>::</span><span class=``operator''>=</span> <span class=``operator''>[</span><span class=``variable''>context</span> <span class=``number''>42</span><span class=``operator''>]</span> <span class=``variable''>implicit</span> <span class=``variable''>integer</span>


    <span class="variable">$ber</span><span class="operator">-&gt;</span><span class="variable">add_implicit_tag</span><span class="operator">(</span><span class="string">'context'</span><span class="operator">,</span> <span class="string">'primitive'</span><span class="operator">,</span> <span class="string">'width-index'</span><span class="operator">,</span> <span class="number">42</span><span class="operator">,</span> <span class="string">'integer'</span><span class="operator">);</span>
</pre>
</dd>
</li>
<dt><strong><a name="encode" class="item">encode( data )</a></strong>

<dd> <p>BER encode the provided data. [see: ENCODING DATA]</p> </dd> <dd> <pre> <span class=``variable''>example</span><span class=``operator''>:</span> <span class=``keyword''>my</span> <span class=``variable''>$ber</span> <span class=``operator''>=</span> <span class=``variable''>$enc</span><span class=``operator''>-&gt;</span><span class=``variable''>encode</span><span class=``operator''>(</span> <span class=``operator''>[</span><span class=``number''>0</span><span class=``operator''>,</span> <span class=``string''>'public'</span><span class=``operator''>,</span> <span class=``operator''>[</span><span class=``number''>7.3</span><span class=``operator''>,</span> <span class=``number''>0</span><span class=``operator''>,</span> <span class=``number''>0</span><span class=``operator''>,</span> <span class=``operator''>[</span><span class=``string''>'foo'</span><span class=``operator''>,</span> <span class=``string''>'bar'</span><span class=``operator''>]]]</span> <span class=``operator''>);</span> </pre> </dd> </li> <dt><strong><a name=``decode'' class=``item''>decode( ber )</a></strong>

<dd> <p>Decode the provided BER encoded data. returns a perl data structure. [see: DECODED DATA]</p> </dd> <dd> <pre> <span class=``variable''>example</span><span class=``operator''>:</span> <span class=``keyword''>my</span> <span class=``variable''>$data</span> <span class=``operator''>=</span> <span class=``variable''>$enc</span><span class=``operator''>-&gt;</span><span class=``variable''>decode</span><span class=``operator''>(</span> <span class=``variable''>$ber</span> <span class=``operator''>);</span> </pre> </dd> </li> </dl> <p> </p> <hr /> <h1><a name=``encoding_data''>ENCODING DATA</a></h1> <p>You can give data to the encoder in either of two ways (or mix and match).</p> <p>You can specify simple values directly, and the module will guess the correct tags to use. Things that look like integers will be encoded as <code>integer</code>, things that look like floating-point numbers will be encoded as <code>real</code>, things that look like strings, will be encoded as <code>octet_string</code>. Arrayrefs will be encoded as <code>sequence</code>.</p> <pre> <span class=``variable''>example</span><span class=``operator''>:</span> <span class=``variable''>$enc</span><span class=``operator''>-&gt;</span><span class=``variable''>encode</span><span class=``operator''>(</span> <span class=``operator''>[</span><span class=``number''>0</span><span class=``operator''>,</span> <span class=``number''>1.2</span><span class=``operator''>,</span> <span class=``string''>``foobar''</span><span class=``operator''>,</span> <span class=``operator''>[</span> <span class=``string''>``baz''</span><span class=``operator''>,</span> <span class=``number''>37.94</span> <span class=``operator''>]]</span> <span class=``operator''>);</span> </pre> <p>Alternatively, you can explicity specify the type using a hashref containing <code>type</code> and <code>value</code> keys.</p> <pre> <span class=``variable''>example</span><span class=``operator''>:</span> <span class=``variable''>$enc</span><span class=``operator''>-&gt;</span><span class=``variable''>encode</span><span class=``operator''>(</span> <span class=``operator''>{</span> <span class=``string''>type</span> <span class=``operator''>=&gt;</span> <span class=``string''>'sequence'</span><span class=``operator''>,</span> <span class=``string''>value</span> <span class=``operator''>=&gt;</span> <span class=``operator''>[</span> <span class=``operator''>{</span> <span class=``string''>type</span> <span class=``operator''>=&gt;</span> <span class=``string''>'integer'</span><span class=``operator''>,</span> <span class=``string''>value</span> <span class=``operator''>=&gt;</span> <span class=``number''>37</span> <span class=``operator''>}</span> <span class=``operator''>]</span> <span class=``operator''>}</span> <span class=``operator''>);</span> </pre> <p>The type may be specfied as either a string containg the tag-name, or as an arryref containing the class, type, and tag-name.</p> <pre> example: type =&gt; 'octet_string' type =&gt; ['universal', 'primitive', 'octet_string']</pre> <p>Note: using the second form above, you can create wacky encodings that no one will be able to decode.</p> <pre>

The value should be a scalar value for primitive types, and an arrayref for constructed types.</pre> <pre> <span class=``variable''>example</span><span class=``operator''>:</span> <span class=``operator''>{</span> <span class=``string''>type</span> <span class=``operator''>=&gt;</span> <span class=``string''>'octet_string'</span><span class=``operator''>,</span> <span class=``string''>value</span> <span class=``operator''>=&gt;</span> <span class=``string''>'foobar'</span> <span class=``operator''>}</span> <span class=``operator''>{</span> <span class=``string''>type</span> <span class=``operator''>=&gt;</span> <span class=``string''>'set'</span><span class=``operator''>,</span> <span class=``string''>value</span> <span class=``operator''>=&gt;</span> <span class=``operator''>[</span> <span class=``number''>1</span><span class=``operator''>,</span> <span class=``number''>2</span><span class=``operator''>,</span> <span class=``number''>3</span> <span class=``operator''>]</span> <span class=``operator''>}</span> </pre> <pre> <span class=``operator''>{</span> <span class=``string''>type</span> <span class=``operator''>=&gt;</span> <span class=``operator''>[</span><span class=``string''>'universal'</span><span class=``operator''>,</span> <span class=``string''>'constructed'</span><span class=``operator''>,</span> <span class=``string''>'octet_string'</span><span class=``operator''>]</span><span class=``operator''>,</span> <span class=``string''>value</span> <span class=``operator''>=&gt;</span> <span class=``operator''>[</span> <span class=``string''>'foo'</span><span class=``operator''>,</span> <span class=``string''>'bar'</span> <span class=``operator''>]</span> <span class=``operator''>}</span> </pre> <p> </p> <hr /> <h1><a name=``decoded_data''>DECODED DATA</a></h1> <p>The values returned from decoding will be similar to the way data to be encoded is specified, in the full long form. Additionally, the hashref will contain: <code>identval</code> the numeric value representing the class+type+tag and <code>tagnum</code> the numeric tag number.</p> <pre> <span class=``variable''>example</span><span class=``operator''>:</span> <span class=``variable''>a</span> <span class=``variable''>string</span> <span class=``variable''>might</span> <span class=``variable''>be</span> <span class=``variable''>returned</span> <span class=``variable''>as</span><span class=``operator''>:</span> <span class=``operator''>{</span> <span class=``string''>type</span> <span class=``operator''>=&gt;</span> <span class=``operator''>[</span><span class=``string''>'universal'</span><span class=``operator''>,</span> <span class=``string''>'primitive'</span><span class=``operator''>,</span> <span class=``string''>'octet_string'</span><span class=``operator''>]</span><span class=``operator''>,</span> <span class=``string''>identval</span> <span class=``operator''>=&gt;</span> <span class=``number''>4</span><span class=``operator''>,</span> <span class=``string''>tagnum</span> <span class=``operator''>=&gt;</span> <span class=``number''>4</span><span class=``operator''>,</span> <span class=``string''>value</span> <span class=``operator''>=&gt;</span> <span class=``string''>'foobar'</span><span class=``operator''>,</span> <span class=``operator''>}</span> </pre> <p> </p> <hr /> <h1><a name=``tag_names''>TAG NAME/a</h1> <p>The following are recognized as valid names of tags:</p> <pre> bit_string bmp_string bool boolean character_string embedded_pdv enum enumerated external float general_string generalized_time graphic_string ia5_string int int32 integer integer32 iso646_string null numeric_string object_descriptor object_identifier octet_string oid printable_string real relative_object_identifier relative_oid roid sequence sequence_of set set_of string t61_string teletex_string uint uint32 universal_string universal_time unsigned_int unsigned_int32 unsigned_integer utf8_string videotex_string visible_string</pre> <p> </p> <hr /> <h1><a name=``math__bigint''>Math::BigInt</a></h1> <p>If you have Math::BigInt, it can be used for large integers. If you want it used, you must load it yourself:</p> <pre> <span class=``keyword''>use</span> <span class=``variable''>Math::BigInt</span><span class=``operator''>;</span> <span class=``keyword''>use</span> <span class=``variable''>Encoding::BER</span><span class=``operator''>;</span> </pre> <p>It can be used for both encoding and decoding. The encoder can be handed either a Math::BigInt object, or a &quot;big string of digits&quot; marked as an integer:</p> <pre> <span class=``keyword''>use</span> <span class=``variable''>math::BigInt</span><span class=``operator''>;</span> </pre> <pre> <span class=``keyword''>my</span> <span class=``variable''>$x</span> <span class=``operator''>=</span> <span class=``variable''>Math::BigInt</span><span class=``operator''>-&gt;</span><span class=``variable''>new</span><span class=``operator''>(</span> <span class=``string''>'12345678901234567890'</span> <span class=``operator''>);</span> <span class=``variable''>$enc</span><span class=``operator''>-&gt;</span><span class=``variable''>encode</span><span class=``operator''>(</span> <span class=``variable''>$x</span> <span class=``operator''>)</span> </pre> <pre> <span class=``variable''>$enc</span><span class=``operator''>-&gt;</span><span class=``variable''>encode</span><span class=``operator''>(</span> <span class=``operator''>{</span> <span class=``string''>type</span> <span class=``operator''>=&gt;</span> <span class=``string''>'integer'</span><span class=``operator''>,</span> <span class=``string''>'12345678901234567890'</span> <span class=``operator''>}</span> <span class=``operator''>);</span> </pre> <p>During decoding, a Math::BigInt object will be created if the value &quot;looks big&quot;.</p> <pre>


=head1 EXPORTS</pre>
<p>By default, this module exports nothing. This can be overridden by specifying
something else:</p>
<pre>
    <span class="keyword">use</span> <span class="variable">Encoding::BER</span> <span class="operator">(</span><span class="string">'import'</span><span class="operator">,</span> <span class="string">'hexdump'</span><span class="operator">);</span>
</pre>
<p>
</p>
<hr />
<h1><a name="limitations">LIMITATIONS</a></h1>
<p>If your application uses the same tag-number for more than one type of implicitly
tagged primitive, the decoder will not be able to distinguish between them, and will
not be able to decode them both correctly. eg:</p>
<pre>
    width ::= [context 12] implicit integer
    girth ::= [context 12] implicit real

</pre> <p>If you specify data to be encoded using the &quot;short form&quot;, the module may guess the type differently than you expect. If it matters, be explicit.</p> <p>This module does not do data validation. It will happily let you encode a non-ascii string as a <code>ia5_string</code>, etc.</p> <pre>


=head1 PREREQUISITES

</pre> <p>If you wish to use <code>real</code>s, the POSIX module is required. It will be loaded automatically, if needed.</p> <p>Familiarity with ASN.1 and BER encoding is probably required to take advantage of this module.</p> <p> </p> <hr /> <h1><a name=``see_also_yellowstone_national_park_encoding__ber__cer__encoding__ber__der_encoding__ber__snmp__encoding__ber__dumper_itu_t_x_690__head1_author''>SEE ALSO


    Yellowstone National Park
    Encoding::BER::CER, Encoding::BER::DER
    Encoding::BER::SNMP, Encoding::BER::Dumper
    ITU-T x.690

=head1 AUTHOR</a></h1>
<pre>
    Jeff Weisberg - <a href="http://www.tcp4me.com";>http://www.tcp4me.com<;/a>

</pre>

</body>

</html>

 /home/cpanrun/depot/main/contrib-patched/perl/CPAN/src/Encoding-BER/blib/html/site/lib/Encoding/BER.html