This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

gcc-3.0.1 generates invalid assembler (undefined label) on sparc

[Get raw message]
I tried compiling mozilla on sparc-linux, with
crypto-stuff enabled. Compilation crashed at the assembly stage, with
the message

{standard input}: Assembler messages:
{standard input}:696: Error: undefined symbol .LL280 in operation

I added -save-temps to the compilation flags to be able to look
further. The generated assembler file contains

	bgu	.LL289
	cmp	%l0, 0
	sethi	%hi(_GLOBAL_OFFSET_TABLE_-(.LL280-.)), %o0  ! [line 696]
	st	%i2, [%i0+12]
	call	SECOID_FindOIDByTag, 0

That is the only occurance of the label ".LL280" in the file. I'm
using a Sparc Station 4 running Debian GNU/Linux, and a gcc-3.0.1 I
compiled from source with no special configure flags a while back.
Version numbers:

  $ gcc --version
  3.0.1
  $ uname -a
  Linux cuckoo 2.2.19 #1 Mon Apr 2 13:29:46 EDT 2001 sparc unknown

Compilation command:

gcc -save-temps -c -O2 -fPIC -DLINUX1_2 -D_XOPEN_SOURCE -DLINUX2_1
-ansi -Wall -pipe -DLINUX -Dlinux -D_POSIX_SOURCE -D_BSD_SOURCE
-DHAVE_STRERROR -DXP_UNIX -UDEBUG -DNDEBUG -D_REENTRANT
-I/home/nisse/hack/mozilla/dist/include
-I../../../../dist/public/security -I../../../../dist/private/security
-I../../../../dist/include
-I/home/nisse/hack/mozilla/dist/include/nspr
-I/home/nisse/hack/mozilla/dist/include/dbm
-I../../../../dist/public/security -I../../../../dist/public/dbm
p12e.c

I append the preprocessed source file (which is rather big).

Regards,
/Niels

--------------8<---- p12e.i ---8<--------
# 34 "p12e.c"
# 1 "../../../../dist/private/security/nssrenam.h" 1
# 35 "p12e.c" 2
# 1 "p12t.h" 1
# 37 "p12t.h"
# 1 "../../../../dist/public/security/secoid.h" 1
# 42 "../../../../dist/public/security/secoid.h"
# 1 "/home/nisse/hack/mozilla/dist/include/nspr/plarena.h" 1
# 44 "/home/nisse/hack/mozilla/dist/include/nspr/plarena.h"
# 1 "/home/nisse/hack/mozilla/dist/include/nspr/prtypes.h" 1
# 55 "/home/nisse/hack/mozilla/dist/include/nspr/prtypes.h"
# 1 "/home/nisse/hack/mozilla/dist/include/nspr/prcpucfg.h" 1
# 56 "/home/nisse/hack/mozilla/dist/include/nspr/prtypes.h" 2


# 1 "/usr/local/lib/gcc-lib/sparc-unknown-linux-gnu/3.0.1/include/stddef.h" 1 3
# 147 "/usr/local/lib/gcc-lib/sparc-unknown-linux-gnu/3.0.1/include/stddef.h" 3
typedef int ptrdiff_t;
# 199 "/usr/local/lib/gcc-lib/sparc-unknown-linux-gnu/3.0.1/include/stddef.h" 3
typedef unsigned int size_t;
# 287 "/usr/local/lib/gcc-lib/sparc-unknown-linux-gnu/3.0.1/include/stddef.h" 3
typedef int wchar_t;
# 59 "/home/nisse/hack/mozilla/dist/include/nspr/prtypes.h" 2
# 260 "/home/nisse/hack/mozilla/dist/include/nspr/prtypes.h"
typedef unsigned char PRUint8;
# 274 "/home/nisse/hack/mozilla/dist/include/nspr/prtypes.h"
typedef signed char PRInt8;
# 287 "/home/nisse/hack/mozilla/dist/include/nspr/prtypes.h"
typedef unsigned short PRUint16;
typedef short PRInt16;
# 300 "/home/nisse/hack/mozilla/dist/include/nspr/prtypes.h"
typedef unsigned int PRUint32;
typedef int PRInt32;
# 334 "/home/nisse/hack/mozilla/dist/include/nspr/prtypes.h"
typedef long long PRInt64;
typedef unsigned long long PRUint64;
# 358 "/home/nisse/hack/mozilla/dist/include/nspr/prtypes.h"
typedef int PRIntn;
typedef unsigned int PRUintn;
# 369 "/home/nisse/hack/mozilla/dist/include/nspr/prtypes.h"
typedef double PRFloat64;






typedef size_t PRSize;







typedef PRInt32 PROffset32;
typedef PRInt64 PROffset64;







typedef ptrdiff_t PRPtrdiff;







typedef unsigned long PRUptrdiff;
# 411 "/home/nisse/hack/mozilla/dist/include/nspr/prtypes.h"
typedef PRIntn PRBool;
# 421 "/home/nisse/hack/mozilla/dist/include/nspr/prtypes.h"
typedef PRUint8 PRPackedBool;





typedef enum { PR_FAILURE = -1, PR_SUCCESS = 0 } PRStatus;
# 440 "/home/nisse/hack/mozilla/dist/include/nspr/prtypes.h"
typedef long PRWord;
typedef unsigned long PRUword;
# 482 "/home/nisse/hack/mozilla/dist/include/nspr/prtypes.h"
# 1 "/home/nisse/hack/mozilla/dist/include/nspr/obsolete/protypes.h" 1
# 45 "/home/nisse/hack/mozilla/dist/include/nspr/obsolete/protypes.h"
typedef PRUintn uintn;

typedef PRIntn intn;
# 83 "/home/nisse/hack/mozilla/dist/include/nspr/obsolete/protypes.h"
# 1 "/usr/include/sys/types.h" 1 3
# 26 "/usr/include/sys/types.h" 3
# 1 "/usr/include/features.h" 1 3
# 250 "/usr/include/features.h" 3
# 1 "/usr/include/sys/cdefs.h" 1 3
# 251 "/usr/include/features.h" 2 3
# 278 "/usr/include/features.h" 3
# 1 "/usr/include/gnu/stubs.h" 1 3
# 279 "/usr/include/features.h" 2 3
# 27 "/usr/include/sys/types.h" 2 3



# 1 "/usr/include/bits/types.h" 1 3
# 26 "/usr/include/bits/types.h" 3
# 1 "/usr/include/features.h" 1 3
# 27 "/usr/include/bits/types.h" 2 3


# 1 "/usr/local/lib/gcc-lib/sparc-unknown-linux-gnu/3.0.1/include/stddef.h" 1 3
# 30 "/usr/include/bits/types.h" 2 3
# 1 "/usr/include/bits/wordsize.h" 1 3
# 31 "/usr/include/bits/types.h" 2 3


typedef unsigned char __u_char;
typedef unsigned short int __u_short;
typedef unsigned int __u_int;
typedef unsigned long int __u_long;





__extension__ typedef unsigned long long int __u_quad_t;
__extension__ typedef long long int __quad_t;
# 55 "/usr/include/bits/types.h" 3
typedef signed char __int8_t;
typedef unsigned char __uint8_t;
typedef signed short int __int16_t;
typedef unsigned short int __uint16_t;
typedef signed int __int32_t;
typedef unsigned int __uint32_t;





__extension__ typedef signed long long int __int64_t;
__extension__ typedef unsigned long long int __uint64_t;


typedef __quad_t *__qaddr_t;

typedef __u_quad_t __dev_t;
typedef __u_int __uid_t;
typedef __u_int __gid_t;
typedef __u_long __ino_t;
typedef __u_long __ino64_t;
typedef __u_int __mode_t;
typedef __u_int __nlink_t;
typedef long int __off_t;
typedef __quad_t __off64_t;
typedef __quad_t __loff_t;
typedef int __pid_t;



typedef int __ssize_t;

typedef __u_long __rlim_t;
typedef __u_quad_t __rlim64_t;
typedef __u_int __id_t;

typedef struct
  {
    int __val[2];
  } __fsid_t;


typedef int __daddr_t;
typedef char *__caddr_t;
typedef long int __time_t;
typedef long int __swblk_t;

typedef long int __clock_t;


typedef unsigned long int __fd_mask;
# 122 "/usr/include/bits/types.h" 3
typedef struct
  {



    __fd_mask fds_bits[1024 / (8 * sizeof (__fd_mask))];





  } __fd_set;


typedef int __key_t;





typedef unsigned short int __ipc_pid_t;






typedef long int __blkcnt_t;
typedef __quad_t __blkcnt64_t;


typedef __u_long __fsblkcnt_t;
typedef __u_quad_t __fsblkcnt64_t;


typedef unsigned long int __fsfilcnt_t;
typedef __u_quad_t __fsfilcnt64_t;


typedef long int __t_scalar_t;
typedef unsigned long int __t_uscalar_t;





typedef int __intptr_t;
# 31 "/usr/include/sys/types.h" 2 3


typedef __u_char u_char;
typedef __u_short u_short;
typedef __u_int u_int;
typedef __u_long u_long;
typedef __quad_t quad_t;
typedef __u_quad_t u_quad_t;
typedef __fsid_t fsid_t;


typedef __loff_t loff_t;



typedef __ino_t ino_t;
# 58 "/usr/include/sys/types.h" 3
typedef __dev_t dev_t;




typedef __gid_t gid_t;




typedef __mode_t mode_t;




typedef __nlink_t nlink_t;




typedef __uid_t uid_t;





typedef __off_t off_t;
# 96 "/usr/include/sys/types.h" 3
typedef __pid_t pid_t;




typedef __id_t id_t;



typedef __ssize_t ssize_t;




typedef __daddr_t daddr_t;
typedef __caddr_t caddr_t;



typedef __key_t key_t;






# 1 "/usr/include/time.h" 1 3
# 57 "/usr/include/time.h" 3
# 1 "/usr/include/bits/types.h" 1 3
# 58 "/usr/include/time.h" 2 3


typedef __clock_t clock_t;







# 1 "/usr/include/bits/types.h" 1 3
# 69 "/usr/include/time.h" 2 3


typedef __time_t time_t;
# 123 "/usr/include/sys/types.h" 2 3


# 1 "/usr/local/lib/gcc-lib/sparc-unknown-linux-gnu/3.0.1/include/stddef.h" 1 3
# 126 "/usr/include/sys/types.h" 2 3



typedef unsigned long int ulong;
typedef unsigned short int ushort;
typedef unsigned int uint;
# 169 "/usr/include/sys/types.h" 3
typedef int int8_t __attribute__ ((__mode__ (__QI__)));
typedef int int16_t __attribute__ ((__mode__ (__HI__)));
typedef int int32_t __attribute__ ((__mode__ (__SI__)));
typedef int int64_t __attribute__ ((__mode__ (__DI__)));


typedef unsigned int u_int8_t __attribute__ ((__mode__ (__QI__)));
typedef unsigned int u_int16_t __attribute__ ((__mode__ (__HI__)));
typedef unsigned int u_int32_t __attribute__ ((__mode__ (__SI__)));
typedef unsigned int u_int64_t __attribute__ ((__mode__ (__DI__)));

typedef int register_t __attribute__ ((__mode__ (__word__)));
# 191 "/usr/include/sys/types.h" 3
# 1 "/usr/include/endian.h" 1 3
# 22 "/usr/include/endian.h" 3
# 1 "/usr/include/features.h" 1 3
# 23 "/usr/include/endian.h" 2 3
# 35 "/usr/include/endian.h" 3
# 1 "/usr/include/bits/endian.h" 1 3
# 36 "/usr/include/endian.h" 2 3
# 192 "/usr/include/sys/types.h" 2 3


# 1 "/usr/include/sys/select.h" 1 3
# 25 "/usr/include/sys/select.h" 3
# 1 "/usr/include/features.h" 1 3
# 26 "/usr/include/sys/select.h" 2 3


# 1 "/usr/include/bits/types.h" 1 3
# 29 "/usr/include/sys/select.h" 2 3


# 1 "/usr/include/bits/select.h" 1 3
# 32 "/usr/include/sys/select.h" 2 3


# 1 "/usr/include/bits/sigset.h" 1 3
# 23 "/usr/include/bits/sigset.h" 3
typedef int __sig_atomic_t;




typedef struct
  {
    unsigned long int __val[(1024 / (8 * sizeof (unsigned long int)))];
  } __sigset_t;
# 35 "/usr/include/sys/select.h" 2 3



# 1 "/usr/include/time.h" 1 3
# 83 "/usr/include/time.h" 3
struct timespec
  {
    long int tv_sec;
    long int tv_nsec;
  };
# 39 "/usr/include/sys/select.h" 2 3







struct timeval;

typedef __fd_mask fd_mask;


typedef __fd_set fd_set;
# 74 "/usr/include/sys/select.h" 3
extern int __select (int __nfds, __fd_set *__readfds, __fd_set *__writefds, __fd_set *__exceptfds, struct timeval *__timeout) ;


extern int select (int __nfds, __fd_set *__readfds, __fd_set *__writefds, __fd_set *__exceptfds, struct timeval *__timeout) ;
# 195 "/usr/include/sys/types.h" 2 3


# 1 "/usr/include/sys/sysmacros.h" 1 3
# 23 "/usr/include/sys/sysmacros.h" 3
# 1 "/usr/include/bits/wordsize.h" 1 3
# 24 "/usr/include/sys/sysmacros.h" 2 3
# 198 "/usr/include/sys/types.h" 2 3





typedef __blkcnt_t blkcnt_t;
typedef __fsblkcnt_t fsblkcnt_t;
typedef __fsfilcnt_t fsfilcnt_t;
# 84 "/home/nisse/hack/mozilla/dist/include/nspr/obsolete/protypes.h" 2
# 105 "/home/nisse/hack/mozilla/dist/include/nspr/obsolete/protypes.h"
typedef PRUint64 uint64;
# 114 "/home/nisse/hack/mozilla/dist/include/nspr/obsolete/protypes.h"
typedef PRUint32 uint32;
# 125 "/home/nisse/hack/mozilla/dist/include/nspr/obsolete/protypes.h"
typedef PRUint16 uint16;







typedef PRUint8 uint8;
# 142 "/home/nisse/hack/mozilla/dist/include/nspr/obsolete/protypes.h"
typedef PRInt64 int64;
# 154 "/home/nisse/hack/mozilla/dist/include/nspr/obsolete/protypes.h"
typedef PRInt32 int32;
# 168 "/home/nisse/hack/mozilla/dist/include/nspr/obsolete/protypes.h"
typedef PRInt16 int16;
# 178 "/home/nisse/hack/mozilla/dist/include/nspr/obsolete/protypes.h"
typedef PRInt8 int8;


typedef PRFloat64 float64;
typedef PRUptrdiff uptrdiff_t;
typedef PRUword uprword_t;
typedef PRWord prword_t;
# 483 "/home/nisse/hack/mozilla/dist/include/nspr/prtypes.h" 2
# 45 "/home/nisse/hack/mozilla/dist/include/nspr/plarena.h" 2
# 1 "/home/nisse/hack/mozilla/dist/include/nspr/plarenas.h" 1
# 41 "/home/nisse/hack/mozilla/dist/include/nspr/plarenas.h"
typedef struct PLArenaPool PLArenaPool;
# 73 "/home/nisse/hack/mozilla/dist/include/nspr/plarenas.h"
extern void PL_InitArenaPool(
    PLArenaPool *pool, const char *name, PRUint32 size, PRUint32 align);




extern void PL_ArenaFinish(void);






extern void PL_FreeArenaPool(PLArenaPool *pool);




extern void PL_FinishArenaPool(PLArenaPool *pool);




extern void PL_CompactArenaPool(PLArenaPool *pool);




extern void * PL_ArenaAllocate(PLArenaPool *pool, PRUint32 nb);

extern void * PL_ArenaGrow(
    PLArenaPool *pool, void *p, PRUint32 size, PRUint32 incr);

extern void PL_ArenaRelease(PLArenaPool *pool, char *mark);
# 46 "/home/nisse/hack/mozilla/dist/include/nspr/plarena.h" 2



typedef struct PLArena PLArena;

struct PLArena {
    PLArena *next;
    PRUword base;
    PRUword limit;
    PRUword avail;
};
# 79 "/home/nisse/hack/mozilla/dist/include/nspr/plarena.h"
struct PLArenaPool {
    PLArena first;
    PLArena *current;
    PRUint32 arenasize;
    PRUword mask;



};
# 43 "../../../../dist/public/security/secoid.h" 2

# 1 "../../../../dist/public/security/seccomon.h" 1
# 47 "../../../../dist/public/security/seccomon.h"
# 1 "/home/nisse/hack/mozilla/dist/include/nspr/prtypes.h" 1
# 48 "../../../../dist/public/security/seccomon.h" 2
# 58 "../../../../dist/public/security/seccomon.h"
# 1 "../../../../dist/public/security/secport.h" 1
# 86 "../../../../dist/public/security/secport.h"
# 1 "/usr/include/sys/types.h" 1 3
# 87 "../../../../dist/public/security/secport.h" 2
# 95 "../../../../dist/public/security/secport.h"
# 1 "/usr/include/ctype.h" 1 3
# 26 "/usr/include/ctype.h" 3
# 1 "/usr/include/features.h" 1 3
# 27 "/usr/include/ctype.h" 2 3
# 1 "/usr/include/bits/types.h" 1 3
# 28 "/usr/include/ctype.h" 2 3
# 40 "/usr/include/ctype.h" 3
# 1 "/usr/include/endian.h" 1 3
# 41 "/usr/include/ctype.h" 2 3






enum
{
  _ISupper = (1 << (0)),
  _ISlower = (1 << (1)),
  _ISalpha = (1 << (2)),
  _ISdigit = (1 << (3)),
  _ISxdigit = (1 << (4)),
  _ISspace = (1 << (5)),
  _ISprint = (1 << (6)),
  _ISgraph = (1 << (7)),
  _ISblank = (1 << (8)),
  _IScntrl = (1 << (9)),
  _ISpunct = (1 << (10)),
  _ISalnum = (1 << (11))
};
# 75 "/usr/include/ctype.h" 3
extern __const unsigned short int *__ctype_b;
extern __const __int32_t *__ctype_tolower;
extern __const __int32_t *__ctype_toupper;
# 91 "/usr/include/ctype.h" 3
extern int isalnum (int) ;
extern int isalpha (int) ;
extern int iscntrl (int) ;
extern int isdigit (int) ;
extern int islower (int) ;
extern int isgraph (int) ;
extern int isprint (int) ;
extern int ispunct (int) ;
extern int isspace (int) ;
extern int isupper (int) ;
extern int isxdigit (int) ;







extern int tolower (int __c) ;


extern int toupper (int __c) ;






extern int isascii (int __c) ;



extern int toascii (int __c) ;






extern int _toupper (int) ;
extern int _tolower (int) ;
# 153 "/usr/include/ctype.h" 3
extern __inline int
tolower (int __c)
{
  return __c >= -128 && __c < 256 ? __ctype_tolower[__c] : __c;
}

extern __inline int
toupper (int __c)
{
  return __c >= -128 && __c < 256 ? __ctype_toupper[__c] : __c;
}
# 96 "../../../../dist/public/security/secport.h" 2
# 1 "/usr/include/string.h" 1 3
# 26 "/usr/include/string.h" 3
# 1 "/usr/include/features.h" 1 3
# 27 "/usr/include/string.h" 2 3






# 1 "/usr/local/lib/gcc-lib/sparc-unknown-linux-gnu/3.0.1/include/stddef.h" 1 3
# 34 "/usr/include/string.h" 2 3



extern void * memcpy (void * __restrict __dest, __const void * __restrict __src, size_t __n) ;



extern void * memmove (void * __dest, __const void * __src, size_t __n) ;






extern void * memccpy (void * __dest, __const void * __src, int __c, size_t __n) ;





extern void * memset (void * __s, int __c, size_t __n) ;


extern int memcmp (__const void * __s1, __const void * __s2, size_t __n) ;



extern void * memchr (__const void * __s, int __c, size_t __n) ;
# 71 "/usr/include/string.h" 3
extern char *strcpy (char *__restrict __dest, __const char *__restrict __src) ;


extern char *strncpy (char *__restrict __dest, __const char *__restrict __src, size_t __n) ;



extern char *strcat (char *__restrict __dest, __const char *__restrict __src) ;


extern char *strncat (char *__restrict __dest, __const char *__restrict __src, size_t __n) ;



extern int strcmp (__const char *__s1, __const char *__s2) ;

extern int strncmp (__const char *__s1, __const char *__s2, size_t __n) ;


extern int strcoll (__const char *__s1, __const char *__s2) ;

extern size_t strxfrm (char *__restrict __dest, __const char *__restrict __src, size_t __n) ;
# 111 "/usr/include/string.h" 3
extern char *__strdup (__const char *__s) ;
extern char *strdup (__const char *__s) ;
# 146 "/usr/include/string.h" 3
extern char *strchr (__const char *__s, int __c) ;

extern char *strrchr (__const char *__s, int __c) ;
# 158 "/usr/include/string.h" 3
extern size_t strcspn (__const char *__s, __const char *__reject) ;


extern size_t strspn (__const char *__s, __const char *__accept) ;

extern char *strpbrk (__const char *__s, __const char *__accept) ;

extern char *strstr (__const char *__haystack, __const char *__needle) ;
# 176 "/usr/include/string.h" 3
extern char *strtok (char *__restrict __s, __const char *__restrict __delim) ;




extern char *__strtok_r (char *__restrict __s, __const char *__restrict __delim, char **__restrict __save_ptr) ;



extern char *strtok_r (char *__restrict __s, __const char *__restrict __delim, char **__restrict __save_ptr) ;
# 207 "/usr/include/string.h" 3
extern size_t strlen (__const char *__s) ;
# 217 "/usr/include/string.h" 3
extern char *strerror (int __errnum) ;



extern char *__strerror_r (int __errnum, char *__buf, size_t __buflen) ;
extern char *strerror_r (int __errnum, char *__buf, size_t __buflen) ;




extern void __bzero (void * __s, size_t __n) ;



extern void bcopy (__const void * __src, void * __dest, size_t __n) ;


extern void bzero (void * __s, size_t __n) ;


extern int bcmp (__const void * __s1, __const void * __s2, size_t __n) ;


extern char *index (__const char *__s, int __c) ;


extern char *rindex (__const char *__s, int __c) ;



extern int __ffs (int __i) __attribute__ ((const));
extern int ffs (int __i) __attribute__ ((const));
# 261 "/usr/include/string.h" 3
extern int __strcasecmp (__const char *__s1, __const char *__s2) ;
extern int strcasecmp (__const char *__s1, __const char *__s2) ;


extern int strncasecmp (__const char *__s1, __const char *__s2, size_t __n) ;
# 282 "/usr/include/string.h" 3
extern char *strsep (char **__restrict __stringp, __const char *__restrict __delim) ;
# 343 "/usr/include/string.h" 3
# 1 "/usr/include/bits/string.h" 1 3
# 344 "/usr/include/string.h" 2 3


# 1 "/usr/include/bits/string2.h" 1 3
# 80 "/usr/include/bits/string2.h" 3
typedef struct { unsigned char __arr[2]; } __STRING2_COPY_ARR2 __attribute__ ((packed));
typedef struct { unsigned char __arr[3]; } __STRING2_COPY_ARR3 __attribute__ ((packed));
typedef struct { unsigned char __arr[4]; } __STRING2_COPY_ARR4 __attribute__ ((packed));
typedef struct { unsigned char __arr[5]; } __STRING2_COPY_ARR5 __attribute__ ((packed));
typedef struct { unsigned char __arr[6]; } __STRING2_COPY_ARR6 __attribute__ ((packed));
typedef struct { unsigned char __arr[7]; } __STRING2_COPY_ARR7 __attribute__ ((packed));
typedef struct { unsigned char __arr[8]; } __STRING2_COPY_ARR8 __attribute__ ((packed));
# 372 "/usr/include/bits/string2.h" 3
extern void * __rawmemchr (const void * __s, int __c);
# 478 "/usr/include/bits/string2.h" 3
extern __inline char *__strcpy_small (char *, __STRING2_COPY_ARR2,
                                      __STRING2_COPY_ARR3,
                                      __STRING2_COPY_ARR4,
                                      __STRING2_COPY_ARR5,
                                      __STRING2_COPY_ARR6,
                                      __STRING2_COPY_ARR7,
                                      __STRING2_COPY_ARR8, size_t);
extern __inline char *
__strcpy_small (char *__dest,
                __STRING2_COPY_ARR2 __src2, __STRING2_COPY_ARR3 __src3,
                __STRING2_COPY_ARR4 __src4, __STRING2_COPY_ARR5 __src5,
                __STRING2_COPY_ARR6 __src6, __STRING2_COPY_ARR7 __src7,
                __STRING2_COPY_ARR8 __src8, size_t __srclen)
{
  union {
    char __c;
    __STRING2_COPY_ARR2 __sca2;
    __STRING2_COPY_ARR3 __sca3;
    __STRING2_COPY_ARR4 __sca4;
    __STRING2_COPY_ARR5 __sca5;
    __STRING2_COPY_ARR6 __sca6;
    __STRING2_COPY_ARR7 __sca7;
    __STRING2_COPY_ARR8 __sca8;
  } *__u = (void *) __dest;
  switch ((unsigned int) __srclen)
    {
    case 1:
      __u->__c = '\0';
      break;
    case 2:
      __extension__ __u->__sca2 = __src2;
      break;
    case 3:
      __extension__ __u->__sca3 = __src3;
      break;
    case 4:
      __extension__ __u->__sca4 = __src4;
      break;
    case 5:
      __extension__ __u->__sca5 = __src5;
      break;
    case 6:
      __extension__ __u->__sca6 = __src6;
      break;
    case 7:
      __extension__ __u->__sca7 = __src7;
      break;
    case 8:
      __extension__ __u->__sca8 = __src8;
      break;
  }
  return __dest;
}
# 873 "/usr/include/bits/string2.h" 3
extern __inline size_t __strcspn_c1 (__const char *__s, char __reject);
extern __inline size_t
__strcspn_c1 (__const char *__s, char __reject)
{
  register size_t __result = 0;
  while (__s[__result] != '\0' && __s[__result] != __reject)
    ++__result;
  return __result;
}

extern __inline size_t __strcspn_c2 (__const char *__s, char __reject1,
                                     char __reject2);
extern __inline size_t
__strcspn_c2 (__const char *__s, char __reject1, char __reject2)
{
  register size_t __result = 0;
  while (__s[__result] != '\0' && __s[__result] != __reject1
         && __s[__result] != __reject2)
    ++__result;
  return __result;
}

extern __inline size_t __strcspn_c3 (__const char *__s, char __reject1,
                                     char __reject2, char __reject3);
extern __inline size_t
__strcspn_c3 (__const char *__s, char __reject1, char __reject2,
              char __reject3)
{
  register size_t __result = 0;
  while (__s[__result] != '\0' && __s[__result] != __reject1
         && __s[__result] != __reject2 && __s[__result] != __reject3)
    ++__result;
  return __result;
}
# 928 "/usr/include/bits/string2.h" 3
extern __inline size_t __strspn_c1 (__const char *__s, char __accept);
extern __inline size_t
__strspn_c1 (__const char *__s, char __accept)
{
  register size_t __result = 0;

  while (__s[__result] == __accept)
    ++__result;
  return __result;
}

extern __inline size_t __strspn_c2 (__const char *__s, char __accept1,
                                    char __accept2);
extern __inline size_t
__strspn_c2 (__const char *__s, char __accept1, char __accept2)
{
  register size_t __result = 0;

  while (__s[__result] == __accept1 || __s[__result] == __accept2)
    ++__result;
  return __result;
}

extern __inline size_t __strspn_c3 (__const char *__s, char __accept1,
                                    char __accept2, char __accept3);
extern __inline size_t
__strspn_c3 (__const char *__s, char __accept1, char __accept2, char __accept3)
{
  register size_t __result = 0;

  while (__s[__result] == __accept1 || __s[__result] == __accept2
         || __s[__result] == __accept3)
    ++__result;
  return __result;
}
# 983 "/usr/include/bits/string2.h" 3
extern __inline char *__strpbrk_c2 (__const char *__s, char __accept1,
                                     char __accept2);
extern __inline char *
__strpbrk_c2 (__const char *__s, char __accept1, char __accept2)
{

  while (*__s != '\0' && *__s != __accept1 && *__s != __accept2)
    ++__s;
  return *__s == '\0' ? ((void *)0) : (char *) (size_t) __s;
}

extern __inline char *__strpbrk_c3 (__const char *__s, char __accept1,
                                     char __accept2, char __accept3);
extern __inline char *
__strpbrk_c3 (__const char *__s, char __accept1, char __accept2,
              char __accept3)
{

  while (*__s != '\0' && *__s != __accept1 && *__s != __accept2
         && *__s != __accept3)
    ++__s;
  return *__s == '\0' ? ((void *)0) : (char *) (size_t) __s;
}
# 1044 "/usr/include/bits/string2.h" 3
extern __inline char *__strtok_r_1c (char *__s, char __sep, char **__nextp);
extern __inline char *
__strtok_r_1c (char *__s, char __sep, char **__nextp)
{
  char *__result;
  if (__s == ((void *)0))
    __s = *__nextp;
  while (*__s == __sep)
    ++__s;
  if (*__s == '\0')
    __result = ((void *)0);
  else
    {
      __result = __s;
      while (*__s != '\0' && *__s != __sep)
        ++__s;
      if (*__s == '\0')
        *__nextp = __s;
      else
        {
          *__s = '\0';
          *__nextp = __s + 1;
        }
    }
  return __result;
}
# 1094 "/usr/include/bits/string2.h" 3
extern __inline char *__strsep_1c (char **__s, char __reject);
extern __inline char *
__strsep_1c (char **__s, char __reject)
{
  register char *__retval = *__s;
  if (__retval == ((void *)0))
    return *__s = ((void *)0);
  if (*__retval == __reject)
    *(*__s)++ = '\0';
  else
    if ((*__s = (__extension__ (__builtin_constant_p (__reject) && (__reject) == '\0' ? (char *) __rawmemchr (__retval, __reject) : strchr (__retval, __reject)))) != ((void *)0))
      *(*__s)++ = '\0';
    else
      *__s = ((void *)0);
  return __retval;
}

extern __inline char *__strsep_2c (char **__s, char __reject1, char __reject2);
extern __inline char *
__strsep_2c (char **__s, char __reject1, char __reject2)
{
  register char *__retval = *__s;
  if (__retval == ((void *)0))
    return *__s = ((void *)0);
  if (*__retval == __reject1 || *__retval == __reject2)
    *(*__s)++ = '\0';
  else
    {
      register char *__cp = __retval;
      while (*__cp != '\0' && *__cp != __reject1 && *__cp != __reject2)
        ++__cp;
      if (*__cp != '\0')
        {
          *__s = __cp;
          *(*__s)++ = '\0';
        }
      else
        *__s = ((void *)0);
    }
  return __retval;
}

extern __inline char *__strsep_3c (char **__s, char __reject1, char __reject2,
                                   char __reject3);
extern __inline char *
__strsep_3c (char **__s, char __reject1, char __reject2, char __reject3)
{
  register char *__retval = *__s;
  if (__retval == ((void *)0))
    return *__s = ((void *)0);
  if (*__retval == __reject1 || *__retval == __reject2
      || *__retval == __reject3)
    *(*__s)++ = '\0';
  else
    {
      register char *__cp = __retval;
      while (*__cp != '\0' && *__cp != __reject1 && *__cp != __reject2
             && *__cp != __reject3)
        ++__cp;
      if (*__cp != '\0')
        {
          *__s = __cp;
          *(*__s)++ = '\0';
        }
      else
        *__s = ((void *)0);
    }
  return __retval;
}

extern __inline char *__strsep_g (char **__s, __const char *__reject);
extern __inline char *
__strsep_g (char **__s, __const char *__reject)
{
  register char *__retval = *__s;
  if (__retval == ((void *)0))
    return ((void *)0);
  if ((*__s = __extension__ ({ char __a0, __a1, __a2; (__builtin_constant_p (__reject) && ((size_t)(const void *)((__reject) + 1) - (size_t)(const void *)(__reject) == 1) ? ((__a0 = ((__const char *) (__reject))[0], __a0 == '\0') ? ((void *)0) : ((__a1 = ((__const char *) (__reject))[1], __a1 == '\0') ? (__extension__ (__builtin_constant_p (__a0) && (__a0) == '\0' ? (char *) __rawmemchr (__retval, __a0) : strchr (__retval, __a0))) : ((__a2 = ((__const char *) (__reject))[2], __a2 == '\0') ? __strpbrk_c2 (__retval, __a0, __a1) : (((__const char *) (__reject))[3] == '\0' ? __strpbrk_c3 (__retval, __a0, __a1, __a2) : strpbrk (__retval, __reject))))) : strpbrk (__retval, __reject)); })) != ((void *)0))
    *(*__s)++ = '\0';
  return __retval;
}
# 1187 "/usr/include/bits/string2.h" 3
# 1 "/usr/include/stdlib.h" 1 3
# 25 "/usr/include/stdlib.h" 3
# 1 "/usr/include/features.h" 1 3
# 26 "/usr/include/stdlib.h" 2 3







# 1 "/usr/local/lib/gcc-lib/sparc-unknown-linux-gnu/3.0.1/include/stddef.h" 1 3
# 34 "/usr/include/stdlib.h" 2 3
# 474 "/usr/include/stdlib.h" 3
extern void * malloc (size_t __size) ;

extern void * calloc (size_t __nmemb, size_t __size) ;
# 1188 "/usr/include/bits/string2.h" 2 3
# 347 "/usr/include/string.h" 2 3
# 97 "../../../../dist/public/security/secport.h" 2
# 1 "/usr/local/lib/gcc-lib/sparc-unknown-linux-gnu/3.0.1/include/stddef.h" 1 3
# 98 "../../../../dist/public/security/secport.h" 2
# 1 "/usr/include/stdlib.h" 1 3
# 25 "/usr/include/stdlib.h" 3
# 1 "/usr/include/features.h" 1 3
# 26 "/usr/include/stdlib.h" 2 3







# 1 "/usr/local/lib/gcc-lib/sparc-unknown-linux-gnu/3.0.1/include/stddef.h" 1 3
# 34 "/usr/include/stdlib.h" 2 3







typedef struct
  {
    int quot;
    int rem;
  } div_t;



typedef struct
  {
    long int quot;
    long int rem;
  } ldiv_t;
# 80 "/usr/include/stdlib.h" 3
extern size_t __ctype_get_mb_cur_max (void) ;



extern double atof (__const char *__nptr) ;

extern int atoi (__const char *__nptr) ;

extern long int atol (__const char *__nptr) ;



__extension__ extern long long int atoll (__const char *__nptr) ;



extern double strtod (__const char *__restrict __nptr, char **__restrict __endptr) ;
# 109 "/usr/include/stdlib.h" 3
extern long int strtol (__const char *__restrict __nptr, char **__restrict __endptr, int __base) ;


extern unsigned long int strtoul (__const char *__restrict __nptr, char **__restrict __endptr, int __base) ;





__extension__
extern long long int strtoq (__const char *__restrict __nptr, char **__restrict __endptr, int __base) ;


__extension__
extern unsigned long long int strtouq (__const char *__restrict __nptr, char **__restrict __endptr, int __base) ;
# 132 "/usr/include/stdlib.h" 3
__extension__
extern long long int strtoll (__const char *__restrict __nptr, char **__restrict __endptr, int __base) ;


__extension__
extern unsigned long long int strtoull (__const char *__restrict __nptr, char **__restrict __endptr, int __base) ;
# 196 "/usr/include/stdlib.h" 3
extern double __strtod_internal (__const char *__restrict __nptr, char **__restrict __endptr, int __group) ;


extern float __strtof_internal (__const char *__restrict __nptr, char **__restrict __endptr, int __group) ;

extern long double __strtold_internal (__const char * __restrict __nptr, char **__restrict __endptr, int __group) ;




extern long int __strtol_internal (__const char *__restrict __nptr, char **__restrict __endptr, int __base, int __group) ;





extern unsigned long int __strtoul_internal (__const char * __restrict __nptr, char **__restrict __endptr, int __base, int __group) ;







__extension__
extern long long int __strtoll_internal (__const char *__restrict __nptr, char **__restrict __endptr, int __base, int __group) ;





__extension__
extern unsigned long long int __strtoull_internal (__const char * __restrict __nptr, char ** __restrict __endptr, int __base, int __group) ;
# 242 "/usr/include/stdlib.h" 3
extern __inline double
strtod (__const char *__restrict __nptr, char **__restrict __endptr)
{
  return __strtod_internal (__nptr, __endptr, 0);
}
extern __inline long int
strtol (__const char *__restrict __nptr, char **__restrict __endptr,
        int __base)
{
  return __strtol_internal (__nptr, __endptr, __base, 0);
}
extern __inline unsigned long int
strtoul (__const char *__restrict __nptr, char **__restrict __endptr,
         int __base)
{
  return __strtoul_internal (__nptr, __endptr, __base, 0);
}
# 274 "/usr/include/stdlib.h" 3
__extension__ extern __inline long long int
strtoq (__const char *__restrict __nptr, char **__restrict __endptr,
        int __base)
{
  return __strtoll_internal (__nptr, __endptr, __base, 0);
}
__extension__ extern __inline unsigned long long int
strtouq (__const char *__restrict __nptr, char **__restrict __endptr,
         int __base)
{
  return __strtoull_internal (__nptr, __endptr, __base, 0);
}



__extension__ extern __inline long long int
strtoll (__const char *__restrict __nptr, char **__restrict __endptr,
         int __base)
{
  return __strtoll_internal (__nptr, __endptr, __base, 0);
}
__extension__ extern __inline unsigned long long int
strtoull (__const char * __restrict __nptr, char **__restrict __endptr,
          int __base)
{
  return __strtoull_internal (__nptr, __endptr, __base, 0);
}


extern __inline double
atof (__const char *__nptr)
{
  return strtod (__nptr, (char **) ((void *)0));
}
extern __inline int
atoi (__const char *__nptr)
{
  return (int) strtol (__nptr, (char **) ((void *)0), 10);
}
extern __inline long int
atol (__const char *__nptr)
{
  return strtol (__nptr, (char **) ((void *)0), 10);
}


__extension__ extern __inline long long int
atoll (__const char *__nptr)
{
  return strtoll (__nptr, (char **) ((void *)0), 10);
}
# 396 "/usr/include/stdlib.h" 3
extern int rand (void) ;

extern void srand (unsigned int __seed) ;



extern int rand_r (unsigned int *__seed) ;







extern double drand48 (void) ;
extern double erand48 (unsigned short int __xsubi[3]) ;


extern long int lrand48 (void) ;
extern long int nrand48 (unsigned short int __xsubi[3]) ;


extern long int mrand48 (void) ;
extern long int jrand48 (unsigned short int __xsubi[3]) ;


extern void srand48 (long int __seedval) ;
extern unsigned short int *seed48 (unsigned short int __seed16v[3]) ;
extern void lcong48 (unsigned short int __param[7]) ;


struct drand48_data
  {
    unsigned short int x[3];
    unsigned short int a[3];
    unsigned short int c;
    unsigned short int old_x[3];
    int init;
  };



extern int drand48_r (struct drand48_data *__restrict __buffer, double *__restrict __result) ;

extern int erand48_r (unsigned short int __xsubi[3], struct drand48_data *__restrict __buffer, double *__restrict __result) ;




extern int lrand48_r (struct drand48_data *__restrict __buffer, long int *__restrict __result) ;

extern int nrand48_r (unsigned short int __xsubi[3], struct drand48_data *__restrict __buffer, long int *__restrict __result) ;




extern int mrand48_r (struct drand48_data *__restrict __buffer, long int *__restrict __result) ;

extern int jrand48_r (unsigned short int __xsubi[3], struct drand48_data *__restrict __buffer, long int *__restrict __result) ;




extern int srand48_r (long int __seedval, struct drand48_data *__buffer) ;

extern int seed48_r (unsigned short int __seed16v[3], struct drand48_data *__buffer) ;


extern int lcong48_r (unsigned short int __param[7], struct drand48_data *__buffer) ;
# 482 "/usr/include/stdlib.h" 3
extern void * realloc (void * __ptr, size_t __size) ;

extern void free (void * __ptr) ;



extern void cfree (void * __ptr) ;



# 1 "/usr/include/alloca.h" 1 3
# 22 "/usr/include/alloca.h" 3
# 1 "/usr/include/features.h" 1 3
# 23 "/usr/include/alloca.h" 2 3


# 1 "/usr/local/lib/gcc-lib/sparc-unknown-linux-gnu/3.0.1/include/stddef.h" 1 3
# 26 "/usr/include/alloca.h" 2 3







extern void * alloca (size_t __size) ;
# 493 "/usr/include/stdlib.h" 2 3




extern void * valloc (size_t __size) ;




extern void abort (void) __attribute__ ((__noreturn__));



extern int atexit (void (*__func) (void)) ;




extern int __on_exit (void (*__func) (int __status, void * __arg), void * __arg) ;

extern int on_exit (void (*__func) (int __status, void * __arg), void * __arg) ;






extern void exit (int __status) __attribute__ ((__noreturn__));
# 530 "/usr/include/stdlib.h" 3
extern char *getenv (__const char *__name) ;



extern char *__secure_getenv (__const char *__name) ;





extern int putenv (char *__string) ;





extern int setenv (__const char *__name, __const char *__value, int __replace) ;



extern void unsetenv (__const char *__name) ;






extern int clearenv (void) ;
# 566 "/usr/include/stdlib.h" 3
extern char *mktemp (char *__template) ;






extern int mkstemp (char *__template) ;




extern int system (__const char *__command) ;
# 595 "/usr/include/stdlib.h" 3
extern char *realpath (__const char *__restrict __name, char *__restrict __resolved) ;







typedef int (*__compar_fn_t) (__const void *, __const void *);
# 612 "/usr/include/stdlib.h" 3
extern void * bsearch (__const void * __key, __const void * __base, size_t __nmemb, size_t __size, __compar_fn_t __compar);





extern void qsort (void * __base, size_t __nmemb, size_t __size, __compar_fn_t __compar);




extern int abs (int __x) __attribute__ ((__const__));
extern long int labs (long int __x) __attribute__ ((__const__));
# 634 "/usr/include/stdlib.h" 3
extern div_t div (int __numer, int __denom) __attribute__ ((__const__));
extern ldiv_t ldiv (long int __numer, long int __denom)
     __attribute__ ((__const__));
# 695 "/usr/include/stdlib.h" 3
extern int mblen (__const char *__s, size_t __n) ;


extern int mbtowc (wchar_t *__restrict __pwc, __const char *__restrict __s, size_t __n) ;



extern int wctomb (char *__s, wchar_t __wchar) ;



extern size_t mbstowcs (wchar_t *__restrict __pwcs, __const char *__restrict __s, size_t __n) ;


extern size_t wcstombs (char *__restrict __s, __const wchar_t *__restrict __pwcs, size_t __n) ;
# 738 "/usr/include/stdlib.h" 3
extern void setkey (__const char *__key) ;







extern int grantpt (int __fd) ;



extern int unlockpt (int __fd) ;




extern char *ptsname (int __fd) ;
# 99 "../../../../dist/public/security/secport.h" 2
# 1 "/home/nisse/hack/mozilla/dist/include/nspr/prtypes.h" 1
# 100 "../../../../dist/public/security/secport.h" 2
# 1 "/home/nisse/hack/mozilla/dist/include/nspr/prlog.h" 1
# 38 "/home/nisse/hack/mozilla/dist/include/nspr/prlog.h"
# 1 "/home/nisse/hack/mozilla/dist/include/nspr/prtypes.h" 1
# 39 "/home/nisse/hack/mozilla/dist/include/nspr/prlog.h" 2
# 135 "/home/nisse/hack/mozilla/dist/include/nspr/prlog.h"
typedef enum PRLogModuleLevel {
    PR_LOG_NONE = 0,
    PR_LOG_ALWAYS = 1,
    PR_LOG_ERROR = 2,
    PR_LOG_WARNING = 3,
    PR_LOG_DEBUG = 4,

    PR_LOG_NOTICE = PR_LOG_DEBUG,
    PR_LOG_WARN = PR_LOG_WARNING,
    PR_LOG_MIN = PR_LOG_DEBUG,
    PR_LOG_MAX = PR_LOG_DEBUG
} PRLogModuleLevel;






typedef struct PRLogModuleInfo {
    const char *name;
    PRLogModuleLevel level;
    struct PRLogModuleInfo *next;
} PRLogModuleInfo;




extern PRLogModuleInfo* PR_NewLogModule(const char *name);





extern PRBool PR_SetLogFile(const char *name);





extern void PR_SetLogBuffering(PRIntn buffer_size);







extern void PR_LogPrint(const char *fmt, ...);




extern void PR_LogFlush(void);
# 101 "../../../../dist/public/security/secport.h" 2
# 1 "/home/nisse/hack/mozilla/dist/include/nspr/plarena.h" 1
# 102 "../../../../dist/public/security/secport.h" 2
# 1 "/home/nisse/hack/mozilla/dist/include/nspr/plstr.h" 1
# 59 "/home/nisse/hack/mozilla/dist/include/nspr/plstr.h"
# 1 "/home/nisse/hack/mozilla/dist/include/nspr/prtypes.h" 1
# 60 "/home/nisse/hack/mozilla/dist/include/nspr/plstr.h" 2
# 68 "/home/nisse/hack/mozilla/dist/include/nspr/plstr.h"
extern PRUint32
PL_strlen(const char *str);
# 79 "/home/nisse/hack/mozilla/dist/include/nspr/plstr.h"
extern PRUint32
PL_strnlen(const char *str, PRUint32 max);
# 90 "/home/nisse/hack/mozilla/dist/include/nspr/plstr.h"
extern char *
PL_strcpy(char *dest, const char *src);
# 103 "/home/nisse/hack/mozilla/dist/include/nspr/plstr.h"
extern char *
PL_strncpy(char *dest, const char *src, PRUint32 max);
# 126 "/home/nisse/hack/mozilla/dist/include/nspr/plstr.h"
extern char *
PL_strncpyz(char *dest, const char *src, PRUint32 max);
# 140 "/home/nisse/hack/mozilla/dist/include/nspr/plstr.h"
extern char *
PL_strdup(const char *s);







extern void
PL_strfree(char *s);
# 164 "/home/nisse/hack/mozilla/dist/include/nspr/plstr.h"
extern char *
PL_strndup(const char *s, PRUint32 max);
# 176 "/home/nisse/hack/mozilla/dist/include/nspr/plstr.h"
extern char *
PL_strcat(char *dst, const char *src);
# 191 "/home/nisse/hack/mozilla/dist/include/nspr/plstr.h"
extern char *
PL_strncat(char *dst, const char *src, PRUint32 max);
# 205 "/home/nisse/hack/mozilla/dist/include/nspr/plstr.h"
extern char *
PL_strcatn(char *dst, PRUint32 max, const char *src);
# 217 "/home/nisse/hack/mozilla/dist/include/nspr/plstr.h"
extern PRIntn
PL_strcmp(const char *a, const char *b);
# 231 "/home/nisse/hack/mozilla/dist/include/nspr/plstr.h"
extern PRIntn
PL_strncmp(const char *a, const char *b, PRUint32 max);
# 243 "/home/nisse/hack/mozilla/dist/include/nspr/plstr.h"
extern PRIntn
PL_strcasecmp(const char *a, const char *b);
# 255 "/home/nisse/hack/mozilla/dist/include/nspr/plstr.h"
extern PRIntn
PL_strncasecmp(const char *a, const char *b, PRUint32 max);
# 266 "/home/nisse/hack/mozilla/dist/include/nspr/plstr.h"
extern char *
PL_strchr(const char *s, char c);
# 277 "/home/nisse/hack/mozilla/dist/include/nspr/plstr.h"
extern char *
PL_strrchr(const char *s, char c);
# 289 "/home/nisse/hack/mozilla/dist/include/nspr/plstr.h"
extern char *
PL_strnchr(const char *s, char c, PRUint32 n);
# 301 "/home/nisse/hack/mozilla/dist/include/nspr/plstr.h"
extern char *
PL_strnrchr(const char *s, char c, PRUint32 n);
# 317 "/home/nisse/hack/mozilla/dist/include/nspr/plstr.h"
extern char *
PL_strpbrk(const char *s, const char *list);
# 328 "/home/nisse/hack/mozilla/dist/include/nspr/plstr.h"
extern char *
PL_strprbrk(const char *s, const char *list);
# 339 "/home/nisse/hack/mozilla/dist/include/nspr/plstr.h"
extern char *
PL_strnpbrk(const char *s, const char *list, PRUint32 n);
# 350 "/home/nisse/hack/mozilla/dist/include/nspr/plstr.h"
extern char *
PL_strnprbrk(const char *s, const char *list, PRUint32 n);
# 360 "/home/nisse/hack/mozilla/dist/include/nspr/plstr.h"
extern char *
PL_strstr(const char *big, const char *little);
# 370 "/home/nisse/hack/mozilla/dist/include/nspr/plstr.h"
extern char *
PL_strrstr(const char *big, const char *little);
# 381 "/home/nisse/hack/mozilla/dist/include/nspr/plstr.h"
extern char *
PL_strnstr(const char *big, const char *little, PRUint32 n);
# 392 "/home/nisse/hack/mozilla/dist/include/nspr/plstr.h"
extern char *
PL_strnrstr(const char *big, const char *little, PRUint32 max);
# 402 "/home/nisse/hack/mozilla/dist/include/nspr/plstr.h"
extern char *
PL_strcasestr(const char *big, const char *little);
# 412 "/home/nisse/hack/mozilla/dist/include/nspr/plstr.h"
extern char *
PL_strcaserstr(const char *big, const char *little);
# 423 "/home/nisse/hack/mozilla/dist/include/nspr/plstr.h"
extern char *
PL_strncasestr(const char *big, const char *little, PRUint32 max);
# 434 "/home/nisse/hack/mozilla/dist/include/nspr/plstr.h"
extern char *
PL_strncaserstr(const char *big, const char *little, PRUint32 max);
# 456 "/home/nisse/hack/mozilla/dist/include/nspr/plstr.h"
extern char *
PL_strtok_r(char *s1, const char *s2, char **lasts);
# 103 "../../../../dist/public/security/secport.h" 2
# 113 "../../../../dist/public/security/secport.h"
extern void *PORT_Alloc(size_t len);
extern void *PORT_Realloc(void *old, size_t len);
extern void *PORT_AllocBlock(size_t len);
extern void *PORT_ReallocBlock(void *old, size_t len);
extern void PORT_FreeBlock(void *ptr);
extern void *PORT_ZAlloc(size_t len);
extern void PORT_Free(void *ptr);
extern void PORT_ZFree(void *ptr, size_t len);
extern time_t PORT_Time(void);
extern void PORT_SetError(int value);
extern int PORT_GetError(void);

extern PLArenaPool *PORT_NewArena(unsigned long chunksize);
extern void *PORT_ArenaAlloc(PLArenaPool *arena, size_t size);
extern void *PORT_ArenaZAlloc(PLArenaPool *arena, size_t size);
extern void PORT_FreeArena(PLArenaPool *arena, PRBool zero);
extern void *PORT_ArenaGrow(PLArenaPool *arena, void *ptr,
                            size_t oldsize, size_t newsize);
extern void *PORT_ArenaMark(PLArenaPool *arena);
extern void PORT_ArenaRelease(PLArenaPool *arena, void *mark);
extern void PORT_ArenaUnmark(PLArenaPool *arena, void *mark);
extern char *PORT_ArenaStrdup(PLArenaPool *arena, char *str);
# 220 "../../../../dist/public/security/secport.h"
typedef PRBool ( * PORTCharConversionWSwapFunc) (PRBool toUnicode,
                        unsigned char *inBuf, unsigned int inBufLen,
                        unsigned char *outBuf, unsigned int maxOutBufLen,
                        unsigned int *outBufLen, PRBool swapBytes);

typedef PRBool ( * PORTCharConversionFunc) (PRBool toUnicode,
                        unsigned char *inBuf, unsigned int inBufLen,
                        unsigned char *outBuf, unsigned int maxOutBufLen,
                        unsigned int *outBufLen);





void PORT_SetUCS4_UTF8ConversionFunction(PORTCharConversionFunc convFunc);
void PORT_SetUCS2_ASCIIConversionFunction(PORTCharConversionWSwapFunc convFunc);
PRBool PORT_UCS4_UTF8Conversion(PRBool toUnicode, unsigned char *inBuf,
                        unsigned int inBufLen, unsigned char *outBuf,
                        unsigned int maxOutBufLen, unsigned int *outBufLen);
PRBool PORT_UCS2_ASCIIConversion(PRBool toUnicode, unsigned char *inBuf,
                        unsigned int inBufLen, unsigned char *outBuf,
                        unsigned int maxOutBufLen, unsigned int *outBufLen,
                        PRBool swapBytes);
void PORT_SetUCS2_UTF8ConversionFunction(PORTCharConversionFunc convFunc);
PRBool PORT_UCS2_UTF8Conversion(PRBool toUnicode, unsigned char *inBuf,
                        unsigned int inBufLen, unsigned char *outBuf,
                        unsigned int maxOutBufLen, unsigned int *outBufLen);

extern PRBool
sec_port_ucs4_utf8_conversion_function
(
  PRBool toUnicode,
  unsigned char *inBuf,
  unsigned int inBufLen,
  unsigned char *outBuf,
  unsigned int maxOutBufLen,
  unsigned int *outBufLen
);

extern PRBool
sec_port_ucs2_utf8_conversion_function
(
  PRBool toUnicode,
  unsigned char *inBuf,
  unsigned int inBufLen,
  unsigned char *outBuf,
  unsigned int maxOutBufLen,
  unsigned int *outBufLen
);

extern int NSS_PutEnv(const char * envVarName, const char * envValue);
# 59 "../../../../dist/public/security/seccomon.h" 2

typedef enum {
    siBuffer = 0,
    siClearDataBuffer = 1,
    siCipherDataBuffer = 2,
    siDERCertBuffer = 3,
    siEncodedCertBuffer = 4,
    siDERNameBuffer = 5,
    siEncodedNameBuffer = 6,
    siAsciiNameString = 7,
    siAsciiString = 8,
    siDEROID = 9
} SECItemType;

typedef struct SECItemStr SECItem;

struct SECItemStr {
    SECItemType type;
    unsigned char *data;
    unsigned int len;
};
# 92 "../../../../dist/public/security/seccomon.h"
typedef enum _SECStatus {
    SECWouldBlock = -2,
    SECFailure = -1,
    SECSuccess = 0
} SECStatus;






typedef enum _SECComparison {
    SECLessThan = -1,
    SECEqual = 0,
    SECGreaterThan = 1
} SECComparison;
# 45 "../../../../dist/public/security/secoid.h" 2
# 1 "../../../../dist/public/security/secoidt.h" 1
# 42 "../../../../dist/public/security/secoidt.h"
# 1 "../../../../dist/public/security/secitem.h" 1
# 43 "../../../../dist/public/security/secitem.h"
# 1 "/home/nisse/hack/mozilla/dist/include/nspr/plarena.h" 1
# 44 "../../../../dist/public/security/secitem.h" 2
# 1 "../../../../dist/public/security/seccomon.h" 1
# 45 "../../../../dist/public/security/secitem.h" 2
# 59 "../../../../dist/public/security/secitem.h"
extern SECItem *SECITEM_AllocItem(PLArenaPool *arena, SECItem *item,
                                  unsigned int len);
# 70 "../../../../dist/public/security/secitem.h"
extern SECStatus SECITEM_ReallocItem(PLArenaPool *arena, SECItem *item,
                                     unsigned int oldlen, unsigned int newlen);




extern SECComparison SECITEM_CompareItem(const SECItem *a, const SECItem *b);




extern PRBool SECITEM_ItemsAreEqual(const SECItem *a, const SECItem *b);




extern SECStatus SECITEM_CopyItem(PLArenaPool *arena, SECItem *to,
                                  const SECItem *from);




extern SECItem *SECITEM_DupItem(const SECItem *from);




extern void SECITEM_FreeItem(SECItem *zap, PRBool freeit);




extern void SECITEM_ZfreeItem(SECItem *zap, PRBool freeit);
# 43 "../../../../dist/public/security/secoidt.h" 2

typedef struct SECOidDataStr SECOidData;
typedef struct SECAlgorithmIDStr SECAlgorithmID;




struct SECAlgorithmIDStr {
    SECItem algorithm;
    SECItem parameters;
};
# 62 "../../../../dist/public/security/secoidt.h"
typedef enum {
    SEC_OID_UNKNOWN = 0,
    SEC_OID_MD2 = 1,
    SEC_OID_MD4 = 2,
    SEC_OID_MD5 = 3,
    SEC_OID_SHA1 = 4,
    SEC_OID_RC2_CBC = 5,
    SEC_OID_RC4 = 6,
    SEC_OID_DES_EDE3_CBC = 7,
    SEC_OID_RC5_CBC_PAD = 8,
    SEC_OID_DES_ECB = 9,
    SEC_OID_DES_CBC = 10,
    SEC_OID_DES_OFB = 11,
    SEC_OID_DES_CFB = 12,
    SEC_OID_DES_MAC = 13,
    SEC_OID_DES_EDE = 14,
    SEC_OID_ISO_SHA_WITH_RSA_SIGNATURE = 15,
    SEC_OID_PKCS1_RSA_ENCRYPTION = 16,
    SEC_OID_PKCS1_MD2_WITH_RSA_ENCRYPTION = 17,
    SEC_OID_PKCS1_MD4_WITH_RSA_ENCRYPTION = 18,
    SEC_OID_PKCS1_MD5_WITH_RSA_ENCRYPTION = 19,
    SEC_OID_PKCS1_SHA1_WITH_RSA_ENCRYPTION = 20,
    SEC_OID_PKCS5_PBE_WITH_MD2_AND_DES_CBC = 21,
    SEC_OID_PKCS5_PBE_WITH_MD5_AND_DES_CBC = 22,
    SEC_OID_PKCS5_PBE_WITH_SHA1_AND_DES_CBC = 23,
    SEC_OID_PKCS7 = 24,
    SEC_OID_PKCS7_DATA = 25,
    SEC_OID_PKCS7_SIGNED_DATA = 26,
    SEC_OID_PKCS7_ENVELOPED_DATA = 27,
    SEC_OID_PKCS7_SIGNED_ENVELOPED_DATA = 28,
    SEC_OID_PKCS7_DIGESTED_DATA = 29,
    SEC_OID_PKCS7_ENCRYPTED_DATA = 30,
    SEC_OID_PKCS9_EMAIL_ADDRESS = 31,
    SEC_OID_PKCS9_UNSTRUCTURED_NAME = 32,
    SEC_OID_PKCS9_CONTENT_TYPE = 33,
    SEC_OID_PKCS9_MESSAGE_DIGEST = 34,
    SEC_OID_PKCS9_SIGNING_TIME = 35,
    SEC_OID_PKCS9_COUNTER_SIGNATURE = 36,
    SEC_OID_PKCS9_CHALLENGE_PASSWORD = 37,
    SEC_OID_PKCS9_UNSTRUCTURED_ADDRESS = 38,
    SEC_OID_PKCS9_EXTENDED_CERTIFICATE_ATTRIBUTES = 39,
    SEC_OID_PKCS9_SMIME_CAPABILITIES = 40,
    SEC_OID_AVA_COMMON_NAME = 41,
    SEC_OID_AVA_COUNTRY_NAME = 42,
    SEC_OID_AVA_LOCALITY = 43,
    SEC_OID_AVA_STATE_OR_PROVINCE = 44,
    SEC_OID_AVA_ORGANIZATION_NAME = 45,
    SEC_OID_AVA_ORGANIZATIONAL_UNIT_NAME = 46,
    SEC_OID_AVA_DN_QUALIFIER = 47,
    SEC_OID_AVA_DC = 48,

    SEC_OID_NS_TYPE_GIF = 49,
    SEC_OID_NS_TYPE_JPEG = 50,
    SEC_OID_NS_TYPE_URL = 51,
    SEC_OID_NS_TYPE_HTML = 52,
    SEC_OID_NS_TYPE_CERT_SEQUENCE = 53,
    SEC_OID_MISSI_KEA_DSS_OLD = 54,
    SEC_OID_MISSI_DSS_OLD = 55,
    SEC_OID_MISSI_KEA_DSS = 56,
    SEC_OID_MISSI_DSS = 57,
    SEC_OID_MISSI_KEA = 58,
    SEC_OID_MISSI_ALT_KEA = 59,


    SEC_OID_NS_CERT_EXT_NETSCAPE_OK = 60,
    SEC_OID_NS_CERT_EXT_ISSUER_LOGO = 61,
    SEC_OID_NS_CERT_EXT_SUBJECT_LOGO = 62,
    SEC_OID_NS_CERT_EXT_CERT_TYPE = 63,
    SEC_OID_NS_CERT_EXT_BASE_URL = 64,
    SEC_OID_NS_CERT_EXT_REVOCATION_URL = 65,
    SEC_OID_NS_CERT_EXT_CA_REVOCATION_URL = 66,
    SEC_OID_NS_CERT_EXT_CA_CRL_URL = 67,
    SEC_OID_NS_CERT_EXT_CA_CERT_URL = 68,
    SEC_OID_NS_CERT_EXT_CERT_RENEWAL_URL = 69,
    SEC_OID_NS_CERT_EXT_CA_POLICY_URL = 70,
    SEC_OID_NS_CERT_EXT_HOMEPAGE_URL = 71,
    SEC_OID_NS_CERT_EXT_ENTITY_LOGO = 72,
    SEC_OID_NS_CERT_EXT_USER_PICTURE = 73,
    SEC_OID_NS_CERT_EXT_SSL_SERVER_NAME = 74,
    SEC_OID_NS_CERT_EXT_COMMENT = 75,
    SEC_OID_NS_CERT_EXT_LOST_PASSWORD_URL = 76,
    SEC_OID_NS_CERT_EXT_CERT_RENEWAL_TIME = 77,
    SEC_OID_NS_KEY_USAGE_GOVT_APPROVED = 78,


    SEC_OID_X509_SUBJECT_DIRECTORY_ATTR = 79,
    SEC_OID_X509_SUBJECT_KEY_ID = 80,
    SEC_OID_X509_KEY_USAGE = 81,
    SEC_OID_X509_PRIVATE_KEY_USAGE_PERIOD = 82,
    SEC_OID_X509_SUBJECT_ALT_NAME = 83,
    SEC_OID_X509_ISSUER_ALT_NAME = 84,
    SEC_OID_X509_BASIC_CONSTRAINTS = 85,
    SEC_OID_X509_NAME_CONSTRAINTS = 86,
    SEC_OID_X509_CRL_DIST_POINTS = 87,
    SEC_OID_X509_CERTIFICATE_POLICIES = 88,
    SEC_OID_X509_POLICY_MAPPINGS = 89,
    SEC_OID_X509_POLICY_CONSTRAINTS = 90,
    SEC_OID_X509_AUTH_KEY_ID = 91,
    SEC_OID_X509_EXT_KEY_USAGE = 92,
    SEC_OID_X509_AUTH_INFO_ACCESS = 93,

    SEC_OID_X509_CRL_NUMBER = 94,
    SEC_OID_X509_REASON_CODE = 95,
    SEC_OID_X509_INVALID_DATE = 96,


    SEC_OID_X500_RSA_ENCRYPTION = 97,


    SEC_OID_RFC1274_UID = 98,
    SEC_OID_RFC1274_MAIL = 99,


    SEC_OID_PKCS12 = 100,
    SEC_OID_PKCS12_MODE_IDS = 101,
    SEC_OID_PKCS12_ESPVK_IDS = 102,
    SEC_OID_PKCS12_BAG_IDS = 103,
    SEC_OID_PKCS12_CERT_BAG_IDS = 104,
    SEC_OID_PKCS12_OIDS = 105,
    SEC_OID_PKCS12_PBE_IDS = 106,
    SEC_OID_PKCS12_SIGNATURE_IDS = 107,
    SEC_OID_PKCS12_ENVELOPING_IDS = 108,


    SEC_OID_PKCS12_PKCS8_KEY_SHROUDING = 109,
    SEC_OID_PKCS12_KEY_BAG_ID = 110,
    SEC_OID_PKCS12_CERT_AND_CRL_BAG_ID = 111,
    SEC_OID_PKCS12_SECRET_BAG_ID = 112,
    SEC_OID_PKCS12_X509_CERT_CRL_BAG = 113,
    SEC_OID_PKCS12_SDSI_CERT_BAG = 114,
    SEC_OID_PKCS12_PBE_WITH_SHA1_AND_128_BIT_RC4 = 115,
    SEC_OID_PKCS12_PBE_WITH_SHA1_AND_40_BIT_RC4 = 116,
    SEC_OID_PKCS12_PBE_WITH_SHA1_AND_TRIPLE_DES_CBC = 117,
    SEC_OID_PKCS12_PBE_WITH_SHA1_AND_128_BIT_RC2_CBC = 118,
    SEC_OID_PKCS12_PBE_WITH_SHA1_AND_40_BIT_RC2_CBC = 119,
    SEC_OID_PKCS12_RSA_ENCRYPTION_WITH_128_BIT_RC4 = 120,
    SEC_OID_PKCS12_RSA_ENCRYPTION_WITH_40_BIT_RC4 = 121,
    SEC_OID_PKCS12_RSA_ENCRYPTION_WITH_TRIPLE_DES = 122,
    SEC_OID_PKCS12_RSA_SIGNATURE_WITH_SHA1_DIGEST = 123,



    SEC_OID_ANSIX9_DSA_SIGNATURE = 124,
    SEC_OID_ANSIX9_DSA_SIGNATURE_WITH_SHA1_DIGEST = 125,
    SEC_OID_BOGUS_DSA_SIGNATURE_WITH_SHA1_DIGEST = 126,


    SEC_OID_VERISIGN_USER_NOTICES = 127,


    SEC_OID_PKIX_CPS_POINTER_QUALIFIER = 128,
    SEC_OID_PKIX_USER_NOTICE_QUALIFIER = 129,
    SEC_OID_PKIX_OCSP = 130,
    SEC_OID_PKIX_OCSP_BASIC_RESPONSE = 131,
    SEC_OID_PKIX_OCSP_NONCE = 132,
    SEC_OID_PKIX_OCSP_CRL = 133,
    SEC_OID_PKIX_OCSP_RESPONSE = 134,
    SEC_OID_PKIX_OCSP_NO_CHECK = 135,
    SEC_OID_PKIX_OCSP_ARCHIVE_CUTOFF = 136,
    SEC_OID_PKIX_OCSP_SERVICE_LOCATOR = 137,
    SEC_OID_PKIX_REGCTRL_REGTOKEN = 138,
    SEC_OID_PKIX_REGCTRL_AUTHENTICATOR = 139,
    SEC_OID_PKIX_REGCTRL_PKIPUBINFO = 140,
    SEC_OID_PKIX_REGCTRL_PKI_ARCH_OPTIONS = 141,
    SEC_OID_PKIX_REGCTRL_OLD_CERT_ID = 142,
    SEC_OID_PKIX_REGCTRL_PROTOCOL_ENC_KEY = 143,
    SEC_OID_PKIX_REGINFO_UTF8_PAIRS = 144,
    SEC_OID_PKIX_REGINFO_CERT_REQUEST = 145,
    SEC_OID_EXT_KEY_USAGE_SERVER_AUTH = 146,
    SEC_OID_EXT_KEY_USAGE_CLIENT_AUTH = 147,
    SEC_OID_EXT_KEY_USAGE_CODE_SIGN = 148,
    SEC_OID_EXT_KEY_USAGE_EMAIL_PROTECT = 149,
    SEC_OID_EXT_KEY_USAGE_TIME_STAMP = 150,
    SEC_OID_OCSP_RESPONDER = 151,


    SEC_OID_NETSCAPE_SMIME_KEA = 152,


    SEC_OID_FORTEZZA_SKIPJACK = 153,


    SEC_OID_PKCS12_V2_PBE_WITH_SHA1_AND_128_BIT_RC4 = 154,
    SEC_OID_PKCS12_V2_PBE_WITH_SHA1_AND_40_BIT_RC4 = 155,
    SEC_OID_PKCS12_V2_PBE_WITH_SHA1_AND_3KEY_TRIPLE_DES_CBC = 156,
    SEC_OID_PKCS12_V2_PBE_WITH_SHA1_AND_2KEY_TRIPLE_DES_CBC = 157,
    SEC_OID_PKCS12_V2_PBE_WITH_SHA1_AND_128_BIT_RC2_CBC = 158,
    SEC_OID_PKCS12_V2_PBE_WITH_SHA1_AND_40_BIT_RC2_CBC = 159,
    SEC_OID_PKCS12_SAFE_CONTENTS_ID = 160,
    SEC_OID_PKCS12_PKCS8_SHROUDED_KEY_BAG_ID = 161,

    SEC_OID_PKCS12_V1_KEY_BAG_ID = 162,
    SEC_OID_PKCS12_V1_PKCS8_SHROUDED_KEY_BAG_ID = 163,
    SEC_OID_PKCS12_V1_CERT_BAG_ID = 164,
    SEC_OID_PKCS12_V1_CRL_BAG_ID = 165,
    SEC_OID_PKCS12_V1_SECRET_BAG_ID = 166,
    SEC_OID_PKCS12_V1_SAFE_CONTENTS_BAG_ID = 167,
    SEC_OID_PKCS9_X509_CERT = 168,
    SEC_OID_PKCS9_SDSI_CERT = 169,
    SEC_OID_PKCS9_X509_CRL = 170,
    SEC_OID_PKCS9_FRIENDLY_NAME = 171,
    SEC_OID_PKCS9_LOCAL_KEY_ID = 172,
    SEC_OID_PKCS12_KEY_USAGE = 173,


    SEC_OID_X942_DIFFIE_HELMAN_KEY = 174,


    SEC_OID_NETSCAPE_NICKNAME = 175,


    SEC_OID_NETSCAPE_RECOVERY_REQUEST = 176,


    SEC_OID_CERT_RENEWAL_LOCATOR = 177,
    SEC_OID_NS_CERT_EXT_SCOPE_OF_USE = 178,


    SEC_OID_CMS_EPHEMERAL_STATIC_DIFFIE_HELLMAN = 179,
    SEC_OID_CMS_3DES_KEY_WRAP = 180,
    SEC_OID_CMS_RC2_KEY_WRAP = 181,


    SEC_OID_SMIME_ENCRYPTION_KEY_PREFERENCE = 182,

    SEC_OID_TOTAL
} SECOidTag;




typedef enum {
    INVALID_CERT_EXTENSION = 0,
    UNSUPPORTED_CERT_EXTENSION = 1,
    SUPPORTED_CERT_EXTENSION = 2
} SECSupportExtenTag;

struct SECOidDataStr {
    SECItem oid;
    SECOidTag offset;
    char *desc;
    unsigned long mechanism;
    SECSupportExtenTag supportedExtension;


};
# 46 "../../../../dist/public/security/secoid.h" 2
# 1 "../../../../dist/public/security/secasn1t.h" 1
# 53 "../../../../dist/public/security/secasn1t.h"
typedef struct sec_ASN1Template_struct {



    unsigned long kind;





    unsigned long offset;
# 76 "../../../../dist/public/security/secasn1t.h"
    const void *sub;







    unsigned int size;
} SEC_ASN1Template;
# 200 "../../../../dist/public/security/secasn1t.h"
typedef const SEC_ASN1Template * SEC_ASN1TemplateChooser(void *arg, PRBool enc);
typedef SEC_ASN1TemplateChooser * SEC_ASN1TemplateChooserPtr;
# 226 "../../../../dist/public/security/secasn1t.h"
typedef struct sec_DecoderContext_struct SEC_ASN1DecoderContext;




typedef struct sec_EncoderContext_struct SEC_ASN1EncoderContext;







typedef enum {
    SEC_ASN1_Identifier = 0,
    SEC_ASN1_Length = 1,
    SEC_ASN1_Contents = 2,
    SEC_ASN1_EndOfContents = 3
} SEC_ASN1EncodingPart;





typedef void (* SEC_ASN1NotifyProc)(void *arg, PRBool before,
                                    void *dest, int real_depth);
# 283 "../../../../dist/public/security/secasn1t.h"
typedef void (* SEC_ASN1WriteProc)(void *arg,
                                   const char *data, unsigned long len,
                                   int depth, SEC_ASN1EncodingPart data_kind);
# 47 "../../../../dist/public/security/secoid.h" 2



extern const SEC_ASN1Template SECOID_AlgorithmIDTemplate[];


extern const SEC_ASN1Template * NSS_Get_SECOID_AlgorithmIDTemplate (void *arg, PRBool enc);




extern SECOidData *SECOID_FindOID(SECItem *oid);
extern SECOidTag SECOID_FindOIDTag(SECItem *oid);
extern SECOidData *SECOID_FindOIDByTag(SECOidTag tagnum);
extern SECOidData *SECOID_FindOIDByMechanism(unsigned long mechanism);
# 75 "../../../../dist/public/security/secoid.h"
extern SECStatus SECOID_SetAlgorithmID(PLArenaPool *arena, SECAlgorithmID *aid,
                                   SECOidTag tag, SECItem *params);







extern SECStatus SECOID_CopyAlgorithmID(PLArenaPool *arena, SECAlgorithmID *dest,
                                    SECAlgorithmID *src);




extern SECOidTag SECOID_GetAlgorithmTag(SECAlgorithmID *aid);






extern void SECOID_DestroyAlgorithmID(SECAlgorithmID *aid, PRBool freeit);





extern SECComparison SECOID_CompareAlgorithmID(SECAlgorithmID *a,
                                           SECAlgorithmID *b);

extern PRBool SECOID_KnownCertExtenOID (SECItem *extenOid);



extern const char *SECOID_FindOIDTagDescription(SECOidTag tagnum);
# 38 "p12t.h" 2
# 1 "../../../../dist/public/security/key.h" 1
# 41 "../../../../dist/public/security/key.h"
# 1 "../../../../dist/public/security/keyhi.h" 1
# 42 "../../../../dist/public/security/keyhi.h"
# 1 "/home/nisse/hack/mozilla/dist/include/nspr/plarena.h" 1
# 43 "../../../../dist/public/security/keyhi.h" 2

# 1 "../../../../dist/public/security/seccomon.h" 1
# 45 "../../../../dist/public/security/keyhi.h" 2
# 1 "../../../../dist/public/security/secoidt.h" 1
# 46 "../../../../dist/public/security/keyhi.h" 2
# 1 "../../../../dist/public/security/secdert.h" 1
# 43 "../../../../dist/public/security/secdert.h"
typedef struct DERTemplateStr DERTemplate;
# 53 "../../../../dist/public/security/secdert.h"
struct DERTemplateStr {



    unsigned long kind;





    unsigned int offset;





    DERTemplate *sub;
# 82 "../../../../dist/public/security/secdert.h"
    unsigned long arg;
};
# 157 "../../../../dist/public/security/secdert.h"
extern DERTemplate SECAnyTemplate[];
extern DERTemplate SECBitStringTemplate[];
extern DERTemplate SECBooleanTemplate[];
extern DERTemplate SECIA5StringTemplate[];
extern DERTemplate SECIntegerTemplate[];
extern DERTemplate SECNullTemplate[];
extern DERTemplate SECObjectIDTemplate[];
extern DERTemplate SECOctetStringTemplate[];
extern DERTemplate SECPrintableStringTemplate[];
extern DERTemplate SECT61StringTemplate[];
extern DERTemplate SECUTCTimeTemplate[];
extern DERTemplate SECAlgorithmIDTemplate[];
# 47 "../../../../dist/public/security/keyhi.h" 2
# 1 "../../../../dist/public/security/keythi.h" 1
# 36 "../../../../dist/public/security/keythi.h"
# 1 "../../../../dist/public/security/keytlow.h" 1
# 36 "../../../../dist/public/security/keytlow.h"
# 1 "../../../../dist/public/security/blapit.h" 1
# 41 "../../../../dist/public/security/blapit.h"
# 1 "../../../../dist/public/security/seccomon.h" 1
# 42 "../../../../dist/public/security/blapit.h" 2
# 1 "/home/nisse/hack/mozilla/dist/include/nspr/plarena.h" 1
# 43 "../../../../dist/public/security/blapit.h" 2
# 115 "../../../../dist/public/security/blapit.h"
struct DESContextStr ;
struct RC2ContextStr ;
struct RC4ContextStr ;
struct RC5ContextStr ;
struct AESContextStr ;
struct MD2ContextStr ;
struct MD5ContextStr ;
struct SHA1ContextStr ;

typedef struct DESContextStr DESContext;
typedef struct RC2ContextStr RC2Context;
typedef struct RC4ContextStr RC4Context;
typedef struct RC5ContextStr RC5Context;
typedef struct AESContextStr AESContext;
typedef struct MD2ContextStr MD2Context;
typedef struct MD5ContextStr MD5Context;
typedef struct SHA1ContextStr SHA1Context;






struct RSAPublicKeyStr {
    PLArenaPool * arena;
    SECItem modulus;
    SECItem publicExponent;
};
typedef struct RSAPublicKeyStr RSAPublicKey;


struct RSAPrivateKeyStr {
    PLArenaPool * arena;
    SECItem version;
    SECItem modulus;
    SECItem publicExponent;
    SECItem privateExponent;
    SECItem prime1;
    SECItem prime2;
    SECItem exponent1;
    SECItem exponent2;
    SECItem coefficient;
};
typedef struct RSAPrivateKeyStr RSAPrivateKey;






struct PQGParamsStr {
    PLArenaPool *arena;
    SECItem prime;
    SECItem subPrime;
    SECItem base;

};
typedef struct PQGParamsStr PQGParams;

struct PQGVerifyStr {
    PLArenaPool * arena;
    unsigned int counter;
    SECItem seed;
    SECItem h;
};
typedef struct PQGVerifyStr PQGVerify;

struct DSAPublicKeyStr {
    PQGParams params;
    SECItem publicValue;
};
typedef struct DSAPublicKeyStr DSAPublicKey;

struct DSAPrivateKeyStr {
    PQGParams params;
    SECItem publicValue;
    SECItem privateValue;
};
typedef struct DSAPrivateKeyStr DSAPrivateKey;






struct DHParamsStr {
    PLArenaPool * arena;
    SECItem prime;
    SECItem base;
};
typedef struct DHParamsStr DHParams;

struct DHPublicKeyStr {
    PLArenaPool * arena;
    SECItem prime;
    SECItem base;
    SECItem publicValue;
};
typedef struct DHPublicKeyStr DHPublicKey;

struct DHPrivateKeyStr {
    PLArenaPool * arena;
    SECItem prime;
    SECItem base;
    SECItem publicValue;
    SECItem privateValue;
};
typedef struct DHPrivateKeyStr DHPrivateKey;
# 37 "../../../../dist/public/security/keytlow.h" 2

typedef enum {
    nullKey = 0,
    rsaKey = 1,
    dsaKey = 2,
    fortezzaKey = 3,
    dhKey = 4,
    keaKey = 5
} KeyType;

struct FortezzaPublicKeyStr {
    int KEAversion;
    int DSSversion;
    unsigned char KMID[8];
    SECItem clearance;
    SECItem KEApriviledge;
    SECItem DSSpriviledge;
    SECItem KEAKey;
    SECItem DSSKey;
    PQGParams params;
    PQGParams keaParams;
};
typedef struct FortezzaPublicKeyStr FortezzaPublicKey;

struct FortezzaPrivateKeyStr {
     int certificate;
     unsigned char serial[8];
     int socket;
};
typedef struct FortezzaPrivateKeyStr FortezzaPrivateKey;




struct SECKEYLowPublicKeyStr {
    PLArenaPool *arena;
    KeyType keyType ;
    union {
        RSAPublicKey rsa;
        DSAPublicKey dsa;
        DHPublicKey dh;
    } u;
};
typedef struct SECKEYLowPublicKeyStr SECKEYLowPublicKey;






struct SECKEYLowPrivateKeyStr {
    PLArenaPool *arena;
    KeyType keyType;
    union {
        RSAPrivateKey rsa;
        DSAPrivateKey dsa;
        DHPrivateKey dh;
        FortezzaPrivateKey fortezza;

    } u;
};
typedef struct SECKEYLowPrivateKeyStr SECKEYLowPrivateKey;
# 37 "../../../../dist/public/security/keythi.h" 2
# 1 "../../../../dist/public/security/keytboth.h" 1
# 36 "../../../../dist/public/security/keytboth.h"
# 1 "../../../../dist/public/security/blapit.h" 1
# 37 "../../../../dist/public/security/keytboth.h" 2
# 1 "../../../../dist/public/security/secoidt.h" 1
# 38 "../../../../dist/public/security/keytboth.h" 2




struct SECKEYAttributeStr {
    SECItem attrType;
    SECItem **attrValue;
};
typedef struct SECKEYAttributeStr SECKEYAttribute;




struct SECKEYPrivateKeyInfoStr {
    PLArenaPool *arena;
    SECItem version;
    SECAlgorithmID algorithm;
    SECItem privateKey;
    SECKEYAttribute **attributes;
};
typedef struct SECKEYPrivateKeyInfoStr SECKEYPrivateKeyInfo;





struct SECKEYEncryptedPrivateKeyInfoStr {
    PLArenaPool *arena;
    SECAlgorithmID algorithm;
    SECItem encryptedData;
};
typedef struct SECKEYEncryptedPrivateKeyInfoStr SECKEYEncryptedPrivateKeyInfo;


struct DiffPQGParamsStr {
    PQGParams DiffKEAParams;
    PQGParams DiffDSAParams;
};
typedef struct DiffPQGParamsStr DiffPQGParams;

struct PQGDualParamsStr {
    PQGParams CommParams;
    DiffPQGParams DiffParams;
};
typedef struct PQGDualParamsStr PQGDualParams;


struct KEAParamsStr {
    PLArenaPool *arena;
    SECItem hash;
};
typedef struct KEAParamsStr KEAParams;

struct KEAPublicKeyStr {
    KEAParams params;
    SECItem publicValue;
};
typedef struct KEAPublicKeyStr KEAPublicKey;
# 38 "../../../../dist/public/security/keythi.h" 2
# 1 "/home/nisse/hack/mozilla/dist/include/nspr/plarena.h" 1
# 39 "../../../../dist/public/security/keythi.h" 2
# 1 "../../../../dist/public/security/pkcs11t.h" 1
# 56 "../../../../dist/public/security/pkcs11t.h"
# 1 "/home/nisse/hack/mozilla/dist/include/nspr/prtypes.h" 1
# 57 "../../../../dist/public/security/pkcs11t.h" 2
# 65 "../../../../dist/public/security/pkcs11t.h"
typedef unsigned char CK_BYTE;


typedef CK_BYTE CK_CHAR;


typedef CK_BYTE CK_BBOOL;


typedef unsigned long int CK_ULONG;



typedef long int CK_LONG;


typedef CK_ULONG CK_FLAGS;







typedef CK_BYTE * CK_BYTE_PTR;
typedef CK_CHAR * CK_CHAR_PTR;
typedef CK_ULONG * CK_ULONG_PTR;
typedef void * CK_VOID_PTR;


typedef CK_VOID_PTR * CK_VOID_PTR_PTR;
# 104 "../../../../dist/public/security/pkcs11t.h"
# 1 "../../../../dist/public/security/pkcs11p.h" 1
# 105 "../../../../dist/public/security/pkcs11t.h" 2

typedef struct CK_VERSION {
  CK_BYTE major;
  CK_BYTE minor;
} CK_VERSION;

typedef CK_VERSION * CK_VERSION_PTR;


typedef struct CK_INFO {
  CK_VERSION cryptokiVersion;
  CK_CHAR manufacturerID[32];
  CK_FLAGS flags;


  CK_CHAR libraryDescription[32];
  CK_VERSION libraryVersion;
} CK_INFO;

typedef CK_INFO * CK_INFO_PTR;






typedef CK_ULONG CK_NOTIFICATION;



typedef CK_ULONG CK_SLOT_ID;

typedef CK_SLOT_ID * CK_SLOT_ID_PTR;



typedef struct CK_SLOT_INFO {
  CK_CHAR slotDescription[64];
  CK_CHAR manufacturerID[32];
  CK_FLAGS flags;


  CK_VERSION hardwareVersion;
  CK_VERSION firmwareVersion;
} CK_SLOT_INFO;
# 158 "../../../../dist/public/security/pkcs11t.h"
typedef CK_SLOT_INFO * CK_SLOT_INFO_PTR;



typedef struct CK_TOKEN_INFO {
  CK_CHAR label[32];
  CK_CHAR manufacturerID[32];
  CK_CHAR model[16];
  CK_CHAR serialNumber[16];
  CK_FLAGS flags;




  CK_ULONG ulMaxSessionCount;
  CK_ULONG ulSessionCount;
  CK_ULONG ulMaxRwSessionCount;
  CK_ULONG ulRwSessionCount;
  CK_ULONG ulMaxPinLen;
  CK_ULONG ulMinPinLen;
  CK_ULONG ulTotalPublicMemory;
  CK_ULONG ulFreePublicMemory;
  CK_ULONG ulTotalPrivateMemory;
  CK_ULONG ulFreePrivateMemory;



  CK_VERSION hardwareVersion;
  CK_VERSION firmwareVersion;
  CK_CHAR utcTime[16];
} CK_TOKEN_INFO;
# 226 "../../../../dist/public/security/pkcs11t.h"
typedef CK_TOKEN_INFO * CK_TOKEN_INFO_PTR;




typedef CK_ULONG CK_SESSION_HANDLE;

typedef CK_SESSION_HANDLE * CK_SESSION_HANDLE_PTR;





typedef CK_ULONG CK_USER_TYPE;
# 249 "../../../../dist/public/security/pkcs11t.h"
typedef CK_ULONG CK_STATE;
# 258 "../../../../dist/public/security/pkcs11t.h"
typedef struct CK_SESSION_INFO {
  CK_SLOT_ID slotID;
  CK_STATE state;
  CK_FLAGS flags;



  CK_ULONG ulDeviceError;
} CK_SESSION_INFO;







typedef CK_SESSION_INFO * CK_SESSION_INFO_PTR;




typedef CK_ULONG CK_OBJECT_HANDLE;

typedef CK_OBJECT_HANDLE * CK_OBJECT_HANDLE_PTR;







typedef CK_ULONG CK_OBJECT_CLASS;
# 299 "../../../../dist/public/security/pkcs11t.h"
typedef CK_OBJECT_CLASS * CK_OBJECT_CLASS_PTR;




typedef CK_ULONG CK_KEY_TYPE;
# 347 "../../../../dist/public/security/pkcs11t.h"
typedef CK_ULONG CK_CERTIFICATE_TYPE;
# 358 "../../../../dist/public/security/pkcs11t.h"
typedef CK_ULONG CK_ATTRIBUTE_TYPE;
# 413 "../../../../dist/public/security/pkcs11t.h"
typedef struct CK_ATTRIBUTE {
  CK_ATTRIBUTE_TYPE type;
  CK_VOID_PTR pValue;


  CK_ULONG ulValueLen;
} CK_ATTRIBUTE;

typedef CK_ATTRIBUTE * CK_ATTRIBUTE_PTR;



typedef struct CK_DATE{
  CK_CHAR year[4];
  CK_CHAR month[2];
  CK_CHAR day[2];
} CK_DATE;






typedef CK_ULONG CK_MECHANISM_TYPE;
# 626 "../../../../dist/public/security/pkcs11t.h"
typedef CK_MECHANISM_TYPE * CK_MECHANISM_TYPE_PTR;




typedef struct CK_MECHANISM {
  CK_MECHANISM_TYPE mechanism;
  CK_VOID_PTR pParameter;



  CK_ULONG ulParameterLen;
} CK_MECHANISM;

typedef CK_MECHANISM * CK_MECHANISM_PTR;




typedef struct CK_MECHANISM_INFO {
    CK_ULONG ulMinKeySize;
    CK_ULONG ulMaxKeySize;
    CK_FLAGS flags;
} CK_MECHANISM_INFO;
# 675 "../../../../dist/public/security/pkcs11t.h"
typedef CK_MECHANISM_INFO * CK_MECHANISM_INFO_PTR;





typedef CK_ULONG CK_RV;
# 809 "../../../../dist/public/security/pkcs11t.h"
typedef CK_RV ( * CK_NOTIFY)(
  CK_SESSION_HANDLE hSession,
  CK_NOTIFICATION event,
  CK_VOID_PTR pApplication
);






typedef struct CK_FUNCTION_LIST CK_FUNCTION_LIST;

typedef CK_FUNCTION_LIST * CK_FUNCTION_LIST_PTR;

typedef CK_FUNCTION_LIST_PTR * CK_FUNCTION_LIST_PTR_PTR;




typedef CK_RV ( * CK_CREATEMUTEX)(
  CK_VOID_PTR_PTR ppMutex
);




typedef CK_RV ( * CK_DESTROYMUTEX)(
  CK_VOID_PTR pMutex
);



typedef CK_RV ( * CK_LOCKMUTEX)(
  CK_VOID_PTR pMutex
);




typedef CK_RV ( * CK_UNLOCKMUTEX)(
  CK_VOID_PTR pMutex
);




typedef struct CK_C_INITIALIZE_ARGS {
  CK_CREATEMUTEX CreateMutex;
  CK_DESTROYMUTEX DestroyMutex;
  CK_LOCKMUTEX LockMutex;
  CK_UNLOCKMUTEX UnlockMutex;
  CK_FLAGS flags;
  CK_VOID_PTR pReserved;
} CK_C_INITIALIZE_ARGS;







typedef CK_C_INITIALIZE_ARGS * CK_C_INITIALIZE_ARGS_PTR;
# 883 "../../../../dist/public/security/pkcs11t.h"
typedef struct CK_KEA_DERIVE_PARAMS {
  CK_BBOOL isSender;
  CK_ULONG ulRandomLen;
  CK_BYTE_PTR pRandomA;
  CK_BYTE_PTR pRandomB;
  CK_ULONG ulPublicDataLen;
  CK_BYTE_PTR pPublicData;
} CK_KEA_DERIVE_PARAMS;

typedef CK_KEA_DERIVE_PARAMS * CK_KEA_DERIVE_PARAMS_PTR;





typedef CK_ULONG CK_RC2_PARAMS;

typedef CK_RC2_PARAMS * CK_RC2_PARAMS_PTR;




typedef struct CK_RC2_CBC_PARAMS {


  CK_ULONG ulEffectiveBits;

  CK_BYTE iv[8];
} CK_RC2_CBC_PARAMS;

typedef CK_RC2_CBC_PARAMS * CK_RC2_CBC_PARAMS_PTR;





typedef struct CK_RC2_MAC_GENERAL_PARAMS {
  CK_ULONG ulEffectiveBits;
  CK_ULONG ulMacLength;
} CK_RC2_MAC_GENERAL_PARAMS;

typedef CK_RC2_MAC_GENERAL_PARAMS * CK_RC2_MAC_GENERAL_PARAMS_PTR;






typedef struct CK_RC5_PARAMS {
  CK_ULONG ulWordsize;
  CK_ULONG ulRounds;
} CK_RC5_PARAMS;

typedef CK_RC5_PARAMS * CK_RC5_PARAMS_PTR;





typedef struct CK_RC5_CBC_PARAMS {
  CK_ULONG ulWordsize;
  CK_ULONG ulRounds;
  CK_BYTE_PTR pIv;
  CK_ULONG ulIvLen;
} CK_RC5_CBC_PARAMS;

typedef CK_RC5_CBC_PARAMS * CK_RC5_CBC_PARAMS_PTR;





typedef struct CK_RC5_MAC_GENERAL_PARAMS {
  CK_ULONG ulWordsize;
  CK_ULONG ulRounds;
  CK_ULONG ulMacLength;
} CK_RC5_MAC_GENERAL_PARAMS;

typedef CK_RC5_MAC_GENERAL_PARAMS * CK_RC5_MAC_GENERAL_PARAMS_PTR;







typedef CK_ULONG CK_MAC_GENERAL_PARAMS;

typedef CK_MAC_GENERAL_PARAMS * CK_MAC_GENERAL_PARAMS_PTR;





typedef struct CK_SKIPJACK_PRIVATE_WRAP_PARAMS {
  CK_ULONG ulPasswordLen;
  CK_BYTE_PTR pPassword;
  CK_ULONG ulPublicDataLen;
  CK_BYTE_PTR pPublicData;
  CK_ULONG ulPAndGLen;
  CK_ULONG ulQLen;
  CK_ULONG ulRandomLen;
  CK_BYTE_PTR pRandomA;
  CK_BYTE_PTR pPrimeP;
  CK_BYTE_PTR pBaseG;
  CK_BYTE_PTR pSubprimeQ;
} CK_SKIPJACK_PRIVATE_WRAP_PARAMS;

typedef CK_SKIPJACK_PRIVATE_WRAP_PARAMS * CK_SKIPJACK_PRIVATE_WRAP_PTR;






typedef struct CK_SKIPJACK_RELAYX_PARAMS {
  CK_ULONG ulOldWrappedXLen;
  CK_BYTE_PTR pOldWrappedX;
  CK_ULONG ulOldPasswordLen;
  CK_BYTE_PTR pOldPassword;
  CK_ULONG ulOldPublicDataLen;
  CK_BYTE_PTR pOldPublicData;
  CK_ULONG ulOldRandomLen;
  CK_BYTE_PTR pOldRandomA;
  CK_ULONG ulNewPasswordLen;
  CK_BYTE_PTR pNewPassword;
  CK_ULONG ulNewPublicDataLen;
  CK_BYTE_PTR pNewPublicData;
  CK_ULONG ulNewRandomLen;
  CK_BYTE_PTR pNewRandomA;
} CK_SKIPJACK_RELAYX_PARAMS;

typedef CK_SKIPJACK_RELAYX_PARAMS * CK_SKIPJACK_RELAYX_PARAMS_PTR;



typedef struct CK_PBE_PARAMS {
  CK_CHAR_PTR pInitVector;
  CK_CHAR_PTR pPassword;
  CK_ULONG ulPasswordLen;
  CK_CHAR_PTR pSalt;
  CK_ULONG ulSaltLen;
  CK_ULONG ulIteration;
} CK_PBE_PARAMS;

typedef CK_PBE_PARAMS * CK_PBE_PARAMS_PTR;





typedef struct CK_KEY_WRAP_SET_OAEP_PARAMS {
  CK_BYTE bBC;
  CK_BYTE_PTR pX;
  CK_ULONG ulXLen;
} CK_KEY_WRAP_SET_OAEP_PARAMS;

typedef CK_KEY_WRAP_SET_OAEP_PARAMS * CK_KEY_WRAP_SET_OAEP_PARAMS_PTR;



typedef struct CK_SSL3_RANDOM_DATA {
  CK_BYTE_PTR pClientRandom;
  CK_ULONG ulClientRandomLen;
  CK_BYTE_PTR pServerRandom;
  CK_ULONG ulServerRandomLen;
} CK_SSL3_RANDOM_DATA;


typedef struct CK_SSL3_MASTER_KEY_DERIVE_PARAMS {
  CK_SSL3_RANDOM_DATA RandomInfo;
  CK_VERSION_PTR pVersion;
} CK_SSL3_MASTER_KEY_DERIVE_PARAMS;

typedef struct CK_SSL3_MASTER_KEY_DERIVE_PARAMS * CK_SSL3_MASTER_KEY_DERIVE_PARAMS_PTR;



typedef struct CK_SSL3_KEY_MAT_OUT {
  CK_OBJECT_HANDLE hClientMacSecret;
  CK_OBJECT_HANDLE hServerMacSecret;
  CK_OBJECT_HANDLE hClientKey;
  CK_OBJECT_HANDLE hServerKey;
  CK_BYTE_PTR pIVClient;
  CK_BYTE_PTR pIVServer;
} CK_SSL3_KEY_MAT_OUT;

typedef CK_SSL3_KEY_MAT_OUT * CK_SSL3_KEY_MAT_OUT_PTR;


typedef struct CK_SSL3_KEY_MAT_PARAMS {
  CK_ULONG ulMacSizeInBits;
  CK_ULONG ulKeySizeInBits;
  CK_ULONG ulIVSizeInBits;
  CK_BBOOL bIsExport;
  CK_SSL3_RANDOM_DATA RandomInfo;
  CK_SSL3_KEY_MAT_OUT_PTR pReturnedKeyMaterial;
} CK_SSL3_KEY_MAT_PARAMS;

typedef CK_SSL3_KEY_MAT_PARAMS * CK_SSL3_KEY_MAT_PARAMS_PTR;


typedef struct CK_KEY_DERIVATION_STRING_DATA {
  CK_BYTE_PTR pData;
  CK_ULONG ulLen;
} CK_KEY_DERIVATION_STRING_DATA;

typedef CK_KEY_DERIVATION_STRING_DATA * CK_KEY_DERIVATION_STRING_DATA_PTR;
# 1099 "../../../../dist/public/security/pkcs11t.h"
typedef CK_ULONG CK_EXTRACT_PARAMS;

typedef CK_EXTRACT_PARAMS * CK_EXTRACT_PARAMS_PTR;
# 1129 "../../../../dist/public/security/pkcs11t.h"
# 1 "../../../../dist/public/security/pkcs11u.h" 1
# 1130 "../../../../dist/public/security/pkcs11t.h" 2
# 40 "../../../../dist/public/security/keythi.h" 2
# 1 "../../../../dist/public/security/secmodt.h" 1
# 40 "../../../../dist/public/security/secmodt.h"
typedef struct SECMODModuleStr SECMODModule;
typedef struct SECMODModuleListStr SECMODModuleList;
typedef struct SECMODListLockStr SECMODListLock;
typedef struct PK11SlotInfoStr PK11SlotInfo;
typedef struct PK11PreSlotInfoStr PK11PreSlotInfo;
typedef struct PK11SymKeyStr PK11SymKey;
typedef struct PK11ContextStr PK11Context;
typedef struct PK11SlotListStr PK11SlotList;
typedef struct PK11SlotListElementStr PK11SlotListElement;
typedef struct PK11RSAGenParamsStr PK11RSAGenParams;
typedef unsigned long SECMODModuleID;
typedef struct PK11DefaultArrayEntryStr PK11DefaultArrayEntry;

struct SECMODModuleStr {
    PLArenaPool *arena;
    PRBool internal;

    PRBool loaded;
    PRBool isFIPS;
    char *dllName;

    char *commonName;
    void *library;

    void *functionList;
    void *refLock;
    int refCount;
    PK11SlotInfo **slots;
    int slotCount;
    PK11PreSlotInfo *slotInfo;
    int slotInfoCount;
    SECMODModuleID moduleID;
    PRBool isThreadSafe;
    unsigned long ssl[2];
};

struct SECMODModuleListStr {
    SECMODModuleList *next;
    SECMODModule *module;
};

struct PK11SlotListStr {
    PK11SlotListElement *head;
    PK11SlotListElement *tail;
    void *lock;
};

struct PK11SlotListElementStr {
    PK11SlotListElement *next;
    PK11SlotListElement *prev;
    PK11SlotInfo *slot;
    int refCount;
};

struct PK11RSAGenParamsStr {
    int keySizeInBits;
    unsigned long pe;
};

typedef enum {
     PK11CertListUnique = 0,
     PK11CertListUser = 1,
     PK11CertListRootUnique = 2,
     PK11CertListCA = 3
} PK11CertListType;






struct PK11DefaultArrayEntryStr {
    char *name;
    unsigned long flag;
    unsigned long mechanism;

};
# 159 "../../../../dist/public/security/secmodt.h"
typedef enum {
    PK11_OriginNULL = 0,
    PK11_OriginDerive = 1,
    PK11_OriginGenerated = 2,
    PK11_OriginFortezzaHack = 3,
    PK11_OriginUnwrap = 4
} PK11Origin;


typedef enum {
    PK11_DIS_NONE = 0,
    PK11_DIS_USER_SELECTED = 1,
    PK11_DIS_COULD_NOT_INIT_TOKEN = 2,
    PK11_DIS_TOKEN_VERIFY_FAILED = 3,
    PK11_DIS_TOKEN_NOT_PRESENT = 4
} PK11DisableReasons;




typedef char *(*PK11PasswordFunc)(PK11SlotInfo *slot, PRBool retry, void *arg);
typedef PRBool (*PK11VerifyPasswordFunc)(PK11SlotInfo *slot, void *arg);
typedef PRBool (*PK11IsLoggedInFunc)(PK11SlotInfo *slot, void *arg);
# 41 "../../../../dist/public/security/keythi.h" 2
# 1 "/home/nisse/hack/mozilla/dist/include/nspr/prclist.h" 1
# 38 "/home/nisse/hack/mozilla/dist/include/nspr/prclist.h"
# 1 "/home/nisse/hack/mozilla/dist/include/nspr/prtypes.h" 1
# 39 "/home/nisse/hack/mozilla/dist/include/nspr/prclist.h" 2

typedef struct PRCListStr PRCList;




struct PRCListStr {
    PRCList *next;
    PRCList *prev;
};
# 42 "../../../../dist/public/security/keythi.h" 2




struct SECKEYPublicKeyStr {
    PLArenaPool *arena;
    KeyType keyType;
    PK11SlotInfo *pkcs11Slot;
    CK_OBJECT_HANDLE pkcs11ID;
    union {
        RSAPublicKey rsa;
        DSAPublicKey dsa;
        DHPublicKey dh;
        KEAPublicKey kea;
        FortezzaPublicKey fortezza;
    } u;
};
typedef struct SECKEYPublicKeyStr SECKEYPublicKey;




struct SECKEYPrivateKeyStr {
    PLArenaPool *arena;
    KeyType keyType;
    PK11SlotInfo *pkcs11Slot;
    CK_OBJECT_HANDLE pkcs11ID;
    PRBool pkcs11IsTemp;
    void *wincx;
};
typedef struct SECKEYPrivateKeyStr SECKEYPrivateKey;




typedef struct {
    SECItem *pwitem;
    PK11SymKey *key;
    PK11SlotInfo *slot;
    void *wincx;
} SEC_PKCS5KeyAndPassword;

typedef struct {
    PRCList links;
    SECKEYPrivateKey *key;
} SECKEYPrivateKeyListNode;

typedef struct {
    PRCList list;
    PLArenaPool *arena;
} SECKEYPrivateKeyList;
# 48 "../../../../dist/public/security/keyhi.h" 2
# 1 "../../../../dist/public/security/certt.h" 1
# 41 "../../../../dist/public/security/certt.h"
# 1 "/home/nisse/hack/mozilla/dist/include/nspr/prclist.h" 1
# 42 "../../../../dist/public/security/certt.h" 2
# 1 "../../../../dist/public/security/pkcs11t.h" 1
# 43 "../../../../dist/public/security/certt.h" 2
# 1 "../../../../dist/public/security/seccomon.h" 1
# 44 "../../../../dist/public/security/certt.h" 2
# 1 "../../../../dist/public/security/secmodt.h" 1
# 45 "../../../../dist/public/security/certt.h" 2
# 1 "../../../../dist/public/security/secoidt.h" 1
# 46 "../../../../dist/public/security/certt.h" 2
# 1 "/home/nisse/hack/mozilla/dist/include/nspr/plarena.h" 1
# 47 "../../../../dist/public/security/certt.h" 2
# 1 "/home/nisse/hack/mozilla/dist/include/nspr/prcvar.h" 1
# 38 "/home/nisse/hack/mozilla/dist/include/nspr/prcvar.h"
# 1 "/home/nisse/hack/mozilla/dist/include/nspr/prlock.h" 1
# 48 "/home/nisse/hack/mozilla/dist/include/nspr/prlock.h"
# 1 "/home/nisse/hack/mozilla/dist/include/nspr/prtypes.h" 1
# 49 "/home/nisse/hack/mozilla/dist/include/nspr/prlock.h" 2
# 63 "/home/nisse/hack/mozilla/dist/include/nspr/prlock.h"
typedef struct PRLock PRLock;
# 80 "/home/nisse/hack/mozilla/dist/include/nspr/prlock.h"
extern PRLock* PR_NewLock(void);
# 91 "/home/nisse/hack/mozilla/dist/include/nspr/prlock.h"
extern void PR_DestroyLock(PRLock *lock);
# 102 "/home/nisse/hack/mozilla/dist/include/nspr/prlock.h"
extern void PR_Lock(PRLock *lock);
# 114 "/home/nisse/hack/mozilla/dist/include/nspr/prlock.h"
extern PRStatus PR_Unlock(PRLock *lock);
# 39 "/home/nisse/hack/mozilla/dist/include/nspr/prcvar.h" 2
# 1 "/home/nisse/hack/mozilla/dist/include/nspr/prinrval.h" 1
# 50 "/home/nisse/hack/mozilla/dist/include/nspr/prinrval.h"
# 1 "/home/nisse/hack/mozilla/dist/include/nspr/prtypes.h" 1
# 51 "/home/nisse/hack/mozilla/dist/include/nspr/prinrval.h" 2







typedef PRUint32 PRIntervalTime;
# 105 "/home/nisse/hack/mozilla/dist/include/nspr/prinrval.h"
extern PRIntervalTime PR_IntervalNow(void);
# 123 "/home/nisse/hack/mozilla/dist/include/nspr/prinrval.h"
extern PRUint32 PR_TicksPerSecond(void);
# 142 "/home/nisse/hack/mozilla/dist/include/nspr/prinrval.h"
extern PRIntervalTime PR_SecondsToInterval(PRUint32 seconds);
extern PRIntervalTime PR_MillisecondsToInterval(PRUint32 milli);
extern PRIntervalTime PR_MicrosecondsToInterval(PRUint32 micro);
# 163 "/home/nisse/hack/mozilla/dist/include/nspr/prinrval.h"
extern PRUint32 PR_IntervalToSeconds(PRIntervalTime ticks);
extern PRUint32 PR_IntervalToMilliseconds(PRIntervalTime ticks);
extern PRUint32 PR_IntervalToMicroseconds(PRIntervalTime ticks);
# 40 "/home/nisse/hack/mozilla/dist/include/nspr/prcvar.h" 2



typedef struct PRCondVar PRCondVar;
# 56 "/home/nisse/hack/mozilla/dist/include/nspr/prcvar.h"
extern PRCondVar* PR_NewCondVar(PRLock *lock);







extern void PR_DestroyCondVar(PRCondVar *cvar);
# 94 "/home/nisse/hack/mozilla/dist/include/nspr/prcvar.h"
extern PRStatus PR_WaitCondVar(PRCondVar *cvar, PRIntervalTime timeout);
# 109 "/home/nisse/hack/mozilla/dist/include/nspr/prcvar.h"
extern PRStatus PR_NotifyCondVar(PRCondVar *cvar);
# 119 "/home/nisse/hack/mozilla/dist/include/nspr/prcvar.h"
extern PRStatus PR_NotifyAllCondVar(PRCondVar *cvar);
# 48 "../../../../dist/public/security/certt.h" 2
# 1 "../../../../dist/public/security/nssilock.h" 1
# 133 "../../../../dist/public/security/nssilock.h"
# 1 "/home/nisse/hack/mozilla/dist/include/nspr/prtypes.h" 1
# 134 "../../../../dist/public/security/nssilock.h" 2
# 1 "/home/nisse/hack/mozilla/dist/include/nspr/prmon.h" 1
# 38 "/home/nisse/hack/mozilla/dist/include/nspr/prmon.h"
# 1 "/home/nisse/hack/mozilla/dist/include/nspr/prtypes.h" 1
# 39 "/home/nisse/hack/mozilla/dist/include/nspr/prmon.h" 2
# 1 "/home/nisse/hack/mozilla/dist/include/nspr/prinrval.h" 1
# 40 "/home/nisse/hack/mozilla/dist/include/nspr/prmon.h" 2



typedef struct PRMonitor PRMonitor;
# 52 "/home/nisse/hack/mozilla/dist/include/nspr/prmon.h"
extern PRMonitor* PR_NewMonitor(void);







extern void PR_DestroyMonitor(PRMonitor *mon);






extern void PR_EnterMonitor(PRMonitor *mon);






extern PRStatus PR_ExitMonitor(PRMonitor *mon);
# 92 "/home/nisse/hack/mozilla/dist/include/nspr/prmon.h"
extern PRStatus PR_Wait(PRMonitor *mon, PRIntervalTime ticks);






extern PRStatus PR_Notify(PRMonitor *mon);






extern PRStatus PR_NotifyAll(PRMonitor *mon);
# 135 "../../../../dist/public/security/nssilock.h" 2
# 1 "/home/nisse/hack/mozilla/dist/include/nspr/prlock.h" 1
# 136 "../../../../dist/public/security/nssilock.h" 2
# 1 "/home/nisse/hack/mozilla/dist/include/nspr/prcvar.h" 1
# 137 "../../../../dist/public/security/nssilock.h" 2



typedef enum {
    nssILockArena = 0,
    nssILockSession = 1,
    nssILockObject = 2,
    nssILockRefLock = 3,
    nssILockCert = 4,
    nssILockCertDB = 5,
    nssILockDBM = 6,
    nssILockCache = 7,
    nssILockSSL = 8,
    nssILockList = 9,
    nssILockSlot = 10,
    nssILockFreelist = 11,
    nssILockOID = 12,
    nssILockAttribute = 13,
    nssILockPK11cxt = 14,
    nssILockRWLock = 15,
    nssILockOther = 16,
    nssILockSelfServ = 17,
    nssILockLast
} nssILockType;





typedef enum {
    FlushTT = 0,
    NewLock = 1,
    Lock = 2,
    Unlock = 3,
    DestroyLock = 4,
    NewCondVar = 5,
    WaitCondVar = 6,
    NotifyCondVar = 7,
    NotifyAllCondVar = 8,
    DestroyCondVar = 9,
    NewMonitor = 10,
    EnterMonitor = 11,
    ExitMonitor = 12,
    Notify = 13,
    NotifyAll = 14,
    Wait = 15,
    DestroyMonitor = 16
} nssILockOp;




struct pzTrace_s {
    PRUint32 threadID;
    nssILockOp op;
    nssILockType ltype;
    PRIntervalTime callTime;
    PRIntervalTime heldTime;
    void *lock;
    PRIntn line;
    char file[24];
};
# 49 "../../../../dist/public/security/certt.h" 2
# 1 "/home/nisse/hack/mozilla/dist/include/nspr/prio.h" 1
# 45 "/home/nisse/hack/mozilla/dist/include/nspr/prio.h"
# 1 "/home/nisse/hack/mozilla/dist/include/nspr/prlong.h" 1
# 46 "/home/nisse/hack/mozilla/dist/include/nspr/prlong.h"
# 1 "/home/nisse/hack/mozilla/dist/include/nspr/prtypes.h" 1
# 47 "/home/nisse/hack/mozilla/dist/include/nspr/prlong.h" 2
# 66 "/home/nisse/hack/mozilla/dist/include/nspr/prlong.h"
extern PRInt64 LL_MaxInt(void);
extern PRInt64 LL_MinInt(void);
extern PRInt64 LL_Zero(void);
# 46 "/home/nisse/hack/mozilla/dist/include/nspr/prio.h" 2
# 1 "/home/nisse/hack/mozilla/dist/include/nspr/prtime.h" 1
# 48 "/home/nisse/hack/mozilla/dist/include/nspr/prtime.h"
# 1 "/home/nisse/hack/mozilla/dist/include/nspr/prlong.h" 1
# 49 "/home/nisse/hack/mozilla/dist/include/nspr/prtime.h" 2
# 77 "/home/nisse/hack/mozilla/dist/include/nspr/prtime.h"
typedef PRInt64 PRTime;






typedef struct PRTimeParameters {
    PRInt32 tp_gmt_offset;
    PRInt32 tp_dst_offset;
} PRTimeParameters;
# 112 "/home/nisse/hack/mozilla/dist/include/nspr/prtime.h"
typedef struct PRExplodedTime {
    PRInt32 tm_usec;
    PRInt32 tm_sec;

    PRInt32 tm_min;
    PRInt32 tm_hour;
    PRInt32 tm_mday;

    PRInt32 tm_month;
    PRInt16 tm_year;


    PRInt8 tm_wday;

    PRInt16 tm_yday;


    PRTimeParameters tm_params;
} PRExplodedTime;
# 155 "/home/nisse/hack/mozilla/dist/include/nspr/prtime.h"
typedef PRTimeParameters ( *PRTimeParamFn)(const PRExplodedTime *gmt);
# 177 "/home/nisse/hack/mozilla/dist/include/nspr/prtime.h"
extern PRTime

PR_Now(void);
# 191 "/home/nisse/hack/mozilla/dist/include/nspr/prtime.h"
extern void PR_ExplodeTime(
    PRTime usecs, PRTimeParamFn params, PRExplodedTime *exploded);





extern PRTime

PR_ImplodeTime(const PRExplodedTime *exploded);
# 214 "/home/nisse/hack/mozilla/dist/include/nspr/prtime.h"
extern void PR_NormalizeTime(
    PRExplodedTime *exploded, PRTimeParamFn params);






extern PRTimeParameters PR_LocalTimeParameters(const PRExplodedTime *gmt);


extern PRTimeParameters PR_GMTParameters(const PRExplodedTime *gmt);





extern PRTimeParameters PR_USPacificTimeParameters(const PRExplodedTime *gmt);
# 264 "/home/nisse/hack/mozilla/dist/include/nspr/prtime.h"
extern PRStatus PR_ParseTimeString (
        const char *string,
        PRBool default_to_gmt,
        PRTime *result);
# 281 "/home/nisse/hack/mozilla/dist/include/nspr/prtime.h"
extern PRUint32 PR_FormatTime(char *buf, int buflen, const char *fmt,
                                           const PRExplodedTime *tm);




extern PRUint32
PR_FormatTimeUSEnglish( char* buf, PRUint32 bufSize,
                        const char* format, const PRExplodedTime* tm );
# 47 "/home/nisse/hack/mozilla/dist/include/nspr/prio.h" 2
# 1 "/home/nisse/hack/mozilla/dist/include/nspr/prinrval.h" 1
# 48 "/home/nisse/hack/mozilla/dist/include/nspr/prio.h" 2
# 1 "/home/nisse/hack/mozilla/dist/include/nspr/prinet.h" 1
# 64 "/home/nisse/hack/mozilla/dist/include/nspr/prinet.h"
# 1 "/usr/include/sys/types.h" 1 3
# 65 "/home/nisse/hack/mozilla/dist/include/nspr/prinet.h" 2
# 1 "/usr/include/sys/socket.h" 1 3
# 23 "/usr/include/sys/socket.h" 3
# 1 "/usr/include/features.h" 1 3
# 24 "/usr/include/sys/socket.h" 2 3




# 1 "/usr/local/lib/gcc-lib/sparc-unknown-linux-gnu/3.0.1/include/stddef.h" 1 3
# 29 "/usr/include/sys/socket.h" 2 3





# 1 "/usr/include/bits/socket.h" 1 3
# 29 "/usr/include/bits/socket.h" 3
# 1 "/usr/local/lib/gcc-lib/sparc-unknown-linux-gnu/3.0.1/include/stddef.h" 1 3
# 30 "/usr/include/bits/socket.h" 2 3

# 1 "/usr/local/lib/gcc-lib/sparc-unknown-linux-gnu/3.0.1/include/limits.h" 1 3
# 11 "/usr/local/lib/gcc-lib/sparc-unknown-linux-gnu/3.0.1/include/limits.h" 3
# 1 "/usr/local/lib/gcc-lib/sparc-unknown-linux-gnu/3.0.1/include/syslimits.h" 1 3






# 1 "/usr/local/lib/gcc-lib/sparc-unknown-linux-gnu/3.0.1/include/limits.h" 1 3
# 125 "/usr/local/lib/gcc-lib/sparc-unknown-linux-gnu/3.0.1/include/limits.h" 3
# 1 "/usr/include/limits.h" 1 3
# 26 "/usr/include/limits.h" 3
# 1 "/usr/include/features.h" 1 3
# 27 "/usr/include/limits.h" 2 3



# 1 "/usr/include/bits/posix1_lim.h" 1 3
# 126 "/usr/include/bits/posix1_lim.h" 3
# 1 "/usr/include/bits/local_lim.h" 1 3
# 27 "/usr/include/bits/local_lim.h" 3
# 1 "/usr/include/linux/limits.h" 1 3
# 28 "/usr/include/bits/local_lim.h" 2 3
# 127 "/usr/include/bits/posix1_lim.h" 2 3
# 31 "/usr/include/limits.h" 2 3



# 1 "/usr/include/bits/posix2_lim.h" 1 3
# 35 "/usr/include/limits.h" 2 3



# 1 "/usr/include/bits/xopen_lim.h" 1 3
# 34 "/usr/include/bits/xopen_lim.h" 3
# 1 "/usr/include/bits/stdio_lim.h" 1 3
# 35 "/usr/include/bits/xopen_lim.h" 2 3
# 39 "/usr/include/limits.h" 2 3
# 126 "/usr/local/lib/gcc-lib/sparc-unknown-linux-gnu/3.0.1/include/limits.h" 2 3
# 8 "/usr/local/lib/gcc-lib/sparc-unknown-linux-gnu/3.0.1/include/syslimits.h" 2 3
# 12 "/usr/local/lib/gcc-lib/sparc-unknown-linux-gnu/3.0.1/include/limits.h" 2 3
# 32 "/usr/include/bits/socket.h" 2 3
# 1 "/usr/include/sys/types.h" 1 3
# 33 "/usr/include/bits/socket.h" 2 3


typedef unsigned int socklen_t;


enum __socket_type
{
  SOCK_STREAM = 1,


  SOCK_DGRAM = 2,


  SOCK_RAW = 3,

  SOCK_RDM = 4,

  SOCK_SEQPACKET = 5,


  SOCK_PACKET = 10



};
# 133 "/usr/include/bits/socket.h" 3
# 1 "/usr/include/bits/sockaddr.h" 1 3
# 29 "/usr/include/bits/sockaddr.h" 3
typedef unsigned short int sa_family_t;
# 42 "/usr/include/bits/sockaddr.h" 3
extern int __libc_sa_len (sa_family_t __af) ;
# 134 "/usr/include/bits/socket.h" 2 3


struct sockaddr
  {
    sa_family_t sa_family;
    char sa_data[14];
  };
# 153 "/usr/include/bits/socket.h" 3
struct sockaddr_storage
  {
    sa_family_t __ss_family;
    __uint32_t __ss_align;
    char __ss_padding[(128 - (2 * sizeof (__uint32_t)))];
  };



enum
  {
    MSG_OOB = 0x01,

    MSG_PEEK = 0x02,

    MSG_DONTROUTE = 0x04,






    MSG_CTRUNC = 0x08,

    MSG_PROXY = 0x10,

    MSG_TRUNC = 0x20,

    MSG_DONTWAIT = 0x40,

    MSG_EOR = 0x80,

    MSG_WAITALL = 0x100,

    MSG_FIN = 0x200,

    MSG_SYN = 0x400,

    MSG_URG = 0x800,

    MSG_RST = 0x1000,

    MSG_ERRQUEUE = 0x2000,

    MSG_NOSIGNAL = 0x4000

  };




struct msghdr
  {
    void * msg_name;
    socklen_t msg_namelen;

    struct iovec *msg_iov;
    size_t msg_iovlen;

    void * msg_control;
    size_t msg_controllen;

    int msg_flags;
  };


struct cmsghdr
  {
    size_t cmsg_len;

    int cmsg_level;
    int cmsg_type;




  };
# 247 "/usr/include/bits/socket.h" 3
extern struct cmsghdr *__cmsg_nxthdr (struct msghdr *__mhdr, struct cmsghdr *__cmsg) ;





extern __inline struct cmsghdr *
__cmsg_nxthdr (struct msghdr *__mhdr, struct cmsghdr *__cmsg)
{
  if ((size_t) __cmsg->cmsg_len < sizeof (struct cmsghdr))

    return 0;

  __cmsg = (struct cmsghdr *) ((unsigned char *) __cmsg
                               + (((__cmsg->cmsg_len) + sizeof (size_t) - 1) & ~(sizeof (size_t) - 1)));
  if ((unsigned char *) (__cmsg + 1) >= ((unsigned char *) __mhdr->msg_control
                                         + __mhdr->msg_controllen)
      || ((unsigned char *) __cmsg + (((__cmsg->cmsg_len) + sizeof (size_t) - 1) & ~(sizeof (size_t) - 1))
          >= ((unsigned char *) __mhdr->msg_control + __mhdr->msg_controllen)))

    return 0;
  return __cmsg;
}




enum
  {
    SCM_RIGHTS = 0x01,


    SCM_CREDENTIALS = 0x02,


    __SCM_CONNECT = 0x03
  };



struct ucred
{
  pid_t pid;
  uid_t uid;
  gid_t gid;
};


# 1 "/usr/include/asm/socket.h" 1 3
# 11 "/usr/include/asm/socket.h" 3
# 1 "/usr/include/asm-sparc/socket.h" 1 3




# 1 "/usr/include/asm/sockios.h" 1 3
# 11 "/usr/include/asm/sockios.h" 3
# 1 "/usr/include/asm-sparc/sockios.h" 1 3
# 12 "/usr/include/asm/sockios.h" 2 3
# 6 "/usr/include/asm-sparc/socket.h" 2 3
# 12 "/usr/include/asm/socket.h" 2 3
# 296 "/usr/include/bits/socket.h" 2 3



struct linger
  {
    int l_onoff;
    int l_linger;
  };
# 35 "/usr/include/sys/socket.h" 2 3




struct osockaddr
  {
    unsigned short int sa_family;
    unsigned char sa_data[14];
  };




enum
{
  SHUT_RD = 0,

  SHUT_WR,

  SHUT_RDWR

};
# 87 "/usr/include/sys/socket.h" 3
typedef union { struct sockaddr *__sockaddr__; struct sockaddr_at *__sockaddr_at__; struct sockaddr_ax25 *__sockaddr_ax25__; struct sockaddr_dl *__sockaddr_dl__; struct sockaddr_eon *__sockaddr_eon__; struct sockaddr_in *__sockaddr_in__; struct sockaddr_in6 *__sockaddr_in6__; struct sockaddr_inarp *__sockaddr_inarp__; struct sockaddr_ipx *__sockaddr_ipx__; struct sockaddr_iso *__sockaddr_iso__; struct sockaddr_ns *__sockaddr_ns__; struct sockaddr_un *__sockaddr_un__; struct sockaddr_x25 *__sockaddr_x25__;
              } __SOCKADDR_ARG __attribute__ ((__transparent_union__));


typedef union { __const struct sockaddr *__sockaddr__; __const struct sockaddr_at *__sockaddr_at__; __const struct sockaddr_ax25 *__sockaddr_ax25__; __const struct sockaddr_dl *__sockaddr_dl__; __const struct sockaddr_eon *__sockaddr_eon__; __const struct sockaddr_in *__sockaddr_in__; __const struct sockaddr_in6 *__sockaddr_in6__; __const struct sockaddr_inarp *__sockaddr_inarp__; __const struct sockaddr_ipx *__sockaddr_ipx__; __const struct sockaddr_iso *__sockaddr_iso__; __const struct sockaddr_ns *__sockaddr_ns__; __const struct sockaddr_un *__sockaddr_un__; __const struct sockaddr_x25 *__sockaddr_x25__;
              } __CONST_SOCKADDR_ARG __attribute__ ((__transparent_union__));







extern int socket (int __domain, int __type, int __protocol) ;





extern int socketpair (int __domain, int __type, int __protocol, int __fds[2]) ;



extern int bind (int __fd, __CONST_SOCKADDR_ARG __addr, socklen_t __len) ;


extern int getsockname (int __fd, __SOCKADDR_ARG __addr, socklen_t *__len) ;






extern int __connect (int __fd, __CONST_SOCKADDR_ARG __addr, socklen_t __len) ;

extern int connect (int __fd, __CONST_SOCKADDR_ARG __addr, socklen_t __len) ;




extern int getpeername (int __fd, __SOCKADDR_ARG __addr, socklen_t *__len) ;




extern int __send (int __fd, __const void * __buf, size_t __n, int __flags) ;

extern int send (int __fd, __const void * __buf, size_t __n, int __flags) ;




extern int recv (int __fd, void * __buf, size_t __n, int __flags) ;



extern int sendto (int __fd, __const void * __buf, size_t __n, int __flags, __CONST_SOCKADDR_ARG __addr, socklen_t __addr_len) ;







extern int recvfrom (int __fd, void * __buf, size_t __n, int __flags, __SOCKADDR_ARG __addr, socklen_t *__addr_len) ;





extern int sendmsg (int __fd, __const struct msghdr *__message, int __flags) ;




extern int recvmsg (int __fd, struct msghdr *__message, int __flags) ;





extern int getsockopt (int __fd, int __level, int __optname, void * __optval, socklen_t *__optlen) ;





extern int setsockopt (int __fd, int __level, int __optname, __const void * __optval, socklen_t __optlen) ;






extern int listen (int __fd, unsigned int __n) ;






extern int accept (int __fd, __SOCKADDR_ARG __addr, socklen_t *__addr_len) ;
# 197 "/usr/include/sys/socket.h" 3
extern int shutdown (int __fd, int __how) ;





extern int isfdtype (int __fd, int __fdtype) ;
# 66 "/home/nisse/hack/mozilla/dist/include/nspr/prinet.h" 2
# 1 "/usr/include/netinet/in.h" 1 3
# 22 "/usr/include/netinet/in.h" 3
# 1 "/usr/include/features.h" 1 3
# 23 "/usr/include/netinet/in.h" 2 3
# 1 "/usr/local/lib/gcc-lib/sparc-unknown-linux-gnu/3.0.1/include/limits.h" 1 3
# 24 "/usr/include/netinet/in.h" 2 3
# 1 "/usr/include/stdint.h" 1 3
# 26 "/usr/include/stdint.h" 3
# 1 "/usr/include/features.h" 1 3
# 27 "/usr/include/stdint.h" 2 3

# 1 "/usr/local/lib/gcc-lib/sparc-unknown-linux-gnu/3.0.1/include/stddef.h" 1 3
# 29 "/usr/include/stdint.h" 2 3
# 1 "/usr/include/bits/wordsize.h" 1 3
# 30 "/usr/include/stdint.h" 2 3
# 50 "/usr/include/stdint.h" 3
typedef unsigned char uint8_t;
typedef unsigned short int uint16_t;
typedef unsigned int uint32_t;



__extension__
typedef unsigned long long int uint64_t;






typedef signed char int_least8_t;
typedef short int int_least16_t;
typedef int int_least32_t;



__extension__
typedef long long int int_least64_t;



typedef unsigned char uint_least8_t;
typedef unsigned short int uint_least16_t;
typedef unsigned int uint_least32_t;



__extension__
typedef unsigned long long int uint_least64_t;






typedef signed char int_fast8_t;





typedef int int_fast16_t;
typedef int int_fast32_t;
__extension__
typedef long long int int_fast64_t;



typedef unsigned char uint_fast8_t;





typedef unsigned int uint_fast16_t;
typedef unsigned int uint_fast32_t;
__extension__
typedef unsigned long long int uint_fast64_t;
# 124 "/usr/include/stdint.h" 3
typedef int intptr_t;


typedef unsigned int uintptr_t;
# 136 "/usr/include/stdint.h" 3
__extension__
typedef long long int intmax_t;
__extension__
typedef unsigned long long int uintmax_t;
# 25 "/usr/include/netinet/in.h" 2 3

# 1 "/usr/include/sys/types.h" 1 3
# 27 "/usr/include/netinet/in.h" 2 3
# 1 "/usr/include/bits/socket.h" 1 3
# 28 "/usr/include/netinet/in.h" 2 3





enum
  {
    IPPROTO_IP = 0,
    IPPROTO_HOPOPTS = 0,
    IPPROTO_ICMP = 1,
    IPPROTO_IGMP = 2,
    IPPROTO_IPIP = 4,
    IPPROTO_TCP = 6,
    IPPROTO_EGP = 8,
    IPPROTO_PUP = 12,
    IPPROTO_UDP = 17,
    IPPROTO_IDP = 22,
    IPPROTO_TP = 29,
    IPPROTO_IPV6 = 41,
    IPPROTO_ROUTING = 43,
    IPPROTO_FRAGMENT = 44,
    IPPROTO_RSVP = 46,
    IPPROTO_GRE = 47,
    IPPROTO_ESP = 50,
    IPPROTO_AH = 51,
    IPPROTO_ICMPV6 = 58,
    IPPROTO_NONE = 59,
    IPPROTO_DSTOPTS = 60,
    IPPROTO_MTP = 92,
    IPPROTO_ENCAP = 98,
    IPPROTO_PIM = 103,
    IPPROTO_COMP = 108,
    IPPROTO_RAW = 255,
    IPPROTO_MAX
  };


enum
  {
    IPPORT_ECHO = 7,
    IPPORT_DISCARD = 9,
    IPPORT_SYSTAT = 11,
    IPPORT_DAYTIME = 13,
    IPPORT_NETSTAT = 15,
    IPPORT_FTP = 21,
    IPPORT_TELNET = 23,
    IPPORT_SMTP = 25,
    IPPORT_TIMESERVER = 37,
    IPPORT_NAMESERVER = 42,
    IPPORT_WHOIS = 43,
    IPPORT_MTP = 57,

    IPPORT_TFTP = 69,
    IPPORT_RJE = 77,
    IPPORT_FINGER = 79,
    IPPORT_TTYLINK = 87,
    IPPORT_SUPDUP = 95,


    IPPORT_EXECSERVER = 512,
    IPPORT_LOGINSERVER = 513,
    IPPORT_CMDSERVER = 514,
    IPPORT_EFSSERVER = 520,


    IPPORT_BIFFUDP = 512,
    IPPORT_WHOSERVER = 513,
    IPPORT_ROUTESERVER = 520,


    IPPORT_RESERVED = 1024,


    IPPORT_USERRESERVED = 5000
  };



struct in_addr
  {
    uint32_t s_addr;
  };
# 162 "/usr/include/netinet/in.h" 3
struct in6_addr
  {
    union
      {
        uint8_t u6_addr8[16];
        uint16_t u6_addr16[8];
        uint32_t u6_addr32[4];



      } in6_u;




  };

extern const struct in6_addr in6addr_any;
extern const struct in6_addr in6addr_loopback;







# 1 "/usr/include/bits/sockaddr.h" 1 3
# 189 "/usr/include/netinet/in.h" 2 3



struct sockaddr_in
  {
    sa_family_t sin_family;
    uint16_t sin_port;
    struct in_addr sin_addr;


    unsigned char sin_zero[sizeof (struct sockaddr) -
                           (sizeof (unsigned short int)) -
                           sizeof (uint16_t) -
                           sizeof (struct in_addr)];
  };


struct sockaddr_in6
  {
    sa_family_t sin6_family;
    uint16_t sin6_port;
    uint32_t sin6_flowinfo;
    struct in6_addr sin6_addr;
  };


struct ipv6_mreq
  {

    struct in6_addr ipv6mr_multiaddr;


    unsigned int ipv6mr_interface;
  };


# 1 "/usr/include/bits/in.h" 1 3
# 66 "/usr/include/bits/in.h" 3
struct ip_opts
  {
    struct in_addr ip_dst;
    char ip_opts[40];
  };


struct ip_mreq
  {
    struct in_addr imr_multiaddr;
    struct in_addr imr_interface;
  };


struct ip_mreqn
  {
    struct in_addr imr_multiaddr;
    struct in_addr imr_address;
    int imr_ifindex;
  };


struct in_pktinfo
  {
    int ipi_ifindex;
    struct in_addr ipi_spec_dst;
    struct in_addr ipi_addr;
  };
# 226 "/usr/include/netinet/in.h" 2 3
# 234 "/usr/include/netinet/in.h" 3
extern uint32_t ntohl (uint32_t __netlong) ;
extern uint16_t ntohs (uint16_t __netshort) ;
extern uint32_t htonl (uint32_t __hostlong) ;
extern uint16_t htons (uint16_t __hostshort) ;

# 1 "/usr/include/endian.h" 1 3
# 240 "/usr/include/netinet/in.h" 2 3


# 1 "/usr/include/bits/byteswap.h" 1 3
# 243 "/usr/include/netinet/in.h" 2 3
# 291 "/usr/include/netinet/in.h" 3
extern int bindresvport (int __sockfd, struct sockaddr_in *__sock_in) ;
# 311 "/usr/include/netinet/in.h" 3
struct in6_pktinfo
  {
    struct in6_addr ipi6_addr;
    unsigned int ipi6_ifindex;
  };
# 67 "/home/nisse/hack/mozilla/dist/include/nspr/prinet.h" 2
# 81 "/home/nisse/hack/mozilla/dist/include/nspr/prinet.h"
# 1 "/usr/include/arpa/inet.h" 1 3
# 22 "/usr/include/arpa/inet.h" 3
# 1 "/usr/include/features.h" 1 3
# 23 "/usr/include/arpa/inet.h" 2 3

# 1 "/usr/include/sys/types.h" 1 3
# 25 "/usr/include/arpa/inet.h" 2 3
# 1 "/usr/include/netinet/in.h" 1 3
# 26 "/usr/include/arpa/inet.h" 2 3





extern u_int32_t inet_addr (__const char *__cp) ;



extern int inet_aton (__const char *__cp, struct in_addr *__inp) ;


extern u_int32_t inet_lnaof (struct in_addr __in) ;



extern struct in_addr inet_makeaddr (u_int32_t __net, u_int32_t __host) ;



extern char *inet_neta (u_int32_t __net, char *__buf, size_t __len) ;


extern u_int32_t inet_netof (struct in_addr __in) ;



extern u_int32_t inet_network (__const char *__cp) ;




extern char *inet_net_ntop (int __af, __const void *__cp, int __bits, char *__buf, size_t __len) ;





extern int inet_net_pton (int __af, __const char *__cp, void *__buf, size_t __len) ;




extern char *inet_ntoa (struct in_addr __in) ;




extern int inet_pton (int __af, __const char *__cp, void *__buf) ;




extern __const char *inet_ntop (int __af, __const void *__cp, char *__buf, size_t __len) ;





extern unsigned int inet_nsap_addr (__const char *__cp, unsigned char *__buf, int __len) ;




extern char *inet_nsap_ntoa (int __len, __const unsigned char *__cp, char *__buf) ;
# 82 "/home/nisse/hack/mozilla/dist/include/nspr/prinet.h" 2

# 1 "/usr/include/netdb.h" 1 3
# 26 "/usr/include/netdb.h" 3
# 1 "/usr/include/features.h" 1 3
# 27 "/usr/include/netdb.h" 2 3



# 1 "/usr/include/rpc/netdb.h" 1 3
# 39 "/usr/include/rpc/netdb.h" 3
# 1 "/usr/include/features.h" 1 3
# 40 "/usr/include/rpc/netdb.h" 2 3


# 1 "/usr/local/lib/gcc-lib/sparc-unknown-linux-gnu/3.0.1/include/stddef.h" 1 3
# 43 "/usr/include/rpc/netdb.h" 2 3



struct rpcent
{
  char *r_name;
  char **r_aliases;
  int r_number;
};

extern void setrpcent (int _stayopen) ;
extern void endrpcent (void) ;
extern struct rpcent *getrpcbyname (__const char *__name) ;
extern struct rpcent *getrpcbynumber (int __number) ;
extern struct rpcent *getrpcent (void) ;


extern int getrpcbyname_r (__const char *__name, struct rpcent *__result_buf, char *__buffer, size_t __buflen, struct rpcent **__result) ;



extern int getrpcbynumber_r (int __number, struct rpcent *__result_buf, char *__buffer, size_t __buflen, struct rpcent **__result) ;



extern int getrpcent_r (struct rpcent *__result_buf, char *__buffer, size_t __buflen, struct rpcent **__result) ;
# 31 "/usr/include/netdb.h" 2 3
# 1 "/usr/include/sys/socket.h" 1 3
# 32 "/usr/include/netdb.h" 2 3

# 1 "/usr/local/lib/gcc-lib/sparc-unknown-linux-gnu/3.0.1/include/stddef.h" 1 3
# 34 "/usr/include/netdb.h" 2 3
# 47 "/usr/include/netdb.h" 3
extern int h_errno;


extern int *__h_errno_location (void) __attribute__ ((__const__));
# 85 "/usr/include/netdb.h" 3
extern void herror (__const char *__str) ;


extern __const char *hstrerror (int __err_num) ;




struct hostent
{
  char *h_name;
  char **h_aliases;
  int h_addrtype;
  int h_length;
  char **h_addr_list;

};



extern void sethostent (int __stay_open) ;


extern void endhostent (void) ;



extern struct hostent *gethostent (void) ;



extern struct hostent *gethostbyaddr (__const char *__addr, size_t __len, int __type) ;



extern struct hostent *gethostbyname (__const char *__name) ;




extern struct hostent *gethostbyname2 (__const char *__name, int __af) ;







extern int gethostent_r (struct hostent *__restrict __result_buf, char *__restrict __buf, size_t __buflen, struct hostent **__restrict __result, int *__restrict __h_errnop) ;




extern int gethostbyaddr_r (__const char *__restrict __addr, size_t __len, int __type, struct hostent *__restrict __result_buf, char *__restrict __buf, size_t __buflen, struct hostent **__restrict __result, int *__restrict __h_errnop) ;






extern int gethostbyname_r (__const char *__restrict __name, struct hostent *__restrict __result_buf, char *__restrict __buf, size_t __buflen, struct hostent **__restrict __result, int *__restrict __h_errnop) ;





extern int gethostbyname2_r (__const char *__restrict __name, int __af, struct hostent *__restrict __result_buf, char *__restrict __buf, size_t __buflen, struct hostent **__restrict __result, int *__restrict __h_errnop) ;
# 169 "/usr/include/netdb.h" 3
struct netent
{
  char *n_name;
  char **n_aliases;
  int n_addrtype;
  unsigned long int n_net;
};



extern void setnetent (int __stay_open) ;


extern void endnetent (void) ;



extern struct netent *getnetent (void) ;



extern struct netent *getnetbyaddr (unsigned long int __net, int __type) ;



extern struct netent *getnetbyname (__const char *__name) ;







extern int getnetent_r (struct netent *__restrict __result_buf, char *__restrict __buf, size_t __buflen, struct netent **__restrict __result, int *__restrict __h_errnop) ;




extern int getnetbyaddr_r (unsigned long int __net, int __type, struct netent *__restrict __result_buf, char *__restrict __buf, size_t __buflen, struct netent **__restrict __result, int *__restrict __h_errnop) ;





extern int getnetbyname_r (__const char *__restrict __name, struct netent *__restrict __result_buf, char *__restrict __buf, size_t __buflen, struct netent **__restrict __result, int *__restrict __h_errnop) ;
# 222 "/usr/include/netdb.h" 3
struct servent
{
  char *s_name;
  char **s_aliases;
  int s_port;
  char *s_proto;
};



extern void setservent (int __stay_open) ;


extern void endservent (void) ;



extern struct servent *getservent (void) ;



extern struct servent *getservbyname (__const char *__name, __const char *__proto) ;




extern struct servent *getservbyport (int __port, __const char *__proto) ;





extern int getservent_r (struct servent *__restrict __result_buf, char *__restrict __buf, size_t __buflen, struct servent **__restrict __result) ;



extern int getservbyname_r (__const char *__restrict __name, __const char *__restrict __proto, struct servent *__restrict __result_buf, char *__restrict __buf, size_t __buflen, struct servent **__restrict __result) ;





extern int getservbyport_r (int __port, __const char *__restrict __proto, struct servent *__restrict __result_buf, char *__restrict __buf, size_t __buflen, struct servent **__restrict __result) ;







struct protoent
{
  char *p_name;
  char **p_aliases;
  int p_proto;
};



extern void setprotoent (int __stay_open) ;


extern void endprotoent (void) ;



extern struct protoent *getprotoent (void) ;


extern struct protoent *getprotobyname (__const char *__name) ;


extern struct protoent *getprotobynumber (int __proto) ;





extern int getprotoent_r (struct protoent *__restrict __result_buf, char *__restrict __buf, size_t __buflen, struct protoent **__restrict __result) ;



extern int getprotobyname_r (__const char *__restrict __name, struct protoent *__restrict __result_buf, char *__restrict __buf, size_t __buflen, struct protoent **__restrict __result) ;




extern int getprotobynumber_r (int __proto, struct protoent *__restrict __result_buf, char *__restrict __buf, size_t __buflen, struct protoent **__restrict __result) ;







extern int setnetgrent (__const char *__netgroup) ;


extern void endnetgrent (void) ;



extern int getnetgrent (char **__restrict __hostp, char **__restrict __userp, char **__restrict __domainp) ;




extern int innetgr (__const char *__netgroup, __const char *__host, __const char *__user, __const char *domain) ;




extern int getnetgrent_r (char **__restrict __hostp, char **__restrict __userp, char **__restrict __domainp, char *__restrict __buffer, size_t __buflen) ;
# 348 "/usr/include/netdb.h" 3
extern int rcmd (char **__restrict __ahost, unsigned short int __rport, __const char *__restrict __locuser, __const char *__restrict __remuser, __const char *__restrict __cmd, int *__restrict __fd2p) ;
# 358 "/usr/include/netdb.h" 3
extern int rexec (char **__restrict __ahost, int __rport, __const char *__restrict __name, __const char *__restrict __pass, __const char *__restrict __cmd, int *__restrict __fd2p) ;
# 367 "/usr/include/netdb.h" 3
extern int ruserok (__const char *__rhost, int __suser, __const char *__remuser, __const char *__locuser) ;





extern int rresvport (int *__alport) ;






struct addrinfo
{
  int ai_flags;
  int ai_family;
  int ai_socktype;
  int ai_protocol;
  int ai_addrlen;
  struct sockaddr *ai_addr;
  char *ai_canonname;
  struct addrinfo *ai_next;
};
# 421 "/usr/include/netdb.h" 3
extern int getaddrinfo (__const char *__restrict __name, __const char *__restrict __service, __const struct addrinfo *__restrict __req, struct addrinfo **__restrict __pai) ;





extern void freeaddrinfo (struct addrinfo *__ai) ;


extern char *gai_strerror (int __ecode) ;


extern int getnameinfo (__const struct sockaddr *__restrict __sa, socklen_t __salen, char *__restrict __host, size_t __hostlen, char *__restrict __serv, size_t __servlen, int __flags) ;
# 84 "/home/nisse/hack/mozilla/dist/include/nspr/prinet.h" 2
# 49 "/home/nisse/hack/mozilla/dist/include/nspr/prio.h" 2




typedef struct PRDir PRDir;
typedef struct PRDirEntry PRDirEntry;
typedef struct PRFileDesc PRFileDesc;
typedef struct PRFileInfo PRFileInfo;
typedef struct PRFileInfo64 PRFileInfo64;
typedef union PRNetAddr PRNetAddr;
typedef struct PRIOMethods PRIOMethods;
typedef struct PRPollDesc PRPollDesc;
typedef struct PRFilePrivate PRFilePrivate;
typedef struct PRSendFileData PRSendFileData;
# 75 "/home/nisse/hack/mozilla/dist/include/nspr/prio.h"
typedef PRIntn PRDescIdentity;

struct PRFileDesc {
    const PRIOMethods *methods;
    PRFilePrivate *secret;
    PRFileDesc *lower, *higher;
    void ( *dtor)(PRFileDesc *fd);

    PRDescIdentity identity;
};
# 95 "/home/nisse/hack/mozilla/dist/include/nspr/prio.h"
typedef enum PRTransmitFileFlags {
    PR_TRANSMITFILE_KEEP_OPEN = 0,

    PR_TRANSMITFILE_CLOSE_SOCKET = 1

} PRTransmitFileFlags;
# 148 "/home/nisse/hack/mozilla/dist/include/nspr/prio.h"
struct PRIPv6Addr {
        union {
                PRUint8 _S6_u8[16];
                PRUint16 _S6_u16[8];
                PRUint32 _S6_u32[4];
                PRUint64 _S6_u64[2];
        } _S6_un;
};





typedef struct PRIPv6Addr PRIPv6Addr;

union PRNetAddr {
    struct {
        PRUint16 family;



        char data[14];

    } raw;
    struct {
        PRUint16 family;
        PRUint16 port;
        PRUint32 ip;



        char pad[8];

    } inet;
    struct {
        PRUint16 family;
        PRUint16 port;
        PRUint32 flowinfo;
        PRIPv6Addr ip;
        PRUint32 scope_id;
    } ipv6;

    struct {
        PRUint16 family;
        char path[104];
    } local;

};
# 206 "/home/nisse/hack/mozilla/dist/include/nspr/prio.h"
typedef enum PRSockOption
{
    PR_SockOpt_Nonblocking,
    PR_SockOpt_Linger,
    PR_SockOpt_Reuseaddr,
    PR_SockOpt_Keepalive,
    PR_SockOpt_RecvBufferSize,
    PR_SockOpt_SendBufferSize,

    PR_SockOpt_IpTimeToLive,
    PR_SockOpt_IpTypeOfService,

    PR_SockOpt_AddMember,
    PR_SockOpt_DropMember,
    PR_SockOpt_McastInterface,
    PR_SockOpt_McastTimeToLive,
    PR_SockOpt_McastLoopback,

    PR_SockOpt_NoDelay,
    PR_SockOpt_MaxSegment,
    PR_SockOpt_Broadcast,
    PR_SockOpt_Last
} PRSockOption;

typedef struct PRLinger {
        PRBool polarity;
        PRIntervalTime linger;
} PRLinger;

typedef struct PRMcastRequest {
        PRNetAddr mcaddr;
        PRNetAddr ifaddr;
} PRMcastRequest;

typedef struct PRSocketOptionData
{
    PRSockOption option;
    union
    {
        PRUintn ip_ttl;
        PRUintn mcast_ttl;
        PRUintn tos;
        PRBool non_blocking;
        PRBool reuse_addr;
        PRBool keep_alive;
        PRBool mcast_loopback;
        PRBool no_delay;
        PRBool broadcast;
        PRSize max_segment;
        PRSize recv_buffer_size;
        PRSize send_buffer_size;
        PRLinger linger;
        PRMcastRequest add_member;
        PRMcastRequest drop_member;
        PRNetAddr mcast_if;
    } value;
} PRSocketOptionData;
# 272 "/home/nisse/hack/mozilla/dist/include/nspr/prio.h"
typedef struct PRIOVec {
    char *iov_base;
    int iov_len;
} PRIOVec;






typedef enum PRDescType
{
    PR_DESC_FILE = 1,
    PR_DESC_SOCKET_TCP = 2,
    PR_DESC_SOCKET_UDP = 3,
    PR_DESC_LAYERED = 4,
    PR_DESC_PIPE = 5
} PRDescType;

typedef enum PRSeekWhence {
    PR_SEEK_SET = 0,
    PR_SEEK_CUR = 1,
    PR_SEEK_END = 2
} PRSeekWhence;

extern PRDescType PR_GetDescType(PRFileDesc *file);
# 315 "/home/nisse/hack/mozilla/dist/include/nspr/prio.h"
typedef PRStatus ( *PRCloseFN)(PRFileDesc *fd);
typedef PRInt32 ( *PRReadFN)(PRFileDesc *fd, void *buf, PRInt32 amount);
typedef PRInt32 ( *PRWriteFN)(PRFileDesc *fd, const void *buf, PRInt32 amount);
typedef PRInt32 ( *PRAvailableFN)(PRFileDesc *fd);
typedef PRInt64 ( *PRAvailable64FN)(PRFileDesc *fd);
typedef PRStatus ( *PRFsyncFN)(PRFileDesc *fd);
typedef PROffset32 ( *PRSeekFN)(PRFileDesc *fd, PROffset32 offset, PRSeekWhence how);
typedef PROffset64 ( *PRSeek64FN)(PRFileDesc *fd, PROffset64 offset, PRSeekWhence how);
typedef PRStatus ( *PRFileInfoFN)(PRFileDesc *fd, PRFileInfo *info);
typedef PRStatus ( *PRFileInfo64FN)(PRFileDesc *fd, PRFileInfo64 *info);
typedef PRInt32 ( *PRWritevFN)(
    PRFileDesc *fd, const PRIOVec *iov, PRInt32 iov_size,
    PRIntervalTime timeout);
typedef PRStatus ( *PRConnectFN)(
    PRFileDesc *fd, const PRNetAddr *addr, PRIntervalTime timeout);
typedef PRFileDesc* ( *PRAcceptFN) (
    PRFileDesc *fd, PRNetAddr *addr, PRIntervalTime timeout);
typedef PRStatus ( *PRBindFN)(PRFileDesc *fd, const PRNetAddr *addr);
typedef PRStatus ( *PRListenFN)(PRFileDesc *fd, PRIntn backlog);
typedef PRStatus ( *PRShutdownFN)(PRFileDesc *fd, PRIntn how);
typedef PRInt32 ( *PRRecvFN)(
    PRFileDesc *fd, void *buf, PRInt32 amount,
    PRIntn flags, PRIntervalTime timeout);
typedef PRInt32 ( *PRSendFN) (
    PRFileDesc *fd, const void *buf, PRInt32 amount,
    PRIntn flags, PRIntervalTime timeout);
typedef PRInt32 ( *PRRecvfromFN)(
    PRFileDesc *fd, void *buf, PRInt32 amount,
    PRIntn flags, PRNetAddr *addr, PRIntervalTime timeout);
typedef PRInt32 ( *PRSendtoFN)(
    PRFileDesc *fd, const void *buf, PRInt32 amount,
    PRIntn flags, const PRNetAddr *addr, PRIntervalTime timeout);
typedef PRInt16 ( *PRPollFN)(
    PRFileDesc *fd, PRInt16 in_flags, PRInt16 *out_flags);
typedef PRInt32 ( *PRAcceptreadFN)(
    PRFileDesc *sd, PRFileDesc **nd, PRNetAddr **raddr,
    void *buf, PRInt32 amount, PRIntervalTime t);
typedef PRInt32 ( *PRTransmitfileFN)(
     PRFileDesc *sd, PRFileDesc *fd, const void *headers,
     PRInt32 hlen, PRTransmitFileFlags flags, PRIntervalTime t);
typedef PRStatus ( *PRGetsocknameFN)(PRFileDesc *fd, PRNetAddr *addr);
typedef PRStatus ( *PRGetpeernameFN)(PRFileDesc *fd, PRNetAddr *addr);
typedef PRStatus ( *PRGetsocketoptionFN)(
    PRFileDesc *fd, PRSocketOptionData *data);
typedef PRStatus ( *PRSetsocketoptionFN)(
    PRFileDesc *fd, const PRSocketOptionData *data);
typedef PRInt32 ( *PRSendfileFN)(
        PRFileDesc *networkSocket, PRSendFileData *sendData,
        PRTransmitFileFlags flags, PRIntervalTime timeout);
typedef PRStatus ( *PRConnectcontinueFN)(
    PRFileDesc *fd, PRInt16 out_flags);
typedef PRIntn ( *PRReservedFN)(PRFileDesc *fd);

struct PRIOMethods {
    PRDescType file_type;
    PRCloseFN close;
    PRReadFN read;
    PRWriteFN write;
    PRAvailableFN available;
    PRAvailable64FN available64;
    PRFsyncFN fsync;
    PRSeekFN seek;
    PRSeek64FN seek64;
    PRFileInfoFN fileInfo;
    PRFileInfo64FN fileInfo64;
    PRWritevFN writev;
    PRConnectFN connect;
    PRAcceptFN accept;
    PRBindFN bind;
    PRListenFN listen;
    PRShutdownFN shutdown;
    PRRecvFN recv;
    PRSendFN send;
    PRRecvfromFN recvfrom;
    PRSendtoFN sendto;
    PRPollFN poll;
    PRAcceptreadFN acceptread;
    PRTransmitfileFN transmitfile;
    PRGetsocknameFN getsockname;
    PRGetpeernameFN getpeername;
    PRReservedFN reserved_fn_6;
    PRReservedFN reserved_fn_5;
    PRGetsocketoptionFN getsocketoption;

    PRSetsocketoptionFN setsocketoption;

    PRSendfileFN sendfile;
    PRConnectcontinueFN connectcontinue;

    PRReservedFN reserved_fn_3;
    PRReservedFN reserved_fn_2;
    PRReservedFN reserved_fn_1;
    PRReservedFN reserved_fn_0;
};
# 429 "/home/nisse/hack/mozilla/dist/include/nspr/prio.h"
typedef enum PRSpecialFD
{
    PR_StandardInput,
    PR_StandardOutput,
    PR_StandardError
} PRSpecialFD;

extern PRFileDesc* PR_GetSpecialFD(PRSpecialFD id);
# 476 "/home/nisse/hack/mozilla/dist/include/nspr/prio.h"
extern PRDescIdentity PR_GetUniqueIdentity(const char *layer_name);
extern const char* PR_GetNameForIdentity(PRDescIdentity ident);
extern PRDescIdentity PR_GetLayersIdentity(PRFileDesc* fd);
extern PRFileDesc* PR_GetIdentitiesLayer(PRFileDesc* fd_stack, PRDescIdentity id);
# 489 "/home/nisse/hack/mozilla/dist/include/nspr/prio.h"
extern const PRIOMethods * PR_GetDefaultIOMethods(void);
# 500 "/home/nisse/hack/mozilla/dist/include/nspr/prio.h"
extern PRFileDesc* PR_CreateIOLayerStub(
    PRDescIdentity ident, const PRIOMethods *methods);
# 517 "/home/nisse/hack/mozilla/dist/include/nspr/prio.h"
extern PRFileDesc* PR_CreateIOLayer(PRFileDesc* fd);
# 533 "/home/nisse/hack/mozilla/dist/include/nspr/prio.h"
extern PRStatus PR_PushIOLayer(
    PRFileDesc *fd_stack, PRDescIdentity id, PRFileDesc *layer);
# 550 "/home/nisse/hack/mozilla/dist/include/nspr/prio.h"
extern PRFileDesc* PR_PopIOLayer(PRFileDesc *fd_stack, PRDescIdentity id);
# 624 "/home/nisse/hack/mozilla/dist/include/nspr/prio.h"
extern PRFileDesc* PR_Open(const char *name, PRIntn flags, PRIntn mode);
# 650 "/home/nisse/hack/mozilla/dist/include/nspr/prio.h"
extern PRFileDesc* PR_OpenFile(
    const char *name, PRIntn flags, PRIntn mode);
# 673 "/home/nisse/hack/mozilla/dist/include/nspr/prio.h"
extern PRStatus PR_Close(PRFileDesc *fd);
# 708 "/home/nisse/hack/mozilla/dist/include/nspr/prio.h"
extern PRInt32 PR_Read(PRFileDesc *fd, void *buf, PRInt32 amount);
# 732 "/home/nisse/hack/mozilla/dist/include/nspr/prio.h"
extern PRInt32 PR_Write(PRFileDesc *fd,const void *buf,PRInt32 amount);
# 766 "/home/nisse/hack/mozilla/dist/include/nspr/prio.h"
extern PRInt32 PR_Writev(
    PRFileDesc *fd, const PRIOVec *iov, PRInt32 iov_size,
    PRIntervalTime timeout);
# 787 "/home/nisse/hack/mozilla/dist/include/nspr/prio.h"
extern PRStatus PR_Delete(const char *name);



typedef enum PRFileType
{
    PR_FILE_FILE = 1,
    PR_FILE_DIRECTORY = 2,
    PR_FILE_OTHER = 3
} PRFileType;

struct PRFileInfo {
    PRFileType type;
    PROffset32 size;
    PRTime creationTime;
    PRTime modifyTime;
};

struct PRFileInfo64 {
    PRFileType type;
    PROffset64 size;
    PRTime creationTime;
    PRTime modifyTime;
};
# 830 "/home/nisse/hack/mozilla/dist/include/nspr/prio.h"
extern PRStatus PR_GetFileInfo(const char *fn, PRFileInfo *info);
extern PRStatus PR_GetFileInfo64(const char *fn, PRFileInfo64 *info);
# 850 "/home/nisse/hack/mozilla/dist/include/nspr/prio.h"
extern PRStatus PR_GetOpenFileInfo(PRFileDesc *fd, PRFileInfo *info);
extern PRStatus PR_GetOpenFileInfo64(PRFileDesc *fd, PRFileInfo64 *info);
# 869 "/home/nisse/hack/mozilla/dist/include/nspr/prio.h"
extern PRStatus PR_Rename(const char *from, const char *to);
# 895 "/home/nisse/hack/mozilla/dist/include/nspr/prio.h"
typedef enum PRAccessHow {
    PR_ACCESS_EXISTS = 1,
    PR_ACCESS_WRITE_OK = 2,
    PR_ACCESS_READ_OK = 3
} PRAccessHow;

extern PRStatus PR_Access(const char *name, PRAccessHow how);
# 936 "/home/nisse/hack/mozilla/dist/include/nspr/prio.h"
extern PROffset32 PR_Seek(PRFileDesc *fd, PROffset32 offset, PRSeekWhence whence);
extern PROffset64 PR_Seek64(PRFileDesc *fd, PROffset64 offset, PRSeekWhence whence);
# 959 "/home/nisse/hack/mozilla/dist/include/nspr/prio.h"
extern PRInt32 PR_Available(PRFileDesc *fd);
extern PRInt64 PR_Available64(PRFileDesc *fd);
# 979 "/home/nisse/hack/mozilla/dist/include/nspr/prio.h"
extern PRStatus PR_Sync(PRFileDesc *fd);



struct PRDirEntry {
    const char *name;
};
# 1011 "/home/nisse/hack/mozilla/dist/include/nspr/prio.h"
extern PRDir* PR_OpenDir(const char *name);
# 1036 "/home/nisse/hack/mozilla/dist/include/nspr/prio.h"
typedef enum PRDirFlags {
    PR_SKIP_NONE = 0x0,
    PR_SKIP_DOT = 0x1,
    PR_SKIP_DOT_DOT = 0x2,
    PR_SKIP_BOTH = 0x3,
    PR_SKIP_HIDDEN = 0x4
} PRDirFlags;

extern PRDirEntry* PR_ReadDir(PRDir *dir, PRDirFlags flags);
# 1063 "/home/nisse/hack/mozilla/dist/include/nspr/prio.h"
extern PRStatus PR_CloseDir(PRDir *dir);
# 1085 "/home/nisse/hack/mozilla/dist/include/nspr/prio.h"
extern PRStatus PR_MkDir(const char *name, PRIntn mode);
# 1097 "/home/nisse/hack/mozilla/dist/include/nspr/prio.h"
extern PRStatus PR_MakeDir(const char *name, PRIntn mode);
# 1117 "/home/nisse/hack/mozilla/dist/include/nspr/prio.h"
extern PRStatus PR_RmDir(const char *name);
# 1136 "/home/nisse/hack/mozilla/dist/include/nspr/prio.h"
extern PRFileDesc* PR_NewUDPSocket(void);
# 1155 "/home/nisse/hack/mozilla/dist/include/nspr/prio.h"
extern PRFileDesc* PR_NewTCPSocket(void);
# 1175 "/home/nisse/hack/mozilla/dist/include/nspr/prio.h"
extern PRFileDesc* PR_OpenUDPSocket(PRIntn af);
# 1195 "/home/nisse/hack/mozilla/dist/include/nspr/prio.h"
extern PRFileDesc* PR_OpenTCPSocket(PRIntn af);
# 1219 "/home/nisse/hack/mozilla/dist/include/nspr/prio.h"
extern PRStatus PR_Connect(
    PRFileDesc *fd, const PRNetAddr *addr, PRIntervalTime timeout);
# 1254 "/home/nisse/hack/mozilla/dist/include/nspr/prio.h"
extern PRStatus PR_ConnectContinue(PRFileDesc *fd, PRInt16 out_flags);
# 1284 "/home/nisse/hack/mozilla/dist/include/nspr/prio.h"
extern PRStatus PR_GetConnectStatus(const PRPollDesc *pd);
# 1308 "/home/nisse/hack/mozilla/dist/include/nspr/prio.h"
extern PRFileDesc* PR_Accept(
    PRFileDesc *fd, PRNetAddr *addr, PRIntervalTime timeout);
# 1330 "/home/nisse/hack/mozilla/dist/include/nspr/prio.h"
extern PRStatus PR_Bind(PRFileDesc *fd, const PRNetAddr *addr);
# 1352 "/home/nisse/hack/mozilla/dist/include/nspr/prio.h"
extern PRStatus PR_Listen(PRFileDesc *fd, PRIntn backlog);
# 1376 "/home/nisse/hack/mozilla/dist/include/nspr/prio.h"
typedef enum PRShutdownHow
{
    PR_SHUTDOWN_RCV = 0,
    PR_SHUTDOWN_SEND = 1,
    PR_SHUTDOWN_BOTH = 2
} PRShutdownHow;

extern PRStatus PR_Shutdown(PRFileDesc *fd, PRShutdownHow how);
# 1416 "/home/nisse/hack/mozilla/dist/include/nspr/prio.h"
extern PRInt32 PR_Recv(PRFileDesc *fd, void *buf, PRInt32 amount,
                PRIntn flags, PRIntervalTime timeout);
# 1447 "/home/nisse/hack/mozilla/dist/include/nspr/prio.h"
extern PRInt32 PR_Send(PRFileDesc *fd, const void *buf, PRInt32 amount,
                                PRIntn flags, PRIntervalTime timeout);
# 1482 "/home/nisse/hack/mozilla/dist/include/nspr/prio.h"
extern PRInt32 PR_RecvFrom(
    PRFileDesc *fd, void *buf, PRInt32 amount, PRIntn flags,
    PRNetAddr *addr, PRIntervalTime timeout);
# 1515 "/home/nisse/hack/mozilla/dist/include/nspr/prio.h"
extern PRInt32 PR_SendTo(
    PRFileDesc *fd, const void *buf, PRInt32 amount, PRIntn flags,
    const PRNetAddr *addr, PRIntervalTime timeout);
# 1555 "/home/nisse/hack/mozilla/dist/include/nspr/prio.h"
extern PRInt32 PR_TransmitFile(
    PRFileDesc *networkSocket, PRFileDesc *sourceFile,
    const void *headers, PRInt32 hlen, PRTransmitFileFlags flags,
    PRIntervalTime timeout);
# 1594 "/home/nisse/hack/mozilla/dist/include/nspr/prio.h"
struct PRSendFileData {
        PRFileDesc *fd;
        PRUint32 file_offset;
        PRSize file_nbytes;


        const void *header;
        PRInt32 hlen;
        const void *trailer;
        PRInt32 tlen;
};


extern PRInt32 PR_SendFile(
    PRFileDesc *networkSocket, PRSendFileData *sendData,
        PRTransmitFileFlags flags, PRIntervalTime timeout);
# 1661 "/home/nisse/hack/mozilla/dist/include/nspr/prio.h"
extern PRInt32 PR_AcceptRead(
    PRFileDesc *listenSock, PRFileDesc **acceptedSock,
    PRNetAddr **peerAddr, void *buf, PRInt32 amount, PRIntervalTime timeout);
# 1685 "/home/nisse/hack/mozilla/dist/include/nspr/prio.h"
extern PRStatus PR_NewTCPSocketPair(PRFileDesc *fds[2]);
# 1705 "/home/nisse/hack/mozilla/dist/include/nspr/prio.h"
extern PRStatus PR_GetSockName(PRFileDesc *fd, PRNetAddr *addr);
# 1727 "/home/nisse/hack/mozilla/dist/include/nspr/prio.h"
extern PRStatus PR_GetPeerName(PRFileDesc *fd, PRNetAddr *addr);

extern PRStatus PR_GetSocketOption(
    PRFileDesc *fd, PRSocketOptionData *data);

extern PRStatus PR_SetSocketOption(
    PRFileDesc *fd, const PRSocketOptionData *data);
# 1762 "/home/nisse/hack/mozilla/dist/include/nspr/prio.h"
extern PRStatus PR_SetFDInheritable(
    PRFileDesc *fd,
    PRBool inheritable);
# 1782 "/home/nisse/hack/mozilla/dist/include/nspr/prio.h"
extern PRFileDesc * PR_GetInheritedFD(const char *name);
# 1792 "/home/nisse/hack/mozilla/dist/include/nspr/prio.h"
typedef struct PRFileMap PRFileMap;




typedef enum PRFileMapProtect {
    PR_PROT_READONLY,
    PR_PROT_READWRITE,
    PR_PROT_WRITECOPY
} PRFileMapProtect;

extern PRFileMap * PR_CreateFileMap(
    PRFileDesc *fd,
    PRInt64 size,
    PRFileMapProtect prot);




extern PRInt32 PR_GetMemMapAlignment(void);

extern void * PR_MemMap(
    PRFileMap *fmap,
    PROffset64 offset,

    PRUint32 len);

extern PRStatus PR_MemUnmap(void *addr, PRUint32 len);

extern PRStatus PR_CloseFileMap(PRFileMap *fmap);
# 1836 "/home/nisse/hack/mozilla/dist/include/nspr/prio.h"
extern PRStatus PR_CreatePipe(
    PRFileDesc **readPipe,
    PRFileDesc **writePipe
);





struct PRPollDesc {
    PRFileDesc* fd;
    PRInt16 in_flags;
    PRInt16 out_flags;
};
# 1914 "/home/nisse/hack/mozilla/dist/include/nspr/prio.h"
extern PRInt32 PR_Poll(
    PRPollDesc *pds, PRIntn npds, PRIntervalTime timeout);
# 1958 "/home/nisse/hack/mozilla/dist/include/nspr/prio.h"
extern PRFileDesc * PR_NewPollableEvent(void);

extern PRStatus PR_DestroyPollableEvent(PRFileDesc *event);

extern PRStatus PR_SetPollableEvent(PRFileDesc *event);

extern PRStatus PR_WaitForPollableEvent(PRFileDesc *event);
# 50 "../../../../dist/public/security/certt.h" 2
# 1 "/home/nisse/hack/mozilla/dist/include/nspr/prmon.h" 1
# 51 "../../../../dist/public/security/certt.h" 2


typedef struct CERTAVAStr CERTAVA;
typedef struct CERTAttributeStr CERTAttribute;
typedef struct CERTAuthInfoAccessStr CERTAuthInfoAccess;
typedef struct CERTAuthKeyIDStr CERTAuthKeyID;
typedef struct CERTBasicConstraintsStr CERTBasicConstraints;
typedef struct CERTCertDBHandleStr CERTCertDBHandle;
typedef struct CERTCertExtensionStr CERTCertExtension;
typedef struct CERTCertKeyStr CERTCertKey;
typedef struct CERTCertListStr CERTCertList;
typedef struct CERTCertListNodeStr CERTCertListNode;
typedef struct CERTCertNicknamesStr CERTCertNicknames;
typedef struct CERTCertTrustStr CERTCertTrust;
typedef struct CERTCertificateStr CERTCertificate;
typedef struct CERTCertificateListStr CERTCertificateList;
typedef struct CERTCertificateRequestStr CERTCertificateRequest;
typedef struct CERTCrlStr CERTCrl;
typedef struct CERTCrlDistributionPointsStr CERTCrlDistributionPoints;
typedef struct CERTCrlEntryStr CERTCrlEntry;
typedef struct CERTCrlHeadNodeStr CERTCrlHeadNode;
typedef struct CERTCrlKeyStr CERTCrlKey;
typedef struct CERTCrlNodeStr CERTCrlNode;
typedef struct CERTDERCertsStr CERTDERCerts;
typedef struct CERTDistNamesStr CERTDistNames;
typedef struct CERTGeneralNameStr CERTGeneralName;
typedef struct CERTGeneralNameListStr CERTGeneralNameList;
typedef struct CERTIssuerAndSNStr CERTIssuerAndSN;
typedef struct CERTNameStr CERTName;
typedef struct CERTNameConstraintStr CERTNameConstraint;
typedef struct CERTNameConstraintsStr CERTNameConstraints;
typedef struct CERTOKDomainNameStr CERTOKDomainName;
typedef struct CERTPublicKeyAndChallengeStr CERTPublicKeyAndChallenge;
typedef struct CERTRDNStr CERTRDN;
typedef struct CERTSignedCrlStr CERTSignedCrl;
typedef struct CERTSignedDataStr CERTSignedData;
typedef struct CERTStatusConfigStr CERTStatusConfig;
typedef struct CERTSubjectListStr CERTSubjectList;
typedef struct CERTSubjectNodeStr CERTSubjectNode;
typedef struct CERTSubjectPublicKeyInfoStr CERTSubjectPublicKeyInfo;
typedef struct CERTValidityStr CERTValidity;
typedef struct CERTVerifyLogStr CERTVerifyLog;
typedef struct CERTVerifyLogNodeStr CERTVerifyLogNode;
typedef struct CRLDistributionPointStr CRLDistributionPoint;


typedef unsigned long CERTCrlNumber;




struct CERTAVAStr {
    SECItem type;
    SECItem value;
};




struct CERTRDNStr {
    CERTAVA **avas;
};




struct CERTNameStr {
    PLArenaPool *arena;
    CERTRDN **rdns;
};




struct CERTValidityStr {
    PLArenaPool *arena;
    SECItem notBefore;
    SECItem notAfter;
};




struct CERTCertKeyStr {
    SECItem serialNumber;
    SECItem derIssuer;
};





struct CERTSignedDataStr {
    SECItem data;
    SECAlgorithmID signatureAlgorithm;
    SECItem signature;
};




struct CERTSubjectPublicKeyInfoStr {
    PLArenaPool *arena;
    SECAlgorithmID algorithm;
    SECItem subjectPublicKey;
};

struct CERTPublicKeyAndChallengeStr {
    SECItem spki;
    SECItem challenge;
};

typedef struct _certDBEntryCert certDBEntryCert;
typedef struct _certDBEntryRevocation certDBEntryRevocation;

struct CERTCertTrustStr {
    unsigned int sslFlags;
    unsigned int emailFlags;
    unsigned int objectSigningFlags;
};




typedef enum {
    trustSSL = 0,
    trustEmail = 1,
    trustObjectSigning = 2,
    trustTypeNone = 3
} SECTrustType;
# 190 "../../../../dist/public/security/certt.h"
struct CERTCertExtensionStr {
    SECItem id;
    SECItem critical;
    SECItem value;
};

struct CERTSubjectNodeStr {
    struct CERTSubjectNodeStr *next;
    struct CERTSubjectNodeStr *prev;
    SECItem certKey;
    SECItem keyID;
};

struct CERTSubjectListStr {
    PLArenaPool *arena;
    int ncerts;
    char *emailAddr;
    CERTSubjectNode *head;
    CERTSubjectNode *tail;
    struct _certDBEntrySubject *entry;
};




struct CERTCertificateStr {






    PLArenaPool *arena;


    char *subjectName;
    char *issuerName;
    CERTSignedData signatureWrap;
    SECItem derCert;
    SECItem derIssuer;
    SECItem derSubject;
    SECItem derPublicKey;
    SECItem certKey;
    SECItem version;
    SECItem serialNumber;
    SECAlgorithmID signature;
    CERTName issuer;
    CERTValidity validity;
    CERTName subject;
    CERTSubjectPublicKeyInfo subjectPublicKeyInfo;
    SECItem issuerID;
    SECItem subjectID;
    CERTCertExtension **extensions;
    char *emailAddr;
    CERTCertDBHandle *dbhandle;
    SECItem subjectKeyID;
    PRBool keyIDGenerated;
    unsigned int keyUsage;
    unsigned int rawKeyUsage;
    PRBool keyUsagePresent;
    unsigned int nsCertType;





    PRBool keepSession;
    PRBool timeOK;
    CERTOKDomainName *domainOK;






    PRBool isperm;
    PRBool istemp;
    char *nickname;
    char *dbnickname;
    certDBEntryCert *dbEntry;
    CERTCertTrust *trust;




    int referenceCount;





    CERTSubjectList *subjectList;






    struct SECSocketNode *socketlist;
    int socketcount;
    struct SECSocketNode *authsocketlist;
    int authsocketcount;


    PK11SlotInfo *slot;
    CK_OBJECT_HANDLE pkcs11ID;
    PRBool ownSlot;
};
# 313 "../../../../dist/public/security/certt.h"
struct CERTDERCertsStr {
    PLArenaPool *arena;
    int numcerts;
    SECItem *rawCerts;
};






struct CERTAttributeStr {
    SECItem attrType;
    SECItem **attrValue;
};




struct CERTCertificateRequestStr {
    PLArenaPool *arena;
    SECItem version;
    CERTName subject;
    CERTSubjectPublicKeyInfo subjectPublicKeyInfo;
    SECItem **attributes;
};






struct CERTCertificateListStr {
    SECItem *certs;
    int len;
    PLArenaPool *arena;
};

struct CERTCertListNodeStr {
    PRCList links;
    CERTCertificate *cert;
    void *appData;
};

struct CERTCertListStr {
    PRCList list;
    PLArenaPool *arena;
};





struct CERTCrlEntryStr {
    SECItem serialNumber;
    SECItem revocationDate;
    CERTCertExtension **extensions;
};

struct CERTCrlStr {
    PLArenaPool *arena;
    SECItem version;
    SECAlgorithmID signatureAlg;
    SECItem derName;
    CERTName name;
    SECItem lastUpdate;
    SECItem nextUpdate;
    CERTCrlEntry **entries;
    CERTCertExtension **extensions;
};

struct CERTCrlKeyStr {
    SECItem derName;
    SECItem dummy;



};

struct CERTSignedCrlStr {
    PLArenaPool *arena;
    CERTCrl crl;
    certDBEntryRevocation *dbEntry;
    PRBool keep;
    PRBool isperm;
    PRBool istemp;
    int referenceCount;
    CERTCertDBHandle *dbhandle;
    CERTSignedData signatureWrap;
    char *url;
};


struct CERTCrlHeadNodeStr {
    PLArenaPool *arena;
    CERTCertDBHandle *dbhandle;
    CERTCrlNode *first;
    CERTCrlNode *last;
};


struct CERTCrlNodeStr {
    CERTCrlNode *next;
    int type;
    CERTSignedCrl *crl;
};





struct CERTDistNamesStr {
    PLArenaPool *arena;
    int nnames;
    SECItem *names;
    void *head;
};
# 453 "../../../../dist/public/security/certt.h"
typedef enum {
    certUsageSSLClient = 0,
    certUsageSSLServer = 1,
    certUsageSSLServerWithStepUp = 2,
    certUsageSSLCA = 3,
    certUsageEmailSigner = 4,
    certUsageEmailRecipient = 5,
    certUsageObjectSigner = 6,
    certUsageUserCertImport = 7,
    certUsageVerifyCA = 8,
    certUsageProtectedObjectSigner = 9,
    certUsageStatusResponder = 10,
    certUsageAnyCA = 11
} SECCertUsage;




typedef enum {
    certOwnerUser = 0,
    certOwnerPeer = 1,
    certOwnerCA = 2
} CERTCertOwner;




typedef enum {
    secCertTimeValid = 0,
    secCertTimeExpired = 1,
    secCertTimeNotValidYet = 2
} SECCertTimeValidity;
# 496 "../../../../dist/public/security/certt.h"
struct CERTCertNicknamesStr {
    PLArenaPool *arena;
    void *head;
    int numnicknames;
    char **nicknames;
    int what;
    int totallen;
};

struct CERTIssuerAndSNStr {
    SECItem derIssuer;
    CERTName issuer;
    SECItem serialNumber;
};
# 549 "../../../../dist/public/security/certt.h"
struct CERTBasicConstraintsStr {
    PRBool isCA;
    int pathLenConstraint;



};
# 571 "../../../../dist/public/security/certt.h"
typedef enum {
    certOtherName = 1,
    certRFC822Name = 2,
    certDNSName = 3,
    certX400Address = 4,
    certDirectoryName = 5,
    certEDIPartyName = 6,
    certURI = 7,
    certIPAddress = 8,
    certRegisterID = 9
} CERTGeneralNameType;


typedef struct OtherNameStr {
    SECItem name;
    SECItem oid;
}OtherName;



struct CERTGeneralNameStr {
    CERTGeneralNameType type;
    union {
        CERTName directoryName;
        OtherName OthName;
        SECItem other;
    }name;
    SECItem derDirectoryName;

    PRCList l;
};

struct CERTGeneralNameListStr {
    PLArenaPool *arena;
    CERTGeneralName *name;
    int refCount;
    int len;
    PRLock *lock;
};

struct CERTNameConstraintStr {
    CERTGeneralName name;
    SECItem DERName;
    SECItem min;
    SECItem max;
    PRCList l;
};


struct CERTNameConstraintsStr {
    CERTNameConstraint *permited;
    CERTNameConstraint *excluded;
    SECItem **DERPermited;
    SECItem **DERExcluded;
};





struct CERTAuthKeyIDStr {
    SECItem keyID;
    CERTGeneralName *authCertIssuer;
    SECItem authCertSerialNumber;
    SECItem **DERAuthCertIssuer;




};






typedef enum {
    generalName = 1,
    relativeDistinguishedName = 2
} DistributionPointTypes;

struct CRLDistributionPointStr {
    DistributionPointTypes distPointType;
    union {
        CERTGeneralName *fullName;
        CERTRDN relativeName;
    } distPoint;
    SECItem reasons;
    CERTGeneralName *crlIssuer;


    SECItem derDistPoint;
    SECItem derRelativeName;
    SECItem **derCrlIssuer;
    SECItem **derFullName;
    SECItem bitsmap;
};

struct CERTCrlDistributionPointsStr {
    CRLDistributionPoint **distPoints;
};






struct CERTVerifyLogNodeStr {
    CERTCertificate *cert;
    long error;
    unsigned int depth;
    void *arg;
    struct CERTVerifyLogNodeStr *next;
    struct CERTVerifyLogNodeStr *prev;
};


struct CERTVerifyLogStr {
    PLArenaPool *arena;
    unsigned int count;
    struct CERTVerifyLogNodeStr *head;
    struct CERTVerifyLogNodeStr *tail;
};


struct CERTOKDomainNameStr {
    CERTOKDomainName *next;
    char name[1];
};


typedef SECStatus ( *CERTStatusChecker) (CERTCertDBHandle *handle,
                                                    CERTCertificate *cert,
                                                    int64 time,
                                                    void *pwArg);

typedef SECStatus ( *CERTStatusDestroy) (CERTStatusConfig *handle);

struct CERTStatusConfigStr {
    CERTStatusChecker statusChecker;
    CERTStatusDestroy statusDestroy;
    void *statusContext;
};

struct CERTAuthInfoAccessStr {
    SECItem method;
    SECItem derLocation;
    CERTGeneralName *location;
};




typedef char * (*CERTDBNameFunc)(void *arg, int dbVersion);




typedef enum {
    certPackageNone = 0,
    certPackageCert = 1,
    certPackagePKCS7 = 2,
    certPackageNSCertSeq = 3,
    certPackageNSCertWrap = 4
} CERTPackageType;




typedef struct {
    SECOidTag oid;
    SECItem qualifierID;
    SECItem qualifierValue;
} CERTPolicyQualifier;

typedef struct {
    SECOidTag oid;
    SECItem policyID;
    CERTPolicyQualifier **policyQualifiers;
} CERTPolicyInfo;

typedef struct {
    PLArenaPool *arena;
    CERTPolicyInfo **policyInfos;
} CERTCertificatePolicies;

typedef struct {
    SECItem organization;
    SECItem **noticeNumbers;
} CERTNoticeReference;

typedef struct {
    PLArenaPool *arena;
    CERTNoticeReference noticeReference;
    SECItem derNoticeReference;
    SECItem displayText;
} CERTUserNotice;

typedef struct {
    PLArenaPool *arena;
    SECItem **oids;
} CERTOidSequence;





# 1 "../../../../dist/public/security/secasn1t.h" 1
# 779 "../../../../dist/public/security/certt.h" 2



extern const SEC_ASN1Template CERT_CertificateRequestTemplate[];
extern const SEC_ASN1Template CERT_CertificateTemplate[];
extern const SEC_ASN1Template SEC_SignedCertificateTemplate[];
extern const SEC_ASN1Template CERT_CertExtensionTemplate[];
extern const SEC_ASN1Template CERT_SequenceOfCertExtensionTemplate[];
extern const SEC_ASN1Template SECKEY_PublicKeyTemplate[];
extern const SEC_ASN1Template CERT_SubjectPublicKeyInfoTemplate[];
extern const SEC_ASN1Template CERT_ValidityTemplate[];
extern const SEC_ASN1Template CERT_PublicKeyAndChallengeTemplate[];
extern const SEC_ASN1Template SEC_CertSequenceTemplate[];

extern const SEC_ASN1Template CERT_IssuerAndSNTemplate[];
extern const SEC_ASN1Template CERT_NameTemplate[];
extern const SEC_ASN1Template CERT_SetOfSignedCrlTemplate[];
extern const SEC_ASN1Template CERT_RDNTemplate[];
extern const SEC_ASN1Template CERT_SignedDataTemplate[];
extern const SEC_ASN1Template CERT_CrlTemplate[];




extern const SEC_ASN1Template CERT_AttributeTemplate[];
extern const SEC_ASN1Template CERT_SetOfAttributeTemplate[];




extern const SEC_ASN1Template * NSS_Get_CERT_CertificateRequestTemplate (void *arg, PRBool enc);
extern const SEC_ASN1Template * NSS_Get_CERT_CertificateTemplate (void *arg, PRBool enc);
extern const SEC_ASN1Template * NSS_Get_CERT_CrlTemplate (void *arg, PRBool enc);
extern const SEC_ASN1Template * NSS_Get_CERT_IssuerAndSNTemplate (void *arg, PRBool enc);
extern const SEC_ASN1Template * NSS_Get_CERT_SetOfSignedCrlTemplate (void *arg, PRBool enc);
extern const SEC_ASN1Template * NSS_Get_CERT_SignedDataTemplate (void *arg, PRBool enc);
# 49 "../../../../dist/public/security/keyhi.h" 2
# 1 "../../../../dist/public/security/secpkcs5.h" 1
# 37 "../../../../dist/public/security/secpkcs5.h"
# 1 "/home/nisse/hack/mozilla/dist/include/nspr/plarena.h" 1
# 38 "../../../../dist/public/security/secpkcs5.h" 2
# 1 "../../../../dist/public/security/secitem.h" 1
# 39 "../../../../dist/public/security/secpkcs5.h" 2
# 1 "../../../../dist/public/security/seccomon.h" 1
# 40 "../../../../dist/public/security/secpkcs5.h" 2
# 1 "../../../../dist/public/security/secoidt.h" 1
# 41 "../../../../dist/public/security/secpkcs5.h" 2
# 1 "../../../../dist/public/security/hasht.h" 1
# 42 "../../../../dist/public/security/hasht.h"
typedef struct SECHashObjectStr SECHashObject;
typedef struct HASHContextStr HASHContext;





typedef enum {
    HASH_AlgNULL = 0,
    HASH_AlgMD2 = 1,
    HASH_AlgMD5 = 2,
    HASH_AlgSHA1 = 3,
    HASH_AlgTOTAL
} HASH_HashType;
# 67 "../../../../dist/public/security/hasht.h"
struct SECHashObjectStr {
    unsigned int length;
    void * (*create)(void);
    void * (*clone)(void *);
    void (*destroy)(void *, PRBool);
    void (*begin)(void *);
    void (*update)(void *, const unsigned char *, unsigned int);
    void (*end)(void *, unsigned char *, unsigned int *, unsigned int);
};

struct HASHContextStr {
    const struct SECHashObjectStr *hashobj;
    void *hash_context;
};





extern const SECHashObject SECHashObjects[];




extern const SECHashObject SECRawHashObjects[];
# 42 "../../../../dist/public/security/secpkcs5.h" 2

typedef SECItem * (* SEC_PKCS5GetPBEPassword)(void *arg);


typedef enum {
    pbeBitGenIDNull = 0,
    pbeBitGenCipherKey = 0x01,
    pbeBitGenCipherIV = 0x02,
    pbeBitGenIntegrityKey = 0x03
} PBEBitGenID;

typedef struct _pbeBitGenParameters {
    unsigned int u, v;
    SECOidTag hashAlgorithm;
} pbeBitGenParameters;

typedef struct _PBEBitGenContext {
    PLArenaPool *arena;


    pbeBitGenParameters pbeParams;
    const SECHashObject *hashObject;
    void *hash;


    SECItem D, S, P, I, A, B;
    unsigned int c, n;
    unsigned int iterations;
} PBEBitGenContext;

extern const SEC_ASN1Template SEC_PKCS5PBEParameterTemplate[];
typedef struct SEC_PKCS5PBEParameterStr SEC_PKCS5PBEParameter;

struct SEC_PKCS5PBEParameterStr {
    PLArenaPool *poolp;
    SECItem salt;
    SECItem iteration;


    SECOidTag algorithm;
    int iter;
};
# 98 "../../../../dist/public/security/secpkcs5.h"
extern SECAlgorithmID *
SEC_PKCS5CreateAlgorithmID(SECOidTag algorithm,
                           SECItem *salt,
                           int iteration);
# 110 "../../../../dist/public/security/secpkcs5.h"
extern SECItem *
SEC_PKCS5GetIV(SECAlgorithmID *algid, SECItem *pwitem, PRBool faulty3DES);
# 120 "../../../../dist/public/security/secpkcs5.h"
extern SECItem *
SEC_PKCS5GetKey(SECAlgorithmID *algid, SECItem *pwitem, PRBool faulty3DES);






extern SECItem *
SEC_PKCS5GetSalt(SECAlgorithmID *algid);
# 140 "../../../../dist/public/security/secpkcs5.h"
extern SECItem *
SEC_PKCS5CipherData(SECAlgorithmID *algid, SECItem *pwitem,
                    SECItem *src, PRBool encrypt, PRBool *update);




extern PRBool
SEC_PKCS5IsAlgorithmPBEAlg(SECAlgorithmID *algid);


extern void
SEC_PKCS5DestroyPBEParameter(SEC_PKCS5PBEParameter *param);


extern SEC_PKCS5PBEParameter *
SEC_PKCS5GetPBEParameter(SECAlgorithmID *algid);


extern int
SEC_PKCS5GetKeyLength(SECAlgorithmID *algid);



extern SECOidTag
SEC_PKCS5GetPBEAlgorithm(SECOidTag algTag, int keyLen);


extern SECOidTag
SEC_PKCS5GetCryptoAlgorithm(SECAlgorithmID *algid);

extern PBEBitGenContext *
__PBE_CreateContext(SECOidTag hashAlgorithm, PBEBitGenID bitGenPurpose,
                  SECItem *pwitem, SECItem *salt, unsigned int bitsNeeded,
                  unsigned int interations);

extern SECItem *
__PBE_GenerateBits(PBEBitGenContext *pbeCtxt);

extern void __PBE_DestroyContext(PBEBitGenContext *pbeCtxt);

extern SECStatus PBE_PK11ParamToAlgid(SECOidTag algTag, SECItem *param,
                                  PLArenaPool *arena, SECAlgorithmID *algId);
# 50 "../../../../dist/public/security/keyhi.h" 2







extern void SECKEY_DestroySubjectPublicKeyInfo(CERTSubjectPublicKeyInfo *spki);





extern SECStatus SECKEY_CopySubjectPublicKeyInfo(PLArenaPool *arena,
                                             CERTSubjectPublicKeyInfo *dst,
                                             CERTSubjectPublicKeyInfo *src);





extern SECStatus
SECKEY_UpdateCertPQG(CERTCertificate * subjectCert);





extern SECStatus
SECKEY_KEAParamCompare(CERTCertificate *cert1,CERTCertificate *cert2);




extern unsigned SECKEY_PublicKeyStrength(SECKEYPublicKey *pubk);





extern SECKEYPrivateKey *SECKEY_CopyPrivateKey(SECKEYPrivateKey *privKey);




extern SECKEYPublicKey *SECKEY_CopyPublicKey(SECKEYPublicKey *pubKey);




extern SECKEYPublicKey *SECKEY_ConvertToPublicKey(SECKEYPrivateKey *privateKey);




SECKEYPrivateKey *SECKEY_CreateRSAPrivateKey(int keySizeInBits,
                                           SECKEYPublicKey **pubk, void *cx);




SECKEYPrivateKey *SECKEY_CreateDHPrivateKey(DHParams *param,
                                           SECKEYPublicKey **pubk, void *cx);



extern CERTSubjectPublicKeyInfo *
SECKEY_CreateSubjectPublicKeyInfo(SECKEYPublicKey *k);




extern SECKEYPublicKey *SECKEY_DecodeDERPublicKey(SECItem *pubkder);




extern SECKEYPublicKey *SECKEY_ConvertAndDecodePublicKey(char *pubkstr);





extern CERTSubjectPublicKeyInfo *
SECKEY_ConvertAndDecodePublicKeyAndChallenge(char *pkacstr, char *challenge,
                                                                void *cx);





SECItem *
SECKEY_EncodeDERSubjectPublicKeyInfo(SECKEYPublicKey *pubk);





extern CERTSubjectPublicKeyInfo *
SECKEY_DecodeDERSubjectPublicKeyInfo(SECItem *spkider);





extern CERTSubjectPublicKeyInfo *
SECKEY_ConvertAndDecodeSubjectPublicKeyInfo(char *spkistr);





extern SECKEYPublicKey *
SECKEY_ExtractPublicKey(CERTSubjectPublicKeyInfo *);





extern void SECKEY_DestroyPrivateKey(SECKEYPrivateKey *key);






extern void SECKEY_DestroyPublicKey(SECKEYPublicKey *key);
# 186 "../../../../dist/public/security/keyhi.h"
extern void
SECKEY_DestroyPrivateKeyInfo(SECKEYPrivateKeyInfo *pvk, PRBool freeit);







extern void
SECKEY_DestroyEncryptedPrivateKeyInfo(SECKEYEncryptedPrivateKeyInfo *epki,
                                      PRBool freeit);
# 207 "../../../../dist/public/security/keyhi.h"
extern SECStatus
SECKEY_CopyPrivateKeyInfo(PLArenaPool *poolp,
                          SECKEYPrivateKeyInfo *to,
                          SECKEYPrivateKeyInfo *from);
# 220 "../../../../dist/public/security/keyhi.h"
extern SECStatus
SECKEY_CopyEncryptedPrivateKeyInfo(PLArenaPool *poolp,
                                   SECKEYEncryptedPrivateKeyInfo *to,
                                   SECKEYEncryptedPrivateKeyInfo *from);



KeyType SECKEY_GetPrivateKeyType(SECKEYPrivateKey *privKey);
KeyType SECKEY_GetPublicKeyType(SECKEYPublicKey *pubKey);





SECKEYPublicKey*
SECKEY_ImportDERPublicKey(SECItem *derKey, CK_KEY_TYPE type);

SECKEYPrivateKeyList*
SECKEY_NewPrivateKeyList(void);

void
SECKEY_DestroyPrivateKeyList(SECKEYPrivateKeyList *keys);

void
SECKEY_RemovePrivateKeyListNode(SECKEYPrivateKeyListNode *node);

SECStatus
SECKEY_AddPrivateKeyToListTail( SECKEYPrivateKeyList *list,
                                SECKEYPrivateKey *key);
# 42 "../../../../dist/public/security/key.h" 2
# 1 "../../../../dist/public/security/keylow.h" 1
# 41 "../../../../dist/public/security/keylow.h"
# 1 "/home/nisse/hack/mozilla/dist/include/nspr/prtypes.h" 1
# 42 "../../../../dist/public/security/keylow.h" 2
# 1 "../../../../dist/public/security/seccomon.h" 1
# 43 "../../../../dist/public/security/keylow.h" 2
# 1 "../../../../dist/public/security/keydbt.h" 1
# 41 "../../../../dist/public/security/keydbt.h"
# 1 "/home/nisse/hack/mozilla/dist/include/nspr/prtypes.h" 1
# 42 "../../../../dist/public/security/keydbt.h" 2
# 1 "/home/nisse/hack/mozilla/dist/include/nspr/plarena.h" 1
# 43 "../../../../dist/public/security/keydbt.h" 2
# 1 "../../../../dist/public/security/secitem.h" 1
# 44 "../../../../dist/public/security/keydbt.h" 2
# 1 "../../../../dist/public/security/secasn1t.h" 1
# 45 "../../../../dist/public/security/keydbt.h" 2
# 1 "../../../../dist/public/security/secmodt.h" 1
# 46 "../../../../dist/public/security/keydbt.h" 2
# 1 "../../../../dist/public/security/pkcs11t.h" 1
# 47 "../../../../dist/public/security/keydbt.h" 2





struct SECKEYDBKeyStr {
    PLArenaPool *arena;
    int version;
    char *nickname;
    SECItem salt;
    SECItem derPK;
};
typedef struct SECKEYDBKeyStr SECKEYDBKey;

typedef struct SECKEYKeyDBHandleStr SECKEYKeyDBHandle;
# 70 "../../../../dist/public/security/keydbt.h"
typedef SECItem * (* SECKEYGetPasswordKey)(void *arg,
                                           SECKEYKeyDBHandle *handle);

extern const SEC_ASN1Template SECKEY_EncryptedPrivateKeyInfoTemplate[];
extern const SEC_ASN1Template SECKEY_RSAPublicKeyTemplate[];
extern const SEC_ASN1Template SECKEY_RSAPrivateKeyTemplate[];
extern const SEC_ASN1Template SECKEY_DSAPublicKeyTemplate[];
extern const SEC_ASN1Template SECKEY_DSAPrivateKeyTemplate[];
extern const SEC_ASN1Template SECKEY_DSAPrivateKeyExportTemplate[];
extern const SEC_ASN1Template SECKEY_DHPrivateKeyTemplate[];
extern const SEC_ASN1Template SECKEY_DHPrivateKeyExportTemplate[];
extern const SEC_ASN1Template SECKEY_PrivateKeyInfoTemplate[];
extern const SEC_ASN1Template SECKEY_DHPublicKeyTemplate[];
extern const SEC_ASN1Template SECKEY_DHParamKeyTemplate[];
extern const SEC_ASN1Template SECKEY_PointerToEncryptedPrivateKeyInfoTemplate[];
extern const SEC_ASN1Template SECKEY_PointerToPrivateKeyInfoTemplate[];
extern const SEC_ASN1Template SECKEY_PQGParamsTemplate[];
extern const SEC_ASN1Template SECKEY_AttributeTemplate[];




extern SEC_ASN1TemplateChooser NSS_Get_SECKEY_PrivateKeyInfoTemplate;
extern SEC_ASN1TemplateChooser NSS_Get_SECKEY_PointerToPrivateKeyInfoTemplate;
extern SEC_ASN1TemplateChooser NSS_Get_SECKEY_EncryptedPrivateKeyInfoTemplate;
extern SEC_ASN1TemplateChooser NSS_Get_SECKEY_PointerToEncryptedPrivateKeyInfoTemplate;
extern SEC_ASN1TemplateChooser NSS_Get_SECKEY_DSAPublicKeyTemplate;
extern SEC_ASN1TemplateChooser NSS_Get_SECKEY_RSAPublicKeyTemplate;
# 44 "../../../../dist/public/security/keylow.h" 2
# 1 "../../../../dist/public/security/secoidt.h" 1
# 45 "../../../../dist/public/security/keylow.h" 2
# 1 "../../../../dist/public/security/certt.h" 1
# 46 "../../../../dist/public/security/keylow.h" 2
# 1 "../../../../dist/public/security/keythi.h" 1
# 47 "../../../../dist/public/security/keylow.h" 2



typedef char * (* SECKEYDBNameFunc)(void *arg, int dbVersion);




extern SECKEYKeyDBHandle *SECKEY_OpenKeyDB(PRBool readOnly,
                                           SECKEYDBNameFunc namecb,
                                           void *cbarg);

extern SECKEYKeyDBHandle *SECKEY_OpenKeyDBFilename(char *filename,
                                                   PRBool readOnly);




extern SECStatus SECKEY_UpdateKeyDBPass1(SECKEYKeyDBHandle *handle);
extern SECStatus SECKEY_UpdateKeyDBPass2(SECKEYKeyDBHandle *handle,
                                         SECItem *pwitem);




extern SECStatus SECKEY_ResetKeyDB(SECKEYKeyDBHandle *handle);




extern void SECKEY_CloseKeyDB(SECKEYKeyDBHandle *handle);




extern int SECKEY_GetKeyDBVersion(SECKEYKeyDBHandle *handle);




extern void SECKEY_SetDefaultKeyDB(SECKEYKeyDBHandle *handle);
extern SECKEYKeyDBHandle *SECKEY_GetDefaultKeyDB(void);


extern void SECKEY_SetDefaultKeyDBAlg(SECOidTag alg);




extern SECItem *SECKEY_HashPassword(char *pw, SECItem *salt);






extern SECItem *
SECKEY_DeriveKeyDBPassword(SECKEYKeyDBHandle *handle, char *pw);




extern SECStatus SECKEY_DeleteKey(SECKEYKeyDBHandle *handle,
                                  SECItem *pubkey);







extern SECStatus SECKEY_StoreKeyByPublicKey(SECKEYKeyDBHandle *handle,
                                            SECKEYLowPrivateKey *pk,
                                            SECItem *pubKeyData,
                                            char *nickname,
                                            SECKEYGetPasswordKey f, void *arg);


extern SECStatus SECKEY_KeyForCertExists(SECKEYKeyDBHandle *handle,
                                         CERTCertificate *cert);

SECKEYLowPrivateKey *
SECKEY_FindKeyByCert(SECKEYKeyDBHandle *handle, CERTCertificate *cert,
                     SECKEYGetPasswordKey f, void *arg);

extern SECStatus SECKEY_HasKeyDBPassword(SECKEYKeyDBHandle *handle);
extern SECStatus SECKEY_SetKeyDBPassword(SECKEYKeyDBHandle *handle,
                                     SECItem *pwitem);
extern SECStatus SECKEY_CheckKeyDBPassword(SECKEYKeyDBHandle *handle,
                                           SECItem *pwitem);
extern SECStatus SECKEY_ChangeKeyDBPassword(SECKEYKeyDBHandle *handle,
                                            SECItem *oldpwitem,
                                            SECItem *newpwitem);






extern void SECKEY_LowDestroyPrivateKey(SECKEYLowPrivateKey *key);






extern void SECKEY_LowDestroyPublicKey(SECKEYLowPublicKey *key);




extern unsigned int SECKEY_LowPublicModulusLen(SECKEYLowPublicKey *pubKey);





extern unsigned int SECKEY_LowPrivateModulusLen(SECKEYLowPrivateKey *privKey);





extern SECKEYLowPublicKey
                *SECKEY_LowConvertToPublicKey(SECKEYLowPrivateKey *privateKey);
# 182 "../../../../dist/public/security/keylow.h"
extern SECStatus
SECKEY_SetKeyDBPasswordAlg(SECKEYKeyDBHandle *handle,
                        SECItem *pwitem,
                        SECOidTag algorithm);
# 195 "../../../../dist/public/security/keylow.h"
extern SECStatus
SECKEY_CheckKeyDBPasswordAlg(SECKEYKeyDBHandle *handle,
                                SECItem *pwitem,
                                SECOidTag algorithm);
# 211 "../../../../dist/public/security/keylow.h"
extern SECStatus
SECKEY_ChangeKeyDBPasswordAlg(SECKEYKeyDBHandle *handle,
                              SECItem *oldpwitem, SECItem *newpwitem,
                              SECOidTag old_algorithm);
# 224 "../../../../dist/public/security/keylow.h"
extern SECStatus
SECKEY_StoreKeyByPublicKeyAlg(SECKEYKeyDBHandle *handle,
                              SECKEYLowPrivateKey *privkey,
                              SECItem *pubKeyData,
                              char *nickname,
                              SECKEYGetPasswordKey f, void *arg,
                              SECOidTag algorithm);







extern SECKEYLowPrivateKey *
SECKEY_FindKeyByPublicKey(SECKEYKeyDBHandle *handle, SECItem *modulus,
                          SECKEYGetPasswordKey f, void *arg);




extern SECKEYLowPrivateKey *
SECKEY_CopyLowPrivateKey(SECKEYLowPrivateKey *privKey);
# 43 "../../../../dist/public/security/key.h" 2
# 39 "p12t.h" 2
# 1 "../../../../dist/public/security/pkcs11.h" 1
# 238 "../../../../dist/public/security/pkcs11.h"
# 1 "../../../../dist/public/security/pkcs11t.h" 1
# 239 "../../../../dist/public/security/pkcs11.h" 2





# 1 "../../../../dist/public/security/pkcs11p.h" 1
# 245 "../../../../dist/public/security/pkcs11.h" 2
# 256 "../../../../dist/public/security/pkcs11.h"
# 1 "../../../../dist/public/security/pkcs11f.h" 1
# 50 "../../../../dist/public/security/pkcs11f.h"
extern CK_RV C_Initialize

(
  CK_VOID_PTR pInitArgs


);





extern CK_RV C_Finalize

(
  CK_VOID_PTR pReserved
);




extern CK_RV C_GetInfo

(
  CK_INFO_PTR pInfo
);




extern CK_RV C_GetFunctionList

(
  CK_FUNCTION_LIST_PTR_PTR ppFunctionList

);







extern CK_RV C_GetSlotList

(
  CK_BBOOL tokenPresent,
  CK_SLOT_ID_PTR pSlotList,
  CK_ULONG_PTR pulCount
);





extern CK_RV C_GetSlotInfo

(
  CK_SLOT_ID slotID,
  CK_SLOT_INFO_PTR pInfo
);





extern CK_RV C_GetTokenInfo

(
  CK_SLOT_ID slotID,
  CK_TOKEN_INFO_PTR pInfo
);





extern CK_RV C_GetMechanismList

(
  CK_SLOT_ID slotID,
  CK_MECHANISM_TYPE_PTR pMechanismList,
  CK_ULONG_PTR pulCount
);





extern CK_RV C_GetMechanismInfo

(
  CK_SLOT_ID slotID,
  CK_MECHANISM_TYPE type,
  CK_MECHANISM_INFO_PTR pInfo
);




extern CK_RV C_InitToken

(
  CK_SLOT_ID slotID,
  CK_CHAR_PTR pPin,
  CK_ULONG ulPinLen,
  CK_CHAR_PTR pLabel
);




extern CK_RV C_InitPIN

(
  CK_SESSION_HANDLE hSession,
  CK_CHAR_PTR pPin,
  CK_ULONG ulPinLen
);




extern CK_RV C_SetPIN

(
  CK_SESSION_HANDLE hSession,
  CK_CHAR_PTR pOldPin,
  CK_ULONG ulOldLen,
  CK_CHAR_PTR pNewPin,
  CK_ULONG ulNewLen
);
# 190 "../../../../dist/public/security/pkcs11f.h"
extern CK_RV C_OpenSession

(
  CK_SLOT_ID slotID,
  CK_FLAGS flags,
  CK_VOID_PTR pApplication,
  CK_NOTIFY Notify,
  CK_SESSION_HANDLE_PTR phSession
);





extern CK_RV C_CloseSession

(
  CK_SESSION_HANDLE hSession
);




extern CK_RV C_CloseAllSessions

(
  CK_SLOT_ID slotID
);




extern CK_RV C_GetSessionInfo

(
  CK_SESSION_HANDLE hSession,
  CK_SESSION_INFO_PTR pInfo
);





extern CK_RV C_GetOperationState

(
  CK_SESSION_HANDLE hSession,
  CK_BYTE_PTR pOperationState,
  CK_ULONG_PTR pulOperationStateLen
);





extern CK_RV C_SetOperationState

(
  CK_SESSION_HANDLE hSession,
  CK_BYTE_PTR pOperationState,
  CK_ULONG ulOperationStateLen,
  CK_OBJECT_HANDLE hEncryptionKey,
  CK_OBJECT_HANDLE hAuthenticationKey
);




extern CK_RV C_Login

(
  CK_SESSION_HANDLE hSession,
  CK_USER_TYPE userType,
  CK_CHAR_PTR pPin,
  CK_ULONG ulPinLen
);




extern CK_RV C_Logout

(
  CK_SESSION_HANDLE hSession
);







extern CK_RV C_CreateObject

(
  CK_SESSION_HANDLE hSession,
  CK_ATTRIBUTE_PTR pTemplate,
  CK_ULONG ulCount,
  CK_OBJECT_HANDLE_PTR phObject
);





extern CK_RV C_CopyObject

(
  CK_SESSION_HANDLE hSession,
  CK_OBJECT_HANDLE hObject,
  CK_ATTRIBUTE_PTR pTemplate,
  CK_ULONG ulCount,
  CK_OBJECT_HANDLE_PTR phNewObject
);




extern CK_RV C_DestroyObject

(
  CK_SESSION_HANDLE hSession,
  CK_OBJECT_HANDLE hObject
);




extern CK_RV C_GetObjectSize

(
  CK_SESSION_HANDLE hSession,
  CK_OBJECT_HANDLE hObject,
  CK_ULONG_PTR pulSize
);





extern CK_RV C_GetAttributeValue

(
  CK_SESSION_HANDLE hSession,
  CK_OBJECT_HANDLE hObject,
  CK_ATTRIBUTE_PTR pTemplate,
  CK_ULONG ulCount
);





extern CK_RV C_SetAttributeValue

(
  CK_SESSION_HANDLE hSession,
  CK_OBJECT_HANDLE hObject,
  CK_ATTRIBUTE_PTR pTemplate,
  CK_ULONG ulCount
);





extern CK_RV C_FindObjectsInit

(
  CK_SESSION_HANDLE hSession,
  CK_ATTRIBUTE_PTR pTemplate,
  CK_ULONG ulCount
);






extern CK_RV C_FindObjects

(
 CK_SESSION_HANDLE hSession,
 CK_OBJECT_HANDLE_PTR phObject,
 CK_ULONG ulMaxObjectCount,
 CK_ULONG_PTR pulObjectCount
);





extern CK_RV C_FindObjectsFinal

(
  CK_SESSION_HANDLE hSession
);







extern CK_RV C_EncryptInit

(
  CK_SESSION_HANDLE hSession,
  CK_MECHANISM_PTR pMechanism,
  CK_OBJECT_HANDLE hKey
);




extern CK_RV C_Encrypt

(
  CK_SESSION_HANDLE hSession,
  CK_BYTE_PTR pData,
  CK_ULONG ulDataLen,
  CK_BYTE_PTR pEncryptedData,
  CK_ULONG_PTR pulEncryptedDataLen
);





extern CK_RV C_EncryptUpdate

(
  CK_SESSION_HANDLE hSession,
  CK_BYTE_PTR pPart,
  CK_ULONG ulPartLen,
  CK_BYTE_PTR pEncryptedPart,
  CK_ULONG_PTR pulEncryptedPartLen
);





extern CK_RV C_EncryptFinal

(
  CK_SESSION_HANDLE hSession,
  CK_BYTE_PTR pLastEncryptedPart,
  CK_ULONG_PTR pulLastEncryptedPartLen
);




extern CK_RV C_DecryptInit

(
  CK_SESSION_HANDLE hSession,
  CK_MECHANISM_PTR pMechanism,
  CK_OBJECT_HANDLE hKey
);




extern CK_RV C_Decrypt

(
  CK_SESSION_HANDLE hSession,
  CK_BYTE_PTR pEncryptedData,
  CK_ULONG ulEncryptedDataLen,
  CK_BYTE_PTR pData,
  CK_ULONG_PTR pulDataLen
);





extern CK_RV C_DecryptUpdate

(
  CK_SESSION_HANDLE hSession,
  CK_BYTE_PTR pEncryptedPart,
  CK_ULONG ulEncryptedPartLen,
  CK_BYTE_PTR pPart,
  CK_ULONG_PTR pulPartLen
);





extern CK_RV C_DecryptFinal

(
  CK_SESSION_HANDLE hSession,
  CK_BYTE_PTR pLastPart,
  CK_ULONG_PTR pulLastPartLen
);







extern CK_RV C_DigestInit

(
  CK_SESSION_HANDLE hSession,
  CK_MECHANISM_PTR pMechanism
);




extern CK_RV C_Digest

(
  CK_SESSION_HANDLE hSession,
  CK_BYTE_PTR pData,
  CK_ULONG ulDataLen,
  CK_BYTE_PTR pDigest,
  CK_ULONG_PTR pulDigestLen
);





extern CK_RV C_DigestUpdate

(
  CK_SESSION_HANDLE hSession,
  CK_BYTE_PTR pPart,
  CK_ULONG ulPartLen
);






extern CK_RV C_DigestKey

(
  CK_SESSION_HANDLE hSession,
  CK_OBJECT_HANDLE hKey
);





extern CK_RV C_DigestFinal

(
  CK_SESSION_HANDLE hSession,
  CK_BYTE_PTR pDigest,
  CK_ULONG_PTR pulDigestLen
);
# 562 "../../../../dist/public/security/pkcs11f.h"
extern CK_RV C_SignInit

(
  CK_SESSION_HANDLE hSession,
  CK_MECHANISM_PTR pMechanism,
  CK_OBJECT_HANDLE hKey
);






extern CK_RV C_Sign

(
  CK_SESSION_HANDLE hSession,
  CK_BYTE_PTR pData,
  CK_ULONG ulDataLen,
  CK_BYTE_PTR pSignature,
  CK_ULONG_PTR pulSignatureLen
);






extern CK_RV C_SignUpdate

(
  CK_SESSION_HANDLE hSession,
  CK_BYTE_PTR pPart,
  CK_ULONG ulPartLen
);





extern CK_RV C_SignFinal

(
  CK_SESSION_HANDLE hSession,
  CK_BYTE_PTR pSignature,
  CK_ULONG_PTR pulSignatureLen
);





extern CK_RV C_SignRecoverInit

(
  CK_SESSION_HANDLE hSession,
  CK_MECHANISM_PTR pMechanism,
  CK_OBJECT_HANDLE hKey
);





extern CK_RV C_SignRecover

(
  CK_SESSION_HANDLE hSession,
  CK_BYTE_PTR pData,
  CK_ULONG ulDataLen,
  CK_BYTE_PTR pSignature,
  CK_ULONG_PTR pulSignatureLen
);
# 644 "../../../../dist/public/security/pkcs11f.h"
extern CK_RV C_VerifyInit

(
  CK_SESSION_HANDLE hSession,
  CK_MECHANISM_PTR pMechanism,
  CK_OBJECT_HANDLE hKey
);






extern CK_RV C_Verify

(
  CK_SESSION_HANDLE hSession,
  CK_BYTE_PTR pData,
  CK_ULONG ulDataLen,
  CK_BYTE_PTR pSignature,
  CK_ULONG ulSignatureLen
);






extern CK_RV C_VerifyUpdate

(
  CK_SESSION_HANDLE hSession,
  CK_BYTE_PTR pPart,
  CK_ULONG ulPartLen
);





extern CK_RV C_VerifyFinal

(
  CK_SESSION_HANDLE hSession,
  CK_BYTE_PTR pSignature,
  CK_ULONG ulSignatureLen
);





extern CK_RV C_VerifyRecoverInit

(
  CK_SESSION_HANDLE hSession,
  CK_MECHANISM_PTR pMechanism,
  CK_OBJECT_HANDLE hKey
);





extern CK_RV C_VerifyRecover

(
  CK_SESSION_HANDLE hSession,
  CK_BYTE_PTR pSignature,
  CK_ULONG ulSignatureLen,
  CK_BYTE_PTR pData,
  CK_ULONG_PTR pulDataLen
);
# 725 "../../../../dist/public/security/pkcs11f.h"
extern CK_RV C_DigestEncryptUpdate

(
  CK_SESSION_HANDLE hSession,
  CK_BYTE_PTR pPart,
  CK_ULONG ulPartLen,
  CK_BYTE_PTR pEncryptedPart,
  CK_ULONG_PTR pulEncryptedPartLen
);





extern CK_RV C_DecryptDigestUpdate

(
  CK_SESSION_HANDLE hSession,
  CK_BYTE_PTR pEncryptedPart,
  CK_ULONG ulEncryptedPartLen,
  CK_BYTE_PTR pPart,
  CK_ULONG_PTR pulPartLen
);





extern CK_RV C_SignEncryptUpdate

(
  CK_SESSION_HANDLE hSession,
  CK_BYTE_PTR pPart,
  CK_ULONG ulPartLen,
  CK_BYTE_PTR pEncryptedPart,
  CK_ULONG_PTR pulEncryptedPartLen
);





extern CK_RV C_DecryptVerifyUpdate

(
  CK_SESSION_HANDLE hSession,
  CK_BYTE_PTR pEncryptedPart,
  CK_ULONG ulEncryptedPartLen,
  CK_BYTE_PTR pPart,
  CK_ULONG_PTR pulPartLen
);
# 784 "../../../../dist/public/security/pkcs11f.h"
extern CK_RV C_GenerateKey

(
  CK_SESSION_HANDLE hSession,
  CK_MECHANISM_PTR pMechanism,
  CK_ATTRIBUTE_PTR pTemplate,
  CK_ULONG ulCount,
  CK_OBJECT_HANDLE_PTR phKey
);





extern CK_RV C_GenerateKeyPair

(
  CK_SESSION_HANDLE hSession,

  CK_MECHANISM_PTR pMechanism,

  CK_ATTRIBUTE_PTR pPublicKeyTemplate,


  CK_ULONG ulPublicKeyAttributeCount,

  CK_ATTRIBUTE_PTR pPrivateKeyTemplate,


  CK_ULONG ulPrivateKeyAttributeCount,

  CK_OBJECT_HANDLE_PTR phPublicKey,


  CK_OBJECT_HANDLE_PTR phPrivateKey


);




extern CK_RV C_WrapKey

(
  CK_SESSION_HANDLE hSession,
  CK_MECHANISM_PTR pMechanism,
  CK_OBJECT_HANDLE hWrappingKey,
  CK_OBJECT_HANDLE hKey,
  CK_BYTE_PTR pWrappedKey,
  CK_ULONG_PTR pulWrappedKeyLen
);





extern CK_RV C_UnwrapKey

(
  CK_SESSION_HANDLE hSession,
  CK_MECHANISM_PTR pMechanism,
  CK_OBJECT_HANDLE hUnwrappingKey,
  CK_BYTE_PTR pWrappedKey,
  CK_ULONG ulWrappedKeyLen,
  CK_ATTRIBUTE_PTR pTemplate,
  CK_ULONG ulAttributeCount,
  CK_OBJECT_HANDLE_PTR phKey
);





extern CK_RV C_DeriveKey

(
  CK_SESSION_HANDLE hSession,
  CK_MECHANISM_PTR pMechanism,
  CK_OBJECT_HANDLE hBaseKey,
  CK_ATTRIBUTE_PTR pTemplate,
  CK_ULONG ulAttributeCount,
  CK_OBJECT_HANDLE_PTR phKey
);
# 876 "../../../../dist/public/security/pkcs11f.h"
extern CK_RV C_SeedRandom

(
  CK_SESSION_HANDLE hSession,
  CK_BYTE_PTR pSeed,
  CK_ULONG ulSeedLen
);




extern CK_RV C_GenerateRandom

(
  CK_SESSION_HANDLE hSession,
  CK_BYTE_PTR RandomData,
  CK_ULONG ulRandomLen
);
# 903 "../../../../dist/public/security/pkcs11f.h"
extern CK_RV C_GetFunctionStatus

(
  CK_SESSION_HANDLE hSession
);





extern CK_RV C_CancelFunction

(
  CK_SESSION_HANDLE hSession
);
# 926 "../../../../dist/public/security/pkcs11f.h"
extern CK_RV C_WaitForSlotEvent

(
  CK_FLAGS flags,
  CK_SLOT_ID_PTR pSlot,
  CK_VOID_PTR pRserved
);
# 257 "../../../../dist/public/security/pkcs11.h" 2
# 275 "../../../../dist/public/security/pkcs11.h"
# 1 "../../../../dist/public/security/pkcs11f.h" 1
# 50 "../../../../dist/public/security/pkcs11f.h"
typedef CK_RV ( * CK_C_Initialize)

(
  CK_VOID_PTR pInitArgs


);





typedef CK_RV ( * CK_C_Finalize)

(
  CK_VOID_PTR pReserved
);




typedef CK_RV ( * CK_C_GetInfo)

(
  CK_INFO_PTR pInfo
);




typedef CK_RV ( * CK_C_GetFunctionList)

(
  CK_FUNCTION_LIST_PTR_PTR ppFunctionList

);







typedef CK_RV ( * CK_C_GetSlotList)

(
  CK_BBOOL tokenPresent,
  CK_SLOT_ID_PTR pSlotList,
  CK_ULONG_PTR pulCount
);





typedef CK_RV ( * CK_C_GetSlotInfo)

(
  CK_SLOT_ID slotID,
  CK_SLOT_INFO_PTR pInfo
);





typedef CK_RV ( * CK_C_GetTokenInfo)

(
  CK_SLOT_ID slotID,
  CK_TOKEN_INFO_PTR pInfo
);





typedef CK_RV ( * CK_C_GetMechanismList)

(
  CK_SLOT_ID slotID,
  CK_MECHANISM_TYPE_PTR pMechanismList,
  CK_ULONG_PTR pulCount
);





typedef CK_RV ( * CK_C_GetMechanismInfo)

(
  CK_SLOT_ID slotID,
  CK_MECHANISM_TYPE type,
  CK_MECHANISM_INFO_PTR pInfo
);




typedef CK_RV ( * CK_C_InitToken)

(
  CK_SLOT_ID slotID,
  CK_CHAR_PTR pPin,
  CK_ULONG ulPinLen,
  CK_CHAR_PTR pLabel
);




typedef CK_RV ( * CK_C_InitPIN)

(
  CK_SESSION_HANDLE hSession,
  CK_CHAR_PTR pPin,
  CK_ULONG ulPinLen
);




typedef CK_RV ( * CK_C_SetPIN)

(
  CK_SESSION_HANDLE hSession,
  CK_CHAR_PTR pOldPin,
  CK_ULONG ulOldLen,
  CK_CHAR_PTR pNewPin,
  CK_ULONG ulNewLen
);
# 190 "../../../../dist/public/security/pkcs11f.h"
typedef CK_RV ( * CK_C_OpenSession)

(
  CK_SLOT_ID slotID,
  CK_FLAGS flags,
  CK_VOID_PTR pApplication,
  CK_NOTIFY Notify,
  CK_SESSION_HANDLE_PTR phSession
);





typedef CK_RV ( * CK_C_CloseSession)

(
  CK_SESSION_HANDLE hSession
);




typedef CK_RV ( * CK_C_CloseAllSessions)

(
  CK_SLOT_ID slotID
);




typedef CK_RV ( * CK_C_GetSessionInfo)

(
  CK_SESSION_HANDLE hSession,
  CK_SESSION_INFO_PTR pInfo
);





typedef CK_RV ( * CK_C_GetOperationState)

(
  CK_SESSION_HANDLE hSession,
  CK_BYTE_PTR pOperationState,
  CK_ULONG_PTR pulOperationStateLen
);





typedef CK_RV ( * CK_C_SetOperationState)

(
  CK_SESSION_HANDLE hSession,
  CK_BYTE_PTR pOperationState,
  CK_ULONG ulOperationStateLen,
  CK_OBJECT_HANDLE hEncryptionKey,
  CK_OBJECT_HANDLE hAuthenticationKey
);




typedef CK_RV ( * CK_C_Login)

(
  CK_SESSION_HANDLE hSession,
  CK_USER_TYPE userType,
  CK_CHAR_PTR pPin,
  CK_ULONG ulPinLen
);




typedef CK_RV ( * CK_C_Logout)

(
  CK_SESSION_HANDLE hSession
);







typedef CK_RV ( * CK_C_CreateObject)

(
  CK_SESSION_HANDLE hSession,
  CK_ATTRIBUTE_PTR pTemplate,
  CK_ULONG ulCount,
  CK_OBJECT_HANDLE_PTR phObject
);





typedef CK_RV ( * CK_C_CopyObject)

(
  CK_SESSION_HANDLE hSession,
  CK_OBJECT_HANDLE hObject,
  CK_ATTRIBUTE_PTR pTemplate,
  CK_ULONG ulCount,
  CK_OBJECT_HANDLE_PTR phNewObject
);




typedef CK_RV ( * CK_C_DestroyObject)

(
  CK_SESSION_HANDLE hSession,
  CK_OBJECT_HANDLE hObject
);




typedef CK_RV ( * CK_C_GetObjectSize)

(
  CK_SESSION_HANDLE hSession,
  CK_OBJECT_HANDLE hObject,
  CK_ULONG_PTR pulSize
);





typedef CK_RV ( * CK_C_GetAttributeValue)

(
  CK_SESSION_HANDLE hSession,
  CK_OBJECT_HANDLE hObject,
  CK_ATTRIBUTE_PTR pTemplate,
  CK_ULONG ulCount
);





typedef CK_RV ( * CK_C_SetAttributeValue)

(
  CK_SESSION_HANDLE hSession,
  CK_OBJECT_HANDLE hObject,
  CK_ATTRIBUTE_PTR pTemplate,
  CK_ULONG ulCount
);





typedef CK_RV ( * CK_C_FindObjectsInit)

(
  CK_SESSION_HANDLE hSession,
  CK_ATTRIBUTE_PTR pTemplate,
  CK_ULONG ulCount
);






typedef CK_RV ( * CK_C_FindObjects)

(
 CK_SESSION_HANDLE hSession,
 CK_OBJECT_HANDLE_PTR phObject,
 CK_ULONG ulMaxObjectCount,
 CK_ULONG_PTR pulObjectCount
);





typedef CK_RV ( * CK_C_FindObjectsFinal)

(
  CK_SESSION_HANDLE hSession
);







typedef CK_RV ( * CK_C_EncryptInit)

(
  CK_SESSION_HANDLE hSession,
  CK_MECHANISM_PTR pMechanism,
  CK_OBJECT_HANDLE hKey
);




typedef CK_RV ( * CK_C_Encrypt)

(
  CK_SESSION_HANDLE hSession,
  CK_BYTE_PTR pData,
  CK_ULONG ulDataLen,
  CK_BYTE_PTR pEncryptedData,
  CK_ULONG_PTR pulEncryptedDataLen
);





typedef CK_RV ( * CK_C_EncryptUpdate)

(
  CK_SESSION_HANDLE hSession,
  CK_BYTE_PTR pPart,
  CK_ULONG ulPartLen,
  CK_BYTE_PTR pEncryptedPart,
  CK_ULONG_PTR pulEncryptedPartLen
);





typedef CK_RV ( * CK_C_EncryptFinal)

(
  CK_SESSION_HANDLE hSession,
  CK_BYTE_PTR pLastEncryptedPart,
  CK_ULONG_PTR pulLastEncryptedPartLen
);




typedef CK_RV ( * CK_C_DecryptInit)

(
  CK_SESSION_HANDLE hSession,
  CK_MECHANISM_PTR pMechanism,
  CK_OBJECT_HANDLE hKey
);




typedef CK_RV ( * CK_C_Decrypt)

(
  CK_SESSION_HANDLE hSession,
  CK_BYTE_PTR pEncryptedData,
  CK_ULONG ulEncryptedDataLen,
  CK_BYTE_PTR pData,
  CK_ULONG_PTR pulDataLen
);





typedef CK_RV ( * CK_C_DecryptUpdate)

(
  CK_SESSION_HANDLE hSession,
  CK_BYTE_PTR pEncryptedPart,
  CK_ULONG ulEncryptedPartLen,
  CK_BYTE_PTR pPart,
  CK_ULONG_PTR pulPartLen
);





typedef CK_RV ( * CK_C_DecryptFinal)

(
  CK_SESSION_HANDLE hSession,
  CK_BYTE_PTR pLastPart,
  CK_ULONG_PTR pulLastPartLen
);







typedef CK_RV ( * CK_C_DigestInit)

(
  CK_SESSION_HANDLE hSession,
  CK_MECHANISM_PTR pMechanism
);




typedef CK_RV ( * CK_C_Digest)

(
  CK_SESSION_HANDLE hSession,
  CK_BYTE_PTR pData,
  CK_ULONG ulDataLen,
  CK_BYTE_PTR pDigest,
  CK_ULONG_PTR pulDigestLen
);





typedef CK_RV ( * CK_C_DigestUpdate)

(
  CK_SESSION_HANDLE hSession,
  CK_BYTE_PTR pPart,
  CK_ULONG ulPartLen
);






typedef CK_RV ( * CK_C_DigestKey)

(
  CK_SESSION_HANDLE hSession,
  CK_OBJECT_HANDLE hKey
);





typedef CK_RV ( * CK_C_DigestFinal)

(
  CK_SESSION_HANDLE hSession,
  CK_BYTE_PTR pDigest,
  CK_ULONG_PTR pulDigestLen
);
# 562 "../../../../dist/public/security/pkcs11f.h"
typedef CK_RV ( * CK_C_SignInit)

(
  CK_SESSION_HANDLE hSession,
  CK_MECHANISM_PTR pMechanism,
  CK_OBJECT_HANDLE hKey
);






typedef CK_RV ( * CK_C_Sign)

(
  CK_SESSION_HANDLE hSession,
  CK_BYTE_PTR pData,
  CK_ULONG ulDataLen,
  CK_BYTE_PTR pSignature,
  CK_ULONG_PTR pulSignatureLen
);






typedef CK_RV ( * CK_C_SignUpdate)

(
  CK_SESSION_HANDLE hSession,
  CK_BYTE_PTR pPart,
  CK_ULONG ulPartLen
);





typedef CK_RV ( * CK_C_SignFinal)

(
  CK_SESSION_HANDLE hSession,
  CK_BYTE_PTR pSignature,
  CK_ULONG_PTR pulSignatureLen
);





typedef CK_RV ( * CK_C_SignRecoverInit)

(
  CK_SESSION_HANDLE hSession,
  CK_MECHANISM_PTR pMechanism,
  CK_OBJECT_HANDLE hKey
);





typedef CK_RV ( * CK_C_SignRecover)

(
  CK_SESSION_HANDLE hSession,
  CK_BYTE_PTR pData,
  CK_ULONG ulDataLen,
  CK_BYTE_PTR pSignature,
  CK_ULONG_PTR pulSignatureLen
);
# 644 "../../../../dist/public/security/pkcs11f.h"
typedef CK_RV ( * CK_C_VerifyInit)

(
  CK_SESSION_HANDLE hSession,
  CK_MECHANISM_PTR pMechanism,
  CK_OBJECT_HANDLE hKey
);






typedef CK_RV ( * CK_C_Verify)

(
  CK_SESSION_HANDLE hSession,
  CK_BYTE_PTR pData,
  CK_ULONG ulDataLen,
  CK_BYTE_PTR pSignature,
  CK_ULONG ulSignatureLen
);






typedef CK_RV ( * CK_C_VerifyUpdate)

(
  CK_SESSION_HANDLE hSession,
  CK_BYTE_PTR pPart,
  CK_ULONG ulPartLen
);





typedef CK_RV ( * CK_C_VerifyFinal)

(
  CK_SESSION_HANDLE hSession,
  CK_BYTE_PTR pSignature,
  CK_ULONG ulSignatureLen
);





typedef CK_RV ( * CK_C_VerifyRecoverInit)

(
  CK_SESSION_HANDLE hSession,
  CK_MECHANISM_PTR pMechanism,
  CK_OBJECT_HANDLE hKey
);





typedef CK_RV ( * CK_C_VerifyRecover)

(
  CK_SESSION_HANDLE hSession,
  CK_BYTE_PTR pSignature,
  CK_ULONG ulSignatureLen,
  CK_BYTE_PTR pData,
  CK_ULONG_PTR pulDataLen
);
# 725 "../../../../dist/public/security/pkcs11f.h"
typedef CK_RV ( * CK_C_DigestEncryptUpdate)

(
  CK_SESSION_HANDLE hSession,
  CK_BYTE_PTR pPart,
  CK_ULONG ulPartLen,
  CK_BYTE_PTR pEncryptedPart,
  CK_ULONG_PTR pulEncryptedPartLen
);





typedef CK_RV ( * CK_C_DecryptDigestUpdate)

(
  CK_SESSION_HANDLE hSession,
  CK_BYTE_PTR pEncryptedPart,
  CK_ULONG ulEncryptedPartLen,
  CK_BYTE_PTR pPart,
  CK_ULONG_PTR pulPartLen
);





typedef CK_RV ( * CK_C_SignEncryptUpdate)

(
  CK_SESSION_HANDLE hSession,
  CK_BYTE_PTR pPart,
  CK_ULONG ulPartLen,
  CK_BYTE_PTR pEncryptedPart,
  CK_ULONG_PTR pulEncryptedPartLen
);





typedef CK_RV ( * CK_C_DecryptVerifyUpdate)

(
  CK_SESSION_HANDLE hSession,
  CK_BYTE_PTR pEncryptedPart,
  CK_ULONG ulEncryptedPartLen,
  CK_BYTE_PTR pPart,
  CK_ULONG_PTR pulPartLen
);
# 784 "../../../../dist/public/security/pkcs11f.h"
typedef CK_RV ( * CK_C_GenerateKey)

(
  CK_SESSION_HANDLE hSession,
  CK_MECHANISM_PTR pMechanism,
  CK_ATTRIBUTE_PTR pTemplate,
  CK_ULONG ulCount,
  CK_OBJECT_HANDLE_PTR phKey
);





typedef CK_RV ( * CK_C_GenerateKeyPair)

(
  CK_SESSION_HANDLE hSession,

  CK_MECHANISM_PTR pMechanism,

  CK_ATTRIBUTE_PTR pPublicKeyTemplate,


  CK_ULONG ulPublicKeyAttributeCount,

  CK_ATTRIBUTE_PTR pPrivateKeyTemplate,


  CK_ULONG ulPrivateKeyAttributeCount,

  CK_OBJECT_HANDLE_PTR phPublicKey,


  CK_OBJECT_HANDLE_PTR phPrivateKey


);




typedef CK_RV ( * CK_C_WrapKey)

(
  CK_SESSION_HANDLE hSession,
  CK_MECHANISM_PTR pMechanism,
  CK_OBJECT_HANDLE hWrappingKey,
  CK_OBJECT_HANDLE hKey,
  CK_BYTE_PTR pWrappedKey,
  CK_ULONG_PTR pulWrappedKeyLen
);





typedef CK_RV ( * CK_C_UnwrapKey)

(
  CK_SESSION_HANDLE hSession,
  CK_MECHANISM_PTR pMechanism,
  CK_OBJECT_HANDLE hUnwrappingKey,
  CK_BYTE_PTR pWrappedKey,
  CK_ULONG ulWrappedKeyLen,
  CK_ATTRIBUTE_PTR pTemplate,
  CK_ULONG ulAttributeCount,
  CK_OBJECT_HANDLE_PTR phKey
);





typedef CK_RV ( * CK_C_DeriveKey)

(
  CK_SESSION_HANDLE hSession,
  CK_MECHANISM_PTR pMechanism,
  CK_OBJECT_HANDLE hBaseKey,
  CK_ATTRIBUTE_PTR pTemplate,
  CK_ULONG ulAttributeCount,
  CK_OBJECT_HANDLE_PTR phKey
);
# 876 "../../../../dist/public/security/pkcs11f.h"
typedef CK_RV ( * CK_C_SeedRandom)

(
  CK_SESSION_HANDLE hSession,
  CK_BYTE_PTR pSeed,
  CK_ULONG ulSeedLen
);




typedef CK_RV ( * CK_C_GenerateRandom)

(
  CK_SESSION_HANDLE hSession,
  CK_BYTE_PTR RandomData,
  CK_ULONG ulRandomLen
);
# 903 "../../../../dist/public/security/pkcs11f.h"
typedef CK_RV ( * CK_C_GetFunctionStatus)

(
  CK_SESSION_HANDLE hSession
);





typedef CK_RV ( * CK_C_CancelFunction)

(
  CK_SESSION_HANDLE hSession
);
# 926 "../../../../dist/public/security/pkcs11f.h"
typedef CK_RV ( * CK_C_WaitForSlotEvent)

(
  CK_FLAGS flags,
  CK_SLOT_ID_PTR pSlot,
  CK_VOID_PTR pRserved
);
# 276 "../../../../dist/public/security/pkcs11.h" 2
# 293 "../../../../dist/public/security/pkcs11.h"
struct CK_FUNCTION_LIST {

  CK_VERSION version;




# 1 "../../../../dist/public/security/pkcs11f.h" 1
# 50 "../../../../dist/public/security/pkcs11f.h"
CK_C_Initialize C_Initialize;
# 62 "../../../../dist/public/security/pkcs11f.h"
CK_C_Finalize C_Finalize;
# 71 "../../../../dist/public/security/pkcs11f.h"
CK_C_GetInfo C_GetInfo;
# 80 "../../../../dist/public/security/pkcs11f.h"
CK_C_GetFunctionList C_GetFunctionList;
# 93 "../../../../dist/public/security/pkcs11f.h"
CK_C_GetSlotList C_GetSlotList;
# 105 "../../../../dist/public/security/pkcs11f.h"
CK_C_GetSlotInfo C_GetSlotInfo;
# 116 "../../../../dist/public/security/pkcs11f.h"
CK_C_GetTokenInfo C_GetTokenInfo;
# 127 "../../../../dist/public/security/pkcs11f.h"
CK_C_GetMechanismList C_GetMechanismList;
# 139 "../../../../dist/public/security/pkcs11f.h"
CK_C_GetMechanismInfo C_GetMechanismInfo;
# 150 "../../../../dist/public/security/pkcs11f.h"
CK_C_InitToken C_InitToken;
# 162 "../../../../dist/public/security/pkcs11f.h"
CK_C_InitPIN C_InitPIN;
# 173 "../../../../dist/public/security/pkcs11f.h"
CK_C_SetPIN C_SetPIN;
# 190 "../../../../dist/public/security/pkcs11f.h"
CK_C_OpenSession C_OpenSession;
# 204 "../../../../dist/public/security/pkcs11f.h"
CK_C_CloseSession C_CloseSession;
# 213 "../../../../dist/public/security/pkcs11f.h"
CK_C_CloseAllSessions C_CloseAllSessions;
# 222 "../../../../dist/public/security/pkcs11f.h"
CK_C_GetSessionInfo C_GetSessionInfo;
# 233 "../../../../dist/public/security/pkcs11f.h"
CK_C_GetOperationState C_GetOperationState;
# 245 "../../../../dist/public/security/pkcs11f.h"
CK_C_SetOperationState C_SetOperationState;
# 258 "../../../../dist/public/security/pkcs11f.h"
CK_C_Login C_Login;
# 270 "../../../../dist/public/security/pkcs11f.h"
CK_C_Logout C_Logout;
# 282 "../../../../dist/public/security/pkcs11f.h"
CK_C_CreateObject C_CreateObject;
# 295 "../../../../dist/public/security/pkcs11f.h"
CK_C_CopyObject C_CopyObject;
# 308 "../../../../dist/public/security/pkcs11f.h"
CK_C_DestroyObject C_DestroyObject;
# 318 "../../../../dist/public/security/pkcs11f.h"
CK_C_GetObjectSize C_GetObjectSize;
# 330 "../../../../dist/public/security/pkcs11f.h"
CK_C_GetAttributeValue C_GetAttributeValue;
# 343 "../../../../dist/public/security/pkcs11f.h"
CK_C_SetAttributeValue C_SetAttributeValue;
# 356 "../../../../dist/public/security/pkcs11f.h"
CK_C_FindObjectsInit C_FindObjectsInit;
# 369 "../../../../dist/public/security/pkcs11f.h"
CK_C_FindObjects C_FindObjects;
# 382 "../../../../dist/public/security/pkcs11f.h"
CK_C_FindObjectsFinal C_FindObjectsFinal;
# 394 "../../../../dist/public/security/pkcs11f.h"
CK_C_EncryptInit C_EncryptInit;
# 405 "../../../../dist/public/security/pkcs11f.h"
CK_C_Encrypt C_Encrypt;
# 419 "../../../../dist/public/security/pkcs11f.h"
CK_C_EncryptUpdate C_EncryptUpdate;
# 433 "../../../../dist/public/security/pkcs11f.h"
CK_C_EncryptFinal C_EncryptFinal;
# 444 "../../../../dist/public/security/pkcs11f.h"
CK_C_DecryptInit C_DecryptInit;
# 455 "../../../../dist/public/security/pkcs11f.h"
CK_C_Decrypt C_Decrypt;
# 469 "../../../../dist/public/security/pkcs11f.h"
CK_C_DecryptUpdate C_DecryptUpdate;
# 483 "../../../../dist/public/security/pkcs11f.h"
CK_C_DecryptFinal C_DecryptFinal;
# 497 "../../../../dist/public/security/pkcs11f.h"
CK_C_DigestInit C_DigestInit;
# 507 "../../../../dist/public/security/pkcs11f.h"
CK_C_Digest C_Digest;
# 521 "../../../../dist/public/security/pkcs11f.h"
CK_C_DigestUpdate C_DigestUpdate;
# 534 "../../../../dist/public/security/pkcs11f.h"
CK_C_DigestKey C_DigestKey;
# 545 "../../../../dist/public/security/pkcs11f.h"
CK_C_DigestFinal C_DigestFinal;
# 562 "../../../../dist/public/security/pkcs11f.h"
CK_C_SignInit C_SignInit;
# 575 "../../../../dist/public/security/pkcs11f.h"
CK_C_Sign C_Sign;
# 590 "../../../../dist/public/security/pkcs11f.h"
CK_C_SignUpdate C_SignUpdate;
# 602 "../../../../dist/public/security/pkcs11f.h"
CK_C_SignFinal C_SignFinal;
# 614 "../../../../dist/public/security/pkcs11f.h"
CK_C_SignRecoverInit C_SignRecoverInit;
# 626 "../../../../dist/public/security/pkcs11f.h"
CK_C_SignRecover C_SignRecover;
# 644 "../../../../dist/public/security/pkcs11f.h"
CK_C_VerifyInit C_VerifyInit;
# 657 "../../../../dist/public/security/pkcs11f.h"
CK_C_Verify C_Verify;
# 672 "../../../../dist/public/security/pkcs11f.h"
CK_C_VerifyUpdate C_VerifyUpdate;
# 684 "../../../../dist/public/security/pkcs11f.h"
CK_C_VerifyFinal C_VerifyFinal;
# 696 "../../../../dist/public/security/pkcs11f.h"
CK_C_VerifyRecoverInit C_VerifyRecoverInit;
# 708 "../../../../dist/public/security/pkcs11f.h"
CK_C_VerifyRecover C_VerifyRecover;
# 725 "../../../../dist/public/security/pkcs11f.h"
CK_C_DigestEncryptUpdate C_DigestEncryptUpdate;
# 739 "../../../../dist/public/security/pkcs11f.h"
CK_C_DecryptDigestUpdate C_DecryptDigestUpdate;
# 753 "../../../../dist/public/security/pkcs11f.h"
CK_C_SignEncryptUpdate C_SignEncryptUpdate;
# 767 "../../../../dist/public/security/pkcs11f.h"
CK_C_DecryptVerifyUpdate C_DecryptVerifyUpdate;
# 784 "../../../../dist/public/security/pkcs11f.h"
CK_C_GenerateKey C_GenerateKey;
# 798 "../../../../dist/public/security/pkcs11f.h"
CK_C_GenerateKeyPair C_GenerateKeyPair;
# 826 "../../../../dist/public/security/pkcs11f.h"
CK_C_WrapKey C_WrapKey;
# 841 "../../../../dist/public/security/pkcs11f.h"
CK_C_UnwrapKey C_UnwrapKey;
# 858 "../../../../dist/public/security/pkcs11f.h"
CK_C_DeriveKey C_DeriveKey;
# 876 "../../../../dist/public/security/pkcs11f.h"
CK_C_SeedRandom C_SeedRandom;
# 887 "../../../../dist/public/security/pkcs11f.h"
CK_C_GenerateRandom C_GenerateRandom;
# 903 "../../../../dist/public/security/pkcs11f.h"
CK_C_GetFunctionStatus C_GetFunctionStatus;
# 913 "../../../../dist/public/security/pkcs11f.h"
CK_C_CancelFunction C_CancelFunction;
# 926 "../../../../dist/public/security/pkcs11f.h"
CK_C_WaitForSlotEvent C_WaitForSlotEvent;
# 301 "../../../../dist/public/security/pkcs11.h" 2

};







# 1 "../../../../dist/public/security/pkcs11u.h" 1
# 311 "../../../../dist/public/security/pkcs11.h" 2
# 319 "../../../../dist/public/security/pkcs11.h"
extern void PK11_ConfigurePKCS11(char *man, char *libdes, char *tokdes,
                char *ptokdes, char *slotdes, char *pslotdes, char *fslotdes,
                char *fpslotdes, int minPwd, int pwdRequired);
extern void PK11_ConfigureFIPS(char *slotdes, char *pslotdes);
# 40 "p12t.h" 2
# 1 "../../../../dist/public/security/secpkcs7.h" 1
# 43 "../../../../dist/public/security/secpkcs7.h"
# 1 "../../../../dist/public/security/seccomon.h" 1
# 44 "../../../../dist/public/security/secpkcs7.h" 2

# 1 "../../../../dist/public/security/secoidt.h" 1
# 46 "../../../../dist/public/security/secpkcs7.h" 2
# 1 "../../../../dist/public/security/certt.h" 1
# 47 "../../../../dist/public/security/secpkcs7.h" 2
# 1 "../../../../dist/public/security/keyt.h" 1
# 41 "../../../../dist/public/security/keyt.h"
# 1 "../../../../dist/public/security/keytlow.h" 1
# 42 "../../../../dist/public/security/keyt.h" 2
# 1 "../../../../dist/public/security/keytboth.h" 1
# 43 "../../../../dist/public/security/keyt.h" 2
# 1 "../../../../dist/public/security/keythi.h" 1
# 44 "../../../../dist/public/security/keyt.h" 2
# 1 "../../../../dist/public/security/keydbt.h" 1
# 45 "../../../../dist/public/security/keyt.h" 2
# 48 "../../../../dist/public/security/secpkcs7.h" 2
# 1 "../../../../dist/public/security/hasht.h" 1
# 49 "../../../../dist/public/security/secpkcs7.h" 2
# 1 "../../../../dist/public/security/pkcs7t.h" 1
# 43 "../../../../dist/public/security/pkcs7t.h"
# 1 "/home/nisse/hack/mozilla/dist/include/nspr/plarena.h" 1
# 44 "../../../../dist/public/security/pkcs7t.h" 2

# 1 "../../../../dist/public/security/seccomon.h" 1
# 46 "../../../../dist/public/security/pkcs7t.h" 2
# 1 "../../../../dist/public/security/secoidt.h" 1
# 47 "../../../../dist/public/security/pkcs7t.h" 2
# 1 "../../../../dist/public/security/certt.h" 1
# 48 "../../../../dist/public/security/pkcs7t.h" 2
# 1 "../../../../dist/public/security/secmodt.h" 1
# 49 "../../../../dist/public/security/pkcs7t.h" 2


typedef struct SEC_PKCS7DecoderContextStr SEC_PKCS7DecoderContext;
typedef struct SEC_PKCS7EncoderContextStr SEC_PKCS7EncoderContext;
# 84 "../../../../dist/public/security/pkcs7t.h"
typedef struct SEC_PKCS7ContentInfoStr SEC_PKCS7ContentInfo;
typedef struct SEC_PKCS7SignedDataStr SEC_PKCS7SignedData;
typedef struct SEC_PKCS7EncryptedContentInfoStr SEC_PKCS7EncryptedContentInfo;
typedef struct SEC_PKCS7EnvelopedDataStr SEC_PKCS7EnvelopedData;
typedef struct SEC_PKCS7SignedAndEnvelopedDataStr
                SEC_PKCS7SignedAndEnvelopedData;
typedef struct SEC_PKCS7SignerInfoStr SEC_PKCS7SignerInfo;
typedef struct SEC_PKCS7RecipientInfoStr SEC_PKCS7RecipientInfo;
typedef struct SEC_PKCS7DigestedDataStr SEC_PKCS7DigestedData;
typedef struct SEC_PKCS7EncryptedDataStr SEC_PKCS7EncryptedData;
typedef struct SEC_PKCS7SMIMEKEAParametersStr SEC_PKCS7SMIMEKEAParameters;






typedef struct SEC_PKCS7AttributeStr SEC_PKCS7Attribute;


struct SEC_PKCS7ContentInfoStr {
    PLArenaPool *poolp;
    PRBool created;
    int refCount;
    SECOidData *contentTypeTag;
    SECKEYGetPasswordKey pwfn;
    void *pwfn_arg;
    SECItem contentType;
    union {
        SECItem *data;
        SEC_PKCS7DigestedData *digestedData;
        SEC_PKCS7EncryptedData *encryptedData;
        SEC_PKCS7EnvelopedData *envelopedData;
        SEC_PKCS7SignedData *signedData;
        SEC_PKCS7SignedAndEnvelopedData *signedAndEnvelopedData;
    } content;
};

struct SEC_PKCS7SignedDataStr {
    SECItem version;
    SECAlgorithmID **digestAlgorithms;
    SEC_PKCS7ContentInfo contentInfo;
    SECItem **rawCerts;
    CERTSignedCrl **crls;
    SEC_PKCS7SignerInfo **signerInfos;
    SECItem **digests;
    CERTCertificate **certs;
    CERTCertificateList **certLists;
};


struct SEC_PKCS7EncryptedContentInfoStr {
    SECOidData *contentTypeTag;
    SECItem contentType;
    SECAlgorithmID contentEncAlg;
    SECItem encContent;
    SECItem plainContent;

    int keysize;


    SECOidTag encalg;


};

struct SEC_PKCS7EnvelopedDataStr {
    SECItem version;
    SEC_PKCS7RecipientInfo **recipientInfos;
    SEC_PKCS7EncryptedContentInfo encContentInfo;
};


struct SEC_PKCS7SignedAndEnvelopedDataStr {
    SECItem version;
    SEC_PKCS7RecipientInfo **recipientInfos;
    SECAlgorithmID **digestAlgorithms;
    SEC_PKCS7EncryptedContentInfo encContentInfo;
    SECItem **rawCerts;
    CERTSignedCrl **crls;
    SEC_PKCS7SignerInfo **signerInfos;
    SECItem **digests;
    CERTCertificate **certs;
    CERTCertificateList **certLists;
    PK11SymKey *sigKey;
};


struct SEC_PKCS7SignerInfoStr {
    SECItem version;
    CERTIssuerAndSN *issuerAndSN;
    SECAlgorithmID digestAlg;
    SEC_PKCS7Attribute **authAttr;
    SECAlgorithmID digestEncAlg;
    SECItem encDigest;
    SEC_PKCS7Attribute **unAuthAttr;
    CERTCertificate *cert;
    CERTCertificateList *certList;
};


struct SEC_PKCS7RecipientInfoStr {
    SECItem version;
    CERTIssuerAndSN *issuerAndSN;
    SECAlgorithmID keyEncAlg;
    SECItem encKey;
    CERTCertificate *cert;
};


struct SEC_PKCS7DigestedDataStr {
    SECItem version;
    SECAlgorithmID digestAlg;
    SEC_PKCS7ContentInfo contentInfo;
    SECItem digest;
};


struct SEC_PKCS7EncryptedDataStr {
    SECItem version;
    SEC_PKCS7EncryptedContentInfo encContentInfo;
};





struct SEC_PKCS7AttributeStr {

    SECItem type;
    SECItem **values;

    SECOidData *typeTag;
    PRBool encoded;
};



typedef enum
{
        SECKEAUsesSkipjack = 0,
        SECKEAUsesNonSkipjack = 1,
        SECKEAUsesNonSkipjackWithPaddedEncKey = 2
} SECKEATemplateSelector;



struct SEC_PKCS7SMIMEKEAParametersStr {
        SECItem originatorKEAKey;
        SECItem originatorRA;
        SECItem nonSkipjackIV;



        SECItem bulkKeySize;







};
# 256 "../../../../dist/public/security/pkcs7t.h"
typedef void (* SEC_PKCS7DecoderContentCallback)(void *arg,
                                                 const char *buf,
                                                 unsigned long len);
# 267 "../../../../dist/public/security/pkcs7t.h"
typedef void (* SEC_PKCS7EncoderOutputCallback)(void *arg,
                                                const char *buf,
                                                unsigned long len);
# 278 "../../../../dist/public/security/pkcs7t.h"
typedef PK11SymKey * (* SEC_PKCS7GetDecryptKeyCallback)(void *arg,
                                                        SECAlgorithmID *algid);
# 289 "../../../../dist/public/security/pkcs7t.h"
typedef PRBool (* SEC_PKCS7DecryptionAllowedCallback)(SECAlgorithmID *algid,
                                                      PK11SymKey *bulkkey);
# 50 "../../../../dist/public/security/secpkcs7.h" 2

extern const SEC_ASN1Template sec_PKCS7ContentInfoTemplate[];
# 63 "../../../../dist/public/security/secpkcs7.h"
extern SECOidTag SEC_PKCS7ContentType (SEC_PKCS7ContentInfo *cinfo);




extern void SEC_PKCS7DestroyContentInfo(SEC_PKCS7ContentInfo *contentInfo);




extern SEC_PKCS7ContentInfo *
SEC_PKCS7CopyContentInfo(SEC_PKCS7ContentInfo *contentInfo);





extern SECItem *SEC_PKCS7GetContent(SEC_PKCS7ContentInfo *cinfo);





extern SEC_PKCS7DecoderContext *
SEC_PKCS7DecoderStart(SEC_PKCS7DecoderContentCallback callback,
                      void *callback_arg,
                      SECKEYGetPasswordKey pwfn, void *pwfn_arg,
                      SEC_PKCS7GetDecryptKeyCallback decrypt_key_cb,
                      void *decrypt_key_cb_arg,
                      SEC_PKCS7DecryptionAllowedCallback decrypt_allowed_cb);

extern SECStatus
SEC_PKCS7DecoderUpdate(SEC_PKCS7DecoderContext *p7dcx,
                       const char *buf, unsigned long len);

extern SEC_PKCS7ContentInfo *
SEC_PKCS7DecoderFinish(SEC_PKCS7DecoderContext *p7dcx);

extern SEC_PKCS7ContentInfo *
SEC_PKCS7DecodeItem(SECItem *p7item,
                    SEC_PKCS7DecoderContentCallback cb, void *cb_arg,
                    SECKEYGetPasswordKey pwfn, void *pwfn_arg,
                    SEC_PKCS7GetDecryptKeyCallback decrypt_key_cb,
                    void *decrypt_key_cb_arg,
                    SEC_PKCS7DecryptionAllowedCallback decrypt_allowed_cb);

extern PRBool SEC_PKCS7ContainsCertsOrCrls(SEC_PKCS7ContentInfo *cinfo);







extern PRBool
SEC_PKCS7IsContentEmpty(SEC_PKCS7ContentInfo *cinfo, unsigned int minLen);

extern PRBool SEC_PKCS7ContentIsEncrypted(SEC_PKCS7ContentInfo *cinfo);
# 130 "../../../../dist/public/security/secpkcs7.h"
extern PRBool SEC_PKCS7ContentIsSigned(SEC_PKCS7ContentInfo *cinfo);
# 141 "../../../../dist/public/security/secpkcs7.h"
extern PRBool SEC_PKCS7VerifySignature(SEC_PKCS7ContentInfo *cinfo,
                                       SECCertUsage certusage,
                                       PRBool keepcerts);
# 155 "../../../../dist/public/security/secpkcs7.h"
extern PRBool SEC_PKCS7VerifyDetachedSignature(SEC_PKCS7ContentInfo *cinfo,
                                               SECCertUsage certusage,
                                               SECItem *detached_digest,
                                               HASH_HashType digest_type,
                                               PRBool keepcerts);
# 169 "../../../../dist/public/security/secpkcs7.h"
extern char *SEC_PKCS7GetSignerCommonName(SEC_PKCS7ContentInfo *cinfo);
extern char *SEC_PKCS7GetSignerEmailAddress(SEC_PKCS7ContentInfo *cinfo);




extern SECItem *SEC_PKCS7GetSigningTime(SEC_PKCS7ContentInfo *cinfo);
# 210 "../../../../dist/public/security/secpkcs7.h"
extern SEC_PKCS7ContentInfo *
SEC_PKCS7CreateSignedData (CERTCertificate *cert,
                           SECCertUsage certusage,
                           CERTCertDBHandle *certdb,
                           SECOidTag digestalg,
                           SECItem *digest,
                           SECKEYGetPasswordKey pwfn, void *pwfn_arg);
# 235 "../../../../dist/public/security/secpkcs7.h"
extern SEC_PKCS7ContentInfo *
SEC_PKCS7CreateCertsOnly (CERTCertificate *cert,
                          PRBool include_chain,
                          CERTCertDBHandle *certdb);
# 266 "../../../../dist/public/security/secpkcs7.h"
extern SEC_PKCS7ContentInfo *
SEC_PKCS7CreateEnvelopedData (CERTCertificate *cert,
                              SECCertUsage certusage,
                              CERTCertDBHandle *certdb,
                              SECOidTag encalg,
                              int keysize,
                              SECKEYGetPasswordKey pwfn, void *pwfn_arg);
# 286 "../../../../dist/public/security/secpkcs7.h"
extern SEC_PKCS7ContentInfo *SEC_PKCS7CreateData (void);
# 296 "../../../../dist/public/security/secpkcs7.h"
extern SEC_PKCS7ContentInfo *
SEC_PKCS7CreateEncryptedData (SECOidTag algorithm, int keysize,
                              SECKEYGetPasswordKey pwfn, void *pwfn_arg);
# 324 "../../../../dist/public/security/secpkcs7.h"
extern SECStatus SEC_PKCS7AddSignedAttribute (SEC_PKCS7ContentInfo *cinfo,
                                              SECOidTag oidtag,
                                              SECItem *value);
# 337 "../../../../dist/public/security/secpkcs7.h"
extern SECStatus SEC_PKCS7AddCertChain (SEC_PKCS7ContentInfo *cinfo,
                                        CERTCertificate *cert,
                                        CERTCertDBHandle *certdb);







extern SECStatus SEC_PKCS7AddCertificate (SEC_PKCS7ContentInfo *cinfo,
                                          CERTCertificate *cert);
# 367 "../../../../dist/public/security/secpkcs7.h"
extern SECStatus SEC_PKCS7AddRecipient (SEC_PKCS7ContentInfo *cinfo,
                                        CERTCertificate *cert,
                                        SECCertUsage certusage,
                                        CERTCertDBHandle *certdb);
# 388 "../../../../dist/public/security/secpkcs7.h"
extern SECStatus SEC_PKCS7AddSigningTime (SEC_PKCS7ContentInfo *cinfo);
# 400 "../../../../dist/public/security/secpkcs7.h"
extern SECStatus SEC_PKCS7AddSymmetricCapabilities(SEC_PKCS7ContentInfo *cinfo);
# 413 "../../../../dist/public/security/secpkcs7.h"
extern SECStatus SEC_PKCS7IncludeCertChain (SEC_PKCS7ContentInfo *cinfo,
                                            CERTCertDBHandle *certdb);
# 425 "../../../../dist/public/security/secpkcs7.h"
extern SECStatus SEC_PKCS7SetContent (SEC_PKCS7ContentInfo *cinfo,
                                      const char *buf, unsigned long len);
# 451 "../../../../dist/public/security/secpkcs7.h"
extern SECStatus SEC_PKCS7Encode (SEC_PKCS7ContentInfo *cinfo,
                                  SEC_PKCS7EncoderOutputCallback outputfn,
                                  void *outputarg,
                                  PK11SymKey *bulkkey,
                                  SECKEYGetPasswordKey pwfn,
                                  void *pwfnarg);
# 485 "../../../../dist/public/security/secpkcs7.h"
extern SECItem *SEC_PKCS7EncodeItem (PLArenaPool *pool,
                                     SECItem *dest,
                                     SEC_PKCS7ContentInfo *cinfo,
                                     PK11SymKey *bulkkey,
                                     SECKEYGetPasswordKey pwfn,
                                     void *pwfnarg);







extern SECStatus SEC_PKCS7PrepareForEncode (SEC_PKCS7ContentInfo *cinfo,
                                            PK11SymKey *bulkkey,
                                            SECKEYGetPasswordKey pwfn,
                                            void *pwfnarg);
# 523 "../../../../dist/public/security/secpkcs7.h"
extern SEC_PKCS7EncoderContext *
SEC_PKCS7EncoderStart (SEC_PKCS7ContentInfo *cinfo,
                       SEC_PKCS7EncoderOutputCallback outputfn,
                       void *outputarg,
                       PK11SymKey *bulkkey);




extern SECStatus SEC_PKCS7EncoderUpdate (SEC_PKCS7EncoderContext *p7ecx,
                                         const char *buf,
                                         unsigned long len);
# 546 "../../../../dist/public/security/secpkcs7.h"
extern SECStatus SEC_PKCS7EncoderFinish (SEC_PKCS7EncoderContext *p7ecx,
                                         SECKEYGetPasswordKey pwfn,
                                         void *pwfnarg);






extern SECAlgorithmID *
SEC_PKCS7GetEncryptionAlgorithm(SEC_PKCS7ContentInfo *cinfo);
# 572 "../../../../dist/public/security/secpkcs7.h"
extern SECStatus
SEC_PKCS7EncryptContents(PLArenaPool *poolp,
                         SEC_PKCS7ContentInfo *cinfo,
                         SECItem *key,
                         void *wincx);
# 592 "../../../../dist/public/security/secpkcs7.h"
extern SECStatus
SEC_PKCS7DecryptContents(PLArenaPool *poolp,
                         SEC_PKCS7ContentInfo *cinfo,
                         SECItem *key,
                         void *wincx);






extern SECItem **
SEC_PKCS7GetCertificateList(SEC_PKCS7ContentInfo *cinfo);




extern int
SEC_PKCS7GetKeyLength(SEC_PKCS7ContentInfo *cinfo);
# 41 "p12t.h" 2
# 1 "../../../../dist/public/security/secdig.h" 1
# 41 "../../../../dist/public/security/secdig.h"
# 1 "../../../../dist/public/security/secdigt.h" 1
# 41 "../../../../dist/public/security/secdigt.h"
# 1 "/home/nisse/hack/mozilla/dist/include/nspr/plarena.h" 1
# 42 "../../../../dist/public/security/secdigt.h" 2
# 1 "../../../../dist/public/security/secoidt.h" 1
# 43 "../../../../dist/public/security/secdigt.h" 2
# 1 "../../../../dist/public/security/secitem.h" 1
# 44 "../../../../dist/public/security/secdigt.h" 2




struct SGNDigestInfoStr {
    PLArenaPool * arena;
    SECAlgorithmID digestAlgorithm;
    SECItem digest;
};
typedef struct SGNDigestInfoStr SGNDigestInfo;
# 42 "../../../../dist/public/security/secdig.h" 2

# 1 "../../../../dist/public/security/seccomon.h" 1
# 44 "../../../../dist/public/security/secdig.h" 2
# 1 "../../../../dist/public/security/secasn1t.h" 1
# 45 "../../../../dist/public/security/secdig.h" 2
# 1 "../../../../dist/public/security/secdert.h" 1
# 46 "../../../../dist/public/security/secdig.h" 2




extern const SEC_ASN1Template sgn_DigestInfoTemplate[];

extern const SEC_ASN1Template * NSS_Get_sgn_DigestInfoTemplate (void *arg, PRBool enc);

extern DERTemplate SGNDigestInfoTemplate[];
# 74 "../../../../dist/public/security/secdig.h"
extern SGNDigestInfo *SGN_CreateDigestInfo(SECOidTag algorithm,
                                           unsigned char *sig,
                                           unsigned int sigLen);




extern void SGN_DestroyDigestInfo(SGNDigestInfo *info);
# 96 "../../../../dist/public/security/secdig.h"
extern SECItem *SGN_EncodeDigestInfo(PLArenaPool *poolp, SECItem *dest,
                                     SGNDigestInfo *diginfo);
# 107 "../../../../dist/public/security/secdig.h"
extern SGNDigestInfo *SGN_DecodeDigestInfo(SECItem *didata);
# 122 "../../../../dist/public/security/secdig.h"
extern SECStatus SGN_CopyDigestInfo(PLArenaPool *poolp,
                                        SGNDigestInfo *a,
                                        SGNDigestInfo *b);





extern SECComparison SGN_CompareDigestInfo(SGNDigestInfo *a, SGNDigestInfo *b);
# 42 "p12t.h" 2




typedef struct sec_PKCS12PFXItemStr sec_PKCS12PFXItem;
typedef struct sec_PKCS12MacDataStr sec_PKCS12MacData;
typedef struct sec_PKCS12AuthenticatedSafeStr sec_PKCS12AuthenticatedSafe;
typedef struct sec_PKCS12SafeContentsStr sec_PKCS12SafeContents;
typedef struct sec_PKCS12SafeBagStr sec_PKCS12SafeBag;
typedef struct sec_PKCS12PKCS8ShroudedKeyBagStr sec_PKCS12PKCS8ShroudedKeyBag;
typedef struct sec_PKCS12CertBagStr sec_PKCS12CertBag;
typedef struct sec_PKCS12CRLBagStr sec_PKCS12CRLBag;
typedef struct sec_PKCS12SecretBag sec_PKCS12SecretBag;
typedef struct sec_PKCS12AttributeStr sec_PKCS12Attribute;

struct sec_PKCS12CertBagStr {

    SECItem bagID;


    union {
        SECItem x509Cert;
        SECItem SDSICert;
    } value;
};

struct sec_PKCS12CRLBagStr {

    SECItem bagID;


    union {
        SECItem x509CRL;
    } value;
};

struct sec_PKCS12SecretBag {

    SECItem secretType;


    SECItem secretContent;
};

struct sec_PKCS12AttributeStr {
    SECItem attrType;
    SECItem **attrValue;
};

struct sec_PKCS12SafeBagStr {


    SECItem safeBagType;


    union {
        SECKEYPrivateKeyInfo *pkcs8KeyBag;
        SECKEYEncryptedPrivateKeyInfo *pkcs8ShroudedKeyBag;
        sec_PKCS12CertBag *certBag;
        sec_PKCS12CRLBag *crlBag;
        sec_PKCS12SecretBag *secretBag;
        sec_PKCS12SafeContents *safeContents;
    } safeBagContent;

    sec_PKCS12Attribute **attribs;


    SECOidData *bagTypeTag;
    PLArenaPool *arena;
    unsigned int nAttribs;


    PRBool problem, noInstall, validated, hasKey, removeExisting, installed;
    int error;

    PRBool swapUnicodeBytes;
    PK11SlotInfo *slot;
    SECItem *pwitem;
    PRBool oldBagType;
};

struct sec_PKCS12SafeContentsStr {
    sec_PKCS12SafeBag **safeBags;
    SECItem **encodedSafeBags;


    PLArenaPool *arena;
    unsigned int bagCount;
};

struct sec_PKCS12MacDataStr {
    SGNDigestInfo safeMac;
    SECItem macSalt;
    SECItem iter;
};

struct sec_PKCS12PFXItemStr {

    SECItem version;




    SEC_PKCS7ContentInfo *authSafe;
    SECItem encodedAuthSafe;


    sec_PKCS12MacData macData;
    SECItem encodedMacData;
};

struct sec_PKCS12AuthenticatedSafeStr {



    SEC_PKCS7ContentInfo **safes;
    SECItem **encodedSafes;


    unsigned int safeCount;
    SECItem dummySafe;
};

extern const SEC_ASN1Template sec_PKCS12PFXItemTemplate[];
extern const SEC_ASN1Template sec_PKCS12MacDataTemplate[];
extern const SEC_ASN1Template sec_PKCS12AuthenticatedSafeTemplate[];
extern const SEC_ASN1Template sec_PKCS12SafeContentsTemplate[];
extern const SEC_ASN1Template sec_PKCS12SafeContentsDecodeTemplate[];
extern const SEC_ASN1Template sec_PKCS12NestedSafeContentsDecodeTemplate[];
extern const SEC_ASN1Template sec_PKCS12CertBagTemplate[];
extern const SEC_ASN1Template sec_PKCS12CRLBagTemplate[];
extern const SEC_ASN1Template sec_PKCS12SecretBagTemplate[];
extern const SEC_ASN1Template sec_PKCS12PointerToCertBagTemplate[];
extern const SEC_ASN1Template sec_PKCS12PointerToCRLBagTemplate[];
extern const SEC_ASN1Template sec_PKCS12PointerToSecretBagTemplate[];
extern const SEC_ASN1Template sec_PKCS12PointerToSafeContentsTemplate[];
extern const SEC_ASN1Template sec_PKCS12AttributeTemplate[];
extern const SEC_ASN1Template sec_PKCS12PointerToContentInfoTemplate[];
extern const SEC_ASN1Template sec_PKCS12SafeBagTemplate[];
# 36 "p12e.c" 2
# 1 "p12.h" 1
# 38 "p12.h"
# 1 "../../../../dist/public/security/secoid.h" 1
# 39 "p12.h" 2
# 1 "../../../../dist/public/security/key.h" 1
# 40 "p12.h" 2
# 1 "../../../../dist/public/security/secpkcs7.h" 1
# 41 "p12.h" 2
# 1 "p12t.h" 1
# 42 "p12.h" 2

typedef int ( * PKCS12OpenFunction)(void *arg);
typedef int ( * PKCS12ReadFunction)(void *arg,
                                               unsigned char *buffer,
                                               unsigned int *lenRead,
                                               unsigned int maxLen);
typedef int ( * PKCS12WriteFunction)(void *arg,
                                                unsigned char *buffer,
                                                unsigned int *bufLen,
                                                unsigned int *lenWritten);
typedef int ( * PKCS12CloseFunction)(void *arg);
typedef SECStatus ( * PKCS12UnicodeConvertFunction)(
                                 PLArenaPool *arena,
                                 SECItem *dest, SECItem *src,
                                 PRBool toUnicode,
                                 PRBool swapBytes);
typedef void ( * SEC_PKCS12EncoderOutputCallback)(
                            void *arg, const char *buf,
                            unsigned long len);
typedef void ( * SEC_PKCS12DecoderOutputCallback)(
                            void *arg, const char *buf,
                            unsigned long len);
typedef SECItem * ( * SEC_PKCS12NicknameCollisionCallback)(
                                 SECItem *old_nickname,
                                 PRBool *cancel,
                                 void *arg);




typedef SECStatus ( *digestOpenFn)(void *arg, PRBool readData);
typedef SECStatus ( *digestCloseFn)(void *arg, PRBool removeFile);
typedef int ( *digestIOFn)(void *arg, unsigned char *buf,
                                      unsigned long len);

typedef struct SEC_PKCS12ExportContextStr SEC_PKCS12ExportContext;
typedef struct SEC_PKCS12SafeInfoStr SEC_PKCS12SafeInfo;
typedef struct SEC_PKCS12DecoderContextStr SEC_PKCS12DecoderContext;

struct sec_PKCS12PasswordModeInfo {
    SECItem *password;
    SECOidTag algorithm;
};

struct sec_PKCS12PublicKeyModeInfo {
    CERTCertificate *cert;
    CERTCertDBHandle *certDb;
    SECOidTag algorithm;
    int keySize;
};

SEC_PKCS12SafeInfo *
SEC_PKCS12CreatePubKeyEncryptedSafe(SEC_PKCS12ExportContext *p12ctxt,
                                    CERTCertDBHandle *certDb,
                                    CERTCertificate *signer,
                                    CERTCertificate **recipients,
                                    SECOidTag algorithm, int keysize);

extern SEC_PKCS12SafeInfo *
SEC_PKCS12CreatePasswordPrivSafe(SEC_PKCS12ExportContext *p12ctxt,
                                 SECItem *pwitem, SECOidTag privAlg);

extern SEC_PKCS12SafeInfo *
SEC_PKCS12CreateUnencryptedSafe(SEC_PKCS12ExportContext *p12ctxt);

extern SECStatus
SEC_PKCS12AddPasswordIntegrity(SEC_PKCS12ExportContext *p12ctxt,
                               SECItem *pwitem, SECOidTag integAlg);
extern SECStatus
SEC_PKCS12AddPublicKeyIntegrity(SEC_PKCS12ExportContext *p12ctxt,
                                CERTCertificate *cert, CERTCertDBHandle *certDb,
                                SECOidTag algorithm, int keySize);

extern SEC_PKCS12ExportContext *
SEC_PKCS12CreateExportContext(SECKEYGetPasswordKey pwfn, void *pwfnarg,
                              PK11SlotInfo *slot, void *wincx);

extern SECStatus
SEC_PKCS12AddCert(SEC_PKCS12ExportContext *p12ctxt,
                  SEC_PKCS12SafeInfo *safe, void *nestedDest,
                  CERTCertificate *cert, CERTCertDBHandle *certDb,
                  SECItem *keyId, PRBool includeCertChain);

extern SECStatus
SEC_PKCS12AddKeyForCert(SEC_PKCS12ExportContext *p12ctxt,
                        SEC_PKCS12SafeInfo *safe,
                        void *nestedDest, CERTCertificate *cert,
                        PRBool shroudKey, SECOidTag algorithm, SECItem *pwitem,
                        SECItem *keyId, SECItem *nickName);

extern SECStatus
SEC_PKCS12AddCertAndKey(SEC_PKCS12ExportContext *p12ctxt,
                        void *certSafe, void *certNestedDest,
                        CERTCertificate *cert, CERTCertDBHandle *certDb,
                        void *keySafe, void *keyNestedDest,
                        PRBool shroudKey, SECItem *pwitem, SECOidTag algorithm);

extern SECStatus
SEC_PKCS12AddDERCertAndEncryptedKey(SEC_PKCS12ExportContext *p12ctxt,
                        void *certSafe, void *certNestedDest, SECItem *derCert,
                        void *keySafe, void *keyNestedDest,
                        SECKEYEncryptedPrivateKeyInfo *epki, char *nickname);

extern void *
SEC_PKCS12CreateNestedSafeContents(SEC_PKCS12ExportContext *p12ctxt,
                                   void *baseSafe, void *nestedDest);

extern SECStatus
SEC_PKCS12Encode(SEC_PKCS12ExportContext *p12exp,
                 SEC_PKCS12EncoderOutputCallback output, void *outputarg);

extern void
SEC_PKCS12DestroyExportContext(SEC_PKCS12ExportContext *p12exp);

extern SEC_PKCS12DecoderContext *
SEC_PKCS12DecoderStart(SECItem *pwitem, PK11SlotInfo *slot, void *wincx,
                       digestOpenFn dOpen, digestCloseFn dClose,
                       digestIOFn dRead, digestIOFn dWrite, void *dArg);

extern SECStatus
SEC_PKCS12DecoderUpdate(SEC_PKCS12DecoderContext *p12dcx, unsigned char *data,
                        unsigned long len);

extern void
SEC_PKCS12DecoderFinish(SEC_PKCS12DecoderContext *p12dcx);

extern SECStatus
SEC_PKCS12DecoderVerify(SEC_PKCS12DecoderContext *p12dcx);

extern SECStatus
SEC_PKCS12DecoderValidateBags(SEC_PKCS12DecoderContext *p12dcx,
                              SEC_PKCS12NicknameCollisionCallback nicknameCb);

extern SECStatus
SEC_PKCS12DecoderImportBags(SEC_PKCS12DecoderContext *p12dcx);

CERTCertList *
SEC_PKCS12DecoderGetCerts(SEC_PKCS12DecoderContext *p12dcx);
# 37 "p12e.c" 2
# 1 "/home/nisse/hack/mozilla/dist/include/nspr/plarena.h" 1
# 38 "p12e.c" 2
# 1 "../../../../dist/public/security/secitem.h" 1
# 39 "p12e.c" 2
# 1 "../../../../dist/public/security/secoid.h" 1
# 40 "p12e.c" 2
# 1 "../../../../dist/public/security/seccomon.h" 1
# 41 "p12e.c" 2
# 1 "../../../../dist/public/security/secport.h" 1
# 42 "p12e.c" 2
# 1 "../../../../dist/public/security/cert.h" 1
# 43 "../../../../dist/public/security/cert.h"
# 1 "/home/nisse/hack/mozilla/dist/include/nspr/plarena.h" 1
# 44 "../../../../dist/public/security/cert.h" 2
# 1 "/home/nisse/hack/mozilla/dist/include/nspr/plhash.h" 1
# 40 "/home/nisse/hack/mozilla/dist/include/nspr/plhash.h"
# 1 "/usr/include/stdio.h" 1 3
# 27 "/usr/include/stdio.h" 3
# 1 "/usr/include/features.h" 1 3
# 28 "/usr/include/stdio.h" 2 3





# 1 "/usr/local/lib/gcc-lib/sparc-unknown-linux-gnu/3.0.1/include/stddef.h" 1 3
# 34 "/usr/include/stdio.h" 2 3




# 1 "/usr/local/lib/gcc-lib/sparc-unknown-linux-gnu/3.0.1/include/stdarg.h" 1 3
# 43 "/usr/local/lib/gcc-lib/sparc-unknown-linux-gnu/3.0.1/include/stdarg.h" 3
typedef __builtin_va_list __gnuc_va_list;
# 110 "/usr/local/lib/gcc-lib/sparc-unknown-linux-gnu/3.0.1/include/stdarg.h" 3
typedef __gnuc_va_list va_list;
# 39 "/usr/include/stdio.h" 2 3

# 1 "/usr/include/bits/types.h" 1 3
# 41 "/usr/include/stdio.h" 2 3







typedef struct _IO_FILE FILE;
# 57 "/usr/include/stdio.h" 3
# 1 "/usr/include/libio.h" 1 3
# 30 "/usr/include/libio.h" 3
# 1 "/usr/include/_G_config.h" 1 3
# 9 "/usr/include/_G_config.h" 3
# 1 "/usr/include/bits/types.h" 1 3
# 10 "/usr/include/_G_config.h" 2 3




# 1 "/usr/local/lib/gcc-lib/sparc-unknown-linux-gnu/3.0.1/include/stddef.h" 1 3
# 312 "/usr/local/lib/gcc-lib/sparc-unknown-linux-gnu/3.0.1/include/stddef.h" 3
typedef unsigned int wint_t;
# 15 "/usr/include/_G_config.h" 2 3
# 35 "/usr/include/_G_config.h" 3
typedef int _G_int16_t __attribute__ ((__mode__ (__HI__)));
typedef int _G_int32_t __attribute__ ((__mode__ (__SI__)));
typedef unsigned int _G_uint16_t __attribute__ ((__mode__ (__HI__)));
typedef unsigned int _G_uint32_t __attribute__ ((__mode__ (__SI__)));
# 31 "/usr/include/libio.h" 2 3
# 48 "/usr/include/libio.h" 3
# 1 "/usr/local/lib/gcc-lib/sparc-unknown-linux-gnu/3.0.1/include/stdarg.h" 1 3
# 49 "/usr/include/libio.h" 2 3
# 154 "/usr/include/libio.h" 3
struct _IO_jump_t; struct _IO_FILE;
# 164 "/usr/include/libio.h" 3
typedef void _IO_lock_t;





struct _IO_marker {
  struct _IO_marker *_next;
  struct _IO_FILE *_sbuf;



  int _pos;
# 187 "/usr/include/libio.h" 3
};

struct _IO_FILE {
  int _flags;




  char* _IO_read_ptr;
  char* _IO_read_end;
  char* _IO_read_base;
  char* _IO_write_base;
  char* _IO_write_ptr;
  char* _IO_write_end;
  char* _IO_buf_base;
  char* _IO_buf_end;

  char *_IO_save_base;
  char *_IO_backup_base;
  char *_IO_save_end;

  struct _IO_marker *_markers;

  struct _IO_FILE *_chain;

  int _fileno;
  int _blksize;
  __off_t _old_offset;



  unsigned short _cur_column;
  signed char _vtable_offset;
  char _shortbuf[1];



  _IO_lock_t *_lock;
# 233 "/usr/include/libio.h" 3
  __off64_t _offset;

  int _unused2[16];

};


typedef struct _IO_FILE _IO_FILE;


struct _IO_FILE_plus;
extern struct _IO_FILE_plus _IO_2_1_stdin_;
extern struct _IO_FILE_plus _IO_2_1_stdout_;
extern struct _IO_FILE_plus _IO_2_1_stderr_;
# 262 "/usr/include/libio.h" 3
typedef __ssize_t __io_read_fn (void * __cookie, char *__buf, size_t __nbytes);
# 271 "/usr/include/libio.h" 3
typedef __ssize_t __io_write_fn (void * __cookie, __const char *__buf, size_t __n);
# 280 "/usr/include/libio.h" 3
typedef int __io_seek_fn (void * __cookie, __off_t __pos, int __w);


typedef int __io_close_fn (void * __cookie);
# 318 "/usr/include/libio.h" 3
extern int __underflow (_IO_FILE *) ;
extern int __uflow (_IO_FILE *) ;
extern int __overflow (_IO_FILE *, int) ;
# 337 "/usr/include/libio.h" 3
extern int _IO_getc (_IO_FILE *__fp) ;
extern int _IO_putc (int __c, _IO_FILE *__fp) ;
extern int _IO_feof (_IO_FILE *__fp) ;
extern int _IO_ferror (_IO_FILE *__fp) ;

extern int _IO_peekc_locked (_IO_FILE *__fp) ;





extern void _IO_flockfile (_IO_FILE *) ;
extern void _IO_funlockfile (_IO_FILE *) ;
extern int _IO_ftrylockfile (_IO_FILE *) ;
# 363 "/usr/include/libio.h" 3
extern int _IO_vfscanf (_IO_FILE * __restrict, const char * __restrict, __gnuc_va_list, int *__restrict) ;

extern int _IO_vfprintf (_IO_FILE *__restrict, const char *__restrict, __gnuc_va_list) ;

extern __ssize_t _IO_padn (_IO_FILE *, int, __ssize_t) ;
extern size_t _IO_sgetn (_IO_FILE *, void *, size_t) ;

extern __off64_t _IO_seekoff (_IO_FILE *, __off64_t, int, int) ;
extern __off64_t _IO_seekpos (_IO_FILE *, __off64_t, int) ;

extern void _IO_free_backup_area (_IO_FILE *) ;
# 58 "/usr/include/stdio.h" 2 3



typedef __off_t fpos_t;
# 110 "/usr/include/stdio.h" 3
# 1 "/usr/include/bits/stdio_lim.h" 1 3
# 111 "/usr/include/stdio.h" 2 3



extern FILE *stdin;
extern FILE *stdout;
extern FILE *stderr;







extern int remove (__const char *__filename) ;

extern int rename (__const char *__old, __const char *__new) ;




extern FILE *tmpfile (void) ;
# 143 "/usr/include/stdio.h" 3
extern char *tmpnam (char *__s) ;




extern char *tmpnam_r (char *__s) ;
# 160 "/usr/include/stdio.h" 3
extern char *tempnam (__const char *__dir, __const char *__pfx) ;




extern int fclose (FILE *__stream) ;

extern int fflush (FILE *__stream) ;



extern int fflush_unlocked (FILE *__stream) ;
# 182 "/usr/include/stdio.h" 3
extern FILE *fopen (__const char *__restrict __filename, __const char *__restrict __modes) ;


extern FILE *freopen (__const char *__restrict __filename, __const char *__restrict __modes, FILE *__restrict __stream) ;
# 212 "/usr/include/stdio.h" 3
extern FILE *fdopen (int __fd, __const char *__modes) ;
# 232 "/usr/include/stdio.h" 3
extern void setbuf (FILE *__restrict __stream, char *__restrict __buf) ;



extern int setvbuf (FILE *__restrict __stream, char *__restrict __buf, int __modes, size_t __n) ;





extern void setbuffer (FILE *__restrict __stream, char *__restrict __buf, size_t __size) ;



extern void setlinebuf (FILE *__stream) ;




extern int fprintf (FILE *__restrict __stream, __const char *__restrict __format, ...) ;


extern int printf (__const char *__restrict __format, ...) ;

extern int sprintf (char *__restrict __s, __const char *__restrict __format, ...) ;



extern int vfprintf (FILE *__restrict __s, __const char *__restrict __format, __gnuc_va_list __arg) ;



extern int vprintf (__const char *__restrict __format, __gnuc_va_list __arg) ;


extern int vsprintf (char *__restrict __s, __const char *__restrict __format, __gnuc_va_list __arg) ;





extern int snprintf (char *__restrict __s, size_t __maxlen, __const char *__restrict __format, ...)

     __attribute__ ((__format__ (__printf__, 3, 4)));

extern int __vsnprintf (char *__restrict __s, size_t __maxlen, __const char *__restrict __format, __gnuc_va_list __arg)


     __attribute__ ((__format__ (__printf__, 3, 0)));
extern int vsnprintf (char *__restrict __s, size_t __maxlen, __const char *__restrict __format, __gnuc_va_list __arg)


     __attribute__ ((__format__ (__printf__, 3, 0)));
# 310 "/usr/include/stdio.h" 3
extern int fscanf (FILE *__restrict __stream, __const char *__restrict __format, ...) ;


extern int scanf (__const char *__restrict __format, ...) ;

extern int sscanf (__const char *__restrict __s, __const char *__restrict __format, ...) ;
# 338 "/usr/include/stdio.h" 3
extern int fgetc (FILE *__stream) ;
extern int getc (FILE *__stream) ;


extern int getchar (void) ;







extern int getc_unlocked (FILE *__stream) ;
extern int getchar_unlocked (void) ;




extern int fgetc_unlocked (FILE *__stream) ;




extern int fputc (int __c, FILE *__stream) ;
extern int putc (int __c, FILE *__stream) ;


extern int putchar (int __c) ;







extern int fputc_unlocked (int __c, FILE *__stream) ;




extern int putc_unlocked (int __c, FILE *__stream) ;
extern int putchar_unlocked (int __c) ;





extern int getw (FILE *__stream) ;


extern int putw (int __w, FILE *__stream) ;




extern char *fgets (char *__restrict __s, int __n, FILE *__restrict __stream) ;
# 404 "/usr/include/stdio.h" 3
extern char *gets (char *__s) ;
# 428 "/usr/include/stdio.h" 3
extern int fputs (__const char *__restrict __s, FILE *__restrict __stream) ;
# 438 "/usr/include/stdio.h" 3
extern int puts (__const char *__s) ;



extern int ungetc (int __c, FILE *__stream) ;



extern size_t fread (void *__restrict __ptr, size_t __size, size_t __n, FILE *__restrict __stream) ;


extern size_t fwrite (__const void *__restrict __ptr, size_t __size, size_t __n, FILE *__restrict __s) ;




extern size_t fread_unlocked (void *__restrict __ptr, size_t __size, size_t __n, FILE *__restrict __stream) ;

extern size_t fwrite_unlocked (__const void *__restrict __ptr, size_t __size, size_t __n, FILE *__restrict __stream) ;






extern int fseek (FILE *__stream, long int __off, int __whence) ;

extern long int ftell (FILE *__stream) ;

extern void rewind (FILE *__stream) ;
# 499 "/usr/include/stdio.h" 3
extern int fgetpos (FILE *__restrict __stream, fpos_t *__restrict __pos) ;


extern int fsetpos (FILE *__stream, __const fpos_t *__pos) ;
# 536 "/usr/include/stdio.h" 3
extern void clearerr (FILE *__stream) ;

extern int feof (FILE *__stream) ;

extern int ferror (FILE *__stream) ;



extern void clearerr_unlocked (FILE *__stream) ;
extern int feof_unlocked (FILE *__stream) ;
extern int ferror_unlocked (FILE *__stream) ;




extern void perror (__const char *__s) ;




extern int sys_nerr;
extern __const char *__const sys_errlist[];
# 567 "/usr/include/stdio.h" 3
extern int fileno (FILE *__stream) ;




extern int fileno_unlocked (FILE *__stream) ;






extern FILE *popen (__const char *__command, __const char *__modes) ;


extern int pclose (FILE *__stream) ;





extern char *ctermid (char *__s) ;





extern char *cuserid (char *__s) ;
# 614 "/usr/include/stdio.h" 3
extern void flockfile (FILE *__stream) ;



extern int ftrylockfile (FILE *__stream) ;


extern void funlockfile (FILE *__stream) ;







# 1 "/usr/include/getopt.h" 1 3
# 36 "/usr/include/getopt.h" 3
extern char *optarg;
# 50 "/usr/include/getopt.h" 3
extern int optind;




extern int opterr;



extern int optopt;
# 134 "/usr/include/getopt.h" 3
extern int getopt (int __argc, char *const *__argv, const char *__shortopts);
# 630 "/usr/include/stdio.h" 2 3





# 1 "/usr/include/bits/stdio.h" 1 3
# 32 "/usr/include/bits/stdio.h" 3
extern __inline int
vprintf (__const char *__restrict __fmt, __gnuc_va_list __arg)
{
  return vfprintf (stdout, __fmt, __arg);
}


extern __inline int
getchar (void)
{
  return _IO_getc (stdin);
}




extern __inline int
getc_unlocked (FILE *__fp)
{
  return ((__fp)->_IO_read_ptr >= (__fp)->_IO_read_end ? __uflow (__fp) : *(unsigned char *) (__fp)->_IO_read_ptr++);
}


extern __inline int
getchar_unlocked (void)
{
  return ((stdin)->_IO_read_ptr >= (stdin)->_IO_read_end ? __uflow (stdin) : *(unsigned char *) (stdin)->_IO_read_ptr++);
}




extern __inline int
putchar (int __c)
{
  return _IO_putc (__c, stdout);
}




extern __inline int
fputc_unlocked (int __c, FILE *__stream)
{
  return (((__stream)->_IO_write_ptr >= (__stream)->_IO_write_end) ? __overflow (__stream, (unsigned char) (__c)) : (unsigned char) (*(__stream)->_IO_write_ptr++ = (__c)));
}





extern __inline int
putc_unlocked (int __c, FILE *__stream)
{
  return (((__stream)->_IO_write_ptr >= (__stream)->_IO_write_end) ? __overflow (__stream, (unsigned char) (__c)) : (unsigned char) (*(__stream)->_IO_write_ptr++ = (__c)));
}


extern __inline int
putchar_unlocked (int __c)
{
  return (((stdout)->_IO_write_ptr >= (stdout)->_IO_write_end) ? __overflow (stdout, (unsigned char) (__c)) : (unsigned char) (*(stdout)->_IO_write_ptr++ = (__c)));
}
# 110 "/usr/include/bits/stdio.h" 3
extern __inline int
feof_unlocked (FILE *__stream)
{
  return (((__stream)->_flags & 0x10) != 0);
}


extern __inline int
ferror_unlocked (FILE *__stream)
{
  return (((__stream)->_flags & 0x20) != 0);
}
# 636 "/usr/include/stdio.h" 2 3
# 41 "/home/nisse/hack/mozilla/dist/include/nspr/plhash.h" 2
# 1 "/home/nisse/hack/mozilla/dist/include/nspr/prtypes.h" 1
# 42 "/home/nisse/hack/mozilla/dist/include/nspr/plhash.h" 2



typedef struct PLHashEntry PLHashEntry;
typedef struct PLHashTable PLHashTable;
typedef PRUint32 PLHashNumber;

typedef PLHashNumber ( *PLHashFunction)(const void *key);
typedef PRIntn ( *PLHashComparator)(const void *v1, const void *v2);




typedef PRIntn ( *PLHashEnumerator)(PLHashEntry *he, PRIntn i, void *arg);
# 67 "/home/nisse/hack/mozilla/dist/include/nspr/plhash.h"
typedef struct PLHashAllocOps {
    void * ( *allocTable)(void *pool, PRSize size);
    void ( *freeTable)(void *pool, void *item);
    PLHashEntry * ( *allocEntry)(void *pool, const void *key);
    void ( *freeEntry)(void *pool, PLHashEntry *he, PRUintn flag);
} PLHashAllocOps;




struct PLHashEntry {
    PLHashEntry *next;
    PLHashNumber keyHash;
    const void *key;
    void *value;
};

struct PLHashTable {
    PLHashEntry **buckets;
    PRUint32 nentries;
    PRUint32 shift;
    PLHashFunction keyHash;
    PLHashComparator keyCompare;
    PLHashComparator valueCompare;
    const PLHashAllocOps *allocOps;
    void *allocPriv;






};





extern PLHashTable *
PL_NewHashTable(PRUint32 numBuckets, PLHashFunction keyHash,
                PLHashComparator keyCompare, PLHashComparator valueCompare,
                const PLHashAllocOps *allocOps, void *allocPriv);

extern void
PL_HashTableDestroy(PLHashTable *ht);


extern PLHashEntry *
PL_HashTableAdd(PLHashTable *ht, const void *key, void *value);

extern PRBool
PL_HashTableRemove(PLHashTable *ht, const void *key);

extern void *
PL_HashTableLookup(PLHashTable *ht, const void *key);

extern void *
PL_HashTableLookupConst(PLHashTable *ht, const void *key);

extern PRIntn
PL_HashTableEnumerateEntries(PLHashTable *ht, PLHashEnumerator f, void *arg);


extern PLHashNumber
PL_HashString(const void *key);


extern PRIntn
PL_CompareStrings(const void *v1, const void *v2);


extern PRIntn
PL_CompareValues(const void *v1, const void *v2);


extern PLHashEntry **
PL_HashTableRawLookup(PLHashTable *ht, PLHashNumber keyHash, const void *key);

extern PLHashEntry **
PL_HashTableRawLookupConst(PLHashTable *ht, PLHashNumber keyHash,
                           const void *key);

extern PLHashEntry *
PL_HashTableRawAdd(PLHashTable *ht, PLHashEntry **hep, PLHashNumber keyHash,
                   const void *key, void *value);

extern void
PL_HashTableRawRemove(PLHashTable *ht, PLHashEntry **hep, PLHashEntry *he);


extern PRIntn
PL_HashTableDump(PLHashTable *ht, PLHashEnumerator dump, FILE *fp);
# 45 "../../../../dist/public/security/cert.h" 2
# 1 "/home/nisse/hack/mozilla/dist/include/nspr/prlong.h" 1
# 46 "../../../../dist/public/security/cert.h" 2
# 1 "/home/nisse/hack/mozilla/dist/include/nspr/prlog.h" 1
# 47 "../../../../dist/public/security/cert.h" 2

# 1 "../../../../dist/public/security/seccomon.h" 1
# 49 "../../../../dist/public/security/cert.h" 2
# 1 "../../../../dist/public/security/secdert.h" 1
# 50 "../../../../dist/public/security/cert.h" 2
# 1 "../../../../dist/public/security/secoidt.h" 1
# 51 "../../../../dist/public/security/cert.h" 2
# 1 "../../../../dist/public/security/keyt.h" 1
# 52 "../../../../dist/public/security/cert.h" 2
# 1 "../../../../dist/public/security/certt.h" 1
# 53 "../../../../dist/public/security/cert.h" 2
# 65 "../../../../dist/public/security/cert.h"
extern CERTName *CERT_AsciiToName(char *string);




extern char *CERT_NameToAscii(CERTName *name);

extern CERTAVA *CERT_CopyAVA(PLArenaPool *arena, CERTAVA *src);





extern SECOidTag CERT_GetAVATag(CERTAVA *ava);




extern SECComparison CERT_CompareAVA(CERTAVA *a, CERTAVA *b);





extern CERTRDN *CERT_CreateRDN(PLArenaPool *arena, CERTAVA *avas, ...);




extern SECStatus CERT_CopyRDN(PLArenaPool *arena, CERTRDN *dest, CERTRDN *src);






extern void CERT_DestroyRDN(CERTRDN *rdn, PRBool freeit);






extern SECStatus CERT_AddAVA(PLArenaPool *arena, CERTRDN *rdn, CERTAVA *ava);




extern SECComparison CERT_CompareRDN(CERTRDN *a, CERTRDN *b);




extern CERTName *CERT_CreateName(CERTRDN *rdn, ...);







extern SECStatus CERT_CopyName(PLArenaPool *arena, CERTName *dest, CERTName *src);






extern void CERT_DestroyName(CERTName *name);






extern SECStatus CERT_AddRDN(CERTName *name, CERTRDN *rdn);




extern SECComparison CERT_CompareName(CERTName *a, CERTName *b);




extern char *CERT_FormatName (CERTName *name);





extern char *CERT_Hexify (SECItem *i, int do_colon);
# 169 "../../../../dist/public/security/cert.h"
extern CERTValidity *CERT_CreateValidity(int64 notBefore, int64 notAfter);






extern void CERT_DestroyValidity(CERTValidity *v);







extern SECStatus CERT_CopyValidity
   (PLArenaPool *arena, CERTValidity *dest, CERTValidity *src);
# 196 "../../../../dist/public/security/cert.h"
PRInt32 CERT_GetSlopTime(void);

SECStatus CERT_SetSlopTime(PRInt32 slop);
# 208 "../../../../dist/public/security/cert.h"
extern CERTCertificate *
CERT_CreateCertificate (unsigned long serialNumber, CERTName *issuer,
                        CERTValidity *validity, CERTCertificateRequest *req);
# 219 "../../../../dist/public/security/cert.h"
extern void CERT_DestroyCertificate(CERTCertificate *cert);





extern CERTCertificate *CERT_DupCertificate(CERTCertificate *c);
# 234 "../../../../dist/public/security/cert.h"
extern CERTCertificateRequest *
CERT_CreateCertificateRequest (CERTName *name, CERTSubjectPublicKeyInfo *spki,
                               SECItem **attributes);






extern void CERT_DestroyCertificateRequest(CERTCertificateRequest *r);




extern SECKEYPublicKey *CERT_ExtractPublicKey(CERTCertificate *cert);





extern SECKEYPublicKey *CERT_KMIDPublicKey(CERTCertificate *cert);






extern KeyType CERT_GetCertKeyType (CERTSubjectPublicKeyInfo *spki);





extern SECStatus CERT_InitCertDB(CERTCertDBHandle *handle);




extern void CERT_SetDefaultCertDB(CERTCertDBHandle *handle);

extern CERTCertDBHandle *CERT_GetDefaultCertDB(void);

extern CERTCertList *CERT_GetCertChainFromCert(CERTCertificate *cert,
                                               int64 time,
                                               SECCertUsage usage);
# 294 "../../../../dist/public/security/cert.h"
extern CERTAVA *CERT_CreateAVA
   (PLArenaPool *arena, SECOidTag kind, int valueType, char *value);






extern SECStatus CERT_NameFromDERCert(SECItem *derCert, SECItem *derName);






extern SECStatus CERT_IssuerNameFromDERCert(SECItem *derCert,
                                            SECItem *derName);
# 321 "../../../../dist/public/security/cert.h"
extern SECStatus CERT_KeyFromDERCert(PLArenaPool *arena, SECItem *derCert, SECItem *key);

extern SECStatus CERT_KeyFromIssuerAndSN(PLArenaPool *arena, SECItem *issuer,
                                         SECItem *sn, SECItem *key);
# 333 "../../../../dist/public/security/cert.h"
extern SECStatus CERT_KeyFromDERCrl(PLArenaPool *arena, SECItem *derCrl, SECItem *key);




extern SECStatus CERT_OpenCertDB(CERTCertDBHandle *handle, PRBool readOnly,
                                 CERTDBNameFunc namecb, void *cbarg);


extern SECStatus CERT_OpenCertDBFilename(CERTCertDBHandle *handle,
                                         char *certdbname, PRBool readOnly);





extern SECStatus CERT_OpenVolatileCertDB(CERTCertDBHandle *handle);





extern SECStatus CERT_VerifyCertName(CERTCertificate *cert, const char *hostname);





extern SECStatus CERT_AddOKDomainName(CERTCertificate *cert, const char *hostname);
# 371 "../../../../dist/public/security/cert.h"
extern CERTCertificate *
__CERT_DecodeDERCertificate (SECItem *derSignedCert, PRBool copyDER, char *nickname);
# 381 "../../../../dist/public/security/cert.h"
extern CERTSignedCrl *
CERT_DecodeDERCrl (PLArenaPool *arena, SECItem *derSignedCrl,int type);







extern CERTSignedCrl *
CERT_ImportCRL (CERTCertDBHandle *handle, SECItem *derCRL, char *url,
                                                int type, void * wincx);

extern void CERT_DestroyCrl (CERTSignedCrl *crl);




extern CERTCertificate *
__CERT_NewTempCertificate (CERTCertDBHandle *handle, SECItem *derCert,
                         char *nickname, PRBool isperm, PRBool copyDER);






extern CERTCertificate *
CERT_AddTempCertificate (CERTCertDBHandle *handle, certDBEntryCert *entry,
                         PRBool isperm);







extern SECStatus
CERT_AddTempCertToPerm (CERTCertificate *cert, char *nickname, CERTCertTrust *trust);





extern CERTCertificate *CERT_FindCertByKey(CERTCertDBHandle *handle, SECItem *key);
# 434 "../../../../dist/public/security/cert.h"
CERTCertificate *
CERT_FindCertByKeyNoLocking(CERTCertDBHandle *handle, SECItem *certKey);





extern CERTCertificate *
CERT_FindCertByName (CERTCertDBHandle *handle, SECItem *name);





extern CERTCertificate *
CERT_FindCertByNameString (CERTCertDBHandle *handle, char *name);






extern CERTCertificate *
CERT_FindCertByKeyID (CERTCertDBHandle *handle, SECItem *name, SECItem *keyID);






extern CERTCertificate *
CERT_FindCertByIssuerAndSN (CERTCertDBHandle *handle, CERTIssuerAndSN *issuerAndSN);





extern CERTCertificate *
CERT_FindCertByNickname (CERTCertDBHandle *handle, char *nickname);




extern CERTCertificate *
CERT_FindCertByDERCert(CERTCertDBHandle *handle, SECItem *derCert);





CERTCertificate *
CERT_FindCertByEmailAddr(CERTCertDBHandle *handle, char *emailAddr);





CERTCertificate *
CERT_FindCertByNicknameOrEmailAddr(CERTCertDBHandle *handle, char *name);





extern CERTCertificate *
CERT_FindCertBySPKDigest(CERTCertDBHandle *handle, SECItem *spkDigest);




CERTCertificate *
CERT_FindCertIssuer(CERTCertificate *cert, int64 validTime, SECCertUsage usage);





extern SECStatus CERT_DeleteTempCertificate(CERTCertificate *cert);




extern void __CERT_ClosePermCertDB(CERTCertDBHandle *handle);
# 526 "../../../../dist/public/security/cert.h"
extern SECCertTimeValidity CERT_CheckCertValidTimes(CERTCertificate *cert,
                                                    PRTime t,
                                                    PRBool allowOverride);
# 538 "../../../../dist/public/security/cert.h"
extern SECStatus CERT_CertTimesValid(CERTCertificate *cert);







extern SECStatus
CERT_GetCertTimes (CERTCertificate *c, PRTime *notBefore, PRTime *notAfter);




extern CERTIssuerAndSN *CERT_GetCertIssuerAndSN(PLArenaPool *,
                                                        CERTCertificate *);






extern SECStatus CERT_VerifySignedData(CERTSignedData *sd,
                                       CERTCertificate *cert,
                                       int64 t,
                                       void *wincx);
# 572 "../../../../dist/public/security/cert.h"
extern SECStatus
CERT_VerifyCert(CERTCertDBHandle *handle, CERTCertificate *cert,
                PRBool checkSig, SECCertUsage certUsage, int64 t,
                void *wincx, CERTVerifyLog *log);


extern SECStatus
CERT_VerifyCertNow(CERTCertDBHandle *handle, CERTCertificate *cert,
                   PRBool checkSig, SECCertUsage certUsage, void *wincx);





extern CERTCertificate *
CERT_FindExpiredIssuer (CERTCertDBHandle *handle, CERTCertificate *cert);






extern CERTCertificate *CERT_ConvertAndDecodeCertificate(char *certstr);
# 604 "../../../../dist/public/security/cert.h"
extern CERTCertificate *CERT_DecodeCertFromPackage(char *certbuf, int certlen);

extern SECStatus
CERT_ImportCAChain (SECItem *certs, int numcerts, SECCertUsage certUsage);
# 617 "../../../../dist/public/security/cert.h"
typedef SECStatus ( *CERTImportCertificateFunc)
   (void *arg, SECItem **certs, int numcerts);

extern SECStatus
CERT_DecodeCertPackage(char *certbuf, int certlen, CERTImportCertificateFunc f,
                       void *arg);
# 631 "../../../../dist/public/security/cert.h"
extern char *CERT_HTMLCertInfo(CERTCertificate *cert, PRBool showImages,
                               PRBool showIssuer);
# 642 "../../../../dist/public/security/cert.h"
extern SECItem *CERT_DecodeAVAValue(SECItem *derAVAValue);






extern char *CERT_GetCommonName(CERTName *name);

extern char *CERT_GetCertificateEmailAddress(CERTCertificate *cert);

extern char *CERT_GetCertEmailAddress(CERTName *name);

extern char *CERT_GetCommonName(CERTName *name);

extern char *CERT_GetCountryName(CERTName *name);

extern char *CERT_GetLocalityName(CERTName *name);

extern char *CERT_GetStateName(CERTName *name);

extern char *CERT_GetOrgName(CERTName *name);

extern char *CERT_GetOrgUnitName(CERTName *name);

extern char *CERT_GetDomainComponentName(CERTName *name);

extern char *CERT_GetCertUid(CERTName *name);



extern SECStatus CERT_GetCertTrust(CERTCertificate *cert, CERTCertTrust *trust);

extern SECStatus
CERT_ChangeCertTrust (CERTCertDBHandle *handle, CERTCertificate *cert,
                      CERTCertTrust *trust);

extern SECStatus
CERT_ChangeCertTrustByUsage(CERTCertDBHandle *certdb, CERTCertificate *cert,
                            SECCertUsage usage);
# 694 "../../../../dist/public/security/cert.h"
extern void *CERT_StartCertExtensions(CERTCertificate *cert);
# 705 "../../../../dist/public/security/cert.h"
extern SECStatus CERT_AddExtension (void *exthandle, int idtag,
                        SECItem *value, PRBool critical, PRBool copyData);

extern SECStatus CERT_AddExtensionByOID (void *exthandle, SECItem *oid,
                         SECItem *value, PRBool critical, PRBool copyData);

extern SECStatus CERT_EncodeAndAddExtension
   (void *exthandle, int idtag, void *value, PRBool critical,
    const SEC_ASN1Template *atemplate);

extern SECStatus CERT_EncodeAndAddBitStrExtension
   (void *exthandle, int idtag, SECItem *value, PRBool critical);







extern SECStatus CERT_FinishExtensions(void *exthandle);





extern SECStatus CERT_GetExtenCriticality
   (CERTCertExtension **extensions, int tag, PRBool *isCritical);

extern void
CERT_DestroyOidSequence(CERTOidSequence *oidSeq);
# 747 "../../../../dist/public/security/cert.h"
extern SECStatus CERT_EncodeBasicConstraintValue
   (PLArenaPool *arena, CERTBasicConstraints *value, SECItem *encodedValue);




extern SECStatus CERT_EncodeAuthKeyID
   (PLArenaPool *arena, CERTAuthKeyID *value, SECItem *encodedValue);




extern SECStatus CERT_EncodeCRLDistributionPoints
   (PLArenaPool *arena, CERTCrlDistributionPoints *value,SECItem *derValue);






extern SECStatus CERT_DecodeBasicConstraintValue
   (CERTBasicConstraints *value, SECItem *encodedValue);







extern CERTAuthKeyID *CERT_DecodeAuthKeyID
                        (PLArenaPool *arena, SECItem *encodedValue);
# 787 "../../../../dist/public/security/cert.h"
extern CERTCrlDistributionPoints * CERT_DecodeCRLDistributionPoints
   (PLArenaPool *arena, SECItem *der);


extern void *CERT_GetGeneralNameByType
   (CERTGeneralName *genNames, CERTGeneralNameType type, PRBool derFormat);


extern CERTOidSequence *
CERT_DecodeOidSequence(SECItem *seqItem);
# 807 "../../../../dist/public/security/cert.h"
extern SECStatus CERT_FindCertExtension
   (CERTCertificate *cert, int tag, SECItem *value);

extern SECStatus CERT_FindNSCertTypeExtension
   (CERTCertificate *cert, SECItem *value);

extern char * CERT_FindNSStringExtension (CERTCertificate *cert, int oidtag);

extern SECStatus CERT_FindIssuerCertExtension
   (CERTCertificate *cert, int tag, SECItem *value);

extern SECStatus CERT_FindCertExtensionByOID
   (CERTCertificate *cert, SECItem *oid, SECItem *value);

extern char *CERT_FindCertURLExtension (CERTCertificate *cert, int tag,
                                                                int catag);




extern CERTAuthKeyID * CERT_FindAuthKeyIDExten (PLArenaPool *arena,CERTCertificate *cert);



extern SECStatus CERT_FindBasicConstraintExten
   (CERTCertificate *cert, CERTBasicConstraints *value);




extern CERTCrlDistributionPoints * CERT_FindCRLDistributionPoints
   (CERTCertificate *cert);





extern SECStatus CERT_FindKeyUsageExtension (CERTCertificate *cert,
                                                        SECItem *value);




extern SECStatus CERT_FindSubjectKeyIDExten (CERTCertificate *cert,
                                                           SECItem *retItem);
# 862 "../../../../dist/public/security/cert.h"
extern SECStatus CERT_CheckCertUsage (CERTCertificate *cert,
                                                        unsigned char usage);







extern SECStatus CERT_FindCRLExtensionByOID
   (CERTCrl *crl, SECItem *oid, SECItem *value);

extern SECStatus CERT_FindCRLExtension
   (CERTCrl *crl, int tag, SECItem *value);

extern SECStatus
   CERT_FindInvalidDateExten (CERTCrl *crl, int64 *value);

extern void *CERT_StartCRLExtensions (CERTCrl *crl);

extern CERTCertNicknames *CERT_GetCertNicknames (CERTCertDBHandle *handle,
                                                 int what, void *wincx);




extern SECStatus CERT_FindCRLNumberExten (CERTCrl *crl, CERTCrlNumber *value);

extern void CERT_FreeNicknames(CERTCertNicknames *nicknames);

extern PRBool CERT_CompareCerts(CERTCertificate *c1, CERTCertificate *c2);

extern PRBool CERT_CompareCertsForRedirection(CERTCertificate *c1,
                                                         CERTCertificate *c2);





extern CERTDistNames *CERT_GetSSLCACerts(CERTCertDBHandle *handle);

extern void CERT_FreeDistNames(CERTDistNames *names);




extern CERTDistNames *CERT_DistNamesFromNicknames
   (CERTCertDBHandle *handle, char **nicknames, int nnames);




extern CERTCertificateList *
CERT_CertChainFromCert(CERTCertificate *cert, SECCertUsage usage,
                       PRBool includeRoot);

extern CERTCertificateList *
CERT_CertListFromCert(CERTCertificate *cert);

extern CERTCertificateList *
CERT_DupCertList(CERTCertificateList * oldList);

extern void CERT_DestroyCertificateList(CERTCertificateList *list);


PRBool CERT_IsNewer(CERTCertificate *certa, CERTCertificate *certb);

typedef SECStatus (* CERTCertCallback)(CERTCertificate *cert, void *arg);

SECStatus
__CERT_TraversePermCertsForSubject(CERTCertDBHandle *handle, SECItem *derSubject,
                                 CERTCertCallback cb, void *cbarg);
int
CERT_NumPermCertsForSubject(CERTCertDBHandle *handle, SECItem *derSubject);

SECStatus
__CERT_TraversePermCertsForNickname(CERTCertDBHandle *handle, char *nickname,
                                  CERTCertCallback cb, void *cbarg);

int
CERT_NumPermCertsForNickname(CERTCertDBHandle *handle, char *nickname);

int
CERT_NumCertsForCertSubject(CERTCertificate *cert);

int
CERT_NumPermCertsForCertSubject(CERTCertificate *cert);

SECStatus
CERT_TraverseCertsForSubject(CERTCertDBHandle *handle,
                             CERTSubjectList *subjectList,
                             CERTCertCallback cb, void *cbarg);


PRBool
CERT_IsCertRevoked(CERTCertificate *cert);

void
CERT_DestroyCertArray(CERTCertificate **certs, unsigned int ncerts);


char *CERT_FixupEmailAddr(char *emailAddr);


SECStatus
CERT_DecodeTrustString(CERTCertTrust *trust, char *trusts);


char *
CERT_EncodeTrustString(CERTCertTrust *trust);


CERTCertificate *
CERT_PrevSubjectCert(CERTCertificate *cert);
CERTCertificate *
CERT_NextSubjectCert(CERTCertificate *cert);





SECStatus
CERT_ImportCerts(CERTCertDBHandle *certdb, SECCertUsage usage,
                 unsigned int ncerts, SECItem **derCerts,
                 CERTCertificate ***retCerts, PRBool keepCerts,
                 PRBool caOnly, char *nickname);

SECStatus
CERT_SaveImportedCert(CERTCertificate *cert, SECCertUsage usage,
                      PRBool caOnly, char *nickname);

char *
CERT_MakeCANickname(CERTCertificate *cert);

PRBool
CERT_IsCACert(CERTCertificate *cert, unsigned int *rettype);

PRBool
CERT_IsCADERCert(SECItem *derCert, unsigned int *rettype);

SECStatus
CERT_SaveSMimeProfile(CERTCertificate *cert, SECItem *emailProfile,
                      SECItem *profileTime);




SECItem *
CERT_FindSMimeProfile(CERTCertificate *cert);

int
CERT_GetDBContentVersion(CERTCertDBHandle *handle);

void
CERT_SetDBContentVersion(int version, CERTCertDBHandle *handle);

SECStatus
CERT_AddNewCerts(CERTCertDBHandle *handle);

CERTPackageType
CERT_CertPackageType(SECItem *package, SECItem *certitem);

CERTCertificatePolicies *
CERT_DecodeCertificatePoliciesExtension(SECItem *extnValue);

void
CERT_DestroyCertificatePoliciesExtension(CERTCertificatePolicies *policies);

CERTUserNotice *
CERT_DecodeUserNotice(SECItem *noticeItem);

void
CERT_DestroyUserNotice(CERTUserNotice *userNotice);

typedef char * (* CERTPolicyStringCallback)(char *org,
                                               unsigned long noticeNumber,
                                               void *arg);
void
CERT_SetCAPolicyStringCallback(CERTPolicyStringCallback cb, void *cbarg);

char *
CERT_GetCertCommentString(CERTCertificate *cert);

PRBool
CERT_GovtApprovedBitSet(CERTCertificate *cert);

SECStatus
CERT_AddPermNickname(CERTCertificate *cert, char *nickname);






CERTCertificate *
CERT_FindCertByUsage(CERTCertificate *basecert, unsigned int requiredKeyUsage);


CERTCertList *
CERT_MatchUserCert(CERTCertDBHandle *handle,
                   SECCertUsage usage,
                   int nCANames, char **caNames,
                   void *proto_win);

CERTCertList *
CERT_NewCertList(void);

void
CERT_DestroyCertList(CERTCertList *certs);


void
CERT_RemoveCertListNode(CERTCertListNode *node);

SECStatus
CERT_AddCertToListTail(CERTCertList *certs, CERTCertificate *cert);

SECStatus
CERT_AddCertToListHead(CERTCertList *certs, CERTCertificate *cert);

SECStatus
CERT_AddCertToListTailWithData(CERTCertList *certs, CERTCertificate *cert,
                                                         void *appData);

SECStatus
CERT_AddCertToListHeadWithData(CERTCertList *certs, CERTCertificate *cert,
                                                         void *appData);

typedef PRBool (* CERTSortCallback)(CERTCertificate *certa,
                                    CERTCertificate *certb,
                                    void *arg);
SECStatus
CERT_AddCertToListSorted(CERTCertList *certs, CERTCertificate *cert,
                         CERTSortCallback f, void *arg);




PRBool
CERT_SortCBValidity(CERTCertificate *certa,
                    CERTCertificate *certb,
                    void *arg);

SECStatus
CERT_CheckForEvilCert(CERTCertificate *cert);

CERTGeneralName *
CERT_GetCertificateNames(CERTCertificate *cert, PLArenaPool *arena);

int
CERT_GetNamesLength(CERTGeneralName *names);

CERTCertificate *
CERT_CompareNameSpace(CERTCertificate *cert,
                      CERTGeneralName *namesList,
                      SECItem *namesListIndex,
                      PLArenaPool *arena,
                      CERTCertDBHandle *handle);

SECStatus
CERT_EncodeSubjectKeyID(PLArenaPool *arena, char *value, int len, SECItem *encodedValue);

char *
CERT_GetNickName(CERTCertificate *cert, CERTCertDBHandle *handle, PLArenaPool *nicknameArena);






CERTCertList *
CERT_CreateSubjectCertList(CERTCertList *certList, CERTCertDBHandle *handle,
                           SECItem *name, int64 sorttime, PRBool validOnly);






CERTCertList *
CERT_CreateNicknameCertList(CERTCertList *certList, CERTCertDBHandle *handle,
                            char *nickname, int64 sorttime, PRBool validOnly);






CERTCertList *
CERT_CreateEmailAddrCertList(CERTCertList *certList, CERTCertDBHandle *handle,
                             char *emailAddr, int64 sorttime, PRBool validOnly);





SECStatus
CERT_FilterCertListByUsage(CERTCertList *certList, SECCertUsage usage,
                           PRBool ca);




SECStatus
CERT_CheckKeyUsage(CERTCertificate *cert, unsigned int requiredUsage);




SECStatus
CERT_KeyUsageAndTypeForCertUsage(SECCertUsage usage,
                                 PRBool ca,
                                 unsigned int *retKeyUsage,
                                 unsigned int *retCertType);



SECStatus
CERT_TrustFlagsForCACertUsage(SECCertUsage usage,
                              unsigned int *retFlags,
                              SECTrustType *retTrustType);
# 1194 "../../../../dist/public/security/cert.h"
CERTCertList *
CERT_FindUserCertsByUsage(CERTCertDBHandle *handle,
                          SECCertUsage usage,
                          PRBool oneCertPerName,
                          PRBool validOnly,
                          void *proto_win);
# 1210 "../../../../dist/public/security/cert.h"
CERTCertificate *
CERT_FindUserCertByUsage(CERTCertDBHandle *handle,
                         char *nickname,
                         SECCertUsage usage,
                         PRBool validOnly,
                         void *proto_win);
# 1227 "../../../../dist/public/security/cert.h"
SECStatus
CERT_FilterCertListByCANames(CERTCertList *certList, int nCANames,
                             char **caNames, SECCertUsage usage);
# 1240 "../../../../dist/public/security/cert.h"
CERTCertNicknames *
CERT_NicknameStringsFromCertList(CERTCertList *certList, char *expiredString,
                                 char *notYetGoodString);
# 1256 "../../../../dist/public/security/cert.h"
char *
CERT_ExtractNicknameString(char *namestring, char *expiredString,
                           char *notYetGoodString);
# 1273 "../../../../dist/public/security/cert.h"
char *
CERT_GetCertNicknameWithValidity(PLArenaPool *arena, CERTCertificate *cert,
                                 char *expiredString, char *notYetGoodString);





char *
CERT_DerNameToAscii(SECItem *dername);
# 1294 "../../../../dist/public/security/cert.h"
CERTCertificate *
CERT_FindMatchingCert(CERTCertDBHandle *handle, SECItem *derName,
                      CERTCertOwner owner, SECCertUsage usage,
                      PRBool preferTrusted, int64 validTime, PRBool validOnly);







void
CERT_DestroyGeneralName(CERTGeneralName *name);


void
CERT_DestroyGeneralNameList(CERTGeneralNameList *list);


CERTGeneralNameList *
CERT_CreateGeneralNameList(CERTGeneralName *name);


SECStatus
CERT_CompareGeneralNameLists(CERTGeneralNameList *a, CERTGeneralNameList *b);


void *
CERT_GetGeneralNameFromListByType(CERTGeneralNameList *list,
                                  CERTGeneralNameType type,
                                  PLArenaPool *arena);


void
CERT_AddGeneralNameToList(CERTGeneralNameList *list,
                          CERTGeneralNameType type,
                          void *data, SECItem *oid);


CERTGeneralNameList *
CERT_DupGeneralNameList(CERTGeneralNameList *list);


int
CERT_GetNamesLength(CERTGeneralName *names);
# 1348 "../../../../dist/public/security/cert.h"
void
CERT_LockDB(CERTCertDBHandle *handle);




void
CERT_UnlockDB(CERTCertDBHandle *handle);





CERTStatusConfig *
CERT_GetStatusConfig(CERTCertDBHandle *handle);







void
CERT_SetStatusConfig(CERTCertDBHandle *handle, CERTStatusConfig *config);







void
CERT_LockCertRefCount(CERTCertificate *cert);




void
CERT_UnlockCertRefCount(CERTCertificate *cert);







void
CERT_LockCertTrust(CERTCertificate *cert);




void
CERT_UnlockCertTrust(CERTCertificate *cert);
# 1410 "../../../../dist/public/security/cert.h"
extern SECItem *
CERT_SPKDigestValueForCert(PLArenaPool *arena, CERTCertificate *cert,
                           SECOidTag digestAlg, SECItem *fill);




extern SECStatus CERT_GetCertType(CERTCertificate *cert);
# 43 "p12e.c" 2
# 1 "../../../../dist/public/security/secpkcs7.h" 1
# 44 "p12e.c" 2
# 1 "../../../../dist/public/security/secasn1.h" 1
# 45 "../../../../dist/public/security/secasn1.h"
# 1 "/home/nisse/hack/mozilla/dist/include/nspr/plarena.h" 1
# 46 "../../../../dist/public/security/secasn1.h" 2

# 1 "../../../../dist/public/security/seccomon.h" 1
# 48 "../../../../dist/public/security/secasn1.h" 2
# 1 "../../../../dist/public/security/secasn1t.h" 1
# 49 "../../../../dist/public/security/secasn1.h" 2
# 62 "../../../../dist/public/security/secasn1.h"
extern SEC_ASN1DecoderContext *SEC_ASN1DecoderStart(PLArenaPool *pool,
                                                    void *dest,
                                                    const SEC_ASN1Template *t);


extern SECStatus SEC_ASN1DecoderUpdate(SEC_ASN1DecoderContext *cx,
                                       const char *buf,
                                       unsigned long len);

extern SECStatus SEC_ASN1DecoderFinish(SEC_ASN1DecoderContext *cx);

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(PLArenaPool *pool, void *dest,
                                const SEC_ASN1Template *t,
                                const char *buf, long len);

extern SECStatus SEC_ASN1DecodeItem(PLArenaPool *pool, void *dest,
                                    const SEC_ASN1Template *t,
                                    SECItem *item);




extern SEC_ASN1EncoderContext *SEC_ASN1EncoderStart(void *src,
                                                    const SEC_ASN1Template *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_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(void *src, const SEC_ASN1Template *t,
                                SEC_ASN1WriteProc output_proc,
                                void *output_arg);

extern SECItem * SEC_ASN1EncodeItem(PLArenaPool *pool, SECItem *dest,
                                    void *src, const SEC_ASN1Template *t);

extern SECItem * SEC_ASN1EncodeInteger(PLArenaPool *pool,
                                       SECItem *dest, long value);

extern SECItem * SEC_ASN1EncodeUnsignedInteger(PLArenaPool *pool,
                                               SECItem *dest,
                                               unsigned long value);

extern SECStatus SEC_ASN1DecodeInteger(SECItem *src,
                                       unsigned long *value);
# 151 "../../../../dist/public/security/secasn1.h"
extern int SEC_ASN1LengthLength (unsigned long len);



extern int SEC_ASN1EncodeLength(unsigned char *buf,int value);
# 168 "../../../../dist/public/security/secasn1.h"
extern const SEC_ASN1Template *
SEC_ASN1GetSubtemplate (const SEC_ASN1Template *inTemplate, void *thing,
                        PRBool encoding);
# 185 "../../../../dist/public/security/secasn1.h"
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[];




extern const SEC_ASN1Template SEC_SkipTemplate[];




extern const SEC_ASN1Template * NSS_Get_SEC_AnyTemplate (void *arg, PRBool enc);
extern const SEC_ASN1Template * NSS_Get_SEC_BMPStringTemplate (void *arg, PRBool enc);
extern const SEC_ASN1Template * NSS_Get_SEC_BitStringTemplate (void *arg, PRBool enc);
extern const SEC_ASN1Template * NSS_Get_SEC_GeneralizedTimeTemplate (void *arg, PRBool enc);
extern const SEC_ASN1Template * NSS_Get_SEC_IA5StringTemplate (void *arg, PRBool enc);
extern const SEC_ASN1Template * NSS_Get_SEC_IntegerTemplate (void *arg, PRBool enc);
extern const SEC_ASN1Template * NSS_Get_SEC_ObjectIDTemplate (void *arg, PRBool enc);
extern const SEC_ASN1Template * NSS_Get_SEC_OctetStringTemplate (void *arg, PRBool enc);
extern const SEC_ASN1Template * NSS_Get_SEC_UTCTimeTemplate (void *arg, PRBool enc);

extern const SEC_ASN1Template * NSS_Get_SEC_PointerToAnyTemplate (void *arg, PRBool enc);
extern const SEC_ASN1Template * NSS_Get_SEC_PointerToOctetStringTemplate (void *arg, PRBool enc);

extern const SEC_ASN1Template * NSS_Get_SEC_SetOfAnyTemplate (void *arg, PRBool enc);
# 45 "p12e.c" 2
# 1 "../../../../dist/public/security/secerr.h" 1
# 45 "../../../../dist/public/security/secerr.h"
typedef enum {
SEC_ERROR_IO = (-0x2000) + 0,
SEC_ERROR_LIBRARY_FAILURE = (-0x2000) + 1,
SEC_ERROR_BAD_DATA = (-0x2000) + 2,
SEC_ERROR_OUTPUT_LEN = (-0x2000) + 3,
SEC_ERROR_INPUT_LEN = (-0x2000) + 4,
SEC_ERROR_INVALID_ARGS = (-0x2000) + 5,
SEC_ERROR_INVALID_ALGORITHM = (-0x2000) + 6,
SEC_ERROR_INVALID_AVA = (-0x2000) + 7,
SEC_ERROR_INVALID_TIME = (-0x2000) + 8,
SEC_ERROR_BAD_DER = (-0x2000) + 9,
SEC_ERROR_BAD_SIGNATURE = (-0x2000) + 10,
SEC_ERROR_EXPIRED_CERTIFICATE = (-0x2000) + 11,
SEC_ERROR_REVOKED_CERTIFICATE = (-0x2000) + 12,
SEC_ERROR_UNKNOWN_ISSUER = (-0x2000) + 13,
SEC_ERROR_BAD_KEY = (-0x2000) + 14,
SEC_ERROR_BAD_PASSWORD = (-0x2000) + 15,
SEC_ERROR_RETRY_PASSWORD = (-0x2000) + 16,
SEC_ERROR_NO_NODELOCK = (-0x2000) + 17,
SEC_ERROR_BAD_DATABASE = (-0x2000) + 18,
SEC_ERROR_NO_MEMORY = (-0x2000) + 19,
SEC_ERROR_UNTRUSTED_ISSUER = (-0x2000) + 20,
SEC_ERROR_UNTRUSTED_CERT = (-0x2000) + 21,
SEC_ERROR_DUPLICATE_CERT = ((-0x2000) + 22),
SEC_ERROR_DUPLICATE_CERT_NAME = ((-0x2000) + 23),
SEC_ERROR_ADDING_CERT = ((-0x2000) + 24),
SEC_ERROR_FILING_KEY = ((-0x2000) + 25),
SEC_ERROR_NO_KEY = ((-0x2000) + 26),
SEC_ERROR_CERT_VALID = ((-0x2000) + 27),
SEC_ERROR_CERT_NOT_VALID = ((-0x2000) + 28),
SEC_ERROR_CERT_NO_RESPONSE = ((-0x2000) + 29),
SEC_ERROR_EXPIRED_ISSUER_CERTIFICATE = ((-0x2000) + 30),
SEC_ERROR_CRL_EXPIRED = ((-0x2000) + 31),
SEC_ERROR_CRL_BAD_SIGNATURE = ((-0x2000) + 32),
SEC_ERROR_CRL_INVALID = ((-0x2000) + 33),
SEC_ERROR_EXTENSION_VALUE_INVALID = ((-0x2000) + 34),
SEC_ERROR_EXTENSION_NOT_FOUND = ((-0x2000) + 35),
SEC_ERROR_CA_CERT_INVALID = ((-0x2000) + 36),
SEC_ERROR_PATH_LEN_CONSTRAINT_INVALID = ((-0x2000) + 37),
SEC_ERROR_CERT_USAGES_INVALID = ((-0x2000) + 38),
SEC_INTERNAL_ONLY = ((-0x2000) + 39),
SEC_ERROR_INVALID_KEY = ((-0x2000) + 40),
SEC_ERROR_UNKNOWN_CRITICAL_EXTENSION = ((-0x2000) + 41),
SEC_ERROR_OLD_CRL = ((-0x2000) + 42),
SEC_ERROR_NO_EMAIL_CERT = ((-0x2000) + 43),
SEC_ERROR_NO_RECIPIENT_CERTS_QUERY = ((-0x2000) + 44),
SEC_ERROR_NOT_A_RECIPIENT = ((-0x2000) + 45),
SEC_ERROR_PKCS7_KEYALG_MISMATCH = ((-0x2000) + 46),
SEC_ERROR_PKCS7_BAD_SIGNATURE = ((-0x2000) + 47),
SEC_ERROR_UNSUPPORTED_KEYALG = ((-0x2000) + 48),
SEC_ERROR_DECRYPTION_DISALLOWED = ((-0x2000) + 49),

XP_SEC_FORTEZZA_BAD_CARD = ((-0x2000) + 50),
XP_SEC_FORTEZZA_NO_CARD = ((-0x2000) + 51),
XP_SEC_FORTEZZA_NONE_SELECTED = ((-0x2000) + 52),
XP_SEC_FORTEZZA_MORE_INFO = ((-0x2000) + 53),
XP_SEC_FORTEZZA_PERSON_NOT_FOUND = ((-0x2000) + 54),
XP_SEC_FORTEZZA_NO_MORE_INFO = ((-0x2000) + 55),
XP_SEC_FORTEZZA_BAD_PIN = ((-0x2000) + 56),
XP_SEC_FORTEZZA_PERSON_ERROR = ((-0x2000) + 57),
SEC_ERROR_NO_KRL = ((-0x2000) + 58),
SEC_ERROR_KRL_EXPIRED = ((-0x2000) + 59),
SEC_ERROR_KRL_BAD_SIGNATURE = ((-0x2000) + 60),
SEC_ERROR_REVOKED_KEY = ((-0x2000) + 61),
SEC_ERROR_KRL_INVALID = ((-0x2000) + 62),
SEC_ERROR_NEED_RANDOM = ((-0x2000) + 63),
SEC_ERROR_NO_MODULE = ((-0x2000) + 64),
SEC_ERROR_NO_TOKEN = ((-0x2000) + 65),
SEC_ERROR_READ_ONLY = ((-0x2000) + 66),
SEC_ERROR_NO_SLOT_SELECTED = ((-0x2000) + 67),
SEC_ERROR_CERT_NICKNAME_COLLISION = ((-0x2000) + 68),
SEC_ERROR_KEY_NICKNAME_COLLISION = ((-0x2000) + 69),
SEC_ERROR_SAFE_NOT_CREATED = ((-0x2000) + 70),
SEC_ERROR_BAGGAGE_NOT_CREATED = ((-0x2000) + 71),
XP_JAVA_REMOVE_PRINCIPAL_ERROR = ((-0x2000) + 72),
XP_JAVA_DELETE_PRIVILEGE_ERROR = ((-0x2000) + 73),
XP_JAVA_CERT_NOT_EXISTS_ERROR = ((-0x2000) + 74),
SEC_ERROR_BAD_EXPORT_ALGORITHM = ((-0x2000) + 75),
SEC_ERROR_EXPORTING_CERTIFICATES = ((-0x2000) + 76),
SEC_ERROR_IMPORTING_CERTIFICATES = ((-0x2000) + 77),
SEC_ERROR_PKCS12_DECODING_PFX = ((-0x2000) + 78),
SEC_ERROR_PKCS12_INVALID_MAC = ((-0x2000) + 79),
SEC_ERROR_PKCS12_UNSUPPORTED_MAC_ALGORITHM = ((-0x2000) + 80),
SEC_ERROR_PKCS12_UNSUPPORTED_TRANSPORT_MODE = ((-0x2000) + 81),
SEC_ERROR_PKCS12_CORRUPT_PFX_STRUCTURE = ((-0x2000) + 82),
SEC_ERROR_PKCS12_UNSUPPORTED_PBE_ALGORITHM = ((-0x2000) + 83),
SEC_ERROR_PKCS12_UNSUPPORTED_VERSION = ((-0x2000) + 84),
SEC_ERROR_PKCS12_PRIVACY_PASSWORD_INCORRECT = ((-0x2000) + 85),
SEC_ERROR_PKCS12_CERT_COLLISION = ((-0x2000) + 86),
SEC_ERROR_USER_CANCELLED = ((-0x2000) + 87),
SEC_ERROR_PKCS12_DUPLICATE_DATA = ((-0x2000) + 88),
SEC_ERROR_MESSAGE_SEND_ABORTED = ((-0x2000) + 89),
SEC_ERROR_INADEQUATE_KEY_USAGE = ((-0x2000) + 90),
SEC_ERROR_INADEQUATE_CERT_TYPE = ((-0x2000) + 91),
SEC_ERROR_CERT_ADDR_MISMATCH = ((-0x2000) + 92),
SEC_ERROR_PKCS12_UNABLE_TO_IMPORT_KEY = ((-0x2000) + 93),
SEC_ERROR_PKCS12_IMPORTING_CERT_CHAIN = ((-0x2000) + 94),
SEC_ERROR_PKCS12_UNABLE_TO_LOCATE_OBJECT_BY_NAME = ((-0x2000) + 95),
SEC_ERROR_PKCS12_UNABLE_TO_EXPORT_KEY = ((-0x2000) + 96),
SEC_ERROR_PKCS12_UNABLE_TO_WRITE = ((-0x2000) + 97),
SEC_ERROR_PKCS12_UNABLE_TO_READ = ((-0x2000) + 98),
SEC_ERROR_PKCS12_KEY_DATABASE_NOT_INITIALIZED = ((-0x2000) + 99),
SEC_ERROR_KEYGEN_FAIL = ((-0x2000) + 100),
SEC_ERROR_INVALID_PASSWORD = ((-0x2000) + 101),
SEC_ERROR_RETRY_OLD_PASSWORD = ((-0x2000) + 102),
SEC_ERROR_BAD_NICKNAME = ((-0x2000) + 103),
SEC_ERROR_NOT_FORTEZZA_ISSUER = ((-0x2000) + 104),
SEC_ERROR_CANNOT_MOVE_SENSITIVE_KEY = ((-0x2000) + 105),
SEC_ERROR_JS_INVALID_MODULE_NAME = ((-0x2000) + 106),
SEC_ERROR_JS_INVALID_DLL = ((-0x2000) + 107),
SEC_ERROR_JS_ADD_MOD_FAILURE = ((-0x2000) + 108),
SEC_ERROR_JS_DEL_MOD_FAILURE = ((-0x2000) + 109),
SEC_ERROR_OLD_KRL = ((-0x2000) + 110),
SEC_ERROR_CKL_CONFLICT = ((-0x2000) + 111),
SEC_ERROR_CERT_NOT_IN_NAME_SPACE = ((-0x2000) + 112),
SEC_ERROR_KRL_NOT_YET_VALID = ((-0x2000) + 113),
SEC_ERROR_CRL_NOT_YET_VALID = ((-0x2000) + 114),
SEC_ERROR_UNKNOWN_CERT = ((-0x2000) + 115),
SEC_ERROR_UNKNOWN_SIGNER = ((-0x2000) + 116),
SEC_ERROR_CERT_BAD_ACCESS_LOCATION = ((-0x2000) + 117),
SEC_ERROR_OCSP_UNKNOWN_RESPONSE_TYPE = ((-0x2000) + 118),
SEC_ERROR_OCSP_BAD_HTTP_RESPONSE = ((-0x2000) + 119),
SEC_ERROR_OCSP_MALFORMED_REQUEST = ((-0x2000) + 120),
SEC_ERROR_OCSP_SERVER_ERROR = ((-0x2000) + 121),
SEC_ERROR_OCSP_TRY_SERVER_LATER = ((-0x2000) + 122),
SEC_ERROR_OCSP_REQUEST_NEEDS_SIG = ((-0x2000) + 123),
SEC_ERROR_OCSP_UNAUTHORIZED_REQUEST = ((-0x2000) + 124),
SEC_ERROR_OCSP_UNKNOWN_RESPONSE_STATUS = ((-0x2000) + 125),
SEC_ERROR_OCSP_UNKNOWN_CERT = ((-0x2000) + 126),
SEC_ERROR_OCSP_NOT_ENABLED = ((-0x2000) + 127),
SEC_ERROR_OCSP_NO_DEFAULT_RESPONDER = ((-0x2000) + 128),
SEC_ERROR_OCSP_MALFORMED_RESPONSE = ((-0x2000) + 129),
SEC_ERROR_OCSP_UNAUTHORIZED_RESPONSE = ((-0x2000) + 130),
SEC_ERROR_OCSP_FUTURE_RESPONSE = ((-0x2000) + 131),
SEC_ERROR_OCSP_OLD_RESPONSE = ((-0x2000) + 132),

SEC_ERROR_DIGEST_NOT_FOUND = ((-0x2000) + 133),
SEC_ERROR_UNSUPPORTED_MESSAGE_TYPE = ((-0x2000) + 134)

} SECErrorCodes;
# 46 "p12e.c" 2
# 1 "../../../../dist/public/security/pk11func.h" 1
# 38 "../../../../dist/public/security/pk11func.h"
# 1 "/home/nisse/hack/mozilla/dist/include/nspr/plarena.h" 1
# 39 "../../../../dist/public/security/pk11func.h" 2
# 1 "../../../../dist/public/security/seccomon.h" 1
# 40 "../../../../dist/public/security/pk11func.h" 2
# 1 "../../../../dist/public/security/secoidt.h" 1
# 41 "../../../../dist/public/security/pk11func.h" 2
# 1 "../../../../dist/public/security/secdert.h" 1
# 42 "../../../../dist/public/security/pk11func.h" 2
# 1 "../../../../dist/public/security/keyt.h" 1
# 43 "../../../../dist/public/security/pk11func.h" 2
# 1 "../../../../dist/public/security/certt.h" 1
# 44 "../../../../dist/public/security/pk11func.h" 2
# 1 "../../../../dist/public/security/pkcs11t.h" 1
# 45 "../../../../dist/public/security/pk11func.h" 2
# 1 "../../../../dist/public/security/secmodt.h" 1
# 46 "../../../../dist/public/security/pk11func.h" 2
# 1 "../../../../dist/public/security/seccomon.h" 1
# 47 "../../../../dist/public/security/pk11func.h" 2
# 1 "../../../../dist/public/security/pkcs7t.h" 1
# 48 "../../../../dist/public/security/pk11func.h" 2
# 1 "../../../../dist/public/security/cmsreclist.h" 1
# 41 "../../../../dist/public/security/cmsreclist.h"
struct NSSCMSRecipientStr {
    int riIndex;
    int subIndex;

    enum {RLIssuerSN=0, RLSubjKeyID=1} kind;
    union {
        CERTIssuerAndSN * issuerAndSN;
        SECItem * subjectKeyID;
    } id;


    CERTCertificate * cert;
    SECKEYPrivateKey * privkey;
    PK11SlotInfo * slot;
};

typedef struct NSSCMSRecipientStr NSSCMSRecipient;
# 49 "../../../../dist/public/security/pk11func.h" 2






PK11SlotList * PK11_NewSlotList(void);
void PK11_FreeSlotList(PK11SlotList *list);
SECStatus PK11_AddSlotToList(PK11SlotList *list,PK11SlotInfo *slot);
SECStatus PK11_DeleteSlotFromList(PK11SlotList *list,PK11SlotListElement *le);
PK11SlotListElement * PK11_GetFirstSafe(PK11SlotList *list);
PK11SlotListElement *PK11_GetNextSafe(PK11SlotList *list,
                                PK11SlotListElement *le, PRBool restart);
PK11SlotListElement *PK11_FindSlotElement(PK11SlotList *list,
                                                        PK11SlotInfo *slot);




PK11SlotInfo *PK11_ReferenceSlot(PK11SlotInfo *slot);
PK11SlotInfo *PK11_FindSlotByID(SECMODModuleID modID,CK_SLOT_ID slotID);
void PK11_FreeSlot(PK11SlotInfo *slot);
SECStatus PK11_DestroyObject(PK11SlotInfo *slot,CK_OBJECT_HANDLE object);
SECStatus PK11_DestroyTokenObject(PK11SlotInfo *slot,CK_OBJECT_HANDLE object);
CK_OBJECT_HANDLE PK11_CopyKey(PK11SlotInfo *slot, CK_OBJECT_HANDLE srcObject);
SECStatus PK11_ReadAttribute(PK11SlotInfo *slot, CK_OBJECT_HANDLE id,
         CK_ATTRIBUTE_TYPE type, PLArenaPool *arena, SECItem *result);
CK_ULONG PK11_ReadULongAttribute(PK11SlotInfo *slot, CK_OBJECT_HANDLE id,
         CK_ATTRIBUTE_TYPE type);
PK11SlotInfo *PK11_GetInternalKeySlot(void);
PK11SlotInfo *PK11_GetInternalSlot(void);
char * PK11_MakeString(PLArenaPool *arena,char *space,char *staticSring,
                                                                int stringLen);
int PK11_MapError(CK_RV error);
CK_SESSION_HANDLE PK11_GetRWSession(PK11SlotInfo *slot);
void PK11_RestoreROSession(PK11SlotInfo *slot,CK_SESSION_HANDLE rwsession);
PRBool PK11_RWSessionHasLock(PK11SlotInfo *slot,
                                         CK_SESSION_HANDLE session_handle);
PK11SlotInfo *PK11_NewSlotInfo(void);
SECStatus PK11_Logout(PK11SlotInfo *slot);
void PK11_LogoutAll(void);
void PK11_EnterSlotMonitor(PK11SlotInfo *);
void PK11_ExitSlotMonitor(PK11SlotInfo *);
void PK11_CleanKeyList(PK11SlotInfo *slot);






void PK11_SetSlotPWValues(PK11SlotInfo *slot,int askpw, int timeout);
void PK11_GetSlotPWValues(PK11SlotInfo *slot,int *askpw, int *timeout);
SECStatus PK11_CheckSSOPassword(PK11SlotInfo *slot, char *ssopw);
SECStatus PK11_CheckUserPassword(PK11SlotInfo *slot,char *pw);
SECStatus PK11_DoPassword(PK11SlotInfo *slot, PRBool loadCerts, void *wincx);
PRBool PK11_IsLoggedIn(PK11SlotInfo *slot, void *wincx);
SECStatus PK11_VerifyPW(PK11SlotInfo *slot,char *pw);
SECStatus PK11_InitPin(PK11SlotInfo *slot,char *ssopw, char *pk11_userpwd);
SECStatus PK11_ChangePW(PK11SlotInfo *slot,char *oldpw, char *newpw);
void PK11_HandlePasswordCheck(PK11SlotInfo *slot,void *wincx);
void PK11_SetPasswordFunc(PK11PasswordFunc func);
void PK11_SetVerifyPasswordFunc(PK11VerifyPasswordFunc func);
void PK11_SetIsLoggedInFunc(PK11IsLoggedInFunc func);
int PK11_GetMinimumPwdLength(PK11SlotInfo *slot);
SECStatus PK11_ResetToken(PK11SlotInfo *slot, char *sso_pwd);




SECStatus PK11_InitSlotLists(void);
void PK11_DestroySlotLists(void);
PK11SlotList *PK11_GetSlotList(CK_MECHANISM_TYPE type);
void PK11_LoadSlotList(PK11SlotInfo *slot, PK11PreSlotInfo *psi, int count);
void PK11_ClearSlotList(PK11SlotInfo *slot);





PRBool PK11_VerifyMechanism(PK11SlotInfo *slot,PK11SlotInfo *intern,
  CK_MECHANISM_TYPE mech, SECItem *data, SECItem *iv);
PRBool PK11_VerifySlotMechanisms(PK11SlotInfo *slot);
SECStatus pk11_CheckVerifyTest(PK11SlotInfo *slot);
SECStatus PK11_InitToken(PK11SlotInfo *slot, PRBool loadCerts);
SECStatus PK11_Authenticate(PK11SlotInfo *slot, PRBool loadCerts, void *wincx);
void PK11_InitSlot(SECMODModule *mod,CK_SLOT_ID slotID,PK11SlotInfo *slot);





PK11SlotInfo *PK11_FindSlotByName(char *name);
PK11SlotInfo *PK11_FindSlotBySerial(char *serial);
PRBool PK11_IsReadOnly(PK11SlotInfo *slot);
PRBool PK11_IsInternal(PK11SlotInfo *slot);
char * PK11_GetTokenName(PK11SlotInfo *slot);
char * PK11_GetSlotName(PK11SlotInfo *slot);
PRBool PK11_NeedLogin(PK11SlotInfo *slot);
PRBool PK11_IsFriendly(PK11SlotInfo *slot);
PRBool PK11_IsHW(PK11SlotInfo *slot);
PRBool PK11_NeedUserInit(PK11SlotInfo *slot);
int PK11_GetSlotSeries(PK11SlotInfo *slot);
int PK11_GetCurrentWrapIndex(PK11SlotInfo *slot);
unsigned long PK11_GetDefaultFlags(PK11SlotInfo *slot);
CK_SLOT_ID PK11_GetSlotID(PK11SlotInfo *slot);
SECMODModuleID PK11_GetModuleID(PK11SlotInfo *slot);
SECStatus PK11_GetSlotInfo(PK11SlotInfo *slot, CK_SLOT_INFO *info);
SECStatus PK11_GetTokenInfo(PK11SlotInfo *slot, CK_TOKEN_INFO *info);
PRBool PK11_IsDisabled(PK11SlotInfo *slot);
PRBool PK11_HasRootCerts(PK11SlotInfo *slot);
PK11DisableReasons PK11_GetDisabledReason(PK11SlotInfo *slot);




PRBool PK11_UserDisableSlot(PK11SlotInfo *slot);


PRBool PK11_UserEnableSlot(PK11SlotInfo *slot);

PRBool PK11_NeedPWInit(void);
PRBool PK11_NeedPWInitForSlot(PK11SlotInfo *slot);
PRBool PK11_TokenExists(CK_MECHANISM_TYPE);
SECStatus PK11_GetModInfo(SECMODModule *mod, CK_INFO *info);
PRBool PK11_IsFIPS(void);
SECMODModule *PK11_GetModule(PK11SlotInfo *slot);




PRBool PK11_IsPresent(PK11SlotInfo *slot);
PRBool PK11_DoesMechanism(PK11SlotInfo *slot, CK_MECHANISM_TYPE type);
PK11SlotList * PK11_GetAllTokens(CK_MECHANISM_TYPE type,PRBool needRW,
                                        PRBool loadCerts, void *wincx);
PK11SlotList * PK11_GetPrivateKeyTokens(CK_MECHANISM_TYPE type,
                                                PRBool needRW,void *wincx);
PK11SlotInfo *PK11_GetBestSlotMultiple(CK_MECHANISM_TYPE *type, int count,
                                                        void *wincx);
PK11SlotInfo *PK11_GetBestSlot(CK_MECHANISM_TYPE type, void *wincx);
CK_MECHANISM_TYPE PK11_GetBestWrapMechanism(PK11SlotInfo *slot);
int PK11_GetBestKeyLength(PK11SlotInfo *slot, CK_MECHANISM_TYPE type);




void PK11_AddMechanismEntry(CK_MECHANISM_TYPE type, CK_KEY_TYPE key,
                        CK_MECHANISM_TYPE keygen, int ivLen, int blocksize);
CK_MECHANISM_TYPE PK11_GetKeyType(CK_MECHANISM_TYPE type,unsigned long len);
CK_MECHANISM_TYPE PK11_GetKeyGen(CK_MECHANISM_TYPE type);
int PK11_GetBlockSize(CK_MECHANISM_TYPE type,SECItem *params);
int PK11_GetIVLength(CK_MECHANISM_TYPE type);
SECItem *PK11_ParamFromIV(CK_MECHANISM_TYPE type,SECItem *iv);
unsigned char *PK11_IVFromParam(CK_MECHANISM_TYPE type,SECItem *param,int *len);
SECItem * PK11_BlockData(SECItem *data,unsigned long size);


SECItem *PK11_ParamFromAlgid(SECAlgorithmID *algid);
SECItem *PK11_GenerateNewParam(CK_MECHANISM_TYPE, PK11SymKey *);
CK_MECHANISM_TYPE PK11_AlgtagToMechanism(SECOidTag algTag);
SECOidTag PK11_MechanismToAlgtag(CK_MECHANISM_TYPE type);
SECOidTag PK11_FortezzaMapSig(SECOidTag algTag);
SECStatus PK11_ParamToAlgid(SECOidTag algtag, SECItem *param,
                                   PLArenaPool *arena, SECAlgorithmID *algid);
SECStatus PK11_SeedRandom(PK11SlotInfo *,unsigned char *data,int len);
SECStatus PK11_RandomUpdate(void *data, size_t bytes);
SECStatus PK11_GenerateRandom(unsigned char *data,int len);
CK_RV PK11_MapPBEMechanismToCryptoMechanism(CK_MECHANISM_PTR pPBEMechanism,
                                            CK_MECHANISM_PTR pCryptoMechanism,
                                            SECItem *pbe_pwd, PRBool bad3DES);
CK_MECHANISM_TYPE PK11_GetPadMechanism(CK_MECHANISM_TYPE);




PK11SymKey *PK11_CreateSymKey(PK11SlotInfo *slot,
                                        CK_MECHANISM_TYPE type, void *wincx);
void PK11_FreeSymKey(PK11SymKey *key);
PK11SymKey *PK11_ReferenceSymKey(PK11SymKey *symKey);
PK11SymKey *PK11_ImportSymKey(PK11SlotInfo *slot, CK_MECHANISM_TYPE type,
    PK11Origin origin, CK_ATTRIBUTE_TYPE operation, SECItem *key,void *wincx);
PK11SymKey *PK11_SymKeyFromHandle(PK11SlotInfo *slot, PK11SymKey *parent,
    PK11Origin origin, CK_MECHANISM_TYPE type, CK_OBJECT_HANDLE keyID,
    PRBool owner, void *wincx);
PK11SymKey *PK11_GetWrapKey(PK11SlotInfo *slot, int wrap,
                              CK_MECHANISM_TYPE type,int series, void *wincx);
void PK11_SetWrapKey(PK11SlotInfo *slot, int wrap, PK11SymKey *wrapKey);
CK_MECHANISM_TYPE PK11_GetMechanism(PK11SymKey *symKey);
CK_OBJECT_HANDLE PK11_ImportPublicKey(PK11SlotInfo *slot,
                                SECKEYPublicKey *pubKey, PRBool isToken);
PK11SymKey *PK11_KeyGen(PK11SlotInfo *slot,CK_MECHANISM_TYPE type,
                                SECItem *param, int keySize,void *wincx);


PK11SymKey *PK11_GenDES3TokenKey(PK11SlotInfo *slot, SECItem *keyid, void *cx);

SECStatus PK11_PubWrapSymKey(CK_MECHANISM_TYPE type, SECKEYPublicKey *pubKey,
                                PK11SymKey *symKey, SECItem *wrappedKey);
SECStatus PK11_WrapSymKey(CK_MECHANISM_TYPE type, SECItem *params,
         PK11SymKey *wrappingKey, PK11SymKey *symKey, SECItem *wrappedKey);
PK11SymKey *PK11_Derive(PK11SymKey *baseKey, CK_MECHANISM_TYPE mechanism,
                        SECItem *param, CK_MECHANISM_TYPE target,
                        CK_ATTRIBUTE_TYPE operation, int keySize);
PK11SymKey *PK11_DeriveWithFlags( PK11SymKey *baseKey,
        CK_MECHANISM_TYPE derive, SECItem *param, CK_MECHANISM_TYPE target,
        CK_ATTRIBUTE_TYPE operation, int keySize, CK_FLAGS flags);
PK11SymKey *PK11_PubDerive( SECKEYPrivateKey *privKey,
 SECKEYPublicKey *pubKey, PRBool isSender, SECItem *randomA, SECItem *randomB,
 CK_MECHANISM_TYPE derive, CK_MECHANISM_TYPE target,
                 CK_ATTRIBUTE_TYPE operation, int keySize,void *wincx) ;
PK11SymKey *PK11_UnwrapSymKey(PK11SymKey *key,
        CK_MECHANISM_TYPE wraptype, SECItem *param, SECItem *wrapppedKey,
        CK_MECHANISM_TYPE target, CK_ATTRIBUTE_TYPE operation, int keySize);
PK11SymKey *PK11_UnwrapSymKeyWithFlags(PK11SymKey *wrappingKey,
        CK_MECHANISM_TYPE wrapType, SECItem *param, SECItem *wrappedKey,
        CK_MECHANISM_TYPE target, CK_ATTRIBUTE_TYPE operation, int keySize,
        CK_FLAGS flags);
PK11SymKey *PK11_PubUnwrapSymKey(SECKEYPrivateKey *key, SECItem *wrapppedKey,
         CK_MECHANISM_TYPE target, CK_ATTRIBUTE_TYPE operation, int keySize);
PK11SymKey *PK11_FindFixedKey(PK11SlotInfo *slot, CK_MECHANISM_TYPE type,
                                                SECItem *keyID, void *wincx);
SECStatus PK11_DeleteTokenPrivateKey(SECKEYPrivateKey *privKey);
SECStatus PK11_DeleteTokenCertAndKey(CERTCertificate *cert,void *wincx);


unsigned int PK11_GetKeyLength(PK11SymKey *key);



unsigned int PK11_GetKeyStrength(PK11SymKey *key,SECAlgorithmID *algid);
SECStatus PK11_ExtractKeyValue(PK11SymKey *symKey);
SECItem * __PK11_GetKeyData(PK11SymKey *symKey);
PK11SlotInfo * PK11_GetSlotFromKey(PK11SymKey *symKey);
void *PK11_GetWindow(PK11SymKey *symKey);
SECKEYPrivateKey *PK11_GenerateKeyPair(PK11SlotInfo *slot,
   CK_MECHANISM_TYPE type, void *param, SECKEYPublicKey **pubk,
                            PRBool isPerm, PRBool isSensitive, void *wincx);
SECKEYPrivateKey *PK11_MakePrivKey(PK11SlotInfo *slot, KeyType keyType,
                        PRBool isTemp, CK_OBJECT_HANDLE privID, void *wincx);
SECKEYPrivateKey * PK11_FindPrivateKeyFromCert(PK11SlotInfo *slot,
                                        CERTCertificate *cert, void *wincx);
SECKEYPrivateKey * PK11_FindKeyByAnyCert(CERTCertificate *cert, void *wincx);
SECKEYPrivateKey * PK11_FindKeyByKeyID(PK11SlotInfo *slot, SECItem *keyID,
                                       void *wincx);
CK_OBJECT_HANDLE PK11_FindObjectForCert(CERTCertificate *cert,
                                        void *wincx, PK11SlotInfo **pSlot);
int PK11_GetPrivateModulusLen(SECKEYPrivateKey *key);
SECStatus PK11_PubDecryptRaw(SECKEYPrivateKey *key, unsigned char *data,
   unsigned *outLen, unsigned int maxLen, unsigned char *enc, unsigned encLen);

SECStatus PK11_PubEncryptRaw(SECKEYPublicKey *key, unsigned char *enc,
                unsigned char *data, unsigned dataLen, void *wincx);
SECStatus PK11_ImportPrivateKeyInfo(PK11SlotInfo *slot,
                SECKEYPrivateKeyInfo *pki, SECItem *nickname,
                SECItem *publicValue, PRBool isPerm, PRBool isPrivate,
                unsigned int usage, void *wincx);
SECStatus PK11_ImportDERPrivateKeyInfo(PK11SlotInfo *slot,
                SECItem *derPKI, SECItem *nickname,
                SECItem *publicValue, PRBool isPerm, PRBool isPrivate,
                unsigned int usage, void *wincx);
SECStatus PK11_ImportEncryptedPrivateKeyInfo(PK11SlotInfo *slot,
                SECKEYEncryptedPrivateKeyInfo *epki, SECItem *pwitem,
                SECItem *nickname, SECItem *publicValue, PRBool isPerm,
                PRBool isPrivate, KeyType type,
                unsigned int usage, void *wincx);
SECKEYPrivateKeyInfo *PK11_ExportPrivateKeyInfo(
                CERTCertificate *cert, void *wincx);
SECKEYEncryptedPrivateKeyInfo *PK11_ExportEncryptedPrivateKeyInfo(
                PK11SlotInfo *slot, SECOidTag algTag, SECItem *pwitem,
                CERTCertificate *cert, int iteration, void *wincx);
SECKEYPrivateKey *PK11_FindKeyByDERCert(PK11SlotInfo *slot,
                                        CERTCertificate *cert, void *wincx);
SECKEYPublicKey *PK11_MakeKEAPubKey(unsigned char *data, int length);
SECStatus PK11_DigestKey(PK11Context *context, PK11SymKey *key);
PRBool PK11_VerifyKeyOK(PK11SymKey *key);
SECKEYPrivateKey *PK11_UnwrapPrivKey(PK11SlotInfo *slot,
                PK11SymKey *wrappingKey, CK_MECHANISM_TYPE wrapType,
                SECItem *param, SECItem *wrappedKey, SECItem *label,
                SECItem *publicValue, PRBool token, PRBool sensitive,
                CK_KEY_TYPE keyType, CK_ATTRIBUTE_TYPE *usage, int usageCount,
                void *wincx);
SECStatus PK11_WrapPrivKey(PK11SlotInfo *slot, PK11SymKey *wrappingKey,
                           SECKEYPrivateKey *privKey, CK_MECHANISM_TYPE wrapType,
                           SECItem *param, SECItem *wrappedKey, void *wincx);
PK11SymKey * pk11_CopyToSlot(PK11SlotInfo *slot,CK_MECHANISM_TYPE type,
                        CK_ATTRIBUTE_TYPE operation, PK11SymKey *symKey);
SECItem *PK11_GetKeyIDFromCert(CERTCertificate *cert, void *wincx);
SECItem * PK11_GetKeyIDFromPrivateKey(SECKEYPrivateKey *key, void *wincx);
SECItem* PK11_DEREncodePublicKey(SECKEYPublicKey *pubk);
PK11SymKey* PK11_CopySymKeyForSigning(PK11SymKey *originalKey,
        CK_MECHANISM_TYPE mech);
SECKEYPrivateKeyList* PK11_ListPrivateKeysInSlot(PK11SlotInfo *slot);




SECItem *PK11_MakeIDFromPubKey(SECItem *pubKeyData);
CERTCertificate *PK11_GetCertFromPrivateKey(SECKEYPrivateKey *privKey);
SECStatus PK11_TraverseSlotCerts(
     SECStatus(* callback)(CERTCertificate*,SECItem *,void *),
                                                void *arg, void *wincx);
SECStatus PK11_TraversePrivateKeysInSlot( PK11SlotInfo *slot,
    SECStatus(* callback)(SECKEYPrivateKey*, void*), void *arg);
CERTCertificate * PK11_FindCertFromNickname(char *nickname, void *wincx);
CERTCertList * PK11_FindCertsFromNickname(char *nickname, void *wincx);
SECKEYPrivateKey * PK11_FindPrivateKeyFromNickname(char *nickname, void *wincx);
PK11SlotInfo *PK11_ImportCertForKey(CERTCertificate *cert, char *nickname,
                                                                void *wincx);
PK11SlotInfo *PK11_ImportDERCertForKey(SECItem *derCert, char *nickname,
                                                                void *wincx);
CK_OBJECT_HANDLE * PK11_FindObjectsFromNickname(char *nickname,
        PK11SlotInfo **slotptr, CK_OBJECT_CLASS objclass, int *returnCount,
                                                                void *wincx);
PK11SlotInfo *PK11_KeyForCertExists(CERTCertificate *cert,
                                        CK_OBJECT_HANDLE *keyPtr, void *wincx);
PK11SlotInfo *PK11_KeyForDERCertExists(SECItem *derCert,
                                        CK_OBJECT_HANDLE *keyPtr, void *wincx);
CK_OBJECT_HANDLE PK11_MatchItem(PK11SlotInfo *slot,CK_OBJECT_HANDLE peer,
                                                CK_OBJECT_CLASS o_class);
CERTCertificate * PK11_FindCertByIssuerAndSN(PK11SlotInfo **slot,
                                        CERTIssuerAndSN *sn, void *wincx);
CERTCertificate * PK11_FindCertAndKeyByRecipientList(PK11SlotInfo **slot,
        SEC_PKCS7RecipientInfo **array, SEC_PKCS7RecipientInfo **rip,
                                SECKEYPrivateKey**privKey, void *wincx);
int PK11_FindCertAndKeyByRecipientListNew(NSSCMSRecipient **recipientlist,
                                void *wincx);
CK_BBOOL PK11_HasAttributeSet( PK11SlotInfo *slot,
                               CK_OBJECT_HANDLE id,
                               CK_ATTRIBUTE_TYPE type );
CK_RV PK11_GetAttributes(PLArenaPool *arena,PK11SlotInfo *slot,
                         CK_OBJECT_HANDLE obj,CK_ATTRIBUTE *attr, int count);
int PK11_NumberCertsForCertSubject(CERTCertificate *cert);
SECStatus PK11_TraverseCertsForSubject(CERTCertificate *cert,
        SECStatus(*callback)(CERTCertificate *, void *), void *arg);
SECStatus PK11_TraverseCertsForSubjectInSlot(CERTCertificate *cert,
        PK11SlotInfo *slot, SECStatus(*callback)(CERTCertificate *, void *),
        void *arg);
CERTCertificate *PK11_FindCertFromDERCert(PK11SlotInfo *slot,
                                          CERTCertificate *cert, void *wincx);
CERTCertificate *PK11_FindCertFromDERSubjectAndNickname(
                                        PK11SlotInfo *slot,
                                        CERTCertificate *cert, char *nickname,
                                        void *wincx);
SECStatus PK11_ImportCertForKeyToSlot(PK11SlotInfo *slot, CERTCertificate *cert,
                                        char *nickname, PRBool addUsage,
                                        void *wincx);
CERTCertificate *PK11_FindBestKEAMatch(CERTCertificate *serverCert,void *wincx);
SECStatus PK11_GetKEAMatchedCerts(PK11SlotInfo *slot1,
   PK11SlotInfo *slot2, CERTCertificate **cert1, CERTCertificate **cert2);
PRBool PK11_FortezzaHasKEA(CERTCertificate *cert);
CK_OBJECT_HANDLE PK11_FindCertInSlot(PK11SlotInfo *slot, CERTCertificate *cert,
                                     void *wincx);
SECStatus PK11_TraverseCertsForNicknameInSlot(SECItem *nickname,
        PK11SlotInfo *slot, SECStatus(*callback)(CERTCertificate *, void *),
        void *arg);
SECStatus PK11_TraverseCertsInSlot(PK11SlotInfo *slot,
       SECStatus(* callback)(CERTCertificate*, void *), void *arg);
CERTCertList *
PK11_ListCerts(PK11CertListType type, void *pwarg);
CERTCertList *
PK11_ListCertsInSlot(PK11SlotInfo *slot);





int PK11_SignatureLen(SECKEYPrivateKey *key);
PK11SlotInfo * PK11_GetSlotFromPrivateKey(SECKEYPrivateKey *key);
SECStatus PK11_Sign(SECKEYPrivateKey *key, SECItem *sig, SECItem *hash);
SECStatus PK11_VerifyRecover(SECKEYPublicKey *key, SECItem *sig,
                                                 SECItem *dsig, void * wincx);
SECStatus PK11_Verify(SECKEYPublicKey *key, SECItem *sig,
                                                SECItem *hash, void *wincx);






void PK11_DestroyContext(PK11Context *context, PRBool freeit);
PK11Context * __PK11_CreateContextByRawKey(PK11SlotInfo *slot,
    CK_MECHANISM_TYPE type, PK11Origin origin, CK_ATTRIBUTE_TYPE operation,
                                SECItem *key, SECItem *param, void *wincx);
PK11Context *PK11_CreateContextBySymKey(CK_MECHANISM_TYPE type,
        CK_ATTRIBUTE_TYPE operation, PK11SymKey *symKey, SECItem *param);
PK11Context *PK11_CreateDigestContext(SECOidTag hashAlg);
PK11Context *PK11_CloneContext(PK11Context *old);
SECStatus PK11_DigestBegin(PK11Context *cx);
SECStatus PK11_HashBuf(SECOidTag hashAlg, unsigned char *out, unsigned char *in,
                                        int32 len);
SECStatus PK11_DigestOp(PK11Context *context, const unsigned char *in,
                        unsigned len);
SECStatus PK11_CipherOp(PK11Context *context, unsigned char * out, int *outlen,
                                int maxout, unsigned char *in, int inlen);
SECStatus PK11_Finalize(PK11Context *context);
SECStatus PK11_DigestFinal(PK11Context *context, unsigned char *data,
                                unsigned int *outLen, unsigned int length);
PRBool PK11_HashOK(SECOidTag hashAlg);
SECStatus PK11_SaveContext(PK11Context *cx,unsigned char *save,
                                                int *len, int saveLength);
SECStatus PK11_RestoreContext(PK11Context *cx,unsigned char *save,int len);
SECStatus PK11_GenerateFortezzaIV(PK11SymKey *symKey,unsigned char *iv,int len);
SECStatus PK11_ReadSlotCerts(PK11SlotInfo *slot);
void PK11_FreeSlotCerts(PK11SlotInfo *slot);
void PK11_SetFortezzaHack(PK11SymKey *symKey) ;
# 463 "../../../../dist/public/security/pk11func.h"
SECItem *
PK11_CreatePBEParams(SECItem *salt, SECItem *pwd, unsigned int iterations);


void PK11_DestroyPBEParams(SECItem *params);

SECAlgorithmID *
PK11_CreatePBEAlgorithmID(SECOidTag algorithm, int iteration, SECItem *salt);
PK11SymKey *
PK11_PBEKeyGen(PK11SlotInfo *slot, SECAlgorithmID *algid, SECItem *pwitem,
               PRBool faulty3DES, void *wincx);
SECItem *
PK11_GetPBEIV(SECAlgorithmID *algid, SECItem *pwitem);




SECItem *
PK11GetLowLevelKeyIDForCert(PK11SlotInfo *slot,
                                        CERTCertificate *cert, void *pwarg);
SECItem *
PK11GetLowLevelKeyIDForPrivateKey(SECKEYPrivateKey *key);
# 47 "p12e.c" 2
# 1 "p12plcy.h" 1
# 36 "p12plcy.h"
# 1 "../../../../dist/public/security/secoid.h" 1
# 37 "p12plcy.h" 2
# 1 "../../../../dist/public/security/ciferfam.h" 1
# 38 "p12plcy.h" 2


extern PRBool SEC_PKCS12DecryptionAllowed(SECAlgorithmID *algid);


extern PRBool SEC_PKCS12IsEncryptionAllowed(void);


extern SECOidTag SEC_PKCS12GetPreferredEncryptionAlgorithm(void);


extern SECOidTag SEC_PKCS12GetStrongestAllowedAlgorithm(void);


extern SECStatus SEC_PKCS12EnableCipher(long which, int on);


extern SECStatus SEC_PKCS12SetPreferredCipher(long which, int on);
# 48 "p12e.c" 2
# 1 "p12local.h" 1
# 38 "p12local.h"
# 1 "/home/nisse/hack/mozilla/dist/include/nspr/plarena.h" 1
# 39 "p12local.h" 2
# 1 "../../../../dist/public/security/secoidt.h" 1
# 40 "p12local.h" 2
# 1 "../../../../dist/public/security/secasn1.h" 1
# 41 "p12local.h" 2
# 1 "../../../../dist/public/security/secder.h" 1
# 44 "../../../../dist/public/security/secder.h"
# 1 "/usr/include/time.h" 1 3
# 28 "/usr/include/time.h" 3
# 1 "/usr/include/features.h" 1 3
# 29 "/usr/include/time.h" 2 3
# 38 "/usr/include/time.h" 3
# 1 "/usr/local/lib/gcc-lib/sparc-unknown-linux-gnu/3.0.1/include/stddef.h" 1 3
# 39 "/usr/include/time.h" 2 3



# 1 "/usr/include/bits/time.h" 1 3
# 43 "/usr/include/time.h" 2 3
# 95 "/usr/include/time.h" 3
struct tm
{
  int tm_sec;
  int tm_min;
  int tm_hour;
  int tm_mday;
  int tm_mon;
  int tm_year;
  int tm_wday;
  int tm_yday;
  int tm_isdst;


  long int tm_gmtoff;
  __const char *tm_zone;




};




extern clock_t clock (void) ;


extern time_t time (time_t *__timer) ;


extern double difftime (time_t __time1, time_t __time0)
     __attribute__ ((__const__));


extern time_t mktime (struct tm *__tp) ;





extern size_t strftime (char *__restrict __s, size_t __maxsize, __const char *__restrict __format, __const struct tm *__restrict __tp) ;






extern char *strptime (__const char *__s, __const char *__fmt, struct tm *__tp) ;






extern struct tm *gmtime (__const time_t *__timer) ;



extern struct tm *localtime (__const time_t *__timer) ;




extern struct tm *__gmtime_r (__const time_t *__restrict __timer, struct tm *__restrict __tp) ;

extern struct tm *gmtime_r (__const time_t *__restrict __timer, struct tm *__restrict __tp) ;




extern struct tm *localtime_r (__const time_t *__restrict __timer, struct tm *__restrict __tp) ;





extern char *asctime (__const struct tm *__tp) ;


extern char *ctime (__const time_t *__timer) ;






extern char *asctime_r (__const struct tm *__restrict __tp, char *__restrict __buf) ;



extern char *ctime_r (__const time_t *__restrict __timer, char *__restrict __buf) ;





extern char *__tzname[2];
extern int __daylight;
extern long int __timezone;




extern char *tzname[2];



extern void tzset (void) ;



extern int daylight;
extern long int timezone;
# 228 "/usr/include/time.h" 3
extern time_t timegm (struct tm *__tp) ;


extern time_t timelocal (struct tm *__tp) ;


extern int dysize (int __year) ;
# 45 "../../../../dist/public/security/secder.h" 2
# 1 "/home/nisse/hack/mozilla/dist/include/nspr/plarena.h" 1
# 46 "../../../../dist/public/security/secder.h" 2
# 1 "/home/nisse/hack/mozilla/dist/include/nspr/prlong.h" 1
# 47 "../../../../dist/public/security/secder.h" 2

# 1 "../../../../dist/public/security/seccomon.h" 1
# 49 "../../../../dist/public/security/secder.h" 2
# 1 "../../../../dist/public/security/secdert.h" 1
# 50 "../../../../dist/public/security/secder.h" 2
# 69 "../../../../dist/public/security/secder.h"
extern SECStatus DER_Decode(PLArenaPool *arena, void *dest, DERTemplate *t,
                           SECItem *src);
# 80 "../../../../dist/public/security/secder.h"
extern SECStatus DER_Encode(PLArenaPool *arena, SECItem *dest, DERTemplate *t,
                           void *src);

extern SECStatus DER_Lengths(SECItem *item, int *header_len_p, uint32 *contents_len_p);
# 94 "../../../../dist/public/security/secder.h"
extern unsigned char *DER_StoreHeader(unsigned char *to, unsigned int code,
                                      uint32 encodingLen);




extern int DER_LengthLength(uint32 len);





extern SECStatus DER_SetInteger(PLArenaPool *arena, SECItem *dst, int32 src);





extern SECStatus DER_SetUInteger(PLArenaPool *arena, SECItem *dst, uint32 src);






extern long DER_GetInteger(SECItem *src);






extern unsigned long DER_GetUInteger(SECItem *src);
# 135 "../../../../dist/public/security/secder.h"
extern SECStatus DER_TimeToUTCTime(SECItem *result, int64 time);







extern SECStatus DER_AsciiToTime(int64 *result, char *string);




extern SECStatus DER_UTCTimeToTime(int64 *result, SECItem *time);






extern char *DER_UTCTimeToAscii(SECItem *utcTime);







extern char *DER_UTCDayToAscii(SECItem *utctime);




extern SECStatus DER_TimeToGeneralizedTime(SECItem *dst, int64 gmttime);






extern SECStatus DER_GeneralizedTimeToTime(int64 *dst, SECItem *time);





extern char *CERT_UTCTime2FormattedAscii (int64 utcTime, char *format);






extern char *CERT_GenTime2FormattedAscii (int64 genTime, char *format);
# 42 "p12local.h" 2
# 1 "../../../../dist/public/security/certt.h" 1
# 43 "p12local.h" 2
# 1 "../../../../dist/public/security/secpkcs7.h" 1
# 44 "p12local.h" 2
# 1 "pkcs12.h" 1
# 38 "pkcs12.h"
# 1 "pkcs12t.h" 1
# 37 "pkcs12t.h"
# 1 "../../../../dist/public/security/seccomon.h" 1
# 38 "pkcs12t.h" 2
# 1 "../../../../dist/public/security/secoid.h" 1
# 39 "pkcs12t.h" 2
# 1 "../../../../dist/public/security/cert.h" 1
# 40 "pkcs12t.h" 2
# 1 "../../../../dist/public/security/key.h" 1
# 41 "pkcs12t.h" 2
# 1 "/home/nisse/hack/mozilla/dist/include/nspr/plarena.h" 1
# 42 "pkcs12t.h" 2
# 1 "../../../../dist/public/security/secpkcs7.h" 1
# 43 "pkcs12t.h" 2
# 1 "../../../../dist/public/security/secdig.h" 1
# 44 "pkcs12t.h" 2


typedef struct SEC_PKCS12PFXItemStr SEC_PKCS12PFXItem;
typedef struct SEC_PKCS12MacDataStr SEC_PKCS12MacData;
typedef struct SEC_PKCS12AuthenticatedSafeStr SEC_PKCS12AuthenticatedSafe;
typedef struct SEC_PKCS12BaggageItemStr SEC_PKCS12BaggageItem;
typedef struct SEC_PKCS12BaggageStr SEC_PKCS12Baggage;
typedef struct SEC_PKCS12Baggage_OLDStr SEC_PKCS12Baggage_OLD;
typedef struct SEC_PKCS12ESPVKItemStr SEC_PKCS12ESPVKItem;
typedef struct SEC_PKCS12PVKSupportingDataStr SEC_PKCS12PVKSupportingData;
typedef struct SEC_PKCS12PVKAdditionalDataStr SEC_PKCS12PVKAdditionalData;
typedef struct SEC_PKCS12SafeContentsStr SEC_PKCS12SafeContents;
typedef struct SEC_PKCS12SafeBagStr SEC_PKCS12SafeBag;
typedef struct SEC_PKCS12PrivateKeyStr SEC_PKCS12PrivateKey;
typedef struct SEC_PKCS12PrivateKeyBagStr SEC_PKCS12PrivateKeyBag;
typedef struct SEC_PKCS12CertAndCRLBagStr SEC_PKCS12CertAndCRLBag;
typedef struct SEC_PKCS12CertAndCRLStr SEC_PKCS12CertAndCRL;
typedef struct SEC_PKCS12X509CertCRLStr SEC_PKCS12X509CertCRL;
typedef struct SEC_PKCS12SDSICertStr SEC_PKCS12SDSICert;
typedef struct SEC_PKCS12SecretStr SEC_PKCS12Secret;
typedef struct SEC_PKCS12SecretAdditionalStr SEC_PKCS12SecretAdditional;
typedef struct SEC_PKCS12SecretItemStr SEC_PKCS12SecretItem;
typedef struct SEC_PKCS12SecretBagStr SEC_PKCS12SecretBag;

typedef SECItem *(* SEC_PKCS12PasswordFunc)(SECItem *args);




struct SEC_PKCS12BaggageStr
{
    PLArenaPool *poolp;
    SEC_PKCS12BaggageItem **bags;

    int luggage_size;
};




struct SEC_PKCS12PVKAdditionalDataStr
{
    PLArenaPool *poolp;
    SECOidData *pvkAdditionalTypeTag;
    SECItem pvkAdditionalType;
    SECItem pvkAdditionalContent;
};




struct SEC_PKCS12PVKSupportingDataStr
{
    PLArenaPool *poolp;
    SGNDigestInfo **assocCerts;
    SECItem regenerable;
    SECItem nickname;
    SEC_PKCS12PVKAdditionalData pvkAdditional;
    SECItem pvkAdditionalDER;

    SECItem uniNickName;

    int nThumbs;
};




struct SEC_PKCS12ESPVKItemStr
{
    PLArenaPool *poolp;
    SECOidData *espvkTag;
    SECItem espvkOID;
    SEC_PKCS12PVKSupportingData espvkData;
    union
    {
        SECKEYEncryptedPrivateKeyInfo *pkcs8KeyShroud;
    } espvkCipherText;

    PRBool duplicate;
    PRBool problem_cert;
    PRBool single_cert;
    int nCerts;
    SECItem derCert;
};




struct SEC_PKCS12SafeBagStr
{
    PLArenaPool *poolp;
    SECOidData *safeBagTypeTag;
    SECItem safeBagType;
    union
    {
        SEC_PKCS12PrivateKeyBag *keyBag;
        SEC_PKCS12CertAndCRLBag *certAndCRLBag;
        SEC_PKCS12SecretBag *secretBag;
    } safeContent;

    SECItem derSafeContent;
    SECItem safeBagName;

    SECItem uniSafeBagName;
};




struct SEC_PKCS12SafeContentsStr
{
    PLArenaPool *poolp;
    SEC_PKCS12SafeBag **contents;


    int safe_size;
    PRBool old;
    PRBool swapUnicode;
    PRBool possibleSwapUnicode;
};




struct SEC_PKCS12PrivateKeyStr
{
    PLArenaPool *poolp;
    SEC_PKCS12PVKSupportingData pvkData;
    SECKEYPrivateKeyInfo pkcs8data;

    PRBool duplicate;
    PRBool problem_cert;
    PRBool single_cert;
    int nCerts;
    SECItem derCert;
};




struct SEC_PKCS12PrivateKeyBagStr
{
    PLArenaPool *poolp;
    SEC_PKCS12PrivateKey **privateKeys;

    int bag_size;
};




struct SEC_PKCS12CertAndCRLStr
{
    PLArenaPool *poolp;
    SECOidData *BagTypeTag;
    SECItem BagID;
    union
    {
        SEC_PKCS12X509CertCRL *x509;
        SEC_PKCS12SDSICert *sdsi;
    } value;

    SECItem derValue;
    SECItem nickname;
    PRBool duplicate;
};





struct SEC_PKCS12X509CertCRLStr
{
    PLArenaPool *poolp;
    SEC_PKCS7ContentInfo certOrCRL;
    SGNDigestInfo thumbprint;

    SECItem *derLeafCert;
};





struct SEC_PKCS12SDSICertStr
{
    PLArenaPool *poolp;
    SECItem value;
    SGNDigestInfo thumbprint;
};


struct SEC_PKCS12CertAndCRLBagStr
{
    PLArenaPool *poolp;
    SEC_PKCS12CertAndCRL **certAndCRLs;

    int bag_size;
};




struct SEC_PKCS12SecretAdditionalStr
{
    PLArenaPool *poolp;
    SECOidData *secretTypeTag;
    SECItem secretAdditionalType;
    SECItem secretAdditionalContent;
};




struct SEC_PKCS12SecretStr
{
    PLArenaPool *poolp;
    SECItem secretName;
    SECItem value;
    SEC_PKCS12SecretAdditional secretAdditional;

    SECItem uniSecretName;
};

struct SEC_PKCS12SecretItemStr
{
    PLArenaPool *poolp;
    SEC_PKCS12Secret secret;
    SEC_PKCS12SafeBag subFolder;
};



struct SEC_PKCS12SecretBagStr
{
    PLArenaPool *poolp;
    SEC_PKCS12SecretItem **secrets;

    int bag_size;
};

struct SEC_PKCS12MacDataStr
{
    SGNDigestInfo safeMac;
    SECItem macSalt;
};


struct SEC_PKCS12PFXItemStr
{
    PLArenaPool *poolp;
    SEC_PKCS12MacData macData;
    SEC_PKCS7ContentInfo authSafe;


    PRBool old;
    SGNDigestInfo old_safeMac;
    SECItem old_macSalt;


    PRBool swapUnicode;
};

struct SEC_PKCS12BaggageItemStr {
    PLArenaPool *poolp;
    SEC_PKCS12ESPVKItem **espvks;
    SEC_PKCS12SafeBag **unencSecrets;

    int nEspvks;
    int nSecrets;
};


struct SEC_PKCS12Baggage_OLDStr
{
    PLArenaPool *poolp;
    SEC_PKCS12ESPVKItem **espvks;

    int luggage_size;
};


struct SEC_PKCS12AuthenticatedSafeStr
{
    PLArenaPool *poolp;
    SECItem version;
    SECOidData *transportTypeTag;
    SECItem transportMode;
    SECItem privacySalt;
    SEC_PKCS12Baggage baggage;
    SEC_PKCS7ContentInfo *safe;


    PRBool old;
    PRBool emptySafe;
    SEC_PKCS12Baggage_OLD old_baggage;
    SEC_PKCS7ContentInfo old_safe;
    PRBool swapUnicode;
};





extern const SEC_ASN1Template SEC_PKCS12PFXItemTemplate_OLD[];
extern const SEC_ASN1Template SEC_PKCS12AuthenticatedSafeTemplate_OLD[];
extern const SEC_ASN1Template SEC_PKCS12BaggageTemplate_OLD[];
extern const SEC_ASN1Template SEC_PKCS12PFXItemTemplate[];
extern const SEC_ASN1Template SEC_PKCS12MacDataTemplate[];
extern const SEC_ASN1Template SEC_PKCS12AuthenticatedSafeTemplate[];
extern const SEC_ASN1Template SEC_PKCS12BaggageTemplate[];
extern const SEC_ASN1Template SEC_PKCS12ESPVKItemTemplate[];
extern const SEC_ASN1Template SEC_PKCS12PVKSupportingDataTemplate[];
extern const SEC_ASN1Template SEC_PKCS12PVKAdditionalTemplate[];
extern const SEC_ASN1Template SEC_PKCS12SafeContentsTemplate_OLD[];
extern const SEC_ASN1Template SEC_PKCS12SafeContentsTemplate[];
extern const SEC_ASN1Template SEC_PKCS12SafeBagTemplate[];
extern const SEC_ASN1Template SEC_PKCS12PrivateKeyTemplate[];
extern const SEC_ASN1Template SEC_PKCS12PrivateKeyBagTemplate[];
extern const SEC_ASN1Template SEC_PKCS12CertAndCRLTemplate[];
extern const SEC_ASN1Template SEC_PKCS12CertAndCRLBagTemplate[];
extern const SEC_ASN1Template SEC_PKCS12X509CertCRLTemplate_OLD[];
extern const SEC_ASN1Template SEC_PKCS12X509CertCRLTemplate[];
extern const SEC_ASN1Template SEC_PKCS12SDSICertTemplate[];
extern const SEC_ASN1Template SEC_PKCS12SecretBagTemplate[];
extern const SEC_ASN1Template SEC_PKCS12SecretTemplate[];
extern const SEC_ASN1Template SEC_PKCS12SecretItemTemplate[];
extern const SEC_ASN1Template SEC_PKCS12SecretAdditionalTemplate[];
extern const SEC_ASN1Template SGN_DigestInfoTemplate[];
extern const SEC_ASN1Template SEC_PointerToPKCS12KeyBagTemplate[];
extern const SEC_ASN1Template SEC_PointerToPKCS12CertAndCRLBagTemplate[];
extern const SEC_ASN1Template SEC_PointerToPKCS12CertAndCRLBagTemplate_OLD[];
extern const SEC_ASN1Template SEC_PointerToPKCS12SecretBagTemplate[];
extern const SEC_ASN1Template SEC_PointerToPKCS12X509CertCRLTemplate_OLD[];
extern const SEC_ASN1Template SEC_PointerToPKCS12X509CertCRLTemplate[];
extern const SEC_ASN1Template SEC_PointerToPKCS12SDSICertTemplate[];
extern const SEC_ASN1Template SEC_PKCS12CodedSafeBagTemplate[];
extern const SEC_ASN1Template SEC_PKCS12CodedCertBagTemplate[];
extern const SEC_ASN1Template SEC_PKCS12CodedCertAndCRLBagTemplate[];
extern const SEC_ASN1Template SEC_PKCS12PVKSupportingDataTemplate_OLD[];
extern const SEC_ASN1Template SEC_PKCS12ESPVKItemTemplate_OLD[];
# 39 "pkcs12.h" 2
# 1 "p12.h" 1
# 40 "pkcs12.h" 2

typedef SECItem * (* SEC_PKCS12GetPassword)(void *arg);
# 57 "pkcs12.h"
SECStatus
SEC_PKCS12PutPFX(SECItem *der_pfx, SECItem *pwitem,
                 SEC_PKCS12NicknameCollisionCallback ncCall,
                 PK11SlotInfo *slot, void *wincx);




PRBool SEC_PKCS12ValidData(char *buf, int bufLen, long int totalLength);
# 45 "p12local.h" 2
# 1 "p12.h" 1
# 46 "p12local.h" 2


extern const SEC_ASN1Template *
sec_pkcs12_choose_bag_type(void *src_or_dest, PRBool encoding);
extern const SEC_ASN1Template *
sec_pkcs12_choose_cert_crl_type(void *src_or_dest, PRBool encoding);
extern const SEC_ASN1Template *
sec_pkcs12_choose_shroud_type(void *src_or_dest, PRBool encoding);
extern SECItem *sec_pkcs12_generate_salt(void);
extern SECItem *sec_pkcs12_generate_key_from_password(SECOidTag algorithm,
        SECItem *salt, SECItem *password);
extern SECItem *sec_pkcs12_generate_mac(SECItem *key, SECItem *msg,
                                        PRBool old_method);
extern SGNDigestInfo *sec_pkcs12_compute_thumbprint(SECItem *der_cert);
extern SECItem *sec_pkcs12_create_virtual_password(SECItem *password,
                        SECItem *salt, PRBool swapUnicodeBytes);
extern SECStatus sec_pkcs12_append_shrouded_key(SEC_PKCS12BaggageItem *bag,
                                                 SEC_PKCS12ESPVKItem *espvk);
extern void *sec_pkcs12_find_object(SEC_PKCS12SafeContents *safe,
                                SEC_PKCS12Baggage *baggage, SECOidTag objType,
                                SECItem *nickname, SGNDigestInfo *thumbprint);
extern PRBool sec_pkcs12_convert_item_to_unicode(PLArenaPool *arena, SECItem *dest,
                                                 SECItem *src, PRBool zeroTerm,
                                                 PRBool asciiConvert, PRBool toUnicode);
extern CK_MECHANISM_TYPE sec_pkcs12_algtag_to_mech(SECOidTag algtag);


extern SEC_PKCS12PFXItem *sec_pkcs12_new_pfx(void);
extern SEC_PKCS12SafeContents *sec_pkcs12_create_safe_contents(
        PLArenaPool *poolp);
extern SEC_PKCS12Baggage *sec_pkcs12_create_baggage(PLArenaPool *poolp);
extern SEC_PKCS12BaggageItem *sec_pkcs12_create_external_bag(SEC_PKCS12Baggage *luggage);
extern void SEC_PKCS12DestroyPFX(SEC_PKCS12PFXItem *pfx);
extern SEC_PKCS12AuthenticatedSafe *sec_pkcs12_new_asafe(PLArenaPool *poolp);


extern SEC_PKCS12DecoderContext *
sec_PKCS12ConvertOldSafeToNew(PLArenaPool *arena, PK11SlotInfo *slot,
                              PRBool swapUnicode, SECItem *pwitem,
                              void *wincx, SEC_PKCS12SafeContents *safe,
                              SEC_PKCS12Baggage *baggage);
# 49 "p12e.c" 2
# 1 "../../../../dist/private/security/alghmac.h" 1
# 37 "../../../../dist/private/security/alghmac.h"
# 1 "../../../../dist/public/security/secoid.h" 1
# 38 "../../../../dist/private/security/alghmac.h" 2

typedef struct HMACContextStr HMACContext;




extern void
HMAC_Destroy(HMACContext *cx);
# 55 "../../../../dist/private/security/alghmac.h"
extern HMACContext *
HMAC_Create(SECOidTag hash_alg, const unsigned char *secret,
            unsigned int secret_len);


extern void
HMAC_Begin(HMACContext *cx);






extern void
HMAC_Update(HMACContext *cx, const unsigned char *data, unsigned int data_len);







extern SECStatus
HMAC_Finish(HMACContext *cx, unsigned char *result, unsigned int *result_len,
            unsigned int max_result_len);





extern HMACContext *
HMAC_Clone(HMACContext *cx);
# 50 "p12e.c" 2
# 1 "/home/nisse/hack/mozilla/dist/include/nspr/prcpucfg.h" 1
# 51 "p12e.c" 2
# 60 "p12e.c"
struct SEC_PKCS12SafeInfoStr {
    PLArenaPool *arena;


    SECItem pwitem;
    SECOidTag algorithm;
    PK11SymKey *encryptionKey;





    unsigned int itemCount;


    SEC_PKCS7ContentInfo *cinfo;

    sec_PKCS12SafeContents *safe;
};




struct SEC_PKCS12ExportContextStr {
    PLArenaPool *arena;
    PK11SlotInfo *slot;
    void *wincx;


    PRBool integrityEnabled;
    PRBool pwdIntegrity;
    union {
        struct sec_PKCS12PasswordModeInfo pwdInfo;
        struct sec_PKCS12PublicKeyModeInfo pubkeyInfo;
    } integrityInfo;



    SECKEYGetPasswordKey pwfn;
    void *pwfnarg;


    SEC_PKCS12SafeInfo **safeInfos;
    unsigned int safeInfoCount;


    sec_PKCS12AuthenticatedSafe authSafe;


    CERTCertificate **certList;
};




struct sec_pkcs12_encoder_output {
    SEC_PKCS12EncoderOutputCallback outputfn;
    void *outputarg;
};

struct sec_pkcs12_hmac_and_output_info {
    void *arg;
    struct sec_pkcs12_encoder_output output;
};




typedef struct sec_PKCS12EncoderContextStr {
    PLArenaPool *arena;
    SEC_PKCS12ExportContext *p12exp;
    PK11SymKey *encryptionKey;




    SEC_ASN1EncoderContext *ecx;
    union {
        struct sec_pkcs12_hmac_and_output_info hmacAndOutputInfo;
        struct sec_pkcs12_encoder_output encOutput;
    } output;


    sec_PKCS12PFXItem pfx;
    sec_PKCS12MacData mac;


    SEC_PKCS7ContentInfo *aSafeCinfo;
    SEC_PKCS7EncoderContext *aSafeP7Ecx;
    SEC_ASN1EncoderContext *aSafeEcx;
    unsigned int currentSafe;


    PK11Context *hmacCx;
} sec_PKCS12EncoderContext;
# 169 "p12e.c"
SEC_PKCS12ExportContext *
SEC_PKCS12CreateExportContext(SECKEYGetPasswordKey pwfn, void *pwfnarg,
                              PK11SlotInfo *slot, void *wincx)
{
    PLArenaPool *arena = ((void *)0);
    SEC_PKCS12ExportContext *p12ctxt = ((void *)0);


    arena = PORT_NewArena(4096);
    if(!arena) {
        PORT_SetError(SEC_ERROR_NO_MEMORY);
        return ((void *)0);
    }

    p12ctxt = (SEC_PKCS12ExportContext *)PORT_ArenaZAlloc(arena,
                                        sizeof(SEC_PKCS12ExportContext));
    if(!p12ctxt) {
        PORT_SetError(SEC_ERROR_NO_MEMORY);
        goto loser;
    }


    p12ctxt->pwfn = pwfn;
    p12ctxt->pwfnarg = pwfnarg;

    p12ctxt->integrityEnabled = 0;
    p12ctxt->arena = arena;
    p12ctxt->wincx = wincx;
    p12ctxt->slot = (slot) ? slot : PK11_GetInternalSlot();

    return p12ctxt;

loser:
    if(arena) {
        PORT_FreeArena(arena, 1);
    }

    return ((void *)0);
}
# 221 "p12e.c"
SECStatus
SEC_PKCS12AddPasswordIntegrity(SEC_PKCS12ExportContext *p12ctxt,
                               SECItem *pwitem, SECOidTag integAlg)
{
    if(!p12ctxt || p12ctxt->integrityEnabled) {
        return SECFailure;
    }


    p12ctxt->pwdIntegrity = 1;
    p12ctxt->integrityInfo.pwdInfo.password =
        (SECItem*)PORT_ArenaZAlloc(p12ctxt->arena, sizeof(SECItem));
    if(!p12ctxt->integrityInfo.pwdInfo.password) {
        PORT_SetError(SEC_ERROR_NO_MEMORY);
        return SECFailure;
    }
    if(SECITEM_CopyItem(p12ctxt->arena,
                        p12ctxt->integrityInfo.pwdInfo.password, pwitem)
                != SECSuccess) {
        PORT_SetError(SEC_ERROR_NO_MEMORY);
        return SECFailure;
    }
    p12ctxt->integrityInfo.pwdInfo.algorithm = integAlg;
    p12ctxt->integrityEnabled = 1;

    return SECSuccess;
}
# 260 "p12e.c"
SECStatus
SEC_PKCS12AddPublicKeyIntegrity(SEC_PKCS12ExportContext *p12ctxt,
                                CERTCertificate *cert, CERTCertDBHandle *certDb,
                                SECOidTag algorithm, int keySize)
{
    if(!p12ctxt) {
        return SECFailure;
    }

    p12ctxt->integrityInfo.pubkeyInfo.cert = cert;
    p12ctxt->integrityInfo.pubkeyInfo.certDb = certDb;
    p12ctxt->integrityInfo.pubkeyInfo.algorithm = algorithm;
    p12ctxt->integrityInfo.pubkeyInfo.keySize = keySize;
    p12ctxt->integrityEnabled = 1;

    return SECSuccess;
}
# 289 "p12e.c"
static SECStatus
sec_pkcs12_append_safe_info(SEC_PKCS12ExportContext *p12ctxt, SEC_PKCS12SafeInfo *info)
{
    void *mark = ((void *)0), *dummy1 = ((void *)0), *dummy2 = ((void *)0);

    if(!p12ctxt || !info) {
        return SECFailure;
    }

    mark = PORT_ArenaMark(p12ctxt->arena);


    if(!p12ctxt->safeInfoCount) {
        p12ctxt->safeInfos = (SEC_PKCS12SafeInfo **)PORT_ArenaZAlloc(p12ctxt->arena,
                                              2 * sizeof(SEC_PKCS12SafeInfo *));
        dummy1 = p12ctxt->safeInfos;
        p12ctxt->authSafe.encodedSafes = (SECItem **)PORT_ArenaZAlloc(p12ctxt->arena,
                                        2 * sizeof(SECItem *));
        dummy2 = p12ctxt->authSafe.encodedSafes;
    } else {
        dummy1 = PORT_ArenaGrow(p12ctxt->arena, p12ctxt->safeInfos,
                               (p12ctxt->safeInfoCount + 1) * sizeof(SEC_PKCS12SafeInfo *),
                               (p12ctxt->safeInfoCount + 2) * sizeof(SEC_PKCS12SafeInfo *));
        p12ctxt->safeInfos = (SEC_PKCS12SafeInfo **)dummy1;
        dummy2 = PORT_ArenaGrow(p12ctxt->arena, p12ctxt->authSafe.encodedSafes,
                               (p12ctxt->authSafe.safeCount + 1) * sizeof(SECItem *),
                               (p12ctxt->authSafe.safeCount + 2) * sizeof(SECItem *));
        p12ctxt->authSafe.encodedSafes = (SECItem**)dummy2;
    }
    if(!dummy1 || !dummy2) {
        PORT_SetError(SEC_ERROR_NO_MEMORY);
        goto loser;
    }


    p12ctxt->safeInfos[p12ctxt->safeInfoCount] = info;
    p12ctxt->safeInfos[++p12ctxt->safeInfoCount] = ((void *)0);
    p12ctxt->authSafe.encodedSafes[p12ctxt->authSafe.safeCount] =
        (SECItem*)PORT_ArenaZAlloc(p12ctxt->arena, sizeof(SECItem));
    if(!p12ctxt->authSafe.encodedSafes[p12ctxt->authSafe.safeCount]) {
        PORT_SetError(SEC_ERROR_NO_MEMORY);
        goto loser;
    }
    p12ctxt->authSafe.encodedSafes[++p12ctxt->authSafe.safeCount] = ((void *)0);

    PORT_ArenaUnmark(p12ctxt->arena, mark);
    return SECSuccess;

loser:
    PORT_ArenaRelease(p12ctxt->arena, mark);
    return SECFailure;
}
# 349 "p12e.c"
SEC_PKCS12SafeInfo *
SEC_PKCS12CreatePasswordPrivSafe(SEC_PKCS12ExportContext *p12ctxt,
                                 SECItem *pwitem, SECOidTag privAlg)
{
    SEC_PKCS12SafeInfo *safeInfo = ((void *)0);
    void *mark = ((void *)0);
    PK11SlotInfo *slot;
    SECAlgorithmID *algId;
    SECItem uniPwitem = {siBuffer, ((void *)0), 0};

    if(!p12ctxt) {
        return ((void *)0);
    }


    mark = PORT_ArenaMark(p12ctxt->arena);
    safeInfo = (SEC_PKCS12SafeInfo *)PORT_ArenaZAlloc(p12ctxt->arena,
                                                sizeof(SEC_PKCS12SafeInfo));
    if(!safeInfo) {
        PORT_SetError(SEC_ERROR_NO_MEMORY);
        PORT_ArenaRelease(p12ctxt->arena, mark);
        return ((void *)0);
    }

    safeInfo->itemCount = 0;


    safeInfo->cinfo = SEC_PKCS7CreateEncryptedData(privAlg, 0, p12ctxt->pwfn,
                                                   p12ctxt->pwfnarg);
    if(!safeInfo->cinfo) {
        PORT_SetError(SEC_ERROR_NO_MEMORY);
        goto loser;
    }
    safeInfo->arena = p12ctxt->arena;


    if(!sec_pkcs12_convert_item_to_unicode(((void *)0), &uniPwitem, pwitem,
                                               1, 1, 1)) {
        PORT_SetError(SEC_ERROR_NO_MEMORY);
        goto loser;
    }
    if(SECITEM_CopyItem(p12ctxt->arena, &safeInfo->pwitem, &uniPwitem) != SECSuccess) {
        PORT_SetError(SEC_ERROR_NO_MEMORY);
        goto loser;
    }


    slot = p12ctxt->slot;
    if(!slot) {
        slot = PK11_GetInternalKeySlot();
        if(!slot) {
            PORT_SetError(SEC_ERROR_NO_MEMORY);
            goto loser;
        }
    }

    algId = SEC_PKCS7GetEncryptionAlgorithm(safeInfo->cinfo);
    safeInfo->encryptionKey = PK11_PBEKeyGen(slot, algId, &uniPwitem,
                                             0, p12ctxt->wincx);
    if(!safeInfo->encryptionKey) {
        goto loser;
    }

    safeInfo->arena = p12ctxt->arena;
    safeInfo->safe = ((void *)0);
    if(sec_pkcs12_append_safe_info(p12ctxt, safeInfo) != SECSuccess) {
        goto loser;
    }

    if(uniPwitem.data) {
        SECITEM_ZfreeItem(&uniPwitem, 0);
    }
    PORT_ArenaUnmark(p12ctxt->arena, mark);
    return safeInfo;

loser:
    if(safeInfo->cinfo) {
        SEC_PKCS7DestroyContentInfo(safeInfo->cinfo);
    }

    if(uniPwitem.data) {
        SECITEM_ZfreeItem(&uniPwitem, 0);
    }

    PORT_ArenaRelease(p12ctxt->arena, mark);
    return ((void *)0);
}






SEC_PKCS12SafeInfo *
SEC_PKCS12CreateUnencryptedSafe(SEC_PKCS12ExportContext *p12ctxt)
{
    SEC_PKCS12SafeInfo *safeInfo = ((void *)0);
    void *mark = ((void *)0);

    if(!p12ctxt) {
        return ((void *)0);
    }


    mark = PORT_ArenaMark(p12ctxt->arena);
    safeInfo = (SEC_PKCS12SafeInfo *)PORT_ArenaZAlloc(p12ctxt->arena,
                                              sizeof(SEC_PKCS12SafeInfo));
    if(!safeInfo) {
        PORT_ArenaRelease(p12ctxt->arena, mark);
        PORT_SetError(SEC_ERROR_NO_MEMORY);
        return ((void *)0);
    }

    safeInfo->itemCount = 0;


    safeInfo->cinfo = SEC_PKCS7CreateData();
    if(!safeInfo->cinfo) {
        PORT_SetError(SEC_ERROR_NO_MEMORY);
        goto loser;
    }

    if(sec_pkcs12_append_safe_info(p12ctxt, safeInfo) != SECSuccess) {
        goto loser;
    }

    PORT_ArenaUnmark(p12ctxt->arena, mark);
    return safeInfo;

loser:
    if(safeInfo->cinfo) {
        SEC_PKCS7DestroyContentInfo(safeInfo->cinfo);
    }

    PORT_ArenaRelease(p12ctxt->arena, mark);
    return ((void *)0);
}
# 497 "p12e.c"
SEC_PKCS12SafeInfo *
SEC_PKCS12CreatePubKeyEncryptedSafe(SEC_PKCS12ExportContext *p12ctxt,
                                    CERTCertDBHandle *certDb,
                                    CERTCertificate *signer,
                                    CERTCertificate **recipients,
                                    SECOidTag algorithm, int keysize)
{
    SEC_PKCS12SafeInfo *safeInfo = ((void *)0);
    void *mark = ((void *)0);

    if(!p12ctxt || !signer || !recipients || !(*recipients)) {
        return ((void *)0);
    }


    mark = PORT_ArenaMark(p12ctxt->arena);
    safeInfo = (SEC_PKCS12SafeInfo *)PORT_ArenaZAlloc(p12ctxt->arena,
                                                      sizeof(SEC_PKCS12SafeInfo));
    if(!safeInfo) {
        PORT_ArenaRelease(p12ctxt->arena, mark);
        PORT_SetError(SEC_ERROR_NO_MEMORY);
        return ((void *)0);
    }

    safeInfo->itemCount = 0;
    safeInfo->arena = p12ctxt->arena;




    safeInfo->cinfo = SEC_PKCS7CreateEnvelopedData(signer, certUsageEmailSigner,
                                        certDb, algorithm, keysize,
                                        p12ctxt->pwfn, p12ctxt->pwfnarg);
    if(!safeInfo->cinfo) {
        PORT_SetError(SEC_ERROR_NO_MEMORY);
        goto loser;
    }


    if(recipients) {
        unsigned int i = 0;
        while(recipients[i] != ((void *)0)) {
            SECStatus rv = SEC_PKCS7AddRecipient(safeInfo->cinfo, recipients[i],
                                               certUsageEmailRecipient, certDb);
            if(rv != SECSuccess) {
                goto loser;
            }
            i++;
        }
    }

    if(sec_pkcs12_append_safe_info(p12ctxt, safeInfo) != SECSuccess) {
        goto loser;
    }

    PORT_ArenaUnmark(p12ctxt->arena, mark);
    return safeInfo;

loser:
    if(safeInfo->cinfo) {
        SEC_PKCS7DestroyContentInfo(safeInfo->cinfo);
        safeInfo->cinfo = ((void *)0);
    }

    PORT_ArenaRelease(p12ctxt->arena, mark);
    return ((void *)0);
}






sec_PKCS12SafeContents *
sec_PKCS12CreateSafeContents(PLArenaPool *arena)
{
    sec_PKCS12SafeContents *safeContents;

    if(arena == ((void *)0)) {
        return ((void *)0);
    }


    safeContents = (sec_PKCS12SafeContents *)PORT_ArenaZAlloc(arena,
                                            sizeof(sec_PKCS12SafeContents));
    if(!safeContents) {
        PORT_SetError(SEC_ERROR_NO_MEMORY);
        goto loser;
    }


    safeContents->safeBags = ((void *)0);
    safeContents->arena = arena;
    safeContents->bagCount = 0;

    return safeContents;

loser:
    return ((void *)0);
}



SECStatus
sec_pkcs12_append_bag_to_safe_contents(PLArenaPool *arena,
                                       sec_PKCS12SafeContents *safeContents,
                                       sec_PKCS12SafeBag *safeBag)
{
    void *mark = ((void *)0), *dummy = ((void *)0);

    if(!arena || !safeBag || !safeContents) {
        return SECFailure;
    }

    mark = PORT_ArenaMark(arena);
    if(!mark) {
        PORT_SetError(SEC_ERROR_NO_MEMORY);
        return SECFailure;
    }


    if(!safeContents->safeBags) {
        safeContents->safeBags = (sec_PKCS12SafeBag **)PORT_ArenaZAlloc(arena,
                                                (2 * sizeof(sec_PKCS12SafeBag *)));
        dummy = safeContents->safeBags;
        safeContents->bagCount = 0;
    } else {
        dummy = PORT_ArenaGrow(arena, safeContents->safeBags,
                        (safeContents->bagCount + 1) * sizeof(sec_PKCS12SafeBag *),
                        (safeContents->bagCount + 2) * sizeof(sec_PKCS12SafeBag *));
        safeContents->safeBags = (sec_PKCS12SafeBag **)dummy;
    }

    if(!dummy) {
        PORT_ArenaRelease(arena, mark);
        PORT_SetError(SEC_ERROR_NO_MEMORY);
        return SECFailure;
    }


    safeContents->safeBags[safeContents->bagCount++] = safeBag;
    safeContents->safeBags[safeContents->bagCount] = ((void *)0);

    PORT_ArenaUnmark(arena, mark);

    return SECSuccess;
}



SECStatus
sec_pkcs12_append_bag(SEC_PKCS12ExportContext *p12ctxt,
                      SEC_PKCS12SafeInfo *safeInfo, sec_PKCS12SafeBag *safeBag)
{
    sec_PKCS12SafeContents *dest;
    SECStatus rv = SECFailure;

    if(!p12ctxt || !safeBag || !safeInfo) {
        return SECFailure;
    }

    if(!safeInfo->safe) {
        safeInfo->safe = sec_PKCS12CreateSafeContents(p12ctxt->arena);
        if(!safeInfo->safe) {
            return SECFailure;
        }
    }

    dest = safeInfo->safe;
    rv = sec_pkcs12_append_bag_to_safe_contents(p12ctxt->arena, dest, safeBag);
    if(rv == SECSuccess) {
        safeInfo->itemCount++;
    }

    return rv;
}





sec_PKCS12SafeBag *
sec_PKCS12CreateSafeBag(SEC_PKCS12ExportContext *p12ctxt, SECOidTag bagType,
                        void *bagData)
{
    sec_PKCS12SafeBag *safeBag;
    PRBool setName = 1;
    void *mark = ((void *)0);
    SECStatus rv = SECSuccess;
    SECOidData *oidData = ((void *)0);

    if(!p12ctxt) {
        return ((void *)0);
    }

    mark = PORT_ArenaMark(p12ctxt->arena);
    if(!mark) {
        PORT_SetError(SEC_ERROR_NO_MEMORY);
        return ((void *)0);
    }

    safeBag = (sec_PKCS12SafeBag *)PORT_ArenaZAlloc(p12ctxt->arena,
                                                    sizeof(sec_PKCS12SafeBag));
    if(!safeBag) {
        PORT_ArenaRelease(p12ctxt->arena, mark);
        PORT_SetError(SEC_ERROR_NO_MEMORY);
        return ((void *)0);
    }


    switch(bagType) {
        case SEC_OID_PKCS12_V1_KEY_BAG_ID:
            safeBag->safeBagContent.pkcs8KeyBag =
                (SECKEYPrivateKeyInfo *)bagData;
            break;
        case SEC_OID_PKCS12_V1_CERT_BAG_ID:
            safeBag->safeBagContent.certBag = (sec_PKCS12CertBag *)bagData;
            break;
        case SEC_OID_PKCS12_V1_CRL_BAG_ID:
            safeBag->safeBagContent.crlBag = (sec_PKCS12CRLBag *)bagData;
            break;
        case SEC_OID_PKCS12_V1_SECRET_BAG_ID:
            safeBag->safeBagContent.secretBag = (sec_PKCS12SecretBag *)bagData;
            break;
        case SEC_OID_PKCS12_V1_PKCS8_SHROUDED_KEY_BAG_ID:
            safeBag->safeBagContent.pkcs8ShroudedKeyBag =
                (SECKEYEncryptedPrivateKeyInfo *)bagData;
            break;
        case SEC_OID_PKCS12_V1_SAFE_CONTENTS_BAG_ID:
            safeBag->safeBagContent.safeContents =
                (sec_PKCS12SafeContents *)bagData;
            setName = 0;
            break;
        default:
            goto loser;
    }

    oidData = SECOID_FindOIDByTag(bagType);
    if(oidData) {
        rv = SECITEM_CopyItem(p12ctxt->arena, &safeBag->safeBagType, &oidData->oid);
        if(rv != SECSuccess) {
            PORT_SetError(SEC_ERROR_NO_MEMORY);
            goto loser;
        }
    } else {
        goto loser;
    }

    safeBag->arena = p12ctxt->arena;
    PORT_ArenaUnmark(p12ctxt->arena, mark);

    return safeBag;

loser:
    if(mark) {
        PORT_ArenaRelease(p12ctxt->arena, mark);
    }

    return ((void *)0);
}




sec_PKCS12CertBag *
sec_PKCS12NewCertBag(PLArenaPool *arena, SECOidTag certType)
{
    sec_PKCS12CertBag *certBag = ((void *)0);
    SECOidData *bagType = ((void *)0);
    SECStatus rv;
    void *mark = ((void *)0);

    if(!arena) {
        return ((void *)0);
    }

    mark = PORT_ArenaMark(arena);
    certBag = (sec_PKCS12CertBag *)PORT_ArenaZAlloc(arena,
                                                    sizeof(sec_PKCS12CertBag));
    if(!certBag) {
        PORT_ArenaRelease(arena, mark);
        PORT_SetError(SEC_ERROR_NO_MEMORY);
        return ((void *)0);
    }

    bagType = SECOID_FindOIDByTag(certType);
    if(!bagType) {
        PORT_SetError(SEC_ERROR_NO_MEMORY);
        goto loser;
    }

    rv = SECITEM_CopyItem(arena, &certBag->bagID, &bagType->oid);
    if(rv != SECSuccess) {
        PORT_SetError(SEC_ERROR_NO_MEMORY);
        goto loser;
    }

    PORT_ArenaUnmark(arena, mark);
    return certBag;

loser:
    PORT_ArenaRelease(arena, mark);
    return ((void *)0);
}




sec_PKCS12CRLBag *
sec_PKCS12NewCRLBag(PLArenaPool *arena, SECOidTag crlType)
{
    sec_PKCS12CRLBag *crlBag = ((void *)0);
    SECOidData *bagType = ((void *)0);
    SECStatus rv;
    void *mark = ((void *)0);

    if(!arena) {
        return ((void *)0);
    }

    mark = PORT_ArenaMark(arena);
    crlBag = (sec_PKCS12CRLBag *)PORT_ArenaZAlloc(arena,
                                                  sizeof(sec_PKCS12CRLBag));
    if(!crlBag) {
        PORT_ArenaRelease(arena, mark);
        PORT_SetError(SEC_ERROR_NO_MEMORY);
        return ((void *)0);
    }

    bagType = SECOID_FindOIDByTag(crlType);
    if(!bagType) {
        PORT_SetError(SEC_ERROR_NO_MEMORY);
        goto loser;
    }

    rv = SECITEM_CopyItem(arena, &crlBag->bagID, &bagType->oid);
    if(rv != SECSuccess) {
        PORT_SetError(SEC_ERROR_NO_MEMORY);
        goto loser;
    }

    PORT_ArenaUnmark(arena, mark);
    return crlBag;

loser:
    PORT_ArenaRelease(arena, mark);
    return ((void *)0);
}
# 855 "p12e.c"
SECStatus
sec_PKCS12AddAttributeToBag(SEC_PKCS12ExportContext *p12ctxt,
                            sec_PKCS12SafeBag *safeBag, SECOidTag attrType,
                            SECItem *attrData)
{
    sec_PKCS12Attribute *attribute;
    void *mark = ((void *)0), *dummy = ((void *)0);
    SECOidData *oiddata = ((void *)0);
    SECItem unicodeName = { siBuffer, ((void *)0), 0};
    void *src = ((void *)0);
    unsigned int nItems = 0;
    SECStatus rv;

    if(!safeBag || !p12ctxt) {
        return SECFailure;
    }

    mark = PORT_ArenaMark(safeBag->arena);


    attribute = (sec_PKCS12Attribute *)PORT_ArenaZAlloc(safeBag->arena,
                                                sizeof(sec_PKCS12Attribute));
    if(!attribute) {
        PORT_SetError(SEC_ERROR_NO_MEMORY);
        goto loser;
    }


    oiddata = SECOID_FindOIDByTag(attrType);
    if(!oiddata) {
        PORT_SetError(SEC_ERROR_NO_MEMORY);
        goto loser;
    }
    if(SECITEM_CopyItem(p12ctxt->arena, &attribute->attrType, &oiddata->oid) !=
                SECSuccess) {
        PORT_SetError(SEC_ERROR_NO_MEMORY);
        goto loser;
    }

    nItems = 1;
    switch(attrType) {
        case SEC_OID_PKCS9_LOCAL_KEY_ID:
            {
                src = attrData;
                break;
            }
        case SEC_OID_PKCS9_FRIENDLY_NAME:
            {
                if(!sec_pkcs12_convert_item_to_unicode(p12ctxt->arena,
                                        &unicodeName, attrData, 0,
                                        0, 1)) {
                    goto loser;
                }
                src = &unicodeName;
                break;
            }
        default:
            goto loser;
    }


    attribute->attrValue = (SECItem **)PORT_ArenaZAlloc(p12ctxt->arena,
                                            ((nItems + 1) * sizeof(SECItem *)));
    if(!attribute->attrValue) {
        PORT_SetError(SEC_ERROR_NO_MEMORY);
        goto loser;
    }




    attribute->attrValue[0] = (SECItem *)PORT_ArenaZAlloc(p12ctxt->arena,
                                                          sizeof(SECItem));
    if(!attribute->attrValue[0]) {
        PORT_SetError(SEC_ERROR_NO_MEMORY);
        goto loser;
    }
    attribute->attrValue[1] = ((void *)0);

    rv = SECITEM_CopyItem(p12ctxt->arena, attribute->attrValue[0],
                          (SECItem*)src);
    if(rv != SECSuccess) {
        PORT_SetError(SEC_ERROR_NO_MEMORY);
        goto loser;
    }


    if(safeBag->nAttribs) {
        dummy = PORT_ArenaGrow(p12ctxt->arena, safeBag->attribs,
                        ((safeBag->nAttribs + 1) * sizeof(sec_PKCS12Attribute *)),
                        ((safeBag->nAttribs + 2) * sizeof(sec_PKCS12Attribute *)));
        safeBag->attribs = (sec_PKCS12Attribute **)dummy;
    } else {
        safeBag->attribs = (sec_PKCS12Attribute **)PORT_ArenaZAlloc(p12ctxt->arena,
                                                2 * sizeof(sec_PKCS12Attribute *));
        dummy = safeBag->attribs;
    }
    if(!dummy) {
        goto loser;
    }

    safeBag->attribs[safeBag->nAttribs] = attribute;
    safeBag->attribs[++safeBag->nAttribs] = ((void *)0);

    PORT_ArenaUnmark(p12ctxt->arena, mark);
    return SECSuccess;

loser:
    if(mark) {
        PORT_ArenaRelease(p12ctxt->arena, mark);
    }

    return SECFailure;
}
# 982 "p12e.c"
SECStatus
SEC_PKCS12AddCert(SEC_PKCS12ExportContext *p12ctxt, SEC_PKCS12SafeInfo *safe,
                  void *nestedDest, CERTCertificate *cert,
                  CERTCertDBHandle *certDb, SECItem *keyId,
                  PRBool includeCertChain)
{
    sec_PKCS12CertBag *certBag;
    sec_PKCS12SafeBag *safeBag;
    void *mark;
    SECStatus rv;
    SECItem nick = {siBuffer, ((void *)0),0};

    if(!p12ctxt || !cert) {
        return SECFailure;
    }
    mark = PORT_ArenaMark(p12ctxt->arena);


    certBag = sec_PKCS12NewCertBag(p12ctxt->arena,
                                   SEC_OID_PKCS9_X509_CERT);
    if(!certBag) {
        goto loser;
    }

    if(SECITEM_CopyItem(p12ctxt->arena, &certBag->value.x509Cert,
                        &cert->derCert) != SECSuccess) {
        PORT_SetError(SEC_ERROR_NO_MEMORY);
        goto loser;
    }




    if(includeCertChain) {
        CERTCertificateList *certList = CERT_CertChainFromCert(cert,
                                                               certUsageSSLClient,
                                                               1);
        unsigned int count = 0;
        if(!certList) {
            PORT_SetError(SEC_ERROR_NO_MEMORY);
            goto loser;
        }


        for(count = 0; count < (unsigned int)certList->len; count++) {
            if(SECITEM_CompareItem(&certList->certs[count], &cert->derCert)
                                != SECEqual) {
                CERTCertificate *tempCert;


                tempCert = __CERT_NewTempCertificate(certDb,
                                                &certList->certs[count], ((void *)0),
                                                0, 1);
                if(!tempCert) {
                    CERT_DestroyCertificateList(certList);
                    goto loser;
                }


                if(SEC_PKCS12AddCert(p12ctxt, safe, nestedDest, tempCert, certDb,
                                     ((void *)0), 0) != SECSuccess) {
                    CERT_DestroyCertificate(tempCert);
                    CERT_DestroyCertificateList(certList);
                    goto loser;
                }
                CERT_DestroyCertificate(tempCert);
            }
        }
        CERT_DestroyCertificateList(certList);
    }




    if(cert->nickname) {
        if (cert->slot && !PK11_IsInternal(cert->slot)) {






            char *delimit;

            delimit = (__extension__ (__builtin_constant_p (':') && (':') == '\0' ? (char *) __rawmemchr (cert->nickname, ':') : strchr (cert->nickname, ':')));
            if (delimit == ((void *)0)) {
                nick.data = (unsigned char *)cert->nickname;
                nick.len = strlen(cert->nickname);
            } else {
                delimit++;
                nick.data = (unsigned char *)PORT_ArenaStrdup(p12ctxt->arena,
                                                              delimit);
                nick.len = strlen(delimit);
            }
        } else {
            nick.data = (unsigned char *)cert->nickname;
            nick.len = strlen(cert->nickname);
        }
    }

    safeBag = sec_PKCS12CreateSafeBag(p12ctxt, SEC_OID_PKCS12_V1_CERT_BAG_ID,
                                      certBag);
    if(!safeBag) {
        goto loser;
    }


    if(nick.data) {
        if(sec_PKCS12AddAttributeToBag(p12ctxt, safeBag,
                                       SEC_OID_PKCS9_FRIENDLY_NAME, &nick)
                                       != SECSuccess) {
            goto loser;
        }
    }

    if(keyId) {
        if(sec_PKCS12AddAttributeToBag(p12ctxt, safeBag, SEC_OID_PKCS9_LOCAL_KEY_ID,
                                       keyId) != SECSuccess) {
            goto loser;
        }
    }


    if(nestedDest) {
        rv = sec_pkcs12_append_bag_to_safe_contents(p12ctxt->arena,
                                          (sec_PKCS12SafeContents*)nestedDest,
                                           safeBag);
    } else {
        rv = sec_pkcs12_append_bag(p12ctxt, safe, safeBag);
    }

    if(rv != SECSuccess) {
        goto loser;
    }

    PORT_ArenaUnmark(p12ctxt->arena, mark);
    return SECSuccess;

loser:
    if(mark) {
        PORT_ArenaRelease(p12ctxt->arena, mark);
    }

    return SECFailure;
}
# 1144 "p12e.c"
static SECStatus
SEC_PKCS12AddEncryptedKey(SEC_PKCS12ExportContext *p12ctxt,
                SECKEYEncryptedPrivateKeyInfo *epki, SEC_PKCS12SafeInfo *safe,
                void *nestedDest, SECItem *keyId, SECItem *nickName)
{
    void *mark;
    void *keyItem;
    SECOidTag keyType;
    SECStatus rv = SECFailure;
    sec_PKCS12SafeBag *returnBag;

    if(!p12ctxt || !safe || !epki) {
        return SECFailure;
    }

    mark = PORT_ArenaMark(p12ctxt->arena);

    keyItem = PORT_ArenaZAlloc(p12ctxt->arena,
                                sizeof(SECKEYEncryptedPrivateKeyInfo));
    if(!keyItem) {
        PORT_SetError(SEC_ERROR_NO_MEMORY);
        goto loser;
    }

    rv = SECKEY_CopyEncryptedPrivateKeyInfo(p12ctxt->arena,
                                        (SECKEYEncryptedPrivateKeyInfo *)keyItem,
                                        epki);
    keyType = SEC_OID_PKCS12_V1_PKCS8_SHROUDED_KEY_BAG_ID;

    if(rv != SECSuccess) {
        goto loser;
    }


    returnBag = sec_PKCS12CreateSafeBag(p12ctxt, keyType, keyItem);
    if(!returnBag) {
        rv = SECFailure;
        goto loser;
    }

    if(nickName) {
        if(sec_PKCS12AddAttributeToBag(p12ctxt, returnBag,
                                       SEC_OID_PKCS9_FRIENDLY_NAME, nickName)
                                       != SECSuccess) {
            goto loser;
        }
    }

    if(keyId) {
        if(sec_PKCS12AddAttributeToBag(p12ctxt, returnBag, SEC_OID_PKCS9_LOCAL_KEY_ID,
                                       keyId) != SECSuccess) {
            goto loser;
        }
    }

    if(nestedDest) {
        rv = sec_pkcs12_append_bag_to_safe_contents(p12ctxt->arena,
                                           (sec_PKCS12SafeContents*)nestedDest,
                                           returnBag);
    } else {
        rv = sec_pkcs12_append_bag(p12ctxt, safe, returnBag);
    }

loser:

    if (rv != SECSuccess) {
        PORT_ArenaRelease(p12ctxt->arena, mark);
    } else {
        PORT_ArenaUnmark(p12ctxt->arena, mark);
    }

    return rv;
}
# 1234 "p12e.c"
SECStatus
SEC_PKCS12AddKeyForCert(SEC_PKCS12ExportContext *p12ctxt, SEC_PKCS12SafeInfo *safe,
                        void *nestedDest, CERTCertificate *cert,
                        PRBool shroudKey, SECOidTag algorithm, SECItem *pwitem,
                        SECItem *keyId, SECItem *nickName)
{
    void *mark;
    void *keyItem;
    SECOidTag keyType;
    SECStatus rv = SECFailure;
    SECItem nickname = {siBuffer,((void *)0),0}, uniPwitem = {siBuffer, ((void *)0), 0};
    sec_PKCS12SafeBag *returnBag;

    if(!p12ctxt || !cert || !safe) {
        return SECFailure;
    }

    mark = PORT_ArenaMark(p12ctxt->arena);




    if(!shroudKey) {


        SECKEYPrivateKeyInfo *pki = PK11_ExportPrivateKeyInfo(cert,
                                                              p12ctxt->wincx);
        if(!pki) {
            PORT_ArenaRelease(p12ctxt->arena, mark);
            PORT_SetError(SEC_ERROR_PKCS12_UNABLE_TO_EXPORT_KEY);
            return SECFailure;
        }
        keyItem = PORT_ArenaZAlloc(p12ctxt->arena, sizeof(SECKEYPrivateKeyInfo));
        if(!keyItem) {
            PORT_SetError(SEC_ERROR_NO_MEMORY);
            goto loser;
        }
        rv = SECKEY_CopyPrivateKeyInfo(p12ctxt->arena,
                                       (SECKEYPrivateKeyInfo *)keyItem, pki);
        keyType = SEC_OID_PKCS12_V1_KEY_BAG_ID;
        SECKEY_DestroyPrivateKeyInfo(pki, 1);
    } else {


        SECKEYEncryptedPrivateKeyInfo *epki = ((void *)0);
        PK11SlotInfo *slot = p12ctxt->slot;

        if(!sec_pkcs12_convert_item_to_unicode(p12ctxt->arena, &uniPwitem,
                                 pwitem, 1, 1, 1)) {
            PORT_SetError(SEC_ERROR_NO_MEMORY);
            goto loser;
        }


        if(PK11_IsInternal(p12ctxt->slot)) {
            slot = PK11_GetInternalKeySlot();
        }

        epki = PK11_ExportEncryptedPrivateKeyInfo(slot, algorithm,
                                                  &uniPwitem, cert, 1,
                                                  p12ctxt->wincx);
        if(PK11_IsInternal(p12ctxt->slot)) {
            PK11_FreeSlot(slot);
        }

        keyItem = PORT_ArenaZAlloc(p12ctxt->arena,
                                  sizeof(SECKEYEncryptedPrivateKeyInfo));
        if(!keyItem) {
            PORT_SetError(SEC_ERROR_NO_MEMORY);
            goto loser;
        }
        if(!epki) {
            PORT_SetError(SEC_ERROR_PKCS12_UNABLE_TO_EXPORT_KEY);
            return SECFailure;
        }
        rv = SECKEY_CopyEncryptedPrivateKeyInfo(p12ctxt->arena,
                                        (SECKEYEncryptedPrivateKeyInfo *)keyItem,
                                        epki);
        keyType = SEC_OID_PKCS12_V1_PKCS8_SHROUDED_KEY_BAG_ID;
        SECKEY_DestroyEncryptedPrivateKeyInfo(epki, 1);
    }

    if(rv != SECSuccess) {
        goto loser;
    }




    if(!nickName) {
        if(cert->nickname) {
            nickname.data = (unsigned char *)cert->nickname;
            nickname.len = strlen(cert->nickname);
            nickName = &nickname;
        }
    }


    returnBag = sec_PKCS12CreateSafeBag(p12ctxt, keyType, keyItem);
    if(!returnBag) {
        rv = SECFailure;
        goto loser;
    }

    if(nickName) {
        if(sec_PKCS12AddAttributeToBag(p12ctxt, returnBag,
                                       SEC_OID_PKCS9_FRIENDLY_NAME, nickName)
                                       != SECSuccess) {
            goto loser;
        }
    }

    if(keyId) {
        if(sec_PKCS12AddAttributeToBag(p12ctxt, returnBag, SEC_OID_PKCS9_LOCAL_KEY_ID,
                                       keyId) != SECSuccess) {
            goto loser;
        }
    }

    if(nestedDest) {
        rv = sec_pkcs12_append_bag_to_safe_contents(p12ctxt->arena,
                                          (sec_PKCS12SafeContents*)nestedDest,
                                          returnBag);
    } else {
        rv = sec_pkcs12_append_bag(p12ctxt, safe, returnBag);
    }

loser:

    if (rv != SECSuccess) {
        PORT_ArenaRelease(p12ctxt->arena, mark);
    } else {
        PORT_ArenaUnmark(p12ctxt->arena, mark);
    }

    return rv;
}
# 1384 "p12e.c"
SECStatus
SEC_PKCS12AddDERCertAndEncryptedKey(SEC_PKCS12ExportContext *p12ctxt,
                void *certSafe, void *certNestedDest,
                SECItem *derCert, void *keySafe,
                void *keyNestedDest, SECKEYEncryptedPrivateKeyInfo *epki,
                char *nickname)
{
    SECStatus rv = SECFailure;
    SGNDigestInfo *digest = ((void *)0);
    void *mark = ((void *)0);
    CERTCertificate *cert;
    SECItem nick = {siBuffer, ((void *)0),0}, *nickPtr = ((void *)0);

    if(!p12ctxt || !certSafe || !keySafe || !derCert) {
        return SECFailure;
    }

    mark = PORT_ArenaMark(p12ctxt->arena);

    cert = __CERT_NewTempCertificate(CERT_GetDefaultCertDB(), derCert,
                                   ((void *)0), 0, 1);
    if(!cert) {
        PORT_ArenaRelease(p12ctxt->arena, mark);
        PORT_SetError(SEC_ERROR_NO_MEMORY);
        return SECFailure;
    }
    cert->nickname = nickname;


    digest = sec_pkcs12_compute_thumbprint(&cert->derCert);
    if(!digest) {
        CERT_DestroyCertificate(cert);
        return SECFailure;
    }


    rv = SEC_PKCS12AddCert(p12ctxt, (SEC_PKCS12SafeInfo*)certSafe,
                           certNestedDest, cert, ((void *)0),
                           &digest->digest, 0);
    if(rv != SECSuccess) {
        goto loser;
    }

    if(nickname) {
        nick.data = (unsigned char *)nickname;
        nick.len = strlen(nickname);
        nickPtr = &nick;
    } else {
        nickPtr = ((void *)0);
    }


    rv = SEC_PKCS12AddEncryptedKey(p12ctxt, epki, (SEC_PKCS12SafeInfo*)keySafe,
                                   keyNestedDest, &digest->digest, nickPtr );
    if(rv != SECSuccess) {
        goto loser;
    }

    SGN_DestroyDigestInfo(digest);

    PORT_ArenaUnmark(p12ctxt->arena, mark);
    return SECSuccess;

loser:
    SGN_DestroyDigestInfo(digest);
    CERT_DestroyCertificate(cert);
    PORT_ArenaRelease(p12ctxt->arena, mark);

    return SECFailure;
}
# 1467 "p12e.c"
SECStatus
SEC_PKCS12AddCertAndKey(SEC_PKCS12ExportContext *p12ctxt,
                        void *certSafe, void *certNestedDest,
                        CERTCertificate *cert, CERTCertDBHandle *certDb,
                        void *keySafe, void *keyNestedDest,
                        PRBool shroudKey, SECItem *pwitem, SECOidTag algorithm)
{
    SECStatus rv = SECFailure;
    SGNDigestInfo *digest = ((void *)0);
    void *mark = ((void *)0);

    if(!p12ctxt || !certSafe || !keySafe || !cert) {
        return SECFailure;
    }

    mark = PORT_ArenaMark(p12ctxt->arena);


    digest = sec_pkcs12_compute_thumbprint(&cert->derCert);
    if(!digest) {
        PORT_ArenaRelease(p12ctxt->arena, mark);
        return SECFailure;
    }


    rv = SEC_PKCS12AddCert(p12ctxt, (SEC_PKCS12SafeInfo*)certSafe,
                           (SEC_PKCS12SafeInfo*)certNestedDest, cert, certDb,
                           &digest->digest, 1);
    if(rv != SECSuccess) {
        goto loser;
    }


    rv = SEC_PKCS12AddKeyForCert(p12ctxt, (SEC_PKCS12SafeInfo*)keySafe,
                                 keyNestedDest, cert,
                                 shroudKey, algorithm, pwitem,
                                 &digest->digest, ((void *)0) );
    if(rv != SECSuccess) {
        goto loser;
    }

    SGN_DestroyDigestInfo(digest);

    PORT_ArenaUnmark(p12ctxt->arena, mark);
    return SECSuccess;

loser:
    SGN_DestroyDigestInfo(digest);
    PORT_ArenaRelease(p12ctxt->arena, mark);

    return SECFailure;
}
# 1528 "p12e.c"
void *
SEC_PKCS12CreateNestedSafeContents(SEC_PKCS12ExportContext *p12ctxt,
                                   void *baseSafe, void *nestedDest)
{
    sec_PKCS12SafeContents *newSafe;
    sec_PKCS12SafeBag *safeContentsBag;
    void *mark;
    SECStatus rv;

    if(!p12ctxt || !baseSafe) {
        return ((void *)0);
    }

    mark = PORT_ArenaMark(p12ctxt->arena);

    newSafe = sec_PKCS12CreateSafeContents(p12ctxt->arena);
    if(!newSafe) {
        PORT_ArenaRelease(p12ctxt->arena, mark);
        PORT_SetError(SEC_ERROR_NO_MEMORY);
        return ((void *)0);
    }


    safeContentsBag = sec_PKCS12CreateSafeBag(p12ctxt,
                                        SEC_OID_PKCS12_V1_SAFE_CONTENTS_BAG_ID,
                                        newSafe);
    if(!safeContentsBag) {
        goto loser;
    }


    if(nestedDest) {
        rv = sec_pkcs12_append_bag_to_safe_contents(p12ctxt->arena,
                                           (sec_PKCS12SafeContents*)nestedDest,
                                           safeContentsBag);
    } else {
        rv = sec_pkcs12_append_bag(p12ctxt, (SEC_PKCS12SafeInfo*)baseSafe,
                                   safeContentsBag);
    }
    if(rv != SECSuccess) {
        goto loser;
    }

    PORT_ArenaUnmark(p12ctxt->arena, mark);
    return newSafe;

loser:
    PORT_ArenaRelease(p12ctxt->arena, mark);
    return ((void *)0);
}
# 1587 "p12e.c"
sec_PKCS12EncoderContext *
sec_pkcs12_encoder_start_context(SEC_PKCS12ExportContext *p12exp)
{
    sec_PKCS12EncoderContext *p12enc = ((void *)0);
    unsigned int i, nonEmptyCnt;
    SECStatus rv;
    SECItem ignore = {0};
    void *mark;

    if(!p12exp || !p12exp->safeInfos) {
        return ((void *)0);
    }


    i = nonEmptyCnt = 0;
    while(p12exp->safeInfos[i]) {
        if(p12exp->safeInfos[i]->itemCount) {
            nonEmptyCnt++;
        }
        i++;
    }
    if(nonEmptyCnt == 0) {
        return ((void *)0);
    }
    p12exp->authSafe.encodedSafes[nonEmptyCnt] = ((void *)0);


    mark = PORT_ArenaMark(p12exp->arena);
    p12enc = (sec_PKCS12EncoderContext*)PORT_ArenaZAlloc(p12exp->arena,
                              sizeof(sec_PKCS12EncoderContext));
    if(!p12enc) {
        PORT_SetError(SEC_ERROR_NO_MEMORY);
        return ((void *)0);
    }

    p12enc->arena = p12exp->arena;
    p12enc->p12exp = p12exp;


    (__extension__ (__builtin_constant_p (0) && (0) == '\0' ? ({ void *__s = (&p12enc->pfx); __builtin_memset (__s, '\0', sizeof(sec_PKCS12PFXItem)); __s; }) : memset (&p12enc->pfx, 0, sizeof(sec_PKCS12PFXItem))));
    if(!SEC_ASN1EncodeInteger(p12exp->arena, &(p12enc->pfx.version),
                              3) ) {
        PORT_SetError(SEC_ERROR_NO_MEMORY);
        goto loser;
    }






    if(p12exp->integrityEnabled && !p12exp->pwdIntegrity) {
        SECStatus rv;


        p12enc->aSafeCinfo = SEC_PKCS7CreateSignedData(
                                p12exp->integrityInfo.pubkeyInfo.cert,
                                certUsageEmailSigner,
                                p12exp->integrityInfo.pubkeyInfo.certDb,
                                p12exp->integrityInfo.pubkeyInfo.algorithm,
                                ((void *)0),
                                p12exp->pwfn,
                                p12exp->pwfnarg);
        if(!p12enc->aSafeCinfo) {
            goto loser;
        }
        if(SEC_PKCS7IncludeCertChain(p12enc->aSafeCinfo,((void *)0)) != SECSuccess) {
            goto loser;
        }
        rv = SEC_PKCS7AddSigningTime(p12enc->aSafeCinfo);
        ((void) 0);
    } else {
        p12enc->aSafeCinfo = SEC_PKCS7CreateData();


        if(p12exp->integrityEnabled) {
            SECItem pwd = {siBuffer,((void *)0), 0};
            SECItem *salt = sec_pkcs12_generate_salt();
            PK11SymKey *symKey;
            SECItem *params;
            CK_MECHANISM_TYPE integrityMech;


            (__extension__ (__builtin_constant_p (0) && (0) == '\0' ? ({ void *__s = (&p12enc->mac); __builtin_memset (__s, '\0', sizeof(sec_PKCS12MacData)); __s; }) : memset (&p12enc->mac, 0, sizeof(sec_PKCS12MacData))));

            if(!salt) {
                PORT_SetError(SEC_ERROR_NO_MEMORY);
                goto loser;
            }
            if(SECITEM_CopyItem(p12exp->arena, &(p12enc->mac.macSalt), salt)
                        != SECSuccess) {
                PORT_SetError(SEC_ERROR_NO_MEMORY);
                goto loser;
            }


            if(!sec_pkcs12_convert_item_to_unicode(((void *)0), &pwd,
                        p12exp->integrityInfo.pwdInfo.password, 1,
                        1, 1)) {
                goto loser;
            }

            params = PK11_CreatePBEParams(salt, &pwd, 1);
            SECITEM_ZfreeItem(salt, 1);
            SECITEM_ZfreeItem(&pwd, 0);

            switch (p12exp->integrityInfo.pwdInfo.algorithm) {
            case SEC_OID_SHA1:
                integrityMech = 0x80000009L; break;
            case SEC_OID_MD5:
                integrityMech = 0x8000000aL; break;
            case SEC_OID_MD2:
                integrityMech = 0x8000000bL; break;
            default:
                goto loser;
            }

            symKey = PK11_KeyGen(((void *)0), integrityMech, params, 20, ((void *)0));
            PK11_DestroyPBEParams(params);
            if(!symKey) {
                goto loser;
            }


            p12enc->hmacCx = PK11_CreateContextBySymKey(
             sec_pkcs12_algtag_to_mech(p12exp->integrityInfo.pwdInfo.algorithm),
                                                   0x00000108, symKey, &ignore);
            if(!p12enc->hmacCx) {
                PORT_SetError(SEC_ERROR_NO_MEMORY);
                goto loser;
            }
            rv = PK11_DigestBegin(p12enc->hmacCx);
            if (rv != SECSuccess)
                goto loser;
        }
    }

    if(!p12enc->aSafeCinfo) {
        goto loser;
    }

    PORT_ArenaUnmark(p12exp->arena, mark);

    return p12enc;

loser:
    if(p12enc) {
        if(p12enc->aSafeCinfo) {
            SEC_PKCS7DestroyContentInfo(p12enc->aSafeCinfo);
        }
        if(p12enc->hmacCx) {
            PK11_DestroyContext(p12enc->hmacCx, 1);
        }
    }
    if (p12exp->arena != ((void *)0))
        PORT_ArenaRelease(p12exp->arena, mark);

    return ((void *)0);
}




static void
sec_pkcs12_encoder_out(void *arg, const char *buf, unsigned long len,
                       int depth, SEC_ASN1EncodingPart data_kind)
{
    struct sec_pkcs12_encoder_output *output;

    output = (struct sec_pkcs12_encoder_output*)arg;
    (* output->outputfn)(output->outputarg, buf, len);
}



static void
sec_pkcs12_wrap_pkcs7_encoder_update(void *arg, const char *buf,
                                     unsigned long len, int depth,
                                     SEC_ASN1EncodingPart data_kind)
{
    SEC_PKCS7EncoderContext *ecx;
    if(!buf || !len) {
        return;
    }

    ecx = (SEC_PKCS7EncoderContext*)arg;
    SEC_PKCS7EncoderUpdate(ecx, buf, len);
}



static void
sec_pkcs12_wrap_asn1_update_for_p7_update(void *arg, const char *buf,
                                          unsigned long len)
{
    if(!buf && !len) return;

    SEC_ASN1EncoderUpdate((SEC_ASN1EncoderContext*)arg, buf, len);
}




static void
sec_pkcs12_asafe_update_hmac_and_encode_bits(void *arg, const char *buf,
                                      unsigned long len, int depth,
                                      SEC_ASN1EncodingPart data_kind)
{
    sec_PKCS12EncoderContext *p12ecx;

    p12ecx = (sec_PKCS12EncoderContext*)arg;
    PK11_DigestOp(p12ecx->hmacCx, (unsigned char *)buf, len);
    sec_pkcs12_wrap_pkcs7_encoder_update(p12ecx->aSafeP7Ecx, buf, len,
                                         depth, data_kind);
}




static SECStatus
sec_pkcs12_encoder_asafe_process(sec_PKCS12EncoderContext *p12ecx)
{
    SECStatus rv = SECSuccess;
    SEC_PKCS5KeyAndPassword keyPwd;
    SEC_PKCS7EncoderContext *p7ecx;
    SEC_PKCS7ContentInfo *cinfo;
    SEC_ASN1EncoderContext *ecx = ((void *)0);

    void *arg = ((void *)0);

    if(p12ecx->currentSafe < p12ecx->p12exp->authSafe.safeCount) {
        SEC_PKCS12SafeInfo *safeInfo;
        SECOidTag cinfoType;

        safeInfo = p12ecx->p12exp->safeInfos[p12ecx->currentSafe];


        if(safeInfo->itemCount == 0) {
            return SECSuccess;
        }

        cinfo = safeInfo->cinfo;
        cinfoType = SEC_PKCS7ContentType(cinfo);


        switch(cinfoType) {
            case SEC_OID_PKCS7_DATA:
                arg = ((void *)0);
                break;
            case SEC_OID_PKCS7_ENCRYPTED_DATA:
                keyPwd.pwitem = &safeInfo->pwitem;
                keyPwd.key = safeInfo->encryptionKey;
                arg = &keyPwd;
                break;
            case SEC_OID_PKCS7_ENVELOPED_DATA:
                arg = ((void *)0);
                break;
            default:
                return SECFailure;

        }


        p7ecx = SEC_PKCS7EncoderStart(cinfo,
                                      sec_pkcs12_wrap_asn1_update_for_p7_update,
                                      p12ecx->aSafeEcx, (PK11SymKey *)arg);
        if(!p7ecx) {
            goto loser;
        }


        ecx = SEC_ASN1EncoderStart(safeInfo->safe, sec_PKCS12SafeContentsTemplate,
                                   sec_pkcs12_wrap_pkcs7_encoder_update, p7ecx);
        if(!ecx) {
            goto loser;
        }
        rv = SEC_ASN1EncoderUpdate(ecx, ((void *)0), 0);
        SEC_ASN1EncoderFinish(ecx);
        ecx = ((void *)0);
        if(rv != SECSuccess) {
            goto loser;
        }



        rv = SEC_PKCS7EncoderFinish(p7ecx, p12ecx->p12exp->pwfn,
                                    p12ecx->p12exp->pwfnarg);
    }

    return SECSuccess;

loser:
    if(p7ecx) {
        SEC_PKCS7EncoderFinish(p7ecx, p12ecx->p12exp->pwfn,
                               p12ecx->p12exp->pwfnarg);
    }

    if(ecx) {
        SEC_ASN1EncoderFinish(ecx);
    }

    return SECFailure;
}




static SECStatus
sec_pkcs12_update_mac(sec_PKCS12EncoderContext *p12ecx)
{
    SECItem hmac = { siBuffer, ((void *)0), 0 };
    SECStatus rv;
    SGNDigestInfo *di = ((void *)0);
    void *dummy;

    if(!p12ecx) {
        return SECFailure;
    }


    if(!p12ecx->p12exp->integrityEnabled) {
        return SECSuccess;
    }

    if(!p12ecx->p12exp->pwdIntegrity) {
        return SECSuccess;
    }


    hmac.data = (unsigned char *)PORT_ZAlloc(20);
    if(!hmac.data) {
        PORT_SetError(SEC_ERROR_NO_MEMORY);
        return SECFailure;
    }

    rv = PK11_DigestFinal(p12ecx->hmacCx, hmac.data, &hmac.len, 20);

    if(rv != SECSuccess) {
        PORT_SetError(SEC_ERROR_NO_MEMORY);
        goto loser;
    }


    di = SGN_CreateDigestInfo(p12ecx->p12exp->integrityInfo.pwdInfo.algorithm,
                              hmac.data, hmac.len);
    if(!di) {
        PORT_SetError(SEC_ERROR_NO_MEMORY);
        rv = SECFailure;
        goto loser;
    }

    rv = SGN_CopyDigestInfo(p12ecx->arena, &p12ecx->mac.safeMac, di);
    if(rv != SECSuccess) {
        PORT_SetError(SEC_ERROR_NO_MEMORY);
        goto loser;
    }


    dummy = SEC_ASN1EncodeItem(p12ecx->arena, &p12ecx->pfx.encodedMacData,
                            &p12ecx->mac, sec_PKCS12MacDataTemplate);
    if(!dummy) {
        PORT_SetError(SEC_ERROR_NO_MEMORY);
        rv = SECFailure;
    }

loser:
    if(di) {
        SGN_DestroyDigestInfo(di);
    }
    if(hmac.data) {
        SECITEM_ZfreeItem(&hmac, 0);
    }
    PK11_DestroyContext(p12ecx->hmacCx, 1);
    p12ecx->hmacCx = ((void *)0);

    return rv;
}


static void
sec_pkcs12_wrap_asn1_encoder_update(void *arg, const char *buf,
                                    unsigned long len)
{
    SEC_ASN1EncoderContext *cx;

    cx = (SEC_ASN1EncoderContext*)arg;
    SEC_ASN1EncoderUpdate(cx, buf, len);
}





static void
sec_pkcs12_encoder_pfx_notify(void *arg, PRBool before, void *dest, int real_depth)
{
    sec_PKCS12EncoderContext *p12ecx;

    if(!before) {
        return;
    }


    p12ecx = (sec_PKCS12EncoderContext*)arg;
    if(dest != &p12ecx->pfx.encodedAuthSafe) {
        return;
    }

    SEC_ASN1EncoderSetTakeFromBuf(p12ecx->ecx);
    SEC_ASN1EncoderSetStreaming(p12ecx->ecx);
    SEC_ASN1EncoderClearNotifyProc(p12ecx->ecx);
}
# 2009 "p12e.c"
SECStatus
SEC_PKCS12Encode(SEC_PKCS12ExportContext *p12exp,
                 SEC_PKCS12EncoderOutputCallback output, void *outputarg)
{
    sec_PKCS12EncoderContext *p12enc;
    struct sec_pkcs12_encoder_output outInfo;
    SECStatus rv;

    if(!p12exp || !output) {
        return SECFailure;
    }


    p12enc = sec_pkcs12_encoder_start_context(p12exp);
    if(!p12enc) {
        return SECFailure;
    }

    outInfo.outputfn = output;
    outInfo.outputarg = outputarg;


    p12enc->ecx = SEC_ASN1EncoderStart(&p12enc->pfx, sec_PKCS12PFXItemTemplate,
                                       sec_pkcs12_encoder_out,
                                       &outInfo);
    if(!p12enc->ecx) {
        PORT_SetError(SEC_ERROR_NO_MEMORY);
        rv = SECFailure;
        goto loser;
    }
    SEC_ASN1EncoderSetStreaming(p12enc->ecx);
    SEC_ASN1EncoderSetNotifyProc(p12enc->ecx, sec_pkcs12_encoder_pfx_notify, p12enc);
    rv = SEC_ASN1EncoderUpdate(p12enc->ecx, ((void *)0), 0);
    if(rv != SECSuccess) {
        rv = SECFailure;
        goto loser;
    }


    p12enc->aSafeP7Ecx = SEC_PKCS7EncoderStart(p12enc->aSafeCinfo,
                                               sec_pkcs12_wrap_asn1_encoder_update,
                                               p12enc->ecx, ((void *)0));
    if(!p12enc->aSafeP7Ecx) {
        rv = SECFailure;
        goto loser;
    }


    if(p12enc->p12exp->integrityEnabled && p12enc->p12exp->pwdIntegrity) {
        p12enc->aSafeEcx = SEC_ASN1EncoderStart(&p12enc->p12exp->authSafe,
                                        sec_PKCS12AuthenticatedSafeTemplate,
                                        sec_pkcs12_asafe_update_hmac_and_encode_bits,
                                        p12enc);
    } else {
        p12enc->aSafeEcx = SEC_ASN1EncoderStart(&p12enc->p12exp->authSafe,
                                sec_PKCS12AuthenticatedSafeTemplate,
                                sec_pkcs12_wrap_pkcs7_encoder_update,
                                p12enc->aSafeP7Ecx);
    }
    if(!p12enc->aSafeEcx) {
        rv = SECFailure;
        goto loser;
    }
    SEC_ASN1EncoderSetStreaming(p12enc->aSafeEcx);
    SEC_ASN1EncoderSetTakeFromBuf(p12enc->aSafeEcx);


    while(p12enc->currentSafe != p12enc->p12exp->safeInfoCount) {
        sec_pkcs12_encoder_asafe_process(p12enc);
        p12enc->currentSafe++;
    }
    SEC_ASN1EncoderClearTakeFromBuf(p12enc->aSafeEcx);
    SEC_ASN1EncoderClearStreaming(p12enc->aSafeEcx);
    SEC_ASN1EncoderUpdate(p12enc->aSafeEcx, ((void *)0), 0);
    SEC_ASN1EncoderFinish(p12enc->aSafeEcx);


    rv = SEC_PKCS7EncoderFinish(p12enc->aSafeP7Ecx, p12exp->pwfn,
                                p12exp->pwfnarg);
    if(rv != SECSuccess) {
        goto loser;
    }

    SEC_ASN1EncoderClearTakeFromBuf(p12enc->ecx);
    SEC_ASN1EncoderClearStreaming(p12enc->ecx);


    rv = sec_pkcs12_update_mac(p12enc);
    if(rv != SECSuccess) {
        goto loser;
    }


    rv = SEC_ASN1EncoderUpdate(p12enc->ecx, ((void *)0), 0);

    SEC_ASN1EncoderFinish(p12enc->ecx);

loser:
    return rv;
}

void
SEC_PKCS12DestroyExportContext(SEC_PKCS12ExportContext *p12ecx)
{
    int i = 0;

    if(!p12ecx) {
        return;
    }

    if(p12ecx->safeInfos) {
        i = 0;
        while(p12ecx->safeInfos[i] != ((void *)0)) {
            if(p12ecx->safeInfos[i]->encryptionKey) {
                PK11_FreeSymKey(p12ecx->safeInfos[i]->encryptionKey);
            }
            if(p12ecx->safeInfos[i]->cinfo) {
                SEC_PKCS7DestroyContentInfo(p12ecx->safeInfos[i]->cinfo);
            }
            i++;
        }
    }

    PORT_FreeArena(p12ecx->arena, 1);
}





struct inPlaceEncodeInfo {
    PRBool error;
    SECItem outItem;
};

static void
sec_pkcs12_in_place_encoder_output(void *arg, const char *buf, unsigned long len)
{
    struct inPlaceEncodeInfo *outInfo = (struct inPlaceEncodeInfo*)arg;

    if(!outInfo || !len || outInfo->error) {
        return;
    }

    if(!outInfo->outItem.data) {
        outInfo->outItem.data = (unsigned char*)PORT_ZAlloc(len);
        outInfo->outItem.len = 0;
    } else {
        if(!PORT_Realloc(&(outInfo->outItem.data), (outInfo->outItem.len + len))) {
            SECITEM_ZfreeItem(&(outInfo->outItem), 0);
            outInfo->outItem.data = ((void *)0);
            PORT_SetError(SEC_ERROR_NO_MEMORY);
            outInfo->error = 1;
            return;
        }
    }

    memcpy(&(outInfo->outItem.data[outInfo->outItem.len]), buf, len);
    outInfo->outItem.len += len;

    return;
}
# 2186 "p12e.c"
SECItem *
SEC_PKCS12ExportCertificateAndKeyUsingPassword(
                                SECKEYGetPasswordKey pwfn, void *pwfnarg,
                                CERTCertificate *cert, PK11SlotInfo *slot,
                                CERTCertDBHandle *certDb, SECItem *pwitem,
                                PRBool shroudKey, SECOidTag shroudAlg,
                                PRBool encryptCert, SECOidTag certEncAlg,
                                SECOidTag integrityAlg, void *wincx)
{
    struct inPlaceEncodeInfo outInfo;
    SEC_PKCS12ExportContext *p12ecx = ((void *)0);
    SEC_PKCS12SafeInfo *keySafe, *certSafe;
    SECItem *returnItem = ((void *)0);

    if(!cert || !pwitem || !slot) {
        return ((void *)0);
    }

    outInfo.error = 0;
    outInfo.outItem.data = ((void *)0);
    outInfo.outItem.len = 0;

    p12ecx = SEC_PKCS12CreateExportContext(pwfn, pwfnarg, slot, wincx);
    if(!p12ecx) {
        return ((void *)0);
    }


    if(encryptCert) {
        certSafe = SEC_PKCS12CreatePasswordPrivSafe(p12ecx, pwitem, certEncAlg);
    } else {
        certSafe = SEC_PKCS12CreateUnencryptedSafe(p12ecx);
    }
    if(!certSafe) {
        goto loser;
    }


    if(shroudKey) {
        keySafe = SEC_PKCS12CreateUnencryptedSafe(p12ecx);
    } else {
        keySafe = certSafe;
    }
    if(!keySafe) {
        goto loser;
    }


    if(SEC_PKCS12AddPasswordIntegrity(p12ecx, pwitem, integrityAlg)
                != SECSuccess) {
        goto loser;
    }


    if(SEC_PKCS12AddCertAndKey(p12ecx, certSafe, ((void *)0), cert, certDb,
                               keySafe, ((void *)0), shroudKey, pwitem, shroudAlg)
                != SECSuccess) {
        goto loser;
    }


    if(SEC_PKCS12Encode(p12ecx, sec_pkcs12_in_place_encoder_output, &outInfo)
                != SECSuccess) {
        goto loser;
    }
    if(outInfo.error) {
        goto loser;
    }

    SEC_PKCS12DestroyExportContext(p12ecx);

    returnItem = SECITEM_DupItem(&outInfo.outItem);
    SECITEM_ZfreeItem(&outInfo.outItem, 0);

    return returnItem;

loser:
    if(outInfo.outItem.data) {
        SECITEM_ZfreeItem(&(outInfo.outItem), 1);
    }

    if(p12ecx) {
        SEC_PKCS12DestroyExportContext(p12ecx);
    }

    return ((void *)0);
}


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]