Main Page | Data Structures | File List | Data Fields | Globals

libnet-asn1.h

00001 /*
00002  *  $Id: libnet-asn1_8h-source.html,v 1.1.1.1 2012/02/21 22:14:23 misho Exp $
00003  *
00004  *  libnet-asn1.h - Network routine library ASN.1 header file
00005  *
00006  *  Copyright (c) 1998 - 2004 Mike D. Schiffman <mike@infonexus.com>
00007  *  All rights reserved.
00008  *
00009  *  Definitions for Abstract Syntax Notation One, ASN.1
00010  *  As defined in ISO/IS 8824 and ISO/IS 8825
00011  *
00012  *  Copyright 1988, 1989 by Carnegie Mellon University
00013  *  All rights reserved.
00014  *
00015  *  Permission to use, copy, modify, and distribute this software and its
00016  *  documentation for any purpose and without fee is hereby granted,
00017  *  provided that the above copyright notice appear in all copies and that
00018  *  both that copyright notice and this permission notice appear in
00019  *  supporting documentation, and that the name of CMU not be
00020  *  used in advertising or publicity pertaining to distribution of the
00021  *  software without specific, written prior permission.
00022  *
00023  *  CMU DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
00024  *  ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
00025  *  CMU BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
00026  *  ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
00027  *  WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
00028  *  ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
00029  *  SOFTWARE.
00030  *
00031  *  Copyright (c) 1998 - 2001 Mike D. Schiffman <mike@infonexus.com>
00032  *  All rights reserved.
00033  *
00034  * Redistribution and use in source and binary forms, with or without
00035  * modification, are permitted provided that the following conditions
00036  * are met:
00037  * 1. Redistributions of source code must retain the above copyright
00038  *    notice, this list of conditions and the following disclaimer.
00039  * 2. Redistributions in binary form must reproduce the above copyright
00040  *    notice, this list of conditions and the following disclaimer in the
00041  *    documentation and/or other materials provided with the distribution.
00042  *
00043  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
00044  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00045  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
00046  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
00047  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
00048  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
00049  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
00050  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
00051  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
00052  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
00053  * SUCH DAMAGE.
00054  */
00055 
00056 #ifndef __LIBNET_ASN1_H
00057 #define __LIBNET_ASN1_H
00058 
00059 #ifndef EIGHTBIT_SUBIDS
00060 typedef u_int32_t  oid;
00061 #define MAX_SUBID   0xFFFFFFFF
00062 #else
00063 typedef u_int8_t  oid;
00064 #define MAX_SUBID   0xFF
00065 #endif
00066 
00067 #define MAX_OID_LEN         64  /* max subid's in an oid */
00068 
00069 #define ASN_BOOLEAN         (0x01)
00070 #define ASN_INTEGER         (0x02)
00071 #define ASN_BIT_STR         (0x03)
00072 #define ASN_OCTET_STR       (0x04)
00073 #define ASN_NULL            (0x05)
00074 #define ASN_OBJECT_ID       (0x06)
00075 #define ASN_SEQUENCE        (0x10)
00076 #define ASN_SET             (0x11)
00077 
00078 #define ASN_UNIVERSAL       (0x00)
00079 #define ASN_APPLICATION     (0x40)
00080 #define ASN_CONTEXT         (0x80)
00081 #define ASN_PRIVATE         (0xC0)
00082 
00083 #define ASN_PRIMITIVE       (0x00)
00084 #define ASN_CONSTRUCTOR     (0x20)
00085 
00086 #define ASN_LONG_LEN        (0x80)
00087 #define ASN_EXTENSION_ID    (0x1F)
00088 #define ASN_BIT8            (0x80)
00089 
00090 #define IS_CONSTRUCTOR(byte)  ((byte) & ASN_CONSTRUCTOR)
00091 #define IS_EXTENSION_ID(byte) (((byte) & ASN_EXTENSION_ID) = ASN_EXTENSION_ID)
00092 
00093 /*
00094  *  All of the build_asn1_* (build_asn1_length being an exception) functions
00095  *  take the same first 3 arguments:
00096  *
00097  *  u_int8_t *data:   This is a pointer to the start of the data object to be
00098  *                  manipulated.
00099  *  int *datalen:   This is a pointer to the number of valid bytes following
00100  *                  "data".  This should be not be exceeded in any function.
00101  *                  Upon exiting a function, this value will reflect the
00102  *                  changed "data" and then refer to the new number of valid
00103  *                  bytes until the end of "data".
00104  *  u_int8_t type:    The ASN.1 object type.
00105  */
00106 
00107 
00108 /*
00109  *  Builds an ASN object containing an integer.
00110  *
00111  *  Returns NULL upon error or a pointer to the first byte past the end of
00112  *  this object (the start of the next object).
00113  */
00114 
00115 u_int8_t *
00116 libnet_build_asn1_int(
00117     u_int8_t *,           /* Pointer to the output buffer */
00118     int *,              /* Number of valid bytes left in the buffer */
00119     u_int8_t,             /* ASN object type */
00120     int32_t *,             /* Pointer to a int32_t integer */
00121     int                 /* Size of a int32_t integer */
00122     );
00123 
00124 
00125 /*
00126  *  Builds an ASN object containing an unsigned integer.
00127  *
00128  *  Returns NULL upon error or a pointer to the first byte past the end of
00129  *  this object (the start of the next object).
00130  */
00131 
00132 u_int8_t *
00133 libnet_build_asn1_uint(
00134     u_int8_t *,           /* Pointer to the output buffer */
00135     int *,              /* Number of valid bytes left in the buffer */
00136     u_int8_t,             /* ASN object type */
00137     u_int32_t *,           /* Pointer to an unsigned int32_t integer */
00138     int                 /* Size of a int32_t integer */
00139     );
00140 
00141 
00142 /*
00143  *  Builds an ASN object containing an octect string.
00144  *
00145  *  Returns NULL upon error or a pointer to the first byte past the end of
00146  *  this object (the start of the next object).
00147  */
00148 
00149 u_int8_t *
00150 libnet_build_asn1_string(
00151     u_int8_t *,           /* Pointer to the output buffer */
00152     int *,              /* Number of valid bytes left in the buffer */
00153     u_int8_t,             /* ASN object type */
00154     u_int8_t *,           /* Pointer to a string to be built into an object */
00155     int                 /* Size of the string */
00156     );
00157 
00158 
00159 /*
00160  *  Builds an ASN header for an object with the ID and length specified.  This
00161  *  only works on data types < 30, i.e. no extension octets.  The maximum
00162  *  length is 0xFFFF;
00163  *
00164  *  Returns a pointer to the first byte of the contents of this object or
00165  *  NULL upon error
00166  */
00167 
00168 u_int8_t *
00169 libnet_build_asn1_header(
00170     u_int8_t *,       /* Pointer to the start of the object */
00171     int *,          /* Number of valid bytes left in buffer */
00172     u_int8_t,         /* ASN object type */
00173     int             /* ASN object length */
00174     );
00175 
00176 
00177 u_int8_t *
00178 libnet_build_asn1_length(
00179     u_int8_t *,       /* Pointer to start of object */
00180     int *,          /* Number of valid bytes in buffer */
00181     int             /* Length of object */
00182     );
00183 
00184 
00185 /*
00186  *  Builds an ASN header for a sequence with the ID and length specified.
00187  *
00188  *  This only works on data types < 30, i.e. no extension octets.
00189  *  The maximum length is 0xFFFF;
00190  *
00191  *  Returns a pointer to the first byte of the contents of this object.
00192  *  Returns NULL on any error.
00193  */
00194 
00195 u_int8_t *
00196 libnet_build_asn1_sequence(
00197     u_int8_t *,
00198     int *,
00199     u_int8_t,
00200     int
00201     );
00202 
00203 
00204 /*
00205  *  Builds an ASN object identifier object containing the input string.
00206  *
00207  *  Returns NULL upon error or a pointer to the first byte past the end of
00208  *  this object (the start of the next object).
00209  */
00210 
00211 u_int8_t *
00212 libnet_build_asn1_objid(
00213     u_int8_t *,
00214     int *,
00215     u_int8_t,
00216     oid *,
00217     int
00218     );
00219 
00220 
00221 /*
00222  *  Builds an ASN null object.
00223  *
00224  *  Returns NULL upon error or a pointer to the first byte past the end of
00225  *  this object (the start of the next object).
00226  */
00227 
00228 u_int8_t *
00229 libnet_build_asn1_null(
00230     u_int8_t *,
00231     int *,
00232     u_int8_t
00233     );
00234 
00235 
00236 /*
00237  *  Builds an ASN bitstring.
00238  *
00239  *  Returns NULL upon error or a pointer to the first byte past the end of
00240  *  this object (the start of the next object).
00241  */
00242 
00243 u_int8_t *
00244 libnet_build_asn1_bitstring(
00245     u_int8_t *,
00246     int *,
00247     u_int8_t,
00248     u_int8_t *,       /* Pointer to the input buffer */
00249     int             /* Length of the input buffer */
00250     );
00251 
00252 
00253 #endif  /* __LIBNET_ASN1_H */
00254 
00255 /* EOF */

Generated on Wed Mar 10 13:23:37 2004 for libnet by doxygen 1.3.4