summaryrefslogtreecommitdiff
path: root/doc/texi/element.c.texi
diff options
context:
space:
mode:
Diffstat (limited to 'doc/texi/element.c.texi')
-rw-r--r--doc/texi/element.c.texi286
1 files changed, 286 insertions, 0 deletions
diff --git a/doc/texi/element.c.texi b/doc/texi/element.c.texi
new file mode 100644
index 0000000..6e40405
--- /dev/null
+++ b/doc/texi/element.c.texi
@@ -0,0 +1,286 @@
+@subheading asn1_write_value
+@anchor{asn1_write_value}
+@deftypefun {int} {asn1_write_value} (asn1_node @var{node_root}, const char * @var{name}, const void * @var{ivalue}, int @var{len})
+@var{node_root}: pointer to a structure
+
+@var{name}: the name of the element inside the structure that you want to set.
+
+@var{ivalue}: vector used to specify the value to set. If len is >0,
+VALUE must be a two's complement form integer. if len=0 *VALUE
+must be a null terminated string with an integer value.
+
+@var{len}: number of bytes of *value to use to set the value:
+value[0]..value[len-1] or 0 if value is a null terminated string
+
+Set the value of one element inside a structure.
+
+If an element is OPTIONAL and you want to delete it, you must use
+the value=NULL and len=0. Using "pkix.asn":
+
+result=asn1_write_value(cert, "tbsCertificate.issuerUniqueID",
+NULL, 0);
+
+Description for each type:
+
+@strong{INTEGER:} VALUE must contain a two's complement form integer.
+
+value[0]=0xFF , len=1 -> integer=-1.
+value[0]=0xFF value[1]=0xFF , len=2 -> integer=-1.
+value[0]=0x01 , len=1 -> integer= 1.
+value[0]=0x00 value[1]=0x01 , len=2 -> integer= 1.
+value="123" , len=0 -> integer= 123.
+
+@strong{ENUMERATED:} As INTEGER (but only with not negative numbers).
+
+@strong{BOOLEAN:} VALUE must be the null terminated string "TRUE" or
+"FALSE" and LEN != 0.
+
+value="TRUE" , len=1 -> boolean=TRUE.
+value="FALSE" , len=1 -> boolean=FALSE.
+
+OBJECT IDENTIFIER: VALUE must be a null terminated string with
+each number separated by a dot (e.g. "1.2.3.543.1"). LEN != 0.
+
+value="1 2 840 10040 4 3" , len=1 -> OID=dsa-with-sha.
+
+@strong{UTCTime:} VALUE must be a null terminated string in one of these
+formats: "YYMMDDhhmmssZ", "YYMMDDhhmmssZ",
+"YYMMDDhhmmss+hh'mm'", "YYMMDDhhmmss-hh'mm'",
+"YYMMDDhhmm+hh'mm'", or "YYMMDDhhmm-hh'mm'". LEN != 0.
+
+value="9801011200Z" , len=1 -> time=Jannuary 1st, 1998
+at 12h 00m Greenwich Mean Time
+
+@strong{GeneralizedTime:} VALUE must be in one of this format:
+"YYYYMMDDhhmmss.sZ", "YYYYMMDDhhmmss.sZ",
+"YYYYMMDDhhmmss.s+hh'mm'", "YYYYMMDDhhmmss.s-hh'mm'",
+"YYYYMMDDhhmm+hh'mm'", or "YYYYMMDDhhmm-hh'mm'" where ss.s
+indicates the seconds with any precision like "10.1" or "01.02".
+LEN != 0
+
+value="2001010112001.12-0700" , len=1 -> time=Jannuary
+1st, 2001 at 12h 00m 01.12s Pacific Daylight Time
+
+OCTET STRING: VALUE contains the octet string and LEN is the
+number of octets.
+
+value="$\backslash$x01$\backslash$x02$\backslash$x03" ,
+len=3 -> three bytes octet string
+
+@strong{GeneralString:} VALUE contains the generalstring and LEN is the
+number of octets.
+
+value="$\backslash$x01$\backslash$x02$\backslash$x03" ,
+len=3 -> three bytes generalstring
+
+BIT STRING: VALUE contains the bit string organized by bytes and
+LEN is the number of bits.
+
+value="$\backslash$xCF" , len=6 -> bit string="110011" (six
+bits)
+
+@strong{CHOICE:} if NAME indicates a choice type, VALUE must specify one of
+the alternatives with a null terminated string. LEN != 0. Using
+"pkix.asn"\:
+
+result=asn1_write_value(cert,
+"certificate1.tbsCertificate.subject", "rdnSequence",
+1);
+
+@strong{ANY:} VALUE indicates the der encoding of a structure. LEN != 0.
+
+SEQUENCE OF: VALUE must be the null terminated string "NEW" and
+LEN != 0. With this instruction another element is appended in
+the sequence. The name of this element will be "?1" if it's the
+first one, "?2" for the second and so on.
+
+Using "pkix.asn"\:
+
+result=asn1_write_value(cert,
+"certificate1.tbsCertificate.subject.rdnSequence", "NEW", 1);
+
+SET OF: the same as SEQUENCE OF. Using "pkix.asn":
+
+result=asn1_write_value(cert,
+"tbsCertificate.subject.rdnSequence.?LAST", "NEW", 1);
+
+@strong{Returns:} @code{ASN1_SUCCESS} if the value was set,
+@code{ASN1_ELEMENT_NOT_FOUND} if @code{name} is not a valid element, and
+@code{ASN1_VALUE_NOT_VALID} if @code{ivalue} has a wrong format.
+@end deftypefun
+
+@subheading asn1_read_value
+@anchor{asn1_read_value}
+@deftypefun {int} {asn1_read_value} (asn1_node @var{root}, const char * @var{name}, void * @var{ivalue}, int * @var{len})
+@var{root}: pointer to a structure.
+
+@var{name}: the name of the element inside a structure that you want to read.
+
+@var{ivalue}: vector that will contain the element's content, must be a
+pointer to memory cells already allocated (may be @code{NULL} ).
+
+@var{len}: number of bytes of *value: value[0]..value[len-1]. Initialy
+holds the sizeof value.
+
+Returns the value of one element inside a structure.
+If an element is OPTIONAL and this returns
+@code{ASN1_ELEMENT_NOT_FOUND} , it means that this element wasn't present
+in the der encoding that created the structure. The first element
+of a SEQUENCE_OF or SET_OF is named "?1". The second one "?2" and
+so on. If the @code{root} provided is a node to specific sequence element,
+then the keyword "?CURRENT" is also acceptable and indicates the
+current sequence element of this node.
+
+Note that there can be valid values with length zero. In these case
+this function will succeed and @code{len} will be zero.
+
+@strong{INTEGER:} VALUE will contain a two's complement form integer.
+
+integer=-1 -> value[0]=0xFF , len=1.
+integer=1 -> value[0]=0x01 , len=1.
+
+@strong{ENUMERATED:} As INTEGER (but only with not negative numbers).
+
+@strong{BOOLEAN:} VALUE will be the null terminated string "TRUE" or
+"FALSE" and LEN=5 or LEN=6.
+
+OBJECT IDENTIFIER: VALUE will be a null terminated string with
+each number separated by a dot (i.e. "1.2.3.543.1").
+
+LEN = strlen(VALUE)+1
+
+@strong{UTCTime:} VALUE will be a null terminated string in one of these
+formats: "YYMMDDhhmmss+hh'mm'" or "YYMMDDhhmmss-hh'mm'".
+LEN=strlen(VALUE)+1.
+
+@strong{GeneralizedTime:} VALUE will be a null terminated string in the
+same format used to set the value.
+
+OCTET STRING: VALUE will contain the octet string and LEN will be
+the number of octets.
+
+@strong{GeneralString:} VALUE will contain the generalstring and LEN will
+be the number of octets.
+
+BIT STRING: VALUE will contain the bit string organized by bytes
+and LEN will be the number of bits.
+
+@strong{CHOICE:} If NAME indicates a choice type, VALUE will specify the
+alternative selected.
+
+@strong{ANY:} If NAME indicates an any type, VALUE will indicate the DER
+encoding of the structure actually used.
+
+@strong{Returns:} @code{ASN1_SUCCESS} if value is returned,
+@code{ASN1_ELEMENT_NOT_FOUND} if @code{name} is not a valid element,
+@code{ASN1_VALUE_NOT_FOUND} if there isn't any value for the element
+selected, and @code{ASN1_MEM_ERROR} if The value vector isn't big enough
+to store the result, and in this case @code{len} will contain the number of
+bytes needed.
+@end deftypefun
+
+@subheading asn1_read_value_type
+@anchor{asn1_read_value_type}
+@deftypefun {int} {asn1_read_value_type} (asn1_node @var{root}, const char * @var{name}, void * @var{ivalue}, int * @var{len}, unsigned int * @var{etype})
+@var{root}: pointer to a structure.
+
+@var{name}: the name of the element inside a structure that you want to read.
+
+@var{ivalue}: vector that will contain the element's content, must be a
+pointer to memory cells already allocated (may be @code{NULL} ).
+
+@var{len}: number of bytes of *value: value[0]..value[len-1]. Initialy
+holds the sizeof value.
+
+@var{etype}: The type of the value read (ASN1_ETYPE)
+
+Returns the type and value of one element inside a structure.
+If an element is OPTIONAL and this returns
+@code{ASN1_ELEMENT_NOT_FOUND} , it means that this element wasn't present
+in the der encoding that created the structure. The first element
+of a SEQUENCE_OF or SET_OF is named "?1". The second one "?2" and
+so on. If the @code{root} provided is a node to specific sequence element,
+then the keyword "?CURRENT" is also acceptable and indicates the
+current sequence element of this node.
+
+Note that there can be valid values with length zero. In these case
+this function will succeed and @code{len} will be zero.
+
+@strong{INTEGER:} VALUE will contain a two's complement form integer.
+
+integer=-1 -> value[0]=0xFF , len=1.
+integer=1 -> value[0]=0x01 , len=1.
+
+@strong{ENUMERATED:} As INTEGER (but only with not negative numbers).
+
+@strong{BOOLEAN:} VALUE will be the null terminated string "TRUE" or
+"FALSE" and LEN=5 or LEN=6.
+
+OBJECT IDENTIFIER: VALUE will be a null terminated string with
+each number separated by a dot (i.e. "1.2.3.543.1").
+
+LEN = strlen(VALUE)+1
+
+@strong{UTCTime:} VALUE will be a null terminated string in one of these
+formats: "YYMMDDhhmmss+hh'mm'" or "YYMMDDhhmmss-hh'mm'".
+LEN=strlen(VALUE)+1.
+
+@strong{GeneralizedTime:} VALUE will be a null terminated string in the
+same format used to set the value.
+
+OCTET STRING: VALUE will contain the octet string and LEN will be
+the number of octets.
+
+@strong{GeneralString:} VALUE will contain the generalstring and LEN will
+be the number of octets.
+
+BIT STRING: VALUE will contain the bit string organized by bytes
+and LEN will be the number of bits.
+
+@strong{CHOICE:} If NAME indicates a choice type, VALUE will specify the
+alternative selected.
+
+@strong{ANY:} If NAME indicates an any type, VALUE will indicate the DER
+encoding of the structure actually used.
+
+@strong{Returns:} @code{ASN1_SUCCESS} if value is returned,
+@code{ASN1_ELEMENT_NOT_FOUND} if @code{name} is not a valid element,
+@code{ASN1_VALUE_NOT_FOUND} if there isn't any value for the element
+selected, and @code{ASN1_MEM_ERROR} if The value vector isn't big enough
+to store the result, and in this case @code{len} will contain the number of
+bytes needed.
+@end deftypefun
+
+@subheading asn1_read_tag
+@anchor{asn1_read_tag}
+@deftypefun {int} {asn1_read_tag} (asn1_node @var{root}, const char * @var{name}, int * @var{tagValue}, int * @var{classValue})
+@var{root}: pointer to a structure
+
+@var{name}: the name of the element inside a structure.
+
+@var{tagValue}: variable that will contain the TAG value.
+
+@var{classValue}: variable that will specify the TAG type.
+
+Returns the TAG and the CLASS of one element inside a structure.
+CLASS can have one of these constants: @code{ASN1_CLASS_APPLICATION} ,
+@code{ASN1_CLASS_UNIVERSAL} , @code{ASN1_CLASS_PRIVATE} or
+@code{ASN1_CLASS_CONTEXT_SPECIFIC} .
+
+@strong{Returns:} @code{ASN1_SUCCESS} if successful, @code{ASN1_ELEMENT_NOT_FOUND} if
+ @code{name} is not a valid element.
+@end deftypefun
+
+@subheading asn1_read_node_value
+@anchor{asn1_read_node_value}
+@deftypefun {int} {asn1_read_node_value} (asn1_node @var{node}, asn1_data_node_st * @var{data})
+@var{node}: pointer to a node.
+
+@var{data}: a point to a asn1_data_node_st
+
+Returns the value a data node inside a asn1_node structure.
+The data returned should be handled as constant values.
+
+@strong{Returns:} @code{ASN1_SUCCESS} if the node exists.
+@end deftypefun
+