PageRenderTime 39ms CodeModel.GetById 34ms app.highlight 2ms RepoModel.GetById 1ms app.codeStats 0ms

/gecko_api/include/secdert.h

http://firefox-mac-pdf.googlecode.com/
C++ Header | 163 lines | 51 code | 17 blank | 95 comment | 0 complexity | 9cc0fced0ab70fe1f7a99486783f80ca MD5 | raw file
  1/* ***** BEGIN LICENSE BLOCK *****
  2 * Version: MPL 1.1/GPL 2.0/LGPL 2.1
  3 *
  4 * The contents of this file are subject to the Mozilla Public License Version
  5 * 1.1 (the "License"); you may not use this file except in compliance with
  6 * the License. You may obtain a copy of the License at
  7 * http://www.mozilla.org/MPL/
  8 *
  9 * Software distributed under the License is distributed on an "AS IS" basis,
 10 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
 11 * for the specific language governing rights and limitations under the
 12 * License.
 13 *
 14 * The Original Code is the Netscape security libraries.
 15 *
 16 * The Initial Developer of the Original Code is
 17 * Netscape Communications Corporation.
 18 * Portions created by the Initial Developer are Copyright (C) 1994-2000
 19 * the Initial Developer. All Rights Reserved.
 20 *
 21 * Contributor(s):
 22 *
 23 * Alternatively, the contents of this file may be used under the terms of
 24 * either the GNU General Public License Version 2 or later (the "GPL"), or
 25 * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
 26 * in which case the provisions of the GPL or the LGPL are applicable instead
 27 * of those above. If you wish to allow use of your version of this file only
 28 * under the terms of either the GPL or the LGPL, and not to allow others to
 29 * use your version of this file under the terms of the MPL, indicate your
 30 * decision by deleting the provisions above and replace them with the notice
 31 * and other provisions required by the GPL or the LGPL. If you do not delete
 32 * the provisions above, a recipient may use your version of this file under
 33 * the terms of any one of the MPL, the GPL or the LGPL.
 34 *
 35 * ***** END LICENSE BLOCK ***** */
 36
 37#ifndef _SECDERT_H_
 38#define _SECDERT_H_
 39/*
 40 * secdert.h - public data structures for the DER encoding and
 41 *	       decoding utilities library
 42 *
 43 * $Id: secdert.h,v 1.5 2007/10/12 01:44:51 julien.pierre.boogz%sun.com Exp $
 44 */
 45
 46#include "utilrename.h"
 47#include "seccomon.h"
 48
 49typedef struct DERTemplateStr DERTemplate;
 50
 51/*
 52** An array of these structures defines an encoding for an object using DER.
 53** The array usually starts with a dummy entry whose kind is DER_SEQUENCE;
 54** such an array is terminated with an entry where kind == 0.  (An array
 55** which consists of a single component does not require a second dummy
 56** entry -- the array is only searched as long as previous component(s)
 57** instruct it.)
 58*/
 59struct DERTemplateStr {
 60    /*
 61    ** Kind of item being decoded/encoded, including tags and modifiers.
 62    */
 63    unsigned long kind;
 64
 65    /*
 66    ** Offset from base of structure to field that holds the value
 67    ** being decoded/encoded.
 68    */
 69    unsigned int offset;
 70
 71    /*
 72    ** When kind suggests it (DER_POINTER, DER_INDEFINITE, DER_INLINE),
 73    ** this points to a sub-template for nested encoding/decoding.
 74    */
 75    DERTemplate *sub;
 76
 77    /*
 78    ** Argument value, dependent on "kind" and/or template placement
 79    ** within an array of templates:
 80    **	- In the first element of a template array, the value is the
 81    **	  size of the structure to allocate when this template is being
 82    **	  referenced by another template via DER_POINTER or DER_INDEFINITE.
 83    **  - In a component of a DER_SET or DER_SEQUENCE which is *not* a
 84    **	  DER_UNIVERSAL type (that is, it has a class tag for either
 85    **	  DER_APPLICATION, DER_CONTEXT_SPECIFIC, or DER_PRIVATE), the
 86    **	  value is the underlying type of item being decoded/encoded.
 87    */
 88    unsigned long arg;
 89};
 90
 91/************************************************************************/
 92
 93/* default chunksize for arenas used for DER stuff */
 94#define DER_DEFAULT_CHUNKSIZE (2048)
 95
 96/*
 97** BER/DER values for ASN.1 identifier octets.
 98*/
 99#define DER_TAG_MASK		0xff
100
101/*
102 * BER/DER universal type tag numbers.
103 * The values are defined by the X.208 standard; do not change them!
104 * NOTE: if you add anything to this list, you must add code to derdec.c
105 * to accept the tag, and probably also to derenc.c to encode it.
106 */
107#define DER_TAGNUM_MASK		0x1f
108#define DER_BOOLEAN		0x01
109#define DER_INTEGER		0x02
110#define DER_BIT_STRING		0x03
111#define DER_OCTET_STRING	0x04
112#define DER_NULL		0x05
113#define DER_OBJECT_ID		0x06
114#define DER_SEQUENCE		0x10
115#define DER_SET			0x11
116#define DER_PRINTABLE_STRING	0x13
117#define DER_T61_STRING		0x14
118#define DER_IA5_STRING		0x16
119#define DER_UTC_TIME		0x17
120#define DER_VISIBLE_STRING	0x1a
121#define DER_HIGH_TAG_NUMBER	0x1f
122
123/*
124** Modifiers to type tags.  These are also specified by a/the
125** standard, and must not be changed.
126*/
127
128#define DER_METHOD_MASK		0x20
129#define DER_PRIMITIVE		0x00
130#define DER_CONSTRUCTED		0x20
131
132#define DER_CLASS_MASK		0xc0
133#define DER_UNIVERSAL		0x00
134#define DER_APPLICATION		0x40
135#define DER_CONTEXT_SPECIFIC	0x80
136#define DER_PRIVATE		0xc0
137
138/*
139** Our additions, used for templates.
140** These are not defined by any standard; the values are used internally only.
141** Just be careful to keep them out of the low 8 bits.
142*/
143#define DER_OPTIONAL		0x00100
144#define DER_EXPLICIT		0x00200
145#define DER_ANY			0x00400
146#define DER_INLINE		0x00800
147#define DER_POINTER		0x01000
148#define DER_INDEFINITE		0x02000
149#define DER_DERPTR		0x04000
150#define DER_SKIP		0x08000
151#define DER_FORCE		0x10000
152#define DER_OUTER		0x40000 /* for DER_DERPTR */
153
154/*
155** Macro to convert der decoded bit string into a decoded octet
156** string. All it needs to do is fiddle with the length code.
157*/
158#define DER_ConvertBitString(item)	  \
159{					  \
160    (item)->len = ((item)->len + 7) >> 3; \
161}
162
163#endif /* _SECDERT_H_ */