/gecko_api/include/secasn1.h
http://firefox-mac-pdf.googlecode.com/ · C Header · 320 lines · 164 code · 54 blank · 102 comment · 0 complexity · 6770eb3f013a38ea412c017879100a9b MD5 · raw file
- /* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- * http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is the Netscape security libraries.
- *
- * The Initial Developer of the Original Code is
- * Netscape Communications Corporation.
- * Portions created by the Initial Developer are Copyright (C) 1994-2000
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
- /*
- * Support for encoding/decoding of ASN.1 using BER/DER (Basic/Distinguished
- * Encoding Rules). The routines are found in and used extensively by the
- * security library, but exported for other use.
- *
- * $Id: secasn1.h,v 1.15 2007/10/12 01:44:51 julien.pierre.boogz%sun.com Exp $
- */
- #ifndef _SECASN1_H_
- #define _SECASN1_H_
- #include "utilrename.h"
- #include "plarena.h"
- #include "seccomon.h"
- #include "secasn1t.h"
- /************************************************************************/
- SEC_BEGIN_PROTOS
- /*
- * XXX These function prototypes need full, explanatory comments.
- */
- /*
- ** Decoding.
- */
- extern SEC_ASN1DecoderContext *SEC_ASN1DecoderStart(PRArenaPool *pool,
- void *dest,
- const SEC_ASN1Template *t);
- /* XXX char or unsigned char? */
- extern SECStatus SEC_ASN1DecoderUpdate(SEC_ASN1DecoderContext *cx,
- const char *buf,
- unsigned long len);
- extern SECStatus SEC_ASN1DecoderFinish(SEC_ASN1DecoderContext *cx);
- /* Higher level code detected an error, abort the rest of the processing */
- extern void SEC_ASN1DecoderAbort(SEC_ASN1DecoderContext *cx, int error);
- extern void SEC_ASN1DecoderSetFilterProc(SEC_ASN1DecoderContext *cx,
- SEC_ASN1WriteProc fn,
- void *arg, PRBool no_store);
- extern void SEC_ASN1DecoderClearFilterProc(SEC_ASN1DecoderContext *cx);
- extern void SEC_ASN1DecoderSetNotifyProc(SEC_ASN1DecoderContext *cx,
- SEC_ASN1NotifyProc fn,
- void *arg);
- extern void SEC_ASN1DecoderClearNotifyProc(SEC_ASN1DecoderContext *cx);
- extern SECStatus SEC_ASN1Decode(PRArenaPool *pool, void *dest,
- const SEC_ASN1Template *t,
- const char *buf, long len);
- /* Both classic ASN.1 and QuickDER have a feature that removes leading zeroes
- out of SEC_ASN1_INTEGER if the caller sets siUnsignedInteger in the type
- field of the target SECItem prior to calling the decoder. Otherwise, the
- type field is ignored and untouched. For SECItem that are dynamically
- allocated (from POINTER, SET OF, SEQUENCE OF) the decoder sets the type
- field to siBuffer. */
- extern SECStatus SEC_ASN1DecodeItem(PRArenaPool *pool, void *dest,
- const SEC_ASN1Template *t,
- const SECItem *src);
- extern SECStatus SEC_QuickDERDecodeItem(PRArenaPool* arena, void* dest,
- const SEC_ASN1Template* templateEntry,
- const SECItem* src);
- /*
- ** Encoding.
- */
- extern SEC_ASN1EncoderContext *SEC_ASN1EncoderStart(const void *src,
- const SEC_ASN1Template *t,
- SEC_ASN1WriteProc fn,
- void *output_arg);
- /* XXX char or unsigned char? */
- extern SECStatus SEC_ASN1EncoderUpdate(SEC_ASN1EncoderContext *cx,
- const char *buf,
- unsigned long len);
- extern void SEC_ASN1EncoderFinish(SEC_ASN1EncoderContext *cx);
- /* Higher level code detected an error, abort the rest of the processing */
- extern void SEC_ASN1EncoderAbort(SEC_ASN1EncoderContext *cx, int error);
- extern void SEC_ASN1EncoderSetNotifyProc(SEC_ASN1EncoderContext *cx,
- SEC_ASN1NotifyProc fn,
- void *arg);
- extern void SEC_ASN1EncoderClearNotifyProc(SEC_ASN1EncoderContext *cx);
- extern void SEC_ASN1EncoderSetStreaming(SEC_ASN1EncoderContext *cx);
- extern void SEC_ASN1EncoderClearStreaming(SEC_ASN1EncoderContext *cx);
- extern void sec_ASN1EncoderSetDER(SEC_ASN1EncoderContext *cx);
- extern void sec_ASN1EncoderClearDER(SEC_ASN1EncoderContext *cx);
- extern void SEC_ASN1EncoderSetTakeFromBuf(SEC_ASN1EncoderContext *cx);
- extern void SEC_ASN1EncoderClearTakeFromBuf(SEC_ASN1EncoderContext *cx);
- extern SECStatus SEC_ASN1Encode(const void *src, const SEC_ASN1Template *t,
- SEC_ASN1WriteProc output_proc,
- void *output_arg);
- extern SECItem * SEC_ASN1EncodeItem(PRArenaPool *pool, SECItem *dest,
- const void *src, const SEC_ASN1Template *t);
- extern SECItem * SEC_ASN1EncodeInteger(PRArenaPool *pool,
- SECItem *dest, long value);
- extern SECItem * SEC_ASN1EncodeUnsignedInteger(PRArenaPool *pool,
- SECItem *dest,
- unsigned long value);
- extern SECStatus SEC_ASN1DecodeInteger(SECItem *src,
- unsigned long *value);
- /*
- ** Utilities.
- */
- /*
- * We have a length that needs to be encoded; how many bytes will the
- * encoding take?
- */
- extern int SEC_ASN1LengthLength (unsigned long len);
- /* encode the length and return the number of bytes we encoded. Buffer
- * must be pre allocated */
- extern int SEC_ASN1EncodeLength(unsigned char *buf,int value);
- /*
- * Find the appropriate subtemplate for the given template.
- * This may involve calling a "chooser" function, or it may just
- * be right there. In either case, it is expected to *have* a
- * subtemplate; this is asserted in debug builds (in non-debug
- * builds, NULL will be returned).
- *
- * "thing" is a pointer to the structure being encoded/decoded
- * "encoding", when true, means that we are in the process of encoding
- * (as opposed to in the process of decoding)
- */
- extern const SEC_ASN1Template *
- SEC_ASN1GetSubtemplate (const SEC_ASN1Template *inTemplate, void *thing,
- PRBool encoding);
- /* whether the template is for a primitive type or a choice of
- * primitive types
- */
- extern PRBool SEC_ASN1IsTemplateSimple(const SEC_ASN1Template *theTemplate);
- /************************************************************************/
- /*
- * Generic Templates
- * One for each of the simple types, plus a special one for ANY, plus:
- * - a pointer to each one of those
- * - a set of each one of those
- * - a sequence of each one of those
- *
- * Note that these are alphabetical (case insensitive); please add new
- * ones in the appropriate place.
- */
- extern const SEC_ASN1Template SEC_AnyTemplate[];
- extern const SEC_ASN1Template SEC_BitStringTemplate[];
- extern const SEC_ASN1Template SEC_BMPStringTemplate[];
- extern const SEC_ASN1Template SEC_BooleanTemplate[];
- extern const SEC_ASN1Template SEC_EnumeratedTemplate[];
- extern const SEC_ASN1Template SEC_GeneralizedTimeTemplate[];
- extern const SEC_ASN1Template SEC_IA5StringTemplate[];
- extern const SEC_ASN1Template SEC_IntegerTemplate[];
- extern const SEC_ASN1Template SEC_NullTemplate[];
- extern const SEC_ASN1Template SEC_ObjectIDTemplate[];
- extern const SEC_ASN1Template SEC_OctetStringTemplate[];
- extern const SEC_ASN1Template SEC_PrintableStringTemplate[];
- extern const SEC_ASN1Template SEC_T61StringTemplate[];
- extern const SEC_ASN1Template SEC_UniversalStringTemplate[];
- extern const SEC_ASN1Template SEC_UTCTimeTemplate[];
- extern const SEC_ASN1Template SEC_UTF8StringTemplate[];
- extern const SEC_ASN1Template SEC_VisibleStringTemplate[];
- extern const SEC_ASN1Template SEC_PointerToAnyTemplate[];
- extern const SEC_ASN1Template SEC_PointerToBitStringTemplate[];
- extern const SEC_ASN1Template SEC_PointerToBMPStringTemplate[];
- extern const SEC_ASN1Template SEC_PointerToBooleanTemplate[];
- extern const SEC_ASN1Template SEC_PointerToEnumeratedTemplate[];
- extern const SEC_ASN1Template SEC_PointerToGeneralizedTimeTemplate[];
- extern const SEC_ASN1Template SEC_PointerToIA5StringTemplate[];
- extern const SEC_ASN1Template SEC_PointerToIntegerTemplate[];
- extern const SEC_ASN1Template SEC_PointerToNullTemplate[];
- extern const SEC_ASN1Template SEC_PointerToObjectIDTemplate[];
- extern const SEC_ASN1Template SEC_PointerToOctetStringTemplate[];
- extern const SEC_ASN1Template SEC_PointerToPrintableStringTemplate[];
- extern const SEC_ASN1Template SEC_PointerToT61StringTemplate[];
- extern const SEC_ASN1Template SEC_PointerToUniversalStringTemplate[];
- extern const SEC_ASN1Template SEC_PointerToUTCTimeTemplate[];
- extern const SEC_ASN1Template SEC_PointerToUTF8StringTemplate[];
- extern const SEC_ASN1Template SEC_PointerToVisibleStringTemplate[];
- extern const SEC_ASN1Template SEC_SequenceOfAnyTemplate[];
- extern const SEC_ASN1Template SEC_SequenceOfBitStringTemplate[];
- extern const SEC_ASN1Template SEC_SequenceOfBMPStringTemplate[];
- extern const SEC_ASN1Template SEC_SequenceOfBooleanTemplate[];
- extern const SEC_ASN1Template SEC_SequenceOfEnumeratedTemplate[];
- extern const SEC_ASN1Template SEC_SequenceOfGeneralizedTimeTemplate[];
- extern const SEC_ASN1Template SEC_SequenceOfIA5StringTemplate[];
- extern const SEC_ASN1Template SEC_SequenceOfIntegerTemplate[];
- extern const SEC_ASN1Template SEC_SequenceOfNullTemplate[];
- extern const SEC_ASN1Template SEC_SequenceOfObjectIDTemplate[];
- extern const SEC_ASN1Template SEC_SequenceOfOctetStringTemplate[];
- extern const SEC_ASN1Template SEC_SequenceOfPrintableStringTemplate[];
- extern const SEC_ASN1Template SEC_SequenceOfT61StringTemplate[];
- extern const SEC_ASN1Template SEC_SequenceOfUniversalStringTemplate[];
- extern const SEC_ASN1Template SEC_SequenceOfUTCTimeTemplate[];
- extern const SEC_ASN1Template SEC_SequenceOfUTF8StringTemplate[];
- extern const SEC_ASN1Template SEC_SequenceOfVisibleStringTemplate[];
- extern const SEC_ASN1Template SEC_SetOfAnyTemplate[];
- extern const SEC_ASN1Template SEC_SetOfBitStringTemplate[];
- extern const SEC_ASN1Template SEC_SetOfBMPStringTemplate[];
- extern const SEC_ASN1Template SEC_SetOfBooleanTemplate[];
- extern const SEC_ASN1Template SEC_SetOfEnumeratedTemplate[];
- extern const SEC_ASN1Template SEC_SetOfGeneralizedTimeTemplate[];
- extern const SEC_ASN1Template SEC_SetOfIA5StringTemplate[];
- extern const SEC_ASN1Template SEC_SetOfIntegerTemplate[];
- extern const SEC_ASN1Template SEC_SetOfNullTemplate[];
- extern const SEC_ASN1Template SEC_SetOfObjectIDTemplate[];
- extern const SEC_ASN1Template SEC_SetOfOctetStringTemplate[];
- extern const SEC_ASN1Template SEC_SetOfPrintableStringTemplate[];
- extern const SEC_ASN1Template SEC_SetOfT61StringTemplate[];
- extern const SEC_ASN1Template SEC_SetOfUniversalStringTemplate[];
- extern const SEC_ASN1Template SEC_SetOfUTCTimeTemplate[];
- extern const SEC_ASN1Template SEC_SetOfUTF8StringTemplate[];
- extern const SEC_ASN1Template SEC_SetOfVisibleStringTemplate[];
- /*
- * Template for skipping a subitem; this only makes sense when decoding.
- */
- extern const SEC_ASN1Template SEC_SkipTemplate[];
- /* These functions simply return the address of the above-declared templates.
- ** This is necessary for Windows DLLs. Sigh.
- */
- SEC_ASN1_CHOOSER_DECLARE(SEC_AnyTemplate)
- SEC_ASN1_CHOOSER_DECLARE(SEC_BMPStringTemplate)
- SEC_ASN1_CHOOSER_DECLARE(SEC_BooleanTemplate)
- SEC_ASN1_CHOOSER_DECLARE(SEC_BitStringTemplate)
- SEC_ASN1_CHOOSER_DECLARE(SEC_GeneralizedTimeTemplate)
- SEC_ASN1_CHOOSER_DECLARE(SEC_IA5StringTemplate)
- SEC_ASN1_CHOOSER_DECLARE(SEC_IntegerTemplate)
- SEC_ASN1_CHOOSER_DECLARE(SEC_NullTemplate)
- SEC_ASN1_CHOOSER_DECLARE(SEC_ObjectIDTemplate)
- SEC_ASN1_CHOOSER_DECLARE(SEC_OctetStringTemplate)
- SEC_ASN1_CHOOSER_DECLARE(SEC_UTCTimeTemplate)
- SEC_ASN1_CHOOSER_DECLARE(SEC_UTF8StringTemplate)
- SEC_ASN1_CHOOSER_DECLARE(SEC_PointerToAnyTemplate)
- SEC_ASN1_CHOOSER_DECLARE(SEC_PointerToOctetStringTemplate)
- SEC_ASN1_CHOOSER_DECLARE(SEC_SetOfAnyTemplate)
- SEC_ASN1_CHOOSER_DECLARE(SEC_EnumeratedTemplate)
- SEC_ASN1_CHOOSER_DECLARE(SEC_PointerToEnumeratedTemplate)
- SEC_ASN1_CHOOSER_DECLARE(SEC_SequenceOfAnyTemplate)
- SEC_ASN1_CHOOSER_DECLARE(SEC_SequenceOfObjectIDTemplate)
- SEC_ASN1_CHOOSER_DECLARE(SEC_SkipTemplate)
- SEC_ASN1_CHOOSER_DECLARE(SEC_UniversalStringTemplate)
- SEC_ASN1_CHOOSER_DECLARE(SEC_PrintableStringTemplate)
- SEC_ASN1_CHOOSER_DECLARE(SEC_T61StringTemplate)
- SEC_ASN1_CHOOSER_DECLARE(SEC_PointerToGeneralizedTimeTemplate)
- SEC_END_PROTOS
- #endif /* _SECASN1_H_ */