#ifndef _SECASN1_H_
#define _SECASN1_H_
#include <security_asn1/plarenas.h>
#include <security_asn1/seccomon.h>
#include <Security/secasn1t.h>
#include <Security/asn1Templates.h>
SEC_BEGIN_PROTOS
extern SEC_ASN1DecoderContext *SEC_ASN1DecoderStart(PRArenaPool *pool,
void *dest,
const SecAsn1Template *t,
const char *buf);
extern SECStatus SEC_ASN1DecoderUpdate(SEC_ASN1DecoderContext *cx,
const char *buf,
unsigned long len);
extern SECStatus SEC_ASN1DecoderFinish(SEC_ASN1DecoderContext *cx);
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 SecAsn1Template *t,
const char *buf, unsigned long len);
extern SECStatus SEC_ASN1DecodeItem(PRArenaPool *pool, void *dest,
const SecAsn1Template *t,
const SECItem *item);
extern SECStatus SEC_QuickDERDecodeItem(PRArenaPool* arena, void* dest,
const SecAsn1Template* templateEntry,
SECItem* src);
extern SEC_ASN1EncoderContext *SEC_ASN1EncoderStart(const void *src,
const SecAsn1Template *t,
SEC_ASN1WriteProc fn,
void *output_arg);
extern SECStatus SEC_ASN1EncoderUpdate(SEC_ASN1EncoderContext *cx,
const char *buf,
unsigned long len);
extern void SEC_ASN1EncoderFinish(SEC_ASN1EncoderContext *cx);
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 SecAsn1Template *t,
SEC_ASN1WriteProc output_proc,
void *output_arg);
extern SECItem * SEC_ASN1EncodeItem(PRArenaPool *pool, SECItem *dest,
const void *src, const SecAsn1Template *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);
extern int SEC_ASN1LengthLength (unsigned long len);
extern int SEC_ASN1EncodeLength(unsigned char *buf,int value);
extern const SecAsn1Template *
SEC_ASN1GetSubtemplate (
const SecAsn1Template *inTemplate,
void *thing,
PRBool encoding,
const char *buf);
extern SECItem *sec_asn1e_allocate_item (
PRArenaPool *poolp,
SECItem *dest,
unsigned long len);
extern void sec_asn1e_encode_item_count (
void *arg,
const char *buf,
unsigned long len,
int depth,
SEC_ASN1EncodingPart data_kind);
extern void sec_asn1e_encode_item_store (
void *arg,
const char *buf,
unsigned long len,
int depth,
SEC_ASN1EncodingPart data_kind);
SEC_END_PROTOS
#endif