/gecko_api/include/secdert.h
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_ */