[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Libtasn1-commit] [SCM] GNU libtasn1 branch, master, updated. libtasn1_2
From: |
Simon Josefsson |
Subject: |
[Libtasn1-commit] [SCM] GNU libtasn1 branch, master, updated. libtasn1_2_5-15-gf03292a |
Date: |
Tue, 30 Mar 2010 15:50:04 +0000 |
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU libtasn1".
http://git.savannah.gnu.org/cgit/libtasn1.git/commit/?id=f03292a814680d47164c14d40c586138207c2109
The branch, master has been updated
via f03292a814680d47164c14d40c586138207c2109 (commit)
from 0c3f2e71860f17ff9f95591856cedcc3f3dd809b (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit f03292a814680d47164c14d40c586138207c2109
Author: Simon Josefsson <address@hidden>
Date: Tue Mar 30 17:50:00 2010 +0200
Remove generated file.
-----------------------------------------------------------------------
Summary of changes:
doc/cyclo/cyclo-libtasn1.html | 8876 -----------------------------------------
1 files changed, 0 insertions(+), 8876 deletions(-)
delete mode 100644 doc/cyclo/cyclo-libtasn1.html
diff --git a/doc/cyclo/cyclo-libtasn1.html b/doc/cyclo/cyclo-libtasn1.html
deleted file mode 100644
index 9d69953..0000000
--- a/doc/cyclo/cyclo-libtasn1.html
+++ /dev/null
@@ -1,8876 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html401/loose.dtd">
-<html>
-<!-- Generated by gnulib's pmccabe2html at 1236177370 -->
-<head>
-<title>Cyclomatic Complexity report for libtasn1</title>
-
-<meta name="description" content="Cyclomatic Complexity report for libtasn1">
-<meta name="keywords" content="Cyclomatic Complexity report for libtasn1">
-<meta name="resource-type" content="document">
-<meta name="distribution" content="global">
-<meta name="Generator" content="pmccabe2html">
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<script language="javascript" type="text/javascript">
-function show_hide(idCapa, idButton, fuerzaVisibilidad){ var button =
document.getElementById(idButton); var capa =
document.getElementById(idCapa); if (capa) { if
(fuerzaVisibilidad && fuerzaVisibilidad!="") { if
(fuerzaVisibilidad=="visible") capa.style.display="";
else capa.style.display="none"; } else {
if (capa.style.display == "none") {
capa.style.display = ""; button.innerHTML =
"↑"; } else {
capa.style.display = "none"; button.innerHTML =
"↓"; } } }}
-</script>
-<style type ="text/css" media="screen">
-<!--
-body {
-
- font-family: Helvetica, sans-serif;
-
-}
-
-.page_title {
-
- font: 18pt Georgia, serif;
-/* font-size: 1.5em;
- font-weight: bold; */
- color: darkred;
- border-bottom: 2px solid darkred;
-}
-
-.section_title {
-
- font: 14pt Georgia, serif;
- color: darkred;
- border-bottom: 2px dashed darkred;
-}
-
-.report_timestamp {
-
- color: darkred;
- font-weight: bold;
-
-}
-
-.function_src {
-
- text-align: left;
- background: white;
-}
-
-.resume_table {
-
-}
-
-.resume_header_entry {
-
- color: black;
-}
-
-.resume_number_entry {
-
- color: darkred;
- font-weight: bold;
- text-align: right;
-}
-
-.ranges_table {
-
- border-spacing: 0px;
- border-bottom: solid 2px black;
- border-top: solid 2px black;
- border-left: solid 2px black;
- border-right: solid 2px black;
-}
-
-.ranges_header_entry {
-
- padding: 5px;
- border-bottom: solid 1px black;
- font-size: 1em;
- font-weight: bold;
- color: darkred;
- text-align: left;
-}
-
-.ranges_entry {
-
-}
-
-.ranges_entry_simple {
-
- background: #87ff75;
-
-}
-
-.ranges_entry_moderate {
-
- background: #fffc60;
-
-}
-
-.ranges_entry_high {
-
- background: #ff5a5d;
-
-}
-
-.ranges_entry_untestable {
-
- background: #993300
-
-}
-
-
-.function_table {
-
- border-spacing: 0px;
- border-bottom: solid 2px black;
- border-top: solid 2px black;
- border-left: solid 2px black;
- border-right: solid 2px black;
-}
-
-.function_table_caption {
-
- font-size: 1.1em;
- font-weight: bold;
- color: black;
- padding: 5px;
-}
-
-.function_table_header {
-
-}
-
-
-.function_table_header_entry {
-
- padding: 5px;
- border-bottom: solid 1px black;
- font-size: 1em;
- font-weight: bold;
- color: darkred;
- text-align: left;
-}
-
-.function_entry {
-
-
-}
-
-
-.function_entry_simple {
-
- background: #87ff75;
-
-}
-
-.function_entry_moderate {
-
- background: #fffc60;
-
-}
-
-.function_entry_high {
-
- background: #ff5a5d;
-
-}
-
-.function_entry_untestable {
-
- background: #993300
-
-}
-
-
-.function_entry_name {
-
- font-size: 1em;
- text-align: left;
- font-weight: bold;
- text-valign: top;
-
- border-top: solid 1px black;
- padding: 3px;
-}
-
-.function_entry_cyclo {
-
- font-size: 1em;
- text-align: right;
- text-valign: top;
-
- border-top: solid 1px black;
- padding: 3px;
-}
-
-.function_entry_number {
-
- font-size: 1em;
- text-align: right;
- text-valign: top;
-
- border-top: solid 1px black;
- padding: 3px;
-}
-
-.function_entry_filename {
-
- font-size: 1em;
- text-align: left;
- text-valign: top;
-
- border-top: solid 1px black;
- padding: 3px;
-}
-
-.sidemenu {
-
- border: 1px black solid;
- padding: 5px;
-
-}
-
-.sidemenuheader {
-
- color: darkred;
- font-size: 1.1em;
- font-weight: bold;
- border-bottom: 1px dashed darkred;
-}
-
-.sidemenuentry {
-
-
-}
-
-.menu {
-
-}
-
--->
-</style />
-</head>
-<body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF"
vlink="#800080" alink="#FF0000">
-<a href="http://josefsson.org/libtasn1/">Back to libtasn1
Homepage</a><br/><br/>
-<div class="page_title">libtasn1 Cyclomatic Complexity Report</div>
-<p>Report generated at: <span class="report_timestamp">Wed Mar 04 15:36:10 CET
2009</div></p>
-<div class="section_title">Resume</div>
-<br/>
-<table class="resume_table">
-<tr>
-<td class="resume_header_entry">
-Total number of functions
-</td>
-<td class="resume_number_entry">
-98
-</td>
-</tr>
-<tr>
-<td class="resume_header_entry">
-Number of low risk functions
-</td>
-<td class="resume_number_entry">
-64
-</td>
-</tr>
-<tr>
-<td class="resume_header_entry">
-Number of moderate risk functions
-</td>
-<td class="resume_number_entry">
-17
-</td>
-</tr>
-<tr>
-<td class="resume_header_entry">
-Number of high risk functions
-</td>
-<td class="resume_number_entry">
-9
-</td>
-</tr>
-<tr>
-<td class="resume_header_entry">
-Number of untestable functions
-</td>
-<td class="resume_number_entry">
-8
-</td>
-</tr>
-</table>
-<br/>
-<div class="section_title">Details for all functions</div>
-<p>Used ranges:</p>
-<table class="ranges_table">
-<tr>
-<td class="ranges_header_entry">
-
-</td>
-<td class="ranges_header_entry">
-Cyclomatic Complexity
-</td>
-<td class="ranges_header_entry">
-Risk Evaluation
-</td>
-</tr>
-<tr>
-<td class="ranges_entry_simple">
-
-</td>
-<td class="ranges_entry">
-0 - 10
-</td>
-<td class="ranges_entry">
-Simple module, without much risk
-</td>
-</tr>
-<tr>
-<td class="ranges_entry_moderate">
-
-</td>
-<td class="ranges_entry">
-11 - 20
-</td>
-<td class="ranges_entry">
-More complex module, moderate risk
-</td>
-</tr>
-<tr>
-<td class="ranges_entry_high">
-
-</td>
-<td class="ranges_entry">
-21 - 50
-</td>
-<td class="ranges_entry">
-Complex module, high risk
-</td>
-</tr>
-<tr>
-<td class="ranges_entry_untestable">
-
-</td>
-<td class="ranges_entry">
-greater than 50
-</td>
-<td class="ranges_entry">
-Untestable module, very high risk
-</td>
-</tr>
-</table>
-<br/>
-<table width="90%" class="function_table" cellpadding="0" cellspacing="0">
-<tr class="function_table_header">
-<td class="function_table_header_entry">
-
-</td>
-<td class="function_table_header_entry">
-Function Name
-</td>
-<td class="function_table_header_entry">
-Cyclomatic
-<br/>
-Complexity
-</td>
-<td class="function_table_header_entry">
-Number of
-<br/>
-Statements
-</td>
-<td class="function_table_header_entry">
-Number of
-<br/>
-Lines
-</td>
-<td class="function_table_header_entry">
-Source File
-</td>
-</tr>
-<tr class="function_entry_untestable">
-<td class="function_entry_filename">
-<a href="javascript:void(0);" title="show/hide function source"
onClick="javascript:show_hide('asn1_der_decoding_element_src',
'asn1_der_decoding_element_button')"><span
id="asn1_der_decoding_element_button">↓</span></a>
-</td>
-<td class="function_entry_name">
-asn1_der_decoding_element
-</td>
-<td class="function_entry_cyclo">
-154
-</td>
-<td class="function_entry_number">
-399
-</td>
-<td class="function_entry_number">
-738
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/decoding.c;hb=HEAD">lib/decoding.c</a>
-</td>
-</tr>
-<tr>
-<td colspan="6" height="0">
-<div id="asn1_der_decoding_element_src" class="function_src" style="position:
relative; display: none;">
-<pre class="function_src">
-asn1_retCode
-asn1_der_decoding_element (ASN1_TYPE * structure, const char *elementName,
- const void *ider, int len, char *errorDescription)
-{
- ASN1_TYPE node, p, p2, p3, nodeFound = ASN1_TYPE_EMPTY;
- char temp[128], currentName[ASN1_MAX_NAME_SIZE * 10], *dot_p, *char_p;
- int nameLen = ASN1_MAX_NAME_SIZE * 10 - 1, state;
- int counter, len2, len3, len4, move, ris, tlen;
- unsigned char class, *temp2;
- unsigned long tag;
- int indefinite, result;
- const unsigned char *der = ider;
-
- node = *structure;
-
- if (node == ASN1_TYPE_EMPTY)
- return ASN1_ELEMENT_NOT_FOUND;
-
- if (elementName == NULL)
- {
- asn1_delete_structure (structure);
- return ASN1_ELEMENT_NOT_FOUND;
- }
-
- if (node->type & CONST_OPTION)
- {
- asn1_delete_structure (structure);
- return ASN1_GENERIC_ERROR;
- }
-
- if ((*structure)->name)
- { /* Has *structure got a name? */
- nameLen -= strlen ((*structure)->name);
- if (nameLen > 0)
- strcpy (currentName, (*structure)->name);
- else
- {
- asn1_delete_structure (structure);
- return ASN1_MEM_ERROR;
- }
- if (!(strcmp (currentName, elementName)))
- {
- state = FOUND;
- nodeFound = *structure;
- }
- else if (!memcmp (currentName, elementName, strlen (currentName)))
- state = SAME_BRANCH;
- else
- state = OTHER_BRANCH;
- }
- else
- { /* *structure doesn't have a name? */
- currentName[0] = 0;
- if (elementName[0] == 0)
- {
- state = FOUND;
- nodeFound = *structure;
- }
- else
- {
- state = SAME_BRANCH;
- }
- }
-
- counter = 0;
- move = DOWN;
- p = node;
- while (1)
- {
-
- ris = ASN1_SUCCESS;
-
- if (move != UP)
- {
- if (p->type & CONST_SET)
- {
- p2 = _asn1_find_up (p);
- len2 = strtol (p2->value, NULL, 10);
- if (counter == len2)
- {
- p = p2;
- move = UP;
- continue;
- }
- else if (counter > len2)
- {
- asn1_delete_structure (structure);
- return ASN1_DER_ERROR;
- }
- p2 = p2->down;
- while (p2)
- {
- if ((p2->type & CONST_SET) && (p2->type & CONST_NOT_USED))
- {
- if (type_field (p2->type) != TYPE_CHOICE)
- ris =
- _asn1_extract_tag_der (p2, der + counter,
- len - counter, &len2);
- else
- {
- p3 = p2->down;
- while (p3)
- {
- ris =
- _asn1_extract_tag_der (p3, der + counter,
- len - counter,
&len2);
- if (ris == ASN1_SUCCESS)
- break;
- p3 = p3->right;
- }
- }
- if (ris == ASN1_SUCCESS)
- {
- p2->type &= ~CONST_NOT_USED;
- p = p2;
- break;
- }
- }
- p2 = p2->right;
- }
- if (p2 == NULL)
- {
- asn1_delete_structure (structure);
- return ASN1_DER_ERROR;
- }
- }
-
- if ((p->type & CONST_OPTION) || (p->type & CONST_DEFAULT))
- {
- p2 = _asn1_find_up (p);
- len2 = strtol (p2->value, NULL, 10);
- if (counter == len2)
- {
- if (p->right)
- {
- p2 = p->right;
- move = RIGHT;
- }
- else
- move = UP;
-
- if (p->type & CONST_OPTION)
- asn1_delete_structure (&p);
-
- p = p2;
- continue;
- }
- }
-
- if (type_field (p->type) == TYPE_CHOICE)
- {
- while (p->down)
- {
- if (counter < len)
- ris =
- _asn1_extract_tag_der (p->down, der + counter,
- len - counter, &len2);
- else
- ris = ASN1_DER_ERROR;
- if (ris == ASN1_SUCCESS)
- {
- while (p->down->right)
- {
- p2 = p->down->right;
- asn1_delete_structure (&p2);
- }
- break;
- }
- else if (ris == ASN1_ERROR_TYPE_ANY)
- {
- asn1_delete_structure (structure);
- return ASN1_ERROR_TYPE_ANY;
- }
- else
- {
- p2 = p->down;
- asn1_delete_structure (&p2);
- }
- }
-
- if (p->down == NULL)
- {
- if (!(p->type & CONST_OPTION))
- {
- asn1_delete_structure (structure);
- return ASN1_DER_ERROR;
- }
- }
- else
- p = p->down;
- }
-
- if ((p->type & CONST_OPTION) || (p->type & CONST_DEFAULT))
- {
- p2 = _asn1_find_up (p);
- len2 = strtol (p2->value, NULL, 10);
- if (counter > len2)
- ris = ASN1_TAG_ERROR;
- }
-
- if (ris == ASN1_SUCCESS)
- ris =
- _asn1_extract_tag_der (p, der + counter, len - counter,
&len2);
- if (ris != ASN1_SUCCESS)
- {
- if (p->type & CONST_OPTION)
- {
- p->type |= CONST_NOT_USED;
- move = RIGHT;
- }
- else if (p->type & CONST_DEFAULT)
- {
- _asn1_set_value (p, NULL, 0);
- move = RIGHT;
- }
- else
- {
- if (errorDescription != NULL)
- _asn1_error_description_tag_error (p, errorDescription);
-
- asn1_delete_structure (structure);
- return ASN1_TAG_ERROR;
- }
- }
- else
- counter += len2;
- }
-
- if (ris == ASN1_SUCCESS)
- {
- switch (type_field (p->type))
- {
- case TYPE_NULL:
- if (der[counter])
- {
- asn1_delete_structure (structure);
- return ASN1_DER_ERROR;
- }
-
- if (p == nodeFound)
- state = EXIT;
-
- counter++;
- move = RIGHT;
- break;
- case TYPE_BOOLEAN:
- if (der[counter++] != 1)
- {
- asn1_delete_structure (structure);
- return ASN1_DER_ERROR;
- }
-
- if (state == FOUND)
- {
- if (der[counter++] == 0)
- _asn1_set_value (p, "F", 1);
- else
- _asn1_set_value (p, "T", 1);
-
- if (p == nodeFound)
- state = EXIT;
-
- }
- else
- counter++;
-
- move = RIGHT;
- break;
- case TYPE_INTEGER:
- case TYPE_ENUMERATED:
- len2 =
- asn1_get_length_der (der + counter, len - counter, &len3);
- if (len2 < 0)
- return ASN1_DER_ERROR;
- if (state == FOUND)
- {
- if (len3 + len2 > len - counter)
- return ASN1_DER_ERROR;
- _asn1_set_value (p, der + counter, len3 + len2);
-
- if (p == nodeFound)
- state = EXIT;
- }
- counter += len3 + len2;
- move = RIGHT;
- break;
- case TYPE_OBJECT_ID:
- if (state == FOUND)
- {
- _asn1_get_objectid_der (der + counter, len - counter,
&len2,
- temp, sizeof (temp));
- tlen = strlen (temp);
-
- if (tlen > 0)
- _asn1_set_value (p, temp, tlen + 1);
-
- if (p == nodeFound)
- state = EXIT;
- }
- else
- {
- len2 =
- asn1_get_length_der (der + counter, len - counter,
&len3);
- if (len2 < 0)
- return ASN1_DER_ERROR;
- len2 += len3;
- }
-
- counter += len2;
- move = RIGHT;
- break;
- case TYPE_TIME:
- if (state == FOUND)
- {
- result =
- _asn1_get_time_der (der + counter, len - counter, &len2,
- temp, sizeof (temp) - 1);
- if (result != ASN1_SUCCESS)
- {
- asn1_delete_structure (structure);
- return result;
- }
-
- tlen = strlen (temp);
- if (tlen > 0)
- _asn1_set_value (p, temp, tlen + 1);
-
- if (p == nodeFound)
- state = EXIT;
- }
- else
- {
- len2 =
- asn1_get_length_der (der + counter, len - counter,
&len3);
- if (len2 < 0)
- return ASN1_DER_ERROR;
- len2 += len3;
- }
-
- counter += len2;
- move = RIGHT;
- break;
- case TYPE_OCTET_STRING:
- len3 = len - counter;
- if (state == FOUND)
- {
- ris = _asn1_get_octet_string (der + counter, p, &len3);
- if (p == nodeFound)
- state = EXIT;
- }
- else
- ris = _asn1_get_octet_string (der + counter, NULL, &len3);
-
- if (ris != ASN1_SUCCESS)
- return ris;
- counter += len3;
- move = RIGHT;
- break;
- case TYPE_GENERALSTRING:
- len2 =
- asn1_get_length_der (der + counter, len - counter, &len3);
- if (len2 < 0)
- return ASN1_DER_ERROR;
- if (state == FOUND)
- {
- if (len3 + len2 > len - counter)
- return ASN1_DER_ERROR;
- _asn1_set_value (p, der + counter, len3 + len2);
-
- if (p == nodeFound)
- state = EXIT;
- }
- counter += len3 + len2;
- move = RIGHT;
- break;
- case TYPE_BIT_STRING:
- len2 =
- asn1_get_length_der (der + counter, len - counter, &len3);
- if (len2 < 0)
- return ASN1_DER_ERROR;
- if (state == FOUND)
- {
- if (len3 + len2 > len - counter)
- return ASN1_DER_ERROR;
- _asn1_set_value (p, der + counter, len3 + len2);
-
- if (p == nodeFound)
- state = EXIT;
- }
- counter += len3 + len2;
- move = RIGHT;
- break;
- case TYPE_SEQUENCE:
- case TYPE_SET:
- if (move == UP)
- {
- len2 = strtol (p->value, NULL, 10);
- _asn1_set_value (p, NULL, 0);
- if (len2 == -1)
- { /* indefinite length method */
- if ((der[counter]) || der[counter + 1])
- {
- asn1_delete_structure (structure);
- return ASN1_DER_ERROR;
- }
- counter += 2;
- }
- else
- { /* definite length method */
- if (len2 != counter)
- {
- asn1_delete_structure (structure);
- return ASN1_DER_ERROR;
- }
- }
- if (p == nodeFound)
- state = EXIT;
- move = RIGHT;
- }
- else
- { /* move==DOWN || move==RIGHT */
- if (state == OTHER_BRANCH)
- {
- len3 =
- asn1_get_length_der (der + counter, len - counter,
- &len2);
- if (len3 < 0)
- return ASN1_DER_ERROR;
- counter += len2 + len3;
- move = RIGHT;
- }
- else
- { /* state==SAME_BRANCH or state==FOUND */
- len3 =
- asn1_get_length_der (der + counter, len - counter,
- &len2);
- if (len3 < 0)
- return ASN1_DER_ERROR;
- counter += len2;
- if (len3 > 0)
- {
- _asn1_ltostr (counter + len3, temp);
- tlen = strlen (temp);
-
- if (tlen > 0)
- _asn1_set_value (p, temp, tlen + 1);
- move = DOWN;
- }
- else if (len3 == 0)
- {
- p2 = p->down;
- while (p2)
- {
- if (type_field (p2->type) != TYPE_TAG)
- {
- p3 = p2->right;
- asn1_delete_structure (&p2);
- p2 = p3;
- }
- else
- p2 = p2->right;
- }
- move = RIGHT;
- }
- else
- { /* indefinite length method */
- _asn1_set_value (p, "-1", 3);
- move = DOWN;
- }
- }
- }
- break;
- case TYPE_SEQUENCE_OF:
- case TYPE_SET_OF:
- if (move == UP)
- {
- len2 = strtol (p->value, NULL, 10);
- if (len2 > counter)
- {
- _asn1_append_sequence_set (p);
- p = p->down;
- while (p->right)
- p = p->right;
- move = RIGHT;
- continue;
- }
- _asn1_set_value (p, NULL, 0);
- if (len2 != counter)
- {
- asn1_delete_structure (structure);
- return ASN1_DER_ERROR;
- }
-
- if (p == nodeFound)
- state = EXIT;
- }
- else
- { /* move==DOWN || move==RIGHT */
- if (state == OTHER_BRANCH)
- {
- len3 =
- asn1_get_length_der (der + counter, len - counter,
- &len2);
- if (len3 < 0)
- return ASN1_DER_ERROR;
- counter += len2 + len3;
- move = RIGHT;
- }
- else
- { /* state==FOUND or state==SAME_BRANCH */
- len3 =
- asn1_get_length_der (der + counter, len - counter,
- &len2);
- if (len3 < 0)
- return ASN1_DER_ERROR;
- counter += len2;
- if (len3)
- {
- _asn1_ltostr (counter + len3, temp);
- tlen = strlen (temp);
-
- if (tlen > 0)
- _asn1_set_value (p, temp, tlen + 1);
- p2 = p->down;
- while ((type_field (p2->type) == TYPE_TAG)
- || (type_field (p2->type) == TYPE_SIZE))
- p2 = p2->right;
- if (p2->right == NULL)
- _asn1_append_sequence_set (p);
- p = p2;
- state = FOUND;
- }
- }
- }
-
- break;
- case TYPE_ANY:
- if (asn1_get_tag_der
- (der + counter, len - counter, &class, &len2,
- &tag) != ASN1_SUCCESS)
- return ASN1_DER_ERROR;
- if (counter + len2 > len)
- return ASN1_DER_ERROR;
-
- len4 =
- asn1_get_length_der (der + counter + len2,
- len - counter - len2, &len3);
- if (len4 < -1)
- return ASN1_DER_ERROR;
-
- if (len4 != -1)
- {
- len2 += len4;
- if (state == FOUND)
- {
- _asn1_set_value_octet (p, der+counter, len2+len3);
- temp2 = NULL;
-
- if (p == nodeFound)
- state = EXIT;
- }
- counter += len2 + len3;
- }
- else
- { /* indefinite length */
- /* Check indefinite lenth method in an EXPLICIT TAG */
- if ((p->type & CONST_TAG) && (der[counter - 1] == 0x80))
- indefinite = 1;
- else
- indefinite = 0;
-
- len2 = len - counter;
- ris =
- _asn1_get_indefinite_length_string (der + counter,
&len2);
- if (ris != ASN1_SUCCESS)
- {
- asn1_delete_structure (structure);
- return ris;
- }
-
- if (state == FOUND)
- {
- _asn1_set_value_octet (p, der+counter, len2);
-
- if (p == nodeFound)
- state = EXIT;
- }
-
- counter += len2;
-
- /* Check if a couple of 0x00 are present due to an EXPLICIT
TAG with
- an indefinite length method. */
- if (indefinite)
- {
- if (!der[counter] && !der[counter + 1])
- {
- counter += 2;
- }
- else
- {
- asn1_delete_structure (structure);
- return ASN1_DER_ERROR;
- }
- }
- }
- move = RIGHT;
- break;
-
- default:
- move = (move == UP) ? RIGHT : DOWN;
- break;
- }
- }
-
- if ((p == node && move != DOWN) || (state == EXIT))
- break;
-
- if (move == DOWN)
- {
- if (p->down)
- {
- p = p->down;
-
- if (state != FOUND)
- {
- nameLen -= strlen (p->name) + 1;
- if (nameLen > 0)
- {
- if (currentName[0])
- strcat (currentName, ".");
- strcat (currentName, p->name);
- }
- else
- {
- asn1_delete_structure (structure);
- return ASN1_MEM_ERROR;
- }
- if (!(strcmp (currentName, elementName)))
- {
- state = FOUND;
- nodeFound = p;
- }
- else
- if (!memcmp
- (currentName, elementName, strlen (currentName)))
- state = SAME_BRANCH;
- else
- state = OTHER_BRANCH;
- }
- }
- else
- move = RIGHT;
- }
-
- if ((move == RIGHT) && !(p->type & CONST_SET))
- {
- if (p->right)
- {
- p = p->right;
-
- if (state != FOUND)
- {
- dot_p = char_p = currentName;
- while ((char_p = strchr (char_p, '.')))
- {
- dot_p = char_p++;
- dot_p++;
- }
-
- nameLen += strlen (currentName) - (dot_p - currentName);
- *dot_p = 0;
-
- nameLen -= strlen (p->name);
- if (nameLen > 0)
- strcat (currentName, p->name);
- else
- {
- asn1_delete_structure (structure);
- return ASN1_MEM_ERROR;
- }
-
- if (!(strcmp (currentName, elementName)))
- {
- state = FOUND;
- nodeFound = p;
- }
- else
- if (!memcmp
- (currentName, elementName, strlen (currentName)))
- state = SAME_BRANCH;
- else
- state = OTHER_BRANCH;
- }
- }
- else
- move = UP;
- }
-
- if (move == UP)
- {
- p = _asn1_find_up (p);
-
- if (state != FOUND)
- {
- dot_p = char_p = currentName;
- while ((char_p = strchr (char_p, '.')))
- {
- dot_p = char_p++;
- dot_p++;
- }
-
- nameLen += strlen (currentName) - (dot_p - currentName);
- *dot_p = 0;
-
- if (!(strcmp (currentName, elementName)))
- {
- state = FOUND;
- nodeFound = p;
- }
- else
- if (!memcmp (currentName, elementName, strlen (currentName)))
- state = SAME_BRANCH;
- else
- state = OTHER_BRANCH;
- }
- }
- }
-
- _asn1_delete_not_used (*structure);
-
- if (counter > len)
- {
- asn1_delete_structure (structure);
- return ASN1_DER_ERROR;
- }
-
- return ASN1_SUCCESS;
-}
-</pre>
-</div>
-</td>
-</tr>
-<tr class="function_entry_untestable">
-<td class="function_entry_filename">
-<a href="javascript:void(0);" title="show/hide function source"
onClick="javascript:show_hide('asn1_der_decoding_src',
'asn1_der_decoding_button')"><span
id="asn1_der_decoding_button">↓</span></a>
-</td>
-<td class="function_entry_name">
-asn1_der_decoding
-</td>
-<td class="function_entry_cyclo">
-118
-</td>
-<td class="function_entry_number">
-301
-</td>
-<td class="function_entry_number">
-520
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/decoding.c;hb=HEAD">lib/decoding.c</a>
-</td>
-</tr>
-<tr>
-<td colspan="6" height="0">
-<div id="asn1_der_decoding_src" class="function_src" style="position:
relative; display: none;">
-<pre class="function_src">
-asn1_retCode
-asn1_der_decoding (ASN1_TYPE * element, const void *ider, int len,
- char *errorDescription)
-{
- ASN1_TYPE node, p, p2, p3;
- char temp[128];
- int counter, len2, len3, len4, move, ris, tlen;
- unsigned char class;
- unsigned long tag;
- int indefinite, result;
- const unsigned char *der = ider;
-
- node = *element;
-
- if (node == ASN1_TYPE_EMPTY)
- return ASN1_ELEMENT_NOT_FOUND;
-
- if (node->type & CONST_OPTION)
- {
- asn1_delete_structure (element);
- return ASN1_GENERIC_ERROR;
- }
-
- counter = 0;
- move = DOWN;
- p = node;
- while (1)
- {
- ris = ASN1_SUCCESS;
- if (move != UP)
- {
- if (p->type & CONST_SET)
- {
- p2 = _asn1_find_up (p);
- len2 = strtol (p2->value, NULL, 10);
- if (len2 == -1)
- {
- if (!der[counter] && !der[counter + 1])
- {
- p = p2;
- move = UP;
- counter += 2;
- continue;
- }
- }
- else if (counter == len2)
- {
- p = p2;
- move = UP;
- continue;
- }
- else if (counter > len2)
- {
- asn1_delete_structure (element);
- return ASN1_DER_ERROR;
- }
- p2 = p2->down;
- while (p2)
- {
- if ((p2->type & CONST_SET) && (p2->type & CONST_NOT_USED))
- {
- if (type_field (p2->type) != TYPE_CHOICE)
- ris =
- _asn1_extract_tag_der (p2, der + counter,
- len - counter, &len2);
- else
- {
- p3 = p2->down;
- while (p3)
- {
- ris =
- _asn1_extract_tag_der (p3, der + counter,
- len - counter,
&len2);
- if (ris == ASN1_SUCCESS)
- break;
- p3 = p3->right;
- }
- }
- if (ris == ASN1_SUCCESS)
- {
- p2->type &= ~CONST_NOT_USED;
- p = p2;
- break;
- }
- }
- p2 = p2->right;
- }
- if (p2 == NULL)
- {
- asn1_delete_structure (element);
- return ASN1_DER_ERROR;
- }
- }
-
- if ((p->type & CONST_OPTION) || (p->type & CONST_DEFAULT))
- {
- p2 = _asn1_find_up (p);
- len2 = strtol (p2->value, NULL, 10);
- if (counter == len2)
- {
- if (p->right)
- {
- p2 = p->right;
- move = RIGHT;
- }
- else
- move = UP;
-
- if (p->type & CONST_OPTION)
- asn1_delete_structure (&p);
-
- p = p2;
- continue;
- }
- }
-
- if (type_field (p->type) == TYPE_CHOICE)
- {
- while (p->down)
- {
- if (counter < len)
- ris =
- _asn1_extract_tag_der (p->down, der + counter,
- len - counter, &len2);
- else
- ris = ASN1_DER_ERROR;
- if (ris == ASN1_SUCCESS)
- {
- while (p->down->right)
- {
- p2 = p->down->right;
- asn1_delete_structure (&p2);
- }
- break;
- }
- else if (ris == ASN1_ERROR_TYPE_ANY)
- {
- asn1_delete_structure (element);
- return ASN1_ERROR_TYPE_ANY;
- }
- else
- {
- p2 = p->down;
- asn1_delete_structure (&p2);
- }
- }
-
- if (p->down == NULL)
- {
- if (!(p->type & CONST_OPTION))
- {
- asn1_delete_structure (element);
- return ASN1_DER_ERROR;
- }
- }
- else
- p = p->down;
- }
-
- if ((p->type & CONST_OPTION) || (p->type & CONST_DEFAULT))
- {
- p2 = _asn1_find_up (p);
- len2 = strtol (p2->value, NULL, 10);
- if ((len2 != -1) && (counter > len2))
- ris = ASN1_TAG_ERROR;
- }
-
- if (ris == ASN1_SUCCESS)
- ris =
- _asn1_extract_tag_der (p, der + counter, len - counter,
&len2);
- if (ris != ASN1_SUCCESS)
- {
- if (p->type & CONST_OPTION)
- {
- p->type |= CONST_NOT_USED;
- move = RIGHT;
- }
- else if (p->type & CONST_DEFAULT)
- {
- _asn1_set_value (p, NULL, 0);
- move = RIGHT;
- }
- else
- {
- if (errorDescription != NULL)
- _asn1_error_description_tag_error (p, errorDescription);
-
- asn1_delete_structure (element);
- return ASN1_TAG_ERROR;
- }
- }
- else
- counter += len2;
- }
-
- if (ris == ASN1_SUCCESS)
- {
- switch (type_field (p->type))
- {
- case TYPE_NULL:
- if (der[counter])
- {
- asn1_delete_structure (element);
- return ASN1_DER_ERROR;
- }
- counter++;
- move = RIGHT;
- break;
- case TYPE_BOOLEAN:
- if (der[counter++] != 1)
- {
- asn1_delete_structure (element);
- return ASN1_DER_ERROR;
- }
- if (der[counter++] == 0)
- _asn1_set_value (p, "F", 1);
- else
- _asn1_set_value (p, "T", 1);
- move = RIGHT;
- break;
- case TYPE_INTEGER:
- case TYPE_ENUMERATED:
- len2 =
- asn1_get_length_der (der + counter, len - counter, &len3);
- if (len2 < 0)
- return ASN1_DER_ERROR;
- if (len2 + len3 > len - counter)
- return ASN1_DER_ERROR;
- _asn1_set_value (p, der + counter, len3 + len2);
- counter += len3 + len2;
- move = RIGHT;
- break;
- case TYPE_OBJECT_ID:
- _asn1_get_objectid_der (der + counter, len - counter, &len2,
- temp, sizeof (temp));
- tlen = strlen (temp);
- if (tlen > 0)
- _asn1_set_value (p, temp, tlen + 1);
- counter += len2;
- move = RIGHT;
- break;
- case TYPE_TIME:
- result =
- _asn1_get_time_der (der + counter, len - counter, &len2,
temp,
- sizeof (temp) - 1);
- if (result != ASN1_SUCCESS)
- {
- asn1_delete_structure (element);
- return result;
- }
- tlen = strlen (temp);
- if (tlen > 0)
- _asn1_set_value (p, temp, tlen + 1);
- counter += len2;
- move = RIGHT;
- break;
- case TYPE_OCTET_STRING:
- len3 = len - counter;
- ris = _asn1_get_octet_string (der + counter, p, &len3);
- if (ris != ASN1_SUCCESS)
- return ris;
- counter += len3;
- move = RIGHT;
- break;
- case TYPE_GENERALSTRING:
- len2 =
- asn1_get_length_der (der + counter, len - counter, &len3);
- if (len2 < 0)
- return ASN1_DER_ERROR;
- if (len3 + len2 > len - counter)
- return ASN1_DER_ERROR;
- _asn1_set_value (p, der + counter, len3 + len2);
- counter += len3 + len2;
- move = RIGHT;
- break;
- case TYPE_BIT_STRING:
- len2 =
- asn1_get_length_der (der + counter, len - counter, &len3);
- if (len2 < 0)
- return ASN1_DER_ERROR;
- if (len3 + len2 > len - counter)
- return ASN1_DER_ERROR;
- _asn1_set_value (p, der + counter, len3 + len2);
- counter += len3 + len2;
- move = RIGHT;
- break;
- case TYPE_SEQUENCE:
- case TYPE_SET:
- if (move == UP)
- {
- len2 = strtol (p->value, NULL, 10);
- _asn1_set_value (p, NULL, 0);
- if (len2 == -1)
- { /* indefinite length method */
- if (len - counter + 1 > 0)
- {
- if ((der[counter]) || der[counter + 1])
- {
- asn1_delete_structure (element);
- return ASN1_DER_ERROR;
- }
- }
- else
- return ASN1_DER_ERROR;
- counter += 2;
- }
- else
- { /* definite length method */
- if (len2 != counter)
- {
- asn1_delete_structure (element);
- return ASN1_DER_ERROR;
- }
- }
- move = RIGHT;
- }
- else
- { /* move==DOWN || move==RIGHT */
- len3 =
- asn1_get_length_der (der + counter, len - counter,
&len2);
- if (len3 < -1)
- return ASN1_DER_ERROR;
- counter += len2;
- if (len3 > 0)
- {
- _asn1_ltostr (counter + len3, temp);
- tlen = strlen (temp);
- if (tlen > 0)
- _asn1_set_value (p, temp, tlen + 1);
- move = DOWN;
- }
- else if (len3 == 0)
- {
- p2 = p->down;
- while (p2)
- {
- if (type_field (p2->type) != TYPE_TAG)
- {
- p3 = p2->right;
- asn1_delete_structure (&p2);
- p2 = p3;
- }
- else
- p2 = p2->right;
- }
- move = RIGHT;
- }
- else
- { /* indefinite length method */
- _asn1_set_value (p, "-1", 3);
- move = DOWN;
- }
- }
- break;
- case TYPE_SEQUENCE_OF:
- case TYPE_SET_OF:
- if (move == UP)
- {
- len2 = strtol (p->value, NULL, 10);
- if (len2 == -1)
- { /* indefinite length method */
- if ((counter + 2) > len)
- return ASN1_DER_ERROR;
- if ((der[counter]) || der[counter + 1])
- {
- _asn1_append_sequence_set (p);
- p = p->down;
- while (p->right)
- p = p->right;
- move = RIGHT;
- continue;
- }
- _asn1_set_value (p, NULL, 0);
- counter += 2;
- }
- else
- { /* definite length method */
- if (len2 > counter)
- {
- _asn1_append_sequence_set (p);
- p = p->down;
- while (p->right)
- p = p->right;
- move = RIGHT;
- continue;
- }
- _asn1_set_value (p, NULL, 0);
- if (len2 != counter)
- {
- asn1_delete_structure (element);
- return ASN1_DER_ERROR;
- }
- }
- }
- else
- { /* move==DOWN || move==RIGHT */
- len3 =
- asn1_get_length_der (der + counter, len - counter,
&len2);
- if (len3 < -1)
- return ASN1_DER_ERROR;
- counter += len2;
- if (len3)
- {
- if (len3 > 0)
- { /* definite length method */
- _asn1_ltostr (counter + len3, temp);
- tlen = strlen (temp);
-
- if (tlen > 0)
- _asn1_set_value (p, temp, tlen + 1);
- }
- else
- { /* indefinite length method */
- _asn1_set_value (p, "-1", 3);
- }
- p2 = p->down;
- while ((type_field (p2->type) == TYPE_TAG)
- || (type_field (p2->type) == TYPE_SIZE))
- p2 = p2->right;
- if (p2->right == NULL)
- _asn1_append_sequence_set (p);
- p = p2;
- }
- }
- move = RIGHT;
- break;
- case TYPE_ANY:
- if (asn1_get_tag_der
- (der + counter, len - counter, &class, &len2,
- &tag) != ASN1_SUCCESS)
- return ASN1_DER_ERROR;
- if (counter + len2 > len)
- return ASN1_DER_ERROR;
- len4 =
- asn1_get_length_der (der + counter + len2,
- len - counter - len2, &len3);
- if (len4 < -1)
- return ASN1_DER_ERROR;
- if (len4 > len - counter + len2 + len3)
- return ASN1_DER_ERROR;
- if (len4 != -1)
- {
- len2 += len4;
- _asn1_set_value_octet (p, der+counter, len2+len3);
- counter += len2 + len3;
- }
- else
- { /* indefinite length */
- /* Check indefinite lenth method in an EXPLICIT TAG */
- if ((p->type & CONST_TAG) && (der[counter - 1] == 0x80))
- indefinite = 1;
- else
- indefinite = 0;
-
- len2 = len - counter;
- ris =
- _asn1_get_indefinite_length_string (der + counter,
&len2);
- if (ris != ASN1_SUCCESS)
- {
- asn1_delete_structure (element);
- return ris;
- }
-
- _asn1_set_value_octet (p, der+counter, len2);
- counter += len2;
-
- /* Check if a couple of 0x00 are present due to an EXPLICIT
TAG with
- an indefinite length method. */
- if (indefinite)
- {
- if (!der[counter] && !der[counter + 1])
- {
- counter += 2;
- }
- else
- {
- asn1_delete_structure (element);
- return ASN1_DER_ERROR;
- }
- }
- }
- move = RIGHT;
- break;
- default:
- move = (move == UP) ? RIGHT : DOWN;
- break;
- }
- }
-
- if (p == node && move != DOWN)
- break;
-
- if (move == DOWN)
- {
- if (p->down)
- p = p->down;
- else
- move = RIGHT;
- }
- if ((move == RIGHT) && !(p->type & CONST_SET))
- {
- if (p->right)
- p = p->right;
- else
- move = UP;
- }
- if (move == UP)
- p = _asn1_find_up (p);
- }
-
- _asn1_delete_not_used (*element);
-
- if (counter != len)
- {
- asn1_delete_structure (element);
- return ASN1_DER_ERROR;
- }
-
- return ASN1_SUCCESS;
-}
-</pre>
-</div>
-</td>
-</tr>
-<tr class="function_entry_untestable">
-<td class="function_entry_filename">
-<a href="javascript:void(0);" title="show/hide function source"
onClick="javascript:show_hide('asn1_write_value_src',
'asn1_write_value_button')"><span id="asn1_write_value_button">↓</span></a>
-</td>
-<td class="function_entry_name">
-asn1_write_value
-</td>
-<td class="function_entry_cyclo">
-111
-</td>
-<td class="function_entry_number">
-208
-</td>
-<td class="function_entry_number">
-343
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/element.c;hb=HEAD">lib/element.c</a>
-</td>
-</tr>
-<tr>
-<td colspan="6" height="0">
-<div id="asn1_write_value_src" class="function_src" style="position: relative;
display: none;">
-<pre class="function_src">
-asn1_retCode
-asn1_write_value (ASN1_TYPE node_root, const char *name,
- const void *ivalue, int len)
-{
- ASN1_TYPE node, p, p2;
- unsigned char *temp, *value_temp = NULL, *default_temp = NULL;
- int len2, k, k2, negative;
- size_t i;
- const unsigned char *value = ivalue;
-
- node = asn1_find_node (node_root, name);
- if (node == NULL)
- return ASN1_ELEMENT_NOT_FOUND;
-
- if ((node->type & CONST_OPTION) && (value == NULL) && (len == 0))
- {
- asn1_delete_structure (&node);
- return ASN1_SUCCESS;
- }
-
- if ((type_field (node->type) == TYPE_SEQUENCE_OF) && (value == NULL)
- && (len == 0))
- {
- p = node->down;
- while ((type_field (p->type) == TYPE_TAG)
- || (type_field (p->type) == TYPE_SIZE))
- p = p->right;
-
- while (p->right)
- asn1_delete_structure (&p->right);
-
- return ASN1_SUCCESS;
- }
-
- switch (type_field (node->type))
- {
- case TYPE_BOOLEAN:
- if (!strcmp (value, "TRUE"))
- {
- if (node->type & CONST_DEFAULT)
- {
- p = node->down;
- while (type_field (p->type) != TYPE_DEFAULT)
- p = p->right;
- if (p->type & CONST_TRUE)
- _asn1_set_value (node, NULL, 0);
- else
- _asn1_set_value (node, "T", 1);
- }
- else
- _asn1_set_value (node, "T", 1);
- }
- else if (!strcmp (value, "FALSE"))
- {
- if (node->type & CONST_DEFAULT)
- {
- p = node->down;
- while (type_field (p->type) != TYPE_DEFAULT)
- p = p->right;
- if (p->type & CONST_FALSE)
- _asn1_set_value (node, NULL, 0);
- else
- _asn1_set_value (node, "F", 1);
- }
- else
- _asn1_set_value (node, "F", 1);
- }
- else
- return ASN1_VALUE_NOT_VALID;
- break;
- case TYPE_INTEGER:
- case TYPE_ENUMERATED:
- if (len == 0)
- {
- if ((isdigit (value[0])) || (value[0] == '-'))
- {
- value_temp =
- (unsigned char *) _asn1_malloc (SIZEOF_UNSIGNED_LONG_INT);
- if (value_temp == NULL)
- return ASN1_MEM_ALLOC_ERROR;
-
- _asn1_convert_integer (value, value_temp,
- SIZEOF_UNSIGNED_LONG_INT, &len);
- }
- else
- { /* is an identifier like v1 */
- if (!(node->type & CONST_LIST))
- return ASN1_VALUE_NOT_VALID;
- p = node->down;
- while (p)
- {
- if (type_field (p->type) == TYPE_CONSTANT)
- {
- if ((p->name) && (!strcmp (p->name, value)))
- {
- value_temp =
- (unsigned char *)
- _asn1_malloc (SIZEOF_UNSIGNED_LONG_INT);
- if (value_temp == NULL)
- return ASN1_MEM_ALLOC_ERROR;
-
- _asn1_convert_integer (p->value,
- value_temp,
- SIZEOF_UNSIGNED_LONG_INT,
- &len);
- break;
- }
- }
- p = p->right;
- }
- if (p == NULL)
- return ASN1_VALUE_NOT_VALID;
- }
- }
- else
- { /* len != 0 */
- value_temp = (unsigned char *) _asn1_malloc (len);
- if (value_temp == NULL)
- return ASN1_MEM_ALLOC_ERROR;
- memcpy (value_temp, value, len);
- }
-
-
- if (value_temp[0] & 0x80)
- negative = 1;
- else
- negative = 0;
-
- if (negative && (type_field (node->type) == TYPE_ENUMERATED))
- {
- _asn1_free (value_temp);
- return ASN1_VALUE_NOT_VALID;
- }
-
- for (k = 0; k < len - 1; k++)
- if (negative && (value_temp[k] != 0xFF))
- break;
- else if (!negative && value_temp[k])
- break;
-
- if ((negative && !(value_temp[k] & 0x80)) ||
- (!negative && (value_temp[k] & 0x80)))
- k--;
-
- _asn1_set_value_octet (node, value_temp+k, len-k);
-
- if (node->type & CONST_DEFAULT)
- {
- p = node->down;
- while (type_field (p->type) != TYPE_DEFAULT)
- p = p->right;
- if ((isdigit (p->value[0])) || (p->value[0] == '-'))
- {
- default_temp =
- (unsigned char *) _asn1_malloc (SIZEOF_UNSIGNED_LONG_INT);
- if (default_temp == NULL)
- {
- _asn1_free (value_temp);
- return ASN1_MEM_ALLOC_ERROR;
- }
-
- _asn1_convert_integer (p->value, default_temp,
- SIZEOF_UNSIGNED_LONG_INT, &len2);
- }
- else
- { /* is an identifier like v1 */
- if (!(node->type & CONST_LIST))
- {
- _asn1_free (value_temp);
- return ASN1_VALUE_NOT_VALID;
- }
- p2 = node->down;
- while (p2)
- {
- if (type_field (p2->type) == TYPE_CONSTANT)
- {
- if ((p2->name) && (!strcmp (p2->name, p->value)))
- {
- default_temp =
- (unsigned char *)
- _asn1_malloc (SIZEOF_UNSIGNED_LONG_INT);
- if (default_temp == NULL)
- {
- _asn1_free (value_temp);
- return ASN1_MEM_ALLOC_ERROR;
- }
-
- _asn1_convert_integer (p2->value,
- default_temp,
- SIZEOF_UNSIGNED_LONG_INT,
- &len2);
- break;
- }
- }
- p2 = p2->right;
- }
- if (p2 == NULL)
- {
- _asn1_free (value_temp);
- return ASN1_VALUE_NOT_VALID;
- }
- }
-
-
- if ((len - k) == len2)
- {
- for (k2 = 0; k2 < len2; k2++)
- if (value_temp[k + k2] != default_temp[k2])
- {
- break;
- }
- if (k2 == len2)
- _asn1_set_value (node, NULL, 0);
- }
- _asn1_free (default_temp);
- }
- _asn1_free (value_temp);
- break;
- case TYPE_OBJECT_ID:
- for (i = 0; i < strlen (value); i++)
- if ((!isdigit (value[i])) && (value[i] != '.') && (value[i] != '+'))
- return ASN1_VALUE_NOT_VALID;
- if (node->type & CONST_DEFAULT)
- {
- p = node->down;
- while (type_field (p->type) != TYPE_DEFAULT)
- p = p->right;
- if (!strcmp (value, p->value))
- {
- _asn1_set_value (node, NULL, 0);
- break;
- }
- }
- _asn1_set_value (node, value, strlen (value) + 1);
- break;
- case TYPE_TIME:
- if (node->type & CONST_UTC)
- {
- if (strlen (value) < 11)
- return ASN1_VALUE_NOT_VALID;
- for (k = 0; k < 10; k++)
- if (!isdigit (value[k]))
- return ASN1_VALUE_NOT_VALID;
- switch (strlen (value))
- {
- case 11:
- if (value[10] != 'Z')
- return ASN1_VALUE_NOT_VALID;
- break;
- case 13:
- if ((!isdigit (value[10])) || (!isdigit (value[11])) ||
- (value[12] != 'Z'))
- return ASN1_VALUE_NOT_VALID;
- break;
- case 15:
- if ((value[10] != '+') && (value[10] != '-'))
- return ASN1_VALUE_NOT_VALID;
- for (k = 11; k < 15; k++)
- if (!isdigit (value[k]))
- return ASN1_VALUE_NOT_VALID;
- break;
- case 17:
- if ((!isdigit (value[10])) || (!isdigit (value[11])))
- return ASN1_VALUE_NOT_VALID;
- if ((value[12] != '+') && (value[12] != '-'))
- return ASN1_VALUE_NOT_VALID;
- for (k = 13; k < 17; k++)
- if (!isdigit (value[k]))
- return ASN1_VALUE_NOT_VALID;
- break;
- default:
- return ASN1_VALUE_NOT_FOUND;
- }
- _asn1_set_value (node, value, strlen (value) + 1);
- }
- else
- { /* GENERALIZED TIME */
- if (value)
- _asn1_set_value (node, value, strlen (value) + 1);
- }
- break;
- case TYPE_OCTET_STRING:
- if (len == 0)
- len = strlen (value);
- _asn1_set_value_octet (node, value, len);
- break;
- case TYPE_GENERALSTRING:
- if (len == 0)
- len = strlen (value);
- _asn1_set_value_octet (node, value, len);
- break;
- case TYPE_BIT_STRING:
- if (len == 0)
- len = strlen (value);
- asn1_length_der ((len >> 3) + 2, NULL, &len2);
- temp = (unsigned char *) _asn1_malloc ((len >> 3) + 2 + len2);
- if (temp == NULL)
- return ASN1_MEM_ALLOC_ERROR;
-
- asn1_bit_der (value, len, temp, &len2);
- _asn1_set_value_m (node, temp, len2);
- temp = NULL;
- break;
- case TYPE_CHOICE:
- p = node->down;
- while (p)
- {
- if (!strcmp (p->name, value))
- {
- p2 = node->down;
- while (p2)
- {
- if (p2 != p)
- {
- asn1_delete_structure (&p2);
- p2 = node->down;
- }
- else
- p2 = p2->right;
- }
- break;
- }
- p = p->right;
- }
- if (!p)
- return ASN1_ELEMENT_NOT_FOUND;
- break;
- case TYPE_ANY:
- _asn1_set_value_octet (node, value, len);
- break;
- case TYPE_SEQUENCE_OF:
- case TYPE_SET_OF:
- if (strcmp (value, "NEW"))
- return ASN1_VALUE_NOT_VALID;
- _asn1_append_sequence_set (node);
- break;
- default:
- return ASN1_ELEMENT_NOT_FOUND;
- break;
- }
-
- return ASN1_SUCCESS;
-}
-</pre>
-</div>
-</td>
-</tr>
-<tr class="function_entry_untestable">
-<td class="function_entry_filename">
-<a href="javascript:void(0);" title="show/hide function source"
onClick="javascript:show_hide('asn1_print_structure_src',
'asn1_print_structure_button')"><span
id="asn1_print_structure_button">↓</span></a>
-</td>
-<td class="function_entry_name">
-asn1_print_structure
-</td>
-<td class="function_entry_cyclo">
-125
-</td>
-<td class="function_entry_number">
-235
-</td>
-<td class="function_entry_number">
-349
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/structure.c;hb=HEAD">lib/structure.c</a>
-</td>
-</tr>
-<tr>
-<td colspan="6" height="0">
-<div id="asn1_print_structure_src" class="function_src" style="position:
relative; display: none;">
-<pre class="function_src">
-void
-asn1_print_structure (FILE * out, ASN1_TYPE structure, const char *name,
- int mode)
-{
- ASN1_TYPE p, root;
- int k, indent = 0, len, len2, len3;
-
- if (out == NULL)
- return;
-
- root = asn1_find_node (structure, name);
-
- if (root == NULL)
- return;
-
- p = root;
- while (p)
- {
- if (mode == ASN1_PRINT_ALL)
- {
- for (k = 0; k < indent; k++)
- fprintf (out, " ");
- fprintf (out, "name:");
- if (p->name)
- fprintf (out, "%s ", p->name);
- else
- fprintf (out, "NULL ");
- }
- else
- {
- switch (type_field (p->type))
- {
- case TYPE_CONSTANT:
- case TYPE_TAG:
- case TYPE_SIZE:
- break;
- default:
- for (k = 0; k < indent; k++)
- fprintf (out, " ");
- fprintf (out, "name:");
- if (p->name)
- fprintf (out, "%s ", p->name);
- else
- fprintf (out, "NULL ");
- }
- }
-
- if (mode != ASN1_PRINT_NAME)
- {
- switch (type_field (p->type))
- {
- case TYPE_CONSTANT:
- if (mode == ASN1_PRINT_ALL)
- fprintf (out, "type:CONST");
- break;
- case TYPE_TAG:
- if (mode == ASN1_PRINT_ALL)
- fprintf (out, "type:TAG");
- break;
- case TYPE_SIZE:
- if (mode == ASN1_PRINT_ALL)
- fprintf (out, "type:SIZE");
- break;
- case TYPE_DEFAULT:
- fprintf (out, "type:DEFAULT");
- break;
- case TYPE_NULL:
- fprintf (out, "type:NULL");
- break;
- case TYPE_IDENTIFIER:
- fprintf (out, "type:IDENTIFIER");
- break;
- case TYPE_INTEGER:
- fprintf (out, "type:INTEGER");
- break;
- case TYPE_ENUMERATED:
- fprintf (out, "type:ENUMERATED");
- break;
- case TYPE_TIME:
- fprintf (out, "type:TIME");
- break;
- case TYPE_BOOLEAN:
- fprintf (out, "type:BOOLEAN");
- break;
- case TYPE_SEQUENCE:
- fprintf (out, "type:SEQUENCE");
- break;
- case TYPE_BIT_STRING:
- fprintf (out, "type:BIT_STR");
- break;
- case TYPE_OCTET_STRING:
- fprintf (out, "type:OCT_STR");
- break;
- case TYPE_GENERALSTRING:
- fprintf (out, "type:GENERALSTRING");
- break;
- case TYPE_SEQUENCE_OF:
- fprintf (out, "type:SEQ_OF");
- break;
- case TYPE_OBJECT_ID:
- fprintf (out, "type:OBJ_ID");
- break;
- case TYPE_ANY:
- fprintf (out, "type:ANY");
- break;
- case TYPE_SET:
- fprintf (out, "type:SET");
- break;
- case TYPE_SET_OF:
- fprintf (out, "type:SET_OF");
- break;
- case TYPE_CHOICE:
- fprintf (out, "type:CHOICE");
- break;
- case TYPE_DEFINITIONS:
- fprintf (out, "type:DEFINITIONS");
- break;
- default:
- break;
- }
- }
-
- if ((mode == ASN1_PRINT_NAME_TYPE_VALUE) || (mode == ASN1_PRINT_ALL))
- {
- switch (type_field (p->type))
- {
- case TYPE_CONSTANT:
- if (mode == ASN1_PRINT_ALL)
- if (p->value)
- fprintf (out, " value:%s", p->value);
- break;
- case TYPE_TAG:
- if (mode == ASN1_PRINT_ALL)
- if (p->value)
- fprintf (out, " value:%s", p->value);
- break;
- case TYPE_SIZE:
- if (mode == ASN1_PRINT_ALL)
- if (p->value)
- fprintf (out, " value:%s", p->value);
- break;
- case TYPE_DEFAULT:
- if (p->value)
- fprintf (out, " value:%s", p->value);
- else if (p->type & CONST_TRUE)
- fprintf (out, " value:TRUE");
- else if (p->type & CONST_FALSE)
- fprintf (out, " value:FALSE");
- break;
- case TYPE_IDENTIFIER:
- if (p->value)
- fprintf (out, " value:%s", p->value);
- break;
- case TYPE_INTEGER:
- if (p->value)
- {
- len2 = -1;
- len = asn1_get_length_der (p->value, p->value_len, &len2);
- fprintf (out, " value:0x");
- if (len > 0)
- for (k = 0; k < len; k++)
- fprintf (out, "%02x", (p->value)[k + len2]);
- }
- break;
- case TYPE_ENUMERATED:
- if (p->value)
- {
- len2 = -1;
- len = asn1_get_length_der (p->value, p->value_len, &len2);
- fprintf (out, " value:0x");
- if (len > 0)
- for (k = 0; k < len; k++)
- fprintf (out, "%02x", (p->value)[k + len2]);
- }
- break;
- case TYPE_TIME:
- if (p->value)
- fprintf (out, " value:%s", p->value);
- break;
- case TYPE_BOOLEAN:
- if (p->value)
- {
- if (p->value[0] == 'T')
- fprintf (out, " value:TRUE");
- else if (p->value[0] == 'F')
- fprintf (out, " value:FALSE");
- }
- break;
- case TYPE_BIT_STRING:
- if (p->value)
- {
- len2 = -1;
- len = asn1_get_length_der (p->value, p->value_len, &len2);
- if (len > 0)
- {
- fprintf (out, " value(%i):",
- (len - 1) * 8 - (p->value[len2]));
- for (k = 1; k < len; k++)
- fprintf (out, "%02x", (p->value)[k + len2]);
- }
- }
- break;
- case TYPE_OCTET_STRING:
- if (p->value)
- {
- len2 = -1;
- len = asn1_get_length_der (p->value, p->value_len, &len2);
- fprintf (out, " value:");
- if (len > 0)
- for (k = 0; k < len; k++)
- fprintf (out, "%02x", (p->value)[k + len2]);
- }
- break;
- case TYPE_GENERALSTRING:
- if (p->value)
- {
- len2 = -1;
- len = asn1_get_length_der (p->value, p->value_len, &len2);
- fprintf (out, " value:");
- if (len > 0)
- for (k = 0; k < len; k++)
- fprintf (out, "%02x", (p->value)[k + len2]);
- }
- break;
- case TYPE_OBJECT_ID:
- if (p->value)
- fprintf (out, " value:%s", p->value);
- break;
- case TYPE_ANY:
- if (p->value)
- {
- len3 = -1;
- len2 = asn1_get_length_der (p->value, p->value_len,
&len3);
- fprintf (out, " value:");
- if (len2 > 0)
- for (k = 0; k < len2; k++)
- fprintf (out, "%02x", (p->value)[k + len3]);
- }
- break;
- case TYPE_SET:
- case TYPE_SET_OF:
- case TYPE_CHOICE:
- case TYPE_DEFINITIONS:
- case TYPE_SEQUENCE_OF:
- case TYPE_SEQUENCE:
- case TYPE_NULL:
- break;
- default:
- break;
- }
- }
-
- if (mode == ASN1_PRINT_ALL)
- {
- if (p->type & 0x1FFFFF00)
- {
- fprintf (out, " attr:");
- if (p->type & CONST_UNIVERSAL)
- fprintf (out, "UNIVERSAL,");
- if (p->type & CONST_PRIVATE)
- fprintf (out, "PRIVATE,");
- if (p->type & CONST_APPLICATION)
- fprintf (out, "APPLICATION,");
- if (p->type & CONST_EXPLICIT)
- fprintf (out, "EXPLICIT,");
- if (p->type & CONST_IMPLICIT)
- fprintf (out, "IMPLICIT,");
- if (p->type & CONST_TAG)
- fprintf (out, "TAG,");
- if (p->type & CONST_DEFAULT)
- fprintf (out, "DEFAULT,");
- if (p->type & CONST_TRUE)
- fprintf (out, "TRUE,");
- if (p->type & CONST_FALSE)
- fprintf (out, "FALSE,");
- if (p->type & CONST_LIST)
- fprintf (out, "LIST,");
- if (p->type & CONST_MIN_MAX)
- fprintf (out, "MIN_MAX,");
- if (p->type & CONST_OPTION)
- fprintf (out, "OPTION,");
- if (p->type & CONST_1_PARAM)
- fprintf (out, "1_PARAM,");
- if (p->type & CONST_SIZE)
- fprintf (out, "SIZE,");
- if (p->type & CONST_DEFINED_BY)
- fprintf (out, "DEF_BY,");
- if (p->type & CONST_GENERALIZED)
- fprintf (out, "GENERALIZED,");
- if (p->type & CONST_UTC)
- fprintf (out, "UTC,");
- if (p->type & CONST_SET)
- fprintf (out, "SET,");
- if (p->type & CONST_NOT_USED)
- fprintf (out, "NOT_USED,");
- if (p->type & CONST_ASSIGN)
- fprintf (out, "ASSIGNMENT,");
- }
- }
-
- if (mode == ASN1_PRINT_ALL)
- {
- fprintf (out, "\n");
- }
- else
- {
- switch (type_field (p->type))
- {
- case TYPE_CONSTANT:
- case TYPE_TAG:
- case TYPE_SIZE:
- break;
- default:
- fprintf (out, "\n");
- }
- }
-
- if (p->down)
- {
- p = p->down;
- indent += 2;
- }
- else if (p == root)
- {
- p = NULL;
- break;
- }
- else if (p->right)
- p = p->right;
- else
- {
- while (1)
- {
- p = _asn1_find_up (p);
- if (p == root)
- {
- p = NULL;
- break;
- }
- indent -= 2;
- if (p->right)
- {
- p = p->right;
- break;
- }
- }
- }
- }
-}
-</pre>
-</div>
-</td>
-</tr>
-<tr class="function_entry_untestable">
-<td class="function_entry_filename">
-<a href="javascript:void(0);" title="show/hide function source"
onClick="javascript:show_hide('asn1_der_decoding_startEnd_src',
'asn1_der_decoding_startEnd_button')"><span
id="asn1_der_decoding_startEnd_button">↓</span></a>
-</td>
-<td class="function_entry_name">
-asn1_der_decoding_startEnd
-</td>
-<td class="function_entry_cyclo">
-85
-</td>
-<td class="function_entry_number">
-188
-</td>
-<td class="function_entry_number">
-320
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/decoding.c;hb=HEAD">lib/decoding.c</a>
-</td>
-</tr>
-<tr>
-<td colspan="6" height="0">
-<div id="asn1_der_decoding_startEnd_src" class="function_src" style="position:
relative; display: none;">
-<pre class="function_src">
-asn1_retCode
-asn1_der_decoding_startEnd (ASN1_TYPE element, const void *ider, int len,
- const char *name_element, int *start, int *end)
-{
- ASN1_TYPE node, node_to_find, p, p2, p3;
- int counter, len2, len3, len4, move, ris;
- unsigned char class;
- unsigned long tag;
- int indefinite;
- const unsigned char *der = ider;
-
- node = element;
-
- if (node == ASN1_TYPE_EMPTY)
- return ASN1_ELEMENT_NOT_FOUND;
-
- node_to_find = asn1_find_node (node, name_element);
-
- if (node_to_find == NULL)
- return ASN1_ELEMENT_NOT_FOUND;
-
- if (node_to_find == node)
- {
- *start = 0;
- *end = len - 1;
- return ASN1_SUCCESS;
- }
-
- if (node->type & CONST_OPTION)
- return ASN1_GENERIC_ERROR;
-
- counter = 0;
- move = DOWN;
- p = node;
- while (1)
- {
- ris = ASN1_SUCCESS;
-
- if (move != UP)
- {
- if (p->type & CONST_SET)
- {
- p2 = _asn1_find_up (p);
- len2 = strtol (p2->value, NULL, 10);
- if (len2 == -1)
- {
- if (!der[counter] && !der[counter + 1])
- {
- p = p2;
- move = UP;
- counter += 2;
- continue;
- }
- }
- else if (counter == len2)
- {
- p = p2;
- move = UP;
- continue;
- }
- else if (counter > len2)
- return ASN1_DER_ERROR;
- p2 = p2->down;
- while (p2)
- {
- if ((p2->type & CONST_SET) && (p2->type & CONST_NOT_USED))
- { /* CONTROLLARE */
- if (type_field (p2->type) != TYPE_CHOICE)
- ris =
- _asn1_extract_tag_der (p2, der + counter,
- len - counter, &len2);
- else
- {
- p3 = p2->down;
- ris =
- _asn1_extract_tag_der (p3, der + counter,
- len - counter, &len2);
- }
- if (ris == ASN1_SUCCESS)
- {
- p2->type &= ~CONST_NOT_USED;
- p = p2;
- break;
- }
- }
- p2 = p2->right;
- }
- if (p2 == NULL)
- return ASN1_DER_ERROR;
- }
-
- if (p == node_to_find)
- *start = counter;
-
- if (type_field (p->type) == TYPE_CHOICE)
- {
- p = p->down;
- ris =
- _asn1_extract_tag_der (p, der + counter, len - counter,
- &len2);
- if (p == node_to_find)
- *start = counter;
- }
-
- if (ris == ASN1_SUCCESS)
- ris =
- _asn1_extract_tag_der (p, der + counter, len - counter,
&len2);
- if (ris != ASN1_SUCCESS)
- {
- if (p->type & CONST_OPTION)
- {
- p->type |= CONST_NOT_USED;
- move = RIGHT;
- }
- else if (p->type & CONST_DEFAULT)
- {
- move = RIGHT;
- }
- else
- {
- return ASN1_TAG_ERROR;
- }
- }
- else
- counter += len2;
- }
-
- if (ris == ASN1_SUCCESS)
- {
- switch (type_field (p->type))
- {
- case TYPE_NULL:
- if (der[counter])
- return ASN1_DER_ERROR;
- counter++;
- move = RIGHT;
- break;
- case TYPE_BOOLEAN:
- if (der[counter++] != 1)
- return ASN1_DER_ERROR;
- counter++;
- move = RIGHT;
- break;
- case TYPE_INTEGER:
- case TYPE_ENUMERATED:
- len2 =
- asn1_get_length_der (der + counter, len - counter, &len3);
- if (len2 < 0)
- return ASN1_DER_ERROR;
- counter += len3 + len2;
- move = RIGHT;
- break;
- case TYPE_OBJECT_ID:
- len2 =
- asn1_get_length_der (der + counter, len - counter, &len3);
- if (len2 < 0)
- return ASN1_DER_ERROR;
- counter += len2 + len3;
- move = RIGHT;
- break;
- case TYPE_TIME:
- len2 =
- asn1_get_length_der (der + counter, len - counter, &len3);
- if (len2 < 0)
- return ASN1_DER_ERROR;
- counter += len2 + len3;
- move = RIGHT;
- break;
- case TYPE_OCTET_STRING:
- len3 = len - counter;
- ris = _asn1_get_octet_string (der + counter, NULL, &len3);
- if (ris != ASN1_SUCCESS)
- return ris;
- counter += len3;
- move = RIGHT;
- break;
- case TYPE_GENERALSTRING:
- len2 =
- asn1_get_length_der (der + counter, len - counter, &len3);
- if (len2 < 0)
- return ASN1_DER_ERROR;
- counter += len3 + len2;
- move = RIGHT;
- break;
- case TYPE_BIT_STRING:
- len2 =
- asn1_get_length_der (der + counter, len - counter, &len3);
- if (len2 < 0)
- return ASN1_DER_ERROR;
- counter += len3 + len2;
- move = RIGHT;
- break;
- case TYPE_SEQUENCE:
- case TYPE_SET:
- if (move != UP)
- {
- len3 =
- asn1_get_length_der (der + counter, len - counter,
&len2);
- if (len3 < -1)
- return ASN1_DER_ERROR;
- counter += len2;
- if (len3 == 0)
- move = RIGHT;
- else
- move = DOWN;
- }
- else
- {
- if (!der[counter] && !der[counter + 1]) /* indefinite
length method */
- counter += 2;
- move = RIGHT;
- }
- break;
- case TYPE_SEQUENCE_OF:
- case TYPE_SET_OF:
- if (move != UP)
- {
- len3 =
- asn1_get_length_der (der + counter, len - counter,
&len2);
- if (len3 < -1)
- return ASN1_DER_ERROR;
- counter += len2;
- if ((len3 == -1) && !der[counter] && !der[counter + 1])
- counter += 2;
- else if (len3)
- {
- p2 = p->down;
- while ((type_field (p2->type) == TYPE_TAG) ||
- (type_field (p2->type) == TYPE_SIZE))
- p2 = p2->right;
- p = p2;
- }
- }
- else
- {
- if (!der[counter] && !der[counter + 1]) /* indefinite
length method */
- counter += 2;
- }
- move = RIGHT;
- break;
- case TYPE_ANY:
- if (asn1_get_tag_der
- (der + counter, len - counter, &class, &len2,
- &tag) != ASN1_SUCCESS)
- return ASN1_DER_ERROR;
- if (counter + len2 > len)
- return ASN1_DER_ERROR;
-
- len4 =
- asn1_get_length_der (der + counter + len2,
- len - counter - len2, &len3);
- if (len4 < -1)
- return ASN1_DER_ERROR;
-
- if (len4 != -1)
- {
- counter += len2 + len4 + len3;
- }
- else
- { /* indefinite length */
- /* Check indefinite lenth method in an EXPLICIT TAG */
- if ((p->type & CONST_TAG) && (der[counter - 1] == 0x80))
- indefinite = 1;
- else
- indefinite = 0;
-
- len2 = len - counter;
- ris =
- _asn1_get_indefinite_length_string (der + counter,
&len2);
- if (ris != ASN1_SUCCESS)
- return ris;
- counter += len2;
-
- /* Check if a couple of 0x00 are present due to an EXPLICIT
TAG with
- an indefinite length method. */
- if (indefinite)
- {
- if (!der[counter] && !der[counter + 1])
- counter += 2;
- else
- return ASN1_DER_ERROR;
- }
- }
- move = RIGHT;
- break;
- default:
- move = (move == UP) ? RIGHT : DOWN;
- break;
- }
- }
-
- if ((p == node_to_find) && (move == RIGHT))
- {
- *end = counter - 1;
- return ASN1_SUCCESS;
- }
-
- if (p == node && move != DOWN)
- break;
-
- if (move == DOWN)
- {
- if (p->down)
- p = p->down;
- else
- move = RIGHT;
- }
- if ((move == RIGHT) && !(p->type & CONST_SET))
- {
- if (p->right)
- p = p->right;
- else
- move = UP;
- }
- if (move == UP)
- p = _asn1_find_up (p);
- }
-
- return ASN1_ELEMENT_NOT_FOUND;
-}
-</pre>
-</div>
-</td>
-</tr>
-<tr class="function_entry_untestable">
-<td class="function_entry_filename">
-<a href="javascript:void(0);" title="show/hide function source"
onClick="javascript:show_hide('asn1_der_coding_src',
'asn1_der_coding_button')"><span id="asn1_der_coding_button">↓</span></a>
-</td>
-<td class="function_entry_name">
-asn1_der_coding
-</td>
-<td class="function_entry_cyclo">
-83
-</td>
-<td class="function_entry_number">
-226
-</td>
-<td class="function_entry_number">
-357
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/coding.c;hb=HEAD">lib/coding.c</a>
-</td>
-</tr>
-<tr>
-<td colspan="6" height="0">
-<div id="asn1_der_coding_src" class="function_src" style="position: relative;
display: none;">
-<pre class="function_src">
-asn1_retCode
-asn1_der_coding (ASN1_TYPE element, const char *name, void *ider, int *len,
- char *ErrorDescription)
-{
- ASN1_TYPE node, p, p2;
- char temp[SIZEOF_UNSIGNED_LONG_INT * 3 + 1];
- int counter, counter_old, len2, len3, tlen, move, max_len, max_len_old;
- asn1_retCode err;
- unsigned char *der = ider;
-
- node = asn1_find_node (element, name);
- if (node == NULL)
- return ASN1_ELEMENT_NOT_FOUND;
-
- /* Node is now a locally allocated variable.
- * That is because in some point we modify the
- * structure, and I don't know why! --nmav
- */
- node = _asn1_copy_structure3 (node);
- if (node == NULL)
- return ASN1_ELEMENT_NOT_FOUND;
-
- max_len = *len;
-
- counter = 0;
- move = DOWN;
- p = node;
- while (1)
- {
-
- counter_old = counter;
- max_len_old = max_len;
- if (move != UP)
- {
- err = _asn1_insert_tag_der (p, der, &counter, &max_len);
- if (err != ASN1_SUCCESS && err != ASN1_MEM_ERROR)
- goto error;
- }
- switch (type_field (p->type))
- {
- case TYPE_NULL:
- max_len--;
- if (max_len >= 0)
- der[counter] = 0;
- counter++;
- move = RIGHT;
- break;
- case TYPE_BOOLEAN:
- if ((p->type & CONST_DEFAULT) && (p->value == NULL))
- {
- counter = counter_old;
- max_len = max_len_old;
- }
- else
- {
- if (p->value == NULL)
- {
- _asn1_error_description_value_not_found (p,
- ErrorDescription);
- err = ASN1_VALUE_NOT_FOUND;
- goto error;
- }
- max_len -= 2;
- if (max_len >= 0)
- {
- der[counter++] = 1;
- if (p->value[0] == 'F')
- der[counter++] = 0;
- else
- der[counter++] = 0xFF;
- }
- else
- counter += 2;
- }
- move = RIGHT;
- break;
- case TYPE_INTEGER:
- case TYPE_ENUMERATED:
- if ((p->type & CONST_DEFAULT) && (p->value == NULL))
- {
- counter = counter_old;
- max_len = max_len_old;
- }
- else
- {
- if (p->value == NULL)
- {
- _asn1_error_description_value_not_found (p,
- ErrorDescription);
- err = ASN1_VALUE_NOT_FOUND;
- goto error;
- }
- len2 = asn1_get_length_der (p->value, p->value_len, &len3);
- if (len2 < 0)
- {
- err = ASN1_DER_ERROR;
- goto error;
- }
- max_len -= len2 + len3;
- if (max_len >= 0)
- memcpy (der + counter, p->value, len3 + len2);
- counter += len3 + len2;
- }
- move = RIGHT;
- break;
- case TYPE_OBJECT_ID:
- if ((p->type & CONST_DEFAULT) && (p->value == NULL))
- {
- counter = counter_old;
- max_len = max_len_old;
- }
- else
- {
- if (p->value == NULL)
- {
- _asn1_error_description_value_not_found (p,
- ErrorDescription);
- err = ASN1_VALUE_NOT_FOUND;
- goto error;
- }
- len2 = max_len;
- err = _asn1_objectid_der (p->value, der + counter, &len2);
- if (err != ASN1_SUCCESS && err != ASN1_MEM_ERROR)
- goto error;
-
- max_len -= len2;
- counter += len2;
- }
- move = RIGHT;
- break;
- case TYPE_TIME:
- if (p->value == NULL)
- {
- _asn1_error_description_value_not_found (p, ErrorDescription);
- err = ASN1_VALUE_NOT_FOUND;
- goto error;
- }
- len2 = max_len;
- err = _asn1_time_der (p->value, der + counter, &len2);
- if (err != ASN1_SUCCESS && err != ASN1_MEM_ERROR)
- goto error;
-
- max_len -= len2;
- counter += len2;
- move = RIGHT;
- break;
- case TYPE_OCTET_STRING:
- if (p->value == NULL)
- {
- _asn1_error_description_value_not_found (p, ErrorDescription);
- err = ASN1_VALUE_NOT_FOUND;
- goto error;
- }
- len2 = asn1_get_length_der (p->value, p->value_len, &len3);
- if (len2 < 0)
- {
- err = ASN1_DER_ERROR;
- goto error;
- }
- max_len -= len2 + len3;
- if (max_len >= 0)
- memcpy (der + counter, p->value, len3 + len2);
- counter += len3 + len2;
- move = RIGHT;
- break;
- case TYPE_GENERALSTRING:
- if (p->value == NULL)
- {
- _asn1_error_description_value_not_found (p, ErrorDescription);
- err = ASN1_VALUE_NOT_FOUND;
- goto error;
- }
- len2 = asn1_get_length_der (p->value, p->value_len, &len3);
- if (len2 < 0)
- {
- err = ASN1_DER_ERROR;
- goto error;
- }
- max_len -= len2 + len3;
- if (max_len >= 0)
- memcpy (der + counter, p->value, len3 + len2);
- counter += len3 + len2;
- move = RIGHT;
- break;
- case TYPE_BIT_STRING:
- if (p->value == NULL)
- {
- _asn1_error_description_value_not_found (p, ErrorDescription);
- err = ASN1_VALUE_NOT_FOUND;
- goto error;
- }
- len2 = asn1_get_length_der (p->value, p->value_len, &len3);
- if (len2 < 0)
- {
- err = ASN1_DER_ERROR;
- goto error;
- }
- max_len -= len2 + len3;
- if (max_len >= 0)
- memcpy (der + counter, p->value, len3 + len2);
- counter += len3 + len2;
- move = RIGHT;
- break;
- case TYPE_SEQUENCE:
- case TYPE_SET:
- if (move != UP)
- {
- _asn1_ltostr (counter, temp);
- tlen = strlen (temp);
- if (tlen > 0)
- _asn1_set_value (p, temp, tlen + 1);
- if (p->down == NULL)
- {
- move = UP;
- continue;
- }
- else
- {
- p2 = p->down;
- while (p2 && (type_field (p2->type) == TYPE_TAG))
- p2 = p2->right;
- if (p2)
- {
- p = p2;
- move = RIGHT;
- continue;
- }
- move = UP;
- continue;
- }
- }
- else
- { /* move==UP */
- len2 = strtol (p->value, NULL, 10);
- _asn1_set_value (p, NULL, 0);
- if ((type_field (p->type) == TYPE_SET) && (max_len >= 0))
- _asn1_ordering_set (der + len2, max_len - len2, p);
- asn1_length_der (counter - len2, temp, &len3);
- max_len -= len3;
- if (max_len >= 0)
- {
- memmove (der + len2 + len3, der + len2, counter - len2);
- memcpy (der + len2, temp, len3);
- }
- counter += len3;
- move = RIGHT;
- }
- break;
- case TYPE_SEQUENCE_OF:
- case TYPE_SET_OF:
- if (move != UP)
- {
- _asn1_ltostr (counter, temp);
- tlen = strlen (temp);
-
- if (tlen > 0)
- _asn1_set_value (p, temp, tlen + 1);
- p = p->down;
- while ((type_field (p->type) == TYPE_TAG)
- || (type_field (p->type) == TYPE_SIZE))
- p = p->right;
- if (p->right)
- {
- p = p->right;
- move = RIGHT;
- continue;
- }
- else
- p = _asn1_find_up (p);
- move = UP;
- }
- if (move == UP)
- {
- len2 = strtol (p->value, NULL, 10);
- _asn1_set_value (p, NULL, 0);
- if ((type_field (p->type) == TYPE_SET_OF)
- && (max_len - len2 > 0))
- {
- _asn1_ordering_set_of (der + len2, max_len - len2, p);
- }
- asn1_length_der (counter - len2, temp, &len3);
- max_len -= len3;
- if (max_len >= 0)
- {
- memmove (der + len2 + len3, der + len2, counter - len2);
- memcpy (der + len2, temp, len3);
- }
- counter += len3;
- move = RIGHT;
- }
- break;
- case TYPE_ANY:
- if (p->value == NULL)
- {
- _asn1_error_description_value_not_found (p, ErrorDescription);
- err = ASN1_VALUE_NOT_FOUND;
- goto error;
- }
- len2 = asn1_get_length_der (p->value, p->value_len, &len3);
- if (len2 < 0)
- {
- err = ASN1_DER_ERROR;
- goto error;
- }
- max_len -= len2;
- if (max_len >= 0)
- memcpy (der + counter, p->value + len3, len2);
- counter += len2;
- move = RIGHT;
- break;
- default:
- move = (move == UP) ? RIGHT : DOWN;
- break;
- }
-
- if ((move != DOWN) && (counter != counter_old))
- {
- err = _asn1_complete_explicit_tag (p, der, &counter, &max_len);
- if (err != ASN1_SUCCESS && err != ASN1_MEM_ERROR)
- goto error;
- }
-
- if (p == node && move != DOWN)
- break;
-
- if (move == DOWN)
- {
- if (p->down)
- p = p->down;
- else
- move = RIGHT;
- }
- if (move == RIGHT)
- {
- if (p->right)
- p = p->right;
- else
- move = UP;
- }
- if (move == UP)
- p = _asn1_find_up (p);
- }
-
- *len = counter;
-
- if (max_len < 0)
- {
- err = ASN1_MEM_ERROR;
- goto error;
- }
-
- err = ASN1_SUCCESS;
-
-error:
- asn1_delete_structure (&node);
- return err;
-}
-</pre>
-</div>
-</td>
-</tr>
-<tr class="function_entry_untestable">
-<td class="function_entry_filename">
-<a href="javascript:void(0);" title="show/hide function source"
onClick="javascript:show_hide('_asn1_extract_tag_der_src',
'_asn1_extract_tag_der_button')"><span
id="_asn1_extract_tag_der_button">↓</span></a>
-</td>
-<td class="function_entry_name">
-_asn1_extract_tag_der
-</td>
-<td class="function_entry_cyclo">
-74
-</td>
-<td class="function_entry_number">
-105
-</td>
-<td class="function_entry_number">
-197
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/decoding.c;hb=HEAD">lib/decoding.c</a>
-</td>
-</tr>
-<tr>
-<td colspan="6" height="0">
-<div id="_asn1_extract_tag_der_src" class="function_src" style="position:
relative; display: none;">
-<pre class="function_src">
-static int
-_asn1_extract_tag_der (ASN1_TYPE node, const unsigned char *der, int der_len,
- int *ret_len)
-{
- ASN1_TYPE p;
- int counter, len2, len3, is_tag_implicit;
- unsigned long tag, tag_implicit = 0;
- unsigned char class, class2, class_implicit = 0;
-
- if (der_len <= 0)
- return ASN1_GENERIC_ERROR;
-
- counter = is_tag_implicit = 0;
-
- if (node->type & CONST_TAG)
- {
- p = node->down;
- while (p)
- {
- if (type_field (p->type) == TYPE_TAG)
- {
- if (p->type & CONST_APPLICATION)
- class2 = ASN1_CLASS_APPLICATION;
- else if (p->type & CONST_UNIVERSAL)
- class2 = ASN1_CLASS_UNIVERSAL;
- else if (p->type & CONST_PRIVATE)
- class2 = ASN1_CLASS_PRIVATE;
- else
- class2 = ASN1_CLASS_CONTEXT_SPECIFIC;
-
- if (p->type & CONST_EXPLICIT)
- {
- if (asn1_get_tag_der
- (der + counter, der_len - counter, &class, &len2,
- &tag) != ASN1_SUCCESS)
- return ASN1_DER_ERROR;
-
- if (counter + len2 > der_len)
- return ASN1_DER_ERROR;
- counter += len2;
-
- len3 =
- asn1_get_length_ber (der + counter, der_len - counter,
- &len2);
- if (len3 < 0)
- return ASN1_DER_ERROR;
-
- counter += len2;
- if (counter > der_len)
- return ASN1_DER_ERROR;
-
- if (!is_tag_implicit)
- {
- if ((class != (class2 | ASN1_CLASS_STRUCTURED)) ||
- (tag != strtoul ((char *) p->value, NULL, 10)))
- return ASN1_TAG_ERROR;
- }
- else
- { /* ASN1_TAG_IMPLICIT */
- if ((class != class_implicit) || (tag != tag_implicit))
- return ASN1_TAG_ERROR;
- }
- is_tag_implicit = 0;
- }
- else
- { /* ASN1_TAG_IMPLICIT */
- if (!is_tag_implicit)
- {
- if ((type_field (node->type) == TYPE_SEQUENCE) ||
- (type_field (node->type) == TYPE_SEQUENCE_OF) ||
- (type_field (node->type) == TYPE_SET) ||
- (type_field (node->type) == TYPE_SET_OF))
- class2 |= ASN1_CLASS_STRUCTURED;
- class_implicit = class2;
- tag_implicit = strtoul ((char *) p->value, NULL, 10);
- is_tag_implicit = 1;
- }
- }
- }
- p = p->right;
- }
- }
-
- if (is_tag_implicit)
- {
- if (asn1_get_tag_der
- (der + counter, der_len - counter, &class, &len2,
- &tag) != ASN1_SUCCESS)
- return ASN1_DER_ERROR;
- if (counter + len2 > der_len)
- return ASN1_DER_ERROR;
-
- if ((class != class_implicit) || (tag != tag_implicit))
- {
- if (type_field (node->type) == TYPE_OCTET_STRING)
- {
- class_implicit |= ASN1_CLASS_STRUCTURED;
- if ((class != class_implicit) || (tag != tag_implicit))
- return ASN1_TAG_ERROR;
- }
- else
- return ASN1_TAG_ERROR;
- }
- }
- else
- {
- if (type_field (node->type) == TYPE_TAG)
- {
- counter = 0;
- *ret_len = counter;
- return ASN1_SUCCESS;
- }
-
- if (asn1_get_tag_der
- (der + counter, der_len - counter, &class, &len2,
- &tag) != ASN1_SUCCESS)
- return ASN1_DER_ERROR;
-
- if (counter + len2 > der_len)
- return ASN1_DER_ERROR;
-
- switch (type_field (node->type))
- {
- case TYPE_NULL:
- if ((class != ASN1_CLASS_UNIVERSAL) || (tag != ASN1_TAG_NULL))
- return ASN1_DER_ERROR;
- break;
- case TYPE_BOOLEAN:
- if ((class != ASN1_CLASS_UNIVERSAL) || (tag != ASN1_TAG_BOOLEAN))
- return ASN1_DER_ERROR;
- break;
- case TYPE_INTEGER:
- if ((class != ASN1_CLASS_UNIVERSAL) || (tag != ASN1_TAG_INTEGER))
- return ASN1_DER_ERROR;
- break;
- case TYPE_ENUMERATED:
- if ((class != ASN1_CLASS_UNIVERSAL) || (tag != ASN1_TAG_ENUMERATED))
- return ASN1_DER_ERROR;
- break;
- case TYPE_OBJECT_ID:
- if ((class != ASN1_CLASS_UNIVERSAL) || (tag != ASN1_TAG_OBJECT_ID))
- return ASN1_DER_ERROR;
- break;
- case TYPE_TIME:
- if (node->type & CONST_UTC)
- {
- if ((class != ASN1_CLASS_UNIVERSAL)
- || (tag != ASN1_TAG_UTCTime))
- return ASN1_DER_ERROR;
- }
- else
- {
- if ((class != ASN1_CLASS_UNIVERSAL)
- || (tag != ASN1_TAG_GENERALIZEDTime))
- return ASN1_DER_ERROR;
- }
- break;
- case TYPE_OCTET_STRING:
- if (((class != ASN1_CLASS_UNIVERSAL)
- && (class != (ASN1_CLASS_UNIVERSAL | ASN1_CLASS_STRUCTURED)))
- || (tag != ASN1_TAG_OCTET_STRING))
- return ASN1_DER_ERROR;
- break;
- case TYPE_GENERALSTRING:
- if ((class != ASN1_CLASS_UNIVERSAL)
- || (tag != ASN1_TAG_GENERALSTRING))
- return ASN1_DER_ERROR;
- break;
- case TYPE_BIT_STRING:
- if ((class != ASN1_CLASS_UNIVERSAL) || (tag != ASN1_TAG_BIT_STRING))
- return ASN1_DER_ERROR;
- break;
- case TYPE_SEQUENCE:
- case TYPE_SEQUENCE_OF:
- if ((class != (ASN1_CLASS_UNIVERSAL | ASN1_CLASS_STRUCTURED))
- || (tag != ASN1_TAG_SEQUENCE))
- return ASN1_DER_ERROR;
- break;
- case TYPE_SET:
- case TYPE_SET_OF:
- if ((class != (ASN1_CLASS_UNIVERSAL | ASN1_CLASS_STRUCTURED))
- || (tag != ASN1_TAG_SET))
- return ASN1_DER_ERROR;
- break;
- case TYPE_ANY:
- counter -= len2;
- break;
- default:
- return ASN1_DER_ERROR;
- break;
- }
- }
-
- counter += len2;
- *ret_len = counter;
- return ASN1_SUCCESS;
-}
-</pre>
-</div>
-</td>
-</tr>
-<tr class="function_entry_untestable">
-<td class="function_entry_filename">
-<a href="javascript:void(0);" title="show/hide function source"
onClick="javascript:show_hide('yyparse_src', 'yyparse_button')"><span
id="yyparse_button">↓</span></a>
-</td>
-<td class="function_entry_name">
-yyparse
-</td>
-<td class="function_entry_cyclo">
-145
-</td>
-<td class="function_entry_number">
-431
-</td>
-<td class="function_entry_number">
-1015
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/ASN1.c;hb=HEAD">lib/ASN1.c</a>
-</td>
-</tr>
-<tr>
-<td colspan="6" height="0">
-<div id="yyparse_src" class="function_src" style="position: relative; display:
none;">
-<pre class="function_src">
-int
-yyparse (void *YYPARSE_PARAM)
-#else
-int
-yyparse (YYPARSE_PARAM)
- void *YYPARSE_PARAM;
-#endif
-#else /* ! YYPARSE_PARAM */
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-int
-yyparse (void)
-#else
-int
-yyparse ()
-
-#endif
-#endif
-{
-
- int yystate;
- int yyn;
- int yyresult;
- /* Number of tokens to shift before error messages enabled. */
- int yyerrstatus;
- /* Look-ahead token as an internal (translated) token number. */
- int yytoken = 0;
-#if YYERROR_VERBOSE
- /* Buffer for error messages, and its allocated size. */
- char yymsgbuf[128];
- char *yymsg = yymsgbuf;
- YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
-#endif
-
- /* Three stacks and their tools:
- `yyss': related to states,
- `yyvs': related to semantic values,
- `yyls': related to locations.
-
- Refer to the stacks thru separate pointers, to allow yyoverflow
- to reallocate them elsewhere. */
-
- /* The state stack. */
- yytype_int16 yyssa[YYINITDEPTH];
- yytype_int16 *yyss = yyssa;
- yytype_int16 *yyssp;
-
- /* The semantic value stack. */
- YYSTYPE yyvsa[YYINITDEPTH];
- YYSTYPE *yyvs = yyvsa;
- YYSTYPE *yyvsp;
-
-
-
-#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N))
-
- YYSIZE_T yystacksize = YYINITDEPTH;
-
- /* The variables used to return semantic value and location from the
- action routines. */
- YYSTYPE yyval;
-
-
- /* The number of symbols on the RHS of the reduced rule.
- Keep to zero when no symbol should be popped. */
- int yylen = 0;
-
- YYDPRINTF ((stderr, "Starting parse\n"));
-
- yystate = 0;
- yyerrstatus = 0;
- yynerrs = 0;
- yychar = YYEMPTY; /* Cause a token to be read. */
-
- /* Initialize stack pointers.
- Waste one element of value and location stack
- so that they stay on the same level as the state stack.
- The wasted elements are never initialized. */
-
- yyssp = yyss;
- yyvsp = yyvs;
-
- goto yysetstate;
-
-/*------------------------------------------------------------.
-| yynewstate -- Push a new state, which is found in yystate. |
-`------------------------------------------------------------*/
- yynewstate:
- /* In all cases, when you get here, the value and location stacks
- have just been pushed. So pushing a state here evens the stacks. */
- yyssp++;
-
- yysetstate:
- *yyssp = yystate;
-
- if (yyss + yystacksize - 1 <= yyssp)
- {
- /* Get the current used size of the three stacks, in elements. */
- YYSIZE_T yysize = yyssp - yyss + 1;
-
-#ifdef yyoverflow
- {
- /* Give user a chance to reallocate the stack. Use copies of
- these so that the &'s don't force the real ones into
- memory. */
- YYSTYPE *yyvs1 = yyvs;
- yytype_int16 *yyss1 = yyss;
-
-
- /* Each stack pointer address is followed by the size of the
- data in use in that stack, in bytes. This used to be a
- conditional around just the two extra args, but that might
- be undefined if yyoverflow is a macro. */
- yyoverflow (YY_("memory exhausted"),
- &yyss1, yysize * sizeof (*yyssp),
- &yyvs1, yysize * sizeof (*yyvsp),
-
- &yystacksize);
-
- yyss = yyss1;
- yyvs = yyvs1;
- }
-#else /* no yyoverflow */
-# ifndef YYSTACK_RELOCATE
- goto yyexhaustedlab;
-# else
- /* Extend the stack our own way. */
- if (YYMAXDEPTH <= yystacksize)
- goto yyexhaustedlab;
- yystacksize *= 2;
- if (YYMAXDEPTH < yystacksize)
- yystacksize = YYMAXDEPTH;
-
- {
- yytype_int16 *yyss1 = yyss;
- union yyalloc *yyptr =
- (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
- if (! yyptr)
- goto yyexhaustedlab;
- YYSTACK_RELOCATE (yyss);
- YYSTACK_RELOCATE (yyvs);
-
-# undef YYSTACK_RELOCATE
- if (yyss1 != yyssa)
- YYSTACK_FREE (yyss1);
- }
-# endif
-#endif /* no yyoverflow */
-
- yyssp = yyss + yysize - 1;
- yyvsp = yyvs + yysize - 1;
-
-
- YYDPRINTF ((stderr, "Stack size increased to %lu\n",
- (unsigned long int) yystacksize));
-
- if (yyss + yystacksize - 1 <= yyssp)
- YYABORT;
- }
-
- YYDPRINTF ((stderr, "Entering state %d\n", yystate));
-
- goto yybackup;
-
-/*-----------.
-| yybackup. |
-`-----------*/
-yybackup:
-
- /* Do appropriate processing given the current state. Read a
- look-ahead token if we need one and don't already have one. */
-
- /* First try to decide what to do without reference to look-ahead token. */
- yyn = yypact[yystate];
- if (yyn == YYPACT_NINF)
- goto yydefault;
-
- /* Not known => get a look-ahead token if don't already have one. */
-
- /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */
- if (yychar == YYEMPTY)
- {
- YYDPRINTF ((stderr, "Reading a token: "));
- yychar = YYLEX;
- }
-
- if (yychar <= YYEOF)
- {
- yychar = yytoken = YYEOF;
- YYDPRINTF ((stderr, "Now at end of input.\n"));
- }
- else
- {
- yytoken = YYTRANSLATE (yychar);
- YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
- }
-
- /* If the proper action on seeing token YYTOKEN is to reduce or to
- detect an error, take that action. */
- yyn += yytoken;
- if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
- goto yydefault;
- yyn = yytable[yyn];
- if (yyn <= 0)
- {
- if (yyn == 0 || yyn == YYTABLE_NINF)
- goto yyerrlab;
- yyn = -yyn;
- goto yyreduce;
- }
-
- if (yyn == YYFINAL)
- YYACCEPT;
-
- /* Count tokens shifted since error; after three, turn off error
- status. */
- if (yyerrstatus)
- yyerrstatus--;
-
- /* Shift the look-ahead token. */
- YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
-
- /* Discard the shifted token unless it is eof. */
- if (yychar != YYEOF)
- yychar = YYEMPTY;
-
- yystate = yyn;
- *++yyvsp = yylval;
-
- goto yynewstate;
-
-
-/*-----------------------------------------------------------.
-| yydefault -- do the default action for the current state. |
-`-----------------------------------------------------------*/
-yydefault:
- yyn = yydefact[yystate];
- if (yyn == 0)
- goto yyerrlab;
- goto yyreduce;
-
-
-/*-----------------------------.
-| yyreduce -- Do a reduction. |
-`-----------------------------*/
-yyreduce:
- /* yyn is the number of a rule to reduce with. */
- yylen = yyr2[yyn];
-
- /* If YYLEN is nonzero, implement the default value of the action:
- `$$ = $1'.
-
- Otherwise, the following line sets YYVAL to garbage.
- This behavior is undocumented and Bison
- users should not rely upon it. Assigning to YYVAL
- unconditionally makes the parser a bit smaller, and it avoids a
- GCC warning that YYVAL may be used uninitialized. */
- yyval = yyvsp[1-yylen];
-
-
- YY_REDUCE_PRINT (yyn);
- switch (yyn)
- {
- case 2:
-#line 127 "ASN1.y"
- {(yyval.node)=_asn1_add_node(TYPE_DEFINITIONS|(yyvsp[(3) - (8)].constant));
- _asn1_set_name((yyval.node),_asn1_get_name((yyvsp[(1) -
(8)].node)));
- _asn1_set_name((yyvsp[(1) - (8)].node),"");
- _asn1_set_right((yyvsp[(1) - (8)].node),(yyvsp[(7) -
(8)].node));
- _asn1_set_down((yyval.node),(yyvsp[(1) - (8)].node));
-
- p_tree=(yyval.node);
- }
- break;
-
- case 3:
-#line 137 "ASN1.y"
- {strcpy((yyval.str),(yyvsp[(1) - (1)].str));}
- break;
-
- case 4:
-#line 138 "ASN1.y"
- {strcpy((yyval.str),(yyvsp[(2) - (2)].str));}
- break;
-
- case 5:
-#line 141 "ASN1.y"
- {strcpy((yyval.str),"-");
- strcat((yyval.str),(yyvsp[(2) - (2)].str));}
- break;
-
- case 6:
-#line 145 "ASN1.y"
- {strcpy((yyval.str),(yyvsp[(1) - (1)].str));}
- break;
-
- case 7:
-#line 146 "ASN1.y"
- {strcpy((yyval.str),(yyvsp[(1) - (1)].str));}
- break;
-
- case 8:
-#line 149 "ASN1.y"
- {strcpy((yyval.str),(yyvsp[(1) - (1)].str));}
- break;
-
- case 9:
-#line 150 "ASN1.y"
- {strcpy((yyval.str),(yyvsp[(1) - (1)].str));}
- break;
-
- case 10:
-#line 153 "ASN1.y"
- {strcpy((yyval.str),(yyvsp[(1) - (1)].str));}
- break;
-
- case 11:
-#line 154 "ASN1.y"
- {strcpy((yyval.str),(yyvsp[(1) - (1)].str));}
- break;
-
- case 12:
-#line 157 "ASN1.y"
- {(yyval.node)=_asn1_add_node(TYPE_CONSTANT);
- _asn1_set_value((yyval.node),(yyvsp[(2)
- (3)].str),strlen((yyvsp[(2) - (3)].str))+1);}
- break;
-
- case 13:
-#line 159 "ASN1.y"
- {(yyval.node)=_asn1_add_node(TYPE_CONSTANT);
- _asn1_set_name((yyval.node),(yyvsp[(1) -
(4)].str));
- _asn1_set_value((yyval.node),(yyvsp[(3)
- (4)].str),strlen((yyvsp[(3) - (4)].str))+1);}
- break;
-
- case 14:
-#line 164 "ASN1.y"
- {(yyval.node)=(yyvsp[(1) - (1)].node);}
- break;
-
- case 15:
-#line 165 "ASN1.y"
- {(yyval.node)=(yyvsp[(1) - (3)].node);
-
_asn1_set_right(_asn1_get_last_right((yyvsp[(1) - (3)].node)),(yyvsp[(3) -
(3)].node));}
- break;
-
- case 16:
-#line 169 "ASN1.y"
- {(yyval.node)=_asn1_add_node(TYPE_CONSTANT);
- _asn1_set_value((yyval.node),(yyvsp[(1) -
(1)].str),strlen((yyvsp[(1) - (1)].str))+1);}
- break;
-
- case 17:
-#line 171 "ASN1.y"
- {(yyval.node)=_asn1_add_node(TYPE_CONSTANT);
- _asn1_set_name((yyval.node),(yyvsp[(1) -
(4)].str));
- _asn1_set_value((yyval.node),(yyvsp[(3) -
(4)].str),strlen((yyvsp[(3) - (4)].str))+1);}
- break;
-
- case 18:
-#line 176 "ASN1.y"
- {(yyval.node)=(yyvsp[(1) - (1)].node);}
- break;
-
- case 19:
-#line 177 "ASN1.y"
- {(yyval.node)=(yyvsp[(1) - (2)].node);
-
_asn1_set_right(_asn1_get_last_right((yyvsp[(1) - (2)].node)),(yyvsp[(2) -
(2)].node));}
- break;
-
- case 20:
-#line 181 "ASN1.y"
- {(yyval.constant)=CONST_UNIVERSAL;}
- break;
-
- case 21:
-#line 182 "ASN1.y"
- {(yyval.constant)=CONST_PRIVATE;}
- break;
-
- case 22:
-#line 183 "ASN1.y"
- {(yyval.constant)=CONST_APPLICATION;}
- break;
-
- case 23:
-#line 186 "ASN1.y"
- {(yyval.node)=_asn1_add_node(TYPE_TAG);
- _asn1_set_value((yyval.node),(yyvsp[(2) -
(3)].str),strlen((yyvsp[(2) - (3)].str))+1);}
- break;
-
- case 24:
-#line 188 "ASN1.y"
- {(yyval.node)=_asn1_add_node(TYPE_TAG | (yyvsp[(2) - (4)].constant));
- _asn1_set_value((yyval.node),(yyvsp[(3) -
(4)].str),strlen((yyvsp[(3) - (4)].str))+1);}
- break;
-
- case 25:
-#line 192 "ASN1.y"
- {(yyval.node)=(yyvsp[(1) - (1)].node);}
- break;
-
- case 26:
-#line 193 "ASN1.y"
- {(yyval.node)=_asn1_mod_type((yyvsp[(1) - (2)].node),CONST_EXPLICIT);}
- break;
-
- case 27:
-#line 194 "ASN1.y"
- {(yyval.node)=_asn1_mod_type((yyvsp[(1) - (2)].node),CONST_IMPLICIT);}
- break;
-
- case 28:
-#line 197 "ASN1.y"
- {(yyval.node)=_asn1_add_node(TYPE_DEFAULT);
- _asn1_set_value((yyval.node),(yyvsp[(2)
- (2)].str),strlen((yyvsp[(2) - (2)].str))+1);}
- break;
-
- case 29:
-#line 199 "ASN1.y"
- {(yyval.node)=_asn1_add_node(TYPE_DEFAULT|CONST_TRUE);}
- break;
-
- case 30:
-#line 200 "ASN1.y"
- {(yyval.node)=_asn1_add_node(TYPE_DEFAULT|CONST_FALSE);}
- break;
-
- case 33:
-#line 209 "ASN1.y"
- {(yyval.node)=_asn1_add_node(TYPE_INTEGER);}
- break;
-
- case 34:
-#line 210 "ASN1.y"
- {(yyval.node)=_asn1_add_node(TYPE_INTEGER|CONST_LIST);
- _asn1_set_down((yyval.node),(yyvsp[(3)
- (4)].node));}
- break;
-
- case 35:
-#line 212 "ASN1.y"
- {(yyval.node)=_asn1_add_node(TYPE_INTEGER);}
- break;
-
- case 36:
-#line 214 "ASN1.y"
- {(yyval.node)=_asn1_add_node(TYPE_INTEGER|CONST_MIN_MAX);
-
_asn1_set_down((yyval.node),_asn1_add_node(TYPE_SIZE));
-
_asn1_set_value(_asn1_get_down((yyval.node)),(yyvsp[(6) -
(7)].str),strlen((yyvsp[(6) - (7)].str))+1);
-
_asn1_set_name(_asn1_get_down((yyval.node)),(yyvsp[(3) - (7)].str));}
- break;
-
- case 37:
-#line 220 "ASN1.y"
- {(yyval.node)=_asn1_add_node(TYPE_BOOLEAN);}
- break;
-
- case 38:
-#line 223 "ASN1.y"
- {(yyval.node)=_asn1_add_node(TYPE_TIME|CONST_UTC);}
- break;
-
- case 39:
-#line 224 "ASN1.y"
- {(yyval.node)=_asn1_add_node(TYPE_TIME|CONST_GENERALIZED);}
- break;
-
- case 40:
-#line 227 "ASN1.y"
- {(yyval.node)=_asn1_add_node(TYPE_SIZE|CONST_1_PARAM);
- _asn1_set_value((yyval.node),(yyvsp[(3) -
(4)].str),strlen((yyvsp[(3) - (4)].str))+1);}
- break;
-
- case 41:
-#line 230 "ASN1.y"
- {(yyval.node)=_asn1_add_node(TYPE_SIZE|CONST_MIN_MAX);
- _asn1_set_value((yyval.node),(yyvsp[(3) -
(7)].str),strlen((yyvsp[(3) - (7)].str))+1);
- _asn1_set_name((yyval.node),(yyvsp[(6) -
(7)].str));}
- break;
-
- case 42:
-#line 235 "ASN1.y"
- {(yyval.node)=(yyvsp[(1) - (1)].node);}
- break;
-
- case 43:
-#line 236 "ASN1.y"
- {(yyval.node)=(yyvsp[(2) - (3)].node);}
- break;
-
- case 44:
-#line 239 "ASN1.y"
- {(yyval.node)=_asn1_add_node(TYPE_GENERALSTRING);}
- break;
-
- case 45:
-#line 240 "ASN1.y"
- {(yyval.node)=_asn1_add_node(TYPE_GENERALSTRING|CONST_SIZE);
-
_asn1_set_down((yyval.node),(yyvsp[(2) - (2)].node));}
- break;
-
- case 46:
-#line 244 "ASN1.y"
- {(yyval.node)=_asn1_add_node(TYPE_OCTET_STRING);}
- break;
-
- case 47:
-#line 245 "ASN1.y"
- {(yyval.node)=_asn1_add_node(TYPE_OCTET_STRING|CONST_SIZE);
-
_asn1_set_down((yyval.node),(yyvsp[(3) - (3)].node));}
- break;
-
- case 48:
-#line 249 "ASN1.y"
- {(yyval.node)=_asn1_add_node(TYPE_CONSTANT);
- _asn1_set_name((yyval.node),(yyvsp[(1) -
(4)].str));
- _asn1_set_value((yyval.node),(yyvsp[(3) -
(4)].str),strlen((yyvsp[(3) - (4)].str))+1);}
- break;
-
- case 49:
-#line 254 "ASN1.y"
- {(yyval.node)=(yyvsp[(1) - (1)].node);}
- break;
-
- case 50:
-#line 255 "ASN1.y"
- {(yyval.node)=(yyvsp[(1) - (3)].node);
-
_asn1_set_right(_asn1_get_last_right((yyvsp[(1) - (3)].node)),(yyvsp[(3) -
(3)].node));}
- break;
-
- case 51:
-#line 259 "ASN1.y"
- {(yyval.node)=_asn1_add_node(TYPE_BIT_STRING);}
- break;
-
- case 52:
-#line 260 "ASN1.y"
- {(yyval.node)=_asn1_add_node(TYPE_BIT_STRING|CONST_SIZE);}
- break;
-
- case 53:
-#line 262 "ASN1.y"
- {(yyval.node)=_asn1_add_node(TYPE_BIT_STRING|CONST_LIST);
- _asn1_set_down((yyval.node),(yyvsp[(4) -
(5)].node));}
- break;
-
- case 54:
-#line 267 "ASN1.y"
- {(yyval.node)=_asn1_add_node(TYPE_ENUMERATED|CONST_LIST);
- _asn1_set_down((yyval.node),(yyvsp[(3) -
(4)].node));}
- break;
-
- case 55:
-#line 272 "ASN1.y"
- {(yyval.node)=_asn1_add_node(TYPE_OBJECT_ID);}
- break;
-
- case 56:
-#line 275 "ASN1.y"
- {(yyval.node)=_asn1_add_node(TYPE_IDENTIFIER);
- _asn1_set_value((yyval.node),(yyvsp[(1)
- (1)].str),strlen((yyvsp[(1) - (1)].str))+1);}
- break;
-
- case 57:
-#line 277 "ASN1.y"
- {(yyval.node)=_asn1_add_node(TYPE_IDENTIFIER|CONST_SIZE);
- _asn1_set_value((yyval.node),(yyvsp[(1)
- (2)].str),strlen((yyvsp[(1) - (2)].str))+1);
- _asn1_set_down((yyval.node),(yyvsp[(2)
- (2)].node));}
- break;
-
- case 58:
-#line 280 "ASN1.y"
- {(yyval.node)=(yyvsp[(1) - (1)].node);}
- break;
-
- case 59:
-#line 281 "ASN1.y"
- {(yyval.node)=(yyvsp[(1) - (1)].node);}
- break;
-
- case 60:
-#line 282 "ASN1.y"
- {(yyval.node)=(yyvsp[(1) - (1)].node);}
- break;
-
- case 62:
-#line 284 "ASN1.y"
- {(yyval.node)=(yyvsp[(1) - (1)].node);}
- break;
-
- case 63:
-#line 285 "ASN1.y"
- {(yyval.node)=(yyvsp[(1) - (1)].node);}
- break;
-
- case 64:
-#line 286 "ASN1.y"
- {(yyval.node)=(yyvsp[(1) - (1)].node);}
- break;
-
- case 65:
-#line 287 "ASN1.y"
- {(yyval.node)=(yyvsp[(1) - (1)].node);}
- break;
-
- case 66:
-#line 288 "ASN1.y"
- {(yyval.node)=(yyvsp[(1) - (1)].node);}
- break;
-
- case 67:
-#line 289 "ASN1.y"
- {(yyval.node)=(yyvsp[(1) - (1)].node);}
- break;
-
- case 68:
-#line 290 "ASN1.y"
- {(yyval.node)=(yyvsp[(1) - (1)].node);}
- break;
-
- case 69:
-#line 291 "ASN1.y"
- {(yyval.node)=(yyvsp[(1) - (1)].node);}
- break;
-
- case 70:
-#line 292 "ASN1.y"
- {(yyval.node)=_asn1_add_node(TYPE_NULL);}
- break;
-
- case 71:
-#line 295 "ASN1.y"
- {(yyval.node)=(yyvsp[(1) - (1)].node);}
- break;
-
- case 72:
-#line 296 "ASN1.y"
- {(yyval.node)=_asn1_mod_type((yyvsp[(2) - (2)].node),CONST_TAG);
- _asn1_set_right((yyvsp[(1) -
(2)].node),_asn1_get_down((yyval.node)));
-
_asn1_set_down((yyval.node),(yyvsp[(1) - (2)].node));}
- break;
-
- case 73:
-#line 301 "ASN1.y"
- {(yyval.node)=(yyvsp[(1) - (1)].node);}
- break;
-
- case 74:
-#line 302 "ASN1.y"
- {(yyval.node)=_asn1_mod_type((yyvsp[(1) - (2)].node),CONST_DEFAULT);
-
_asn1_set_right((yyvsp[(2) - (2)].node),_asn1_get_down((yyval.node)));
-
_asn1_set_down((yyval.node),(yyvsp[(2) - (2)].node));}
- break;
-
- case 75:
-#line 305 "ASN1.y"
- {(yyval.node)=_asn1_mod_type((yyvsp[(1) - (2)].node),CONST_OPTION);}
- break;
-
- case 76:
-#line 308 "ASN1.y"
- {(yyval.node)=_asn1_set_name((yyvsp[(2) - (2)].node),(yyvsp[(1) -
(2)].str));}
- break;
-
- case 77:
-#line 311 "ASN1.y"
- {(yyval.node)=(yyvsp[(1) - (1)].node);}
- break;
-
- case 78:
-#line 312 "ASN1.y"
- {(yyval.node)=(yyvsp[(1) - (3)].node);
-
_asn1_set_right(_asn1_get_last_right((yyvsp[(1) - (3)].node)),(yyvsp[(3) -
(3)].node));}
- break;
-
- case 79:
-#line 316 "ASN1.y"
- {(yyval.node)=_asn1_add_node(TYPE_SEQUENCE);
-
_asn1_set_down((yyval.node),(yyvsp[(3) - (4)].node));}
- break;
-
- case 80:
-#line 318 "ASN1.y"
- {(yyval.node)=_asn1_add_node(TYPE_SEQUENCE_OF);
-
_asn1_set_down((yyval.node),(yyvsp[(3) - (3)].node));}
- break;
-
- case 81:
-#line 320 "ASN1.y"
- {(yyval.node)=_asn1_add_node(TYPE_SEQUENCE_OF|CONST_SIZE);
- _asn1_set_right((yyvsp[(2) -
(4)].node),(yyvsp[(4) - (4)].node));
-
_asn1_set_down((yyval.node),(yyvsp[(2) - (4)].node));}
- break;
-
- case 82:
-#line 325 "ASN1.y"
- {(yyval.node)=_asn1_add_node(TYPE_SET);
- _asn1_set_down((yyval.node),(yyvsp[(3) -
(4)].node));}
- break;
-
- case 83:
-#line 327 "ASN1.y"
- {(yyval.node)=_asn1_add_node(TYPE_SET_OF);
- _asn1_set_down((yyval.node),(yyvsp[(3) -
(3)].node));}
- break;
-
- case 84:
-#line 329 "ASN1.y"
- {(yyval.node)=_asn1_add_node(TYPE_SET_OF|CONST_SIZE);
- _asn1_set_right((yyvsp[(2) -
(4)].node),(yyvsp[(4) - (4)].node));
- _asn1_set_down((yyval.node),(yyvsp[(2)
- (4)].node));}
- break;
-
- case 85:
-#line 334 "ASN1.y"
- {(yyval.node)=_asn1_add_node(TYPE_CHOICE);
-
_asn1_set_down((yyval.node),(yyvsp[(3) - (4)].node));}
- break;
-
- case 86:
-#line 338 "ASN1.y"
- {(yyval.node)=_asn1_add_node(TYPE_ANY);}
- break;
-
- case 87:
-#line 339 "ASN1.y"
- {(yyval.node)=_asn1_add_node(TYPE_ANY|CONST_DEFINED_BY);
-
_asn1_set_down((yyval.node),_asn1_add_node(TYPE_CONSTANT));
-
_asn1_set_name(_asn1_get_down((yyval.node)),(yyvsp[(4) - (4)].str));}
- break;
-
- case 88:
-#line 344 "ASN1.y"
- {(yyval.node)=_asn1_set_name((yyvsp[(3) - (3)].node),(yyvsp[(1) -
(3)].str));}
- break;
-
- case 89:
-#line 348 "ASN1.y"
- {(yyval.node)=_asn1_add_node(TYPE_OBJECT_ID|CONST_ASSIGN);
- _asn1_set_name((yyval.node),(yyvsp[(1) - (7)].str));
- _asn1_set_down((yyval.node),(yyvsp[(6) - (7)].node));}
- break;
-
- case 90:
-#line 352 "ASN1.y"
- {(yyval.node)=_asn1_add_node(TYPE_OBJECT_ID|CONST_ASSIGN|CONST_1_PARAM);
- _asn1_set_name((yyval.node),(yyvsp[(1) - (6)].str));
- _asn1_set_value((yyval.node),(yyvsp[(2) -
(6)].str),strlen((yyvsp[(2) - (6)].str))+1);
- _asn1_set_down((yyval.node),(yyvsp[(5) - (6)].node));}
- break;
-
- case 91:
-#line 357 "ASN1.y"
- {(yyval.node)=_asn1_add_node(TYPE_INTEGER|CONST_ASSIGN);
- _asn1_set_name((yyval.node),(yyvsp[(1) - (4)].str));
- _asn1_set_value((yyval.node),(yyvsp[(4) -
(4)].str),strlen((yyvsp[(4) - (4)].str))+1);}
- break;
-
- case 92:
-#line 362 "ASN1.y"
- {(yyval.node)=(yyvsp[(1) - (1)].node);}
- break;
-
- case 93:
-#line 363 "ASN1.y"
- {(yyval.node)=(yyvsp[(1) - (1)].node);}
- break;
-
- case 94:
-#line 366 "ASN1.y"
- {(yyval.node)=(yyvsp[(1) - (1)].node);}
- break;
-
- case 95:
-#line 367 "ASN1.y"
- {(yyval.node)=(yyvsp[(1) - (2)].node);
-
_asn1_set_right(_asn1_get_last_right((yyvsp[(1) - (2)].node)),(yyvsp[(2) -
(2)].node));}
- break;
-
- case 96:
-#line 371 "ASN1.y"
- {(yyval.node)=_asn1_add_node(TYPE_OBJECT_ID);
-
_asn1_set_down((yyval.node),(yyvsp[(3) - (4)].node));
-
_asn1_set_name((yyval.node),(yyvsp[(1) - (4)].str));}
- break;
-
- case 97:
-#line 374 "ASN1.y"
- {(yyval.node)=_asn1_add_node(TYPE_OBJECT_ID);
-
_asn1_set_name((yyval.node),(yyvsp[(1) - (3)].str));}
- break;
-
- case 98:
-#line 398 "ASN1.y"
- {(yyval.constant)=CONST_EXPLICIT;}
- break;
-
- case 99:
-#line 399 "ASN1.y"
- {(yyval.constant)=CONST_IMPLICIT;}
- break;
-
-
-/* Line 1267 of yacc.c. */
-#line 2141 "ASN1.c"
- default: break;
- }
- YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
-
- YYPOPSTACK (yylen);
- yylen = 0;
- YY_STACK_PRINT (yyss, yyssp);
-
- *++yyvsp = yyval;
-
-
- /* Now `shift' the result of the reduction. Determine what state
- that goes to, based on the state we popped back to and the rule
- number reduced by. */
-
- yyn = yyr1[yyn];
-
- yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
- if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
- yystate = yytable[yystate];
- else
- yystate = yydefgoto[yyn - YYNTOKENS];
-
- goto yynewstate;
-
-
-/*------------------------------------.
-| yyerrlab -- here on detecting error |
-`------------------------------------*/
-yyerrlab:
- /* If not already recovering from an error, report this error. */
- if (!yyerrstatus)
- {
- ++yynerrs;
-#if ! YYERROR_VERBOSE
- yyerror (YY_("syntax error"));
-#else
- {
- YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
- if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
- {
- YYSIZE_T yyalloc = 2 * yysize;
- if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
- yyalloc = YYSTACK_ALLOC_MAXIMUM;
- if (yymsg != yymsgbuf)
- YYSTACK_FREE (yymsg);
- yymsg = (char *) YYSTACK_ALLOC (yyalloc);
- if (yymsg)
- yymsg_alloc = yyalloc;
- else
- {
- yymsg = yymsgbuf;
- yymsg_alloc = sizeof yymsgbuf;
- }
- }
-
- if (0 < yysize && yysize <= yymsg_alloc)
- {
- (void) yysyntax_error (yymsg, yystate, yychar);
- yyerror (yymsg);
- }
- else
- {
- yyerror (YY_("syntax error"));
- if (yysize != 0)
- goto yyexhaustedlab;
- }
- }
-#endif
- }
-
-
-
- if (yyerrstatus == 3)
- {
- /* If just tried and failed to reuse look-ahead token after an
- error, discard it. */
-
- if (yychar <= YYEOF)
- {
- /* Return failure if at end of input. */
- if (yychar == YYEOF)
- YYABORT;
- }
- else
- {
- yydestruct ("Error: discarding",
- yytoken, &yylval);
- yychar = YYEMPTY;
- }
- }
-
- /* Else will try to reuse look-ahead token after shifting the error
- token. */
- goto yyerrlab1;
-
-
-/*---------------------------------------------------.
-| yyerrorlab -- error raised explicitly by YYERROR. |
-`---------------------------------------------------*/
-yyerrorlab:
-
- /* Pacify compilers like GCC when the user code never invokes
- YYERROR and the label yyerrorlab therefore never appears in user
- code. */
- if (/*CONSTCOND*/ 0)
- goto yyerrorlab;
-
- /* Do not reclaim the symbols of the rule which action triggered
- this YYERROR. */
- YYPOPSTACK (yylen);
- yylen = 0;
- YY_STACK_PRINT (yyss, yyssp);
- yystate = *yyssp;
- goto yyerrlab1;
-
-
-/*-------------------------------------------------------------.
-| yyerrlab1 -- common code for both syntax error and YYERROR. |
-`-------------------------------------------------------------*/
-yyerrlab1:
- yyerrstatus = 3; /* Each real token shifted decrements this. */
-
- for (;;)
- {
- yyn = yypact[yystate];
- if (yyn != YYPACT_NINF)
- {
- yyn += YYTERROR;
- if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
- {
- yyn = yytable[yyn];
- if (0 < yyn)
- break;
- }
- }
-
- /* Pop the current state because it cannot handle the error token. */
- if (yyssp == yyss)
- YYABORT;
-
-
- yydestruct ("Error: popping",
- yystos[yystate], yyvsp);
- YYPOPSTACK (1);
- yystate = *yyssp;
- YY_STACK_PRINT (yyss, yyssp);
- }
-
- if (yyn == YYFINAL)
- YYACCEPT;
-
- *++yyvsp = yylval;
-
-
- /* Shift the error token. */
- YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
-
- yystate = yyn;
- goto yynewstate;
-
-
-/*-------------------------------------.
-| yyacceptlab -- YYACCEPT comes here. |
-`-------------------------------------*/
-yyacceptlab:
- yyresult = 0;
- goto yyreturn;
-
-/*-----------------------------------.
-| yyabortlab -- YYABORT comes here. |
-`-----------------------------------*/
-yyabortlab:
- yyresult = 1;
- goto yyreturn;
-
-#ifndef yyoverflow
-/*-------------------------------------------------.
-| yyexhaustedlab -- memory exhaustion comes here. |
-`-------------------------------------------------*/
-yyexhaustedlab:
- yyerror (YY_("memory exhausted"));
- yyresult = 2;
- /* Fall through. */
-#endif
-
-yyreturn:
- if (yychar != YYEOF && yychar != YYEMPTY)
- yydestruct ("Cleanup: discarding lookahead",
- yytoken, &yylval);
- /* Do not reclaim the symbols of the rule which action triggered
- this YYABORT or YYACCEPT. */
- YYPOPSTACK (yylen);
- YY_STACK_PRINT (yyss, yyssp);
- while (yyssp != yyss)
- {
- yydestruct ("Cleanup: popping",
- yystos[*yyssp], yyvsp);
- YYPOPSTACK (1);
- }
-#ifndef yyoverflow
- if (yyss != yyssa)
- YYSTACK_FREE (yyss);
-#endif
-#if YYERROR_VERBOSE
- if (yymsg != yymsgbuf)
- YYSTACK_FREE (yymsg);
-#endif
- /* Make sure YYID is used. */
- return YYID (yyresult);
-}
-</pre>
-</div>
-</td>
-</tr>
-<tr class="function_entry_high">
-<td class="function_entry_filename">
-<a href="javascript:void(0);" title="show/hide function source"
onClick="javascript:show_hide('_asn1_expand_object_id_src',
'_asn1_expand_object_id_button')"><span
id="_asn1_expand_object_id_button">↓</span></a>
-</td>
-<td class="function_entry_name">
-_asn1_expand_object_id
-</td>
-<td class="function_entry_cyclo">
-44
-</td>
-<td class="function_entry_number">
-95
-</td>
-<td class="function_entry_number">
-169
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/parser_aux.c;hb=HEAD">lib/parser_aux.c</a>
-</td>
-</tr>
-<tr>
-<td colspan="6" height="0">
-<div id="_asn1_expand_object_id_src" class="function_src" style="position:
relative; display: none;">
-<pre class="function_src">
-asn1_retCode
-_asn1_expand_object_id (ASN1_TYPE node)
-{
- ASN1_TYPE p, p2, p3, p4, p5;
- char name_root[ASN1_MAX_NAME_SIZE], name2[2 * ASN1_MAX_NAME_SIZE + 1];
- int move, tlen;
-
- if (node == NULL)
- return ASN1_ELEMENT_NOT_FOUND;
-
- _asn1_str_cpy (name_root, sizeof (name_root), node->name);
-
- p = node;
- move = DOWN;
-
- while (!((p == node) && (move == UP)))
- {
- if (move != UP)
- {
- if ((type_field (p->type) == TYPE_OBJECT_ID)
- && (p->type & CONST_ASSIGN))
- {
- p2 = p->down;
- if (p2 && (type_field (p2->type) == TYPE_CONSTANT))
- {
- if (p2->value && !isdigit (p2->value[0]))
- {
- _asn1_str_cpy (name2, sizeof (name2), name_root);
- _asn1_str_cat (name2, sizeof (name2), ".");
- _asn1_str_cat (name2, sizeof (name2), p2->value);
- p3 = asn1_find_node (node, name2);
- if (!p3 || (type_field (p3->type) != TYPE_OBJECT_ID) ||
- !(p3->type & CONST_ASSIGN))
- return ASN1_ELEMENT_NOT_FOUND;
- _asn1_set_down (p, p2->right);
- _asn1_remove_node (p2);
- p2 = p;
- p4 = p3->down;
- while (p4)
- {
- if (type_field (p4->type) == TYPE_CONSTANT)
- {
- p5 = _asn1_add_node_only (TYPE_CONSTANT);
- _asn1_set_name (p5, p4->name);
- tlen = strlen (p4->value);
- if (tlen > 0)
- _asn1_set_value (p5, p4->value, tlen + 1);
- if (p2 == p)
- {
- _asn1_set_right (p5, p->down);
- _asn1_set_down (p, p5);
- }
- else
- {
- _asn1_set_right (p5, p2->right);
- _asn1_set_right (p2, p5);
- }
- p2 = p5;
- }
- p4 = p4->right;
- }
- move = DOWN;
- continue;
- }
- }
- }
- move = DOWN;
- }
- else
- move = RIGHT;
-
- if (move == DOWN)
- {
- if (p->down)
- p = p->down;
- else
- move = RIGHT;
- }
-
- if (p == node)
- {
- move = UP;
- continue;
- }
-
- if (move == RIGHT)
- {
- if (p->right)
- p = p->right;
- else
- move = UP;
- }
- if (move == UP)
- p = _asn1_find_up (p);
- }
-
-
- /*******************************/
- /* expand DEFAULT */
- /*******************************/
- p = node;
- move = DOWN;
-
- while (!((p == node) && (move == UP)))
- {
- if (move != UP)
- {
- if ((type_field (p->type) == TYPE_OBJECT_ID) &&
- (p->type & CONST_DEFAULT))
- {
- p2 = p->down;
- if (p2 && (type_field (p2->type) == TYPE_DEFAULT))
- {
- _asn1_str_cpy (name2, sizeof (name2), name_root);
- _asn1_str_cat (name2, sizeof (name2), ".");
- _asn1_str_cat (name2, sizeof (name2), p2->value);
- p3 = asn1_find_node (node, name2);
- if (!p3 || (type_field (p3->type) != TYPE_OBJECT_ID) ||
- !(p3->type & CONST_ASSIGN))
- return ASN1_ELEMENT_NOT_FOUND;
- p4 = p3->down;
- name2[0] = 0;
- while (p4)
- {
- if (type_field (p4->type) == TYPE_CONSTANT)
- {
- if (name2[0])
- _asn1_str_cat (name2, sizeof (name2), ".");
- _asn1_str_cat (name2, sizeof (name2), p4->value);
- }
- p4 = p4->right;
- }
- tlen = strlen (name2);
- if (tlen > 0)
- _asn1_set_value (p2, name2, tlen + 1);
- }
- }
- move = DOWN;
- }
- else
- move = RIGHT;
-
- if (move == DOWN)
- {
- if (p->down)
- p = p->down;
- else
- move = RIGHT;
- }
-
- if (p == node)
- {
- move = UP;
- continue;
- }
-
- if (move == RIGHT)
- {
- if (p->right)
- p = p->right;
- else
- move = UP;
- }
- if (move == UP)
- p = _asn1_find_up (p);
- }
-
- return ASN1_SUCCESS;
-}
-</pre>
-</div>
-</td>
-</tr>
-<tr class="function_entry_high">
-<td class="function_entry_filename">
-<a href="javascript:void(0);" title="show/hide function source"
onClick="javascript:show_hide('_asn1_yylex_src', '_asn1_yylex_button')"><span
id="_asn1_yylex_button">↓</span></a>
-</td>
-<td class="function_entry_name">
-_asn1_yylex
-</td>
-<td class="function_entry_cyclo">
-44
-</td>
-<td class="function_entry_number">
-54
-</td>
-<td class="function_entry_number">
-80
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/ASN1.c;hb=HEAD">lib/ASN1.c</a>
-</td>
-</tr>
-<tr>
-<td colspan="6" height="0">
-<div id="_asn1_yylex_src" class="function_src" style="position: relative;
display: none;">
-<pre class="function_src">
-static int
-_asn1_yylex()
-{
- int c,counter=0,k,lastc;
- char string[ASN1_MAX_NAME_SIZE+1]; /* will contain the next token */
- size_t i;
-
- while(1)
- {
- while((c=fgetc(file_asn1))==' ' || c=='\t' || c=='\n')
- if(c=='\n') lineNumber++;
-
- if(c==EOF){
- strcpy(lastToken,"End Of File");
- return 0;
- }
-
- if(c=='(' || c==')' || c=='[' || c==']' ||
- c=='{' || c=='}' || c==',' || c=='.' ||
- c=='+' || c=='|'){
- lastToken[0]=c;lastToken[1]=0;
- return c;
- }
- if(c=='-'){ /* Maybe the first '-' of a comment */
- if((c=fgetc(file_asn1))!='-'){
- ungetc(c,file_asn1);
- lastToken[0]='-';lastToken[1]=0;
- return '-';
- }
- else{ /* Comments */
- lastc=0;
- counter=0;
- /* A comment finishes at the next double hypen or the end of line */
- while((c=fgetc(file_asn1))!=EOF && c!='\n' &&
- (lastc!='-' || (lastc=='-' && c!='-')))
- lastc=c;
- if(c==EOF){
- strcpy(lastToken,"End Of File");
- return 0;
- }
- else{
- if(c=='\n') lineNumber++;
- continue; /* next char, please! (repeat the search) */
- }
- }
- }
- string[counter++]=c;
- /* Till the end of the token */
- while(!((c=fgetc(file_asn1))==EOF || c==' '|| c=='\t' || c=='\n' ||
- c=='(' || c==')' || c=='[' || c==']' ||
- c=='{' || c=='}' || c==',' || c=='.'))
- {
- if(counter>=ASN1_MAX_NAME_SIZE){
- result_parse=ASN1_NAME_TOO_LONG;
- return 0;
- }
- string[counter++]=c;
- }
- ungetc(c,file_asn1);
- string[counter]=0;
- strcpy(lastToken,string);
-
- /* Is STRING a number? */
- for(k=0;k<counter;k++)
- if(!isdigit(string[k])) break;
- if(k>=counter)
- {
- strcpy(yylval.str,string);
- return NUM; /* return the number */
- }
-
- /* Is STRING a keyword? */
- for(i=0;i<(sizeof(key_word)/sizeof(char*));i++)
- if(!strcmp(string,key_word[i])) return key_word_token[i];
-
- /* STRING is an IDENTIFIER */
- strcpy(yylval.str,string);
- return IDENTIFIER;
- }
-}
-</pre>
-</div>
-</td>
-</tr>
-<tr class="function_entry_high">
-<td class="function_entry_filename">
-<a href="javascript:void(0);" title="show/hide function source"
onClick="javascript:show_hide('asn1_expand_any_defined_by_src',
'asn1_expand_any_defined_by_button')"><span
id="asn1_expand_any_defined_by_button">↓</span></a>
-</td>
-<td class="function_entry_name">
-asn1_expand_any_defined_by
-</td>
-<td class="function_entry_cyclo">
-43
-</td>
-<td class="function_entry_number">
-101
-</td>
-<td class="function_entry_number">
-211
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/decoding.c;hb=HEAD">lib/decoding.c</a>
-</td>
-</tr>
-<tr>
-<td colspan="6" height="0">
-<div id="asn1_expand_any_defined_by_src" class="function_src" style="position:
relative; display: none;">
-<pre class="function_src">
-asn1_retCode
-asn1_expand_any_defined_by (ASN1_TYPE definitions, ASN1_TYPE * element)
-{
- char definitionsName[ASN1_MAX_NAME_SIZE], name[2 * ASN1_MAX_NAME_SIZE + 1],
- value[ASN1_MAX_NAME_SIZE];
- asn1_retCode retCode = ASN1_SUCCESS, result;
- int len, len2, len3;
- ASN1_TYPE p, p2, p3, aux = ASN1_TYPE_EMPTY;
- char errorDescription[ASN1_MAX_ERROR_DESCRIPTION_SIZE];
-
- if ((definitions == ASN1_TYPE_EMPTY) || (*element == ASN1_TYPE_EMPTY))
- return ASN1_ELEMENT_NOT_FOUND;
-
- strcpy (definitionsName, definitions->name);
- strcat (definitionsName, ".");
-
- p = *element;
- while (p)
- {
-
- switch (type_field (p->type))
- {
- case TYPE_ANY:
- if ((p->type & CONST_DEFINED_BY) && (p->value))
- {
- /* search the "DEF_BY" element */
- p2 = p->down;
- while ((p2) && (type_field (p2->type) != TYPE_CONSTANT))
- p2 = p2->right;
-
- if (!p2)
- {
- retCode = ASN1_ERROR_TYPE_ANY;
- break;
- }
-
- p3 = _asn1_find_up (p);
-
- if (!p3)
- {
- retCode = ASN1_ERROR_TYPE_ANY;
- break;
- }
-
- p3 = p3->down;
- while (p3)
- {
- if ((p3->name) && !(strcmp (p3->name, p2->name)))
- break;
- p3 = p3->right;
- }
-
- if ((!p3) || (type_field (p3->type) != TYPE_OBJECT_ID) ||
- (p3->value == NULL))
- {
-
- p3 = _asn1_find_up (p);
- p3 = _asn1_find_up (p3);
-
- if (!p3)
- {
- retCode = ASN1_ERROR_TYPE_ANY;
- break;
- }
-
- p3 = p3->down;
-
- while (p3)
- {
- if ((p3->name) && !(strcmp (p3->name, p2->name)))
- break;
- p3 = p3->right;
- }
-
- if ((!p3) || (type_field (p3->type) != TYPE_OBJECT_ID) ||
- (p3->value == NULL))
- {
- retCode = ASN1_ERROR_TYPE_ANY;
- break;
- }
- }
-
- /* search the OBJECT_ID into definitions */
- p2 = definitions->down;
- while (p2)
- {
- if ((type_field (p2->type) == TYPE_OBJECT_ID) &&
- (p2->type & CONST_ASSIGN))
- {
- strcpy (name, definitionsName);
- strcat (name, p2->name);
-
- len = ASN1_MAX_NAME_SIZE;
- result =
- asn1_read_value (definitions, name, value, &len);
-
- if ((result == ASN1_SUCCESS)
- && (!strcmp (p3->value, value)))
- {
- p2 = p2->right; /* pointer to the structure to
- use for expansion */
- while ((p2) && (p2->type & CONST_ASSIGN))
- p2 = p2->right;
-
- if (p2)
- {
- strcpy (name, definitionsName);
- strcat (name, p2->name);
-
- result =
- asn1_create_element (definitions, name,
&aux);
- if (result == ASN1_SUCCESS)
- {
- _asn1_set_name (aux, p->name);
- len2 =
- asn1_get_length_der (p->value,
- p->value_len,
&len3);
- if (len2 < 0)
- return ASN1_DER_ERROR;
-
- result =
- asn1_der_decoding (&aux, p->value +
len3,
- len2,
- errorDescription);
- if (result == ASN1_SUCCESS)
- {
-
- _asn1_set_right (aux, p->right);
- _asn1_set_right (p, aux);
-
- result = asn1_delete_structure (&p);
- if (result == ASN1_SUCCESS)
- {
- p = aux;
- aux = ASN1_TYPE_EMPTY;
- break;
- }
- else
- { /* error with
asn1_delete_structure */
- asn1_delete_structure (&aux);
- retCode = result;
- break;
- }
- }
- else
- { /* error with asn1_der_decoding */
- retCode = result;
- break;
- }
- }
- else
- { /* error with asn1_create_element */
- retCode = result;
- break;
- }
- }
- else
- { /* error with the pointer to the structure to
exapand */
- retCode = ASN1_ERROR_TYPE_ANY;
- break;
- }
- }
- }
- p2 = p2->right;
- } /* end while */
-
- if (!p2)
- {
- retCode = ASN1_ERROR_TYPE_ANY;
- break;
- }
-
- }
- break;
- default:
- break;
- }
-
-
- if (p->down)
- {
- p = p->down;
- }
- else if (p == *element)
- {
- p = NULL;
- break;
- }
- else if (p->right)
- p = p->right;
- else
- {
- while (1)
- {
- p = _asn1_find_up (p);
- if (p == *element)
- {
- p = NULL;
- break;
- }
- if (p->right)
- {
- p = p->right;
- break;
- }
- }
- }
- }
-
- return retCode;
-}
-</pre>
-</div>
-</td>
-</tr>
-<tr class="function_entry_high">
-<td class="function_entry_filename">
-<a href="javascript:void(0);" title="show/hide function source"
onClick="javascript:show_hide('asn1_read_value_src',
'asn1_read_value_button')"><span id="asn1_read_value_button">↓</span></a>
-</td>
-<td class="function_entry_name">
-asn1_read_value
-</td>
-<td class="function_entry_cyclo">
-47
-</td>
-<td class="function_entry_number">
-83
-</td>
-<td class="function_entry_number">
-161
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/element.c;hb=HEAD">lib/element.c</a>
-</td>
-</tr>
-<tr>
-<td colspan="6" height="0">
-<div id="asn1_read_value_src" class="function_src" style="position: relative;
display: none;">
-<pre class="function_src">
-asn1_retCode
-asn1_read_value (ASN1_TYPE root, const char *name, void *ivalue, int *len)
-{
- ASN1_TYPE node, p, p2;
- int len2, len3;
- int value_size = *len;
- unsigned char *value = ivalue;
-
- node = asn1_find_node (root, name);
- if (node == NULL)
- return ASN1_ELEMENT_NOT_FOUND;
-
- if ((type_field (node->type) != TYPE_NULL) &&
- (type_field (node->type) != TYPE_CHOICE) &&
- !(node->type & CONST_DEFAULT) && !(node->type & CONST_ASSIGN) &&
- (node->value == NULL))
- return ASN1_VALUE_NOT_FOUND;
-
- switch (type_field (node->type))
- {
- case TYPE_NULL:
- PUT_STR_VALUE (value, value_size, "NULL");
- break;
- case TYPE_BOOLEAN:
- if ((node->type & CONST_DEFAULT) && (node->value == NULL))
- {
- p = node->down;
- while (type_field (p->type) != TYPE_DEFAULT)
- p = p->right;
- if (p->type & CONST_TRUE)
- {
- PUT_STR_VALUE (value, value_size, "TRUE");
- }
- else
- {
- PUT_STR_VALUE (value, value_size, "FALSE");
- }
- }
- else if (node->value[0] == 'T')
- {
- PUT_STR_VALUE (value, value_size, "TRUE");
- }
- else
- {
- PUT_STR_VALUE (value, value_size, "FALSE");
- }
- break;
- case TYPE_INTEGER:
- case TYPE_ENUMERATED:
- if ((node->type & CONST_DEFAULT) && (node->value == NULL))
- {
- p = node->down;
- while (type_field (p->type) != TYPE_DEFAULT)
- p = p->right;
- if ((isdigit (p->value[0])) || (p->value[0] == '-')
- || (p->value[0] == '+'))
- {
- if (_asn1_convert_integer
- (p->value, value, value_size, len) != ASN1_SUCCESS)
- return ASN1_MEM_ERROR;
- }
- else
- { /* is an identifier like v1 */
- p2 = node->down;
- while (p2)
- {
- if (type_field (p2->type) == TYPE_CONSTANT)
- {
- if ((p2->name) && (!strcmp (p2->name, p->value)))
- {
- if (_asn1_convert_integer
- (p2->value, value, value_size,
- len) != ASN1_SUCCESS)
- return ASN1_MEM_ERROR;
- break;
- }
- }
- p2 = p2->right;
- }
- }
- }
- else
- {
- len2 = -1;
- if (asn1_get_octet_der
- (node->value, node->value_len, &len2, value, value_size,
- len) != ASN1_SUCCESS)
- return ASN1_MEM_ERROR;
- }
- break;
- case TYPE_OBJECT_ID:
- if (node->type & CONST_ASSIGN)
- {
- value[0] = 0;
- p = node->down;
- while (p)
- {
- if (type_field (p->type) == TYPE_CONSTANT)
- {
- ADD_STR_VALUE (value, value_size, p->value);
- if (p->right)
- {
- ADD_STR_VALUE (value, value_size, ".");
- }
- }
- p = p->right;
- }
- *len = strlen (value) + 1;
- }
- else if ((node->type & CONST_DEFAULT) && (node->value == NULL))
- {
- p = node->down;
- while (type_field (p->type) != TYPE_DEFAULT)
- p = p->right;
- PUT_STR_VALUE (value, value_size, p->value);
- }
- else
- {
- PUT_STR_VALUE (value, value_size, node->value);
- }
- break;
- case TYPE_TIME:
- PUT_STR_VALUE (value, value_size, node->value);
- break;
- case TYPE_OCTET_STRING:
- len2 = -1;
- if (asn1_get_octet_der
- (node->value, node->value_len, &len2, value, value_size,
- len) != ASN1_SUCCESS)
- return ASN1_MEM_ERROR;
- break;
- case TYPE_GENERALSTRING:
- len2 = -1;
- if (asn1_get_octet_der
- (node->value, node->value_len, &len2, value, value_size,
- len) != ASN1_SUCCESS)
- return ASN1_MEM_ERROR;
- break;
- case TYPE_BIT_STRING:
- len2 = -1;
- if (asn1_get_bit_der
- (node->value, node->value_len, &len2, value, value_size,
- len) != ASN1_SUCCESS)
- return ASN1_MEM_ERROR;
- break;
- case TYPE_CHOICE:
- PUT_STR_VALUE (value, value_size, node->down->name);
- break;
- case TYPE_ANY:
- len3 = -1;
- len2 = asn1_get_length_der (node->value, node->value_len, &len3);
- if (len2 < 0)
- return ASN1_DER_ERROR;
- PUT_VALUE (value, value_size, node->value + len3, len2);
- break;
- default:
- return ASN1_ELEMENT_NOT_FOUND;
- break;
- }
- return ASN1_SUCCESS;
-}
-</pre>
-</div>
-</td>
-</tr>
-<tr class="function_entry_high">
-<td class="function_entry_filename">
-<a href="javascript:void(0);" title="show/hide function source"
onClick="javascript:show_hide('_asn1_check_identifier_src',
'_asn1_check_identifier_button')"><span
id="_asn1_check_identifier_button">↓</span></a>
-</td>
-<td class="function_entry_name">
-_asn1_check_identifier
-</td>
-<td class="function_entry_cyclo">
-26
-</td>
-<td class="function_entry_number">
-50
-</td>
-<td class="function_entry_number">
-91
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/parser_aux.c;hb=HEAD">lib/parser_aux.c</a>
-</td>
-</tr>
-<tr>
-<td colspan="6" height="0">
-<div id="_asn1_check_identifier_src" class="function_src" style="position:
relative; display: none;">
-<pre class="function_src">
-asn1_retCode
-_asn1_check_identifier (ASN1_TYPE node)
-{
- ASN1_TYPE p, p2;
- char name2[ASN1_MAX_NAME_SIZE * 2 + 2];
-
- if (node == NULL)
- return ASN1_ELEMENT_NOT_FOUND;
-
- p = node;
- while (p)
- {
- if (type_field (p->type) == TYPE_IDENTIFIER)
- {
- _asn1_str_cpy (name2, sizeof (name2), node->name);
- _asn1_str_cat (name2, sizeof (name2), ".");
- _asn1_str_cat (name2, sizeof (name2), p->value);
- p2 = asn1_find_node (node, name2);
- if (p2 == NULL)
- {
- strcpy (_asn1_identifierMissing, p->value);
- return ASN1_IDENTIFIER_NOT_FOUND;
- }
- }
- else if ((type_field (p->type) == TYPE_OBJECT_ID) &&
- (p->type & CONST_DEFAULT))
- {
- p2 = p->down;
- if (p2 && (type_field (p2->type) == TYPE_DEFAULT))
- {
- _asn1_str_cpy (name2, sizeof (name2), node->name);
- _asn1_str_cat (name2, sizeof (name2), ".");
- _asn1_str_cat (name2, sizeof (name2), p2->value);
- strcpy (_asn1_identifierMissing, p2->value);
- p2 = asn1_find_node (node, name2);
- if (!p2 || (type_field (p2->type) != TYPE_OBJECT_ID) ||
- !(p2->type & CONST_ASSIGN))
- return ASN1_IDENTIFIER_NOT_FOUND;
- else
- _asn1_identifierMissing[0] = 0;
- }
- }
- else if ((type_field (p->type) == TYPE_OBJECT_ID) &&
- (p->type & CONST_ASSIGN))
- {
- p2 = p->down;
- if (p2 && (type_field (p2->type) == TYPE_CONSTANT))
- {
- if (p2->value && !isdigit (p2->value[0]))
- {
- _asn1_str_cpy (name2, sizeof (name2), node->name);
- _asn1_str_cat (name2, sizeof (name2), ".");
- _asn1_str_cat (name2, sizeof (name2), p2->value);
- strcpy (_asn1_identifierMissing, p2->value);
- p2 = asn1_find_node (node, name2);
- if (!p2 || (type_field (p2->type) != TYPE_OBJECT_ID) ||
- !(p2->type & CONST_ASSIGN))
- return ASN1_IDENTIFIER_NOT_FOUND;
- else
- _asn1_identifierMissing[0] = 0;
- }
- }
- }
-
- if (p->down)
- {
- p = p->down;
- }
- else if (p->right)
- p = p->right;
- else
- {
- while (1)
- {
- p = _asn1_find_up (p);
- if (p == node)
- {
- p = NULL;
- break;
- }
- if (p->right)
- {
- p = p->right;
- break;
- }
- }
- }
- }
-
- return ASN1_SUCCESS;
-}
-</pre>
-</div>
-</td>
-</tr>
-<tr class="function_entry_high">
-<td class="function_entry_filename">
-<a href="javascript:void(0);" title="show/hide function source"
onClick="javascript:show_hide('_asn1_expand_identifier_src',
'_asn1_expand_identifier_button')"><span
id="_asn1_expand_identifier_button">↓</span></a>
-</td>
-<td class="function_entry_name">
-_asn1_expand_identifier
-</td>
-<td class="function_entry_cyclo">
-25
-</td>
-<td class="function_entry_number">
-68
-</td>
-<td class="function_entry_number">
-107
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/structure.c;hb=HEAD">lib/structure.c</a>
-</td>
-</tr>
-<tr>
-<td colspan="6" height="0">
-<div id="_asn1_expand_identifier_src" class="function_src" style="position:
relative; display: none;">
-<pre class="function_src">
-static asn1_retCode
-_asn1_expand_identifier (ASN1_TYPE * node, ASN1_TYPE root)
-{
- ASN1_TYPE p, p2, p3;
- char name2[ASN1_MAX_NAME_SIZE + 2];
- int move;
-
- if (node == NULL)
- return ASN1_ELEMENT_NOT_FOUND;
-
- p = *node;
- move = DOWN;
-
- while (!((p == *node) && (move == UP)))
- {
- if (move != UP)
- {
- if (type_field (p->type) == TYPE_IDENTIFIER)
- {
- _asn1_str_cpy (name2, sizeof (name2), root->name);
- _asn1_str_cat (name2, sizeof (name2), ".");
- _asn1_str_cat (name2, sizeof (name2), p->value);
- p2 = _asn1_copy_structure2 (root, name2);
- if (p2 == NULL)
- {
- return ASN1_IDENTIFIER_NOT_FOUND;
- }
- _asn1_set_name (p2, p->name);
- p2->right = p->right;
- p2->left = p->left;
- if (p->right)
- p->right->left = p2;
- p3 = p->down;
- if (p3)
- {
- while (p3->right)
- p3 = p3->right;
- _asn1_set_right (p3, p2->down);
- _asn1_set_down (p2, p->down);
- }
-
- p3 = _asn1_find_left (p);
- if (p3)
- _asn1_set_right (p3, p2);
- else
- {
- p3 = _asn1_find_up (p);
- if (p3)
- _asn1_set_down (p3, p2);
- else
- {
- p2->left = NULL;
- }
- }
-
- if (p->type & CONST_SIZE)
- p2->type |= CONST_SIZE;
- if (p->type & CONST_TAG)
- p2->type |= CONST_TAG;
- if (p->type & CONST_OPTION)
- p2->type |= CONST_OPTION;
- if (p->type & CONST_DEFAULT)
- p2->type |= CONST_DEFAULT;
- if (p->type & CONST_SET)
- p2->type |= CONST_SET;
- if (p->type & CONST_NOT_USED)
- p2->type |= CONST_NOT_USED;
-
- if (p == *node)
- *node = p2;
- _asn1_remove_node (p);
- p = p2;
- move = DOWN;
- continue;
- }
- move = DOWN;
- }
- else
- move = RIGHT;
-
- if (move == DOWN)
- {
- if (p->down)
- p = p->down;
- else
- move = RIGHT;
- }
-
- if (p == *node)
- {
- move = UP;
- continue;
- }
-
- if (move == RIGHT)
- {
- if (p->right)
- p = p->right;
- else
- move = UP;
- }
- if (move == UP)
- p = _asn1_find_up (p);
- }
-
- return ASN1_SUCCESS;
-}
-</pre>
-</div>
-</td>
-</tr>
-<tr class="function_entry_high">
-<td class="function_entry_filename">
-<a href="javascript:void(0);" title="show/hide function source"
onClick="javascript:show_hide('_asn1_ordering_set_of_src',
'_asn1_ordering_set_of_button')"><span
id="_asn1_ordering_set_of_button">↓</span></a>
-</td>
-<td class="function_entry_name">
-_asn1_ordering_set_of
-</td>
-<td class="function_entry_cyclo">
-23
-</td>
-<td class="function_entry_number">
-72
-</td>
-<td class="function_entry_number">
-124
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/coding.c;hb=HEAD">lib/coding.c</a>
-</td>
-</tr>
-<tr>
-<td colspan="6" height="0">
-<div id="_asn1_ordering_set_of_src" class="function_src" style="position:
relative; display: none;">
-<pre class="function_src">
-static void
-_asn1_ordering_set_of (unsigned char *der, int der_len, ASN1_TYPE node)
-{
- struct vet
- {
- int end;
- struct vet *next, *prev;
- };
-
- int counter, len, len2, change;
- struct vet *first, *last, *p_vet, *p2_vet;
- ASN1_TYPE p;
- unsigned char *temp, class;
- unsigned long k, max;
-
- counter = 0;
-
- if (type_field (node->type) != TYPE_SET_OF)
- return;
-
- p = node->down;
- while ((type_field (p->type) == TYPE_TAG)
- || (type_field (p->type) == TYPE_SIZE))
- p = p->right;
- p = p->right;
-
- if ((p == NULL) || (p->right == NULL))
- return;
-
- first = last = NULL;
- while (p)
- {
- p_vet = (struct vet *) _asn1_malloc (sizeof (struct vet));
- if (p_vet == NULL)
- return;
-
- p_vet->next = NULL;
- p_vet->prev = last;
- if (first == NULL)
- first = p_vet;
- else
- last->next = p_vet;
- last = p_vet;
-
- /* extraction of tag and length */
- if (der_len - counter > 0)
- {
-
- if (asn1_get_tag_der
- (der + counter, der_len - counter, &class, &len,
- NULL) != ASN1_SUCCESS)
- return;
- counter += len;
-
- len2 = asn1_get_length_der (der + counter, der_len - counter,
&len);
- if (len2 < 0)
- return;
- counter += len + len2;
- }
-
- p_vet->end = counter;
- p = p->right;
- }
-
- p_vet = first;
-
- while (p_vet)
- {
- p2_vet = p_vet->next;
- counter = 0;
- while (p2_vet)
- {
- if ((p_vet->end - counter) > (p2_vet->end - p_vet->end))
- max = p_vet->end - counter;
- else
- max = p2_vet->end - p_vet->end;
-
- change = -1;
- for (k = 0; k < max; k++)
- if (der[counter + k] > der[p_vet->end + k])
- {
- change = 1;
- break;
- }
- else if (der[counter + k] < der[p_vet->end + k])
- {
- change = 0;
- break;
- }
-
- if ((change == -1)
- && ((p_vet->end - counter) > (p2_vet->end - p_vet->end)))
- change = 1;
-
- if (change == 1)
- {
- /* change position */
- temp = (unsigned char *) _asn1_malloc (p_vet->end - counter);
- if (temp == NULL)
- return;
-
- memcpy (temp, der + counter, (p_vet->end) - counter);
- memcpy (der + counter, der + (p_vet->end),
- (p2_vet->end) - (p_vet->end));
- memcpy (der + counter + (p2_vet->end) - (p_vet->end), temp,
- (p_vet->end) - counter);
- _asn1_free (temp);
-
- p_vet->end = counter + (p2_vet->end - p_vet->end);
- }
- counter = p_vet->end;
-
- p2_vet = p2_vet->next;
- p_vet = p_vet->next;
- }
-
- if (p_vet != first)
- p_vet->prev->next = NULL;
- else
- first = NULL;
- _asn1_free (p_vet);
- p_vet = first;
- }
-}
-</pre>
-</div>
-</td>
-</tr>
-<tr class="function_entry_high">
-<td class="function_entry_filename">
-<a href="javascript:void(0);" title="show/hide function source"
onClick="javascript:show_hide('asn1_expand_octet_string_src',
'asn1_expand_octet_string_button')"><span
id="asn1_expand_octet_string_button">↓</span></a>
-</td>
-<td class="function_entry_name">
-asn1_expand_octet_string
-</td>
-<td class="function_entry_cyclo">
-22
-</td>
-<td class="function_entry_number">
-65
-</td>
-<td class="function_entry_number">
-123
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/decoding.c;hb=HEAD">lib/decoding.c</a>
-</td>
-</tr>
-<tr>
-<td colspan="6" height="0">
-<div id="asn1_expand_octet_string_src" class="function_src" style="position:
relative; display: none;">
-<pre class="function_src">
-asn1_retCode
-asn1_expand_octet_string (ASN1_TYPE definitions, ASN1_TYPE * element,
- const char *octetName, const char *objectName)
-{
- char name[2 * ASN1_MAX_NAME_SIZE + 1], value[ASN1_MAX_NAME_SIZE];
- asn1_retCode retCode = ASN1_SUCCESS, result;
- int len, len2, len3;
- ASN1_TYPE p2, aux = ASN1_TYPE_EMPTY;
- ASN1_TYPE octetNode = ASN1_TYPE_EMPTY, objectNode = ASN1_TYPE_EMPTY;
- char errorDescription[ASN1_MAX_ERROR_DESCRIPTION_SIZE];
-
- if ((definitions == ASN1_TYPE_EMPTY) || (*element == ASN1_TYPE_EMPTY))
- return ASN1_ELEMENT_NOT_FOUND;
-
- octetNode = asn1_find_node (*element, octetName);
- if (octetNode == ASN1_TYPE_EMPTY)
- return ASN1_ELEMENT_NOT_FOUND;
- if (type_field (octetNode->type) != TYPE_OCTET_STRING)
- return ASN1_ELEMENT_NOT_FOUND;
- if (octetNode->value == NULL)
- return ASN1_VALUE_NOT_FOUND;
-
- objectNode = asn1_find_node (*element, objectName);
- if (objectNode == ASN1_TYPE_EMPTY)
- return ASN1_ELEMENT_NOT_FOUND;
-
- if (type_field (objectNode->type) != TYPE_OBJECT_ID)
- return ASN1_ELEMENT_NOT_FOUND;
-
- if (objectNode->value == NULL)
- return ASN1_VALUE_NOT_FOUND;
-
-
- /* search the OBJECT_ID into definitions */
- p2 = definitions->down;
- while (p2)
- {
- if ((type_field (p2->type) == TYPE_OBJECT_ID) &&
- (p2->type & CONST_ASSIGN))
- {
- strcpy (name, definitions->name);
- strcat (name, ".");
- strcat (name, p2->name);
-
- len = sizeof (value);
- result = asn1_read_value (definitions, name, value, &len);
-
- if ((result == ASN1_SUCCESS)
- && (!strcmp (objectNode->value, value)))
- {
-
- p2 = p2->right; /* pointer to the structure to
- use for expansion */
- while ((p2) && (p2->type & CONST_ASSIGN))
- p2 = p2->right;
-
- if (p2)
- {
- strcpy (name, definitions->name);
- strcat (name, ".");
- strcat (name, p2->name);
-
- result = asn1_create_element (definitions, name, &aux);
- if (result == ASN1_SUCCESS)
- {
- _asn1_set_name (aux, octetNode->name);
- len2 =
- asn1_get_length_der (octetNode->value,
- octetNode->value_len, &len3);
- if (len2 < 0)
- return ASN1_DER_ERROR;
-
- result =
- asn1_der_decoding (&aux, octetNode->value + len3,
- len2, errorDescription);
- if (result == ASN1_SUCCESS)
- {
-
- _asn1_set_right (aux, octetNode->right);
- _asn1_set_right (octetNode, aux);
-
- result = asn1_delete_structure (&octetNode);
- if (result == ASN1_SUCCESS)
- {
- aux = ASN1_TYPE_EMPTY;
- break;
- }
- else
- { /* error with asn1_delete_structure */
- asn1_delete_structure (&aux);
- retCode = result;
- break;
- }
- }
- else
- { /* error with asn1_der_decoding */
- retCode = result;
- break;
- }
- }
- else
- { /* error with asn1_create_element */
- retCode = result;
- break;
- }
- }
- else
- { /* error with the pointer to the structure to
exapand */
- retCode = ASN1_VALUE_NOT_VALID;
- break;
- }
- }
- }
-
- p2 = p2->right;
-
- }
-
- if (!p2)
- retCode = ASN1_VALUE_NOT_VALID;
-
- return retCode;
-}
-</pre>
-</div>
-</td>
-</tr>
-<tr class="function_entry_high">
-<td class="function_entry_filename">
-<a href="javascript:void(0);" title="show/hide function source"
onClick="javascript:show_hide('asn1_array2tree_src',
'asn1_array2tree_button')"><span id="asn1_array2tree_button">↓</span></a>
-</td>
-<td class="function_entry_name">
-asn1_array2tree
-</td>
-<td class="function_entry_cyclo">
-21
-</td>
-<td class="function_entry_number">
-53
-</td>
-<td class="function_entry_number">
-97
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/structure.c;hb=HEAD">lib/structure.c</a>
-</td>
-</tr>
-<tr>
-<td colspan="6" height="0">
-<div id="asn1_array2tree_src" class="function_src" style="position: relative;
display: none;">
-<pre class="function_src">
-asn1_retCode
-asn1_array2tree (const ASN1_ARRAY_TYPE * array, ASN1_TYPE * definitions,
- char *errorDescription)
-{
- ASN1_TYPE p, p_last = NULL;
- unsigned long k;
- int move;
- asn1_retCode result;
-
-
- if (*definitions != ASN1_TYPE_EMPTY)
- return ASN1_ELEMENT_NOT_EMPTY;
-
- move = UP;
-
- k = 0;
- while (array[k].value || array[k].type || array[k].name)
- {
- p = _asn1_add_node (array[k].type & (~CONST_DOWN));
- if (array[k].name)
- _asn1_set_name (p, array[k].name);
- if (array[k].value)
- _asn1_set_value (p, array[k].value, strlen (array[k].value) + 1);
-
- if (*definitions == NULL)
- *definitions = p;
-
- if (move == DOWN)
- _asn1_set_down (p_last, p);
- else if (move == RIGHT)
- _asn1_set_right (p_last, p);
-
- p_last = p;
-
- if (array[k].type & CONST_DOWN)
- move = DOWN;
- else if (array[k].type & CONST_RIGHT)
- move = RIGHT;
- else
- {
- while (1)
- {
- if (p_last == *definitions)
- break;
-
- p_last = _asn1_find_up (p_last);
-
- if (p_last == NULL)
- break;
-
- if (p_last->type & CONST_RIGHT)
- {
- p_last->type &= ~CONST_RIGHT;
- move = RIGHT;
- break;
- }
- } /* while */
- }
- k++;
- } /* while */
-
- if (p_last == *definitions)
- {
- result = _asn1_check_identifier (*definitions);
- if (result == ASN1_SUCCESS)
- {
- _asn1_change_integer_value (*definitions);
- _asn1_expand_object_id (*definitions);
- }
- }
- else
- {
- result = ASN1_ARRAY_ERROR;
- }
-
- if (errorDescription != NULL)
- {
- if (result == ASN1_IDENTIFIER_NOT_FOUND)
- {
- Estrcpy (errorDescription, ":: identifier '");
- Estrcat (errorDescription, _asn1_identifierMissing);
- Estrcat (errorDescription, "' not found");
- }
- else
- errorDescription[0] = 0;
- }
-
- if (result != ASN1_SUCCESS)
- {
- _asn1_delete_list_and_nodes ();
- *definitions = ASN1_TYPE_EMPTY;
- }
- else
- _asn1_delete_list ();
-
- return result;
-}
-</pre>
-</div>
-</td>
-</tr>
-<tr class="function_entry_moderate">
-<td class="function_entry_filename">
-<a href="javascript:void(0);" title="show/hide function source"
onClick="javascript:show_hide('_asn1_insert_tag_der_src',
'_asn1_insert_tag_der_button')"><span
id="_asn1_insert_tag_der_button">↓</span></a>
-</td>
-<td class="function_entry_name">
-_asn1_insert_tag_der
-</td>
-<td class="function_entry_cyclo">
-35
-</td>
-<td class="function_entry_number">
-75
-</td>
-<td class="function_entry_number">
-151
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/coding.c;hb=HEAD">lib/coding.c</a>
-</td>
-</tr>
-<tr>
-<td colspan="6" height="0">
-<div id="_asn1_insert_tag_der_src" class="function_src" style="position:
relative; display: none;">
-<pre class="function_src">
-static asn1_retCode
-_asn1_insert_tag_der (ASN1_TYPE node, unsigned char *der, int *counter,
- int *max_len)
-{
- ASN1_TYPE p;
- int tag_len, is_tag_implicit;
- unsigned char class, class_implicit = 0, temp[SIZEOF_UNSIGNED_INT * 3 + 1];
- unsigned long tag_implicit = 0;
- char tag_der[MAX_TAG_LEN];
-
- is_tag_implicit = 0;
-
- if (node->type & CONST_TAG)
- {
- p = node->down;
- while (p)
- {
- if (type_field (p->type) == TYPE_TAG)
- {
- if (p->type & CONST_APPLICATION)
- class = ASN1_CLASS_APPLICATION;
- else if (p->type & CONST_UNIVERSAL)
- class = ASN1_CLASS_UNIVERSAL;
- else if (p->type & CONST_PRIVATE)
- class = ASN1_CLASS_PRIVATE;
- else
- class = ASN1_CLASS_CONTEXT_SPECIFIC;
-
- if (p->type & CONST_EXPLICIT)
- {
- if (is_tag_implicit)
- _asn1_tag_der (class_implicit, tag_implicit, tag_der,
- &tag_len);
- else
- _asn1_tag_der (class | ASN1_CLASS_STRUCTURED,
- strtoul (p->value, NULL, 10), tag_der,
- &tag_len);
-
- *max_len -= tag_len;
- if (*max_len >= 0)
- memcpy (der + *counter, tag_der, tag_len);
- *counter += tag_len;
-
- _asn1_ltostr (*counter, temp);
- _asn1_set_name (p, temp);
-
- is_tag_implicit = 0;
- }
- else
- { /* CONST_IMPLICIT */
- if (!is_tag_implicit)
- {
- if ((type_field (node->type) == TYPE_SEQUENCE) ||
- (type_field (node->type) == TYPE_SEQUENCE_OF) ||
- (type_field (node->type) == TYPE_SET) ||
- (type_field (node->type) == TYPE_SET_OF))
- class |= ASN1_CLASS_STRUCTURED;
- class_implicit = class;
- tag_implicit = strtoul (p->value, NULL, 10);
- is_tag_implicit = 1;
- }
- }
- }
- p = p->right;
- }
- }
-
- if (is_tag_implicit)
- {
- _asn1_tag_der (class_implicit, tag_implicit, tag_der, &tag_len);
- }
- else
- {
- switch (type_field (node->type))
- {
- case TYPE_NULL:
- _asn1_tag_der (ASN1_CLASS_UNIVERSAL, ASN1_TAG_NULL, tag_der,
- &tag_len);
- break;
- case TYPE_BOOLEAN:
- _asn1_tag_der (ASN1_CLASS_UNIVERSAL, ASN1_TAG_BOOLEAN, tag_der,
- &tag_len);
- break;
- case TYPE_INTEGER:
- _asn1_tag_der (ASN1_CLASS_UNIVERSAL, ASN1_TAG_INTEGER, tag_der,
- &tag_len);
- break;
- case TYPE_ENUMERATED:
- _asn1_tag_der (ASN1_CLASS_UNIVERSAL, ASN1_TAG_ENUMERATED, tag_der,
- &tag_len);
- break;
- case TYPE_OBJECT_ID:
- _asn1_tag_der (ASN1_CLASS_UNIVERSAL, ASN1_TAG_OBJECT_ID, tag_der,
- &tag_len);
- break;
- case TYPE_TIME:
- if (node->type & CONST_UTC)
- {
- _asn1_tag_der (ASN1_CLASS_UNIVERSAL, ASN1_TAG_UTCTime, tag_der,
- &tag_len);
- }
- else
- _asn1_tag_der (ASN1_CLASS_UNIVERSAL, ASN1_TAG_GENERALIZEDTime,
- tag_der, &tag_len);
- break;
- case TYPE_OCTET_STRING:
- _asn1_tag_der (ASN1_CLASS_UNIVERSAL, ASN1_TAG_OCTET_STRING, tag_der,
- &tag_len);
- break;
- case TYPE_GENERALSTRING:
- _asn1_tag_der (ASN1_CLASS_UNIVERSAL, ASN1_TAG_GENERALSTRING,
- tag_der, &tag_len);
- break;
- case TYPE_BIT_STRING:
- _asn1_tag_der (ASN1_CLASS_UNIVERSAL, ASN1_TAG_BIT_STRING, tag_der,
- &tag_len);
- break;
- case TYPE_SEQUENCE:
- case TYPE_SEQUENCE_OF:
- _asn1_tag_der (ASN1_CLASS_UNIVERSAL | ASN1_CLASS_STRUCTURED,
- ASN1_TAG_SEQUENCE, tag_der, &tag_len);
- break;
- case TYPE_SET:
- case TYPE_SET_OF:
- _asn1_tag_der (ASN1_CLASS_UNIVERSAL | ASN1_CLASS_STRUCTURED,
- ASN1_TAG_SET, tag_der, &tag_len);
- break;
- case TYPE_TAG:
- tag_len = 0;
- break;
- case TYPE_CHOICE:
- tag_len = 0;
- break;
- case TYPE_ANY:
- tag_len = 0;
- break;
- default:
- return ASN1_GENERIC_ERROR;
- }
- }
-
- *max_len -= tag_len;
- if (*max_len >= 0)
- memcpy (der + *counter, tag_der, tag_len);
- *counter += tag_len;
-
- if (*max_len < 0)
- return ASN1_MEM_ERROR;
-
- return ASN1_SUCCESS;
-}
-</pre>
-</div>
-</td>
-</tr>
-<tr class="function_entry_moderate">
-<td class="function_entry_filename">
-<a href="javascript:void(0);" title="show/hide function source"
onClick="javascript:show_hide('asn1_find_node_src',
'asn1_find_node_button')"><span id="asn1_find_node_button">↓</span></a>
-</td>
-<td class="function_entry_name">
-asn1_find_node
-</td>
-<td class="function_entry_cyclo">
-20
-</td>
-<td class="function_entry_number">
-50
-</td>
-<td class="function_entry_number">
-95
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/parser_aux.c;hb=HEAD">lib/parser_aux.c</a>
-</td>
-</tr>
-<tr>
-<td colspan="6" height="0">
-<div id="asn1_find_node_src" class="function_src" style="position: relative;
display: none;">
-<pre class="function_src">
-ASN1_TYPE
-asn1_find_node (ASN1_TYPE pointer, const char *name)
-{
- ASN1_TYPE p;
- char *n_end, n[ASN1_MAX_NAME_SIZE + 1];
- const char *n_start;
-
- if (pointer == NULL)
- return NULL;
-
- if (name == NULL)
- return NULL;
-
- p = pointer;
- n_start = name;
-
- if (p->name != NULL)
- { /* has *pointer got a name ? */
- n_end = strchr (n_start, '.'); /* search the first dot */
- if (n_end)
- {
- memcpy (n, n_start, n_end - n_start);
- n[n_end - n_start] = 0;
- n_start = n_end;
- n_start++;
- }
- else
- {
- _asn1_str_cpy (n, sizeof (n), n_start);
- n_start = NULL;
- }
-
- while (p)
- {
- if ((p->name) && (!strcmp (p->name, n)))
- break;
- else
- p = p->right;
- } /* while */
-
- if (p == NULL)
- return NULL;
- }
- else
- { /* *pointer doesn't have a name */
- if (n_start[0] == 0)
- return p;
- }
-
- while (n_start)
- { /* Has the end of NAME been reached? */
- n_end = strchr (n_start, '.'); /* search the next dot */
- if (n_end)
- {
- memcpy (n, n_start, n_end - n_start);
- n[n_end - n_start] = 0;
- n_start = n_end;
- n_start++;
- }
- else
- {
- _asn1_str_cpy (n, sizeof (n), n_start);
- n_start = NULL;
- }
-
- if (p->down == NULL)
- return NULL;
-
- p = p->down;
-
- /* The identifier "?LAST" indicates the last element
- in the right chain. */
- if (!strcmp (n, "?LAST"))
- {
- if (p == NULL)
- return NULL;
- while (p->right)
- p = p->right;
- }
- else
- { /* no "?LAST" */
- while (p)
- {
- if ((p->name) && (!strcmp (p->name, n)))
- break;
- else
- p = p->right;
- }
- if (p == NULL)
- return NULL;
- }
- } /* while */
-
- return p;
-}
-</pre>
-</div>
-</td>
-</tr>
-<tr class="function_entry_moderate">
-<td class="function_entry_filename">
-<a href="javascript:void(0);" title="show/hide function source"
onClick="javascript:show_hide('_asn1_type_choice_config_src',
'_asn1_type_choice_config_button')"><span
id="_asn1_type_choice_config_button">↓</span></a>
-</td>
-<td class="function_entry_name">
-_asn1_type_choice_config
-</td>
-<td class="function_entry_cyclo">
-20
-</td>
-<td class="function_entry_number">
-47
-</td>
-<td class="function_entry_number">
-83
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/structure.c;hb=HEAD">lib/structure.c</a>
-</td>
-</tr>
-<tr>
-<td colspan="6" height="0">
-<div id="_asn1_type_choice_config_src" class="function_src" style="position:
relative; display: none;">
-<pre class="function_src">
-static asn1_retCode
-_asn1_type_choice_config (ASN1_TYPE node)
-{
- ASN1_TYPE p, p2, p3, p4;
- int move, tlen;
-
- if (node == NULL)
- return ASN1_ELEMENT_NOT_FOUND;
-
- p = node;
- move = DOWN;
-
- while (!((p == node) && (move == UP)))
- {
- if (move != UP)
- {
- if ((type_field (p->type) == TYPE_CHOICE) && (p->type &
CONST_TAG))
- {
- p2 = p->down;
- while (p2)
- {
- if (type_field (p2->type) != TYPE_TAG)
- {
- p2->type |= CONST_TAG;
- p3 = _asn1_find_left (p2);
- while (p3)
- {
- if (type_field (p3->type) == TYPE_TAG)
- {
- p4 = _asn1_add_node_only (p3->type);
- tlen = strlen (p3->value);
- if (tlen > 0)
- _asn1_set_value (p4, p3->value, tlen + 1);
- _asn1_set_right (p4, p2->down);
- _asn1_set_down (p2, p4);
- }
- p3 = _asn1_find_left (p3);
- }
- }
- p2 = p2->right;
- }
- p->type &= ~(CONST_TAG);
- p2 = p->down;
- while (p2)
- {
- p3 = p2->right;
- if (type_field (p2->type) == TYPE_TAG)
- asn1_delete_structure (&p2);
- p2 = p3;
- }
- }
- move = DOWN;
- }
- else
- move = RIGHT;
-
- if (move == DOWN)
- {
- if (p->down)
- p = p->down;
- else
- move = RIGHT;
- }
-
- if (p == node)
- {
- move = UP;
- continue;
- }
-
- if (move == RIGHT)
- {
- if (p->right)
- p = p->right;
- else
- move = UP;
- }
- if (move == UP)
- p = _asn1_find_up (p);
- }
-
- return ASN1_SUCCESS;
-}
-</pre>
-</div>
-</td>
-</tr>
-<tr class="function_entry_moderate">
-<td class="function_entry_filename">
-<a href="javascript:void(0);" title="show/hide function source"
onClick="javascript:show_hide('_asn1_get_octet_string_src',
'_asn1_get_octet_string_button')"><span
id="_asn1_get_octet_string_button">↓</span></a>
-</td>
-<td class="function_entry_name">
-_asn1_get_octet_string
-</td>
-<td class="function_entry_cyclo">
-17
-</td>
-<td class="function_entry_number">
-47
-</td>
-<td class="function_entry_number">
-82
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/decoding.c;hb=HEAD">lib/decoding.c</a>
-</td>
-</tr>
-<tr>
-<td colspan="6" height="0">
-<div id="_asn1_get_octet_string_src" class="function_src" style="position:
relative; display: none;">
-<pre class="function_src">
-static asn1_retCode
-_asn1_get_octet_string (const unsigned char *der, ASN1_TYPE node, int *len)
-{
- int len2, len3, counter, tot_len, indefinite;
-
- counter = 0;
-
- if (*(der - 1) & ASN1_CLASS_STRUCTURED)
- {
- tot_len = 0;
- indefinite = asn1_get_length_der (der, *len, &len3);
- if (indefinite < -1)
- return ASN1_DER_ERROR;
-
- counter += len3;
- if (indefinite >= 0)
- indefinite += len3;
-
- while (1)
- {
- if (counter > (*len))
- return ASN1_DER_ERROR;
-
- if (indefinite == -1)
- {
- if ((der[counter] == 0) && (der[counter + 1] == 0))
- {
- counter += 2;
- break;
- }
- }
- else if (counter >= indefinite)
- break;
-
- if (der[counter] != ASN1_TAG_OCTET_STRING)
- return ASN1_DER_ERROR;
-
- counter++;
-
- len2 = asn1_get_length_der (der + counter, *len - counter, &len3);
- if (len2 <= 0)
- return ASN1_DER_ERROR;
-
- counter += len3 + len2;
- tot_len += len2;
- }
-
- /* copy */
- if (node)
- {
- unsigned char temp[DER_LEN];
- int ret;
-
- len2 = sizeof(temp);
-
- asn1_length_der (tot_len, temp, &len2);
- _asn1_set_value (node, temp, len2);
-
- tot_len += len2;
-
- ret = _asn1_extract_der_octet(node, der, *len);
- if (ret!=ASN1_SUCCESS)
- return ret;
-
- }
- }
- else
- { /* NOT STRUCTURED */
- len2 = asn1_get_length_der (der, *len, &len3);
- if (len2 < 0)
- return ASN1_DER_ERROR;
- if (len3 + len2 > *len)
- return ASN1_DER_ERROR;
- if (node)
- _asn1_set_value (node, der, len3 + len2);
- counter = len3 + len2;
- }
-
- *len = counter;
- return ASN1_SUCCESS;
-
-}
-</pre>
-</div>
-</td>
-</tr>
-<tr class="function_entry_moderate">
-<td class="function_entry_filename">
-<a href="javascript:void(0);" title="show/hide function source"
onClick="javascript:show_hide('_asn1_ordering_set_src',
'_asn1_ordering_set_button')"><span
id="_asn1_ordering_set_button">↓</span></a>
-</td>
-<td class="function_entry_name">
-_asn1_ordering_set
-</td>
-<td class="function_entry_cyclo">
-16
-</td>
-<td class="function_entry_number">
-59
-</td>
-<td class="function_entry_number">
-104
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/coding.c;hb=HEAD">lib/coding.c</a>
-</td>
-</tr>
-<tr>
-<td colspan="6" height="0">
-<div id="_asn1_ordering_set_src" class="function_src" style="position:
relative; display: none;">
-<pre class="function_src">
-static void
-_asn1_ordering_set (unsigned char *der, int der_len, ASN1_TYPE node)
-{
- struct vet
- {
- int end;
- unsigned long value;
- struct vet *next, *prev;
- };
-
- int counter, len, len2;
- struct vet *first, *last, *p_vet, *p2_vet;
- ASN1_TYPE p;
- unsigned char class, *temp;
- unsigned long tag;
-
- counter = 0;
-
- if (type_field (node->type) != TYPE_SET)
- return;
-
- p = node->down;
- while ((type_field (p->type) == TYPE_TAG)
- || (type_field (p->type) == TYPE_SIZE))
- p = p->right;
-
- if ((p == NULL) || (p->right == NULL))
- return;
-
- first = last = NULL;
- while (p)
- {
- p_vet = (struct vet *) _asn1_malloc (sizeof (struct vet));
- if (p_vet == NULL)
- return;
-
- p_vet->next = NULL;
- p_vet->prev = last;
- if (first == NULL)
- first = p_vet;
- else
- last->next = p_vet;
- last = p_vet;
-
- /* tag value calculation */
- if (asn1_get_tag_der
- (der + counter, der_len - counter, &class, &len2,
- &tag) != ASN1_SUCCESS)
- return;
- p_vet->value = (class << 24) | tag;
- counter += len2;
-
- /* extraction and length */
- len2 = asn1_get_length_der (der + counter, der_len - counter, &len);
- if (len2 < 0)
- return;
- counter += len + len2;
-
- p_vet->end = counter;
- p = p->right;
- }
-
- p_vet = first;
-
- while (p_vet)
- {
- p2_vet = p_vet->next;
- counter = 0;
- while (p2_vet)
- {
- if (p_vet->value > p2_vet->value)
- {
- /* change position */
- temp = (unsigned char *) _asn1_malloc (p_vet->end - counter);
- if (temp == NULL)
- return;
-
- memcpy (temp, der + counter, p_vet->end - counter);
- memcpy (der + counter, der + p_vet->end,
- p2_vet->end - p_vet->end);
- memcpy (der + counter + p2_vet->end - p_vet->end, temp,
- p_vet->end - counter);
- _asn1_free (temp);
-
- tag = p_vet->value;
- p_vet->value = p2_vet->value;
- p2_vet->value = tag;
-
- p_vet->end = counter + (p2_vet->end - p_vet->end);
- }
- counter = p_vet->end;
-
- p2_vet = p2_vet->next;
- p_vet = p_vet->next;
- }
-
- if (p_vet != first)
- p_vet->prev->next = NULL;
- else
- first = NULL;
- _asn1_free (p_vet);
- p_vet = first;
- }
-}
-</pre>
-</div>
-</td>
-</tr>
-<tr class="function_entry_moderate">
-<td class="function_entry_filename">
-<a href="javascript:void(0);" title="show/hide function source"
onClick="javascript:show_hide('yysyntax_error_src',
'yysyntax_error_button')"><span id="yysyntax_error_button">↓</span></a>
-</td>
-<td class="function_entry_name">
-yysyntax_error
-</td>
-<td class="function_entry_cyclo">
-15
-</td>
-<td class="function_entry_number">
-62
-</td>
-<td class="function_entry_number">
-100
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/ASN1.c;hb=HEAD">lib/ASN1.c</a>
-</td>
-</tr>
-<tr>
-<td colspan="6" height="0">
-<div id="yysyntax_error_src" class="function_src" style="position: relative;
display: none;">
-<pre class="function_src">
-static YYSIZE_T
-yysyntax_error (char *yyresult, int yystate, int yychar)
-{
- int yyn = yypact[yystate];
-
- if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
- return 0;
- else
- {
- int yytype = YYTRANSLATE (yychar);
- YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
- YYSIZE_T yysize = yysize0;
- YYSIZE_T yysize1;
- int yysize_overflow = 0;
- enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
- char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
- int yyx;
-
-# if 0
- /* This is so xgettext sees the translatable formats that are
- constructed on the fly. */
- YY_("syntax error, unexpected %s");
- YY_("syntax error, unexpected %s, expecting %s");
- YY_("syntax error, unexpected %s, expecting %s or %s");
- YY_("syntax error, unexpected %s, expecting %s or %s or %s");
- YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
-# endif
- char *yyfmt;
- char const *yyf;
- static char const yyunexpected[] = "syntax error, unexpected %s";
- static char const yyexpecting[] = ", expecting %s";
- static char const yyor[] = " or %s";
- char yyformat[sizeof yyunexpected
- + sizeof yyexpecting - 1
- + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
- * (sizeof yyor - 1))];
- char const *yyprefix = yyexpecting;
-
- /* Start YYX at -YYN if negative to avoid negative indexes in
- YYCHECK. */
- int yyxbegin = yyn < 0 ? -yyn : 0;
-
- /* Stay within bounds of both yycheck and yytname. */
- int yychecklim = YYLAST - yyn + 1;
- int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
- int yycount = 1;
-
- yyarg[0] = yytname[yytype];
- yyfmt = yystpcpy (yyformat, yyunexpected);
-
- for (yyx = yyxbegin; yyx < yyxend; ++yyx)
- if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
- {
- if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
- {
- yycount = 1;
- yysize = yysize0;
- yyformat[sizeof yyunexpected - 1] = '\0';
- break;
- }
- yyarg[yycount++] = yytname[yyx];
- yysize1 = yysize + yytnamerr (0, yytname[yyx]);
- yysize_overflow |= (yysize1 < yysize);
- yysize = yysize1;
- yyfmt = yystpcpy (yyfmt, yyprefix);
- yyprefix = yyor;
- }
-
- yyf = YY_(yyformat);
- yysize1 = yysize + yystrlen (yyf);
- yysize_overflow |= (yysize1 < yysize);
- yysize = yysize1;
-
- if (yysize_overflow)
- return YYSIZE_MAXIMUM;
-
- if (yyresult)
- {
- /* Avoid sprintf, as that infringes on the user's name space.
- Don't have undefined behavior even if the translation
- produced a string with the wrong number of "%s"s. */
- char *yyp = yyresult;
- int yyi = 0;
- while ((*yyp = *yyf) != '\0')
- {
- if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
- {
- yyp += yytnamerr (yyp, yyarg[yyi++]);
- yyf += 2;
- }
- else
- {
- yyp++;
- yyf++;
- }
- }
- }
- return yysize;
- }
-}
-</pre>
-</div>
-</td>
-</tr>
-<tr class="function_entry_moderate">
-<td class="function_entry_filename">
-<a href="javascript:void(0);" title="show/hide function source"
onClick="javascript:show_hide('_asn1_convert_integer_src',
'_asn1_convert_integer_button')"><span
id="_asn1_convert_integer_button">↓</span></a>
-</td>
-<td class="function_entry_name">
-_asn1_convert_integer
-</td>
-<td class="function_entry_cyclo">
-15
-</td>
-<td class="function_entry_number">
-35
-</td>
-<td class="function_entry_number">
-52
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/element.c;hb=HEAD">lib/element.c</a>
-</td>
-</tr>
-<tr>
-<td colspan="6" height="0">
-<div id="_asn1_convert_integer_src" class="function_src" style="position:
relative; display: none;">
-<pre class="function_src">
-asn1_retCode
-_asn1_convert_integer (const char *value, unsigned char *value_out,
- int value_out_size, int *len)
-{
- char negative;
- unsigned char val[SIZEOF_UNSIGNED_LONG_INT];
- long valtmp;
- int k, k2;
-
- valtmp = strtol (value, NULL, 10);
-
- for (k = 0; k < SIZEOF_UNSIGNED_LONG_INT; k++)
- {
- val[SIZEOF_UNSIGNED_LONG_INT - k - 1] = (valtmp >> (8 * k)) & 0xFF;
- }
-
- if (val[0] & 0x80)
- negative = 1;
- else
- negative = 0;
-
- for (k = 0; k < SIZEOF_UNSIGNED_LONG_INT - 1; k++)
- {
- if (negative && (val[k] != 0xFF))
- break;
- else if (!negative && val[k])
- break;
- }
-
- if ((negative && !(val[k] & 0x80)) || (!negative && (val[k] & 0x80)))
- k--;
-
- *len = SIZEOF_UNSIGNED_LONG_INT - k;
-
- if (SIZEOF_UNSIGNED_LONG_INT - k > value_out_size)
- /* VALUE_OUT is too short to contain the value conversion */
- return ASN1_MEM_ERROR;
-
- for (k2 = k; k2 < SIZEOF_UNSIGNED_LONG_INT; k2++)
- value_out[k2 - k] = val[k2];
-
-
-#ifdef LIBTASN1_DEBUG_INTEGER
- _libtasn1_log ("_asn1_convert_integer: valueIn=%s, lenOut=%d", value, *len);
- for (k = 0; k < SIZEOF_UNSIGNED_LONG_INT; k++)
- _libtasn1_log (", vOut[%d]=%d", k, value_out[k]);
- _libtasn1_log ("\n");
-#endif
-
-
- return ASN1_SUCCESS;
-}
-</pre>
-</div>
-</td>
-</tr>
-<tr class="function_entry_moderate">
-<td class="function_entry_filename">
-<a href="javascript:void(0);" title="show/hide function source"
onClick="javascript:show_hide('asn1_read_tag_src',
'asn1_read_tag_button')"><span id="asn1_read_tag_button">↓</span></a>
-</td>
-<td class="function_entry_name">
-asn1_read_tag
-</td>
-<td class="function_entry_cyclo">
-29
-</td>
-<td class="function_entry_number">
-51
-</td>
-<td class="function_entry_number">
-101
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/element.c;hb=HEAD">lib/element.c</a>
-</td>
-</tr>
-<tr>
-<td colspan="6" height="0">
-<div id="asn1_read_tag_src" class="function_src" style="position: relative;
display: none;">
-<pre class="function_src">
-asn1_retCode
-asn1_read_tag (ASN1_TYPE root, const char *name, int *tagValue,
- int *classValue)
-{
- ASN1_TYPE node, p, pTag;
-
- node = asn1_find_node (root, name);
- if (node == NULL)
- return ASN1_ELEMENT_NOT_FOUND;
-
- p = node->down;
-
- /* pTag will points to the IMPLICIT TAG */
- pTag = NULL;
- if (node->type & CONST_TAG)
- {
- while (p)
- {
- if (type_field (p->type) == TYPE_TAG)
- {
- if ((p->type & CONST_IMPLICIT) && (pTag == NULL))
- pTag = p;
- else if (p->type & CONST_EXPLICIT)
- pTag = NULL;
- }
- p = p->right;
- }
- }
-
- if (pTag)
- {
- *tagValue = strtoul (pTag->value, NULL, 10);
-
- if (pTag->type & CONST_APPLICATION)
- *classValue = ASN1_CLASS_APPLICATION;
- else if (pTag->type & CONST_UNIVERSAL)
- *classValue = ASN1_CLASS_UNIVERSAL;
- else if (pTag->type & CONST_PRIVATE)
- *classValue = ASN1_CLASS_PRIVATE;
- else
- *classValue = ASN1_CLASS_CONTEXT_SPECIFIC;
- }
- else
- {
- *classValue = ASN1_CLASS_UNIVERSAL;
-
- switch (type_field (node->type))
- {
- case TYPE_NULL:
- *tagValue = ASN1_TAG_NULL;
- break;
- case TYPE_BOOLEAN:
- *tagValue = ASN1_TAG_BOOLEAN;
- break;
- case TYPE_INTEGER:
- *tagValue = ASN1_TAG_INTEGER;
- break;
- case TYPE_ENUMERATED:
- *tagValue = ASN1_TAG_ENUMERATED;
- break;
- case TYPE_OBJECT_ID:
- *tagValue = ASN1_TAG_OBJECT_ID;
- break;
- case TYPE_TIME:
- if (node->type & CONST_UTC)
- {
- *tagValue = ASN1_TAG_UTCTime;
- }
- else
- *tagValue = ASN1_TAG_GENERALIZEDTime;
- break;
- case TYPE_OCTET_STRING:
- *tagValue = ASN1_TAG_OCTET_STRING;
- break;
- case TYPE_GENERALSTRING:
- *tagValue = ASN1_TAG_GENERALSTRING;
- break;
- case TYPE_BIT_STRING:
- *tagValue = ASN1_TAG_BIT_STRING;
- break;
- case TYPE_SEQUENCE:
- case TYPE_SEQUENCE_OF:
- *tagValue = ASN1_TAG_SEQUENCE;
- break;
- case TYPE_SET:
- case TYPE_SET_OF:
- *tagValue = ASN1_TAG_SET;
- break;
- case TYPE_TAG:
- case TYPE_CHOICE:
- case TYPE_ANY:
- break;
- default:
- break;
- }
- }
-
-
- return ASN1_SUCCESS;
-
-}
-</pre>
-</div>
-</td>
-</tr>
-<tr class="function_entry_moderate">
-<td class="function_entry_filename">
-<a href="javascript:void(0);" title="show/hide function source"
onClick="javascript:show_hide('_asn1_objectid_der_src',
'_asn1_objectid_der_button')"><span
id="_asn1_objectid_der_button">↓</span></a>
-</td>
-<td class="function_entry_name">
-_asn1_objectid_der
-</td>
-<td class="function_entry_cyclo">
-14
-</td>
-<td class="function_entry_number">
-44
-</td>
-<td class="function_entry_number">
-69
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/coding.c;hb=HEAD">lib/coding.c</a>
-</td>
-</tr>
-<tr>
-<td colspan="6" height="0">
-<div id="_asn1_objectid_der_src" class="function_src" style="position:
relative; display: none;">
-<pre class="function_src">
-static asn1_retCode
-_asn1_objectid_der (unsigned char *str, unsigned char *der, int *der_len)
-{
- int len_len, counter, k, first, max_len;
- char *temp, *n_end, *n_start;
- unsigned char bit7;
- unsigned long val, val1 = 0;
-
- max_len = *der_len;
-
- temp = (char *) _asn1_malloc (strlen (str) + 2);
- if (temp == NULL)
- return ASN1_MEM_ALLOC_ERROR;
-
- strcpy (temp, str);
- strcat (temp, ".");
-
- counter = 0;
- n_start = temp;
- while ((n_end = strchr (n_start, '.')))
- {
- *n_end = 0;
- val = strtoul (n_start, NULL, 10);
- counter++;
-
- if (counter == 1)
- val1 = val;
- else if (counter == 2)
- {
- if (max_len > 0)
- der[0] = 40 * val1 + val;
- *der_len = 1;
- }
- else
- {
- first = 0;
- for (k = 4; k >= 0; k--)
- {
- bit7 = (val >> (k * 7)) & 0x7F;
- if (bit7 || first || !k)
- {
- if (k)
- bit7 |= 0x80;
- if (max_len > (*der_len))
- der[*der_len] = bit7;
- (*der_len)++;
- first = 1;
- }
- }
-
- }
- n_start = n_end + 1;
- }
-
- asn1_length_der (*der_len, NULL, &len_len);
- if (max_len >= (*der_len + len_len))
- {
- memmove (der + len_len, der, *der_len);
- asn1_length_der (*der_len, der, &len_len);
- }
- *der_len += len_len;
-
- _asn1_free (temp);
-
- if (max_len < (*der_len))
- return ASN1_MEM_ERROR;
-
- return ASN1_SUCCESS;
-}
-</pre>
-</div>
-</td>
-</tr>
-<tr class="function_entry_moderate">
-<td class="function_entry_filename">
-<a href="javascript:void(0);" title="show/hide function source"
onClick="javascript:show_hide('_asn1_type_set_config_src',
'_asn1_type_set_config_button')"><span
id="_asn1_type_set_config_button">↓</span></a>
-</td>
-<td class="function_entry_name">
-_asn1_type_set_config
-</td>
-<td class="function_entry_cyclo">
-14
-</td>
-<td class="function_entry_number">
-30
-</td>
-<td class="function_entry_number">
-58
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/parser_aux.c;hb=HEAD">lib/parser_aux.c</a>
-</td>
-</tr>
-<tr>
-<td colspan="6" height="0">
-<div id="_asn1_type_set_config_src" class="function_src" style="position:
relative; display: none;">
-<pre class="function_src">
-asn1_retCode
-_asn1_type_set_config (ASN1_TYPE node)
-{
- ASN1_TYPE p, p2;
- int move;
-
- if (node == NULL)
- return ASN1_ELEMENT_NOT_FOUND;
-
- p = node;
- move = DOWN;
-
- while (!((p == node) && (move == UP)))
- {
- if (move != UP)
- {
- if (type_field (p->type) == TYPE_SET)
- {
- p2 = p->down;
- while (p2)
- {
- if (type_field (p2->type) != TYPE_TAG)
- p2->type |= CONST_SET | CONST_NOT_USED;
- p2 = p2->right;
- }
- }
- move = DOWN;
- }
- else
- move = RIGHT;
-
- if (move == DOWN)
- {
- if (p->down)
- p = p->down;
- else
- move = RIGHT;
- }
-
- if (p == node)
- {
- move = UP;
- continue;
- }
-
- if (move == RIGHT)
- {
- if (p->right)
- p = p->right;
- else
- move = UP;
- }
- if (move == UP)
- p = _asn1_find_up (p);
- }
-
- return ASN1_SUCCESS;
-}
-</pre>
-</div>
-</td>
-</tr>
-<tr class="function_entry_moderate">
-<td class="function_entry_filename">
-<a href="javascript:void(0);" title="show/hide function source"
onClick="javascript:show_hide('asn1_check_version_src',
'asn1_check_version_button')"><span
id="asn1_check_version_button">↓</span></a>
-</td>
-<td class="function_entry_name">
-asn1_check_version
-</td>
-<td class="function_entry_cyclo">
-14
-</td>
-<td class="function_entry_number">
-15
-</td>
-<td class="function_entry_number">
-30
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/parser_aux.c;hb=HEAD">lib/parser_aux.c</a>
-</td>
-</tr>
-<tr>
-<td colspan="6" height="0">
-<div id="asn1_check_version_src" class="function_src" style="position:
relative; display: none;">
-<pre class="function_src">
-const char *
-asn1_check_version (const char *req_version)
-{
- const char *ver = ASN1_VERSION;
- int my_major, my_minor, my_micro;
- int rq_major, rq_minor, rq_micro;
- const char *my_plvl, *rq_plvl;
-
- if (!req_version)
- return ver;
-
- my_plvl = parse_version_string (ver, &my_major, &my_minor, &my_micro);
- if (!my_plvl)
- return NULL; /* very strange our own version is bogus */
- rq_plvl = parse_version_string (req_version, &rq_major, &rq_minor,
- &rq_micro);
- if (!rq_plvl)
- return NULL; /* req version string is invalid */
-
- if (my_major > rq_major
- || (my_major == rq_major && my_minor > rq_minor)
- || (my_major == rq_major && my_minor == rq_minor
- && my_micro > rq_micro)
- || (my_major == rq_major && my_minor == rq_minor
- && my_micro == rq_micro && strcmp (my_plvl, rq_plvl) >= 0))
- {
- return ver;
- }
- return NULL;
-}
-</pre>
-</div>
-</td>
-</tr>
-<tr class="function_entry_moderate">
-<td class="function_entry_filename">
-<a href="javascript:void(0);" title="show/hide function source"
onClick="javascript:show_hide('_asn1_delete_not_used_src',
'_asn1_delete_not_used_button')"><span
id="_asn1_delete_not_used_button">↓</span></a>
-</td>
-<td class="function_entry_name">
-_asn1_delete_not_used
-</td>
-<td class="function_entry_cyclo">
-13
-</td>
-<td class="function_entry_number">
-30
-</td>
-<td class="function_entry_number">
-58
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/decoding.c;hb=HEAD">lib/decoding.c</a>
-</td>
-</tr>
-<tr>
-<td colspan="6" height="0">
-<div id="_asn1_delete_not_used_src" class="function_src" style="position:
relative; display: none;">
-<pre class="function_src">
-static int
-_asn1_delete_not_used (ASN1_TYPE node)
-{
- ASN1_TYPE p, p2;
-
- if (node == NULL)
- return ASN1_ELEMENT_NOT_FOUND;
-
- p = node;
- while (p)
- {
- if (p->type & CONST_NOT_USED)
- {
- p2 = NULL;
- if (p != node)
- {
- p2 = _asn1_find_left (p);
- if (!p2)
- p2 = _asn1_find_up (p);
- }
- asn1_delete_structure (&p);
- p = p2;
- }
-
- if (!p)
- break; /* reach node */
-
- if (p->down)
- {
- p = p->down;
- }
- else
- {
- if (p == node)
- p = NULL;
- else if (p->right)
- p = p->right;
- else
- {
- while (1)
- {
- p = _asn1_find_up (p);
- if (p == node)
- {
- p = NULL;
- break;
- }
- if (p->right)
- {
- p = p->right;
- break;
- }
- }
- }
- }
- }
- return ASN1_SUCCESS;
-}
-</pre>
-</div>
-</td>
-</tr>
-<tr class="function_entry_moderate">
-<td class="function_entry_filename">
-<a href="javascript:void(0);" title="show/hide function source"
onClick="javascript:show_hide('_asn1_set_default_tag_src',
'_asn1_set_default_tag_button')"><span
id="_asn1_set_default_tag_button">↓</span></a>
-</td>
-<td class="function_entry_name">
-_asn1_set_default_tag
-</td>
-<td class="function_entry_cyclo">
-13
-</td>
-<td class="function_entry_number">
-22
-</td>
-<td class="function_entry_number">
-47
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/parser_aux.c;hb=HEAD">lib/parser_aux.c</a>
-</td>
-</tr>
-<tr>
-<td colspan="6" height="0">
-<div id="_asn1_set_default_tag_src" class="function_src" style="position:
relative; display: none;">
-<pre class="function_src">
-asn1_retCode
-_asn1_set_default_tag (ASN1_TYPE node)
-{
- ASN1_TYPE p;
-
- if ((node == NULL) || (type_field (node->type) != TYPE_DEFINITIONS))
- return ASN1_ELEMENT_NOT_FOUND;
-
- p = node;
- while (p)
- {
- if ((type_field (p->type) == TYPE_TAG) &&
- !(p->type & CONST_EXPLICIT) && !(p->type & CONST_IMPLICIT))
- {
- if (node->type & CONST_EXPLICIT)
- p->type |= CONST_EXPLICIT;
- else
- p->type |= CONST_IMPLICIT;
- }
-
- if (p->down)
- {
- p = p->down;
- }
- else if (p->right)
- p = p->right;
- else
- {
- while (1)
- {
- p = _asn1_find_up (p);
- if (p == node)
- {
- p = NULL;
- break;
- }
- if (p->right)
- {
- p = p->right;
- break;
- }
- }
- }
- }
-
- return ASN1_SUCCESS;
-}
-</pre>
-</div>
-</td>
-</tr>
-<tr class="function_entry_moderate">
-<td class="function_entry_filename">
-<a href="javascript:void(0);" title="show/hide function source"
onClick="javascript:show_hide('_asn1_create_static_structure_src',
'_asn1_create_static_structure_button')"><span
id="_asn1_create_static_structure_button">↓</span></a>
-</td>
-<td class="function_entry_name">
-_asn1_create_static_structure
-</td>
-<td class="function_entry_cyclo">
-12
-</td>
-<td class="function_entry_number">
-41
-</td>
-<td class="function_entry_number">
-78
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/structure.c;hb=HEAD">lib/structure.c</a>
-</td>
-</tr>
-<tr>
-<td colspan="6" height="0">
-<div id="_asn1_create_static_structure_src" class="function_src"
style="position: relative; display: none;">
-<pre class="function_src">
-asn1_retCode
-_asn1_create_static_structure (ASN1_TYPE pointer, char *output_file_name,
- char *vector_name)
-{
- FILE *file;
- ASN1_TYPE p;
- unsigned long t;
-
- file = fopen (output_file_name, "w");
-
- if (file == NULL)
- return ASN1_FILE_NOT_FOUND;
-
- fprintf (file, "#if HAVE_CONFIG_H\n");
- fprintf (file, "# include \"config.h\"\n");
- fprintf (file, "#endif\n\n");
-
- fprintf (file, "#include <libtasn1.h>\n\n");
-
- fprintf (file, "const ASN1_ARRAY_TYPE %s[] = {\n", vector_name);
-
- p = pointer;
-
- while (p)
- {
- fprintf (file, " { ");
-
- if (p->name)
- fprintf (file, "\"%s\", ", p->name);
- else
- fprintf (file, "NULL, ");
-
- t = p->type;
- if (p->down)
- t |= CONST_DOWN;
- if (p->right)
- t |= CONST_RIGHT;
-
- fprintf (file, "%lu, ", t);
-
- if (p->value)
- fprintf (file, "\"%s\"},\n", p->value);
- else
- fprintf (file, "NULL },\n");
-
- if (p->down)
- {
- p = p->down;
- }
- else if (p->right)
- {
- p = p->right;
- }
- else
- {
- while (1)
- {
- p = _asn1_find_up (p);
- if (p == pointer)
- {
- p = NULL;
- break;
- }
- if (p->right)
- {
- p = p->right;
- break;
- }
- }
- }
- }
-
- fprintf (file, " { NULL, 0, NULL }\n};\n");
-
- fclose (file);
-
- return ASN1_SUCCESS;
-}
-</pre>
-</div>
-</td>
-</tr>
-<tr class="function_entry_moderate">
-<td class="function_entry_filename">
-<a href="javascript:void(0);" title="show/hide function source"
onClick="javascript:show_hide('_asn1_copy_structure3_src',
'_asn1_copy_structure3_button')"><span
id="_asn1_copy_structure3_button">↓</span></a>
-</td>
-<td class="function_entry_name">
-_asn1_copy_structure3
-</td>
-<td class="function_entry_cyclo">
-12
-</td>
-<td class="function_entry_number">
-37
-</td>
-<td class="function_entry_number">
-67
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/structure.c;hb=HEAD">lib/structure.c</a>
-</td>
-</tr>
-<tr>
-<td colspan="6" height="0">
-<div id="_asn1_copy_structure3_src" class="function_src" style="position:
relative; display: none;">
-<pre class="function_src">
-ASN1_TYPE
-_asn1_copy_structure3 (ASN1_TYPE source_node)
-{
- ASN1_TYPE dest_node, p_s, p_d, p_d_prev;
- int move;
-
- if (source_node == NULL)
- return NULL;
-
- dest_node = _asn1_add_node_only (source_node->type);
-
- p_s = source_node;
- p_d = dest_node;
-
- move = DOWN;
-
- do
- {
- if (move != UP)
- {
- if (p_s->name)
- _asn1_set_name (p_d, p_s->name);
- if (p_s->value)
- _asn1_set_value (p_d, p_s->value, p_s->value_len);
- move = DOWN;
- }
- else
- move = RIGHT;
-
- if (move == DOWN)
- {
- if (p_s->down)
- {
- p_s = p_s->down;
- p_d_prev = p_d;
- p_d = _asn1_add_node_only (p_s->type);
- _asn1_set_down (p_d_prev, p_d);
- }
- else
- move = RIGHT;
- }
-
- if (p_s == source_node)
- break;
-
- if (move == RIGHT)
- {
- if (p_s->right)
- {
- p_s = p_s->right;
- p_d_prev = p_d;
- p_d = _asn1_add_node_only (p_s->type);
- _asn1_set_right (p_d_prev, p_d);
- }
- else
- move = UP;
- }
- if (move == UP)
- {
- p_s = _asn1_find_up (p_s);
- p_d = _asn1_find_up (p_d);
- }
- }
- while (p_s != source_node);
-
- return dest_node;
-}
-</pre>
-</div>
-</td>
-</tr>
-<tr class="function_entry_moderate">
-<td class="function_entry_filename">
-<a href="javascript:void(0);" title="show/hide function source"
onClick="javascript:show_hide('_asn1_change_integer_value_src',
'_asn1_change_integer_value_button')"><span
id="_asn1_change_integer_value_button">↓</span></a>
-</td>
-<td class="function_entry_name">
-_asn1_change_integer_value
-</td>
-<td class="function_entry_cyclo">
-12
-</td>
-<td class="function_entry_number">
-28
-</td>
-<td class="function_entry_number">
-56
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/parser_aux.c;hb=HEAD">lib/parser_aux.c</a>
-</td>
-</tr>
-<tr>
-<td colspan="6" height="0">
-<div id="_asn1_change_integer_value_src" class="function_src" style="position:
relative; display: none;">
-<pre class="function_src">
-asn1_retCode
-_asn1_change_integer_value (ASN1_TYPE node)
-{
- ASN1_TYPE p;
- unsigned char val[SIZEOF_UNSIGNED_LONG_INT];
- unsigned char val2[SIZEOF_UNSIGNED_LONG_INT + 1];
- int len;
-
- if (node == NULL)
- return ASN1_ELEMENT_NOT_FOUND;
-
- p = node;
- while (p)
- {
- if ((type_field (p->type) == TYPE_INTEGER) && (p->type &
CONST_ASSIGN))
- {
- if (p->value)
- {
- _asn1_convert_integer (p->value, val, sizeof (val), &len);
- asn1_octet_der (val, len, val2, &len);
- _asn1_set_value (p, val2, len);
- }
- }
-
- if (p->down)
- {
- p = p->down;
- }
- else
- {
- if (p == node)
- p = NULL;
- else if (p->right)
- p = p->right;
- else
- {
- while (1)
- {
- p = _asn1_find_up (p);
- if (p == node)
- {
- p = NULL;
- break;
- }
- if (p->right)
- {
- p = p->right;
- break;
- }
- }
- }
- }
- }
-
- return ASN1_SUCCESS;
-}
-</pre>
-</div>
-</td>
-</tr>
-<tr class="function_entry_moderate">
-<td class="function_entry_filename">
-<a href="javascript:void(0);" title="show/hide function source"
onClick="javascript:show_hide('asn1_get_tag_der_src',
'asn1_get_tag_der_button')"><span id="asn1_get_tag_der_button">↓</span></a>
-</td>
-<td class="function_entry_name">
-asn1_get_tag_der
-</td>
-<td class="function_entry_cyclo">
-11
-</td>
-<td class="function_entry_number">
-24
-</td>
-<td class="function_entry_number">
-44
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/decoding.c;hb=HEAD">lib/decoding.c</a>
-</td>
-</tr>
-<tr>
-<td colspan="6" height="0">
-<div id="asn1_get_tag_der_src" class="function_src" style="position: relative;
display: none;">
-<pre class="function_src">
-int
-asn1_get_tag_der (const unsigned char *der, int der_len,
- unsigned char *cls, int *len, unsigned long *tag)
-{
- int punt, ris;
-
- if (der == NULL || der_len < 2 || len == NULL)
- return ASN1_DER_ERROR;
-
- *cls = der[0] & 0xE0;
- if ((der[0] & 0x1F) != 0x1F)
- {
- /* short form */
- *len = 1;
- ris = der[0] & 0x1F;
- }
- else
- {
- /* Long form */
- punt = 1;
- ris = 0;
- while (punt <= der_len && der[punt] & 128)
- {
- int last = ris;
- ris = ris * 128 + (der[punt++] & 0x7F);
- if (ris < last)
- /* wrapper around, and no bignums... */
- return ASN1_DER_ERROR;
- }
- if (punt >= der_len)
- return ASN1_DER_ERROR;
- {
- int last = ris;
- ris = ris * 128 + (der[punt++] & 0x7F);
- if (ris < last)
- /* wrapper around, and no bignums... */
- return ASN1_DER_ERROR;
- }
- *len = punt;
- }
- if (tag)
- *tag = ris;
- return ASN1_SUCCESS;
-}
-</pre>
-</div>
-</td>
-</tr>
-<tr class="function_entry_simple">
-<td class="function_entry_filename">
-
-</td>
-<td class="function_entry_name">
-_asn1_get_indefinite_length_string
-</td>
-<td class="function_entry_cyclo">
-10
-</td>
-<td class="function_entry_number">
-27
-</td>
-<td class="function_entry_number">
-49
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/decoding.c;hb=HEAD">lib/decoding.c</a>
-</td>
-</tr>
-<tr class="function_entry_simple">
-<td class="function_entry_filename">
-
-</td>
-<td class="function_entry_name">
-_asn1_get_objectid_der
-</td>
-<td class="function_entry_cyclo">
-10
-</td>
-<td class="function_entry_number">
-27
-</td>
-<td class="function_entry_number">
-40
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/decoding.c;hb=HEAD">lib/decoding.c</a>
-</td>
-</tr>
-<tr class="function_entry_simple">
-<td class="function_entry_filename">
-
-</td>
-<td class="function_entry_name">
-_asn1_complete_explicit_tag
-</td>
-<td class="function_entry_cyclo">
-10
-</td>
-<td class="function_entry_number">
-26
-</td>
-<td class="function_entry_number">
-56
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/coding.c;hb=HEAD">lib/coding.c</a>
-</td>
-</tr>
-<tr class="function_entry_simple">
-<td class="function_entry_filename">
-
-</td>
-<td class="function_entry_name">
-asn1_parser2array
-</td>
-<td class="function_entry_cyclo">
-9
-</td>
-<td class="function_entry_number">
-48
-</td>
-<td class="function_entry_number">
-95
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/ASN1.c;hb=HEAD">lib/ASN1.c</a>
-</td>
-</tr>
-<tr class="function_entry_simple">
-<td class="function_entry_filename">
-
-</td>
-<td class="function_entry_name">
-asn1_find_structure_from_oid
-</td>
-<td class="function_entry_cyclo">
-9
-</td>
-<td class="function_entry_number">
-23
-</td>
-<td class="function_entry_number">
-43
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/structure.c;hb=HEAD">lib/structure.c</a>
-</td>
-</tr>
-<tr class="function_entry_simple">
-<td class="function_entry_filename">
-
-</td>
-<td class="function_entry_name">
-asn1_delete_structure
-</td>
-<td class="function_entry_cyclo">
-8
-</td>
-<td class="function_entry_number">
-25
-</td>
-<td class="function_entry_number">
-50
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/structure.c;hb=HEAD">lib/structure.c</a>
-</td>
-</tr>
-<tr class="function_entry_simple">
-<td class="function_entry_filename">
-
-</td>
-<td class="function_entry_name">
-yytnamerr
-</td>
-<td class="function_entry_cyclo">
-11
-</td>
-<td class="function_entry_number">
-20
-</td>
-<td class="function_entry_number">
-38
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/ASN1.c;hb=HEAD">lib/ASN1.c</a>
-</td>
-</tr>
-<tr class="function_entry_simple">
-<td class="function_entry_filename">
-
-</td>
-<td class="function_entry_name">
-_asn1_append_value
-</td>
-<td class="function_entry_cyclo">
-7
-</td>
-<td class="function_entry_number">
-22
-</td>
-<td class="function_entry_number">
-37
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/parser_aux.c;hb=HEAD">lib/parser_aux.c</a>
-</td>
-</tr>
-<tr class="function_entry_simple">
-<td class="function_entry_filename">
-
-</td>
-<td class="function_entry_name">
-asn1_get_length_der
-</td>
-<td class="function_entry_cyclo">
-7
-</td>
-<td class="function_entry_number">
-20
-</td>
-<td class="function_entry_number">
-43
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/decoding.c;hb=HEAD">lib/decoding.c</a>
-</td>
-</tr>
-<tr class="function_entry_simple">
-<td class="function_entry_filename">
-
-</td>
-<td class="function_entry_name">
-_asn1_extract_der_octet
-</td>
-<td class="function_entry_cyclo">
-7
-</td>
-<td class="function_entry_number">
-20
-</td>
-<td class="function_entry_number">
-41
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/decoding.c;hb=HEAD">lib/decoding.c</a>
-</td>
-</tr>
-<tr class="function_entry_simple">
-<td class="function_entry_filename">
-
-</td>
-<td class="function_entry_name">
-_asn1_append_sequence_set
-</td>
-<td class="function_entry_cyclo">
-7
-</td>
-<td class="function_entry_number">
-20
-</td>
-<td class="function_entry_number">
-33
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/element.c;hb=HEAD">lib/element.c</a>
-</td>
-</tr>
-<tr class="function_entry_simple">
-<td class="function_entry_filename">
-
-</td>
-<td class="function_entry_name">
-_asn1_set_value
-</td>
-<td class="function_entry_cyclo">
-7
-</td>
-<td class="function_entry_number">
-17
-</td>
-<td class="function_entry_number">
-27
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/parser_aux.c;hb=HEAD">lib/parser_aux.c</a>
-</td>
-</tr>
-<tr class="function_entry_simple">
-<td class="function_entry_filename">
-
-</td>
-<td class="function_entry_name">
-_asn1_create_errorDescription
-</td>
-<td class="function_entry_cyclo">
-11
-</td>
-<td class="function_entry_number">
-29
-</td>
-<td class="function_entry_number">
-42
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/ASN1.c;hb=HEAD">lib/ASN1.c</a>
-</td>
-</tr>
-<tr class="function_entry_simple">
-<td class="function_entry_filename">
-
-</td>
-<td class="function_entry_name">
-asn1_parser2tree
-</td>
-<td class="function_entry_cyclo">
-6
-</td>
-<td class="function_entry_number">
-26
-</td>
-<td class="function_entry_number">
-58
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/ASN1.c;hb=HEAD">lib/ASN1.c</a>
-</td>
-</tr>
-<tr class="function_entry_simple">
-<td class="function_entry_filename">
-
-</td>
-<td class="function_entry_name">
-asn1_length_der
-</td>
-<td class="function_entry_cyclo">
-6
-</td>
-<td class="function_entry_number">
-15
-</td>
-<td class="function_entry_number">
-31
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/coding.c;hb=HEAD">lib/coding.c</a>
-</td>
-</tr>
-<tr class="function_entry_simple">
-<td class="function_entry_filename">
-
-</td>
-<td class="function_entry_name">
-parse_version_string
-</td>
-<td class="function_entry_cyclo">
-6
-</td>
-<td class="function_entry_number">
-15
-</td>
-<td class="function_entry_number">
-21
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/parser_aux.c;hb=HEAD">lib/parser_aux.c</a>
-</td>
-</tr>
-<tr class="function_entry_simple">
-<td class="function_entry_filename">
-
-</td>
-<td class="function_entry_name">
-_asn1_set_name
-</td>
-<td class="function_entry_cyclo">
-6
-</td>
-<td class="function_entry_number">
-13
-</td>
-<td class="function_entry_number">
-25
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/parser_aux.c;hb=HEAD">lib/parser_aux.c</a>
-</td>
-</tr>
-<tr class="function_entry_simple">
-<td class="function_entry_filename">
-
-</td>
-<td class="function_entry_name">
-asn1_number_of_elements
-</td>
-<td class="function_entry_cyclo">
-6
-</td>
-<td class="function_entry_number">
-13
-</td>
-<td class="function_entry_number">
-25
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/structure.c;hb=HEAD">lib/structure.c</a>
-</td>
-</tr>
-<tr class="function_entry_simple">
-<td class="function_entry_filename">
-
-</td>
-<td class="function_entry_name">
-_asn1_remove_node
-</td>
-<td class="function_entry_cyclo">
-5
-</td>
-<td class="function_entry_number">
-7
-</td>
-<td class="function_entry_number">
-12
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/parser_aux.c;hb=HEAD">lib/parser_aux.c</a>
-</td>
-</tr>
-<tr class="function_entry_simple">
-<td class="function_entry_filename">
-
-</td>
-<td class="function_entry_name">
-asn1_copy_node
-</td>
-<td class="function_entry_cyclo">
-5
-</td>
-<td class="function_entry_number">
-21
-</td>
-<td class="function_entry_number">
-40
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/structure.c;hb=HEAD">lib/structure.c</a>
-</td>
-</tr>
-<tr class="function_entry_simple">
-<td class="function_entry_filename">
-
-</td>
-<td class="function_entry_name">
-asn1_delete_element
-</td>
-<td class="function_entry_cyclo">
-5
-</td>
-<td class="function_entry_number">
-14
-</td>
-<td class="function_entry_number">
-25
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/structure.c;hb=HEAD">lib/structure.c</a>
-</td>
-</tr>
-<tr class="function_entry_simple">
-<td class="function_entry_filename">
-
-</td>
-<td class="function_entry_name">
-_asn1_set_value_m
-</td>
-<td class="function_entry_cyclo">
-5
-</td>
-<td class="function_entry_number">
-12
-</td>
-<td class="function_entry_number">
-21
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/parser_aux.c;hb=HEAD">lib/parser_aux.c</a>
-</td>
-</tr>
-<tr class="function_entry_simple">
-<td class="function_entry_filename">
-
-</td>
-<td class="function_entry_name">
-parse_version_number
-</td>
-<td class="function_entry_cyclo">
-5
-</td>
-<td class="function_entry_number">
-11
-</td>
-<td class="function_entry_number">
-15
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/parser_aux.c;hb=HEAD">lib/parser_aux.c</a>
-</td>
-</tr>
-<tr class="function_entry_simple">
-<td class="function_entry_filename">
-
-</td>
-<td class="function_entry_name">
-_asn1_get_time_der
-</td>
-<td class="function_entry_cyclo">
-5
-</td>
-<td class="function_entry_number">
-10
-</td>
-<td class="function_entry_number">
-17
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/decoding.c;hb=HEAD">lib/decoding.c</a>
-</td>
-</tr>
-<tr class="function_entry_simple">
-<td class="function_entry_filename">
-
-</td>
-<td class="function_entry_name">
-_asn1_find_up
-</td>
-<td class="function_entry_cyclo">
-4
-</td>
-<td class="function_entry_number">
-7
-</td>
-<td class="function_entry_number">
-15
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/parser_aux.c;hb=HEAD">lib/parser_aux.c</a>
-</td>
-</tr>
-<tr class="function_entry_simple">
-<td class="function_entry_filename">
-
-</td>
-<td class="function_entry_name">
-_asn1_find_left
-</td>
-<td class="function_entry_cyclo">
-4
-</td>
-<td class="function_entry_number">
-3
-</td>
-<td class="function_entry_number">
-8
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/structure.c;hb=HEAD">lib/structure.c</a>
-</td>
-</tr>
-<tr class="function_entry_simple">
-<td class="function_entry_filename">
-
-</td>
-<td class="function_entry_name">
-_asn1_ltostr
-</td>
-<td class="function_entry_cyclo">
-4
-</td>
-<td class="function_entry_number">
-22
-</td>
-<td class="function_entry_number">
-32
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/parser_aux.c;hb=HEAD">lib/parser_aux.c</a>
-</td>
-</tr>
-<tr class="function_entry_simple">
-<td class="function_entry_filename">
-
-</td>
-<td class="function_entry_name">
-_asn1_tag_der
-</td>
-<td class="function_entry_cyclo">
-4
-</td>
-<td class="function_entry_number">
-14
-</td>
-<td class="function_entry_number">
-29
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/coding.c;hb=HEAD">lib/coding.c</a>
-</td>
-</tr>
-<tr class="function_entry_simple">
-<td class="function_entry_filename">
-
-</td>
-<td class="function_entry_name">
-_asn1_hierarchical_name
-</td>
-<td class="function_entry_cyclo">
-4
-</td>
-<td class="function_entry_number">
-12
-</td>
-<td class="function_entry_number">
-25
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/element.c;hb=HEAD">lib/element.c</a>
-</td>
-</tr>
-<tr class="function_entry_simple">
-<td class="function_entry_filename">
-
-</td>
-<td class="function_entry_name">
-asn1_get_bit_der
-</td>
-<td class="function_entry_cyclo">
-4
-</td>
-<td class="function_entry_number">
-12
-</td>
-<td class="function_entry_number">
-25
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/decoding.c;hb=HEAD">lib/decoding.c</a>
-</td>
-</tr>
-<tr class="function_entry_simple">
-<td class="function_entry_filename">
-
-</td>
-<td class="function_entry_name">
-asn1_get_octet_der
-</td>
-<td class="function_entry_cyclo">
-4
-</td>
-<td class="function_entry_number">
-11
-</td>
-<td class="function_entry_number">
-26
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/decoding.c;hb=HEAD">lib/decoding.c</a>
-</td>
-</tr>
-<tr class="function_entry_simple">
-<td class="function_entry_filename">
-
-</td>
-<td class="function_entry_name">
-_asn1_time_der
-</td>
-<td class="function_entry_cyclo">
-4
-</td>
-<td class="function_entry_number">
-11
-</td>
-<td class="function_entry_number">
-19
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/coding.c;hb=HEAD">lib/coding.c</a>
-</td>
-</tr>
-<tr class="function_entry_simple">
-<td class="function_entry_filename">
-
-</td>
-<td class="function_entry_name">
-yy_symbol_value_print
-</td>
-<td class="function_entry_cyclo">
-3
-</td>
-<td class="function_entry_number">
-6
-</td>
-<td class="function_entry_number">
-24
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/ASN1.c;hb=HEAD">lib/ASN1.c</a>
-</td>
-</tr>
-<tr class="function_entry_simple">
-<td class="function_entry_filename">
-
-</td>
-<td class="function_entry_name">
-asn1_get_length_ber
-</td>
-<td class="function_entry_cyclo">
-3
-</td>
-<td class="function_entry_number">
-9
-</td>
-<td class="function_entry_number">
-17
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/decoding.c;hb=HEAD">lib/decoding.c</a>
-</td>
-</tr>
-<tr class="function_entry_simple">
-<td class="function_entry_filename">
-
-</td>
-<td class="function_entry_name">
-asn1_strerror
-</td>
-<td class="function_entry_cyclo">
-3
-</td>
-<td class="function_entry_number">
-7
-</td>
-<td class="function_entry_number">
-11
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/errors.c;hb=HEAD">lib/errors.c</a>
-</td>
-</tr>
-<tr class="function_entry_simple">
-<td class="function_entry_filename">
-
-</td>
-<td class="function_entry_name">
-_asn1_get_last_right
-</td>
-<td class="function_entry_cyclo">
-3
-</td>
-<td class="function_entry_number">
-7
-</td>
-<td class="function_entry_number">
-12
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/parser_aux.c;hb=HEAD">lib/parser_aux.c</a>
-</td>
-</tr>
-<tr class="function_entry_simple">
-<td class="function_entry_filename">
-
-</td>
-<td class="function_entry_name">
-_asn1_str_cat
-</td>
-<td class="function_entry_cyclo">
-3
-</td>
-<td class="function_entry_number">
-7
-</td>
-<td class="function_entry_number">
-19
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/gstr.c;hb=HEAD">lib/gstr.c</a>
-</td>
-</tr>
-<tr class="function_entry_simple">
-<td class="function_entry_filename">
-
-</td>
-<td class="function_entry_name">
-_asn1_str_cpy
-</td>
-<td class="function_entry_cyclo">
-3
-</td>
-<td class="function_entry_number">
-6
-</td>
-<td class="function_entry_number">
-18
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/gstr.c;hb=HEAD">lib/gstr.c</a>
-</td>
-</tr>
-<tr class="function_entry_simple">
-<td class="function_entry_filename">
-
-</td>
-<td class="function_entry_name">
-_asn1_set_down
-</td>
-<td class="function_entry_cyclo">
-3
-</td>
-<td class="function_entry_number">
-6
-</td>
-<td class="function_entry_number">
-10
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/parser_aux.c;hb=HEAD">lib/parser_aux.c</a>
-</td>
-</tr>
-<tr class="function_entry_simple">
-<td class="function_entry_filename">
-
-</td>
-<td class="function_entry_name">
-_asn1_set_right
-</td>
-<td class="function_entry_cyclo">
-3
-</td>
-<td class="function_entry_number">
-6
-</td>
-<td class="function_entry_number">
-10
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/parser_aux.c;hb=HEAD">lib/parser_aux.c</a>
-</td>
-</tr>
-<tr class="function_entry_simple">
-<td class="function_entry_filename">
-
-</td>
-<td class="function_entry_name">
-asn1_octet_der
-</td>
-<td class="function_entry_cyclo">
-3
-</td>
-<td class="function_entry_number">
-6
-</td>
-<td class="function_entry_number">
-12
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/coding.c;hb=HEAD">lib/coding.c</a>
-</td>
-</tr>
-<tr class="function_entry_simple">
-<td class="function_entry_filename">
-
-</td>
-<td class="function_entry_name">
-_asn1_add_node
-</td>
-<td class="function_entry_cyclo">
-3
-</td>
-<td class="function_entry_number">
-14
-</td>
-<td class="function_entry_number">
-25
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/parser_aux.c;hb=HEAD">lib/parser_aux.c</a>
-</td>
-</tr>
-<tr class="function_entry_simple">
-<td class="function_entry_filename">
-
-</td>
-<td class="function_entry_name">
-asn1_bit_der
-</td>
-<td class="function_entry_cyclo">
-3
-</td>
-<td class="function_entry_number">
-13
-</td>
-<td class="function_entry_number">
-20
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/coding.c;hb=HEAD">lib/coding.c</a>
-</td>
-</tr>
-<tr class="function_entry_simple">
-<td class="function_entry_filename">
-
-</td>
-<td class="function_entry_name">
-_asn1_set_value_octet
-</td>
-<td class="function_entry_cyclo">
-3
-</td>
-<td class="function_entry_number">
-10
-</td>
-<td class="function_entry_number">
-17
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/parser_aux.c;hb=HEAD">lib/parser_aux.c</a>
-</td>
-</tr>
-<tr class="function_entry_simple">
-<td class="function_entry_filename">
-
-</td>
-<td class="function_entry_name">
-yydestruct
-</td>
-<td class="function_entry_cyclo">
-2
-</td>
-<td class="function_entry_number">
-5
-</td>
-<td class="function_entry_number">
-32
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/ASN1.c;hb=HEAD">lib/ASN1.c</a>
-</td>
-</tr>
-<tr class="function_entry_simple">
-<td class="function_entry_filename">
-
-</td>
-<td class="function_entry_name">
-yy_stack_print
-</td>
-<td class="function_entry_cyclo">
-2
-</td>
-<td class="function_entry_number">
-6
-</td>
-<td class="function_entry_number">
-14
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/ASN1.c;hb=HEAD">lib/ASN1.c</a>
-</td>
-</tr>
-<tr class="function_entry_simple">
-<td class="function_entry_filename">
-
-</td>
-<td class="function_entry_name">
-_asn1_delete_list_and_nodes
-</td>
-<td class="function_entry_cyclo">
-2
-</td>
-<td class="function_entry_number">
-6
-</td>
-<td class="function_entry_number">
-13
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/parser_aux.c;hb=HEAD">lib/parser_aux.c</a>
-</td>
-</tr>
-<tr class="function_entry_simple">
-<td class="function_entry_filename">
-
-</td>
-<td class="function_entry_name">
-_asn1_add_node_only
-</td>
-<td class="function_entry_cyclo">
-2
-</td>
-<td class="function_entry_number">
-6
-</td>
-<td class="function_entry_number">
-13
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/structure.c;hb=HEAD">lib/structure.c</a>
-</td>
-</tr>
-<tr class="function_entry_simple">
-<td class="function_entry_filename">
-
-</td>
-<td class="function_entry_name">
-yystrlen
-</td>
-<td class="function_entry_cyclo">
-2
-</td>
-<td class="function_entry_number">
-6
-</td>
-<td class="function_entry_number">
-24
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/ASN1.c;hb=HEAD">lib/ASN1.c</a>
-</td>
-</tr>
-<tr class="function_entry_simple">
-<td class="function_entry_filename">
-
-</td>
-<td class="function_entry_name">
-yy_symbol_print
-</td>
-<td class="function_entry_cyclo">
-2
-</td>
-<td class="function_entry_number">
-5
-</td>
-<td class="function_entry_number">
-18
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/ASN1.c;hb=HEAD">lib/ASN1.c</a>
-</td>
-</tr>
-<tr class="function_entry_simple">
-<td class="function_entry_filename">
-
-</td>
-<td class="function_entry_name">
-_asn1_delete_list
-</td>
-<td class="function_entry_cyclo">
-2
-</td>
-<td class="function_entry_number">
-5
-</td>
-<td class="function_entry_number">
-12
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/parser_aux.c;hb=HEAD">lib/parser_aux.c</a>
-</td>
-</tr>
-<tr class="function_entry_simple">
-<td class="function_entry_filename">
-
-</td>
-<td class="function_entry_name">
-_asn1_error_description_value_not_found
-</td>
-<td class="function_entry_cyclo">
-2
-</td>
-<td class="function_entry_number">
-5
-</td>
-<td class="function_entry_number">
-14
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/coding.c;hb=HEAD">lib/coding.c</a>
-</td>
-</tr>
-<tr class="function_entry_simple">
-<td class="function_entry_filename">
-
-</td>
-<td class="function_entry_name">
-yystpcpy
-</td>
-<td class="function_entry_cyclo">
-2
-</td>
-<td class="function_entry_number">
-5
-</td>
-<td class="function_entry_number">
-17
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/ASN1.c;hb=HEAD">lib/ASN1.c</a>
-</td>
-</tr>
-<tr class="function_entry_simple">
-<td class="function_entry_filename">
-
-</td>
-<td class="function_entry_name">
-_asn1_mod_type
-</td>
-<td class="function_entry_cyclo">
-2
-</td>
-<td class="function_entry_number">
-4
-</td>
-<td class="function_entry_number">
-8
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/parser_aux.c;hb=HEAD">lib/parser_aux.c</a>
-</td>
-</tr>
-<tr class="function_entry_simple">
-<td class="function_entry_filename">
-
-</td>
-<td class="function_entry_name">
-_asn1_yyerror
-</td>
-<td class="function_entry_cyclo">
-2
-</td>
-<td class="function_entry_number">
-4
-</td>
-<td class="function_entry_number">
-14
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/ASN1.c;hb=HEAD">lib/ASN1.c</a>
-</td>
-</tr>
-<tr class="function_entry_simple">
-<td class="function_entry_filename">
-
-</td>
-<td class="function_entry_name">
-asn1_perror
-</td>
-<td class="function_entry_cyclo">
-2
-</td>
-<td class="function_entry_number">
-3
-</td>
-<td class="function_entry_number">
-6
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/errors.c;hb=HEAD">lib/errors.c</a>
-</td>
-</tr>
-<tr class="function_entry_simple">
-<td class="function_entry_filename">
-
-</td>
-<td class="function_entry_name">
-_asn1_get_name
-</td>
-<td class="function_entry_cyclo">
-2
-</td>
-<td class="function_entry_number">
-3
-</td>
-<td class="function_entry_number">
-7
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/parser_aux.c;hb=HEAD">lib/parser_aux.c</a>
-</td>
-</tr>
-<tr class="function_entry_simple">
-<td class="function_entry_filename">
-
-</td>
-<td class="function_entry_name">
-_asn1_get_down
-</td>
-<td class="function_entry_cyclo">
-2
-</td>
-<td class="function_entry_number">
-3
-</td>
-<td class="function_entry_number">
-7
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/parser_aux.c;hb=HEAD">lib/parser_aux.c</a>
-</td>
-</tr>
-<tr class="function_entry_simple">
-<td class="function_entry_filename">
-
-</td>
-<td class="function_entry_name">
-_asn1_get_right
-</td>
-<td class="function_entry_cyclo">
-2
-</td>
-<td class="function_entry_number">
-3
-</td>
-<td class="function_entry_number">
-7
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/parser_aux.c;hb=HEAD">lib/parser_aux.c</a>
-</td>
-</tr>
-<tr class="function_entry_simple">
-<td class="function_entry_filename">
-
-</td>
-<td class="function_entry_name">
-yy_reduce_print
-</td>
-<td class="function_entry_cyclo">
-2
-</td>
-<td class="function_entry_number">
-10
-</td>
-<td class="function_entry_number">
-24
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/ASN1.c;hb=HEAD">lib/ASN1.c</a>
-</td>
-</tr>
-<tr class="function_entry_simple">
-<td class="function_entry_filename">
-
-</td>
-<td class="function_entry_name">
-asn1_create_element
-</td>
-<td class="function_entry_cyclo">
-2
-</td>
-<td class="function_entry_number">
-10
-</td>
-<td class="function_entry_number">
-21
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/structure.c;hb=HEAD">lib/structure.c</a>
-</td>
-</tr>
-<tr class="function_entry_simple">
-<td class="function_entry_filename">
-
-</td>
-<td class="function_entry_name">
-_asn1_copy_structure2
-</td>
-<td class="function_entry_cyclo">
-1
-</td>
-<td class="function_entry_number">
-3
-</td>
-<td class="function_entry_number">
-10
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/structure.c;hb=HEAD">lib/structure.c</a>
-</td>
-</tr>
-<tr class="function_entry_simple">
-<td class="function_entry_filename">
-
-</td>
-<td class="function_entry_name">
-_asn1_error_description_tag_error
-</td>
-<td class="function_entry_cyclo">
-1
-</td>
-<td class="function_entry_number">
-3
-</td>
-<td class="function_entry_number">
-10
-</td>
-<td class="function_entry_filename">
-<a
href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/decoding.c;hb=HEAD">lib/decoding.c</a>
-</td>
-</tr>
-</table>
-<hr color="black" size="2"/> Copyright (c) 2007, 2008 Free Software Foundation
Inc.
-</body>
-</html>
hooks/post-receive
--
GNU libtasn1
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Libtasn1-commit] [SCM] GNU libtasn1 branch, master, updated. libtasn1_2_5-15-gf03292a,
Simon Josefsson <=