]> git.wh0rd.org Git - ICEs.git/blob - 505182/ssh-keygen.i.0
more
[ICEs.git] / 505182 / ssh-keygen.i.0
1 typedef unsigned char __u_char;
2 typedef unsigned short int __u_short;
3 typedef unsigned int __u_int;
4 typedef unsigned long int __u_long;
5 typedef signed char __int8_t;
6 typedef unsigned char __uint8_t;
7 typedef signed short int __int16_t;
8 typedef unsigned short int __uint16_t;
9 typedef signed int __int32_t;
10 typedef unsigned int __uint32_t;
11 __extension__ typedef signed long long int __int64_t;
12 __extension__ typedef unsigned long long int __uint64_t;
13 __extension__ typedef long long int __quad_t;
14 __extension__ typedef unsigned long long int __u_quad_t;
15 __extension__ typedef __u_quad_t __dev_t;
16 __extension__ typedef unsigned int __uid_t;
17 __extension__ typedef unsigned int __gid_t;
18 __extension__ typedef unsigned long int __ino_t;
19 __extension__ typedef __u_quad_t __ino64_t;
20 __extension__ typedef unsigned int __mode_t;
21 __extension__ typedef unsigned int __nlink_t;
22 __extension__ typedef long int __off_t;
23 __extension__ typedef __quad_t __off64_t;
24 __extension__ typedef int __pid_t;
25 __extension__ typedef struct { int __val[2]; } __fsid_t;
26 __extension__ typedef long int __clock_t;
27 __extension__ typedef unsigned long int __rlim_t;
28 __extension__ typedef __u_quad_t __rlim64_t;
29 __extension__ typedef unsigned int __id_t;
30 __extension__ typedef long int __time_t;
31 __extension__ typedef unsigned int __useconds_t;
32 __extension__ typedef long int __suseconds_t;
33 __extension__ typedef int __daddr_t;
34 __extension__ typedef int __key_t;
35 __extension__ typedef int __clockid_t;
36 __extension__ typedef void * __timer_t;
37 __extension__ typedef long int __blksize_t;
38 __extension__ typedef long int __blkcnt_t;
39 __extension__ typedef __quad_t __blkcnt64_t;
40 __extension__ typedef unsigned long int __fsblkcnt_t;
41 __extension__ typedef __u_quad_t __fsblkcnt64_t;
42 __extension__ typedef unsigned long int __fsfilcnt_t;
43 __extension__ typedef __u_quad_t __fsfilcnt64_t;
44 __extension__ typedef int __fsword_t;
45 __extension__ typedef int __ssize_t;
46 __extension__ typedef long int __syscall_slong_t;
47 __extension__ typedef unsigned long int __syscall_ulong_t;
48 typedef __off64_t __loff_t;
49 typedef __quad_t *__qaddr_t;
50 typedef char *__caddr_t;
51 __extension__ typedef int __intptr_t;
52 __extension__ typedef unsigned int __socklen_t;
53 typedef __u_char u_char;
54 typedef __u_short u_short;
55 typedef __u_int u_int;
56 typedef __u_long u_long;
57 typedef __quad_t quad_t;
58 typedef __u_quad_t u_quad_t;
59 typedef __fsid_t fsid_t;
60 typedef __loff_t loff_t;
61 typedef __ino64_t ino_t;
62 typedef __ino64_t ino64_t;
63 typedef __dev_t dev_t;
64 typedef __gid_t gid_t;
65 typedef __mode_t mode_t;
66 typedef __nlink_t nlink_t;
67 typedef __uid_t uid_t;
68 typedef __off64_t off_t;
69 typedef __off64_t off64_t;
70 typedef __pid_t pid_t;
71 typedef __id_t id_t;
72 typedef __ssize_t ssize_t;
73 typedef __daddr_t daddr_t;
74 typedef __caddr_t caddr_t;
75 typedef __key_t key_t;
76 typedef __clock_t clock_t;
77 typedef __time_t time_t;
78 typedef __clockid_t clockid_t;
79 typedef __timer_t timer_t;
80 typedef __useconds_t useconds_t;
81 typedef __suseconds_t suseconds_t;
82 typedef unsigned int size_t;
83 typedef unsigned long int ulong;
84 typedef unsigned short int ushort;
85 typedef unsigned int uint;
86 typedef int int8_t __attribute__ ((__mode__ (__QI__)));
87 typedef int int16_t __attribute__ ((__mode__ (__HI__)));
88 typedef int int32_t __attribute__ ((__mode__ (__SI__)));
89 typedef int int64_t __attribute__ ((__mode__ (__DI__)));
90 typedef unsigned int u_int8_t __attribute__ ((__mode__ (__QI__)));
91 typedef unsigned int u_int16_t __attribute__ ((__mode__ (__HI__)));
92 typedef unsigned int u_int32_t __attribute__ ((__mode__ (__SI__)));
93 typedef unsigned int u_int64_t __attribute__ ((__mode__ (__DI__)));
94 typedef int register_t __attribute__ ((__mode__ (__word__)));
95 static __inline unsigned int
96 __bswap_32 (unsigned int __bsx)
97 {
98   return __builtin_bswap32 (__bsx);
99 }
100 static __inline __uint64_t
101 __bswap_64 (__uint64_t __bsx)
102 {
103   return __builtin_bswap64 (__bsx);
104 }
105 typedef int __sig_atomic_t;
106 typedef struct
107   {
108     unsigned long int __val[(1024 / (8 * sizeof (unsigned long int)))];
109   } __sigset_t;
110 typedef __sigset_t sigset_t;
111 struct timespec
112   {
113     __time_t tv_sec;
114     __syscall_slong_t tv_nsec;
115   };
116 struct timeval
117   {
118     __time_t tv_sec;
119     __suseconds_t tv_usec;
120   };
121 typedef long int __fd_mask;
122 typedef struct
123   {
124     __fd_mask fds_bits[1024 / (8 * (int) sizeof (__fd_mask))];
125   } fd_set;
126 typedef __fd_mask fd_mask;
127 extern int select (int __nfds, fd_set *__restrict __readfds,
128      fd_set *__restrict __writefds,
129      fd_set *__restrict __exceptfds,
130      struct timeval *__restrict __timeout);
131 extern int pselect (int __nfds, fd_set *__restrict __readfds,
132       fd_set *__restrict __writefds,
133       fd_set *__restrict __exceptfds,
134       const struct timespec *__restrict __timeout,
135       const __sigset_t *__restrict __sigmask);
136 extern long int __fdelt_chk (long int __d);
137 extern long int __fdelt_warn (long int __d)
138   __attribute__((__warning__ ("bit outside of fd_set selected")));
139 __extension__
140 extern unsigned int gnu_dev_major (unsigned long long int __dev)
141      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
142 __extension__
143 extern unsigned int gnu_dev_minor (unsigned long long int __dev)
144      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
145 __extension__
146 extern unsigned long long int gnu_dev_makedev (unsigned int __major,
147             unsigned int __minor)
148      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
149 __extension__ extern __inline __attribute__ ((__const__)) unsigned int
150 __attribute__ ((__nothrow__ , __leaf__)) gnu_dev_major (unsigned long long int __dev)
151 {
152   return ((__dev >> 8) & 0xfff) | ((unsigned int) (__dev >> 32) & ~0xfff);
153 }
154 __extension__ extern __inline __attribute__ ((__const__)) unsigned int
155 __attribute__ ((__nothrow__ , __leaf__)) gnu_dev_minor (unsigned long long int __dev)
156 {
157   return (__dev & 0xff) | ((unsigned int) (__dev >> 12) & ~0xff);
158 }
159 __extension__ extern __inline __attribute__ ((__const__)) unsigned long long int
160 __attribute__ ((__nothrow__ , __leaf__)) gnu_dev_makedev (unsigned int __major, unsigned int __minor)
161 {
162   return ((__minor & 0xff) | ((__major & 0xfff) << 8)
163    | (((unsigned long long int) (__minor & ~0xff)) << 12)
164    | (((unsigned long long int) (__major & ~0xfff)) << 32));
165 }
166 typedef __blksize_t blksize_t;
167 typedef __blkcnt64_t blkcnt_t;
168 typedef __fsblkcnt64_t fsblkcnt_t;
169 typedef __fsfilcnt64_t fsfilcnt_t;
170 typedef __blkcnt64_t blkcnt64_t;
171 typedef __fsblkcnt64_t fsblkcnt64_t;
172 typedef __fsfilcnt64_t fsfilcnt64_t;
173 typedef unsigned long int pthread_t;
174 union pthread_attr_t
175 {
176   char __size[36];
177   long int __align;
178 };
179 typedef union pthread_attr_t pthread_attr_t;
180 typedef struct __pthread_internal_slist
181 {
182   struct __pthread_internal_slist *__next;
183 } __pthread_slist_t;
184 typedef union
185 {
186   struct __pthread_mutex_s
187   {
188     int __lock __attribute__ ((aligned(16)));
189     unsigned int __count;
190     int __owner;
191     int __kind;
192     int __compat_padding[4];
193     unsigned int __nusers;
194     __extension__ union
195     {
196       int __spins;
197       __pthread_slist_t __list;
198     };
199     int __reserved1;
200     int __reserved2;
201   } __data;
202   char __size[48];
203   long int __align;
204 } pthread_mutex_t;
205 typedef union
206 {
207   char __size[4];
208   long int __align;
209 } pthread_mutexattr_t;
210 typedef union
211 {
212   struct
213   {
214     int __lock __attribute__ ((aligned(16)));
215     int __initializer;
216     unsigned int __futex;
217     void *__mutex;
218     __extension__ unsigned long long int __total_seq;
219     __extension__ unsigned long long int __wakeup_seq;
220     __extension__ unsigned long long int __woken_seq;
221     unsigned int __nwaiters;
222     unsigned int __broadcast_seq;
223   } __data;
224   char __size[48];
225   __extension__ long long int __align;
226 } pthread_cond_t;
227 typedef union
228 {
229   char __size[4];
230   long int __align;
231 } pthread_condattr_t;
232 typedef unsigned int pthread_key_t;
233 typedef int pthread_once_t;
234 typedef union
235 {
236   struct
237   {
238     int __compat_padding[4] __attribute__ ((aligned(16)));
239     int __lock;
240     unsigned int __nr_readers;
241     unsigned int __readers_wakeup;
242     unsigned int __writer_wakeup;
243     unsigned int __nr_readers_queued;
244     unsigned int __nr_writers_queued;
245     int __writer;
246     int __reserved1;
247     unsigned char __pad2;
248     unsigned char __pad1;
249     unsigned char __shared;
250     unsigned char __flags;
251     int __reserved2;
252     int __reserved3;
253     int __reserved4;
254   } __data;
255   char __size[64];
256   long int __align;
257 } pthread_rwlock_t;
258 typedef union
259 {
260   char __size[8];
261   long int __align;
262 } pthread_rwlockattr_t;
263 typedef volatile int pthread_spinlock_t;
264 typedef union
265 {
266   char __size[48];
267   long int __align;
268 } pthread_barrier_t;
269 typedef union
270 {
271   char __size[4];
272   int __align;
273 } pthread_barrierattr_t;
274 struct iovec
275   {
276     void *iov_base;
277     size_t iov_len;
278   };
279 extern ssize_t process_vm_readv (pid_t __pid, const struct iovec *__lvec,
280      unsigned long int __liovcnt,
281      const struct iovec *__rvec,
282      unsigned long int __riovcnt,
283      unsigned long int __flags)
284   __attribute__ ((__nothrow__ , __leaf__));
285 extern ssize_t process_vm_writev (pid_t __pid, const struct iovec *__lvec,
286       unsigned long int __liovcnt,
287       const struct iovec *__rvec,
288       unsigned long int __riovcnt,
289       unsigned long int __flags)
290   __attribute__ ((__nothrow__ , __leaf__));
291 extern ssize_t readv (int __fd, const struct iovec *__iovec, int __count)
292   __attribute__ ((__warn_unused_result__));
293 extern ssize_t writev (int __fd, const struct iovec *__iovec, int __count)
294   __attribute__ ((__warn_unused_result__));
295 extern ssize_t preadv (int __fd, const struct iovec *__iovec, int __count, __off64_t __offset) __asm__ ("" "preadv64")
296                 __attribute__ ((__warn_unused_result__));
297 extern ssize_t pwritev (int __fd, const struct iovec *__iovec, int __count, __off64_t __offset) __asm__ ("" "pwritev64")
298                  __attribute__ ((__warn_unused_result__));
299 extern ssize_t preadv64 (int __fd, const struct iovec *__iovec, int __count,
300     __off64_t __offset) __attribute__ ((__warn_unused_result__));
301 extern ssize_t pwritev64 (int __fd, const struct iovec *__iovec, int __count,
302      __off64_t __offset) __attribute__ ((__warn_unused_result__));
303 typedef __socklen_t socklen_t;
304 enum __socket_type
305 {
306   SOCK_STREAM = 1,
307   SOCK_DGRAM = 2,
308   SOCK_RAW = 3,
309   SOCK_RDM = 4,
310   SOCK_SEQPACKET = 5,
311   SOCK_DCCP = 6,
312   SOCK_PACKET = 10,
313   SOCK_CLOEXEC = 010000000,
314   SOCK_NONBLOCK = 0x40000000
315 };
316 typedef unsigned short int sa_family_t;
317 struct sockaddr
318   {
319     sa_family_t sa_family;
320     char sa_data[14];
321   };
322 struct sockaddr_storage
323   {
324     sa_family_t ss_family;
325     unsigned long int __ss_align;
326     char __ss_padding[(128 - (2 * sizeof (unsigned long int)))];
327   };
328 enum
329   {
330     MSG_OOB = 0x01,
331     MSG_PEEK = 0x02,
332     MSG_DONTROUTE = 0x04,
333     MSG_TRYHARD = MSG_DONTROUTE,
334     MSG_CTRUNC = 0x08,
335     MSG_PROXY = 0x10,
336     MSG_TRUNC = 0x20,
337     MSG_DONTWAIT = 0x40,
338     MSG_EOR = 0x80,
339     MSG_WAITALL = 0x100,
340     MSG_FIN = 0x200,
341     MSG_SYN = 0x400,
342     MSG_CONFIRM = 0x800,
343     MSG_RST = 0x1000,
344     MSG_ERRQUEUE = 0x2000,
345     MSG_NOSIGNAL = 0x4000,
346     MSG_MORE = 0x8000,
347     MSG_WAITFORONE = 0x10000,
348     MSG_CMSG_CLOEXEC = 0x40000000
349   };
350 struct msghdr
351   {
352     void *msg_name;
353     socklen_t msg_namelen;
354     struct iovec *msg_iov;
355     size_t msg_iovlen;
356     void *msg_control;
357     size_t msg_controllen;
358     int msg_flags;
359   };
360 struct cmsghdr
361   {
362     size_t cmsg_len;
363     int cmsg_level;
364     int cmsg_type;
365     __extension__ unsigned char __cmsg_data [];
366   };
367 extern struct cmsghdr *__cmsg_nxthdr (struct msghdr *__mhdr,
368           struct cmsghdr *__cmsg) __attribute__ ((__nothrow__ , __leaf__));
369 extern __inline struct cmsghdr *
370 __attribute__ ((__nothrow__ , __leaf__)) __cmsg_nxthdr (struct msghdr *__mhdr, struct cmsghdr *__cmsg)
371 {
372   if ((size_t) __cmsg->cmsg_len < sizeof (struct cmsghdr))
373     return (struct cmsghdr *) 0;
374   __cmsg = (struct cmsghdr *) ((unsigned char *) __cmsg
375           + (((__cmsg->cmsg_len) + sizeof (size_t) - 1) & (size_t) ~(sizeof (size_t) - 1)));
376   if ((unsigned char *) (__cmsg + 1) > ((unsigned char *) __mhdr->msg_control
377      + __mhdr->msg_controllen)
378       || ((unsigned char *) __cmsg + (((__cmsg->cmsg_len) + sizeof (size_t) - 1) & (size_t) ~(sizeof (size_t) - 1))
379    > ((unsigned char *) __mhdr->msg_control + __mhdr->msg_controllen)))
380     return (struct cmsghdr *) 0;
381   return __cmsg;
382 }
383 enum
384   {
385     SCM_RIGHTS = 0x01
386     , SCM_CREDENTIALS = 0x02
387   };
388 struct ucred
389 {
390   pid_t pid;
391   uid_t uid;
392   gid_t gid;
393 };
394 struct linger
395   {
396     int l_onoff;
397     int l_linger;
398   };
399 struct osockaddr
400   {
401     unsigned short int sa_family;
402     unsigned char sa_data[14];
403   };
404 enum
405 {
406   SHUT_RD = 0,
407   SHUT_WR,
408   SHUT_RDWR
409 };
410 typedef union { struct sockaddr *__restrict __sockaddr__; struct sockaddr_at *__restrict __sockaddr_at__; struct sockaddr_ax25 *__restrict __sockaddr_ax25__; struct sockaddr_dl *__restrict __sockaddr_dl__; struct sockaddr_eon *__restrict __sockaddr_eon__; struct sockaddr_in *__restrict __sockaddr_in__; struct sockaddr_in6 *__restrict __sockaddr_in6__; struct sockaddr_inarp *__restrict __sockaddr_inarp__; struct sockaddr_ipx *__restrict __sockaddr_ipx__; struct sockaddr_iso *__restrict __sockaddr_iso__; struct sockaddr_ns *__restrict __sockaddr_ns__; struct sockaddr_un *__restrict __sockaddr_un__; struct sockaddr_x25 *__restrict __sockaddr_x25__;
411        } __SOCKADDR_ARG __attribute__ ((__transparent_union__));
412 typedef union { const struct sockaddr *__restrict __sockaddr__; const struct sockaddr_at *__restrict __sockaddr_at__; const struct sockaddr_ax25 *__restrict __sockaddr_ax25__; const struct sockaddr_dl *__restrict __sockaddr_dl__; const struct sockaddr_eon *__restrict __sockaddr_eon__; const struct sockaddr_in *__restrict __sockaddr_in__; const struct sockaddr_in6 *__restrict __sockaddr_in6__; const struct sockaddr_inarp *__restrict __sockaddr_inarp__; const struct sockaddr_ipx *__restrict __sockaddr_ipx__; const struct sockaddr_iso *__restrict __sockaddr_iso__; const struct sockaddr_ns *__restrict __sockaddr_ns__; const struct sockaddr_un *__restrict __sockaddr_un__; const struct sockaddr_x25 *__restrict __sockaddr_x25__;
413        } __CONST_SOCKADDR_ARG __attribute__ ((__transparent_union__));
414 struct mmsghdr
415   {
416     struct msghdr msg_hdr;
417     unsigned int msg_len;
418   };
419 extern int socket (int __domain, int __type, int __protocol) __attribute__ ((__nothrow__ , __leaf__));
420 extern int socketpair (int __domain, int __type, int __protocol,
421          int __fds[2]) __attribute__ ((__nothrow__ , __leaf__));
422 extern int bind (int __fd, __CONST_SOCKADDR_ARG __addr, socklen_t __len)
423      __attribute__ ((__nothrow__ , __leaf__));
424 extern int getsockname (int __fd, __SOCKADDR_ARG __addr,
425    socklen_t *__restrict __len) __attribute__ ((__nothrow__ , __leaf__));
426 extern int connect (int __fd, __CONST_SOCKADDR_ARG __addr, socklen_t __len);
427 extern int getpeername (int __fd, __SOCKADDR_ARG __addr,
428    socklen_t *__restrict __len) __attribute__ ((__nothrow__ , __leaf__));
429 extern ssize_t send (int __fd, const void *__buf, size_t __n, int __flags);
430 extern ssize_t recv (int __fd, void *__buf, size_t __n, int __flags);
431 extern ssize_t sendto (int __fd, const void *__buf, size_t __n,
432          int __flags, __CONST_SOCKADDR_ARG __addr,
433          socklen_t __addr_len);
434 extern ssize_t recvfrom (int __fd, void *__restrict __buf, size_t __n,
435     int __flags, __SOCKADDR_ARG __addr,
436     socklen_t *__restrict __addr_len);
437 extern ssize_t sendmsg (int __fd, const struct msghdr *__message,
438    int __flags);
439 extern int sendmmsg (int __fd, struct mmsghdr *__vmessages,
440        unsigned int __vlen, int __flags);
441 extern ssize_t recvmsg (int __fd, struct msghdr *__message, int __flags);
442 extern int recvmmsg (int __fd, struct mmsghdr *__vmessages,
443        unsigned int __vlen, int __flags,
444        const struct timespec *__tmo);
445 extern int getsockopt (int __fd, int __level, int __optname,
446          void *__restrict __optval,
447          socklen_t *__restrict __optlen) __attribute__ ((__nothrow__ , __leaf__));
448 extern int setsockopt (int __fd, int __level, int __optname,
449          const void *__optval, socklen_t __optlen) __attribute__ ((__nothrow__ , __leaf__));
450 extern int listen (int __fd, int __n) __attribute__ ((__nothrow__ , __leaf__));
451 extern int accept (int __fd, __SOCKADDR_ARG __addr,
452      socklen_t *__restrict __addr_len);
453 extern int accept4 (int __fd, __SOCKADDR_ARG __addr,
454       socklen_t *__restrict __addr_len, int __flags);
455 extern int shutdown (int __fd, int __how) __attribute__ ((__nothrow__ , __leaf__));
456 extern int sockatmark (int __fd) __attribute__ ((__nothrow__ , __leaf__));
457 extern int isfdtype (int __fd, int __fdtype) __attribute__ ((__nothrow__ , __leaf__));
458 extern ssize_t __recv_chk (int __fd, void *__buf, size_t __n, size_t __buflen,
459       int __flags);
460 extern ssize_t __recv_alias (int __fd, void *__buf, size_t __n, int __flags) __asm__ ("" "recv")
461                           ;
462 extern ssize_t __recv_chk_warn (int __fd, void *__buf, size_t __n, size_t __buflen, int __flags) __asm__ ("" "__recv_chk")
463      __attribute__((__warning__ ("recv called with bigger length than size of destination " "buffer")))
464             ;
465 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__artificial__)) ssize_t
466 recv (int __fd, void *__buf, size_t __n, int __flags)
467 {
468   if (__builtin_object_size (__buf, 0) != (size_t) -1)
469     {
470       if (!__builtin_constant_p (__n))
471  return __recv_chk (__fd, __buf, __n, __builtin_object_size (__buf, 0), __flags);
472       if (__n > __builtin_object_size (__buf, 0))
473  return __recv_chk_warn (__fd, __buf, __n, __builtin_object_size (__buf, 0), __flags);
474     }
475   return __recv_alias (__fd, __buf, __n, __flags);
476 }
477 extern ssize_t __recvfrom_chk (int __fd, void *__restrict __buf, size_t __n,
478           size_t __buflen, int __flags,
479           __SOCKADDR_ARG __addr,
480           socklen_t *__restrict __addr_len);
481 extern ssize_t __recvfrom_alias (int __fd, void *__restrict __buf, size_t __n, int __flags, __SOCKADDR_ARG __addr, socklen_t *__restrict __addr_len) __asm__ ("" "recvfrom")
482                                                    ;
483 extern ssize_t __recvfrom_chk_warn (int __fd, void *__restrict __buf, size_t __n, size_t __buflen, int __flags, __SOCKADDR_ARG __addr, socklen_t *__restrict __addr_len) __asm__ ("" "__recvfrom_chk")
484      __attribute__((__warning__ ("recvfrom called with bigger length than size of " "destination buffer")))
485                         ;
486 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__artificial__)) ssize_t
487 recvfrom (int __fd, void *__restrict __buf, size_t __n, int __flags,
488    __SOCKADDR_ARG __addr, socklen_t *__restrict __addr_len)
489 {
490   if (__builtin_object_size (__buf, 0) != (size_t) -1)
491     {
492       if (!__builtin_constant_p (__n))
493  return __recvfrom_chk (__fd, __buf, __n, __builtin_object_size (__buf, 0), __flags,
494           __addr, __addr_len);
495       if (__n > __builtin_object_size (__buf, 0))
496  return __recvfrom_chk_warn (__fd, __buf, __n, __builtin_object_size (__buf, 0), __flags,
497         __addr, __addr_len);
498     }
499   return __recvfrom_alias (__fd, __buf, __n, __flags, __addr, __addr_len);
500 }
501 struct ttyent {
502  char *ty_name;
503  char *ty_getty;
504  char *ty_type;
505  int ty_status;
506  char *ty_window;
507  char *ty_comment;
508 };
509 extern struct ttyent *getttyent (void) __attribute__ ((__nothrow__ , __leaf__));
510 extern struct ttyent *getttynam (const char *__tty) __attribute__ ((__nothrow__ , __leaf__));
511 extern int setttyent (void) __attribute__ ((__nothrow__ , __leaf__));
512 extern int endttyent (void) __attribute__ ((__nothrow__ , __leaf__));
513 struct utimbuf
514   {
515     __time_t actime;
516     __time_t modtime;
517   };
518 extern int utime (const char *__file,
519     const struct utimbuf *__file_times)
520      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
521 extern int bcmp (const void *__s1, const void *__s2, size_t __n)
522      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__));
523 extern void bcopy (const void *__src, void *__dest, size_t __n) __attribute__ ((__nothrow__ , __leaf__));
524 extern void bzero (void *__s, size_t __n) __attribute__ ((__nothrow__ , __leaf__));
525 extern char *index (const char *__s, int __c)
526      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
527 extern char *rindex (const char *__s, int __c)
528      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
529 extern int ffs (int __i) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((const));
530 extern int strcasecmp (const char *__s1, const char *__s2)
531      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__));
532 extern int strncasecmp (const char *__s1, const char *__s2, size_t __n)
533      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__));
534 typedef struct __locale_struct
535 {
536   struct __locale_data *__locales[13];
537   const unsigned short int *__ctype_b;
538   const int *__ctype_tolower;
539   const int *__ctype_toupper;
540   const char *__names[13];
541 } *__locale_t;
542 typedef __locale_t locale_t;
543 extern int strcasecmp_l (const char *__s1, const char *__s2, __locale_t __loc)
544      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2, 3)));
545 extern int strncasecmp_l (const char *__s1, const char *__s2,
546      size_t __n, __locale_t __loc)
547      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2, 4)));
548 struct timezone
549   {
550     int tz_minuteswest;
551     int tz_dsttime;
552   };
553 typedef struct timezone *__restrict __timezone_ptr_t;
554 extern int gettimeofday (struct timeval *__restrict __tv,
555     __timezone_ptr_t __tz) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
556 extern int settimeofday (const struct timeval *__tv,
557     const struct timezone *__tz)
558      __attribute__ ((__nothrow__ , __leaf__));
559 extern int adjtime (const struct timeval *__delta,
560       struct timeval *__olddelta) __attribute__ ((__nothrow__ , __leaf__));
561 enum __itimer_which
562   {
563     ITIMER_REAL = 0,
564     ITIMER_VIRTUAL = 1,
565     ITIMER_PROF = 2
566   };
567 struct itimerval
568   {
569     struct timeval it_interval;
570     struct timeval it_value;
571   };
572 typedef enum __itimer_which __itimer_which_t;
573 extern int getitimer (__itimer_which_t __which,
574         struct itimerval *__value) __attribute__ ((__nothrow__ , __leaf__));
575 extern int setitimer (__itimer_which_t __which,
576         const struct itimerval *__restrict __new,
577         struct itimerval *__restrict __old) __attribute__ ((__nothrow__ , __leaf__));
578 extern int utimes (const char *__file, const struct timeval __tvp[2])
579      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
580 extern int lutimes (const char *__file, const struct timeval __tvp[2])
581      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
582 extern int futimes (int __fd, const struct timeval __tvp[2]) __attribute__ ((__nothrow__ , __leaf__));
583 extern int futimesat (int __fd, const char *__file,
584         const struct timeval __tvp[2]) __attribute__ ((__nothrow__ , __leaf__));
585 struct lastlog
586   {
587     __time_t ll_time;
588     char ll_line[32];
589     char ll_host[256];
590   };
591 struct exit_status
592   {
593     short int e_termination;
594     short int e_exit;
595   };
596 struct utmp
597 {
598   short int ut_type;
599   pid_t ut_pid;
600   char ut_line[32];
601   char ut_id[4];
602   char ut_user[32];
603   char ut_host[256];
604   struct exit_status ut_exit;
605   long int ut_session;
606   struct timeval ut_tv;
607   int32_t ut_addr_v6[4];
608   char __unused[20];
609 };
610 extern int login_tty (int __fd) __attribute__ ((__nothrow__ , __leaf__));
611 extern void login (const struct utmp *__entry) __attribute__ ((__nothrow__ , __leaf__));
612 extern int logout (const char *__ut_line) __attribute__ ((__nothrow__ , __leaf__));
613 extern void logwtmp (const char *__ut_line, const char *__ut_name,
614        const char *__ut_host) __attribute__ ((__nothrow__ , __leaf__));
615 extern void updwtmp (const char *__wtmp_file, const struct utmp *__utmp)
616      __attribute__ ((__nothrow__ , __leaf__));
617 extern int utmpname (const char *__file) __attribute__ ((__nothrow__ , __leaf__));
618 extern struct utmp *getutent (void) __attribute__ ((__nothrow__ , __leaf__));
619 extern void setutent (void) __attribute__ ((__nothrow__ , __leaf__));
620 extern void endutent (void) __attribute__ ((__nothrow__ , __leaf__));
621 extern struct utmp *getutid (const struct utmp *__id) __attribute__ ((__nothrow__ , __leaf__));
622 extern struct utmp *getutline (const struct utmp *__line) __attribute__ ((__nothrow__ , __leaf__));
623 extern struct utmp *pututline (const struct utmp *__utmp_ptr) __attribute__ ((__nothrow__ , __leaf__));
624 extern int getutent_r (struct utmp *__buffer, struct utmp **__result) __attribute__ ((__nothrow__ , __leaf__));
625 extern int getutid_r (const struct utmp *__id, struct utmp *__buffer,
626         struct utmp **__result) __attribute__ ((__nothrow__ , __leaf__));
627 extern int getutline_r (const struct utmp *__line,
628    struct utmp *__buffer, struct utmp **__result) __attribute__ ((__nothrow__ , __leaf__));
629 struct __exit_status
630   {
631     short int e_termination;
632     short int e_exit;
633   };
634 struct utmpx
635 {
636   short int ut_type;
637   __pid_t ut_pid;
638   char ut_line[32];
639   char ut_id[4];
640   char ut_user[32];
641   char ut_host[256];
642   struct __exit_status ut_exit;
643   long int ut_session;
644   struct timeval ut_tv;
645   __int32_t ut_addr_v6[4];
646   char __unused[20];
647 };
648 struct utmp;
649 extern void setutxent (void);
650 extern void endutxent (void);
651 extern struct utmpx *getutxent (void);
652 extern struct utmpx *getutxid (const struct utmpx *__id);
653 extern struct utmpx *getutxline (const struct utmpx *__line);
654 extern struct utmpx *pututxline (const struct utmpx *__utmpx);
655 extern int utmpxname (const char *__file);
656 extern void updwtmpx (const char *__wtmpx_file,
657         const struct utmpx *__utmpx);
658 extern void getutmp (const struct utmpx *__utmpx,
659        struct utmp *__utmp);
660 extern void getutmpx (const struct utmp *__utmp, struct utmpx *__utmpx);
661 typedef unsigned char uint8_t;
662 typedef unsigned short int uint16_t;
663 typedef unsigned int uint32_t;
664 __extension__
665 typedef unsigned long long int uint64_t;
666 typedef signed char int_least8_t;
667 typedef short int int_least16_t;
668 typedef int int_least32_t;
669 __extension__
670 typedef long long int int_least64_t;
671 typedef unsigned char uint_least8_t;
672 typedef unsigned short int uint_least16_t;
673 typedef unsigned int uint_least32_t;
674 __extension__
675 typedef unsigned long long int uint_least64_t;
676 typedef signed char int_fast8_t;
677 typedef int int_fast16_t;
678 typedef int int_fast32_t;
679 __extension__
680 typedef long long int int_fast64_t;
681 typedef unsigned char uint_fast8_t;
682 typedef unsigned int uint_fast16_t;
683 typedef unsigned int uint_fast32_t;
684 __extension__
685 typedef unsigned long long int uint_fast64_t;
686 typedef int intptr_t;
687 typedef unsigned int uintptr_t;
688 __extension__
689 typedef long long int intmax_t;
690 __extension__
691 typedef unsigned long long int uintmax_t;
692 typedef unsigned char cc_t;
693 typedef unsigned int speed_t;
694 typedef unsigned int tcflag_t;
695 struct termios
696   {
697     tcflag_t c_iflag;
698     tcflag_t c_oflag;
699     tcflag_t c_cflag;
700     tcflag_t c_lflag;
701     cc_t c_line;
702     cc_t c_cc[32];
703     speed_t c_ispeed;
704     speed_t c_ospeed;
705   };
706 extern speed_t cfgetospeed (const struct termios *__termios_p) __attribute__ ((__nothrow__ , __leaf__));
707 extern speed_t cfgetispeed (const struct termios *__termios_p) __attribute__ ((__nothrow__ , __leaf__));
708 extern int cfsetospeed (struct termios *__termios_p, speed_t __speed) __attribute__ ((__nothrow__ , __leaf__));
709 extern int cfsetispeed (struct termios *__termios_p, speed_t __speed) __attribute__ ((__nothrow__ , __leaf__));
710 extern int cfsetspeed (struct termios *__termios_p, speed_t __speed) __attribute__ ((__nothrow__ , __leaf__));
711 extern int tcgetattr (int __fd, struct termios *__termios_p) __attribute__ ((__nothrow__ , __leaf__));
712 extern int tcsetattr (int __fd, int __optional_actions,
713         const struct termios *__termios_p) __attribute__ ((__nothrow__ , __leaf__));
714 extern void cfmakeraw (struct termios *__termios_p) __attribute__ ((__nothrow__ , __leaf__));
715 extern int tcsendbreak (int __fd, int __duration) __attribute__ ((__nothrow__ , __leaf__));
716 extern int tcdrain (int __fd);
717 extern int tcflush (int __fd, int __queue_selector) __attribute__ ((__nothrow__ , __leaf__));
718 extern int tcflow (int __fd, int __action) __attribute__ ((__nothrow__ , __leaf__));
719 extern __pid_t tcgetsid (int __fd) __attribute__ ((__nothrow__ , __leaf__));
720 struct stat
721   {
722     __dev_t st_dev;
723     unsigned short int __pad1;
724     __ino_t __st_ino;
725     __mode_t st_mode;
726     __nlink_t st_nlink;
727     __uid_t st_uid;
728     __gid_t st_gid;
729     __dev_t st_rdev;
730     unsigned short int __pad2;
731     __off64_t st_size;
732     __blksize_t st_blksize;
733     __blkcnt64_t st_blocks;
734     struct timespec st_atim;
735     struct timespec st_mtim;
736     struct timespec st_ctim;
737     __ino64_t st_ino;
738   };
739 struct stat64
740   {
741     __dev_t st_dev;
742     unsigned int __pad1;
743     __ino_t __st_ino;
744     __mode_t st_mode;
745     __nlink_t st_nlink;
746     __uid_t st_uid;
747     __gid_t st_gid;
748     __dev_t st_rdev;
749     unsigned int __pad2;
750     __off64_t st_size;
751     __blksize_t st_blksize;
752     __blkcnt64_t st_blocks;
753     struct timespec st_atim;
754     struct timespec st_mtim;
755     struct timespec st_ctim;
756     __ino64_t st_ino;
757   };
758 extern int stat (const char *__restrict __file, struct stat *__restrict __buf) __asm__ ("" "stat64") __attribute__ ((__nothrow__ , __leaf__))
759      __attribute__ ((__nonnull__ (1, 2)));
760 extern int fstat (int __fd, struct stat *__buf) __asm__ ("" "fstat64") __attribute__ ((__nothrow__ , __leaf__))
761      __attribute__ ((__nonnull__ (2)));
762 extern int stat64 (const char *__restrict __file,
763      struct stat64 *__restrict __buf) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
764 extern int fstat64 (int __fd, struct stat64 *__buf) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)));
765 extern int fstatat (int __fd, const char *__restrict __file, struct stat *__restrict __buf, int __flag) __asm__ ("" "fstatat64") __attribute__ ((__nothrow__ , __leaf__))
766                  __attribute__ ((__nonnull__ (2, 3)));
767 extern int fstatat64 (int __fd, const char *__restrict __file,
768         struct stat64 *__restrict __buf, int __flag)
769      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2, 3)));
770 extern int lstat (const char *__restrict __file, struct stat *__restrict __buf) __asm__ ("" "lstat64") __attribute__ ((__nothrow__ , __leaf__))
771      __attribute__ ((__nonnull__ (1, 2)));
772 extern int lstat64 (const char *__restrict __file,
773       struct stat64 *__restrict __buf)
774      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
775 extern int chmod (const char *__file, __mode_t __mode)
776      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
777 extern int lchmod (const char *__file, __mode_t __mode)
778      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
779 extern int fchmod (int __fd, __mode_t __mode) __attribute__ ((__nothrow__ , __leaf__));
780 extern int fchmodat (int __fd, const char *__file, __mode_t __mode,
781        int __flag)
782      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2))) __attribute__ ((__warn_unused_result__));
783 extern __mode_t umask (__mode_t __mask) __attribute__ ((__nothrow__ , __leaf__));
784 extern __mode_t getumask (void) __attribute__ ((__nothrow__ , __leaf__));
785 extern int mkdir (const char *__path, __mode_t __mode)
786      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
787 extern int mkdirat (int __fd, const char *__path, __mode_t __mode)
788      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)));
789 extern int mknod (const char *__path, __mode_t __mode, __dev_t __dev)
790      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
791 extern int mknodat (int __fd, const char *__path, __mode_t __mode,
792       __dev_t __dev) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)));
793 extern int mkfifo (const char *__path, __mode_t __mode)
794      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
795 extern int mkfifoat (int __fd, const char *__path, __mode_t __mode)
796      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)));
797 extern int utimensat (int __fd, const char *__path,
798         const struct timespec __times[2],
799         int __flags)
800      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)));
801 extern int futimens (int __fd, const struct timespec __times[2]) __attribute__ ((__nothrow__ , __leaf__));
802 extern int __fxstat (int __ver, int __fildes, struct stat *__stat_buf) __asm__ ("" "__fxstat64") __attribute__ ((__nothrow__ , __leaf__))
803      __attribute__ ((__nonnull__ (3)));
804 extern int __xstat (int __ver, const char *__filename, struct stat *__stat_buf) __asm__ ("" "__xstat64") __attribute__ ((__nothrow__ , __leaf__))
805      __attribute__ ((__nonnull__ (2, 3)));
806 extern int __lxstat (int __ver, const char *__filename, struct stat *__stat_buf) __asm__ ("" "__lxstat64") __attribute__ ((__nothrow__ , __leaf__))
807      __attribute__ ((__nonnull__ (2, 3)));
808 extern int __fxstatat (int __ver, int __fildes, const char *__filename, struct stat *__stat_buf, int __flag) __asm__ ("" "__fxstatat64") __attribute__ ((__nothrow__ , __leaf__))
809                     __attribute__ ((__nonnull__ (3, 4)));
810 extern int __fxstat64 (int __ver, int __fildes, struct stat64 *__stat_buf)
811      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3)));
812 extern int __xstat64 (int __ver, const char *__filename,
813         struct stat64 *__stat_buf) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2, 3)));
814 extern int __lxstat64 (int __ver, const char *__filename,
815          struct stat64 *__stat_buf) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2, 3)));
816 extern int __fxstatat64 (int __ver, int __fildes, const char *__filename,
817     struct stat64 *__stat_buf, int __flag)
818      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3, 4)));
819 extern int __xmknod (int __ver, const char *__path, __mode_t __mode,
820        __dev_t *__dev) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2, 4)));
821 extern int __xmknodat (int __ver, int __fd, const char *__path,
822          __mode_t __mode, __dev_t *__dev)
823      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3, 5)));
824 extern __inline int
825 __attribute__ ((__nothrow__ , __leaf__)) stat (const char *__path, struct stat *__statbuf)
826 {
827   return __xstat (3, __path, __statbuf);
828 }
829 extern __inline int
830 __attribute__ ((__nothrow__ , __leaf__)) lstat (const char *__path, struct stat *__statbuf)
831 {
832   return __lxstat (3, __path, __statbuf);
833 }
834 extern __inline int
835 __attribute__ ((__nothrow__ , __leaf__)) fstat (int __fd, struct stat *__statbuf)
836 {
837   return __fxstat (3, __fd, __statbuf);
838 }
839 extern __inline int
840 __attribute__ ((__nothrow__ , __leaf__)) fstatat (int __fd, const char *__filename, struct stat *__statbuf, int __flag)
841 {
842   return __fxstatat (3, __fd, __filename, __statbuf, __flag);
843 }
844 extern __inline int
845 __attribute__ ((__nothrow__ , __leaf__)) mknod (const char *__path, __mode_t __mode, __dev_t __dev)
846 {
847   return __xmknod (1, __path, __mode, &__dev);
848 }
849 extern __inline int
850 __attribute__ ((__nothrow__ , __leaf__)) mknodat (int __fd, const char *__path, __mode_t __mode, __dev_t __dev)
851 {
852   return __xmknodat (1, __fd, __path, __mode, &__dev);
853 }
854 extern __inline int
855 __attribute__ ((__nothrow__ , __leaf__)) stat64 (const char *__path, struct stat64 *__statbuf)
856 {
857   return __xstat64 (3, __path, __statbuf);
858 }
859 extern __inline int
860 __attribute__ ((__nothrow__ , __leaf__)) lstat64 (const char *__path, struct stat64 *__statbuf)
861 {
862   return __lxstat64 (3, __path, __statbuf);
863 }
864 extern __inline int
865 __attribute__ ((__nothrow__ , __leaf__)) fstat64 (int __fd, struct stat64 *__statbuf)
866 {
867   return __fxstat64 (3, __fd, __statbuf);
868 }
869 extern __inline int
870 __attribute__ ((__nothrow__ , __leaf__)) fstatat64 (int __fd, const char *__filename, struct stat64 *__statbuf, int __flag)
871 {
872   return __fxstatat64 (3, __fd, __filename, __statbuf, __flag);
873 }
874 extern void * mmap (void *__addr, size_t __len, int __prot, int __flags, int __fd, __off64_t __offset) __asm__ ("" "mmap64") __attribute__ ((__nothrow__ , __leaf__))
875                 ;
876 extern void *mmap64 (void *__addr, size_t __len, int __prot,
877        int __flags, int __fd, __off64_t __offset) __attribute__ ((__nothrow__ , __leaf__));
878 extern int munmap (void *__addr, size_t __len) __attribute__ ((__nothrow__ , __leaf__));
879 extern int mprotect (void *__addr, size_t __len, int __prot) __attribute__ ((__nothrow__ , __leaf__));
880 extern int msync (void *__addr, size_t __len, int __flags);
881 extern int madvise (void *__addr, size_t __len, int __advice) __attribute__ ((__nothrow__ , __leaf__));
882 extern int posix_madvise (void *__addr, size_t __len, int __advice) __attribute__ ((__nothrow__ , __leaf__));
883 extern int mlock (const void *__addr, size_t __len) __attribute__ ((__nothrow__ , __leaf__));
884 extern int munlock (const void *__addr, size_t __len) __attribute__ ((__nothrow__ , __leaf__));
885 extern int mlockall (int __flags) __attribute__ ((__nothrow__ , __leaf__));
886 extern int munlockall (void) __attribute__ ((__nothrow__ , __leaf__));
887 extern int mincore (void *__start, size_t __len, unsigned char *__vec)
888      __attribute__ ((__nothrow__ , __leaf__));
889 extern void *mremap (void *__addr, size_t __old_len, size_t __new_len,
890        int __flags, ...) __attribute__ ((__nothrow__ , __leaf__));
891 extern int remap_file_pages (void *__start, size_t __size, int __prot,
892         size_t __pgoff, int __flags) __attribute__ ((__nothrow__ , __leaf__));
893 extern int shm_open (const char *__name, int __oflag, mode_t __mode);
894 extern int shm_unlink (const char *__name);
895 enum
896   {
897     IPPROTO_IP = 0,
898     IPPROTO_HOPOPTS = 0,
899     IPPROTO_ICMP = 1,
900     IPPROTO_IGMP = 2,
901     IPPROTO_IPIP = 4,
902     IPPROTO_TCP = 6,
903     IPPROTO_EGP = 8,
904     IPPROTO_PUP = 12,
905     IPPROTO_UDP = 17,
906     IPPROTO_IDP = 22,
907     IPPROTO_TP = 29,
908     IPPROTO_DCCP = 33,
909     IPPROTO_IPV6 = 41,
910     IPPROTO_ROUTING = 43,
911     IPPROTO_FRAGMENT = 44,
912     IPPROTO_RSVP = 46,
913     IPPROTO_GRE = 47,
914     IPPROTO_ESP = 50,
915     IPPROTO_AH = 51,
916     IPPROTO_ICMPV6 = 58,
917     IPPROTO_NONE = 59,
918     IPPROTO_DSTOPTS = 60,
919     IPPROTO_MTP = 92,
920     IPPROTO_ENCAP = 98,
921     IPPROTO_PIM = 103,
922     IPPROTO_COMP = 108,
923     IPPROTO_SCTP = 132,
924     IPPROTO_UDPLITE = 136,
925     IPPROTO_RAW = 255,
926     IPPROTO_MAX
927   };
928 typedef uint16_t in_port_t;
929 enum
930   {
931     IPPORT_ECHO = 7,
932     IPPORT_DISCARD = 9,
933     IPPORT_SYSTAT = 11,
934     IPPORT_DAYTIME = 13,
935     IPPORT_NETSTAT = 15,
936     IPPORT_FTP = 21,
937     IPPORT_TELNET = 23,
938     IPPORT_SMTP = 25,
939     IPPORT_TIMESERVER = 37,
940     IPPORT_NAMESERVER = 42,
941     IPPORT_WHOIS = 43,
942     IPPORT_MTP = 57,
943     IPPORT_TFTP = 69,
944     IPPORT_RJE = 77,
945     IPPORT_FINGER = 79,
946     IPPORT_TTYLINK = 87,
947     IPPORT_SUPDUP = 95,
948     IPPORT_EXECSERVER = 512,
949     IPPORT_LOGINSERVER = 513,
950     IPPORT_CMDSERVER = 514,
951     IPPORT_EFSSERVER = 520,
952     IPPORT_BIFFUDP = 512,
953     IPPORT_WHOSERVER = 513,
954     IPPORT_ROUTESERVER = 520,
955     IPPORT_RESERVED = 1024,
956     IPPORT_USERRESERVED = 5000
957   };
958 typedef uint32_t in_addr_t;
959 struct in_addr
960   {
961     in_addr_t s_addr;
962   };
963 struct in6_addr
964   {
965     union
966       {
967  uint8_t __u6_addr8[16];
968  uint16_t __u6_addr16[8];
969  uint32_t __u6_addr32[4];
970       } __in6_u;
971   };
972 extern const struct in6_addr in6addr_any;
973 extern const struct in6_addr in6addr_loopback;
974 struct sockaddr_in
975   {
976     sa_family_t sin_family;
977     in_port_t sin_port;
978     struct in_addr sin_addr;
979     unsigned char sin_zero[sizeof (struct sockaddr) -
980       (sizeof (unsigned short int)) -
981       sizeof (in_port_t) -
982       sizeof (struct in_addr)];
983   };
984 struct sockaddr_in6
985   {
986     sa_family_t sin6_family;
987     in_port_t sin6_port;
988     uint32_t sin6_flowinfo;
989     struct in6_addr sin6_addr;
990     uint32_t sin6_scope_id;
991   };
992 struct ip_mreq
993   {
994     struct in_addr imr_multiaddr;
995     struct in_addr imr_interface;
996   };
997 struct ip_mreq_source
998   {
999     struct in_addr imr_multiaddr;
1000     struct in_addr imr_interface;
1001     struct in_addr imr_sourceaddr;
1002   };
1003 struct ipv6_mreq
1004   {
1005     struct in6_addr ipv6mr_multiaddr;
1006     unsigned int ipv6mr_interface;
1007   };
1008 struct group_req
1009   {
1010     uint32_t gr_interface;
1011     struct sockaddr_storage gr_group;
1012   };
1013 struct group_source_req
1014   {
1015     uint32_t gsr_interface;
1016     struct sockaddr_storage gsr_group;
1017     struct sockaddr_storage gsr_source;
1018   };
1019 struct ip_msfilter
1020   {
1021     struct in_addr imsf_multiaddr;
1022     struct in_addr imsf_interface;
1023     uint32_t imsf_fmode;
1024     uint32_t imsf_numsrc;
1025     struct in_addr imsf_slist[1];
1026   };
1027 struct group_filter
1028   {
1029     uint32_t gf_interface;
1030     struct sockaddr_storage gf_group;
1031     uint32_t gf_fmode;
1032     uint32_t gf_numsrc;
1033     struct sockaddr_storage gf_slist[1];
1034 };
1035 struct ip_opts
1036   {
1037     struct in_addr ip_dst;
1038     char ip_opts[40];
1039   };
1040 struct ip_mreqn
1041   {
1042     struct in_addr imr_multiaddr;
1043     struct in_addr imr_address;
1044     int imr_ifindex;
1045   };
1046 struct in_pktinfo
1047   {
1048     int ipi_ifindex;
1049     struct in_addr ipi_spec_dst;
1050     struct in_addr ipi_addr;
1051   };
1052 extern uint32_t ntohl (uint32_t __netlong) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
1053 extern uint16_t ntohs (uint16_t __netshort)
1054      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
1055 extern uint32_t htonl (uint32_t __hostlong)
1056      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
1057 extern uint16_t htons (uint16_t __hostshort)
1058      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
1059 extern int bindresvport (int __sockfd, struct sockaddr_in *__sock_in) __attribute__ ((__nothrow__ , __leaf__));
1060 extern int bindresvport6 (int __sockfd, struct sockaddr_in6 *__sock_in)
1061      __attribute__ ((__nothrow__ , __leaf__));
1062 struct cmsghdr;
1063 struct in6_pktinfo
1064   {
1065     struct in6_addr ipi6_addr;
1066     unsigned int ipi6_ifindex;
1067   };
1068 struct ip6_mtuinfo
1069   {
1070     struct sockaddr_in6 ip6m_addr;
1071     uint32_t ip6m_mtu;
1072   };
1073 extern int inet6_option_space (int __nbytes)
1074      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__deprecated__));
1075 extern int inet6_option_init (void *__bp, struct cmsghdr **__cmsgp,
1076          int __type) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__deprecated__));
1077 extern int inet6_option_append (struct cmsghdr *__cmsg,
1078     const uint8_t *__typep, int __multx,
1079     int __plusy) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__deprecated__));
1080 extern uint8_t *inet6_option_alloc (struct cmsghdr *__cmsg, int __datalen,
1081         int __multx, int __plusy)
1082      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__deprecated__));
1083 extern int inet6_option_next (const struct cmsghdr *__cmsg,
1084          uint8_t **__tptrp)
1085      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__deprecated__));
1086 extern int inet6_option_find (const struct cmsghdr *__cmsg,
1087          uint8_t **__tptrp, int __type)
1088      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__deprecated__));
1089 extern int inet6_opt_init (void *__extbuf, socklen_t __extlen) __attribute__ ((__nothrow__ , __leaf__));
1090 extern int inet6_opt_append (void *__extbuf, socklen_t __extlen, int __offset,
1091         uint8_t __type, socklen_t __len, uint8_t __align,
1092         void **__databufp) __attribute__ ((__nothrow__ , __leaf__));
1093 extern int inet6_opt_finish (void *__extbuf, socklen_t __extlen, int __offset)
1094      __attribute__ ((__nothrow__ , __leaf__));
1095 extern int inet6_opt_set_val (void *__databuf, int __offset, void *__val,
1096          socklen_t __vallen) __attribute__ ((__nothrow__ , __leaf__));
1097 extern int inet6_opt_next (void *__extbuf, socklen_t __extlen, int __offset,
1098       uint8_t *__typep, socklen_t *__lenp,
1099       void **__databufp) __attribute__ ((__nothrow__ , __leaf__));
1100 extern int inet6_opt_find (void *__extbuf, socklen_t __extlen, int __offset,
1101       uint8_t __type, socklen_t *__lenp,
1102       void **__databufp) __attribute__ ((__nothrow__ , __leaf__));
1103 extern int inet6_opt_get_val (void *__databuf, int __offset, void *__val,
1104          socklen_t __vallen) __attribute__ ((__nothrow__ , __leaf__));
1105 extern socklen_t inet6_rth_space (int __type, int __segments) __attribute__ ((__nothrow__ , __leaf__));
1106 extern void *inet6_rth_init (void *__bp, socklen_t __bp_len, int __type,
1107         int __segments) __attribute__ ((__nothrow__ , __leaf__));
1108 extern int inet6_rth_add (void *__bp, const struct in6_addr *__addr) __attribute__ ((__nothrow__ , __leaf__));
1109 extern int inet6_rth_reverse (const void *__in, void *__out) __attribute__ ((__nothrow__ , __leaf__));
1110 extern int inet6_rth_segments (const void *__bp) __attribute__ ((__nothrow__ , __leaf__));
1111 extern struct in6_addr *inet6_rth_getaddr (const void *__bp, int __index)
1112      __attribute__ ((__nothrow__ , __leaf__));
1113 extern int getipv4sourcefilter (int __s, struct in_addr __interface_addr,
1114     struct in_addr __group, uint32_t *__fmode,
1115     uint32_t *__numsrc, struct in_addr *__slist)
1116      __attribute__ ((__nothrow__ , __leaf__));
1117 extern int setipv4sourcefilter (int __s, struct in_addr __interface_addr,
1118     struct in_addr __group, uint32_t __fmode,
1119     uint32_t __numsrc,
1120     const struct in_addr *__slist)
1121      __attribute__ ((__nothrow__ , __leaf__));
1122 extern int getsourcefilter (int __s, uint32_t __interface_addr,
1123        const struct sockaddr *__group,
1124        socklen_t __grouplen, uint32_t *__fmode,
1125        uint32_t *__numsrc,
1126        struct sockaddr_storage *__slist) __attribute__ ((__nothrow__ , __leaf__));
1127 extern int setsourcefilter (int __s, uint32_t __interface_addr,
1128        const struct sockaddr *__group,
1129        socklen_t __grouplen, uint32_t __fmode,
1130        uint32_t __numsrc,
1131        const struct sockaddr_storage *__slist) __attribute__ ((__nothrow__ , __leaf__));
1132 typedef u_int16_t n_short;
1133 typedef u_int32_t n_long;
1134 typedef u_int32_t n_time;
1135 typedef int bool_t;
1136 typedef int enum_t;
1137 typedef unsigned long rpcprog_t;
1138 typedef unsigned long rpcvers_t;
1139 typedef unsigned long rpcproc_t;
1140 typedef unsigned long rpcprot_t;
1141 typedef unsigned long rpcport_t;
1142 typedef long int wchar_t;
1143 union wait
1144   {
1145     int w_status;
1146     struct
1147       {
1148  unsigned int:16;
1149  unsigned int __w_retcode:8;
1150  unsigned int __w_coredump:1;
1151  unsigned int __w_termsig:7;
1152       } __wait_terminated;
1153     struct
1154       {
1155  unsigned int:16;
1156  unsigned int __w_stopsig:8;
1157  unsigned int __w_stopval:8;
1158       } __wait_stopped;
1159   };
1160 typedef union
1161   {
1162     union wait *__uptr;
1163     int *__iptr;
1164   } __WAIT_STATUS __attribute__ ((__transparent_union__));
1165 typedef struct
1166   {
1167     int quot;
1168     int rem;
1169   } div_t;
1170 typedef struct
1171   {
1172     long int quot;
1173     long int rem;
1174   } ldiv_t;
1175 __extension__ typedef struct
1176   {
1177     long long int quot;
1178     long long int rem;
1179   } lldiv_t;
1180 extern size_t __ctype_get_mb_cur_max (void) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
1181 extern double atof (const char *__nptr)
1182      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
1183 extern int atoi (const char *__nptr)
1184      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
1185 extern long int atol (const char *__nptr)
1186      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
1187 __extension__ extern long long int atoll (const char *__nptr)
1188      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
1189 extern double strtod (const char *__restrict __nptr,
1190         char **__restrict __endptr)
1191      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
1192 extern float strtof (const char *__restrict __nptr,
1193        char **__restrict __endptr) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
1194 extern long double strtold (const char *__restrict __nptr,
1195        char **__restrict __endptr)
1196      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
1197 extern long int strtol (const char *__restrict __nptr,
1198    char **__restrict __endptr, int __base)
1199      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
1200 extern unsigned long int strtoul (const char *__restrict __nptr,
1201       char **__restrict __endptr, int __base)
1202      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
1203 __extension__
1204 extern long long int strtoq (const char *__restrict __nptr,
1205         char **__restrict __endptr, int __base)
1206      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
1207 __extension__
1208 extern unsigned long long int strtouq (const char *__restrict __nptr,
1209            char **__restrict __endptr, int __base)
1210      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
1211 __extension__
1212 extern long long int strtoll (const char *__restrict __nptr,
1213          char **__restrict __endptr, int __base)
1214      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
1215 __extension__
1216 extern unsigned long long int strtoull (const char *__restrict __nptr,
1217      char **__restrict __endptr, int __base)
1218      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
1219 extern long int strtol_l (const char *__restrict __nptr,
1220      char **__restrict __endptr, int __base,
1221      __locale_t __loc) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 4)));
1222 extern unsigned long int strtoul_l (const char *__restrict __nptr,
1223         char **__restrict __endptr,
1224         int __base, __locale_t __loc)
1225      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 4)));
1226 __extension__
1227 extern long long int strtoll_l (const char *__restrict __nptr,
1228     char **__restrict __endptr, int __base,
1229     __locale_t __loc)
1230      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 4)));
1231 __extension__
1232 extern unsigned long long int strtoull_l (const char *__restrict __nptr,
1233        char **__restrict __endptr,
1234        int __base, __locale_t __loc)
1235      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 4)));
1236 extern double strtod_l (const char *__restrict __nptr,
1237    char **__restrict __endptr, __locale_t __loc)
1238      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 3)));
1239 extern float strtof_l (const char *__restrict __nptr,
1240          char **__restrict __endptr, __locale_t __loc)
1241      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 3)));
1242 extern long double strtold_l (const char *__restrict __nptr,
1243          char **__restrict __endptr,
1244          __locale_t __loc)
1245      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 3)));
1246 extern __inline int
1247 __attribute__ ((__nothrow__ , __leaf__)) atoi (const char *__nptr)
1248 {
1249   return (int) strtol (__nptr, (char **) ((void *)0), 10);
1250 }
1251 extern __inline long int
1252 __attribute__ ((__nothrow__ , __leaf__)) atol (const char *__nptr)
1253 {
1254   return strtol (__nptr, (char **) ((void *)0), 10);
1255 }
1256 __extension__ extern __inline long long int
1257 __attribute__ ((__nothrow__ , __leaf__)) atoll (const char *__nptr)
1258 {
1259   return strtoll (__nptr, (char **) ((void *)0), 10);
1260 }
1261 extern char *l64a (long int __n) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
1262 extern long int a64l (const char *__s)
1263      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
1264 extern long int random (void) __attribute__ ((__nothrow__ , __leaf__));
1265 extern void srandom (unsigned int __seed) __attribute__ ((__nothrow__ , __leaf__));
1266 extern char *initstate (unsigned int __seed, char *__statebuf,
1267    size_t __statelen) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)));
1268 extern char *setstate (char *__statebuf) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
1269 struct random_data
1270   {
1271     int32_t *fptr;
1272     int32_t *rptr;
1273     int32_t *state;
1274     int rand_type;
1275     int rand_deg;
1276     int rand_sep;
1277     int32_t *end_ptr;
1278   };
1279 extern int random_r (struct random_data *__restrict __buf,
1280        int32_t *__restrict __result) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
1281 extern int srandom_r (unsigned int __seed, struct random_data *__buf)
1282      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)));
1283 extern int initstate_r (unsigned int __seed, char *__restrict __statebuf,
1284    size_t __statelen,
1285    struct random_data *__restrict __buf)
1286      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2, 4)));
1287 extern int setstate_r (char *__restrict __statebuf,
1288          struct random_data *__restrict __buf)
1289      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
1290 extern int rand (void) __attribute__ ((__nothrow__ , __leaf__));
1291 extern void srand (unsigned int __seed) __attribute__ ((__nothrow__ , __leaf__));
1292 extern int rand_r (unsigned int *__seed) __attribute__ ((__nothrow__ , __leaf__));
1293 extern double drand48 (void) __attribute__ ((__nothrow__ , __leaf__));
1294 extern double erand48 (unsigned short int __xsubi[3]) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
1295 extern long int lrand48 (void) __attribute__ ((__nothrow__ , __leaf__));
1296 extern long int nrand48 (unsigned short int __xsubi[3])
1297      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
1298 extern long int mrand48 (void) __attribute__ ((__nothrow__ , __leaf__));
1299 extern long int jrand48 (unsigned short int __xsubi[3])
1300      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
1301 extern void srand48 (long int __seedval) __attribute__ ((__nothrow__ , __leaf__));
1302 extern unsigned short int *seed48 (unsigned short int __seed16v[3])
1303      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
1304 extern void lcong48 (unsigned short int __param[7]) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
1305 struct drand48_data
1306   {
1307     unsigned short int __x[3];
1308     unsigned short int __old_x[3];
1309     unsigned short int __c;
1310     unsigned short int __init;
1311     unsigned long long int __a;
1312   };
1313 extern int drand48_r (struct drand48_data *__restrict __buffer,
1314         double *__restrict __result) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
1315 extern int erand48_r (unsigned short int __xsubi[3],
1316         struct drand48_data *__restrict __buffer,
1317         double *__restrict __result) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
1318 extern int lrand48_r (struct drand48_data *__restrict __buffer,
1319         long int *__restrict __result)
1320      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
1321 extern int nrand48_r (unsigned short int __xsubi[3],
1322         struct drand48_data *__restrict __buffer,
1323         long int *__restrict __result)
1324      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
1325 extern int mrand48_r (struct drand48_data *__restrict __buffer,
1326         long int *__restrict __result)
1327      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
1328 extern int jrand48_r (unsigned short int __xsubi[3],
1329         struct drand48_data *__restrict __buffer,
1330         long int *__restrict __result)
1331      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
1332 extern int srand48_r (long int __seedval, struct drand48_data *__buffer)
1333      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)));
1334 extern int seed48_r (unsigned short int __seed16v[3],
1335        struct drand48_data *__buffer) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
1336 extern int lcong48_r (unsigned short int __param[7],
1337         struct drand48_data *__buffer)
1338      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
1339 extern void *malloc (size_t __size) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__malloc__)) __attribute__ ((__warn_unused_result__));
1340 extern void *calloc (size_t __nmemb, size_t __size)
1341      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__malloc__)) __attribute__ ((__warn_unused_result__));
1342 extern void *realloc (void *__ptr, size_t __size)
1343      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
1344 extern void free (void *__ptr) __attribute__ ((__nothrow__ , __leaf__));
1345 extern void cfree (void *__ptr) __attribute__ ((__nothrow__ , __leaf__));
1346 extern void *alloca (size_t __size) __attribute__ ((__nothrow__ , __leaf__));
1347 extern void *valloc (size_t __size) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__malloc__)) __attribute__ ((__warn_unused_result__));
1348 extern int posix_memalign (void **__memptr, size_t __alignment, size_t __size)
1349      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
1350 extern void *aligned_alloc (size_t __alignment, size_t __size)
1351      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__)) __attribute__ ((__malloc__, __alloc_size__ (2)));
1352 extern void abort (void) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__noreturn__));
1353 extern int atexit (void (*__func) (void)) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
1354 extern int at_quick_exit (void (*__func) (void)) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
1355 extern int on_exit (void (*__func) (int __status, void *__arg), void *__arg)
1356      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
1357 extern void exit (int __status) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__noreturn__));
1358 extern void quick_exit (int __status) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__noreturn__));
1359 extern void _Exit (int __status) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__noreturn__));
1360 extern char *getenv (const char *__name) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
1361 extern char *secure_getenv (const char *__name)
1362      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
1363 extern int putenv (char *__string) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
1364 extern int setenv (const char *__name, const char *__value, int __replace)
1365      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)));
1366 extern int unsetenv (const char *__name) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
1367 extern int clearenv (void) __attribute__ ((__nothrow__ , __leaf__));
1368 extern char *mktemp (char *__template) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
1369 extern int mkstemp (char *__template) __asm__ ("" "mkstemp64")
1370      __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
1371 extern int mkstemp64 (char *__template) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
1372 extern int mkstemps (char *__template, int __suffixlen) __asm__ ("" "mkstemps64")
1373                      __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
1374 extern int mkstemps64 (char *__template, int __suffixlen)
1375      __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
1376 extern char *mkdtemp (char *__template) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
1377 extern int mkostemp (char *__template, int __flags) __asm__ ("" "mkostemp64")
1378      __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
1379 extern int mkostemp64 (char *__template, int __flags) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
1380 extern int mkostemps (char *__template, int __suffixlen, int __flags) __asm__ ("" "mkostemps64")
1381      __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
1382 extern int mkostemps64 (char *__template, int __suffixlen, int __flags)
1383      __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
1384 extern int system (const char *__command) __attribute__ ((__warn_unused_result__));
1385 extern char *canonicalize_file_name (const char *__name)
1386      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
1387 extern char *realpath (const char *__restrict __name,
1388          char *__restrict __resolved) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
1389 typedef int (*__compar_fn_t) (const void *, const void *);
1390 typedef __compar_fn_t comparison_fn_t;
1391 typedef int (*__compar_d_fn_t) (const void *, const void *, void *);
1392 extern void *bsearch (const void *__key, const void *__base,
1393         size_t __nmemb, size_t __size, __compar_fn_t __compar)
1394      __attribute__ ((__nonnull__ (1, 2, 5))) __attribute__ ((__warn_unused_result__));
1395 extern void qsort (void *__base, size_t __nmemb, size_t __size,
1396      __compar_fn_t __compar) __attribute__ ((__nonnull__ (1, 4)));
1397 extern void qsort_r (void *__base, size_t __nmemb, size_t __size,
1398        __compar_d_fn_t __compar, void *__arg)
1399   __attribute__ ((__nonnull__ (1, 4)));
1400 extern int abs (int __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)) __attribute__ ((__warn_unused_result__));
1401 extern long int labs (long int __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)) __attribute__ ((__warn_unused_result__));
1402 __extension__ extern long long int llabs (long long int __x)
1403      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)) __attribute__ ((__warn_unused_result__));
1404 extern div_t div (int __numer, int __denom)
1405      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)) __attribute__ ((__warn_unused_result__));
1406 extern ldiv_t ldiv (long int __numer, long int __denom)
1407      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)) __attribute__ ((__warn_unused_result__));
1408 __extension__ extern lldiv_t lldiv (long long int __numer,
1409         long long int __denom)
1410      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)) __attribute__ ((__warn_unused_result__));
1411 extern char *ecvt (double __value, int __ndigit, int *__restrict __decpt,
1412      int *__restrict __sign) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3, 4))) __attribute__ ((__warn_unused_result__));
1413 extern char *fcvt (double __value, int __ndigit, int *__restrict __decpt,
1414      int *__restrict __sign) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3, 4))) __attribute__ ((__warn_unused_result__));
1415 extern char *gcvt (double __value, int __ndigit, char *__buf)
1416      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3))) __attribute__ ((__warn_unused_result__));
1417 extern char *qecvt (long double __value, int __ndigit,
1418       int *__restrict __decpt, int *__restrict __sign)
1419      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3, 4))) __attribute__ ((__warn_unused_result__));
1420 extern char *qfcvt (long double __value, int __ndigit,
1421       int *__restrict __decpt, int *__restrict __sign)
1422      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3, 4))) __attribute__ ((__warn_unused_result__));
1423 extern char *qgcvt (long double __value, int __ndigit, char *__buf)
1424      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3))) __attribute__ ((__warn_unused_result__));
1425 extern int ecvt_r (double __value, int __ndigit, int *__restrict __decpt,
1426      int *__restrict __sign, char *__restrict __buf,
1427      size_t __len) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3, 4, 5)));
1428 extern int fcvt_r (double __value, int __ndigit, int *__restrict __decpt,
1429      int *__restrict __sign, char *__restrict __buf,
1430      size_t __len) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3, 4, 5)));
1431 extern int qecvt_r (long double __value, int __ndigit,
1432       int *__restrict __decpt, int *__restrict __sign,
1433       char *__restrict __buf, size_t __len)
1434      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3, 4, 5)));
1435 extern int qfcvt_r (long double __value, int __ndigit,
1436       int *__restrict __decpt, int *__restrict __sign,
1437       char *__restrict __buf, size_t __len)
1438      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3, 4, 5)));
1439 extern int mblen (const char *__s, size_t __n) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
1440 extern int mbtowc (wchar_t *__restrict __pwc,
1441      const char *__restrict __s, size_t __n) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
1442 extern int wctomb (char *__s, wchar_t __wchar) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
1443 extern size_t mbstowcs (wchar_t *__restrict __pwcs,
1444    const char *__restrict __s, size_t __n) __attribute__ ((__nothrow__ , __leaf__));
1445 extern size_t wcstombs (char *__restrict __s,
1446    const wchar_t *__restrict __pwcs, size_t __n)
1447      __attribute__ ((__nothrow__ , __leaf__));
1448 extern int rpmatch (const char *__response) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
1449 extern int getsubopt (char **__restrict __optionp,
1450         char *const *__restrict __tokens,
1451         char **__restrict __valuep)
1452      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2, 3))) __attribute__ ((__warn_unused_result__));
1453 extern void setkey (const char *__key) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
1454 extern int posix_openpt (int __oflag) __attribute__ ((__warn_unused_result__));
1455 extern int grantpt (int __fd) __attribute__ ((__nothrow__ , __leaf__));
1456 extern int unlockpt (int __fd) __attribute__ ((__nothrow__ , __leaf__));
1457 extern char *ptsname (int __fd) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
1458 extern int ptsname_r (int __fd, char *__buf, size_t __buflen)
1459      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)));
1460 extern int getpt (void);
1461 extern int getloadavg (double __loadavg[], int __nelem)
1462      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
1463 extern __inline double
1464 __attribute__ ((__nothrow__ , __leaf__)) atof (const char *__nptr)
1465 {
1466   return strtod (__nptr, (char **) ((void *)0));
1467 }
1468 extern char *__realpath_chk (const char *__restrict __name,
1469         char *__restrict __resolved,
1470         size_t __resolvedlen) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
1471 extern char *__realpath_alias (const char *__restrict __name, char *__restrict __resolved) __asm__ ("" "realpath") __attribute__ ((__nothrow__ , __leaf__))
1472                                                  __attribute__ ((__warn_unused_result__));
1473 extern char *__realpath_chk_warn (const char *__restrict __name, char *__restrict __resolved, size_t __resolvedlen) __asm__ ("" "__realpath_chk") __attribute__ ((__nothrow__ , __leaf__))
1474                                                 __attribute__ ((__warn_unused_result__))
1475      __attribute__((__warning__ ("second argument of realpath must be either NULL or at " "least PATH_MAX bytes long buffer")))
1476                                       ;
1477 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) char *
1478 __attribute__ ((__nothrow__ , __leaf__)) realpath (const char *__restrict __name, char *__restrict __resolved)
1479 {
1480   if (__builtin_object_size (__resolved, 2 > 1) != (size_t) -1)
1481     {
1482       if (__builtin_object_size (__resolved, 2 > 1) < 4096)
1483  return __realpath_chk_warn (__name, __resolved, __builtin_object_size (__resolved, 2 > 1));
1484       return __realpath_chk (__name, __resolved, __builtin_object_size (__resolved, 2 > 1));
1485     }
1486   return __realpath_alias (__name, __resolved);
1487 }
1488 extern int __ptsname_r_chk (int __fd, char *__buf, size_t __buflen,
1489        size_t __nreal) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)));
1490 extern int __ptsname_r_alias (int __fd, char *__buf, size_t __buflen) __asm__ ("" "ptsname_r") __attribute__ ((__nothrow__ , __leaf__))
1491      __attribute__ ((__nonnull__ (2)));
1492 extern int __ptsname_r_chk_warn (int __fd, char *__buf, size_t __buflen, size_t __nreal) __asm__ ("" "__ptsname_r_chk") __attribute__ ((__nothrow__ , __leaf__))
1493      __attribute__ ((__nonnull__ (2))) __attribute__((__warning__ ("ptsname_r called with buflen bigger than " "size of buf")))
1494                    ;
1495 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__artificial__)) int
1496 __attribute__ ((__nothrow__ , __leaf__)) ptsname_r (int __fd, char *__buf, size_t __buflen)
1497 {
1498   if (__builtin_object_size (__buf, 2 > 1) != (size_t) -1)
1499     {
1500       if (!__builtin_constant_p (__buflen))
1501  return __ptsname_r_chk (__fd, __buf, __buflen, __builtin_object_size (__buf, 2 > 1));
1502       if (__buflen > __builtin_object_size (__buf, 2 > 1))
1503  return __ptsname_r_chk_warn (__fd, __buf, __buflen, __builtin_object_size (__buf, 2 > 1));
1504     }
1505   return __ptsname_r_alias (__fd, __buf, __buflen);
1506 }
1507 extern int __wctomb_chk (char *__s, wchar_t __wchar, size_t __buflen)
1508   __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
1509 extern int __wctomb_alias (char *__s, wchar_t __wchar) __asm__ ("" "wctomb") __attribute__ ((__nothrow__ , __leaf__))
1510               __attribute__ ((__warn_unused_result__));
1511 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) int
1512 __attribute__ ((__nothrow__ , __leaf__)) wctomb (char *__s, wchar_t __wchar)
1513 {
1514   if (__builtin_object_size (__s, 2 > 1) != (size_t) -1 && 16 > __builtin_object_size (__s, 2 > 1))
1515     return __wctomb_chk (__s, __wchar, __builtin_object_size (__s, 2 > 1));
1516   return __wctomb_alias (__s, __wchar);
1517 }
1518 extern size_t __mbstowcs_chk (wchar_t *__restrict __dst,
1519          const char *__restrict __src,
1520          size_t __len, size_t __dstlen) __attribute__ ((__nothrow__ , __leaf__));
1521 extern size_t __mbstowcs_alias (wchar_t *__restrict __dst, const char *__restrict __src, size_t __len) __asm__ ("" "mbstowcs") __attribute__ ((__nothrow__ , __leaf__))
1522                                   ;
1523 extern size_t __mbstowcs_chk_warn (wchar_t *__restrict __dst, const char *__restrict __src, size_t __len, size_t __dstlen) __asm__ ("" "__mbstowcs_chk") __attribute__ ((__nothrow__ , __leaf__))
1524      __attribute__((__warning__ ("mbstowcs called with dst buffer smaller than len " "* sizeof (wchar_t)")))
1525                         ;
1526 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__artificial__)) size_t
1527 __attribute__ ((__nothrow__ , __leaf__)) mbstowcs (wchar_t *__restrict __dst, const char *__restrict __src, size_t __len)
1528 {
1529   if (__builtin_object_size (__dst, 2 > 1) != (size_t) -1)
1530     {
1531       if (!__builtin_constant_p (__len))
1532  return __mbstowcs_chk (__dst, __src, __len,
1533           __builtin_object_size (__dst, 2 > 1) / sizeof (wchar_t));
1534       if (__len > __builtin_object_size (__dst, 2 > 1) / sizeof (wchar_t))
1535  return __mbstowcs_chk_warn (__dst, __src, __len,
1536          __builtin_object_size (__dst, 2 > 1) / sizeof (wchar_t));
1537     }
1538   return __mbstowcs_alias (__dst, __src, __len);
1539 }
1540 extern size_t __wcstombs_chk (char *__restrict __dst,
1541          const wchar_t *__restrict __src,
1542          size_t __len, size_t __dstlen) __attribute__ ((__nothrow__ , __leaf__));
1543 extern size_t __wcstombs_alias (char *__restrict __dst, const wchar_t *__restrict __src, size_t __len) __asm__ ("" "wcstombs") __attribute__ ((__nothrow__ , __leaf__))
1544                                   ;
1545 extern size_t __wcstombs_chk_warn (char *__restrict __dst, const wchar_t *__restrict __src, size_t __len, size_t __dstlen) __asm__ ("" "__wcstombs_chk") __attribute__ ((__nothrow__ , __leaf__))
1546      __attribute__((__warning__ ("wcstombs called with dst buffer smaller than len")));
1547 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__artificial__)) size_t
1548 __attribute__ ((__nothrow__ , __leaf__)) wcstombs (char *__restrict __dst, const wchar_t *__restrict __src, size_t __len)
1549 {
1550   if (__builtin_object_size (__dst, 2 > 1) != (size_t) -1)
1551     {
1552       if (!__builtin_constant_p (__len))
1553  return __wcstombs_chk (__dst, __src, __len, __builtin_object_size (__dst, 2 > 1));
1554       if (__len > __builtin_object_size (__dst, 2 > 1))
1555  return __wcstombs_chk_warn (__dst, __src, __len, __builtin_object_size (__dst, 2 > 1));
1556     }
1557   return __wcstombs_alias (__dst, __src, __len);
1558 }
1559 extern int __sigismember (const __sigset_t *, int);
1560 extern int __sigaddset (__sigset_t *, int);
1561 extern int __sigdelset (__sigset_t *, int);
1562 extern __inline int __sigismember (const __sigset_t *__set, int __sig) { unsigned long int __mask = (((unsigned long int) 1) << (((__sig) - 1) % (8 * sizeof (unsigned long int)))); unsigned long int __word = (((__sig) - 1) / (8 * sizeof (unsigned long int))); return (__set->__val[__word] & __mask) ? 1 : 0; }
1563 extern __inline int __sigaddset ( __sigset_t *__set, int __sig) { unsigned long int __mask = (((unsigned long int) 1) << (((__sig) - 1) % (8 * sizeof (unsigned long int)))); unsigned long int __word = (((__sig) - 1) / (8 * sizeof (unsigned long int))); return ((__set->__val[__word] |= __mask), 0); }
1564 extern __inline int __sigdelset ( __sigset_t *__set, int __sig) { unsigned long int __mask = (((unsigned long int) 1) << (((__sig) - 1) % (8 * sizeof (unsigned long int)))); unsigned long int __word = (((__sig) - 1) / (8 * sizeof (unsigned long int))); return ((__set->__val[__word] &= ~__mask), 0); }
1565 typedef __sig_atomic_t sig_atomic_t;
1566 typedef union sigval
1567   {
1568     int sival_int;
1569     void *sival_ptr;
1570   } sigval_t;
1571 typedef struct
1572   {
1573     int si_signo;
1574     int si_errno;
1575     int si_code;
1576     union
1577       {
1578  int _pad[((128 / sizeof (int)) - 3)];
1579  struct
1580    {
1581      __pid_t si_pid;
1582      __uid_t si_uid;
1583    } _kill;
1584  struct
1585    {
1586      int si_tid;
1587      int si_overrun;
1588      sigval_t si_sigval;
1589    } _timer;
1590  struct
1591    {
1592      __pid_t si_pid;
1593      __uid_t si_uid;
1594      sigval_t si_sigval;
1595    } _rt;
1596  struct
1597    {
1598      __pid_t si_pid;
1599      __uid_t si_uid;
1600      int si_status;
1601      __clock_t si_utime;
1602      __clock_t si_stime;
1603    } _sigchld;
1604  struct
1605    {
1606      void *si_addr;
1607    } _sigfault;
1608  struct
1609    {
1610      long int si_band;
1611      int si_fd;
1612    } _sigpoll;
1613  struct
1614    {
1615      void *_call_addr;
1616      int _syscall;
1617      unsigned int _arch;
1618    } _sigsys;
1619       } _sifields;
1620   } siginfo_t;
1621 enum
1622 {
1623   SI_ASYNCNL = -60,
1624   SI_TKILL = -6,
1625   SI_SIGIO,
1626   SI_ASYNCIO,
1627   SI_MESGQ,
1628   SI_TIMER,
1629   SI_QUEUE,
1630   SI_USER,
1631   SI_KERNEL = 0x80
1632 };
1633 enum
1634 {
1635   ILL_ILLOPC = 1,
1636   ILL_ILLOPN,
1637   ILL_ILLADR,
1638   ILL_ILLTRP,
1639   ILL_PRVOPC,
1640   ILL_PRVREG,
1641   ILL_COPROC,
1642   ILL_BADSTK
1643 };
1644 enum
1645 {
1646   FPE_INTDIV = 1,
1647   FPE_INTOVF,
1648   FPE_FLTDIV,
1649   FPE_FLTOVF,
1650   FPE_FLTUND,
1651   FPE_FLTRES,
1652   FPE_FLTINV,
1653   FPE_FLTSUB
1654 };
1655 enum
1656 {
1657   SEGV_MAPERR = 1,
1658   SEGV_ACCERR
1659 };
1660 enum
1661 {
1662   BUS_ADRALN = 1,
1663   BUS_ADRERR,
1664   BUS_OBJERR
1665 };
1666 enum
1667 {
1668   TRAP_BRKPT = 1,
1669   TRAP_TRACE
1670 };
1671 enum
1672 {
1673   CLD_EXITED = 1,
1674   CLD_KILLED,
1675   CLD_DUMPED,
1676   CLD_TRAPPED,
1677   CLD_STOPPED,
1678   CLD_CONTINUED
1679 };
1680 enum
1681 {
1682   POLL_IN = 1,
1683   POLL_OUT,
1684   POLL_MSG,
1685   POLL_ERR,
1686   POLL_PRI,
1687   POLL_HUP
1688 };
1689 typedef struct sigevent
1690   {
1691     sigval_t sigev_value;
1692     int sigev_signo;
1693     int sigev_notify;
1694     union
1695       {
1696  int _pad[((64 / sizeof (int)) - 3)];
1697  __pid_t _tid;
1698  struct
1699    {
1700      void (*_function) (sigval_t);
1701      pthread_attr_t *_attribute;
1702    } _sigev_thread;
1703       } _sigev_un;
1704   } sigevent_t;
1705 enum
1706 {
1707   SIGEV_SIGNAL = 0,
1708   SIGEV_NONE,
1709   SIGEV_THREAD,
1710   SIGEV_THREAD_ID = 4
1711 };
1712 typedef void (*__sighandler_t) (int);
1713 extern __sighandler_t __sysv_signal (int __sig, __sighandler_t __handler)
1714      __attribute__ ((__nothrow__ , __leaf__));
1715 extern __sighandler_t sysv_signal (int __sig, __sighandler_t __handler)
1716      __attribute__ ((__nothrow__ , __leaf__));
1717 extern __sighandler_t signal (int __sig, __sighandler_t __handler)
1718      __attribute__ ((__nothrow__ , __leaf__));
1719 extern __sighandler_t bsd_signal (int __sig, __sighandler_t __handler)
1720      __attribute__ ((__nothrow__ , __leaf__));
1721 extern int kill (__pid_t __pid, int __sig) __attribute__ ((__nothrow__ , __leaf__));
1722 extern int killpg (__pid_t __pgrp, int __sig) __attribute__ ((__nothrow__ , __leaf__));
1723 extern int raise (int __sig) __attribute__ ((__nothrow__ , __leaf__));
1724 extern __sighandler_t ssignal (int __sig, __sighandler_t __handler)
1725      __attribute__ ((__nothrow__ , __leaf__));
1726 extern int gsignal (int __sig) __attribute__ ((__nothrow__ , __leaf__));
1727 extern void psignal (int __sig, const char *__s);
1728 extern void psiginfo (const siginfo_t *__pinfo, const char *__s);
1729 extern int __sigpause (int __sig_or_mask, int __is_sig);
1730 extern int sigpause (int __sig) __asm__ ("__xpg_sigpause");
1731 extern int sigblock (int __mask) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__deprecated__));
1732 extern int sigsetmask (int __mask) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__deprecated__));
1733 extern int siggetmask (void) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__deprecated__));
1734 typedef __sighandler_t sighandler_t;
1735 typedef __sighandler_t sig_t;
1736 extern int sigemptyset (sigset_t *__set) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
1737 extern int sigfillset (sigset_t *__set) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
1738 extern int sigaddset (sigset_t *__set, int __signo) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
1739 extern int sigdelset (sigset_t *__set, int __signo) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
1740 extern int sigismember (const sigset_t *__set, int __signo)
1741      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
1742 extern int sigisemptyset (const sigset_t *__set) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
1743 extern int sigandset (sigset_t *__set, const sigset_t *__left,
1744         const sigset_t *__right) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2, 3)));
1745 extern int sigorset (sigset_t *__set, const sigset_t *__left,
1746        const sigset_t *__right) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2, 3)));
1747 struct sigaction
1748   {
1749     union
1750       {
1751  __sighandler_t sa_handler;
1752  void (*sa_sigaction) (int, siginfo_t *, void *);
1753       }
1754     __sigaction_handler;
1755     unsigned long int sa_flags;
1756     __sigset_t sa_mask;
1757   };
1758 extern int sigprocmask (int __how, const sigset_t *__restrict __set,
1759    sigset_t *__restrict __oset) __attribute__ ((__nothrow__ , __leaf__));
1760 extern int sigsuspend (const sigset_t *__set) __attribute__ ((__nonnull__ (1)));
1761 extern int sigaction (int __sig, const struct sigaction *__restrict __act,
1762         struct sigaction *__restrict __oact) __attribute__ ((__nothrow__ , __leaf__));
1763 extern int sigpending (sigset_t *__set) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
1764 extern int sigwait (const sigset_t *__restrict __set, int *__restrict __sig)
1765      __attribute__ ((__nonnull__ (1, 2)));
1766 extern int sigwaitinfo (const sigset_t *__restrict __set,
1767    siginfo_t *__restrict __info) __attribute__ ((__nonnull__ (1)));
1768 extern int sigtimedwait (const sigset_t *__restrict __set,
1769     siginfo_t *__restrict __info,
1770     const struct timespec *__restrict __timeout)
1771      __attribute__ ((__nonnull__ (1)));
1772 extern int sigqueue (__pid_t __pid, int __sig, const union sigval __val)
1773      __attribute__ ((__nothrow__ , __leaf__));
1774 extern const char *const _sys_siglist[65];
1775 extern const char *const sys_siglist[65];
1776 struct sigvec
1777   {
1778     __sighandler_t sv_handler;
1779     int sv_mask;
1780     int sv_flags;
1781   };
1782 extern int sigvec (int __sig, const struct sigvec *__vec,
1783      struct sigvec *__ovec) __attribute__ ((__nothrow__ , __leaf__));
1784 struct sigcontext {
1785  unsigned long sc_flags;
1786  unsigned long sc_gr[32];
1787  unsigned long long sc_fr[32];
1788  unsigned long sc_iasq[2];
1789  unsigned long sc_iaoq[2];
1790  unsigned long sc_sar;
1791 };
1792 extern int sigreturn (struct sigcontext *__scp) __attribute__ ((__nothrow__ , __leaf__));
1793 extern int siginterrupt (int __sig, int __interrupt) __attribute__ ((__nothrow__ , __leaf__));
1794 struct sigstack
1795   {
1796     void *ss_sp;
1797     int ss_onstack;
1798   };
1799 enum
1800 {
1801   SS_ONSTACK = 1,
1802   SS_DISABLE
1803 };
1804 typedef struct sigaltstack
1805   {
1806     void *ss_sp;
1807     int ss_flags;
1808     size_t ss_size;
1809   } stack_t;
1810 typedef unsigned long int greg_t;
1811 typedef struct gregset
1812   {
1813     greg_t g_regs[32];
1814     greg_t sr_regs[8];
1815     greg_t cr_regs[24];
1816     greg_t g_pad[16];
1817   } gregset_t;
1818 typedef struct fpregset
1819   {
1820     double fp_dregs[32];
1821   } fpregset_t;
1822 typedef struct sigcontext mcontext_t;
1823 typedef struct ucontext
1824   {
1825     unsigned long int uc_flags;
1826     struct ucontext *uc_link;
1827     stack_t uc_stack;
1828     mcontext_t uc_mcontext;
1829     __sigset_t uc_sigmask;
1830   } ucontext_t;
1831 extern int sigstack (struct sigstack *__ss, struct sigstack *__oss)
1832      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__deprecated__));
1833 extern int sigaltstack (const struct sigaltstack *__restrict __ss,
1834    struct sigaltstack *__restrict __oss) __attribute__ ((__nothrow__ , __leaf__));
1835 extern int sighold (int __sig) __attribute__ ((__nothrow__ , __leaf__));
1836 extern int sigrelse (int __sig) __attribute__ ((__nothrow__ , __leaf__));
1837 extern int sigignore (int __sig) __attribute__ ((__nothrow__ , __leaf__));
1838 extern __sighandler_t sigset (int __sig, __sighandler_t __disp) __attribute__ ((__nothrow__ , __leaf__));
1839 extern int pthread_sigmask (int __how,
1840        const __sigset_t *__restrict __newmask,
1841        __sigset_t *__restrict __oldmask)__attribute__ ((__nothrow__ , __leaf__));
1842 extern int pthread_kill (pthread_t __threadid, int __signo) __attribute__ ((__nothrow__ , __leaf__));
1843 extern int pthread_sigqueue (pthread_t __threadid, int __signo,
1844         const union sigval __value) __attribute__ ((__nothrow__ , __leaf__));
1845 extern int __libc_current_sigrtmin (void) __attribute__ ((__nothrow__ , __leaf__));
1846 extern int __libc_current_sigrtmax (void) __attribute__ ((__nothrow__ , __leaf__));
1847 extern int *__errno_location (void) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
1848 extern char *program_invocation_name, *program_invocation_short_name;
1849 typedef int error_t;
1850 struct timestamp
1851   {
1852     u_int8_t len;
1853     u_int8_t ptr;
1854     unsigned int overflow:4;
1855     unsigned int flags:4;
1856     u_int32_t data[9];
1857   };
1858 struct iphdr
1859   {
1860     unsigned int version:4;
1861     unsigned int ihl:4;
1862     u_int8_t tos;
1863     u_int16_t tot_len;
1864     u_int16_t id;
1865     u_int16_t frag_off;
1866     u_int8_t ttl;
1867     u_int8_t protocol;
1868     u_int16_t check;
1869     u_int32_t saddr;
1870     u_int32_t daddr;
1871   };
1872 struct ip
1873   {
1874     unsigned int ip_v:4;
1875     unsigned int ip_hl:4;
1876     u_int8_t ip_tos;
1877     u_short ip_len;
1878     u_short ip_id;
1879     u_short ip_off;
1880     u_int8_t ip_ttl;
1881     u_int8_t ip_p;
1882     u_short ip_sum;
1883     struct in_addr ip_src, ip_dst;
1884   };
1885 struct ip_timestamp
1886   {
1887     u_int8_t ipt_code;
1888     u_int8_t ipt_len;
1889     u_int8_t ipt_ptr;
1890     unsigned int ipt_oflw:4;
1891     unsigned int ipt_flg:4;
1892     u_int32_t data[9];
1893   };
1894 struct passwd
1895 {
1896   char *pw_name;
1897   char *pw_passwd;
1898   __uid_t pw_uid;
1899   __gid_t pw_gid;
1900   char *pw_gecos;
1901   char *pw_dir;
1902   char *pw_shell;
1903 };
1904 struct _IO_FILE;
1905 typedef struct _IO_FILE FILE;
1906 extern void setpwent (void);
1907 extern void endpwent (void);
1908 extern struct passwd *getpwent (void);
1909 extern struct passwd *fgetpwent (FILE *__stream);
1910 extern int putpwent (const struct passwd *__restrict __p,
1911        FILE *__restrict __f);
1912 extern struct passwd *getpwuid (__uid_t __uid);
1913 extern struct passwd *getpwnam (const char *__name);
1914 extern int getpwent_r (struct passwd *__restrict __resultbuf,
1915          char *__restrict __buffer, size_t __buflen,
1916          struct passwd **__restrict __result);
1917 extern int getpwuid_r (__uid_t __uid,
1918          struct passwd *__restrict __resultbuf,
1919          char *__restrict __buffer, size_t __buflen,
1920          struct passwd **__restrict __result);
1921 extern int getpwnam_r (const char *__restrict __name,
1922          struct passwd *__restrict __resultbuf,
1923          char *__restrict __buffer, size_t __buflen,
1924          struct passwd **__restrict __result);
1925 extern int fgetpwent_r (FILE *__restrict __stream,
1926    struct passwd *__restrict __resultbuf,
1927    char *__restrict __buffer, size_t __buflen,
1928    struct passwd **__restrict __result);
1929 extern int getpw (__uid_t __uid, char *__buffer);
1930 void platform_pre_listen(void);
1931 void platform_pre_fork(void);
1932 void platform_pre_restart(void);
1933 void platform_post_fork_parent(pid_t child_pid);
1934 void platform_post_fork_child(void);
1935 int platform_privileged_uidswap(void);
1936 void platform_setusercontext(struct passwd *);
1937 void platform_setusercontext_post_groups(struct passwd *);
1938 char *platform_get_krb5_client(const char *);
1939 char *platform_krb5_get_principal_name(const char *);
1940 int platform_sys_dir_uid(uid_t);
1941 int b64_ntop(u_char const *src, size_t srclength, char *target,
1942     size_t targsize);
1943 int b64_pton(char const *src, u_char *target, size_t targsize);
1944 struct stat;
1945 typedef struct {
1946  int gl_pathc;
1947  int gl_matchc;
1948  int gl_offs;
1949  int gl_flags;
1950  char **gl_pathv;
1951  struct stat **gl_statv;
1952  int (*gl_errfunc)(const char *, int);
1953  void (*gl_closedir)(void *);
1954  struct dirent *(*gl_readdir)(void *);
1955  void *(*gl_opendir)(const char *);
1956  int (*gl_lstat)(const char *, struct stat *);
1957  int (*gl_stat)(const char *, struct stat *);
1958 } glob_t;
1959 int glob(const char *, int, int (*)(const char *, int), glob_t *);
1960 void globfree(glob_t *);
1961 char * readpassphrase(const char *, char *, size_t, int);
1962 char *vis(char *, int, int, int);
1963 int strvis(char *, const char *, int);
1964 int strnvis(char *, const char *, size_t, int)
1965   __attribute__ (());
1966 int strvisx(char *, const char *, size_t, int)
1967   __attribute__ (());
1968 int strunvis(char *, const char *);
1969 int unvis(char *, char, int *, int);
1970 ssize_t strnunvis(char *, const char *, size_t)
1971   __attribute__ (());
1972 typedef enum __ns_sect {
1973  ns_s_qd = 0,
1974  ns_s_zn = 0,
1975  ns_s_an = 1,
1976  ns_s_pr = 1,
1977  ns_s_ns = 2,
1978  ns_s_ud = 2,
1979  ns_s_ar = 3,
1980  ns_s_max = 4
1981 } ns_sect;
1982 typedef struct __ns_msg {
1983  const u_char *_msg, *_eom;
1984  u_int16_t _id, _flags, _counts[ns_s_max];
1985  const u_char *_sections[ns_s_max];
1986  ns_sect _sect;
1987  int _rrnum;
1988  const u_char *_msg_ptr;
1989 } ns_msg;
1990 struct _ns_flagdata { int mask, shift; };
1991 extern const struct _ns_flagdata _ns_flagdata[];
1992 typedef struct __ns_rr {
1993  char name[1025];
1994  u_int16_t type;
1995  u_int16_t rr_class;
1996  u_int32_t ttl;
1997  u_int16_t rdlength;
1998  const u_char * rdata;
1999 } ns_rr;
2000 typedef enum __ns_flag {
2001  ns_f_qr,
2002  ns_f_opcode,
2003  ns_f_aa,
2004  ns_f_tc,
2005  ns_f_rd,
2006  ns_f_ra,
2007  ns_f_z,
2008  ns_f_ad,
2009  ns_f_cd,
2010  ns_f_rcode,
2011  ns_f_max
2012 } ns_flag;
2013 typedef enum __ns_opcode {
2014  ns_o_query = 0,
2015  ns_o_iquery = 1,
2016  ns_o_status = 2,
2017  ns_o_notify = 4,
2018  ns_o_update = 5,
2019  ns_o_max = 6
2020 } ns_opcode;
2021 typedef enum __ns_rcode {
2022  ns_r_noerror = 0,
2023  ns_r_formerr = 1,
2024  ns_r_servfail = 2,
2025  ns_r_nxdomain = 3,
2026  ns_r_notimpl = 4,
2027  ns_r_refused = 5,
2028  ns_r_yxdomain = 6,
2029  ns_r_yxrrset = 7,
2030  ns_r_nxrrset = 8,
2031  ns_r_notauth = 9,
2032  ns_r_notzone = 10,
2033  ns_r_max = 11,
2034  ns_r_badvers = 16,
2035  ns_r_badsig = 16,
2036  ns_r_badkey = 17,
2037  ns_r_badtime = 18
2038 } ns_rcode;
2039 typedef enum __ns_update_operation {
2040  ns_uop_delete = 0,
2041  ns_uop_add = 1,
2042  ns_uop_max = 2
2043 } ns_update_operation;
2044 struct ns_tsig_key {
2045         char name[1025], alg[1025];
2046         unsigned char *data;
2047         int len;
2048 };
2049 typedef struct ns_tsig_key ns_tsig_key;
2050 struct ns_tcp_tsig_state {
2051  int counter;
2052  struct dst_key *key;
2053  void *ctx;
2054  unsigned char sig[512];
2055  int siglen;
2056 };
2057 typedef struct ns_tcp_tsig_state ns_tcp_tsig_state;
2058 typedef enum __ns_type {
2059  ns_t_invalid = 0,
2060  ns_t_a = 1,
2061  ns_t_ns = 2,
2062  ns_t_md = 3,
2063  ns_t_mf = 4,
2064  ns_t_cname = 5,
2065  ns_t_soa = 6,
2066  ns_t_mb = 7,
2067  ns_t_mg = 8,
2068  ns_t_mr = 9,
2069  ns_t_null = 10,
2070  ns_t_wks = 11,
2071  ns_t_ptr = 12,
2072  ns_t_hinfo = 13,
2073  ns_t_minfo = 14,
2074  ns_t_mx = 15,
2075  ns_t_txt = 16,
2076  ns_t_rp = 17,
2077  ns_t_afsdb = 18,
2078  ns_t_x25 = 19,
2079  ns_t_isdn = 20,
2080  ns_t_rt = 21,
2081  ns_t_nsap = 22,
2082  ns_t_nsap_ptr = 23,
2083  ns_t_sig = 24,
2084  ns_t_key = 25,
2085  ns_t_px = 26,
2086  ns_t_gpos = 27,
2087  ns_t_aaaa = 28,
2088  ns_t_loc = 29,
2089  ns_t_nxt = 30,
2090  ns_t_eid = 31,
2091  ns_t_nimloc = 32,
2092  ns_t_srv = 33,
2093  ns_t_atma = 34,
2094  ns_t_naptr = 35,
2095  ns_t_kx = 36,
2096  ns_t_cert = 37,
2097  ns_t_a6 = 38,
2098  ns_t_dname = 39,
2099  ns_t_sink = 40,
2100  ns_t_opt = 41,
2101  ns_t_apl = 42,
2102  ns_t_tkey = 249,
2103  ns_t_tsig = 250,
2104  ns_t_ixfr = 251,
2105  ns_t_axfr = 252,
2106  ns_t_mailb = 253,
2107  ns_t_maila = 254,
2108  ns_t_any = 255,
2109  ns_t_zxfr = 256,
2110  ns_t_max = 65536
2111 } ns_type;
2112 typedef enum __ns_class {
2113  ns_c_invalid = 0,
2114  ns_c_in = 1,
2115  ns_c_2 = 2,
2116  ns_c_chaos = 3,
2117  ns_c_hs = 4,
2118  ns_c_none = 254,
2119  ns_c_any = 255,
2120  ns_c_max = 65536
2121 } ns_class;
2122 typedef enum __ns_key_types {
2123  ns_kt_rsa = 1,
2124  ns_kt_dh = 2,
2125  ns_kt_dsa = 3,
2126  ns_kt_private = 254
2127 } ns_key_types;
2128 typedef enum __ns_cert_types {
2129  cert_t_pkix = 1,
2130  cert_t_spki = 2,
2131  cert_t_pgp = 3,
2132  cert_t_url = 253,
2133  cert_t_oid = 254
2134 } ns_cert_types;
2135 int ns_msg_getflag (ns_msg, int) __attribute__ ((__nothrow__ , __leaf__));
2136 u_int ns_get16 (const u_char *) __attribute__ ((__nothrow__ , __leaf__));
2137 u_long ns_get32 (const u_char *) __attribute__ ((__nothrow__ , __leaf__));
2138 void ns_put16 (u_int, u_char *) __attribute__ ((__nothrow__ , __leaf__));
2139 void ns_put32 (u_long, u_char *) __attribute__ ((__nothrow__ , __leaf__));
2140 int ns_initparse (const u_char *, int, ns_msg *) __attribute__ ((__nothrow__ , __leaf__));
2141 int ns_skiprr (const u_char *, const u_char *, ns_sect, int)
2142      __attribute__ ((__nothrow__ , __leaf__));
2143 int ns_parserr (ns_msg *, ns_sect, int, ns_rr *) __attribute__ ((__nothrow__ , __leaf__));
2144 int ns_sprintrr (const ns_msg *, const ns_rr *,
2145         const char *, const char *, char *, size_t)
2146      __attribute__ ((__nothrow__ , __leaf__));
2147 int ns_sprintrrf (const u_char *, size_t, const char *,
2148          ns_class, ns_type, u_long, const u_char *,
2149          size_t, const char *, const char *,
2150          char *, size_t) __attribute__ ((__nothrow__ , __leaf__));
2151 int ns_format_ttl (u_long, char *, size_t) __attribute__ ((__nothrow__ , __leaf__));
2152 int ns_parse_ttl (const char *, u_long *) __attribute__ ((__nothrow__ , __leaf__));
2153 u_int32_t ns_datetosecs (const char *, int *) __attribute__ ((__nothrow__ , __leaf__));
2154 int ns_name_ntol (const u_char *, u_char *, size_t) __attribute__ ((__nothrow__ , __leaf__));
2155 int ns_name_ntop (const u_char *, char *, size_t) __attribute__ ((__nothrow__ , __leaf__));
2156 int ns_name_pton (const char *, u_char *, size_t) __attribute__ ((__nothrow__ , __leaf__));
2157 int ns_name_unpack (const u_char *, const u_char *,
2158     const u_char *, u_char *, size_t) __attribute__ ((__nothrow__ , __leaf__));
2159 int ns_name_pack (const u_char *, u_char *, int,
2160          const u_char **, const u_char **) __attribute__ ((__nothrow__ , __leaf__));
2161 int ns_name_uncompress (const u_char *, const u_char *,
2162         const u_char *, char *, size_t) __attribute__ ((__nothrow__ , __leaf__));
2163 int ns_name_compress (const char *, u_char *, size_t,
2164       const u_char **, const u_char **) __attribute__ ((__nothrow__ , __leaf__));
2165 int ns_name_skip (const u_char **, const u_char *) __attribute__ ((__nothrow__ , __leaf__));
2166 void ns_name_rollback (const u_char *, const u_char **,
2167       const u_char **) __attribute__ ((__nothrow__ , __leaf__));
2168 int ns_sign (u_char *, int *, int, int, void *,
2169     const u_char *, int, u_char *, int *, time_t) __attribute__ ((__nothrow__ , __leaf__));
2170 int ns_sign2 (u_char *, int *, int, int, void *,
2171      const u_char *, int, u_char *, int *, time_t,
2172      u_char **, u_char **) __attribute__ ((__nothrow__ , __leaf__));
2173 int ns_sign_tcp (u_char *, int *, int, int,
2174         ns_tcp_tsig_state *, int) __attribute__ ((__nothrow__ , __leaf__));
2175 int ns_sign_tcp2 (u_char *, int *, int, int,
2176          ns_tcp_tsig_state *, int,
2177          u_char **, u_char **) __attribute__ ((__nothrow__ , __leaf__));
2178 int ns_sign_tcp_init (void *, const u_char *, int,
2179       ns_tcp_tsig_state *) __attribute__ ((__nothrow__ , __leaf__));
2180 u_char *ns_find_tsig (u_char *, u_char *) __attribute__ ((__nothrow__ , __leaf__));
2181 int ns_verify (u_char *, int *, void *, const u_char *, int,
2182       u_char *, int *, time_t *, int) __attribute__ ((__nothrow__ , __leaf__));
2183 int ns_verify_tcp (u_char *, int *, ns_tcp_tsig_state *, int)
2184      __attribute__ ((__nothrow__ , __leaf__));
2185 int ns_verify_tcp_init (void *, const u_char *, int,
2186         ns_tcp_tsig_state *) __attribute__ ((__nothrow__ , __leaf__));
2187 int ns_samedomain (const char *, const char *) __attribute__ ((__nothrow__ , __leaf__));
2188 int ns_subdomain (const char *, const char *) __attribute__ ((__nothrow__ , __leaf__));
2189 int ns_makecanon (const char *, char *, size_t) __attribute__ ((__nothrow__ , __leaf__));
2190 int ns_samename (const char *, const char *) __attribute__ ((__nothrow__ , __leaf__));
2191 typedef struct {
2192  unsigned id :16;
2193  unsigned qr: 1;
2194  unsigned opcode: 4;
2195  unsigned aa: 1;
2196  unsigned tc: 1;
2197  unsigned rd: 1;
2198  unsigned ra: 1;
2199  unsigned unused :1;
2200  unsigned ad: 1;
2201  unsigned cd: 1;
2202  unsigned rcode :4;
2203  unsigned qdcount :16;
2204  unsigned ancount :16;
2205  unsigned nscount :16;
2206  unsigned arcount :16;
2207 } HEADER;
2208 struct rpcent
2209 {
2210   char *r_name;
2211   char **r_aliases;
2212   int r_number;
2213 };
2214 extern void setrpcent (int __stayopen) __attribute__ ((__nothrow__ , __leaf__));
2215 extern void endrpcent (void) __attribute__ ((__nothrow__ , __leaf__));
2216 extern struct rpcent *getrpcbyname (const char *__name) __attribute__ ((__nothrow__ , __leaf__));
2217 extern struct rpcent *getrpcbynumber (int __number) __attribute__ ((__nothrow__ , __leaf__));
2218 extern struct rpcent *getrpcent (void) __attribute__ ((__nothrow__ , __leaf__));
2219 extern int getrpcbyname_r (const char *__name, struct rpcent *__result_buf,
2220       char *__buffer, size_t __buflen,
2221       struct rpcent **__result) __attribute__ ((__nothrow__ , __leaf__));
2222 extern int getrpcbynumber_r (int __number, struct rpcent *__result_buf,
2223         char *__buffer, size_t __buflen,
2224         struct rpcent **__result) __attribute__ ((__nothrow__ , __leaf__));
2225 extern int getrpcent_r (struct rpcent *__result_buf, char *__buffer,
2226    size_t __buflen, struct rpcent **__result) __attribute__ ((__nothrow__ , __leaf__));
2227 struct netent
2228 {
2229   char *n_name;
2230   char **n_aliases;
2231   int n_addrtype;
2232   uint32_t n_net;
2233 };
2234 extern int *__h_errno_location (void) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
2235 extern void herror (const char *__str) __attribute__ ((__nothrow__ , __leaf__));
2236 extern const char *hstrerror (int __err_num) __attribute__ ((__nothrow__ , __leaf__));
2237 struct hostent
2238 {
2239   char *h_name;
2240   char **h_aliases;
2241   int h_addrtype;
2242   int h_length;
2243   char **h_addr_list;
2244 };
2245 extern void sethostent (int __stay_open);
2246 extern void endhostent (void);
2247 extern struct hostent *gethostent (void);
2248 extern struct hostent *gethostbyaddr (const void *__addr, __socklen_t __len,
2249           int __type);
2250 extern struct hostent *gethostbyname (const char *__name);
2251 extern struct hostent *gethostbyname2 (const char *__name, int __af);
2252 extern int gethostent_r (struct hostent *__restrict __result_buf,
2253     char *__restrict __buf, size_t __buflen,
2254     struct hostent **__restrict __result,
2255     int *__restrict __h_errnop);
2256 extern int gethostbyaddr_r (const void *__restrict __addr, __socklen_t __len,
2257        int __type,
2258        struct hostent *__restrict __result_buf,
2259        char *__restrict __buf, size_t __buflen,
2260        struct hostent **__restrict __result,
2261        int *__restrict __h_errnop);
2262 extern int gethostbyname_r (const char *__restrict __name,
2263        struct hostent *__restrict __result_buf,
2264        char *__restrict __buf, size_t __buflen,
2265        struct hostent **__restrict __result,
2266        int *__restrict __h_errnop);
2267 extern int gethostbyname2_r (const char *__restrict __name, int __af,
2268         struct hostent *__restrict __result_buf,
2269         char *__restrict __buf, size_t __buflen,
2270         struct hostent **__restrict __result,
2271         int *__restrict __h_errnop);
2272 extern void setnetent (int __stay_open);
2273 extern void endnetent (void);
2274 extern struct netent *getnetent (void);
2275 extern struct netent *getnetbyaddr (uint32_t __net, int __type);
2276 extern struct netent *getnetbyname (const char *__name);
2277 extern int getnetent_r (struct netent *__restrict __result_buf,
2278    char *__restrict __buf, size_t __buflen,
2279    struct netent **__restrict __result,
2280    int *__restrict __h_errnop);
2281 extern int getnetbyaddr_r (uint32_t __net, int __type,
2282       struct netent *__restrict __result_buf,
2283       char *__restrict __buf, size_t __buflen,
2284       struct netent **__restrict __result,
2285       int *__restrict __h_errnop);
2286 extern int getnetbyname_r (const char *__restrict __name,
2287       struct netent *__restrict __result_buf,
2288       char *__restrict __buf, size_t __buflen,
2289       struct netent **__restrict __result,
2290       int *__restrict __h_errnop);
2291 struct servent
2292 {
2293   char *s_name;
2294   char **s_aliases;
2295   int s_port;
2296   char *s_proto;
2297 };
2298 extern void setservent (int __stay_open);
2299 extern void endservent (void);
2300 extern struct servent *getservent (void);
2301 extern struct servent *getservbyname (const char *__name, const char *__proto);
2302 extern struct servent *getservbyport (int __port, const char *__proto);
2303 extern int getservent_r (struct servent *__restrict __result_buf,
2304     char *__restrict __buf, size_t __buflen,
2305     struct servent **__restrict __result);
2306 extern int getservbyname_r (const char *__restrict __name,
2307        const char *__restrict __proto,
2308        struct servent *__restrict __result_buf,
2309        char *__restrict __buf, size_t __buflen,
2310        struct servent **__restrict __result);
2311 extern int getservbyport_r (int __port, const char *__restrict __proto,
2312        struct servent *__restrict __result_buf,
2313        char *__restrict __buf, size_t __buflen,
2314        struct servent **__restrict __result);
2315 struct protoent
2316 {
2317   char *p_name;
2318   char **p_aliases;
2319   int p_proto;
2320 };
2321 extern void setprotoent (int __stay_open);
2322 extern void endprotoent (void);
2323 extern struct protoent *getprotoent (void);
2324 extern struct protoent *getprotobyname (const char *__name);
2325 extern struct protoent *getprotobynumber (int __proto);
2326 extern int getprotoent_r (struct protoent *__restrict __result_buf,
2327      char *__restrict __buf, size_t __buflen,
2328      struct protoent **__restrict __result);
2329 extern int getprotobyname_r (const char *__restrict __name,
2330         struct protoent *__restrict __result_buf,
2331         char *__restrict __buf, size_t __buflen,
2332         struct protoent **__restrict __result);
2333 extern int getprotobynumber_r (int __proto,
2334           struct protoent *__restrict __result_buf,
2335           char *__restrict __buf, size_t __buflen,
2336           struct protoent **__restrict __result);
2337 extern int setnetgrent (const char *__netgroup);
2338 extern void endnetgrent (void);
2339 extern int getnetgrent (char **__restrict __hostp,
2340    char **__restrict __userp,
2341    char **__restrict __domainp);
2342 extern int innetgr (const char *__netgroup, const char *__host,
2343       const char *__user, const char *__domain);
2344 extern int getnetgrent_r (char **__restrict __hostp,
2345      char **__restrict __userp,
2346      char **__restrict __domainp,
2347      char *__restrict __buffer, size_t __buflen);
2348 extern int rcmd (char **__restrict __ahost, unsigned short int __rport,
2349    const char *__restrict __locuser,
2350    const char *__restrict __remuser,
2351    const char *__restrict __cmd, int *__restrict __fd2p);
2352 extern int rcmd_af (char **__restrict __ahost, unsigned short int __rport,
2353       const char *__restrict __locuser,
2354       const char *__restrict __remuser,
2355       const char *__restrict __cmd, int *__restrict __fd2p,
2356       sa_family_t __af);
2357 extern int rexec (char **__restrict __ahost, int __rport,
2358     const char *__restrict __name,
2359     const char *__restrict __pass,
2360     const char *__restrict __cmd, int *__restrict __fd2p);
2361 extern int rexec_af (char **__restrict __ahost, int __rport,
2362        const char *__restrict __name,
2363        const char *__restrict __pass,
2364        const char *__restrict __cmd, int *__restrict __fd2p,
2365        sa_family_t __af);
2366 extern int ruserok (const char *__rhost, int __suser,
2367       const char *__remuser, const char *__locuser);
2368 extern int ruserok_af (const char *__rhost, int __suser,
2369          const char *__remuser, const char *__locuser,
2370          sa_family_t __af);
2371 extern int iruserok (uint32_t __raddr, int __suser,
2372        const char *__remuser, const char *__locuser);
2373 extern int iruserok_af (const void *__raddr, int __suser,
2374    const char *__remuser, const char *__locuser,
2375    sa_family_t __af);
2376 extern int rresvport (int *__alport);
2377 extern int rresvport_af (int *__alport, sa_family_t __af);
2378 struct addrinfo
2379 {
2380   int ai_flags;
2381   int ai_family;
2382   int ai_socktype;
2383   int ai_protocol;
2384   socklen_t ai_addrlen;
2385   struct sockaddr *ai_addr;
2386   char *ai_canonname;
2387   struct addrinfo *ai_next;
2388 };
2389 struct gaicb
2390 {
2391   const char *ar_name;
2392   const char *ar_service;
2393   const struct addrinfo *ar_request;
2394   struct addrinfo *ar_result;
2395   int __return;
2396   int __unused[5];
2397 };
2398 extern int getaddrinfo (const char *__restrict __name,
2399    const char *__restrict __service,
2400    const struct addrinfo *__restrict __req,
2401    struct addrinfo **__restrict __pai);
2402 extern void freeaddrinfo (struct addrinfo *__ai) __attribute__ ((__nothrow__ , __leaf__));
2403 extern const char *gai_strerror (int __ecode) __attribute__ ((__nothrow__ , __leaf__));
2404 extern int getnameinfo (const struct sockaddr *__restrict __sa,
2405    socklen_t __salen, char *__restrict __host,
2406    socklen_t __hostlen, char *__restrict __serv,
2407    socklen_t __servlen, int __flags);
2408 extern int getaddrinfo_a (int __mode, struct gaicb *__list[__restrict],
2409      int __ent, struct sigevent *__restrict __sig);
2410 extern int gai_suspend (const struct gaicb *const __list[], int __ent,
2411    const struct timespec *__timeout);
2412 extern int gai_error (struct gaicb *__req) __attribute__ ((__nothrow__ , __leaf__));
2413 extern int gai_cancel (struct gaicb *__gaicbp) __attribute__ ((__nothrow__ , __leaf__));
2414 typedef struct _IO_FILE __FILE;
2415 typedef struct
2416 {
2417   int __count;
2418   union
2419   {
2420     unsigned int __wch;
2421     char __wchb[4];
2422   } __value;
2423 } __mbstate_t;
2424 typedef struct
2425 {
2426   __off_t __pos;
2427   __mbstate_t __state;
2428 } _G_fpos_t;
2429 typedef struct
2430 {
2431   __off64_t __pos;
2432   __mbstate_t __state;
2433 } _G_fpos64_t;
2434 typedef __builtin_va_list __gnuc_va_list;
2435 struct _IO_jump_t; struct _IO_FILE;
2436 typedef void _IO_lock_t;
2437 struct _IO_marker {
2438   struct _IO_marker *_next;
2439   struct _IO_FILE *_sbuf;
2440   int _pos;
2441 };
2442 enum __codecvt_result
2443 {
2444   __codecvt_ok,
2445   __codecvt_partial,
2446   __codecvt_error,
2447   __codecvt_noconv
2448 };
2449 struct _IO_FILE {
2450   int _flags;
2451   char* _IO_read_ptr;
2452   char* _IO_read_end;
2453   char* _IO_read_base;
2454   char* _IO_write_base;
2455   char* _IO_write_ptr;
2456   char* _IO_write_end;
2457   char* _IO_buf_base;
2458   char* _IO_buf_end;
2459   char *_IO_save_base;
2460   char *_IO_backup_base;
2461   char *_IO_save_end;
2462   struct _IO_marker *_markers;
2463   struct _IO_FILE *_chain;
2464   int _fileno;
2465   int _flags2;
2466   __off_t _old_offset;
2467   unsigned short _cur_column;
2468   signed char _vtable_offset;
2469   char _shortbuf[1];
2470   _IO_lock_t *_lock;
2471   __off64_t _offset;
2472   void *__pad1;
2473   void *__pad2;
2474   void *__pad3;
2475   void *__pad4;
2476   size_t __pad5;
2477   int _mode;
2478   char _unused2[15 * sizeof (int) - 4 * sizeof (void *) - sizeof (size_t)];
2479 };
2480 typedef struct _IO_FILE _IO_FILE;
2481 struct _IO_FILE_plus;
2482 extern struct _IO_FILE_plus _IO_2_1_stdin_;
2483 extern struct _IO_FILE_plus _IO_2_1_stdout_;
2484 extern struct _IO_FILE_plus _IO_2_1_stderr_;
2485 typedef __ssize_t __io_read_fn (void *__cookie, char *__buf, size_t __nbytes);
2486 typedef __ssize_t __io_write_fn (void *__cookie, const char *__buf,
2487      size_t __n);
2488 typedef int __io_seek_fn (void *__cookie, __off64_t *__pos, int __w);
2489 typedef int __io_close_fn (void *__cookie);
2490 typedef __io_read_fn cookie_read_function_t;
2491 typedef __io_write_fn cookie_write_function_t;
2492 typedef __io_seek_fn cookie_seek_function_t;
2493 typedef __io_close_fn cookie_close_function_t;
2494 typedef struct
2495 {
2496   __io_read_fn *read;
2497   __io_write_fn *write;
2498   __io_seek_fn *seek;
2499   __io_close_fn *close;
2500 } _IO_cookie_io_functions_t;
2501 typedef _IO_cookie_io_functions_t cookie_io_functions_t;
2502 struct _IO_cookie_file;
2503 extern void _IO_cookie_init (struct _IO_cookie_file *__cfile, int __read_write,
2504         void *__cookie, _IO_cookie_io_functions_t __fns);
2505 extern int __underflow (_IO_FILE *);
2506 extern int __uflow (_IO_FILE *);
2507 extern int __overflow (_IO_FILE *, int);
2508 extern int _IO_getc (_IO_FILE *__fp);
2509 extern int _IO_putc (int __c, _IO_FILE *__fp);
2510 extern int _IO_feof (_IO_FILE *__fp) __attribute__ ((__nothrow__ , __leaf__));
2511 extern int _IO_ferror (_IO_FILE *__fp) __attribute__ ((__nothrow__ , __leaf__));
2512 extern int _IO_peekc_locked (_IO_FILE *__fp);
2513 extern void _IO_flockfile (_IO_FILE *) __attribute__ ((__nothrow__ , __leaf__));
2514 extern void _IO_funlockfile (_IO_FILE *) __attribute__ ((__nothrow__ , __leaf__));
2515 extern int _IO_ftrylockfile (_IO_FILE *) __attribute__ ((__nothrow__ , __leaf__));
2516 extern int _IO_vfscanf (_IO_FILE * __restrict, const char * __restrict,
2517    __gnuc_va_list, int *__restrict);
2518 extern int _IO_vfprintf (_IO_FILE *__restrict, const char *__restrict,
2519     __gnuc_va_list);
2520 extern __ssize_t _IO_padn (_IO_FILE *, int, __ssize_t);
2521 extern size_t _IO_sgetn (_IO_FILE *, void *, size_t);
2522 extern __off64_t _IO_seekoff (_IO_FILE *, __off64_t, int, int);
2523 extern __off64_t _IO_seekpos (_IO_FILE *, __off64_t, int);
2524 extern void _IO_free_backup_area (_IO_FILE *) __attribute__ ((__nothrow__ , __leaf__));
2525 typedef __gnuc_va_list va_list;
2526 typedef _G_fpos64_t fpos_t;
2527 typedef _G_fpos64_t fpos64_t;
2528 extern struct _IO_FILE *stdin;
2529 extern struct _IO_FILE *stdout;
2530 extern struct _IO_FILE *stderr;
2531 extern int remove (const char *__filename) __attribute__ ((__nothrow__ , __leaf__));
2532 extern int rename (const char *__old, const char *__new) __attribute__ ((__nothrow__ , __leaf__));
2533 extern int renameat (int __oldfd, const char *__old, int __newfd,
2534        const char *__new) __attribute__ ((__nothrow__ , __leaf__));
2535 extern FILE *tmpfile (void) __asm__ ("" "tmpfile64") __attribute__ ((__warn_unused_result__));
2536 extern FILE *tmpfile64 (void) __attribute__ ((__warn_unused_result__));
2537 extern char *tmpnam (char *__s) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
2538 extern char *tmpnam_r (char *__s) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
2539 extern char *tempnam (const char *__dir, const char *__pfx)
2540      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__malloc__)) __attribute__ ((__warn_unused_result__));
2541 extern int fclose (FILE *__stream);
2542 extern int fflush (FILE *__stream);
2543 extern int fflush_unlocked (FILE *__stream);
2544 extern int fcloseall (void);
2545 extern FILE *fopen (const char *__restrict __filename, const char *__restrict __modes) __asm__ ("" "fopen64")
2546   __attribute__ ((__warn_unused_result__));
2547 extern FILE *freopen (const char *__restrict __filename, const char *__restrict __modes, FILE *__restrict __stream) __asm__ ("" "freopen64")
2548   __attribute__ ((__warn_unused_result__));
2549 extern FILE *fopen64 (const char *__restrict __filename,
2550         const char *__restrict __modes) __attribute__ ((__warn_unused_result__));
2551 extern FILE *freopen64 (const char *__restrict __filename,
2552    const char *__restrict __modes,
2553    FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));
2554 extern FILE *fdopen (int __fd, const char *__modes) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
2555 extern FILE *fopencookie (void *__restrict __magic_cookie,
2556      const char *__restrict __modes,
2557      _IO_cookie_io_functions_t __io_funcs) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
2558 extern FILE *fmemopen (void *__s, size_t __len, const char *__modes)
2559   __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
2560 extern FILE *open_memstream (char **__bufloc, size_t *__sizeloc) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
2561 extern void setbuf (FILE *__restrict __stream, char *__restrict __buf) __attribute__ ((__nothrow__ , __leaf__));
2562 extern int setvbuf (FILE *__restrict __stream, char *__restrict __buf,
2563       int __modes, size_t __n) __attribute__ ((__nothrow__ , __leaf__));
2564 extern void setbuffer (FILE *__restrict __stream, char *__restrict __buf,
2565          size_t __size) __attribute__ ((__nothrow__ , __leaf__));
2566 extern void setlinebuf (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__));
2567 extern int fprintf (FILE *__restrict __stream,
2568       const char *__restrict __format, ...);
2569 extern int printf (const char *__restrict __format, ...);
2570 extern int sprintf (char *__restrict __s,
2571       const char *__restrict __format, ...) __attribute__ ((__nothrow__));
2572 extern int vfprintf (FILE *__restrict __s, const char *__restrict __format,
2573        __gnuc_va_list __arg);
2574 extern int vprintf (const char *__restrict __format, __gnuc_va_list __arg);
2575 extern int vsprintf (char *__restrict __s, const char *__restrict __format,
2576        __gnuc_va_list __arg) __attribute__ ((__nothrow__));
2577 extern int snprintf (char *__restrict __s, size_t __maxlen,
2578        const char *__restrict __format, ...)
2579      __attribute__ ((__nothrow__)) __attribute__ ((__format__ (__printf__, 3, 4)));
2580 extern int vsnprintf (char *__restrict __s, size_t __maxlen,
2581         const char *__restrict __format, __gnuc_va_list __arg)
2582      __attribute__ ((__nothrow__)) __attribute__ ((__format__ (__printf__, 3, 0)));
2583 extern int vasprintf (char **__restrict __ptr, const char *__restrict __f,
2584         __gnuc_va_list __arg)
2585      __attribute__ ((__nothrow__)) __attribute__ ((__format__ (__printf__, 2, 0))) __attribute__ ((__warn_unused_result__));
2586 extern int __asprintf (char **__restrict __ptr,
2587          const char *__restrict __fmt, ...)
2588      __attribute__ ((__nothrow__)) __attribute__ ((__format__ (__printf__, 2, 3))) __attribute__ ((__warn_unused_result__));
2589 extern int asprintf (char **__restrict __ptr,
2590        const char *__restrict __fmt, ...)
2591      __attribute__ ((__nothrow__)) __attribute__ ((__format__ (__printf__, 2, 3))) __attribute__ ((__warn_unused_result__));
2592 extern int vdprintf (int __fd, const char *__restrict __fmt,
2593        __gnuc_va_list __arg)
2594      __attribute__ ((__format__ (__printf__, 2, 0)));
2595 extern int dprintf (int __fd, const char *__restrict __fmt, ...)
2596      __attribute__ ((__format__ (__printf__, 2, 3)));
2597 extern int fscanf (FILE *__restrict __stream,
2598      const char *__restrict __format, ...) __attribute__ ((__warn_unused_result__));
2599 extern int scanf (const char *__restrict __format, ...) __attribute__ ((__warn_unused_result__));
2600 extern int sscanf (const char *__restrict __s,
2601      const char *__restrict __format, ...) __attribute__ ((__nothrow__ , __leaf__));
2602 extern int vfscanf (FILE *__restrict __s, const char *__restrict __format,
2603       __gnuc_va_list __arg)
2604      __attribute__ ((__format__ (__scanf__, 2, 0))) __attribute__ ((__warn_unused_result__));
2605 extern int vscanf (const char *__restrict __format, __gnuc_va_list __arg)
2606      __attribute__ ((__format__ (__scanf__, 1, 0))) __attribute__ ((__warn_unused_result__));
2607 extern int vsscanf (const char *__restrict __s,
2608       const char *__restrict __format, __gnuc_va_list __arg)
2609      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__format__ (__scanf__, 2, 0)));
2610 extern int fgetc (FILE *__stream);
2611 extern int getc (FILE *__stream);
2612 extern int getchar (void);
2613 extern int getc_unlocked (FILE *__stream);
2614 extern int getchar_unlocked (void);
2615 extern int fgetc_unlocked (FILE *__stream);
2616 extern int fputc (int __c, FILE *__stream);
2617 extern int putc (int __c, FILE *__stream);
2618 extern int putchar (int __c);
2619 extern int fputc_unlocked (int __c, FILE *__stream);
2620 extern int putc_unlocked (int __c, FILE *__stream);
2621 extern int putchar_unlocked (int __c);
2622 extern int getw (FILE *__stream);
2623 extern int putw (int __w, FILE *__stream);
2624 extern char *fgets (char *__restrict __s, int __n, FILE *__restrict __stream)
2625      __attribute__ ((__warn_unused_result__));
2626 extern char *fgets_unlocked (char *__restrict __s, int __n,
2627         FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));
2628 extern __ssize_t __getdelim (char **__restrict __lineptr,
2629           size_t *__restrict __n, int __delimiter,
2630           FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));
2631 extern __ssize_t getdelim (char **__restrict __lineptr,
2632         size_t *__restrict __n, int __delimiter,
2633         FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));
2634 extern __ssize_t getline (char **__restrict __lineptr,
2635        size_t *__restrict __n,
2636        FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));
2637 extern int fputs (const char *__restrict __s, FILE *__restrict __stream);
2638 extern int puts (const char *__s);
2639 extern int ungetc (int __c, FILE *__stream);
2640 extern size_t fread (void *__restrict __ptr, size_t __size,
2641        size_t __n, FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));
2642 extern size_t fwrite (const void *__restrict __ptr, size_t __size,
2643         size_t __n, FILE *__restrict __s);
2644 extern int fputs_unlocked (const char *__restrict __s,
2645       FILE *__restrict __stream);
2646 extern size_t fread_unlocked (void *__restrict __ptr, size_t __size,
2647          size_t __n, FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));
2648 extern size_t fwrite_unlocked (const void *__restrict __ptr, size_t __size,
2649           size_t __n, FILE *__restrict __stream);
2650 extern int fseek (FILE *__stream, long int __off, int __whence);
2651 extern long int ftell (FILE *__stream) __attribute__ ((__warn_unused_result__));
2652 extern void rewind (FILE *__stream);
2653 extern int fseeko (FILE *__stream, __off64_t __off, int __whence) __asm__ ("" "fseeko64")
2654                   ;
2655 extern __off64_t ftello (FILE *__stream) __asm__ ("" "ftello64");
2656 extern int fgetpos (FILE *__restrict __stream, fpos_t *__restrict __pos) __asm__ ("" "fgetpos64")
2657                                           ;
2658 extern int fsetpos (FILE *__stream, const fpos_t *__pos) __asm__ ("" "fsetpos64")
2659                                                           ;
2660 extern int fseeko64 (FILE *__stream, __off64_t __off, int __whence);
2661 extern __off64_t ftello64 (FILE *__stream) __attribute__ ((__warn_unused_result__));
2662 extern int fgetpos64 (FILE *__restrict __stream, fpos64_t *__restrict __pos);
2663 extern int fsetpos64 (FILE *__stream, const fpos64_t *__pos);
2664 extern void clearerr (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__));
2665 extern int feof (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
2666 extern int ferror (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
2667 extern void clearerr_unlocked (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__));
2668 extern int feof_unlocked (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
2669 extern int ferror_unlocked (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
2670 extern void perror (const char *__s);
2671 extern int sys_nerr;
2672 extern const char *const sys_errlist[];
2673 extern int _sys_nerr;
2674 extern const char *const _sys_errlist[];
2675 extern int fileno (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
2676 extern int fileno_unlocked (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
2677 extern FILE *popen (const char *__command, const char *__modes) __attribute__ ((__warn_unused_result__));
2678 extern int pclose (FILE *__stream);
2679 extern char *ctermid (char *__s) __attribute__ ((__nothrow__ , __leaf__));
2680 extern char *cuserid (char *__s);
2681 struct obstack;
2682 extern int obstack_printf (struct obstack *__restrict __obstack,
2683       const char *__restrict __format, ...)
2684      __attribute__ ((__nothrow__)) __attribute__ ((__format__ (__printf__, 2, 3)));
2685 extern int obstack_vprintf (struct obstack *__restrict __obstack,
2686        const char *__restrict __format,
2687        __gnuc_va_list __args)
2688      __attribute__ ((__nothrow__)) __attribute__ ((__format__ (__printf__, 2, 0)));
2689 extern void flockfile (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__));
2690 extern int ftrylockfile (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
2691 extern void funlockfile (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__));
2692 extern __inline int
2693 getchar (void)
2694 {
2695   return _IO_getc (stdin);
2696 }
2697 extern __inline int
2698 fgetc_unlocked (FILE *__fp)
2699 {
2700   return (__builtin_expect (((__fp)->_IO_read_ptr >= (__fp)->_IO_read_end), 0) ? __uflow (__fp) : *(unsigned char *) (__fp)->_IO_read_ptr++);
2701 }
2702 extern __inline int
2703 getc_unlocked (FILE *__fp)
2704 {
2705   return (__builtin_expect (((__fp)->_IO_read_ptr >= (__fp)->_IO_read_end), 0) ? __uflow (__fp) : *(unsigned char *) (__fp)->_IO_read_ptr++);
2706 }
2707 extern __inline int
2708 getchar_unlocked (void)
2709 {
2710   return (__builtin_expect (((stdin)->_IO_read_ptr >= (stdin)->_IO_read_end), 0) ? __uflow (stdin) : *(unsigned char *) (stdin)->_IO_read_ptr++);
2711 }
2712 extern __inline int
2713 putchar (int __c)
2714 {
2715   return _IO_putc (__c, stdout);
2716 }
2717 extern __inline int
2718 fputc_unlocked (int __c, FILE *__stream)
2719 {
2720   return (__builtin_expect (((__stream)->_IO_write_ptr >= (__stream)->_IO_write_end), 0) ? __overflow (__stream, (unsigned char) (__c)) : (unsigned char) (*(__stream)->_IO_write_ptr++ = (__c)));
2721 }
2722 extern __inline int
2723 putc_unlocked (int __c, FILE *__stream)
2724 {
2725   return (__builtin_expect (((__stream)->_IO_write_ptr >= (__stream)->_IO_write_end), 0) ? __overflow (__stream, (unsigned char) (__c)) : (unsigned char) (*(__stream)->_IO_write_ptr++ = (__c)));
2726 }
2727 extern __inline int
2728 putchar_unlocked (int __c)
2729 {
2730   return (__builtin_expect (((stdout)->_IO_write_ptr >= (stdout)->_IO_write_end), 0) ? __overflow (stdout, (unsigned char) (__c)) : (unsigned char) (*(stdout)->_IO_write_ptr++ = (__c)));
2731 }
2732 extern __inline __ssize_t
2733 getline (char **__lineptr, size_t *__n, FILE *__stream)
2734 {
2735   return __getdelim (__lineptr, __n, '\n', __stream);
2736 }
2737 extern __inline int
2738 __attribute__ ((__nothrow__ , __leaf__)) feof_unlocked (FILE *__stream)
2739 {
2740   return (((__stream)->_flags & 0x10) != 0);
2741 }
2742 extern __inline int
2743 __attribute__ ((__nothrow__ , __leaf__)) ferror_unlocked (FILE *__stream)
2744 {
2745   return (((__stream)->_flags & 0x20) != 0);
2746 }
2747 extern int __sprintf_chk (char *__restrict __s, int __flag, size_t __slen,
2748      const char *__restrict __format, ...) __attribute__ ((__nothrow__ , __leaf__));
2749 extern int __vsprintf_chk (char *__restrict __s, int __flag, size_t __slen,
2750       const char *__restrict __format,
2751       __gnuc_va_list __ap) __attribute__ ((__nothrow__ , __leaf__));
2752 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__artificial__)) int
2753 __attribute__ ((__nothrow__ , __leaf__)) sprintf (char *__restrict __s, const char *__restrict __fmt, ...)
2754 {
2755   return __builtin___sprintf_chk (__s, 2 - 1,
2756       __builtin_object_size (__s, 2 > 1), __fmt, __builtin_va_arg_pack ());
2757 }
2758 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__artificial__)) int
2759 __attribute__ ((__nothrow__ , __leaf__)) vsprintf (char *__restrict __s, const char *__restrict __fmt, __gnuc_va_list __ap)
2760 {
2761   return __builtin___vsprintf_chk (__s, 2 - 1,
2762        __builtin_object_size (__s, 2 > 1), __fmt, __ap);
2763 }
2764 extern int __snprintf_chk (char *__restrict __s, size_t __n, int __flag,
2765       size_t __slen, const char *__restrict __format,
2766       ...) __attribute__ ((__nothrow__ , __leaf__));
2767 extern int __vsnprintf_chk (char *__restrict __s, size_t __n, int __flag,
2768        size_t __slen, const char *__restrict __format,
2769        __gnuc_va_list __ap) __attribute__ ((__nothrow__ , __leaf__));
2770 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__artificial__)) int
2771 __attribute__ ((__nothrow__ , __leaf__)) snprintf (char *__restrict __s, size_t __n, const char *__restrict __fmt, ...)
2772 {
2773   return __builtin___snprintf_chk (__s, __n, 2 - 1,
2774        __builtin_object_size (__s, 2 > 1), __fmt, __builtin_va_arg_pack ());
2775 }
2776 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__artificial__)) int
2777 __attribute__ ((__nothrow__ , __leaf__)) vsnprintf (char *__restrict __s, size_t __n, const char *__restrict __fmt, __gnuc_va_list __ap)
2778 {
2779   return __builtin___vsnprintf_chk (__s, __n, 2 - 1,
2780         __builtin_object_size (__s, 2 > 1), __fmt, __ap);
2781 }
2782 extern int __fprintf_chk (FILE *__restrict __stream, int __flag,
2783      const char *__restrict __format, ...);
2784 extern int __printf_chk (int __flag, const char *__restrict __format, ...);
2785 extern int __vfprintf_chk (FILE *__restrict __stream, int __flag,
2786       const char *__restrict __format, __gnuc_va_list __ap);
2787 extern int __vprintf_chk (int __flag, const char *__restrict __format,
2788      __gnuc_va_list __ap);
2789 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__artificial__)) int
2790 fprintf (FILE *__restrict __stream, const char *__restrict __fmt, ...)
2791 {
2792   return __fprintf_chk (__stream, 2 - 1, __fmt,
2793    __builtin_va_arg_pack ());
2794 }
2795 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__artificial__)) int
2796 printf (const char *__restrict __fmt, ...)
2797 {
2798   return __printf_chk (2 - 1, __fmt, __builtin_va_arg_pack ());
2799 }
2800 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__artificial__)) int
2801 vprintf (const char *__restrict __fmt, __gnuc_va_list __ap)
2802 {
2803   return __vfprintf_chk (stdout, 2 - 1, __fmt, __ap);
2804 }
2805 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__artificial__)) int
2806 vfprintf (FILE *__restrict __stream,
2807    const char *__restrict __fmt, __gnuc_va_list __ap)
2808 {
2809   return __vfprintf_chk (__stream, 2 - 1, __fmt, __ap);
2810 }
2811 extern int __dprintf_chk (int __fd, int __flag, const char *__restrict __fmt,
2812      ...) __attribute__ ((__format__ (__printf__, 3, 4)));
2813 extern int __vdprintf_chk (int __fd, int __flag,
2814       const char *__restrict __fmt, __gnuc_va_list __arg)
2815      __attribute__ ((__format__ (__printf__, 3, 0)));
2816 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__artificial__)) int
2817 dprintf (int __fd, const char *__restrict __fmt, ...)
2818 {
2819   return __dprintf_chk (__fd, 2 - 1, __fmt,
2820    __builtin_va_arg_pack ());
2821 }
2822 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__artificial__)) int
2823 vdprintf (int __fd, const char *__restrict __fmt, __gnuc_va_list __ap)
2824 {
2825   return __vdprintf_chk (__fd, 2 - 1, __fmt, __ap);
2826 }
2827 extern int __asprintf_chk (char **__restrict __ptr, int __flag,
2828       const char *__restrict __fmt, ...)
2829      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__format__ (__printf__, 3, 4))) __attribute__ ((__warn_unused_result__));
2830 extern int __vasprintf_chk (char **__restrict __ptr, int __flag,
2831        const char *__restrict __fmt, __gnuc_va_list __arg)
2832      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__format__ (__printf__, 3, 0))) __attribute__ ((__warn_unused_result__));
2833 extern int __obstack_printf_chk (struct obstack *__restrict __obstack,
2834      int __flag, const char *__restrict __format,
2835      ...)
2836      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__format__ (__printf__, 3, 4)));
2837 extern int __obstack_vprintf_chk (struct obstack *__restrict __obstack,
2838       int __flag,
2839       const char *__restrict __format,
2840       __gnuc_va_list __args)
2841      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__format__ (__printf__, 3, 0)));
2842 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__artificial__)) int
2843 __attribute__ ((__nothrow__ , __leaf__)) asprintf (char **__restrict __ptr, const char *__restrict __fmt, ...)
2844 {
2845   return __asprintf_chk (__ptr, 2 - 1, __fmt,
2846     __builtin_va_arg_pack ());
2847 }
2848 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__artificial__)) int
2849 __attribute__ ((__nothrow__ , __leaf__)) __asprintf (char **__restrict __ptr, const char *__restrict __fmt, ...)
2850 {
2851   return __asprintf_chk (__ptr, 2 - 1, __fmt,
2852     __builtin_va_arg_pack ());
2853 }
2854 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__artificial__)) int
2855 __attribute__ ((__nothrow__ , __leaf__)) obstack_printf (struct obstack *__restrict __obstack, const char *__restrict __fmt, ...)
2856 {
2857   return __obstack_printf_chk (__obstack, 2 - 1, __fmt,
2858           __builtin_va_arg_pack ());
2859 }
2860 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__artificial__)) int
2861 __attribute__ ((__nothrow__ , __leaf__)) vasprintf (char **__restrict __ptr, const char *__restrict __fmt, __gnuc_va_list __ap)
2862 {
2863   return __vasprintf_chk (__ptr, 2 - 1, __fmt, __ap);
2864 }
2865 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__artificial__)) int
2866 __attribute__ ((__nothrow__ , __leaf__)) obstack_vprintf (struct obstack *__restrict __obstack, const char *__restrict __fmt, __gnuc_va_list __ap)
2867 {
2868   return __obstack_vprintf_chk (__obstack, 2 - 1, __fmt,
2869     __ap);
2870 }
2871 extern char *__fgets_chk (char *__restrict __s, size_t __size, int __n,
2872      FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));
2873 extern char *__fgets_alias (char *__restrict __s, int __n, FILE *__restrict __stream) __asm__ ("" "fgets")
2874                                         __attribute__ ((__warn_unused_result__));
2875 extern char *__fgets_chk_warn (char *__restrict __s, size_t __size, int __n, FILE *__restrict __stream) __asm__ ("" "__fgets_chk")
2876      __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("fgets called with bigger size than length " "of destination buffer")))
2877                                  ;
2878 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) char *
2879 fgets (char *__restrict __s, int __n, FILE *__restrict __stream)
2880 {
2881   if (__builtin_object_size (__s, 2 > 1) != (size_t) -1)
2882     {
2883       if (!__builtin_constant_p (__n) || __n <= 0)
2884  return __fgets_chk (__s, __builtin_object_size (__s, 2 > 1), __n, __stream);
2885       if ((size_t) __n > __builtin_object_size (__s, 2 > 1))
2886  return __fgets_chk_warn (__s, __builtin_object_size (__s, 2 > 1), __n, __stream);
2887     }
2888   return __fgets_alias (__s, __n, __stream);
2889 }
2890 extern size_t __fread_chk (void *__restrict __ptr, size_t __ptrlen,
2891       size_t __size, size_t __n,
2892       FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));
2893 extern size_t __fread_alias (void *__restrict __ptr, size_t __size, size_t __n, FILE *__restrict __stream) __asm__ ("" "fread")
2894             __attribute__ ((__warn_unused_result__));
2895 extern size_t __fread_chk_warn (void *__restrict __ptr, size_t __ptrlen, size_t __size, size_t __n, FILE *__restrict __stream) __asm__ ("" "__fread_chk")
2896      __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("fread called with bigger size * nmemb than length " "of destination buffer")))
2897                                  ;
2898 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) size_t
2899 fread (void *__restrict __ptr, size_t __size, size_t __n,
2900        FILE *__restrict __stream)
2901 {
2902   if (__builtin_object_size (__ptr, 0) != (size_t) -1)
2903     {
2904       if (!__builtin_constant_p (__size)
2905    || !__builtin_constant_p (__n)
2906    || (__size | __n) >= (((size_t) 1) << (8 * sizeof (size_t) / 2)))
2907  return __fread_chk (__ptr, __builtin_object_size (__ptr, 0), __size, __n, __stream);
2908       if (__size * __n > __builtin_object_size (__ptr, 0))
2909  return __fread_chk_warn (__ptr, __builtin_object_size (__ptr, 0), __size, __n, __stream);
2910     }
2911   return __fread_alias (__ptr, __size, __n, __stream);
2912 }
2913 extern char *__fgets_unlocked_chk (char *__restrict __s, size_t __size,
2914        int __n, FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));
2915 extern char *__fgets_unlocked_alias (char *__restrict __s, int __n, FILE *__restrict __stream) __asm__ ("" "fgets_unlocked")
2916                                                  __attribute__ ((__warn_unused_result__));
2917 extern char *__fgets_unlocked_chk_warn (char *__restrict __s, size_t __size, int __n, FILE *__restrict __stream) __asm__ ("" "__fgets_unlocked_chk")
2918      __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("fgets_unlocked called with bigger size than length " "of destination buffer")))
2919                                  ;
2920 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) char *
2921 fgets_unlocked (char *__restrict __s, int __n, FILE *__restrict __stream)
2922 {
2923   if (__builtin_object_size (__s, 2 > 1) != (size_t) -1)
2924     {
2925       if (!__builtin_constant_p (__n) || __n <= 0)
2926  return __fgets_unlocked_chk (__s, __builtin_object_size (__s, 2 > 1), __n, __stream);
2927       if ((size_t) __n > __builtin_object_size (__s, 2 > 1))
2928  return __fgets_unlocked_chk_warn (__s, __builtin_object_size (__s, 2 > 1), __n, __stream);
2929     }
2930   return __fgets_unlocked_alias (__s, __n, __stream);
2931 }
2932 extern size_t __fread_unlocked_chk (void *__restrict __ptr, size_t __ptrlen,
2933         size_t __size, size_t __n,
2934         FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));
2935 extern size_t __fread_unlocked_alias (void *__restrict __ptr, size_t __size, size_t __n, FILE *__restrict __stream) __asm__ ("" "fread_unlocked")
2936                      __attribute__ ((__warn_unused_result__));
2937 extern size_t __fread_unlocked_chk_warn (void *__restrict __ptr, size_t __ptrlen, size_t __size, size_t __n, FILE *__restrict __stream) __asm__ ("" "__fread_unlocked_chk")
2938      __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("fread_unlocked called with bigger size * nmemb than " "length of destination buffer")))
2939                                         ;
2940 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) size_t
2941 fread_unlocked (void *__restrict __ptr, size_t __size, size_t __n,
2942   FILE *__restrict __stream)
2943 {
2944   if (__builtin_object_size (__ptr, 0) != (size_t) -1)
2945     {
2946       if (!__builtin_constant_p (__size)
2947    || !__builtin_constant_p (__n)
2948    || (__size | __n) >= (((size_t) 1) << (8 * sizeof (size_t) / 2)))
2949  return __fread_unlocked_chk (__ptr, __builtin_object_size (__ptr, 0), __size, __n,
2950          __stream);
2951       if (__size * __n > __builtin_object_size (__ptr, 0))
2952  return __fread_unlocked_chk_warn (__ptr, __builtin_object_size (__ptr, 0), __size, __n,
2953        __stream);
2954     }
2955   if (__builtin_constant_p (__size)
2956       && __builtin_constant_p (__n)
2957       && (__size | __n) < (((size_t) 1) << (8 * sizeof (size_t) / 2))
2958       && __size * __n <= 8)
2959     {
2960       size_t __cnt = __size * __n;
2961       char *__cptr = (char *) __ptr;
2962       if (__cnt == 0)
2963  return 0;
2964       for (; __cnt > 0; --__cnt)
2965  {
2966    int __c = (__builtin_expect (((__stream)->_IO_read_ptr >= (__stream)->_IO_read_end), 0) ? __uflow (__stream) : *(unsigned char *) (__stream)->_IO_read_ptr++);
2967    if (__c == (-1))
2968      break;
2969    *__cptr++ = __c;
2970  }
2971       return (__cptr - (char *) __ptr) / __size;
2972     }
2973   return __fread_unlocked_alias (__ptr, __size, __n, __stream);
2974 }
2975 typedef enum { res_goahead, res_nextns, res_modified, res_done, res_error }
2976  res_sendhookact;
2977 typedef res_sendhookact (*res_send_qhook) (struct sockaddr_in * const *__ns,
2978         const u_char **__query,
2979         int *__querylen,
2980         u_char *__ans,
2981         int __anssiz,
2982         int *__resplen);
2983 typedef res_sendhookact (*res_send_rhook) (const struct sockaddr_in *__ns,
2984         const u_char *__query,
2985         int __querylen,
2986         u_char *__ans,
2987         int __anssiz,
2988         int *__resplen);
2989 struct __res_state {
2990  int retrans;
2991  int retry;
2992  u_long options;
2993  int nscount;
2994  struct sockaddr_in
2995   nsaddr_list[3];
2996  u_short id;
2997  char *dnsrch[6 +1];
2998  char defdname[256];
2999  u_long pfcode;
3000  unsigned ndots:4;
3001  unsigned nsort:4;
3002  unsigned ipv6_unavail:1;
3003  unsigned unused:23;
3004  struct {
3005   struct in_addr addr;
3006   u_int32_t mask;
3007  } sort_list[10];
3008  res_send_qhook qhook;
3009  res_send_rhook rhook;
3010  int res_h_errno;
3011  int _vcsock;
3012  u_int _flags;
3013  union {
3014   char pad[52];
3015   struct {
3016    u_int16_t nscount;
3017    u_int16_t nsmap[3];
3018    int nssocks[3];
3019    u_int16_t nscount6;
3020    u_int16_t nsinit;
3021    struct sockaddr_in6 *nsaddrs[3];
3022    unsigned int _initstamp[2];
3023   } _ext;
3024  } _u;
3025 };
3026 typedef struct __res_state *res_state;
3027 struct res_sym {
3028  int number;
3029  char * name;
3030  char * humanname;
3031 };
3032 extern struct __res_state *__res_state(void) __attribute__ ((__const__));
3033 void __fp_nquery (const u_char *, int, FILE *) __attribute__ ((__nothrow__ , __leaf__));
3034 void __fp_query (const u_char *, FILE *) __attribute__ ((__nothrow__ , __leaf__));
3035 const char * __hostalias (const char *) __attribute__ ((__nothrow__ , __leaf__));
3036 void __p_query (const u_char *) __attribute__ ((__nothrow__ , __leaf__));
3037 void __res_close (void) __attribute__ ((__nothrow__ , __leaf__));
3038 int __res_init (void) __attribute__ ((__nothrow__ , __leaf__));
3039 int __res_isourserver (const struct sockaddr_in *) __attribute__ ((__nothrow__ , __leaf__));
3040 int __res_mkquery (int, const char *, int, int, const u_char *,
3041         int, const u_char *, u_char *, int) __attribute__ ((__nothrow__ , __leaf__));
3042 int __res_query (const char *, int, int, u_char *, int) __attribute__ ((__nothrow__ , __leaf__));
3043 int __res_querydomain (const char *, const char *, int, int,
3044      u_char *, int) __attribute__ ((__nothrow__ , __leaf__));
3045 int __res_search (const char *, int, int, u_char *, int) __attribute__ ((__nothrow__ , __leaf__));
3046 int __res_send (const u_char *, int, u_char *, int) __attribute__ ((__nothrow__ , __leaf__));
3047 int __res_hnok (const char *) __attribute__ ((__nothrow__ , __leaf__));
3048 int __res_ownok (const char *) __attribute__ ((__nothrow__ , __leaf__));
3049 int __res_mailok (const char *) __attribute__ ((__nothrow__ , __leaf__));
3050 int __res_dnok (const char *) __attribute__ ((__nothrow__ , __leaf__));
3051 int __sym_ston (const struct res_sym *, const char *, int *) __attribute__ ((__nothrow__ , __leaf__));
3052 const char * __sym_ntos (const struct res_sym *, int, int *) __attribute__ ((__nothrow__ , __leaf__));
3053 const char * __sym_ntop (const struct res_sym *, int, int *) __attribute__ ((__nothrow__ , __leaf__));
3054 int __b64_ntop(u_char const *,size_t,char *,size_t) __attribute__ ((__nothrow__ , __leaf__));
3055 int __b64_pton(char const *,u_char *,size_t) __attribute__ ((__nothrow__ , __leaf__));
3056 int __loc_aton (const char *__ascii, u_char *__binary) __attribute__ ((__nothrow__ , __leaf__));
3057 const char * __loc_ntoa (const u_char *__binary, char *__ascii) __attribute__ ((__nothrow__ , __leaf__));
3058 int __dn_skipname (const u_char *, const u_char *) __attribute__ ((__nothrow__ , __leaf__));
3059 void __putlong (u_int32_t, u_char *) __attribute__ ((__nothrow__ , __leaf__));
3060 void __putshort (u_int16_t, u_char *) __attribute__ ((__nothrow__ , __leaf__));
3061 const char * __p_class (int) __attribute__ ((__nothrow__ , __leaf__));
3062 const char * __p_time (u_int32_t) __attribute__ ((__nothrow__ , __leaf__));
3063 const char * __p_type (int) __attribute__ ((__nothrow__ , __leaf__));
3064 const char * __p_rcode (int) __attribute__ ((__nothrow__ , __leaf__));
3065 const u_char * __p_cdnname (const u_char *, const u_char *, int, FILE *)
3066      __attribute__ ((__nothrow__ , __leaf__));
3067 const u_char * __p_cdname (const u_char *, const u_char *, FILE *) __attribute__ ((__nothrow__ , __leaf__));
3068 const u_char * __p_fqnname (const u_char *__cp, const u_char *__msg,
3069       int, char *, int) __attribute__ ((__nothrow__ , __leaf__));
3070 const u_char * __p_fqname (const u_char *, const u_char *, FILE *) __attribute__ ((__nothrow__ , __leaf__));
3071 const char * __p_option (u_long __option) __attribute__ ((__nothrow__ , __leaf__));
3072 char * __p_secstodate (u_long) __attribute__ ((__nothrow__ , __leaf__));
3073 int __dn_count_labels (const char *) __attribute__ ((__nothrow__ , __leaf__));
3074 int __dn_comp (const char *, u_char *, int, u_char **, u_char **)
3075      __attribute__ ((__nothrow__ , __leaf__));
3076 int __dn_expand (const u_char *, const u_char *, const u_char *,
3077       char *, int) __attribute__ ((__nothrow__ , __leaf__));
3078 u_int __res_randomid (void) __attribute__ ((__nothrow__ , __leaf__));
3079 int __res_nameinquery (const char *, int, int,
3080      const u_char *, const u_char *) __attribute__ ((__nothrow__ , __leaf__));
3081 int __res_queriesmatch (const u_char *, const u_char *,
3082       const u_char *, const u_char *) __attribute__ ((__nothrow__ , __leaf__));
3083 const char * __p_section (int __section, int __opcode) __attribute__ ((__nothrow__ , __leaf__));
3084 int __res_ninit (res_state) __attribute__ ((__nothrow__ , __leaf__));
3085 int __res_nisourserver (const res_state,
3086       const struct sockaddr_in *) __attribute__ ((__nothrow__ , __leaf__));
3087 void __fp_resstat (const res_state, FILE *) __attribute__ ((__nothrow__ , __leaf__));
3088 void __res_npquery (const res_state, const u_char *, int, FILE *)
3089      __attribute__ ((__nothrow__ , __leaf__));
3090 const char * __res_hostalias (const res_state, const char *, char *, size_t)
3091      __attribute__ ((__nothrow__ , __leaf__));
3092 int __res_nquery (res_state, const char *, int, int, u_char *, int)
3093      __attribute__ ((__nothrow__ , __leaf__));
3094 int __res_nsearch (res_state, const char *, int, int, u_char *, int)
3095      __attribute__ ((__nothrow__ , __leaf__));
3096 int __res_nquerydomain (res_state, const char *, const char *, int,
3097       int, u_char *, int) __attribute__ ((__nothrow__ , __leaf__));
3098 int __res_nmkquery (res_state, int, const char *, int, int,
3099          const u_char *, int, const u_char *, u_char *,
3100          int) __attribute__ ((__nothrow__ , __leaf__));
3101 int __res_nsend (res_state, const u_char *, int, u_char *, int)
3102      __attribute__ ((__nothrow__ , __leaf__));
3103 void __res_nclose (res_state) __attribute__ ((__nothrow__ , __leaf__));
3104 struct rdatainfo {
3105  unsigned int rdi_length;
3106  unsigned char *rdi_data;
3107 };
3108 struct rrsetinfo {
3109  unsigned int rri_flags;
3110  unsigned int rri_rdclass;
3111  unsigned int rri_rdtype;
3112  unsigned int rri_ttl;
3113  unsigned int rri_nrdatas;
3114  unsigned int rri_nsigs;
3115  char *rri_name;
3116  struct rdatainfo *rri_rdatas;
3117  struct rdatainfo *rri_sigs;
3118 };
3119 int getrrsetbyname(const char *, unsigned int, unsigned int, unsigned int, struct rrsetinfo **);
3120 void freerrset(struct rrsetinfo *);
3121 typedef struct BlowfishContext {
3122  u_int32_t S[4][256];
3123  u_int32_t P[16 + 2];
3124 } blf_ctx;
3125 void Blowfish_encipher(blf_ctx *, u_int32_t *, u_int32_t *);
3126 void Blowfish_decipher(blf_ctx *, u_int32_t *, u_int32_t *);
3127 void Blowfish_initstate(blf_ctx *);
3128 void Blowfish_expand0state(blf_ctx *, const u_int8_t *, u_int16_t);
3129 void Blowfish_expandstate
3130 (blf_ctx *, const u_int8_t *, u_int16_t, const u_int8_t *, u_int16_t);
3131 void blf_key(blf_ctx *, const u_int8_t *, u_int16_t);
3132 void blf_enc(blf_ctx *, u_int32_t *, u_int16_t);
3133 void blf_dec(blf_ctx *, u_int32_t *, u_int16_t);
3134 void blf_ecb_encrypt(blf_ctx *, u_int8_t *, u_int32_t);
3135 void blf_ecb_decrypt(blf_ctx *, u_int8_t *, u_int32_t);
3136 void blf_cbc_encrypt(blf_ctx *, u_int8_t *, u_int8_t *, u_int32_t);
3137 void blf_cbc_decrypt(blf_ctx *, u_int8_t *, u_int8_t *, u_int32_t);
3138 u_int32_t Blowfish_stream2word(const u_int8_t *, u_int16_t , u_int16_t *);
3139 int bindresvport_sa(int sd, struct sockaddr *sa);
3140 void closefrom(int);
3141 size_t strlcpy(char *dst, const char *src, size_t siz);
3142 size_t strlcat(char *dst, const char *src, size_t siz);
3143 void strmode(int mode, char *p);
3144 int mkstemps(char *path, int slen);
3145 int mkstemp(char *path);
3146 char *mkdtemp(char *path);
3147 int fmt_scaled(long long number, char *result);
3148 int scan_scaled(char *, long long *);
3149 void setproctitle(const char *fmt, ...);
3150 void compat_init_setproctitle(int argc, char *argv[]);
3151 int BSDgetopt(int argc, char * const *argv, const char *opts);
3152 struct option {
3153  const char *name;
3154  int has_arg;
3155  int *flag;
3156  int val;
3157 };
3158 int getopt_long(int, char * const *, const char *,
3159      const struct option *, int *);
3160 int getopt_long_only(int, char * const *, const char *,
3161      const struct option *, int *);
3162 int BSDgetopt(int, char * const *, const char *);
3163 int getsubopt(char **, char * const *, char **);
3164 extern char *BSDoptarg;
3165 extern int BSDopterr;
3166 extern int BSDoptind;
3167 extern int BSDoptopt;
3168 extern int BSDoptreset;
3169 extern char *suboptarg;
3170 char *ssh_get_progname(char *);
3171 int setlogin(const char *);
3172 typedef void (*mysig_t)(int);
3173 mysig_t mysignal(int sig, mysig_t act);
3174 int getpeereid(int , uid_t *, gid_t *);
3175 unsigned int arc4random(void);
3176 void arc4random_stir(void);
3177 void arc4random_buf(void *, size_t);
3178 u_int32_t arc4random_uniform(u_int32_t);
3179 long long strtonum(const char *, long long, long long, const char **);
3180 char *user_from_uid(uid_t, int);
3181 char *group_from_gid(gid_t, int);
3182 int timingsafe_bcmp(const void *, const void *, size_t);
3183 int bcrypt_pbkdf(const char *, size_t, const u_int8_t *, size_t,
3184     u_int8_t *, size_t, unsigned int);
3185 void explicit_bzero(void *p, size_t n);
3186 void *xmmap(size_t size);
3187 char *xcrypt(const char *password, const char *salt);
3188 char *shadow_pw(struct passwd *pw);
3189 void oom_adjust_restore(void);
3190 void oom_adjust_setup(void);
3191 void solaris_contract_pre_fork(void);
3192 void solaris_contract_post_fork_child(void);
3193 void solaris_contract_post_fork_parent(pid_t pid);
3194 void solaris_set_default_project(struct passwd *);
3195 struct Channel;
3196 int sys_tun_open(int, int);
3197 int sys_tun_infilter(struct Channel *, char *, int);
3198 u_char *sys_tun_outfilter(struct Channel *, u_char **, u_int *);
3199 typedef struct {
3200  u_char *buf;
3201  u_int alloc;
3202  u_int offset;
3203  u_int end;
3204 } Buffer;
3205 void buffer_init(Buffer *);
3206 void buffer_clear(Buffer *);
3207 void buffer_free(Buffer *);
3208 u_int buffer_len(const Buffer *);
3209 void *buffer_ptr(const Buffer *);
3210 void buffer_append(Buffer *, const void *, u_int);
3211 void *buffer_append_space(Buffer *, u_int);
3212 int buffer_check_alloc(Buffer *, u_int);
3213 void buffer_get(Buffer *, void *, u_int);
3214 void buffer_consume(Buffer *, u_int);
3215 void buffer_consume_end(Buffer *, u_int);
3216 void buffer_dump(const Buffer *);
3217 int buffer_get_ret(Buffer *, void *, u_int);
3218 int buffer_consume_ret(Buffer *, u_int);
3219 int buffer_consume_end_ret(Buffer *, u_int);
3220 typedef struct asn1_string_st ASN1_INTEGER;
3221 typedef struct asn1_string_st ASN1_ENUMERATED;
3222 typedef struct asn1_string_st ASN1_BIT_STRING;
3223 typedef struct asn1_string_st ASN1_OCTET_STRING;
3224 typedef struct asn1_string_st ASN1_PRINTABLESTRING;
3225 typedef struct asn1_string_st ASN1_T61STRING;
3226 typedef struct asn1_string_st ASN1_IA5STRING;
3227 typedef struct asn1_string_st ASN1_GENERALSTRING;
3228 typedef struct asn1_string_st ASN1_UNIVERSALSTRING;
3229 typedef struct asn1_string_st ASN1_BMPSTRING;
3230 typedef struct asn1_string_st ASN1_UTCTIME;
3231 typedef struct asn1_string_st ASN1_TIME;
3232 typedef struct asn1_string_st ASN1_GENERALIZEDTIME;
3233 typedef struct asn1_string_st ASN1_VISIBLESTRING;
3234 typedef struct asn1_string_st ASN1_UTF8STRING;
3235 typedef struct asn1_string_st ASN1_STRING;
3236 typedef int ASN1_BOOLEAN;
3237 typedef int ASN1_NULL;
3238 typedef struct ASN1_ITEM_st ASN1_ITEM;
3239 typedef struct asn1_pctx_st ASN1_PCTX;
3240 typedef struct bignum_st BIGNUM;
3241 typedef struct bignum_ctx BN_CTX;
3242 typedef struct bn_blinding_st BN_BLINDING;
3243 typedef struct bn_mont_ctx_st BN_MONT_CTX;
3244 typedef struct bn_recp_ctx_st BN_RECP_CTX;
3245 typedef struct bn_gencb_st BN_GENCB;
3246 typedef struct buf_mem_st BUF_MEM;
3247 typedef struct evp_cipher_st EVP_CIPHER;
3248 typedef struct evp_cipher_ctx_st EVP_CIPHER_CTX;
3249 typedef struct env_md_st EVP_MD;
3250 typedef struct env_md_ctx_st EVP_MD_CTX;
3251 typedef struct evp_pkey_st EVP_PKEY;
3252 typedef struct evp_pkey_asn1_method_st EVP_PKEY_ASN1_METHOD;
3253 typedef struct evp_pkey_method_st EVP_PKEY_METHOD;
3254 typedef struct evp_pkey_ctx_st EVP_PKEY_CTX;
3255 typedef struct dh_st DH;
3256 typedef struct dh_method DH_METHOD;
3257 typedef struct dsa_st DSA;
3258 typedef struct dsa_method DSA_METHOD;
3259 typedef struct rsa_st RSA;
3260 typedef struct rsa_meth_st RSA_METHOD;
3261 typedef struct rand_meth_st RAND_METHOD;
3262 typedef struct ecdh_method ECDH_METHOD;
3263 typedef struct ecdsa_method ECDSA_METHOD;
3264 typedef struct x509_st X509;
3265 typedef struct X509_algor_st X509_ALGOR;
3266 typedef struct X509_crl_st X509_CRL;
3267 typedef struct x509_crl_method_st X509_CRL_METHOD;
3268 typedef struct x509_revoked_st X509_REVOKED;
3269 typedef struct X509_name_st X509_NAME;
3270 typedef struct X509_pubkey_st X509_PUBKEY;
3271 typedef struct x509_store_st X509_STORE;
3272 typedef struct x509_store_ctx_st X509_STORE_CTX;
3273 typedef struct pkcs8_priv_key_info_st PKCS8_PRIV_KEY_INFO;
3274 typedef struct v3_ext_ctx X509V3_CTX;
3275 typedef struct conf_st CONF;
3276 typedef struct store_st STORE;
3277 typedef struct store_method_st STORE_METHOD;
3278 typedef struct ui_st UI;
3279 typedef struct ui_method_st UI_METHOD;
3280 typedef struct st_ERR_FNS ERR_FNS;
3281 typedef struct engine_st ENGINE;
3282 typedef struct ssl_st SSL;
3283 typedef struct ssl_ctx_st SSL_CTX;
3284 typedef struct X509_POLICY_NODE_st X509_POLICY_NODE;
3285 typedef struct X509_POLICY_LEVEL_st X509_POLICY_LEVEL;
3286 typedef struct X509_POLICY_TREE_st X509_POLICY_TREE;
3287 typedef struct X509_POLICY_CACHE_st X509_POLICY_CACHE;
3288 typedef struct AUTHORITY_KEYID_st AUTHORITY_KEYID;
3289 typedef struct DIST_POINT_st DIST_POINT;
3290 typedef struct ISSUING_DIST_POINT_st ISSUING_DIST_POINT;
3291 typedef struct NAME_CONSTRAINTS_st NAME_CONSTRAINTS;
3292 typedef struct crypto_ex_data_st CRYPTO_EX_DATA;
3293 typedef int CRYPTO_EX_new(void *parent, void *ptr, CRYPTO_EX_DATA *ad,
3294      int idx, long argl, void *argp);
3295 typedef void CRYPTO_EX_free(void *parent, void *ptr, CRYPTO_EX_DATA *ad,
3296      int idx, long argl, void *argp);
3297 typedef int CRYPTO_EX_dup(CRYPTO_EX_DATA *to, CRYPTO_EX_DATA *from, void *from_d,
3298      int idx, long argl, void *argp);
3299 typedef struct ocsp_req_ctx_st OCSP_REQ_CTX;
3300 typedef struct ocsp_response_st OCSP_RESPONSE;
3301 typedef struct ocsp_responder_id_st OCSP_RESPID;
3302 typedef struct stack_st
3303  {
3304  int num;
3305  char **data;
3306  int sorted;
3307  int num_alloc;
3308  int (*comp)(const void *, const void *);
3309  } _STACK;
3310 int sk_num(const _STACK *);
3311 void *sk_value(const _STACK *, int);
3312 void *sk_set(_STACK *, int, void *);
3313 _STACK *sk_new(int (*cmp)(const void *, const void *));
3314 _STACK *sk_new_null(void);
3315 void sk_free(_STACK *);
3316 void sk_pop_free(_STACK *st, void (*func)(void *));
3317 int sk_insert(_STACK *sk, void *data, int where);
3318 void *sk_delete(_STACK *st, int loc);
3319 void *sk_delete_ptr(_STACK *st, void *p);
3320 int sk_find(_STACK *st, void *data);
3321 int sk_find_ex(_STACK *st, void *data);
3322 int sk_push(_STACK *st, void *data);
3323 int sk_unshift(_STACK *st, void *data);
3324 void *sk_shift(_STACK *st);
3325 void *sk_pop(_STACK *st);
3326 void sk_zero(_STACK *st);
3327 int (*sk_set_cmp_func(_STACK *sk, int (*c)(const void *, const void *)))
3328  (const void *, const void *);
3329 _STACK *sk_dup(_STACK *st);
3330 void sk_sort(_STACK *st);
3331 int sk_is_sorted(const _STACK *st);
3332 typedef char *OPENSSL_STRING;
3333 typedef const char *OPENSSL_CSTRING;
3334 struct stack_st_OPENSSL_STRING { _STACK stack; };
3335 typedef void *OPENSSL_BLOCK;
3336 struct stack_st_OPENSSL_BLOCK { _STACK stack; };
3337 typedef struct openssl_item_st
3338  {
3339  int code;
3340  void *value;
3341  size_t value_size;
3342  size_t *value_length;
3343  } OPENSSL_ITEM;
3344 typedef struct
3345  {
3346  int references;
3347  struct CRYPTO_dynlock_value *data;
3348  } CRYPTO_dynlock;
3349 typedef struct bio_st BIO_dummy;
3350 struct crypto_ex_data_st
3351  {
3352  struct stack_st_void *sk;
3353  int dummy;
3354  };
3355 struct stack_st_void { _STACK stack; };
3356 typedef struct crypto_ex_data_func_st
3357  {
3358  long argl;
3359  void *argp;
3360  CRYPTO_EX_new *new_func;
3361  CRYPTO_EX_free *free_func;
3362  CRYPTO_EX_dup *dup_func;
3363  } CRYPTO_EX_DATA_FUNCS;
3364 struct stack_st_CRYPTO_EX_DATA_FUNCS { _STACK stack; };
3365 int CRYPTO_mem_ctrl(int mode);
3366 int CRYPTO_is_mem_check_on(void);
3367 const char *SSLeay_version(int type);
3368 unsigned long SSLeay(void);
3369 int OPENSSL_issetugid(void);
3370 typedef struct st_CRYPTO_EX_DATA_IMPL CRYPTO_EX_DATA_IMPL;
3371 const CRYPTO_EX_DATA_IMPL *CRYPTO_get_ex_data_implementation(void);
3372 int CRYPTO_set_ex_data_implementation(const CRYPTO_EX_DATA_IMPL *i);
3373 int CRYPTO_ex_data_new_class(void);
3374 int CRYPTO_get_ex_new_index(int class_index, long argl, void *argp,
3375   CRYPTO_EX_new *new_func, CRYPTO_EX_dup *dup_func,
3376   CRYPTO_EX_free *free_func);
3377 int CRYPTO_new_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad);
3378 int CRYPTO_dup_ex_data(int class_index, CRYPTO_EX_DATA *to,
3379   CRYPTO_EX_DATA *from);
3380 void CRYPTO_free_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad);
3381 int CRYPTO_set_ex_data(CRYPTO_EX_DATA *ad, int idx, void *val);
3382 void *CRYPTO_get_ex_data(const CRYPTO_EX_DATA *ad,int idx);
3383 void CRYPTO_cleanup_all_ex_data(void);
3384 int CRYPTO_get_new_lockid(char *name);
3385 int CRYPTO_num_locks(void);
3386 void CRYPTO_lock(int mode, int type,const char *file,int line);
3387 void CRYPTO_set_locking_callback(void (*func)(int mode,int type,
3388            const char *file,int line));
3389 void (*CRYPTO_get_locking_callback(void))(int mode,int type,const char *file,
3390   int line);
3391 void CRYPTO_set_add_lock_callback(int (*func)(int *num,int mount,int type,
3392            const char *file, int line));
3393 int (*CRYPTO_get_add_lock_callback(void))(int *num,int mount,int type,
3394        const char *file,int line);
3395 typedef struct crypto_threadid_st
3396  {
3397  void *ptr;
3398  unsigned long val;
3399  } CRYPTO_THREADID;
3400 void CRYPTO_THREADID_set_numeric(CRYPTO_THREADID *id, unsigned long val);
3401 void CRYPTO_THREADID_set_pointer(CRYPTO_THREADID *id, void *ptr);
3402 int CRYPTO_THREADID_set_callback(void (*threadid_func)(CRYPTO_THREADID *));
3403 void (*CRYPTO_THREADID_get_callback(void))(CRYPTO_THREADID *);
3404 void CRYPTO_THREADID_current(CRYPTO_THREADID *id);
3405 int CRYPTO_THREADID_cmp(const CRYPTO_THREADID *a, const CRYPTO_THREADID *b);
3406 void CRYPTO_THREADID_cpy(CRYPTO_THREADID *dest, const CRYPTO_THREADID *src);
3407 unsigned long CRYPTO_THREADID_hash(const CRYPTO_THREADID *id);
3408 void CRYPTO_set_id_callback(unsigned long (*func)(void));
3409 unsigned long (*CRYPTO_get_id_callback(void))(void);
3410 unsigned long CRYPTO_thread_id(void);
3411 const char *CRYPTO_get_lock_name(int type);
3412 int CRYPTO_add_lock(int *pointer,int amount,int type, const char *file,
3413       int line);
3414 int CRYPTO_get_new_dynlockid(void);
3415 void CRYPTO_destroy_dynlockid(int i);
3416 struct CRYPTO_dynlock_value *CRYPTO_get_dynlock_value(int i);
3417 void CRYPTO_set_dynlock_create_callback(struct CRYPTO_dynlock_value *(*dyn_create_function)(const char *file, int line));
3418 void CRYPTO_set_dynlock_lock_callback(void (*dyn_lock_function)(int mode, struct CRYPTO_dynlock_value *l, const char *file, int line));
3419 void CRYPTO_set_dynlock_destroy_callback(void (*dyn_destroy_function)(struct CRYPTO_dynlock_value *l, const char *file, int line));
3420 struct CRYPTO_dynlock_value *(*CRYPTO_get_dynlock_create_callback(void))(const char *file,int line);
3421 void (*CRYPTO_get_dynlock_lock_callback(void))(int mode, struct CRYPTO_dynlock_value *l, const char *file,int line);
3422 void (*CRYPTO_get_dynlock_destroy_callback(void))(struct CRYPTO_dynlock_value *l, const char *file,int line);
3423 int CRYPTO_set_mem_functions(void *(*m)(size_t),void *(*r)(void *,size_t), void (*f)(void *));
3424 int CRYPTO_set_locked_mem_functions(void *(*m)(size_t), void (*free_func)(void *));
3425 int CRYPTO_set_mem_ex_functions(void *(*m)(size_t,const char *,int),
3426                                 void *(*r)(void *,size_t,const char *,int),
3427                                 void (*f)(void *));
3428 int CRYPTO_set_locked_mem_ex_functions(void *(*m)(size_t,const char *,int),
3429                                        void (*free_func)(void *));
3430 int CRYPTO_set_mem_debug_functions(void (*m)(void *,int,const char *,int,int),
3431        void (*r)(void *,void *,int,const char *,int,int),
3432        void (*f)(void *,int),
3433        void (*so)(long),
3434        long (*go)(void));
3435 void CRYPTO_get_mem_functions(void *(**m)(size_t),void *(**r)(void *, size_t), void (**f)(void *));
3436 void CRYPTO_get_locked_mem_functions(void *(**m)(size_t), void (**f)(void *));
3437 void CRYPTO_get_mem_ex_functions(void *(**m)(size_t,const char *,int),
3438                                  void *(**r)(void *, size_t,const char *,int),
3439                                  void (**f)(void *));
3440 void CRYPTO_get_locked_mem_ex_functions(void *(**m)(size_t,const char *,int),
3441                                         void (**f)(void *));
3442 void CRYPTO_get_mem_debug_functions(void (**m)(void *,int,const char *,int,int),
3443         void (**r)(void *,void *,int,const char *,int,int),
3444         void (**f)(void *,int),
3445         void (**so)(long),
3446         long (**go)(void));
3447 void *CRYPTO_malloc_locked(int num, const char *file, int line);
3448 void CRYPTO_free_locked(void *ptr);
3449 void *CRYPTO_malloc(int num, const char *file, int line);
3450 char *CRYPTO_strdup(const char *str, const char *file, int line);
3451 void CRYPTO_free(void *ptr);
3452 void *CRYPTO_realloc(void *addr,int num, const char *file, int line);
3453 void *CRYPTO_realloc_clean(void *addr,int old_num,int num,const char *file,
3454       int line);
3455 void *CRYPTO_remalloc(void *addr,int num, const char *file, int line);
3456 void OPENSSL_cleanse(void *ptr, size_t len);
3457 void CRYPTO_set_mem_debug_options(long bits);
3458 long CRYPTO_get_mem_debug_options(void);
3459 int CRYPTO_push_info_(const char *info, const char *file, int line);
3460 int CRYPTO_pop_info(void);
3461 int CRYPTO_remove_all_info(void);
3462 void CRYPTO_dbg_malloc(void *addr,int num,const char *file,int line,int before_p);
3463 void CRYPTO_dbg_realloc(void *addr1,void *addr2,int num,const char *file,int line,int before_p);
3464 void CRYPTO_dbg_free(void *addr,int before_p);
3465 void CRYPTO_dbg_set_options(long bits);
3466 long CRYPTO_dbg_get_options(void);
3467 void CRYPTO_mem_leaks_fp(FILE *);
3468 void CRYPTO_mem_leaks(struct bio_st *bio);
3469 typedef void *CRYPTO_MEM_LEAK_CB(unsigned long, const char *, int, int, void *);
3470 void CRYPTO_mem_leaks_cb(CRYPTO_MEM_LEAK_CB *cb);
3471 void OpenSSLDie(const char *file,int line,const char *assertion);
3472 unsigned long *OPENSSL_ia32cap_loc(void);
3473 int OPENSSL_isservice(void);
3474 int FIPS_mode(void);
3475 int FIPS_mode_set(int r);
3476 void OPENSSL_init(void);
3477 int CRYPTO_memcmp(const void *a, const void *b, size_t len);
3478 void ERR_load_CRYPTO_strings(void);
3479 struct bignum_st
3480  {
3481  unsigned int *d;
3482  int top;
3483  int dmax;
3484  int neg;
3485  int flags;
3486  };
3487 struct bn_mont_ctx_st
3488  {
3489  int ri;
3490  BIGNUM RR;
3491  BIGNUM N;
3492  BIGNUM Ni;
3493  unsigned int n0[2];
3494  int flags;
3495  };
3496 struct bn_recp_ctx_st
3497  {
3498  BIGNUM N;
3499  BIGNUM Nr;
3500  int num_bits;
3501  int shift;
3502  int flags;
3503  };
3504 struct bn_gencb_st
3505  {
3506  unsigned int ver;
3507  void *arg;
3508  union
3509   {
3510   void (*cb_1)(int, int, void *);
3511   int (*cb_2)(int, int, BN_GENCB *);
3512   } cb;
3513  };
3514 int BN_GENCB_call(BN_GENCB *cb, int a, int b);
3515 const BIGNUM *BN_value_one(void);
3516 char * BN_options(void);
3517 BN_CTX *BN_CTX_new(void);
3518 void BN_CTX_init(BN_CTX *c);
3519 void BN_CTX_free(BN_CTX *c);
3520 void BN_CTX_start(BN_CTX *ctx);
3521 BIGNUM *BN_CTX_get(BN_CTX *ctx);
3522 void BN_CTX_end(BN_CTX *ctx);
3523 int BN_rand(BIGNUM *rnd, int bits, int top,int bottom);
3524 int BN_pseudo_rand(BIGNUM *rnd, int bits, int top,int bottom);
3525 int BN_rand_range(BIGNUM *rnd, const BIGNUM *range);
3526 int BN_pseudo_rand_range(BIGNUM *rnd, const BIGNUM *range);
3527 int BN_num_bits(const BIGNUM *a);
3528 int BN_num_bits_word(unsigned int);
3529 BIGNUM *BN_new(void);
3530 void BN_init(BIGNUM *);
3531 void BN_clear_free(BIGNUM *a);
3532 BIGNUM *BN_copy(BIGNUM *a, const BIGNUM *b);
3533 void BN_swap(BIGNUM *a, BIGNUM *b);
3534 BIGNUM *BN_bin2bn(const unsigned char *s,int len,BIGNUM *ret);
3535 int BN_bn2bin(const BIGNUM *a, unsigned char *to);
3536 BIGNUM *BN_mpi2bn(const unsigned char *s,int len,BIGNUM *ret);
3537 int BN_bn2mpi(const BIGNUM *a, unsigned char *to);
3538 int BN_sub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b);
3539 int BN_usub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b);
3540 int BN_uadd(BIGNUM *r, const BIGNUM *a, const BIGNUM *b);
3541 int BN_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b);
3542 int BN_mul(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx);
3543 int BN_sqr(BIGNUM *r, const BIGNUM *a,BN_CTX *ctx);
3544 void BN_set_negative(BIGNUM *b, int n);
3545 int BN_div(BIGNUM *dv, BIGNUM *rem, const BIGNUM *m, const BIGNUM *d,
3546  BN_CTX *ctx);
3547 int BN_nnmod(BIGNUM *r, const BIGNUM *m, const BIGNUM *d, BN_CTX *ctx);
3548 int BN_mod_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m, BN_CTX *ctx);
3549 int BN_mod_add_quick(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m);
3550 int BN_mod_sub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m, BN_CTX *ctx);
3551 int BN_mod_sub_quick(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m);
3552 int BN_mod_mul(BIGNUM *r, const BIGNUM *a, const BIGNUM *b,
3553  const BIGNUM *m, BN_CTX *ctx);
3554 int BN_mod_sqr(BIGNUM *r, const BIGNUM *a, const BIGNUM *m, BN_CTX *ctx);
3555 int BN_mod_lshift1(BIGNUM *r, const BIGNUM *a, const BIGNUM *m, BN_CTX *ctx);
3556 int BN_mod_lshift1_quick(BIGNUM *r, const BIGNUM *a, const BIGNUM *m);
3557 int BN_mod_lshift(BIGNUM *r, const BIGNUM *a, int n, const BIGNUM *m, BN_CTX *ctx);
3558 int BN_mod_lshift_quick(BIGNUM *r, const BIGNUM *a, int n, const BIGNUM *m);
3559 unsigned int BN_mod_word(const BIGNUM *a, unsigned int w);
3560 unsigned int BN_div_word(BIGNUM *a, unsigned int w);
3561 int BN_mul_word(BIGNUM *a, unsigned int w);
3562 int BN_add_word(BIGNUM *a, unsigned int w);
3563 int BN_sub_word(BIGNUM *a, unsigned int w);
3564 int BN_set_word(BIGNUM *a, unsigned int w);
3565 unsigned int BN_get_word(const BIGNUM *a);
3566 int BN_cmp(const BIGNUM *a, const BIGNUM *b);
3567 void BN_free(BIGNUM *a);
3568 int BN_is_bit_set(const BIGNUM *a, int n);
3569 int BN_lshift(BIGNUM *r, const BIGNUM *a, int n);
3570 int BN_lshift1(BIGNUM *r, const BIGNUM *a);
3571 int BN_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,BN_CTX *ctx);
3572 int BN_mod_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,
3573  const BIGNUM *m,BN_CTX *ctx);
3574 int BN_mod_exp_mont(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,
3575  const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx);
3576 int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p,
3577  const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *in_mont);
3578 int BN_mod_exp_mont_word(BIGNUM *r, unsigned int a, const BIGNUM *p,
3579  const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx);
3580 int BN_mod_exp2_mont(BIGNUM *r, const BIGNUM *a1, const BIGNUM *p1,
3581  const BIGNUM *a2, const BIGNUM *p2,const BIGNUM *m,
3582  BN_CTX *ctx,BN_MONT_CTX *m_ctx);
3583 int BN_mod_exp_simple(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,
3584  const BIGNUM *m,BN_CTX *ctx);
3585 int BN_mask_bits(BIGNUM *a,int n);
3586 int BN_print_fp(FILE *fp, const BIGNUM *a);
3587 int BN_print(void *fp, const BIGNUM *a);
3588 int BN_reciprocal(BIGNUM *r, const BIGNUM *m, int len, BN_CTX *ctx);
3589 int BN_rshift(BIGNUM *r, const BIGNUM *a, int n);
3590 int BN_rshift1(BIGNUM *r, const BIGNUM *a);
3591 void BN_clear(BIGNUM *a);
3592 BIGNUM *BN_dup(const BIGNUM *a);
3593 int BN_ucmp(const BIGNUM *a, const BIGNUM *b);
3594 int BN_set_bit(BIGNUM *a, int n);
3595 int BN_clear_bit(BIGNUM *a, int n);
3596 char * BN_bn2hex(const BIGNUM *a);
3597 char * BN_bn2dec(const BIGNUM *a);
3598 int BN_hex2bn(BIGNUM **a, const char *str);
3599 int BN_dec2bn(BIGNUM **a, const char *str);
3600 int BN_asc2bn(BIGNUM **a, const char *str);
3601 int BN_gcd(BIGNUM *r,const BIGNUM *a,const BIGNUM *b,BN_CTX *ctx);
3602 int BN_kronecker(const BIGNUM *a,const BIGNUM *b,BN_CTX *ctx);
3603 BIGNUM *BN_mod_inverse(BIGNUM *ret,
3604  const BIGNUM *a, const BIGNUM *n,BN_CTX *ctx);
3605 BIGNUM *BN_mod_sqrt(BIGNUM *ret,
3606  const BIGNUM *a, const BIGNUM *n,BN_CTX *ctx);
3607 BIGNUM *BN_generate_prime(BIGNUM *ret,int bits,int safe,
3608  const BIGNUM *add, const BIGNUM *rem,
3609  void (*callback)(int,int,void *),void *cb_arg);
3610 int BN_is_prime(const BIGNUM *p,int nchecks,
3611  void (*callback)(int,int,void *),
3612  BN_CTX *ctx,void *cb_arg);
3613 int BN_is_prime_fasttest(const BIGNUM *p,int nchecks,
3614  void (*callback)(int,int,void *),BN_CTX *ctx,void *cb_arg,
3615  int do_trial_division);
3616 int BN_generate_prime_ex(BIGNUM *ret,int bits,int safe, const BIGNUM *add,
3617   const BIGNUM *rem, BN_GENCB *cb);
3618 int BN_is_prime_ex(const BIGNUM *p,int nchecks, BN_CTX *ctx, BN_GENCB *cb);
3619 int BN_is_prime_fasttest_ex(const BIGNUM *p,int nchecks, BN_CTX *ctx,
3620   int do_trial_division, BN_GENCB *cb);
3621 int BN_X931_generate_Xpq(BIGNUM *Xp, BIGNUM *Xq, int nbits, BN_CTX *ctx);
3622 int BN_X931_derive_prime_ex(BIGNUM *p, BIGNUM *p1, BIGNUM *p2,
3623    const BIGNUM *Xp, const BIGNUM *Xp1, const BIGNUM *Xp2,
3624    const BIGNUM *e, BN_CTX *ctx, BN_GENCB *cb);
3625 int BN_X931_generate_prime_ex(BIGNUM *p, BIGNUM *p1, BIGNUM *p2,
3626    BIGNUM *Xp1, BIGNUM *Xp2,
3627    const BIGNUM *Xp,
3628    const BIGNUM *e, BN_CTX *ctx,
3629    BN_GENCB *cb);
3630 BN_MONT_CTX *BN_MONT_CTX_new(void );
3631 void BN_MONT_CTX_init(BN_MONT_CTX *ctx);
3632 int BN_mod_mul_montgomery(BIGNUM *r,const BIGNUM *a,const BIGNUM *b,
3633  BN_MONT_CTX *mont, BN_CTX *ctx);
3634 int BN_from_montgomery(BIGNUM *r,const BIGNUM *a,
3635  BN_MONT_CTX *mont, BN_CTX *ctx);
3636 void BN_MONT_CTX_free(BN_MONT_CTX *mont);
3637 int BN_MONT_CTX_set(BN_MONT_CTX *mont,const BIGNUM *mod,BN_CTX *ctx);
3638 BN_MONT_CTX *BN_MONT_CTX_copy(BN_MONT_CTX *to,BN_MONT_CTX *from);
3639 BN_MONT_CTX *BN_MONT_CTX_set_locked(BN_MONT_CTX **pmont, int lock,
3640      const BIGNUM *mod, BN_CTX *ctx);
3641 BN_BLINDING *BN_BLINDING_new(const BIGNUM *A, const BIGNUM *Ai, BIGNUM *mod);
3642 void BN_BLINDING_free(BN_BLINDING *b);
3643 int BN_BLINDING_update(BN_BLINDING *b,BN_CTX *ctx);
3644 int BN_BLINDING_convert(BIGNUM *n, BN_BLINDING *b, BN_CTX *ctx);
3645 int BN_BLINDING_invert(BIGNUM *n, BN_BLINDING *b, BN_CTX *ctx);
3646 int BN_BLINDING_convert_ex(BIGNUM *n, BIGNUM *r, BN_BLINDING *b, BN_CTX *);
3647 int BN_BLINDING_invert_ex(BIGNUM *n, const BIGNUM *r, BN_BLINDING *b, BN_CTX *);
3648 unsigned long BN_BLINDING_get_thread_id(const BN_BLINDING *);
3649 void BN_BLINDING_set_thread_id(BN_BLINDING *, unsigned long);
3650 CRYPTO_THREADID *BN_BLINDING_thread_id(BN_BLINDING *);
3651 unsigned long BN_BLINDING_get_flags(const BN_BLINDING *);
3652 void BN_BLINDING_set_flags(BN_BLINDING *, unsigned long);
3653 BN_BLINDING *BN_BLINDING_create_param(BN_BLINDING *b,
3654  const BIGNUM *e, BIGNUM *m, BN_CTX *ctx,
3655  int (*bn_mod_exp)(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,
3656      const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx),
3657  BN_MONT_CTX *m_ctx);
3658 void BN_set_params(int mul,int high,int low,int mont);
3659 int BN_get_params(int which);
3660 void BN_RECP_CTX_init(BN_RECP_CTX *recp);
3661 BN_RECP_CTX *BN_RECP_CTX_new(void);
3662 void BN_RECP_CTX_free(BN_RECP_CTX *recp);
3663 int BN_RECP_CTX_set(BN_RECP_CTX *recp,const BIGNUM *rdiv,BN_CTX *ctx);
3664 int BN_mod_mul_reciprocal(BIGNUM *r, const BIGNUM *x, const BIGNUM *y,
3665  BN_RECP_CTX *recp,BN_CTX *ctx);
3666 int BN_mod_exp_recp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,
3667  const BIGNUM *m, BN_CTX *ctx);
3668 int BN_div_recp(BIGNUM *dv, BIGNUM *rem, const BIGNUM *m,
3669  BN_RECP_CTX *recp, BN_CTX *ctx);
3670 int BN_GF2m_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b);
3671 int BN_GF2m_mod(BIGNUM *r, const BIGNUM *a, const BIGNUM *p);
3672 int BN_GF2m_mod_mul(BIGNUM *r, const BIGNUM *a, const BIGNUM *b,
3673  const BIGNUM *p, BN_CTX *ctx);
3674 int BN_GF2m_mod_sqr(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,
3675  BN_CTX *ctx);
3676 int BN_GF2m_mod_inv(BIGNUM *r, const BIGNUM *b, const BIGNUM *p,
3677  BN_CTX *ctx);
3678 int BN_GF2m_mod_div(BIGNUM *r, const BIGNUM *a, const BIGNUM *b,
3679  const BIGNUM *p, BN_CTX *ctx);
3680 int BN_GF2m_mod_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *b,
3681  const BIGNUM *p, BN_CTX *ctx);
3682 int BN_GF2m_mod_sqrt(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,
3683  BN_CTX *ctx);
3684 int BN_GF2m_mod_solve_quad(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,
3685  BN_CTX *ctx);
3686 int BN_GF2m_mod_arr(BIGNUM *r, const BIGNUM *a, const int p[]);
3687 int BN_GF2m_mod_mul_arr(BIGNUM *r, const BIGNUM *a, const BIGNUM *b,
3688  const int p[], BN_CTX *ctx);
3689 int BN_GF2m_mod_sqr_arr(BIGNUM *r, const BIGNUM *a, const int p[],
3690  BN_CTX *ctx);
3691 int BN_GF2m_mod_inv_arr(BIGNUM *r, const BIGNUM *b, const int p[],
3692  BN_CTX *ctx);
3693 int BN_GF2m_mod_div_arr(BIGNUM *r, const BIGNUM *a, const BIGNUM *b,
3694  const int p[], BN_CTX *ctx);
3695 int BN_GF2m_mod_exp_arr(BIGNUM *r, const BIGNUM *a, const BIGNUM *b,
3696  const int p[], BN_CTX *ctx);
3697 int BN_GF2m_mod_sqrt_arr(BIGNUM *r, const BIGNUM *a,
3698  const int p[], BN_CTX *ctx);
3699 int BN_GF2m_mod_solve_quad_arr(BIGNUM *r, const BIGNUM *a,
3700  const int p[], BN_CTX *ctx);
3701 int BN_GF2m_poly2arr(const BIGNUM *a, int p[], int max);
3702 int BN_GF2m_arr2poly(const int p[], BIGNUM *a);
3703 int BN_nist_mod_192(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx);
3704 int BN_nist_mod_224(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx);
3705 int BN_nist_mod_256(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx);
3706 int BN_nist_mod_384(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx);
3707 int BN_nist_mod_521(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx);
3708 const BIGNUM *BN_get0_nist_prime_192(void);
3709 const BIGNUM *BN_get0_nist_prime_224(void);
3710 const BIGNUM *BN_get0_nist_prime_256(void);
3711 const BIGNUM *BN_get0_nist_prime_384(void);
3712 const BIGNUM *BN_get0_nist_prime_521(void);
3713 BIGNUM *bn_expand2(BIGNUM *a, int words);
3714 BIGNUM *bn_dup_expand(const BIGNUM *a, int words);
3715 unsigned int bn_mul_add_words(unsigned int *rp, const unsigned int *ap, int num, unsigned int w);
3716 unsigned int bn_mul_words(unsigned int *rp, const unsigned int *ap, int num, unsigned int w);
3717 void bn_sqr_words(unsigned int *rp, const unsigned int *ap, int num);
3718 unsigned int bn_div_words(unsigned int h, unsigned int l, unsigned int d);
3719 unsigned int bn_add_words(unsigned int *rp, const unsigned int *ap, const unsigned int *bp,int num);
3720 unsigned int bn_sub_words(unsigned int *rp, const unsigned int *ap, const unsigned int *bp,int num);
3721 BIGNUM *get_rfc2409_prime_768(BIGNUM *bn);
3722 BIGNUM *get_rfc2409_prime_1024(BIGNUM *bn);
3723 BIGNUM *get_rfc3526_prime_1536(BIGNUM *bn);
3724 BIGNUM *get_rfc3526_prime_2048(BIGNUM *bn);
3725 BIGNUM *get_rfc3526_prime_3072(BIGNUM *bn);
3726 BIGNUM *get_rfc3526_prime_4096(BIGNUM *bn);
3727 BIGNUM *get_rfc3526_prime_6144(BIGNUM *bn);
3728 BIGNUM *get_rfc3526_prime_8192(BIGNUM *bn);
3729 int BN_bntest_rand(BIGNUM *rnd, int bits, int top,int bottom);
3730 void ERR_load_BN_strings(void);
3731 void buffer_put_bignum(Buffer *, const BIGNUM *);
3732 void buffer_put_bignum2(Buffer *, const BIGNUM *);
3733 void buffer_get_bignum(Buffer *, BIGNUM *);
3734 void buffer_get_bignum2(Buffer *, BIGNUM *);
3735 u_short buffer_get_short(Buffer *);
3736 void buffer_put_short(Buffer *, u_short);
3737 u_int buffer_get_int(Buffer *);
3738 void buffer_put_int(Buffer *, u_int);
3739 u_int64_t buffer_get_int64(Buffer *);
3740 void buffer_put_int64(Buffer *, u_int64_t);
3741 int buffer_get_char(Buffer *);
3742 void buffer_put_char(Buffer *, int);
3743 void *buffer_get_string(Buffer *, u_int *);
3744 void *buffer_get_string_ptr(Buffer *, u_int *);
3745 void buffer_put_string(Buffer *, const void *, u_int);
3746 char *buffer_get_cstring(Buffer *, u_int *);
3747 void buffer_put_cstring(Buffer *, const char *);
3748 int buffer_put_bignum_ret(Buffer *, const BIGNUM *);
3749 int buffer_get_bignum_ret(Buffer *, BIGNUM *);
3750 int buffer_put_bignum2_ret(Buffer *, const BIGNUM *);
3751 int buffer_get_bignum2_ret(Buffer *, BIGNUM *);
3752 int buffer_get_short_ret(u_short *, Buffer *);
3753 int buffer_get_int_ret(u_int *, Buffer *);
3754 int buffer_get_int64_ret(u_int64_t *, Buffer *);
3755 void *buffer_get_string_ret(Buffer *, u_int *);
3756 char *buffer_get_cstring_ret(Buffer *, u_int *);
3757 void *buffer_get_string_ptr_ret(Buffer *, u_int *);
3758 int buffer_get_char_ret(u_char *, Buffer *);
3759 void *buffer_get_bignum2_as_string_ret(Buffer *, u_int *);
3760 void *buffer_get_bignum2_as_string(Buffer *, u_int *);
3761 void buffer_put_bignum2_from_string(Buffer *, const u_char *, u_int);
3762 struct timex
3763 {
3764   unsigned int modes;
3765   __syscall_slong_t offset;
3766   __syscall_slong_t freq;
3767   __syscall_slong_t maxerror;
3768   __syscall_slong_t esterror;
3769   int status;
3770   __syscall_slong_t constant;
3771   __syscall_slong_t precision;
3772   __syscall_slong_t tolerance;
3773   struct timeval time;
3774   __syscall_slong_t tick;
3775   __syscall_slong_t ppsfreq;
3776   __syscall_slong_t jitter;
3777   int shift;
3778   __syscall_slong_t stabil;
3779   __syscall_slong_t jitcnt;
3780   __syscall_slong_t calcnt;
3781   __syscall_slong_t errcnt;
3782   __syscall_slong_t stbcnt;
3783   int tai;
3784   int :32; int :32; int :32; int :32;
3785   int :32; int :32; int :32; int :32;
3786   int :32; int :32; int :32;
3787 };
3788 extern int clock_adjtime (__clockid_t __clock_id, struct timex *__utx) __attribute__ ((__nothrow__ , __leaf__));
3789 struct tm
3790 {
3791   int tm_sec;
3792   int tm_min;
3793   int tm_hour;
3794   int tm_mday;
3795   int tm_mon;
3796   int tm_year;
3797   int tm_wday;
3798   int tm_yday;
3799   int tm_isdst;
3800   long int tm_gmtoff;
3801   const char *tm_zone;
3802 };
3803 struct itimerspec
3804   {
3805     struct timespec it_interval;
3806     struct timespec it_value;
3807   };
3808 struct sigevent;
3809 extern clock_t clock (void) __attribute__ ((__nothrow__ , __leaf__));
3810 extern time_t time (time_t *__timer) __attribute__ ((__nothrow__ , __leaf__));
3811 extern double difftime (time_t __time1, time_t __time0)
3812      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
3813 extern time_t mktime (struct tm *__tp) __attribute__ ((__nothrow__ , __leaf__));
3814 extern size_t strftime (char *__restrict __s, size_t __maxsize,
3815    const char *__restrict __format,
3816    const struct tm *__restrict __tp) __attribute__ ((__nothrow__ , __leaf__));
3817 extern char *strptime (const char *__restrict __s,
3818          const char *__restrict __fmt, struct tm *__tp)
3819      __attribute__ ((__nothrow__ , __leaf__));
3820 extern size_t strftime_l (char *__restrict __s, size_t __maxsize,
3821      const char *__restrict __format,
3822      const struct tm *__restrict __tp,
3823      __locale_t __loc) __attribute__ ((__nothrow__ , __leaf__));
3824 extern char *strptime_l (const char *__restrict __s,
3825     const char *__restrict __fmt, struct tm *__tp,
3826     __locale_t __loc) __attribute__ ((__nothrow__ , __leaf__));
3827 extern struct tm *gmtime (const time_t *__timer) __attribute__ ((__nothrow__ , __leaf__));
3828 extern struct tm *localtime (const time_t *__timer) __attribute__ ((__nothrow__ , __leaf__));
3829 extern struct tm *gmtime_r (const time_t *__restrict __timer,
3830        struct tm *__restrict __tp) __attribute__ ((__nothrow__ , __leaf__));
3831 extern struct tm *localtime_r (const time_t *__restrict __timer,
3832           struct tm *__restrict __tp) __attribute__ ((__nothrow__ , __leaf__));
3833 extern char *asctime (const struct tm *__tp) __attribute__ ((__nothrow__ , __leaf__));
3834 extern char *ctime (const time_t *__timer) __attribute__ ((__nothrow__ , __leaf__));
3835 extern char *asctime_r (const struct tm *__restrict __tp,
3836    char *__restrict __buf) __attribute__ ((__nothrow__ , __leaf__));
3837 extern char *ctime_r (const time_t *__restrict __timer,
3838         char *__restrict __buf) __attribute__ ((__nothrow__ , __leaf__));
3839 extern char *__tzname[2];
3840 extern int __daylight;
3841 extern long int __timezone;
3842 extern char *tzname[2];
3843 extern void tzset (void) __attribute__ ((__nothrow__ , __leaf__));
3844 extern int daylight;
3845 extern long int timezone;
3846 extern int stime (const time_t *__when) __attribute__ ((__nothrow__ , __leaf__));
3847 extern time_t timegm (struct tm *__tp) __attribute__ ((__nothrow__ , __leaf__));
3848 extern time_t timelocal (struct tm *__tp) __attribute__ ((__nothrow__ , __leaf__));
3849 extern int dysize (int __year) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
3850 extern int nanosleep (const struct timespec *__requested_time,
3851         struct timespec *__remaining);
3852 extern int clock_getres (clockid_t __clock_id, struct timespec *__res) __attribute__ ((__nothrow__ , __leaf__));
3853 extern int clock_gettime (clockid_t __clock_id, struct timespec *__tp) __attribute__ ((__nothrow__ , __leaf__));
3854 extern int clock_settime (clockid_t __clock_id, const struct timespec *__tp)
3855      __attribute__ ((__nothrow__ , __leaf__));
3856 extern int clock_nanosleep (clockid_t __clock_id, int __flags,
3857        const struct timespec *__req,
3858        struct timespec *__rem);
3859 extern int clock_getcpuclockid (pid_t __pid, clockid_t *__clock_id) __attribute__ ((__nothrow__ , __leaf__));
3860 extern int timer_create (clockid_t __clock_id,
3861     struct sigevent *__restrict __evp,
3862     timer_t *__restrict __timerid) __attribute__ ((__nothrow__ , __leaf__));
3863 extern int timer_delete (timer_t __timerid) __attribute__ ((__nothrow__ , __leaf__));
3864 extern int timer_settime (timer_t __timerid, int __flags,
3865      const struct itimerspec *__restrict __value,
3866      struct itimerspec *__restrict __ovalue) __attribute__ ((__nothrow__ , __leaf__));
3867 extern int timer_gettime (timer_t __timerid, struct itimerspec *__value)
3868      __attribute__ ((__nothrow__ , __leaf__));
3869 extern int timer_getoverrun (timer_t __timerid) __attribute__ ((__nothrow__ , __leaf__));
3870 extern int timespec_get (struct timespec *__ts, int __base)
3871      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
3872 extern int getdate_err;
3873 extern struct tm *getdate (const char *__string);
3874 extern int getdate_r (const char *__restrict __string,
3875         struct tm *__restrict __resbufp);
3876 typedef struct bio_st BIO;
3877 void BIO_set_flags(BIO *b, int flags);
3878 int BIO_test_flags(const BIO *b, int flags);
3879 void BIO_clear_flags(BIO *b, int flags);
3880 long (*BIO_get_callback(const BIO *b)) (struct bio_st *,int,const char *,int, long,long);
3881 void BIO_set_callback(BIO *b,
3882  long (*callback)(struct bio_st *,int,const char *,int, long,long));
3883 char *BIO_get_callback_arg(const BIO *b);
3884 void BIO_set_callback_arg(BIO *b, char *arg);
3885 const char * BIO_method_name(const BIO *b);
3886 int BIO_method_type(const BIO *b);
3887 typedef void bio_info_cb(struct bio_st *, int, const char *, int, long, long);
3888 typedef struct bio_method_st
3889  {
3890  int type;
3891  const char *name;
3892  int (*bwrite)(BIO *, const char *, int);
3893  int (*bread)(BIO *, char *, int);
3894  int (*bputs)(BIO *, const char *);
3895  int (*bgets)(BIO *, char *, int);
3896  long (*ctrl)(BIO *, int, long, void *);
3897  int (*create)(BIO *);
3898  int (*destroy)(BIO *);
3899         long (*callback_ctrl)(BIO *, int, bio_info_cb *);
3900  } BIO_METHOD;
3901 struct bio_st
3902  {
3903  BIO_METHOD *method;
3904  long (*callback)(struct bio_st *,int,const char *,int, long,long);
3905  char *cb_arg;
3906  int init;
3907  int shutdown;
3908  int flags;
3909  int retry_reason;
3910  int num;
3911  void *ptr;
3912  struct bio_st *next_bio;
3913  struct bio_st *prev_bio;
3914  int references;
3915  unsigned long num_read;
3916  unsigned long num_write;
3917  CRYPTO_EX_DATA ex_data;
3918  };
3919 struct stack_st_BIO { _STACK stack; };
3920 typedef struct bio_f_buffer_ctx_struct
3921  {
3922  int ibuf_size;
3923  int obuf_size;
3924  char *ibuf;
3925  int ibuf_len;
3926  int ibuf_off;
3927  char *obuf;
3928  int obuf_len;
3929  int obuf_off;
3930  } BIO_F_BUFFER_CTX;
3931 typedef int asn1_ps_func(BIO *b, unsigned char **pbuf, int *plen, void *parg);
3932 size_t BIO_ctrl_pending(BIO *b);
3933 size_t BIO_ctrl_wpending(BIO *b);
3934 size_t BIO_ctrl_get_write_guarantee(BIO *b);
3935 size_t BIO_ctrl_get_read_request(BIO *b);
3936 int BIO_ctrl_reset_read_request(BIO *b);
3937 int BIO_set_ex_data(BIO *bio,int idx,void *data);
3938 void *BIO_get_ex_data(BIO *bio,int idx);
3939 int BIO_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,
3940  CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func);
3941 unsigned long BIO_number_read(BIO *bio);
3942 unsigned long BIO_number_written(BIO *bio);
3943 int BIO_asn1_set_prefix(BIO *b, asn1_ps_func *prefix,
3944      asn1_ps_func *prefix_free);
3945 int BIO_asn1_get_prefix(BIO *b, asn1_ps_func **pprefix,
3946      asn1_ps_func **pprefix_free);
3947 int BIO_asn1_set_suffix(BIO *b, asn1_ps_func *suffix,
3948      asn1_ps_func *suffix_free);
3949 int BIO_asn1_get_suffix(BIO *b, asn1_ps_func **psuffix,
3950      asn1_ps_func **psuffix_free);
3951 BIO_METHOD *BIO_s_file(void );
3952 BIO *BIO_new_file(const char *filename, const char *mode);
3953 BIO *BIO_new_fp(FILE *stream, int close_flag);
3954 BIO * BIO_new(BIO_METHOD *type);
3955 int BIO_set(BIO *a,BIO_METHOD *type);
3956 int BIO_free(BIO *a);
3957 void BIO_vfree(BIO *a);
3958 int BIO_read(BIO *b, void *data, int len);
3959 int BIO_gets(BIO *bp,char *buf, int size);
3960 int BIO_write(BIO *b, const void *data, int len);
3961 int BIO_puts(BIO *bp,const char *buf);
3962 int BIO_indent(BIO *b,int indent,int max);
3963 long BIO_ctrl(BIO *bp,int cmd,long larg,void *parg);
3964 long BIO_callback_ctrl(BIO *b, int cmd, void (*fp)(struct bio_st *, int, const char *, int, long, long));
3965 char * BIO_ptr_ctrl(BIO *bp,int cmd,long larg);
3966 long BIO_int_ctrl(BIO *bp,int cmd,long larg,int iarg);
3967 BIO * BIO_push(BIO *b,BIO *append);
3968 BIO * BIO_pop(BIO *b);
3969 void BIO_free_all(BIO *a);
3970 BIO * BIO_find_type(BIO *b,int bio_type);
3971 BIO * BIO_next(BIO *b);
3972 BIO * BIO_get_retry_BIO(BIO *bio, int *reason);
3973 int BIO_get_retry_reason(BIO *bio);
3974 BIO * BIO_dup_chain(BIO *in);
3975 int BIO_nread0(BIO *bio, char **buf);
3976 int BIO_nread(BIO *bio, char **buf, int num);
3977 int BIO_nwrite0(BIO *bio, char **buf);
3978 int BIO_nwrite(BIO *bio, char **buf, int num);
3979 long BIO_debug_callback(BIO *bio,int cmd,const char *argp,int argi,
3980  long argl,long ret);
3981 BIO_METHOD *BIO_s_mem(void);
3982 BIO *BIO_new_mem_buf(void *buf, int len);
3983 BIO_METHOD *BIO_s_socket(void);
3984 BIO_METHOD *BIO_s_connect(void);
3985 BIO_METHOD *BIO_s_accept(void);
3986 BIO_METHOD *BIO_s_fd(void);
3987 BIO_METHOD *BIO_s_log(void);
3988 BIO_METHOD *BIO_s_bio(void);
3989 BIO_METHOD *BIO_s_null(void);
3990 BIO_METHOD *BIO_f_null(void);
3991 BIO_METHOD *BIO_f_buffer(void);
3992 BIO_METHOD *BIO_f_nbio_test(void);
3993 BIO_METHOD *BIO_s_datagram(void);
3994 int BIO_sock_should_retry(int i);
3995 int BIO_sock_non_fatal_error(int error);
3996 int BIO_dgram_non_fatal_error(int error);
3997 int BIO_fd_should_retry(int i);
3998 int BIO_fd_non_fatal_error(int error);
3999 int BIO_dump_cb(int (*cb)(const void *data, size_t len, void *u),
4000   void *u, const char *s, int len);
4001 int BIO_dump_indent_cb(int (*cb)(const void *data, size_t len, void *u),
4002          void *u, const char *s, int len, int indent);
4003 int BIO_dump(BIO *b,const char *bytes,int len);
4004 int BIO_dump_indent(BIO *b,const char *bytes,int len,int indent);
4005 int BIO_dump_fp(FILE *fp, const char *s, int len);
4006 int BIO_dump_indent_fp(FILE *fp, const char *s, int len, int indent);
4007 struct hostent *BIO_gethostbyname(const char *name);
4008 int BIO_sock_error(int sock);
4009 int BIO_socket_ioctl(int fd, long type, void *arg);
4010 int BIO_socket_nbio(int fd,int mode);
4011 int BIO_get_port(const char *str, unsigned short *port_ptr);
4012 int BIO_get_host_ip(const char *str, unsigned char *ip);
4013 int BIO_get_accept_socket(char *host_port,int mode);
4014 int BIO_accept(int sock,char **ip_port);
4015 int BIO_sock_init(void );
4016 void BIO_sock_cleanup(void);
4017 int BIO_set_tcp_ndelay(int sock,int turn_on);
4018 BIO *BIO_new_socket(int sock, int close_flag);
4019 BIO *BIO_new_dgram(int fd, int close_flag);
4020 BIO *BIO_new_fd(int fd, int close_flag);
4021 BIO *BIO_new_connect(char *host_port);
4022 BIO *BIO_new_accept(char *host_port);
4023 int BIO_new_bio_pair(BIO **bio1, size_t writebuf1,
4024  BIO **bio2, size_t writebuf2);
4025 void BIO_copy_next_retry(BIO *b);
4026 int BIO_printf(BIO *bio, const char *format, ...)
4027  __attribute__((__format__(__printf__,2,3)));
4028 int BIO_vprintf(BIO *bio, const char *format, va_list args)
4029  __attribute__((__format__(__printf__,2,0)));
4030 int BIO_snprintf(char *buf, size_t n, const char *format, ...)
4031  __attribute__((__format__(__printf__,3,4)));
4032 int BIO_vsnprintf(char *buf, size_t n, const char *format, va_list args)
4033  __attribute__((__format__(__printf__,3,0)));
4034 void ERR_load_BIO_strings(void);
4035 struct X509_algor_st;
4036 struct stack_st_X509_ALGOR { _STACK stack; };
4037 typedef struct asn1_ctx_st
4038  {
4039  unsigned char *p;
4040  int eos;
4041  int error;
4042  int inf;
4043  int tag;
4044  int xclass;
4045  long slen;
4046  unsigned char *max;
4047  unsigned char *q;
4048  unsigned char **pp;
4049  int line;
4050  } ASN1_CTX;
4051 typedef struct asn1_const_ctx_st
4052  {
4053  const unsigned char *p;
4054  int eos;
4055  int error;
4056  int inf;
4057  int tag;
4058  int xclass;
4059  long slen;
4060  const unsigned char *max;
4061  const unsigned char *q;
4062  const unsigned char **pp;
4063  int line;
4064  } ASN1_const_CTX;
4065 typedef struct asn1_object_st
4066  {
4067  const char *sn,*ln;
4068  int nid;
4069  int length;
4070  const unsigned char *data;
4071  int flags;
4072  } ASN1_OBJECT;
4073 struct asn1_string_st
4074  {
4075  int length;
4076  int type;
4077  unsigned char *data;
4078  long flags;
4079  };
4080 typedef struct ASN1_ENCODING_st
4081  {
4082  unsigned char *enc;
4083  long len;
4084  int modified;
4085  } ASN1_ENCODING;
4086 typedef struct asn1_string_table_st {
4087  int nid;
4088  long minsize;
4089  long maxsize;
4090  unsigned long mask;
4091  unsigned long flags;
4092 } ASN1_STRING_TABLE;
4093 struct stack_st_ASN1_STRING_TABLE { _STACK stack; };
4094 typedef struct ASN1_TEMPLATE_st ASN1_TEMPLATE;
4095 typedef struct ASN1_TLC_st ASN1_TLC;
4096 typedef struct ASN1_VALUE_st ASN1_VALUE;
4097 typedef void *d2i_of_void(void **,const unsigned char **,long); typedef int i2d_of_void(void *,unsigned char **);
4098 typedef const ASN1_ITEM ASN1_ITEM_EXP;
4099 struct stack_st_ASN1_INTEGER { _STACK stack; };
4100 struct stack_st_ASN1_GENERALSTRING { _STACK stack; };
4101 typedef struct asn1_type_st
4102  {
4103  int type;
4104  union {
4105   char *ptr;
4106   ASN1_BOOLEAN boolean;
4107   ASN1_STRING * asn1_string;
4108   ASN1_OBJECT * object;
4109   ASN1_INTEGER * integer;
4110   ASN1_ENUMERATED * enumerated;
4111   ASN1_BIT_STRING * bit_string;
4112   ASN1_OCTET_STRING * octet_string;
4113   ASN1_PRINTABLESTRING * printablestring;
4114   ASN1_T61STRING * t61string;
4115   ASN1_IA5STRING * ia5string;
4116   ASN1_GENERALSTRING * generalstring;
4117   ASN1_BMPSTRING * bmpstring;
4118   ASN1_UNIVERSALSTRING * universalstring;
4119   ASN1_UTCTIME * utctime;
4120   ASN1_GENERALIZEDTIME * generalizedtime;
4121   ASN1_VISIBLESTRING * visiblestring;
4122   ASN1_UTF8STRING * utf8string;
4123   ASN1_STRING * set;
4124   ASN1_STRING * sequence;
4125   ASN1_VALUE * asn1_value;
4126   } value;
4127  } ASN1_TYPE;
4128 struct stack_st_ASN1_TYPE { _STACK stack; };
4129 typedef struct stack_st_ASN1_TYPE ASN1_SEQUENCE_ANY;
4130 ASN1_SEQUENCE_ANY *d2i_ASN1_SEQUENCE_ANY(ASN1_SEQUENCE_ANY **a, const unsigned char **in, long len); int i2d_ASN1_SEQUENCE_ANY(const ASN1_SEQUENCE_ANY *a, unsigned char **out); extern const ASN1_ITEM ASN1_SEQUENCE_ANY_it;
4131 ASN1_SEQUENCE_ANY *d2i_ASN1_SET_ANY(ASN1_SEQUENCE_ANY **a, const unsigned char **in, long len); int i2d_ASN1_SET_ANY(const ASN1_SEQUENCE_ANY *a, unsigned char **out); extern const ASN1_ITEM ASN1_SET_ANY_it;
4132 typedef struct NETSCAPE_X509_st
4133  {
4134  ASN1_OCTET_STRING *header;
4135  X509 *cert;
4136  } NETSCAPE_X509;
4137 typedef struct BIT_STRING_BITNAME_st {
4138  int bitnum;
4139  const char *lname;
4140  const char *sname;
4141 } BIT_STRING_BITNAME;
4142 ASN1_TYPE *ASN1_TYPE_new(void); void ASN1_TYPE_free(ASN1_TYPE *a); ASN1_TYPE *d2i_ASN1_TYPE(ASN1_TYPE **a, const unsigned char **in, long len); int i2d_ASN1_TYPE(ASN1_TYPE *a, unsigned char **out); extern const ASN1_ITEM ASN1_ANY_it;
4143 int ASN1_TYPE_get(ASN1_TYPE *a);
4144 void ASN1_TYPE_set(ASN1_TYPE *a, int type, void *value);
4145 int ASN1_TYPE_set1(ASN1_TYPE *a, int type, const void *value);
4146 int ASN1_TYPE_cmp(ASN1_TYPE *a, ASN1_TYPE *b);
4147 ASN1_OBJECT * ASN1_OBJECT_new(void );
4148 void ASN1_OBJECT_free(ASN1_OBJECT *a);
4149 int i2d_ASN1_OBJECT(ASN1_OBJECT *a,unsigned char **pp);
4150 ASN1_OBJECT * c2i_ASN1_OBJECT(ASN1_OBJECT **a,const unsigned char **pp,
4151    long length);
4152 ASN1_OBJECT * d2i_ASN1_OBJECT(ASN1_OBJECT **a,const unsigned char **pp,
4153    long length);
4154 extern const ASN1_ITEM ASN1_OBJECT_it;
4155 struct stack_st_ASN1_OBJECT { _STACK stack; };
4156 ASN1_STRING * ASN1_STRING_new(void);
4157 void ASN1_STRING_free(ASN1_STRING *a);
4158 int ASN1_STRING_copy(ASN1_STRING *dst, const ASN1_STRING *str);
4159 ASN1_STRING * ASN1_STRING_dup(const ASN1_STRING *a);
4160 ASN1_STRING * ASN1_STRING_type_new(int type );
4161 int ASN1_STRING_cmp(const ASN1_STRING *a, const ASN1_STRING *b);
4162 int ASN1_STRING_set(ASN1_STRING *str, const void *data, int len);
4163 void ASN1_STRING_set0(ASN1_STRING *str, void *data, int len);
4164 int ASN1_STRING_length(const ASN1_STRING *x);
4165 void ASN1_STRING_length_set(ASN1_STRING *x, int n);
4166 int ASN1_STRING_type(ASN1_STRING *x);
4167 unsigned char * ASN1_STRING_data(ASN1_STRING *x);
4168 ASN1_BIT_STRING *ASN1_BIT_STRING_new(void); void ASN1_BIT_STRING_free(ASN1_BIT_STRING *a); ASN1_BIT_STRING *d2i_ASN1_BIT_STRING(ASN1_BIT_STRING **a, const unsigned char **in, long len); int i2d_ASN1_BIT_STRING(ASN1_BIT_STRING *a, unsigned char **out); extern const ASN1_ITEM ASN1_BIT_STRING_it;
4169 int i2c_ASN1_BIT_STRING(ASN1_BIT_STRING *a,unsigned char **pp);
4170 ASN1_BIT_STRING *c2i_ASN1_BIT_STRING(ASN1_BIT_STRING **a,const unsigned char **pp,
4171    long length);
4172 int ASN1_BIT_STRING_set(ASN1_BIT_STRING *a, unsigned char *d,
4173    int length );
4174 int ASN1_BIT_STRING_set_bit(ASN1_BIT_STRING *a, int n, int value);
4175 int ASN1_BIT_STRING_get_bit(ASN1_BIT_STRING *a, int n);
4176 int ASN1_BIT_STRING_check(ASN1_BIT_STRING *a,
4177                                      unsigned char *flags, int flags_len);
4178 int ASN1_BIT_STRING_name_print(BIO *out, ASN1_BIT_STRING *bs,
4179     BIT_STRING_BITNAME *tbl, int indent);
4180 int ASN1_BIT_STRING_num_asc(char *name, BIT_STRING_BITNAME *tbl);
4181 int ASN1_BIT_STRING_set_asc(ASN1_BIT_STRING *bs, char *name, int value,
4182     BIT_STRING_BITNAME *tbl);
4183 int i2d_ASN1_BOOLEAN(int a,unsigned char **pp);
4184 int d2i_ASN1_BOOLEAN(int *a,const unsigned char **pp,long length);
4185 ASN1_INTEGER *ASN1_INTEGER_new(void); void ASN1_INTEGER_free(ASN1_INTEGER *a); ASN1_INTEGER *d2i_ASN1_INTEGER(ASN1_INTEGER **a, const unsigned char **in, long len); int i2d_ASN1_INTEGER(ASN1_INTEGER *a, unsigned char **out); extern const ASN1_ITEM ASN1_INTEGER_it;
4186 int i2c_ASN1_INTEGER(ASN1_INTEGER *a,unsigned char **pp);
4187 ASN1_INTEGER *c2i_ASN1_INTEGER(ASN1_INTEGER **a,const unsigned char **pp,
4188    long length);
4189 ASN1_INTEGER *d2i_ASN1_UINTEGER(ASN1_INTEGER **a,const unsigned char **pp,
4190    long length);
4191 ASN1_INTEGER * ASN1_INTEGER_dup(const ASN1_INTEGER *x);
4192 int ASN1_INTEGER_cmp(const ASN1_INTEGER *x, const ASN1_INTEGER *y);
4193 ASN1_ENUMERATED *ASN1_ENUMERATED_new(void); void ASN1_ENUMERATED_free(ASN1_ENUMERATED *a); ASN1_ENUMERATED *d2i_ASN1_ENUMERATED(ASN1_ENUMERATED **a, const unsigned char **in, long len); int i2d_ASN1_ENUMERATED(ASN1_ENUMERATED *a, unsigned char **out); extern const ASN1_ITEM ASN1_ENUMERATED_it;
4194 int ASN1_UTCTIME_check(ASN1_UTCTIME *a);
4195 ASN1_UTCTIME *ASN1_UTCTIME_set(ASN1_UTCTIME *s,time_t t);
4196 ASN1_UTCTIME *ASN1_UTCTIME_adj(ASN1_UTCTIME *s, time_t t,
4197     int offset_day, long offset_sec);
4198 int ASN1_UTCTIME_set_string(ASN1_UTCTIME *s, const char *str);
4199 int ASN1_UTCTIME_cmp_time_t(const ASN1_UTCTIME *s, time_t t);
4200 int ASN1_GENERALIZEDTIME_check(ASN1_GENERALIZEDTIME *a);
4201 ASN1_GENERALIZEDTIME *ASN1_GENERALIZEDTIME_set(ASN1_GENERALIZEDTIME *s,time_t t);
4202 ASN1_GENERALIZEDTIME *ASN1_GENERALIZEDTIME_adj(ASN1_GENERALIZEDTIME *s,
4203       time_t t, int offset_day, long offset_sec);
4204 int ASN1_GENERALIZEDTIME_set_string(ASN1_GENERALIZEDTIME *s, const char *str);
4205 ASN1_OCTET_STRING *ASN1_OCTET_STRING_new(void); void ASN1_OCTET_STRING_free(ASN1_OCTET_STRING *a); ASN1_OCTET_STRING *d2i_ASN1_OCTET_STRING(ASN1_OCTET_STRING **a, const unsigned char **in, long len); int i2d_ASN1_OCTET_STRING(ASN1_OCTET_STRING *a, unsigned char **out); extern const ASN1_ITEM ASN1_OCTET_STRING_it;
4206 ASN1_OCTET_STRING * ASN1_OCTET_STRING_dup(const ASN1_OCTET_STRING *a);
4207 int ASN1_OCTET_STRING_cmp(const ASN1_OCTET_STRING *a, const ASN1_OCTET_STRING *b);
4208 int ASN1_OCTET_STRING_set(ASN1_OCTET_STRING *str, const unsigned char *data, int len);
4209 ASN1_VISIBLESTRING *ASN1_VISIBLESTRING_new(void); void ASN1_VISIBLESTRING_free(ASN1_VISIBLESTRING *a); ASN1_VISIBLESTRING *d2i_ASN1_VISIBLESTRING(ASN1_VISIBLESTRING **a, const unsigned char **in, long len); int i2d_ASN1_VISIBLESTRING(ASN1_VISIBLESTRING *a, unsigned char **out); extern const ASN1_ITEM ASN1_VISIBLESTRING_it;
4210 ASN1_UNIVERSALSTRING *ASN1_UNIVERSALSTRING_new(void); void ASN1_UNIVERSALSTRING_free(ASN1_UNIVERSALSTRING *a); ASN1_UNIVERSALSTRING *d2i_ASN1_UNIVERSALSTRING(ASN1_UNIVERSALSTRING **a, const unsigned char **in, long len); int i2d_ASN1_UNIVERSALSTRING(ASN1_UNIVERSALSTRING *a, unsigned char **out); extern const ASN1_ITEM ASN1_UNIVERSALSTRING_it;
4211 ASN1_UTF8STRING *ASN1_UTF8STRING_new(void); void ASN1_UTF8STRING_free(ASN1_UTF8STRING *a); ASN1_UTF8STRING *d2i_ASN1_UTF8STRING(ASN1_UTF8STRING **a, const unsigned char **in, long len); int i2d_ASN1_UTF8STRING(ASN1_UTF8STRING *a, unsigned char **out); extern const ASN1_ITEM ASN1_UTF8STRING_it;
4212 ASN1_NULL *ASN1_NULL_new(void); void ASN1_NULL_free(ASN1_NULL *a); ASN1_NULL *d2i_ASN1_NULL(ASN1_NULL **a, const unsigned char **in, long len); int i2d_ASN1_NULL(ASN1_NULL *a, unsigned char **out); extern const ASN1_ITEM ASN1_NULL_it;
4213 ASN1_BMPSTRING *ASN1_BMPSTRING_new(void); void ASN1_BMPSTRING_free(ASN1_BMPSTRING *a); ASN1_BMPSTRING *d2i_ASN1_BMPSTRING(ASN1_BMPSTRING **a, const unsigned char **in, long len); int i2d_ASN1_BMPSTRING(ASN1_BMPSTRING *a, unsigned char **out); extern const ASN1_ITEM ASN1_BMPSTRING_it;
4214 int UTF8_getc(const unsigned char *str, int len, unsigned long *val);
4215 int UTF8_putc(unsigned char *str, int len, unsigned long value);
4216 ASN1_STRING *ASN1_PRINTABLE_new(void); void ASN1_PRINTABLE_free(ASN1_STRING *a); ASN1_STRING *d2i_ASN1_PRINTABLE(ASN1_STRING **a, const unsigned char **in, long len); int i2d_ASN1_PRINTABLE(ASN1_STRING *a, unsigned char **out); extern const ASN1_ITEM ASN1_PRINTABLE_it;
4217 ASN1_STRING *DIRECTORYSTRING_new(void); void DIRECTORYSTRING_free(ASN1_STRING *a); ASN1_STRING *d2i_DIRECTORYSTRING(ASN1_STRING **a, const unsigned char **in, long len); int i2d_DIRECTORYSTRING(ASN1_STRING *a, unsigned char **out); extern const ASN1_ITEM DIRECTORYSTRING_it;
4218 ASN1_STRING *DISPLAYTEXT_new(void); void DISPLAYTEXT_free(ASN1_STRING *a); ASN1_STRING *d2i_DISPLAYTEXT(ASN1_STRING **a, const unsigned char **in, long len); int i2d_DISPLAYTEXT(ASN1_STRING *a, unsigned char **out); extern const ASN1_ITEM DISPLAYTEXT_it;
4219 ASN1_PRINTABLESTRING *ASN1_PRINTABLESTRING_new(void); void ASN1_PRINTABLESTRING_free(ASN1_PRINTABLESTRING *a); ASN1_PRINTABLESTRING *d2i_ASN1_PRINTABLESTRING(ASN1_PRINTABLESTRING **a, const unsigned char **in, long len); int i2d_ASN1_PRINTABLESTRING(ASN1_PRINTABLESTRING *a, unsigned char **out); extern const ASN1_ITEM ASN1_PRINTABLESTRING_it;
4220 ASN1_T61STRING *ASN1_T61STRING_new(void); void ASN1_T61STRING_free(ASN1_T61STRING *a); ASN1_T61STRING *d2i_ASN1_T61STRING(ASN1_T61STRING **a, const unsigned char **in, long len); int i2d_ASN1_T61STRING(ASN1_T61STRING *a, unsigned char **out); extern const ASN1_ITEM ASN1_T61STRING_it;
4221 ASN1_IA5STRING *ASN1_IA5STRING_new(void); void ASN1_IA5STRING_free(ASN1_IA5STRING *a); ASN1_IA5STRING *d2i_ASN1_IA5STRING(ASN1_IA5STRING **a, const unsigned char **in, long len); int i2d_ASN1_IA5STRING(ASN1_IA5STRING *a, unsigned char **out); extern const ASN1_ITEM ASN1_IA5STRING_it;
4222 ASN1_GENERALSTRING *ASN1_GENERALSTRING_new(void); void ASN1_GENERALSTRING_free(ASN1_GENERALSTRING *a); ASN1_GENERALSTRING *d2i_ASN1_GENERALSTRING(ASN1_GENERALSTRING **a, const unsigned char **in, long len); int i2d_ASN1_GENERALSTRING(ASN1_GENERALSTRING *a, unsigned char **out); extern const ASN1_ITEM ASN1_GENERALSTRING_it;
4223 ASN1_UTCTIME *ASN1_UTCTIME_new(void); void ASN1_UTCTIME_free(ASN1_UTCTIME *a); ASN1_UTCTIME *d2i_ASN1_UTCTIME(ASN1_UTCTIME **a, const unsigned char **in, long len); int i2d_ASN1_UTCTIME(ASN1_UTCTIME *a, unsigned char **out); extern const ASN1_ITEM ASN1_UTCTIME_it;
4224 ASN1_GENERALIZEDTIME *ASN1_GENERALIZEDTIME_new(void); void ASN1_GENERALIZEDTIME_free(ASN1_GENERALIZEDTIME *a); ASN1_GENERALIZEDTIME *d2i_ASN1_GENERALIZEDTIME(ASN1_GENERALIZEDTIME **a, const unsigned char **in, long len); int i2d_ASN1_GENERALIZEDTIME(ASN1_GENERALIZEDTIME *a, unsigned char **out); extern const ASN1_ITEM ASN1_GENERALIZEDTIME_it;
4225 ASN1_TIME *ASN1_TIME_new(void); void ASN1_TIME_free(ASN1_TIME *a); ASN1_TIME *d2i_ASN1_TIME(ASN1_TIME **a, const unsigned char **in, long len); int i2d_ASN1_TIME(ASN1_TIME *a, unsigned char **out); extern const ASN1_ITEM ASN1_TIME_it;
4226 extern const ASN1_ITEM ASN1_OCTET_STRING_NDEF_it;
4227 ASN1_TIME *ASN1_TIME_set(ASN1_TIME *s,time_t t);
4228 ASN1_TIME *ASN1_TIME_adj(ASN1_TIME *s,time_t t,
4229     int offset_day, long offset_sec);
4230 int ASN1_TIME_check(ASN1_TIME *t);
4231 ASN1_GENERALIZEDTIME *ASN1_TIME_to_generalizedtime(ASN1_TIME *t, ASN1_GENERALIZEDTIME **out);
4232 int ASN1_TIME_set_string(ASN1_TIME *s, const char *str);
4233 int i2d_ASN1_SET(struct stack_st_OPENSSL_BLOCK *a, unsigned char **pp,
4234    i2d_of_void *i2d, int ex_tag, int ex_class,
4235    int is_set);
4236 struct stack_st_OPENSSL_BLOCK *d2i_ASN1_SET(struct stack_st_OPENSSL_BLOCK **a,
4237          const unsigned char **pp,
4238          long length, d2i_of_void *d2i,
4239          void (*free_func)(OPENSSL_BLOCK), int ex_tag,
4240          int ex_class);
4241 int i2a_ASN1_INTEGER(BIO *bp, ASN1_INTEGER *a);
4242 int a2i_ASN1_INTEGER(BIO *bp,ASN1_INTEGER *bs,char *buf,int size);
4243 int i2a_ASN1_ENUMERATED(BIO *bp, ASN1_ENUMERATED *a);
4244 int a2i_ASN1_ENUMERATED(BIO *bp,ASN1_ENUMERATED *bs,char *buf,int size);
4245 int i2a_ASN1_OBJECT(BIO *bp,ASN1_OBJECT *a);
4246 int a2i_ASN1_STRING(BIO *bp,ASN1_STRING *bs,char *buf,int size);
4247 int i2a_ASN1_STRING(BIO *bp, ASN1_STRING *a, int type);
4248 int i2t_ASN1_OBJECT(char *buf,int buf_len,ASN1_OBJECT *a);
4249 int a2d_ASN1_OBJECT(unsigned char *out,int olen, const char *buf, int num);
4250 ASN1_OBJECT *ASN1_OBJECT_create(int nid, unsigned char *data,int len,
4251  const char *sn, const char *ln);
4252 int ASN1_INTEGER_set(ASN1_INTEGER *a, long v);
4253 long ASN1_INTEGER_get(const ASN1_INTEGER *a);
4254 ASN1_INTEGER *BN_to_ASN1_INTEGER(const BIGNUM *bn, ASN1_INTEGER *ai);
4255 BIGNUM *ASN1_INTEGER_to_BN(const ASN1_INTEGER *ai,BIGNUM *bn);
4256 int ASN1_ENUMERATED_set(ASN1_ENUMERATED *a, long v);
4257 long ASN1_ENUMERATED_get(ASN1_ENUMERATED *a);
4258 ASN1_ENUMERATED *BN_to_ASN1_ENUMERATED(BIGNUM *bn, ASN1_ENUMERATED *ai);
4259 BIGNUM *ASN1_ENUMERATED_to_BN(ASN1_ENUMERATED *ai,BIGNUM *bn);
4260 int ASN1_PRINTABLE_type(const unsigned char *s, int max);
4261 int i2d_ASN1_bytes(ASN1_STRING *a, unsigned char **pp, int tag, int xclass);
4262 ASN1_STRING *d2i_ASN1_bytes(ASN1_STRING **a, const unsigned char **pp,
4263  long length, int Ptag, int Pclass);
4264 unsigned long ASN1_tag2bit(int tag);
4265 ASN1_STRING *d2i_ASN1_type_bytes(ASN1_STRING **a,const unsigned char **pp,
4266   long length,int type);
4267 int asn1_Finish(ASN1_CTX *c);
4268 int asn1_const_Finish(ASN1_const_CTX *c);
4269 int ASN1_get_object(const unsigned char **pp, long *plength, int *ptag,
4270  int *pclass, long omax);
4271 int ASN1_check_infinite_end(unsigned char **p,long len);
4272 int ASN1_const_check_infinite_end(const unsigned char **p,long len);
4273 void ASN1_put_object(unsigned char **pp, int constructed, int length,
4274  int tag, int xclass);
4275 int ASN1_put_eoc(unsigned char **pp);
4276 int ASN1_object_size(int constructed, int length, int tag);
4277 void *ASN1_dup(i2d_of_void *i2d, d2i_of_void *d2i, void *x);
4278 void *ASN1_item_dup(const ASN1_ITEM *it, void *x);
4279 void *ASN1_d2i_fp(void *(*xnew)(void), d2i_of_void *d2i, FILE *in, void **x);
4280 void *ASN1_item_d2i_fp(const ASN1_ITEM *it, FILE *in, void *x);
4281 int ASN1_i2d_fp(i2d_of_void *i2d,FILE *out,void *x);
4282 int ASN1_item_i2d_fp(const ASN1_ITEM *it, FILE *out, void *x);
4283 int ASN1_STRING_print_ex_fp(FILE *fp, ASN1_STRING *str, unsigned long flags);
4284 int ASN1_STRING_to_UTF8(unsigned char **out, ASN1_STRING *in);
4285 void *ASN1_d2i_bio(void *(*xnew)(void), d2i_of_void *d2i, BIO *in, void **x);
4286 void *ASN1_item_d2i_bio(const ASN1_ITEM *it, BIO *in, void *x);
4287 int ASN1_i2d_bio(i2d_of_void *i2d,BIO *out, unsigned char *x);
4288 int ASN1_item_i2d_bio(const ASN1_ITEM *it, BIO *out, void *x);
4289 int ASN1_UTCTIME_print(BIO *fp, const ASN1_UTCTIME *a);
4290 int ASN1_GENERALIZEDTIME_print(BIO *fp, const ASN1_GENERALIZEDTIME *a);
4291 int ASN1_TIME_print(BIO *fp, const ASN1_TIME *a);
4292 int ASN1_STRING_print(BIO *bp, const ASN1_STRING *v);
4293 int ASN1_STRING_print_ex(BIO *out, ASN1_STRING *str, unsigned long flags);
4294 int ASN1_bn_print(BIO *bp, const char *number, const BIGNUM *num,
4295     unsigned char *buf, int off);
4296 int ASN1_parse(BIO *bp,const unsigned char *pp,long len,int indent);
4297 int ASN1_parse_dump(BIO *bp,const unsigned char *pp,long len,int indent,int dump);
4298 const char *ASN1_tag2str(int tag);
4299 NETSCAPE_X509 *NETSCAPE_X509_new(void); void NETSCAPE_X509_free(NETSCAPE_X509 *a); NETSCAPE_X509 *d2i_NETSCAPE_X509(NETSCAPE_X509 **a, const unsigned char **in, long len); int i2d_NETSCAPE_X509(NETSCAPE_X509 *a, unsigned char **out); extern const ASN1_ITEM NETSCAPE_X509_it;
4300 int ASN1_UNIVERSALSTRING_to_string(ASN1_UNIVERSALSTRING *s);
4301 int ASN1_TYPE_set_octetstring(ASN1_TYPE *a,
4302  unsigned char *data, int len);
4303 int ASN1_TYPE_get_octetstring(ASN1_TYPE *a,
4304  unsigned char *data, int max_len);
4305 int ASN1_TYPE_set_int_octetstring(ASN1_TYPE *a, long num,
4306  unsigned char *data, int len);
4307 int ASN1_TYPE_get_int_octetstring(ASN1_TYPE *a,long *num,
4308  unsigned char *data, int max_len);
4309 struct stack_st_OPENSSL_BLOCK *ASN1_seq_unpack(const unsigned char *buf, int len,
4310      d2i_of_void *d2i, void (*free_func)(OPENSSL_BLOCK));
4311 unsigned char *ASN1_seq_pack(struct stack_st_OPENSSL_BLOCK *safes, i2d_of_void *i2d,
4312         unsigned char **buf, int *len );
4313 void *ASN1_unpack_string(ASN1_STRING *oct, d2i_of_void *d2i);
4314 void *ASN1_item_unpack(ASN1_STRING *oct, const ASN1_ITEM *it);
4315 ASN1_STRING *ASN1_pack_string(void *obj, i2d_of_void *i2d,
4316          ASN1_OCTET_STRING **oct);
4317 ASN1_STRING *ASN1_item_pack(void *obj, const ASN1_ITEM *it, ASN1_OCTET_STRING **oct);
4318 void ASN1_STRING_set_default_mask(unsigned long mask);
4319 int ASN1_STRING_set_default_mask_asc(const char *p);
4320 unsigned long ASN1_STRING_get_default_mask(void);
4321 int ASN1_mbstring_copy(ASN1_STRING **out, const unsigned char *in, int len,
4322      int inform, unsigned long mask);
4323 int ASN1_mbstring_ncopy(ASN1_STRING **out, const unsigned char *in, int len,
4324      int inform, unsigned long mask,
4325      long minsize, long maxsize);
4326 ASN1_STRING *ASN1_STRING_set_by_NID(ASN1_STRING **out,
4327   const unsigned char *in, int inlen, int inform, int nid);
4328 ASN1_STRING_TABLE *ASN1_STRING_TABLE_get(int nid);
4329 int ASN1_STRING_TABLE_add(int, long, long, unsigned long, unsigned long);
4330 void ASN1_STRING_TABLE_cleanup(void);
4331 ASN1_VALUE *ASN1_item_new(const ASN1_ITEM *it);
4332 void ASN1_item_free(ASN1_VALUE *val, const ASN1_ITEM *it);
4333 ASN1_VALUE * ASN1_item_d2i(ASN1_VALUE **val, const unsigned char **in, long len, const ASN1_ITEM *it);
4334 int ASN1_item_i2d(ASN1_VALUE *val, unsigned char **out, const ASN1_ITEM *it);
4335 int ASN1_item_ndef_i2d(ASN1_VALUE *val, unsigned char **out, const ASN1_ITEM *it);
4336 void ASN1_add_oid_module(void);
4337 ASN1_TYPE *ASN1_generate_nconf(char *str, CONF *nconf);
4338 ASN1_TYPE *ASN1_generate_v3(char *str, X509V3_CTX *cnf);
4339 int ASN1_item_print(BIO *out, ASN1_VALUE *ifld, int indent,
4340     const ASN1_ITEM *it, const ASN1_PCTX *pctx);
4341 ASN1_PCTX *ASN1_PCTX_new(void);
4342 void ASN1_PCTX_free(ASN1_PCTX *p);
4343 unsigned long ASN1_PCTX_get_flags(ASN1_PCTX *p);
4344 void ASN1_PCTX_set_flags(ASN1_PCTX *p, unsigned long flags);
4345 unsigned long ASN1_PCTX_get_nm_flags(ASN1_PCTX *p);
4346 void ASN1_PCTX_set_nm_flags(ASN1_PCTX *p, unsigned long flags);
4347 unsigned long ASN1_PCTX_get_cert_flags(ASN1_PCTX *p);
4348 void ASN1_PCTX_set_cert_flags(ASN1_PCTX *p, unsigned long flags);
4349 unsigned long ASN1_PCTX_get_oid_flags(ASN1_PCTX *p);
4350 void ASN1_PCTX_set_oid_flags(ASN1_PCTX *p, unsigned long flags);
4351 unsigned long ASN1_PCTX_get_str_flags(ASN1_PCTX *p);
4352 void ASN1_PCTX_set_str_flags(ASN1_PCTX *p, unsigned long flags);
4353 BIO_METHOD *BIO_f_asn1(void);
4354 BIO *BIO_new_NDEF(BIO *out, ASN1_VALUE *val, const ASN1_ITEM *it);
4355 int i2d_ASN1_bio_stream(BIO *out, ASN1_VALUE *val, BIO *in, int flags,
4356     const ASN1_ITEM *it);
4357 int PEM_write_bio_ASN1_stream(BIO *out, ASN1_VALUE *val, BIO *in, int flags,
4358     const char *hdr,
4359     const ASN1_ITEM *it);
4360 int SMIME_write_ASN1(BIO *bio, ASN1_VALUE *val, BIO *data, int flags,
4361     int ctype_nid, int econt_nid,
4362     struct stack_st_X509_ALGOR *mdalgs,
4363     const ASN1_ITEM *it);
4364 ASN1_VALUE *SMIME_read_ASN1(BIO *bio, BIO **bcont, const ASN1_ITEM *it);
4365 int SMIME_crlf_copy(BIO *in, BIO *out, int flags);
4366 int SMIME_text(BIO *in, BIO *out);
4367 void ERR_load_ASN1_strings(void);
4368 typedef enum {
4369  POINT_CONVERSION_COMPRESSED = 2,
4370  POINT_CONVERSION_UNCOMPRESSED = 4,
4371  POINT_CONVERSION_HYBRID = 6
4372 } point_conversion_form_t;
4373 typedef struct ec_method_st EC_METHOD;
4374 typedef struct ec_group_st
4375  EC_GROUP;
4376 typedef struct ec_point_st EC_POINT;
4377 const EC_METHOD *EC_GFp_simple_method(void);
4378 const EC_METHOD *EC_GFp_mont_method(void);
4379 const EC_METHOD *EC_GFp_nist_method(void);
4380 const EC_METHOD *EC_GF2m_simple_method(void);
4381 EC_GROUP *EC_GROUP_new(const EC_METHOD *meth);
4382 void EC_GROUP_free(EC_GROUP *group);
4383 void EC_GROUP_clear_free(EC_GROUP *group);
4384 int EC_GROUP_copy(EC_GROUP *dst, const EC_GROUP *src);
4385 EC_GROUP *EC_GROUP_dup(const EC_GROUP *src);
4386 const EC_METHOD *EC_GROUP_method_of(const EC_GROUP *group);
4387 int EC_METHOD_get_field_type(const EC_METHOD *meth);
4388 int EC_GROUP_set_generator(EC_GROUP *group, const EC_POINT *generator, const BIGNUM *order, const BIGNUM *cofactor);
4389 const EC_POINT *EC_GROUP_get0_generator(const EC_GROUP *group);
4390 int EC_GROUP_get_order(const EC_GROUP *group, BIGNUM *order, BN_CTX *ctx);
4391 int EC_GROUP_get_cofactor(const EC_GROUP *group, BIGNUM *cofactor, BN_CTX *ctx);
4392 void EC_GROUP_set_curve_name(EC_GROUP *group, int nid);
4393 int EC_GROUP_get_curve_name(const EC_GROUP *group);
4394 void EC_GROUP_set_asn1_flag(EC_GROUP *group, int flag);
4395 int EC_GROUP_get_asn1_flag(const EC_GROUP *group);
4396 void EC_GROUP_set_point_conversion_form(EC_GROUP *group, point_conversion_form_t form);
4397 point_conversion_form_t EC_GROUP_get_point_conversion_form(const EC_GROUP *);
4398 unsigned char *EC_GROUP_get0_seed(const EC_GROUP *x);
4399 size_t EC_GROUP_get_seed_len(const EC_GROUP *);
4400 size_t EC_GROUP_set_seed(EC_GROUP *, const unsigned char *, size_t len);
4401 int EC_GROUP_set_curve_GFp(EC_GROUP *group, const BIGNUM *p, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx);
4402 int EC_GROUP_get_curve_GFp(const EC_GROUP *group, BIGNUM *p, BIGNUM *a, BIGNUM *b, BN_CTX *ctx);
4403 int EC_GROUP_set_curve_GF2m(EC_GROUP *group, const BIGNUM *p, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx);
4404 int EC_GROUP_get_curve_GF2m(const EC_GROUP *group, BIGNUM *p, BIGNUM *a, BIGNUM *b, BN_CTX *ctx);
4405 int EC_GROUP_get_degree(const EC_GROUP *group);
4406 int EC_GROUP_check(const EC_GROUP *group, BN_CTX *ctx);
4407 int EC_GROUP_check_discriminant(const EC_GROUP *group, BN_CTX *ctx);
4408 int EC_GROUP_cmp(const EC_GROUP *a, const EC_GROUP *b, BN_CTX *ctx);
4409 EC_GROUP *EC_GROUP_new_curve_GFp(const BIGNUM *p, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx);
4410 EC_GROUP *EC_GROUP_new_curve_GF2m(const BIGNUM *p, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx);
4411 EC_GROUP *EC_GROUP_new_by_curve_name(int nid);
4412 typedef struct {
4413  int nid;
4414  const char *comment;
4415  } EC_builtin_curve;
4416 size_t EC_get_builtin_curves(EC_builtin_curve *r, size_t nitems);
4417 EC_POINT *EC_POINT_new(const EC_GROUP *group);
4418 void EC_POINT_free(EC_POINT *point);
4419 void EC_POINT_clear_free(EC_POINT *point);
4420 int EC_POINT_copy(EC_POINT *dst, const EC_POINT *src);
4421 EC_POINT *EC_POINT_dup(const EC_POINT *src, const EC_GROUP *group);
4422 const EC_METHOD *EC_POINT_method_of(const EC_POINT *point);
4423 int EC_POINT_set_to_infinity(const EC_GROUP *group, EC_POINT *point);
4424 int EC_POINT_set_Jprojective_coordinates_GFp(const EC_GROUP *group, EC_POINT *p,
4425  const BIGNUM *x, const BIGNUM *y, const BIGNUM *z, BN_CTX *ctx);
4426 int EC_POINT_get_Jprojective_coordinates_GFp(const EC_GROUP *group,
4427  const EC_POINT *p, BIGNUM *x, BIGNUM *y, BIGNUM *z, BN_CTX *ctx);
4428 int EC_POINT_set_affine_coordinates_GFp(const EC_GROUP *group, EC_POINT *p,
4429  const BIGNUM *x, const BIGNUM *y, BN_CTX *ctx);
4430 int EC_POINT_get_affine_coordinates_GFp(const EC_GROUP *group,
4431  const EC_POINT *p, BIGNUM *x, BIGNUM *y, BN_CTX *ctx);
4432 int EC_POINT_set_compressed_coordinates_GFp(const EC_GROUP *group, EC_POINT *p,
4433  const BIGNUM *x, int y_bit, BN_CTX *ctx);
4434 int EC_POINT_set_affine_coordinates_GF2m(const EC_GROUP *group, EC_POINT *p,
4435  const BIGNUM *x, const BIGNUM *y, BN_CTX *ctx);
4436 int EC_POINT_get_affine_coordinates_GF2m(const EC_GROUP *group,
4437  const EC_POINT *p, BIGNUM *x, BIGNUM *y, BN_CTX *ctx);
4438 int EC_POINT_set_compressed_coordinates_GF2m(const EC_GROUP *group, EC_POINT *p,
4439  const BIGNUM *x, int y_bit, BN_CTX *ctx);
4440 size_t EC_POINT_point2oct(const EC_GROUP *group, const EC_POINT *p,
4441  point_conversion_form_t form,
4442         unsigned char *buf, size_t len, BN_CTX *ctx);
4443 int EC_POINT_oct2point(const EC_GROUP *group, EC_POINT *p,
4444         const unsigned char *buf, size_t len, BN_CTX *ctx);
4445 BIGNUM *EC_POINT_point2bn(const EC_GROUP *, const EC_POINT *,
4446  point_conversion_form_t form, BIGNUM *, BN_CTX *);
4447 EC_POINT *EC_POINT_bn2point(const EC_GROUP *, const BIGNUM *,
4448  EC_POINT *, BN_CTX *);
4449 char *EC_POINT_point2hex(const EC_GROUP *, const EC_POINT *,
4450  point_conversion_form_t form, BN_CTX *);
4451 EC_POINT *EC_POINT_hex2point(const EC_GROUP *, const char *,
4452  EC_POINT *, BN_CTX *);
4453 int EC_POINT_add(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a, const EC_POINT *b, BN_CTX *ctx);
4454 int EC_POINT_dbl(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a, BN_CTX *ctx);
4455 int EC_POINT_invert(const EC_GROUP *group, EC_POINT *a, BN_CTX *ctx);
4456 int EC_POINT_is_at_infinity(const EC_GROUP *group, const EC_POINT *p);
4457 int EC_POINT_is_on_curve(const EC_GROUP *group, const EC_POINT *point, BN_CTX *ctx);
4458 int EC_POINT_cmp(const EC_GROUP *group, const EC_POINT *a, const EC_POINT *b, BN_CTX *ctx);
4459 int EC_POINT_make_affine(const EC_GROUP *group, EC_POINT *point, BN_CTX *ctx);
4460 int EC_POINTs_make_affine(const EC_GROUP *group, size_t num, EC_POINT *points[], BN_CTX *ctx);
4461 int EC_POINTs_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, size_t num, const EC_POINT *p[], const BIGNUM *m[], BN_CTX *ctx);
4462 int EC_POINT_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, const EC_POINT *q, const BIGNUM *m, BN_CTX *ctx);
4463 int EC_GROUP_precompute_mult(EC_GROUP *group, BN_CTX *ctx);
4464 int EC_GROUP_have_precompute_mult(const EC_GROUP *group);
4465 int EC_GROUP_get_basis_type(const EC_GROUP *);
4466 int EC_GROUP_get_trinomial_basis(const EC_GROUP *, unsigned int *k);
4467 int EC_GROUP_get_pentanomial_basis(const EC_GROUP *, unsigned int *k1,
4468  unsigned int *k2, unsigned int *k3);
4469 typedef struct ecpk_parameters_st ECPKPARAMETERS;
4470 EC_GROUP *d2i_ECPKParameters(EC_GROUP **, const unsigned char **in, long len);
4471 int i2d_ECPKParameters(const EC_GROUP *, unsigned char **out);
4472 int ECPKParameters_print(BIO *bp, const EC_GROUP *x, int off);
4473 int ECPKParameters_print_fp(FILE *fp, const EC_GROUP *x, int off);
4474 typedef struct ec_key_st EC_KEY;
4475 EC_KEY *EC_KEY_new(void);
4476 int EC_KEY_get_flags(const EC_KEY *key);
4477 void EC_KEY_set_flags(EC_KEY *key, int flags);
4478 void EC_KEY_clear_flags(EC_KEY *key, int flags);
4479 EC_KEY *EC_KEY_new_by_curve_name(int nid);
4480 void EC_KEY_free(EC_KEY *key);
4481 EC_KEY *EC_KEY_copy(EC_KEY *dst, const EC_KEY *src);
4482 EC_KEY *EC_KEY_dup(const EC_KEY *src);
4483 int EC_KEY_up_ref(EC_KEY *key);
4484 const EC_GROUP *EC_KEY_get0_group(const EC_KEY *key);
4485 int EC_KEY_set_group(EC_KEY *key, const EC_GROUP *group);
4486 const BIGNUM *EC_KEY_get0_private_key(const EC_KEY *key);
4487 int EC_KEY_set_private_key(EC_KEY *key, const BIGNUM *prv);
4488 const EC_POINT *EC_KEY_get0_public_key(const EC_KEY *key);
4489 int EC_KEY_set_public_key(EC_KEY *key, const EC_POINT *pub);
4490 unsigned EC_KEY_get_enc_flags(const EC_KEY *key);
4491 void EC_KEY_set_enc_flags(EC_KEY *eckey, unsigned int flags);
4492 point_conversion_form_t EC_KEY_get_conv_form(const EC_KEY *key);
4493 void EC_KEY_set_conv_form(EC_KEY *eckey, point_conversion_form_t cform);
4494 void *EC_KEY_get_key_method_data(EC_KEY *key,
4495  void *(*dup_func)(void *), void (*free_func)(void *), void (*clear_free_func)(void *));
4496 void *EC_KEY_insert_key_method_data(EC_KEY *key, void *data,
4497  void *(*dup_func)(void *), void (*free_func)(void *), void (*clear_free_func)(void *));
4498 void EC_KEY_set_asn1_flag(EC_KEY *eckey, int asn1_flag);
4499 int EC_KEY_precompute_mult(EC_KEY *key, BN_CTX *ctx);
4500 int EC_KEY_generate_key(EC_KEY *key);
4501 int EC_KEY_check_key(const EC_KEY *key);
4502 int EC_KEY_set_public_key_affine_coordinates(EC_KEY *key, BIGNUM *x, BIGNUM *y);
4503 EC_KEY *d2i_ECPrivateKey(EC_KEY **key, const unsigned char **in, long len);
4504 int i2d_ECPrivateKey(EC_KEY *key, unsigned char **out);
4505 EC_KEY *d2i_ECParameters(EC_KEY **key, const unsigned char **in, long len);
4506 int i2d_ECParameters(EC_KEY *key, unsigned char **out);
4507 EC_KEY *o2i_ECPublicKey(EC_KEY **key, const unsigned char **in, long len);
4508 int i2o_ECPublicKey(EC_KEY *key, unsigned char **out);
4509 int ECParameters_print(BIO *bp, const EC_KEY *key);
4510 int EC_KEY_print(BIO *bp, const EC_KEY *key, int off);
4511 int ECParameters_print_fp(FILE *fp, const EC_KEY *key);
4512 int EC_KEY_print_fp(FILE *fp, const EC_KEY *key, int off);
4513 void ERR_load_EC_strings(void);
4514 int buffer_put_ecpoint_ret(Buffer *, const EC_GROUP *, const EC_POINT *);
4515 void buffer_put_ecpoint(Buffer *, const EC_GROUP *, const EC_POINT *);
4516 int buffer_get_ecpoint_ret(Buffer *, const EC_GROUP *, EC_POINT *);
4517 void buffer_get_ecpoint(Buffer *, const EC_GROUP *, EC_POINT *);
4518 void seed_rng(void);
4519 void rexec_send_rng_seed(Buffer *);
4520 void rexec_recv_rng_seed(Buffer *);
4521 typedef struct obj_name_st
4522  {
4523  int type;
4524  int alias;
4525  const char *name;
4526  const char *data;
4527  } OBJ_NAME;
4528 int OBJ_NAME_init(void);
4529 int OBJ_NAME_new_index(unsigned long (*hash_func)(const char *),
4530          int (*cmp_func)(const char *, const char *),
4531          void (*free_func)(const char *, int, const char *));
4532 const char *OBJ_NAME_get(const char *name,int type);
4533 int OBJ_NAME_add(const char *name,int type,const char *data);
4534 int OBJ_NAME_remove(const char *name,int type);
4535 void OBJ_NAME_cleanup(int type);
4536 void OBJ_NAME_do_all(int type,void (*fn)(const OBJ_NAME *,void *arg),
4537        void *arg);
4538 void OBJ_NAME_do_all_sorted(int type,void (*fn)(const OBJ_NAME *,void *arg),
4539        void *arg);
4540 ASN1_OBJECT * OBJ_dup(const ASN1_OBJECT *o);
4541 ASN1_OBJECT * OBJ_nid2obj(int n);
4542 const char * OBJ_nid2ln(int n);
4543 const char * OBJ_nid2sn(int n);
4544 int OBJ_obj2nid(const ASN1_OBJECT *o);
4545 ASN1_OBJECT * OBJ_txt2obj(const char *s, int no_name);
4546 int OBJ_obj2txt(char *buf, int buf_len, const ASN1_OBJECT *a, int no_name);
4547 int OBJ_txt2nid(const char *s);
4548 int OBJ_ln2nid(const char *s);
4549 int OBJ_sn2nid(const char *s);
4550 int OBJ_cmp(const ASN1_OBJECT *a,const ASN1_OBJECT *b);
4551 const void * OBJ_bsearch_(const void *key,const void *base,int num,int size,
4552         int (*cmp)(const void *, const void *));
4553 const void * OBJ_bsearch_ex_(const void *key,const void *base,int num,
4554     int size,
4555     int (*cmp)(const void *, const void *),
4556     int flags);
4557 int OBJ_new_nid(int num);
4558 int OBJ_add_object(const ASN1_OBJECT *obj);
4559 int OBJ_create(const char *oid,const char *sn,const char *ln);
4560 void OBJ_cleanup(void );
4561 int OBJ_create_objects(BIO *in);
4562 int OBJ_find_sigid_algs(int signid, int *pdig_nid, int *ppkey_nid);
4563 int OBJ_find_sigid_by_algs(int *psignid, int dig_nid, int pkey_nid);
4564 int OBJ_add_sigid(int signid, int dig_id, int pkey_id);
4565 void OBJ_sigid_free(void);
4566 extern int obj_cleanup_defer;
4567 void check_defer(int nid);
4568 void ERR_load_OBJ_strings(void);
4569 struct evp_pkey_st
4570  {
4571  int type;
4572  int save_type;
4573  int references;
4574  const EVP_PKEY_ASN1_METHOD *ameth;
4575  ENGINE *engine;
4576  union {
4577   char *ptr;
4578   struct rsa_st *rsa;
4579   struct dsa_st *dsa;
4580   struct dh_st *dh;
4581   struct ec_key_st *ec;
4582   } pkey;
4583  int save_parameters;
4584  struct stack_st_X509_ATTRIBUTE *attributes;
4585  } ;
4586 struct env_md_st
4587  {
4588  int type;
4589  int pkey_type;
4590  int md_size;
4591  unsigned long flags;
4592  int (*init)(EVP_MD_CTX *ctx);
4593  int (*update)(EVP_MD_CTX *ctx,const void *data,size_t count);
4594  int (*final)(EVP_MD_CTX *ctx,unsigned char *md);
4595  int (*copy)(EVP_MD_CTX *to,const EVP_MD_CTX *from);
4596  int (*cleanup)(EVP_MD_CTX *ctx);
4597  int (*sign)(int type, const unsigned char *m, unsigned int m_length,
4598       unsigned char *sigret, unsigned int *siglen, void *key);
4599  int (*verify)(int type, const unsigned char *m, unsigned int m_length,
4600         const unsigned char *sigbuf, unsigned int siglen,
4601         void *key);
4602  int required_pkey_type[5];
4603  int block_size;
4604  int ctx_size;
4605  int (*md_ctrl)(EVP_MD_CTX *ctx, int cmd, int p1, void *p2);
4606  } ;
4607 typedef int evp_sign_method(int type,const unsigned char *m,
4608        unsigned int m_length,unsigned char *sigret,
4609        unsigned int *siglen, void *key);
4610 typedef int evp_verify_method(int type,const unsigned char *m,
4611        unsigned int m_length,const unsigned char *sigbuf,
4612        unsigned int siglen, void *key);
4613 struct env_md_ctx_st
4614  {
4615  const EVP_MD *digest;
4616  ENGINE *engine;
4617  unsigned long flags;
4618  void *md_data;
4619  EVP_PKEY_CTX *pctx;
4620  int (*update)(EVP_MD_CTX *ctx,const void *data,size_t count);
4621  } ;
4622 struct evp_cipher_st
4623  {
4624  int nid;
4625  int block_size;
4626  int key_len;
4627  int iv_len;
4628  unsigned long flags;
4629  int (*init)(EVP_CIPHER_CTX *ctx, const unsigned char *key,
4630       const unsigned char *iv, int enc);
4631  int (*do_cipher)(EVP_CIPHER_CTX *ctx, unsigned char *out,
4632     const unsigned char *in, size_t inl);
4633  int (*cleanup)(EVP_CIPHER_CTX *);
4634  int ctx_size;
4635  int (*set_asn1_parameters)(EVP_CIPHER_CTX *, ASN1_TYPE *);
4636  int (*get_asn1_parameters)(EVP_CIPHER_CTX *, ASN1_TYPE *);
4637  int (*ctrl)(EVP_CIPHER_CTX *, int type, int arg, void *ptr);
4638  void *app_data;
4639  } ;
4640 typedef struct evp_cipher_info_st
4641  {
4642  const EVP_CIPHER *cipher;
4643  unsigned char iv[16];
4644  } EVP_CIPHER_INFO;
4645 struct evp_cipher_ctx_st
4646  {
4647  const EVP_CIPHER *cipher;
4648  ENGINE *engine;
4649  int encrypt;
4650  int buf_len;
4651  unsigned char oiv[16];
4652  unsigned char iv[16];
4653  unsigned char buf[32];
4654  int num;
4655  void *app_data;
4656  int key_len;
4657  unsigned long flags;
4658  void *cipher_data;
4659  int final_used;
4660  int block_mask;
4661  unsigned char final[32];
4662  } ;
4663 typedef struct evp_Encode_Ctx_st
4664  {
4665  int num;
4666  int length;
4667  unsigned char enc_data[80];
4668  int line_num;
4669  int expect_nl;
4670  } EVP_ENCODE_CTX;
4671 typedef int (EVP_PBE_KEYGEN)(EVP_CIPHER_CTX *ctx, const char *pass, int passlen,
4672   ASN1_TYPE *param, const EVP_CIPHER *cipher,
4673                 const EVP_MD *md, int en_de);
4674 int EVP_MD_type(const EVP_MD *md);
4675 int EVP_MD_pkey_type(const EVP_MD *md);
4676 int EVP_MD_size(const EVP_MD *md);
4677 int EVP_MD_block_size(const EVP_MD *md);
4678 unsigned long EVP_MD_flags(const EVP_MD *md);
4679 const EVP_MD *EVP_MD_CTX_md(const EVP_MD_CTX *ctx);
4680 int EVP_CIPHER_nid(const EVP_CIPHER *cipher);
4681 int EVP_CIPHER_block_size(const EVP_CIPHER *cipher);
4682 int EVP_CIPHER_key_length(const EVP_CIPHER *cipher);
4683 int EVP_CIPHER_iv_length(const EVP_CIPHER *cipher);
4684 unsigned long EVP_CIPHER_flags(const EVP_CIPHER *cipher);
4685 const EVP_CIPHER * EVP_CIPHER_CTX_cipher(const EVP_CIPHER_CTX *ctx);
4686 int EVP_CIPHER_CTX_nid(const EVP_CIPHER_CTX *ctx);
4687 int EVP_CIPHER_CTX_block_size(const EVP_CIPHER_CTX *ctx);
4688 int EVP_CIPHER_CTX_key_length(const EVP_CIPHER_CTX *ctx);
4689 int EVP_CIPHER_CTX_iv_length(const EVP_CIPHER_CTX *ctx);
4690 int EVP_CIPHER_CTX_copy(EVP_CIPHER_CTX *out, const EVP_CIPHER_CTX *in);
4691 void * EVP_CIPHER_CTX_get_app_data(const EVP_CIPHER_CTX *ctx);
4692 void EVP_CIPHER_CTX_set_app_data(EVP_CIPHER_CTX *ctx, void *data);
4693 unsigned long EVP_CIPHER_CTX_flags(const EVP_CIPHER_CTX *ctx);
4694 int EVP_Cipher(EVP_CIPHER_CTX *c,
4695   unsigned char *out,
4696   const unsigned char *in,
4697   unsigned int inl);
4698 void EVP_MD_CTX_init(EVP_MD_CTX *ctx);
4699 int EVP_MD_CTX_cleanup(EVP_MD_CTX *ctx);
4700 EVP_MD_CTX *EVP_MD_CTX_create(void);
4701 void EVP_MD_CTX_destroy(EVP_MD_CTX *ctx);
4702 int EVP_MD_CTX_copy_ex(EVP_MD_CTX *out,const EVP_MD_CTX *in);
4703 void EVP_MD_CTX_set_flags(EVP_MD_CTX *ctx, int flags);
4704 void EVP_MD_CTX_clear_flags(EVP_MD_CTX *ctx, int flags);
4705 int EVP_MD_CTX_test_flags(const EVP_MD_CTX *ctx,int flags);
4706 int EVP_DigestInit_ex(EVP_MD_CTX *ctx, const EVP_MD *type, ENGINE *impl);
4707 int EVP_DigestUpdate(EVP_MD_CTX *ctx,const void *d,
4708     size_t cnt);
4709 int EVP_DigestFinal_ex(EVP_MD_CTX *ctx,unsigned char *md,unsigned int *s);
4710 int EVP_Digest(const void *data, size_t count,
4711   unsigned char *md, unsigned int *size, const EVP_MD *type, ENGINE *impl);
4712 int EVP_MD_CTX_copy(EVP_MD_CTX *out,const EVP_MD_CTX *in);
4713 int EVP_DigestInit(EVP_MD_CTX *ctx, const EVP_MD *type);
4714 int EVP_DigestFinal(EVP_MD_CTX *ctx,unsigned char *md,unsigned int *s);
4715 int EVP_read_pw_string(char *buf,int length,const char *prompt,int verify);
4716 int EVP_read_pw_string_min(char *buf,int minlen,int maxlen,const char *prompt,int verify);
4717 void EVP_set_pw_prompt(const char *prompt);
4718 char * EVP_get_pw_prompt(void);
4719 int EVP_BytesToKey(const EVP_CIPHER *type,const EVP_MD *md,
4720   const unsigned char *salt, const unsigned char *data,
4721   int datal, int count, unsigned char *key,unsigned char *iv);
4722 void EVP_CIPHER_CTX_set_flags(EVP_CIPHER_CTX *ctx, int flags);
4723 void EVP_CIPHER_CTX_clear_flags(EVP_CIPHER_CTX *ctx, int flags);
4724 int EVP_CIPHER_CTX_test_flags(const EVP_CIPHER_CTX *ctx,int flags);
4725 int EVP_EncryptInit(EVP_CIPHER_CTX *ctx,const EVP_CIPHER *cipher,
4726   const unsigned char *key, const unsigned char *iv);
4727 int EVP_EncryptInit_ex(EVP_CIPHER_CTX *ctx,const EVP_CIPHER *cipher, ENGINE *impl,
4728   const unsigned char *key, const unsigned char *iv);
4729 int EVP_EncryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out,
4730   int *outl, const unsigned char *in, int inl);
4731 int EVP_EncryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl);
4732 int EVP_EncryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl);
4733 int EVP_DecryptInit(EVP_CIPHER_CTX *ctx,const EVP_CIPHER *cipher,
4734   const unsigned char *key, const unsigned char *iv);
4735 int EVP_DecryptInit_ex(EVP_CIPHER_CTX *ctx,const EVP_CIPHER *cipher, ENGINE *impl,
4736   const unsigned char *key, const unsigned char *iv);
4737 int EVP_DecryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out,
4738   int *outl, const unsigned char *in, int inl);
4739 int EVP_DecryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl);
4740 int EVP_DecryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl);
4741 int EVP_CipherInit(EVP_CIPHER_CTX *ctx,const EVP_CIPHER *cipher,
4742          const unsigned char *key,const unsigned char *iv,
4743          int enc);
4744 int EVP_CipherInit_ex(EVP_CIPHER_CTX *ctx,const EVP_CIPHER *cipher, ENGINE *impl,
4745          const unsigned char *key,const unsigned char *iv,
4746          int enc);
4747 int EVP_CipherUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out,
4748   int *outl, const unsigned char *in, int inl);
4749 int EVP_CipherFinal(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl);
4750 int EVP_CipherFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl);
4751 int EVP_SignFinal(EVP_MD_CTX *ctx,unsigned char *md,unsigned int *s,
4752   EVP_PKEY *pkey);
4753 int EVP_VerifyFinal(EVP_MD_CTX *ctx,const unsigned char *sigbuf,
4754   unsigned int siglen,EVP_PKEY *pkey);
4755 int EVP_DigestSignInit(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx,
4756    const EVP_MD *type, ENGINE *e, EVP_PKEY *pkey);
4757 int EVP_DigestSignFinal(EVP_MD_CTX *ctx,
4758    unsigned char *sigret, size_t *siglen);
4759 int EVP_DigestVerifyInit(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx,
4760    const EVP_MD *type, ENGINE *e, EVP_PKEY *pkey);
4761 int EVP_DigestVerifyFinal(EVP_MD_CTX *ctx,
4762    unsigned char *sig, size_t siglen);
4763 int EVP_OpenInit(EVP_CIPHER_CTX *ctx,const EVP_CIPHER *type,
4764   const unsigned char *ek, int ekl, const unsigned char *iv,
4765   EVP_PKEY *priv);
4766 int EVP_OpenFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl);
4767 int EVP_SealInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type,
4768    unsigned char **ek, int *ekl, unsigned char *iv,
4769   EVP_PKEY **pubk, int npubk);
4770 int EVP_SealFinal(EVP_CIPHER_CTX *ctx,unsigned char *out,int *outl);
4771 void EVP_EncodeInit(EVP_ENCODE_CTX *ctx);
4772 void EVP_EncodeUpdate(EVP_ENCODE_CTX *ctx,unsigned char *out,int *outl,
4773   const unsigned char *in,int inl);
4774 void EVP_EncodeFinal(EVP_ENCODE_CTX *ctx,unsigned char *out,int *outl);
4775 int EVP_EncodeBlock(unsigned char *t, const unsigned char *f, int n);
4776 void EVP_DecodeInit(EVP_ENCODE_CTX *ctx);
4777 int EVP_DecodeUpdate(EVP_ENCODE_CTX *ctx,unsigned char *out,int *outl,
4778   const unsigned char *in, int inl);
4779 int EVP_DecodeFinal(EVP_ENCODE_CTX *ctx, unsigned
4780   char *out, int *outl);
4781 int EVP_DecodeBlock(unsigned char *t, const unsigned char *f, int n);
4782 void EVP_CIPHER_CTX_init(EVP_CIPHER_CTX *a);
4783 int EVP_CIPHER_CTX_cleanup(EVP_CIPHER_CTX *a);
4784 EVP_CIPHER_CTX *EVP_CIPHER_CTX_new(void);
4785 void EVP_CIPHER_CTX_free(EVP_CIPHER_CTX *a);
4786 int EVP_CIPHER_CTX_set_key_length(EVP_CIPHER_CTX *x, int keylen);
4787 int EVP_CIPHER_CTX_set_padding(EVP_CIPHER_CTX *c, int pad);
4788 int EVP_CIPHER_CTX_ctrl(EVP_CIPHER_CTX *ctx, int type, int arg, void *ptr);
4789 int EVP_CIPHER_CTX_rand_key(EVP_CIPHER_CTX *ctx, unsigned char *key);
4790 BIO_METHOD *BIO_f_md(void);
4791 BIO_METHOD *BIO_f_base64(void);
4792 BIO_METHOD *BIO_f_cipher(void);
4793 BIO_METHOD *BIO_f_reliable(void);
4794 void BIO_set_cipher(BIO *b,const EVP_CIPHER *c,const unsigned char *k,
4795   const unsigned char *i, int enc);
4796 const EVP_MD *EVP_md_null(void);
4797 const EVP_MD *EVP_md4(void);
4798 const EVP_MD *EVP_md5(void);
4799 const EVP_MD *EVP_sha(void);
4800 const EVP_MD *EVP_sha1(void);
4801 const EVP_MD *EVP_dss(void);
4802 const EVP_MD *EVP_dss1(void);
4803 const EVP_MD *EVP_ecdsa(void);
4804 const EVP_MD *EVP_sha224(void);
4805 const EVP_MD *EVP_sha256(void);
4806 const EVP_MD *EVP_sha384(void);
4807 const EVP_MD *EVP_sha512(void);
4808 const EVP_MD *EVP_mdc2(void);
4809 const EVP_MD *EVP_ripemd160(void);
4810 const EVP_MD *EVP_whirlpool(void);
4811 const EVP_CIPHER *EVP_enc_null(void);
4812 const EVP_CIPHER *EVP_des_ecb(void);
4813 const EVP_CIPHER *EVP_des_ede(void);
4814 const EVP_CIPHER *EVP_des_ede3(void);
4815 const EVP_CIPHER *EVP_des_ede_ecb(void);
4816 const EVP_CIPHER *EVP_des_ede3_ecb(void);
4817 const EVP_CIPHER *EVP_des_cfb64(void);
4818 const EVP_CIPHER *EVP_des_cfb1(void);
4819 const EVP_CIPHER *EVP_des_cfb8(void);
4820 const EVP_CIPHER *EVP_des_ede_cfb64(void);
4821 const EVP_CIPHER *EVP_des_ede3_cfb64(void);
4822 const EVP_CIPHER *EVP_des_ede3_cfb1(void);
4823 const EVP_CIPHER *EVP_des_ede3_cfb8(void);
4824 const EVP_CIPHER *EVP_des_ofb(void);
4825 const EVP_CIPHER *EVP_des_ede_ofb(void);
4826 const EVP_CIPHER *EVP_des_ede3_ofb(void);
4827 const EVP_CIPHER *EVP_des_cbc(void);
4828 const EVP_CIPHER *EVP_des_ede_cbc(void);
4829 const EVP_CIPHER *EVP_des_ede3_cbc(void);
4830 const EVP_CIPHER *EVP_desx_cbc(void);
4831 const EVP_CIPHER *EVP_rc4(void);
4832 const EVP_CIPHER *EVP_rc4_40(void);
4833 const EVP_CIPHER *EVP_rc4_hmac_md5(void);
4834 const EVP_CIPHER *EVP_idea_ecb(void);
4835 const EVP_CIPHER *EVP_idea_cfb64(void);
4836 const EVP_CIPHER *EVP_idea_ofb(void);
4837 const EVP_CIPHER *EVP_idea_cbc(void);
4838 const EVP_CIPHER *EVP_rc2_ecb(void);
4839 const EVP_CIPHER *EVP_rc2_cbc(void);
4840 const EVP_CIPHER *EVP_rc2_40_cbc(void);
4841 const EVP_CIPHER *EVP_rc2_64_cbc(void);
4842 const EVP_CIPHER *EVP_rc2_cfb64(void);
4843 const EVP_CIPHER *EVP_rc2_ofb(void);
4844 const EVP_CIPHER *EVP_bf_ecb(void);
4845 const EVP_CIPHER *EVP_bf_cbc(void);
4846 const EVP_CIPHER *EVP_bf_cfb64(void);
4847 const EVP_CIPHER *EVP_bf_ofb(void);
4848 const EVP_CIPHER *EVP_cast5_ecb(void);
4849 const EVP_CIPHER *EVP_cast5_cbc(void);
4850 const EVP_CIPHER *EVP_cast5_cfb64(void);
4851 const EVP_CIPHER *EVP_cast5_ofb(void);
4852 const EVP_CIPHER *EVP_rc5_32_12_16_cbc(void);
4853 const EVP_CIPHER *EVP_rc5_32_12_16_ecb(void);
4854 const EVP_CIPHER *EVP_rc5_32_12_16_cfb64(void);
4855 const EVP_CIPHER *EVP_rc5_32_12_16_ofb(void);
4856 const EVP_CIPHER *EVP_aes_128_ecb(void);
4857 const EVP_CIPHER *EVP_aes_128_cbc(void);
4858 const EVP_CIPHER *EVP_aes_128_cfb1(void);
4859 const EVP_CIPHER *EVP_aes_128_cfb8(void);
4860 const EVP_CIPHER *EVP_aes_128_cfb128(void);
4861 const EVP_CIPHER *EVP_aes_128_ofb(void);
4862 const EVP_CIPHER *EVP_aes_128_ctr(void);
4863 const EVP_CIPHER *EVP_aes_128_ccm(void);
4864 const EVP_CIPHER *EVP_aes_128_gcm(void);
4865 const EVP_CIPHER *EVP_aes_128_xts(void);
4866 const EVP_CIPHER *EVP_aes_192_ecb(void);
4867 const EVP_CIPHER *EVP_aes_192_cbc(void);
4868 const EVP_CIPHER *EVP_aes_192_cfb1(void);
4869 const EVP_CIPHER *EVP_aes_192_cfb8(void);
4870 const EVP_CIPHER *EVP_aes_192_cfb128(void);
4871 const EVP_CIPHER *EVP_aes_192_ofb(void);
4872 const EVP_CIPHER *EVP_aes_192_ctr(void);
4873 const EVP_CIPHER *EVP_aes_192_ccm(void);
4874 const EVP_CIPHER *EVP_aes_192_gcm(void);
4875 const EVP_CIPHER *EVP_aes_256_ecb(void);
4876 const EVP_CIPHER *EVP_aes_256_cbc(void);
4877 const EVP_CIPHER *EVP_aes_256_cfb1(void);
4878 const EVP_CIPHER *EVP_aes_256_cfb8(void);
4879 const EVP_CIPHER *EVP_aes_256_cfb128(void);
4880 const EVP_CIPHER *EVP_aes_256_ofb(void);
4881 const EVP_CIPHER *EVP_aes_256_ctr(void);
4882 const EVP_CIPHER *EVP_aes_256_ccm(void);
4883 const EVP_CIPHER *EVP_aes_256_gcm(void);
4884 const EVP_CIPHER *EVP_aes_256_xts(void);
4885 const EVP_CIPHER *EVP_aes_128_cbc_hmac_sha1(void);
4886 const EVP_CIPHER *EVP_aes_256_cbc_hmac_sha1(void);
4887 const EVP_CIPHER *EVP_camellia_128_ecb(void);
4888 const EVP_CIPHER *EVP_camellia_128_cbc(void);
4889 const EVP_CIPHER *EVP_camellia_128_cfb1(void);
4890 const EVP_CIPHER *EVP_camellia_128_cfb8(void);
4891 const EVP_CIPHER *EVP_camellia_128_cfb128(void);
4892 const EVP_CIPHER *EVP_camellia_128_ofb(void);
4893 const EVP_CIPHER *EVP_camellia_192_ecb(void);
4894 const EVP_CIPHER *EVP_camellia_192_cbc(void);
4895 const EVP_CIPHER *EVP_camellia_192_cfb1(void);
4896 const EVP_CIPHER *EVP_camellia_192_cfb8(void);
4897 const EVP_CIPHER *EVP_camellia_192_cfb128(void);
4898 const EVP_CIPHER *EVP_camellia_192_ofb(void);
4899 const EVP_CIPHER *EVP_camellia_256_ecb(void);
4900 const EVP_CIPHER *EVP_camellia_256_cbc(void);
4901 const EVP_CIPHER *EVP_camellia_256_cfb1(void);
4902 const EVP_CIPHER *EVP_camellia_256_cfb8(void);
4903 const EVP_CIPHER *EVP_camellia_256_cfb128(void);
4904 const EVP_CIPHER *EVP_camellia_256_ofb(void);
4905 const EVP_CIPHER *EVP_seed_ecb(void);
4906 const EVP_CIPHER *EVP_seed_cbc(void);
4907 const EVP_CIPHER *EVP_seed_cfb128(void);
4908 const EVP_CIPHER *EVP_seed_ofb(void);
4909 void OPENSSL_add_all_algorithms_noconf(void);
4910 void OPENSSL_add_all_algorithms_conf(void);
4911 void OpenSSL_add_all_ciphers(void);
4912 void OpenSSL_add_all_digests(void);
4913 int EVP_add_cipher(const EVP_CIPHER *cipher);
4914 int EVP_add_digest(const EVP_MD *digest);
4915 const EVP_CIPHER *EVP_get_cipherbyname(const char *name);
4916 const EVP_MD *EVP_get_digestbyname(const char *name);
4917 void EVP_cleanup(void);
4918 void EVP_CIPHER_do_all(void (*fn)(const EVP_CIPHER *ciph,
4919   const char *from, const char *to, void *x), void *arg);
4920 void EVP_CIPHER_do_all_sorted(void (*fn)(const EVP_CIPHER *ciph,
4921   const char *from, const char *to, void *x), void *arg);
4922 void EVP_MD_do_all(void (*fn)(const EVP_MD *ciph,
4923   const char *from, const char *to, void *x), void *arg);
4924 void EVP_MD_do_all_sorted(void (*fn)(const EVP_MD *ciph,
4925   const char *from, const char *to, void *x), void *arg);
4926 int EVP_PKEY_decrypt_old(unsigned char *dec_key,
4927    const unsigned char *enc_key,int enc_key_len,
4928    EVP_PKEY *private_key);
4929 int EVP_PKEY_encrypt_old(unsigned char *enc_key,
4930    const unsigned char *key,int key_len,
4931    EVP_PKEY *pub_key);
4932 int EVP_PKEY_type(int type);
4933 int EVP_PKEY_id(const EVP_PKEY *pkey);
4934 int EVP_PKEY_base_id(const EVP_PKEY *pkey);
4935 int EVP_PKEY_bits(EVP_PKEY *pkey);
4936 int EVP_PKEY_size(EVP_PKEY *pkey);
4937 int EVP_PKEY_set_type(EVP_PKEY *pkey,int type);
4938 int EVP_PKEY_set_type_str(EVP_PKEY *pkey, const char *str, int len);
4939 int EVP_PKEY_assign(EVP_PKEY *pkey,int type,void *key);
4940 void * EVP_PKEY_get0(EVP_PKEY *pkey);
4941 struct rsa_st;
4942 int EVP_PKEY_set1_RSA(EVP_PKEY *pkey,struct rsa_st *key);
4943 struct rsa_st *EVP_PKEY_get1_RSA(EVP_PKEY *pkey);
4944 struct dsa_st;
4945 int EVP_PKEY_set1_DSA(EVP_PKEY *pkey,struct dsa_st *key);
4946 struct dsa_st *EVP_PKEY_get1_DSA(EVP_PKEY *pkey);
4947 struct dh_st;
4948 int EVP_PKEY_set1_DH(EVP_PKEY *pkey,struct dh_st *key);
4949 struct dh_st *EVP_PKEY_get1_DH(EVP_PKEY *pkey);
4950 struct ec_key_st;
4951 int EVP_PKEY_set1_EC_KEY(EVP_PKEY *pkey,struct ec_key_st *key);
4952 struct ec_key_st *EVP_PKEY_get1_EC_KEY(EVP_PKEY *pkey);
4953 EVP_PKEY * EVP_PKEY_new(void);
4954 void EVP_PKEY_free(EVP_PKEY *pkey);
4955 EVP_PKEY * d2i_PublicKey(int type,EVP_PKEY **a, const unsigned char **pp,
4956    long length);
4957 int i2d_PublicKey(EVP_PKEY *a, unsigned char **pp);
4958 EVP_PKEY * d2i_PrivateKey(int type,EVP_PKEY **a, const unsigned char **pp,
4959    long length);
4960 EVP_PKEY * d2i_AutoPrivateKey(EVP_PKEY **a, const unsigned char **pp,
4961    long length);
4962 int i2d_PrivateKey(EVP_PKEY *a, unsigned char **pp);
4963 int EVP_PKEY_copy_parameters(EVP_PKEY *to, const EVP_PKEY *from);
4964 int EVP_PKEY_missing_parameters(const EVP_PKEY *pkey);
4965 int EVP_PKEY_save_parameters(EVP_PKEY *pkey,int mode);
4966 int EVP_PKEY_cmp_parameters(const EVP_PKEY *a, const EVP_PKEY *b);
4967 int EVP_PKEY_cmp(const EVP_PKEY *a, const EVP_PKEY *b);
4968 int EVP_PKEY_print_public(BIO *out, const EVP_PKEY *pkey,
4969     int indent, ASN1_PCTX *pctx);
4970 int EVP_PKEY_print_private(BIO *out, const EVP_PKEY *pkey,
4971     int indent, ASN1_PCTX *pctx);
4972 int EVP_PKEY_print_params(BIO *out, const EVP_PKEY *pkey,
4973     int indent, ASN1_PCTX *pctx);
4974 int EVP_PKEY_get_default_digest_nid(EVP_PKEY *pkey, int *pnid);
4975 int EVP_CIPHER_type(const EVP_CIPHER *ctx);
4976 int EVP_CIPHER_param_to_asn1(EVP_CIPHER_CTX *c, ASN1_TYPE *type);
4977 int EVP_CIPHER_asn1_to_param(EVP_CIPHER_CTX *c, ASN1_TYPE *type);
4978 int EVP_CIPHER_set_asn1_iv(EVP_CIPHER_CTX *c,ASN1_TYPE *type);
4979 int EVP_CIPHER_get_asn1_iv(EVP_CIPHER_CTX *c,ASN1_TYPE *type);
4980 int PKCS5_PBE_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen,
4981     ASN1_TYPE *param, const EVP_CIPHER *cipher, const EVP_MD *md,
4982     int en_de);
4983 int PKCS5_PBKDF2_HMAC_SHA1(const char *pass, int passlen,
4984       const unsigned char *salt, int saltlen, int iter,
4985       int keylen, unsigned char *out);
4986 int PKCS5_PBKDF2_HMAC(const char *pass, int passlen,
4987       const unsigned char *salt, int saltlen, int iter,
4988       const EVP_MD *digest,
4989         int keylen, unsigned char *out);
4990 int PKCS5_v2_PBE_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen,
4991     ASN1_TYPE *param, const EVP_CIPHER *cipher, const EVP_MD *md,
4992     int en_de);
4993 void PKCS5_PBE_add(void);
4994 int EVP_PBE_CipherInit (ASN1_OBJECT *pbe_obj, const char *pass, int passlen,
4995       ASN1_TYPE *param, EVP_CIPHER_CTX *ctx, int en_de);
4996 int EVP_PBE_alg_add_type(int pbe_type, int pbe_nid, int cipher_nid, int md_nid,
4997       EVP_PBE_KEYGEN *keygen);
4998 int EVP_PBE_alg_add(int nid, const EVP_CIPHER *cipher, const EVP_MD *md,
4999       EVP_PBE_KEYGEN *keygen);
5000 int EVP_PBE_find(int type, int pbe_nid,
5001    int *pcnid, int *pmnid, EVP_PBE_KEYGEN **pkeygen);
5002 void EVP_PBE_cleanup(void);
5003 int EVP_PKEY_asn1_get_count(void);
5004 const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_get0(int idx);
5005 const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_find(ENGINE **pe, int type);
5006 const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_find_str(ENGINE **pe,
5007      const char *str, int len);
5008 int EVP_PKEY_asn1_add0(const EVP_PKEY_ASN1_METHOD *ameth);
5009 int EVP_PKEY_asn1_add_alias(int to, int from);
5010 int EVP_PKEY_asn1_get0_info(int *ppkey_id, int *pkey_base_id, int *ppkey_flags,
5011     const char **pinfo, const char **ppem_str,
5012      const EVP_PKEY_ASN1_METHOD *ameth);
5013 const EVP_PKEY_ASN1_METHOD* EVP_PKEY_get0_asn1(EVP_PKEY *pkey);
5014 EVP_PKEY_ASN1_METHOD* EVP_PKEY_asn1_new(int id, int flags,
5015      const char *pem_str, const char *info);
5016 void EVP_PKEY_asn1_copy(EVP_PKEY_ASN1_METHOD *dst,
5017    const EVP_PKEY_ASN1_METHOD *src);
5018 void EVP_PKEY_asn1_free(EVP_PKEY_ASN1_METHOD *ameth);
5019 void EVP_PKEY_asn1_set_public(EVP_PKEY_ASN1_METHOD *ameth,
5020   int (*pub_decode)(EVP_PKEY *pk, X509_PUBKEY *pub),
5021   int (*pub_encode)(X509_PUBKEY *pub, const EVP_PKEY *pk),
5022   int (*pub_cmp)(const EVP_PKEY *a, const EVP_PKEY *b),
5023   int (*pub_print)(BIO *out, const EVP_PKEY *pkey, int indent,
5024        ASN1_PCTX *pctx),
5025   int (*pkey_size)(const EVP_PKEY *pk),
5026   int (*pkey_bits)(const EVP_PKEY *pk));
5027 void EVP_PKEY_asn1_set_private(EVP_PKEY_ASN1_METHOD *ameth,
5028   int (*priv_decode)(EVP_PKEY *pk, PKCS8_PRIV_KEY_INFO *p8inf),
5029   int (*priv_encode)(PKCS8_PRIV_KEY_INFO *p8, const EVP_PKEY *pk),
5030   int (*priv_print)(BIO *out, const EVP_PKEY *pkey, int indent,
5031        ASN1_PCTX *pctx));
5032 void EVP_PKEY_asn1_set_param(EVP_PKEY_ASN1_METHOD *ameth,
5033   int (*param_decode)(EVP_PKEY *pkey,
5034     const unsigned char **pder, int derlen),
5035   int (*param_encode)(const EVP_PKEY *pkey, unsigned char **pder),
5036   int (*param_missing)(const EVP_PKEY *pk),
5037   int (*param_copy)(EVP_PKEY *to, const EVP_PKEY *from),
5038   int (*param_cmp)(const EVP_PKEY *a, const EVP_PKEY *b),
5039   int (*param_print)(BIO *out, const EVP_PKEY *pkey, int indent,
5040        ASN1_PCTX *pctx));
5041 void EVP_PKEY_asn1_set_free(EVP_PKEY_ASN1_METHOD *ameth,
5042   void (*pkey_free)(EVP_PKEY *pkey));
5043 void EVP_PKEY_asn1_set_ctrl(EVP_PKEY_ASN1_METHOD *ameth,
5044   int (*pkey_ctrl)(EVP_PKEY *pkey, int op,
5045        long arg1, void *arg2));
5046 const EVP_PKEY_METHOD *EVP_PKEY_meth_find(int type);
5047 EVP_PKEY_METHOD* EVP_PKEY_meth_new(int id, int flags);
5048 void EVP_PKEY_meth_get0_info(int *ppkey_id, int *pflags,
5049     const EVP_PKEY_METHOD *meth);
5050 void EVP_PKEY_meth_copy(EVP_PKEY_METHOD *dst, const EVP_PKEY_METHOD *src);
5051 void EVP_PKEY_meth_free(EVP_PKEY_METHOD *pmeth);
5052 int EVP_PKEY_meth_add0(const EVP_PKEY_METHOD *pmeth);
5053 EVP_PKEY_CTX *EVP_PKEY_CTX_new(EVP_PKEY *pkey, ENGINE *e);
5054 EVP_PKEY_CTX *EVP_PKEY_CTX_new_id(int id, ENGINE *e);
5055 EVP_PKEY_CTX *EVP_PKEY_CTX_dup(EVP_PKEY_CTX *ctx);
5056 void EVP_PKEY_CTX_free(EVP_PKEY_CTX *ctx);
5057 int EVP_PKEY_CTX_ctrl(EVP_PKEY_CTX *ctx, int keytype, int optype,
5058     int cmd, int p1, void *p2);
5059 int EVP_PKEY_CTX_ctrl_str(EVP_PKEY_CTX *ctx, const char *type,
5060       const char *value);
5061 int EVP_PKEY_CTX_get_operation(EVP_PKEY_CTX *ctx);
5062 void EVP_PKEY_CTX_set0_keygen_info(EVP_PKEY_CTX *ctx, int *dat, int datlen);
5063 EVP_PKEY *EVP_PKEY_new_mac_key(int type, ENGINE *e,
5064     const unsigned char *key, int keylen);
5065 void EVP_PKEY_CTX_set_data(EVP_PKEY_CTX *ctx, void *data);
5066 void *EVP_PKEY_CTX_get_data(EVP_PKEY_CTX *ctx);
5067 EVP_PKEY *EVP_PKEY_CTX_get0_pkey(EVP_PKEY_CTX *ctx);
5068 EVP_PKEY *EVP_PKEY_CTX_get0_peerkey(EVP_PKEY_CTX *ctx);
5069 void EVP_PKEY_CTX_set_app_data(EVP_PKEY_CTX *ctx, void *data);
5070 void *EVP_PKEY_CTX_get_app_data(EVP_PKEY_CTX *ctx);
5071 int EVP_PKEY_sign_init(EVP_PKEY_CTX *ctx);
5072 int EVP_PKEY_sign(EVP_PKEY_CTX *ctx,
5073    unsigned char *sig, size_t *siglen,
5074    const unsigned char *tbs, size_t tbslen);
5075 int EVP_PKEY_verify_init(EVP_PKEY_CTX *ctx);
5076 int EVP_PKEY_verify(EVP_PKEY_CTX *ctx,
5077    const unsigned char *sig, size_t siglen,
5078    const unsigned char *tbs, size_t tbslen);
5079 int EVP_PKEY_verify_recover_init(EVP_PKEY_CTX *ctx);
5080 int EVP_PKEY_verify_recover(EVP_PKEY_CTX *ctx,
5081    unsigned char *rout, size_t *routlen,
5082    const unsigned char *sig, size_t siglen);
5083 int EVP_PKEY_encrypt_init(EVP_PKEY_CTX *ctx);
5084 int EVP_PKEY_encrypt(EVP_PKEY_CTX *ctx,
5085    unsigned char *out, size_t *outlen,
5086    const unsigned char *in, size_t inlen);
5087 int EVP_PKEY_decrypt_init(EVP_PKEY_CTX *ctx);
5088 int EVP_PKEY_decrypt(EVP_PKEY_CTX *ctx,
5089    unsigned char *out, size_t *outlen,
5090    const unsigned char *in, size_t inlen);
5091 int EVP_PKEY_derive_init(EVP_PKEY_CTX *ctx);
5092 int EVP_PKEY_derive_set_peer(EVP_PKEY_CTX *ctx, EVP_PKEY *peer);
5093 int EVP_PKEY_derive(EVP_PKEY_CTX *ctx, unsigned char *key, size_t *keylen);
5094 typedef int EVP_PKEY_gen_cb(EVP_PKEY_CTX *ctx);
5095 int EVP_PKEY_paramgen_init(EVP_PKEY_CTX *ctx);
5096 int EVP_PKEY_paramgen(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey);
5097 int EVP_PKEY_keygen_init(EVP_PKEY_CTX *ctx);
5098 int EVP_PKEY_keygen(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey);
5099 void EVP_PKEY_CTX_set_cb(EVP_PKEY_CTX *ctx, EVP_PKEY_gen_cb *cb);
5100 EVP_PKEY_gen_cb *EVP_PKEY_CTX_get_cb(EVP_PKEY_CTX *ctx);
5101 int EVP_PKEY_CTX_get_keygen_info(EVP_PKEY_CTX *ctx, int idx);
5102 void EVP_PKEY_meth_set_init(EVP_PKEY_METHOD *pmeth,
5103  int (*init)(EVP_PKEY_CTX *ctx));
5104 void EVP_PKEY_meth_set_copy(EVP_PKEY_METHOD *pmeth,
5105  int (*copy)(EVP_PKEY_CTX *dst, EVP_PKEY_CTX *src));
5106 void EVP_PKEY_meth_set_cleanup(EVP_PKEY_METHOD *pmeth,
5107  void (*cleanup)(EVP_PKEY_CTX *ctx));
5108 void EVP_PKEY_meth_set_paramgen(EVP_PKEY_METHOD *pmeth,
5109  int (*paramgen_init)(EVP_PKEY_CTX *ctx),
5110  int (*paramgen)(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey));
5111 void EVP_PKEY_meth_set_keygen(EVP_PKEY_METHOD *pmeth,
5112  int (*keygen_init)(EVP_PKEY_CTX *ctx),
5113  int (*keygen)(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey));
5114 void EVP_PKEY_meth_set_sign(EVP_PKEY_METHOD *pmeth,
5115  int (*sign_init)(EVP_PKEY_CTX *ctx),
5116  int (*sign)(EVP_PKEY_CTX *ctx, unsigned char *sig, size_t *siglen,
5117      const unsigned char *tbs, size_t tbslen));
5118 void EVP_PKEY_meth_set_verify(EVP_PKEY_METHOD *pmeth,
5119  int (*verify_init)(EVP_PKEY_CTX *ctx),
5120  int (*verify)(EVP_PKEY_CTX *ctx, const unsigned char *sig, size_t siglen,
5121      const unsigned char *tbs, size_t tbslen));
5122 void EVP_PKEY_meth_set_verify_recover(EVP_PKEY_METHOD *pmeth,
5123  int (*verify_recover_init)(EVP_PKEY_CTX *ctx),
5124  int (*verify_recover)(EVP_PKEY_CTX *ctx,
5125      unsigned char *sig, size_t *siglen,
5126      const unsigned char *tbs, size_t tbslen));
5127 void EVP_PKEY_meth_set_signctx(EVP_PKEY_METHOD *pmeth,
5128  int (*signctx_init)(EVP_PKEY_CTX *ctx, EVP_MD_CTX *mctx),
5129  int (*signctx)(EVP_PKEY_CTX *ctx, unsigned char *sig, size_t *siglen,
5130      EVP_MD_CTX *mctx));
5131 void EVP_PKEY_meth_set_verifyctx(EVP_PKEY_METHOD *pmeth,
5132  int (*verifyctx_init)(EVP_PKEY_CTX *ctx, EVP_MD_CTX *mctx),
5133  int (*verifyctx)(EVP_PKEY_CTX *ctx, const unsigned char *sig,int siglen,
5134      EVP_MD_CTX *mctx));
5135 void EVP_PKEY_meth_set_encrypt(EVP_PKEY_METHOD *pmeth,
5136  int (*encrypt_init)(EVP_PKEY_CTX *ctx),
5137  int (*encryptfn)(EVP_PKEY_CTX *ctx, unsigned char *out, size_t *outlen,
5138      const unsigned char *in, size_t inlen));
5139 void EVP_PKEY_meth_set_decrypt(EVP_PKEY_METHOD *pmeth,
5140  int (*decrypt_init)(EVP_PKEY_CTX *ctx),
5141  int (*decrypt)(EVP_PKEY_CTX *ctx, unsigned char *out, size_t *outlen,
5142      const unsigned char *in, size_t inlen));
5143 void EVP_PKEY_meth_set_derive(EVP_PKEY_METHOD *pmeth,
5144  int (*derive_init)(EVP_PKEY_CTX *ctx),
5145  int (*derive)(EVP_PKEY_CTX *ctx, unsigned char *key, size_t *keylen));
5146 void EVP_PKEY_meth_set_ctrl(EVP_PKEY_METHOD *pmeth,
5147  int (*ctrl)(EVP_PKEY_CTX *ctx, int type, int p1, void *p2),
5148  int (*ctrl_str)(EVP_PKEY_CTX *ctx,
5149      const char *type, const char *value));
5150 void EVP_add_alg_module(void);
5151 void ERR_load_EVP_strings(void);
5152 typedef int ptrdiff_t;
5153 struct buf_mem_st
5154  {
5155  size_t length;
5156  char *data;
5157  size_t max;
5158  };
5159 BUF_MEM *BUF_MEM_new(void);
5160 void BUF_MEM_free(BUF_MEM *a);
5161 int BUF_MEM_grow(BUF_MEM *str, size_t len);
5162 int BUF_MEM_grow_clean(BUF_MEM *str, size_t len);
5163 char * BUF_strdup(const char *str);
5164 char * BUF_strndup(const char *str, size_t siz);
5165 void * BUF_memdup(const void *data, size_t siz);
5166 void BUF_reverse(unsigned char *out, const unsigned char *in, size_t siz);
5167 size_t BUF_strlcpy(char *dst,const char *src,size_t siz);
5168 size_t BUF_strlcat(char *dst,const char *src,size_t siz);
5169 void ERR_load_BUF_strings(void);
5170 typedef struct ECDSA_SIG_st
5171  {
5172  BIGNUM *r;
5173  BIGNUM *s;
5174  } ECDSA_SIG;
5175 ECDSA_SIG *ECDSA_SIG_new(void);
5176 void ECDSA_SIG_free(ECDSA_SIG *sig);
5177 int i2d_ECDSA_SIG(const ECDSA_SIG *sig, unsigned char **pp);
5178 ECDSA_SIG *d2i_ECDSA_SIG(ECDSA_SIG **sig, const unsigned char **pp, long len);
5179 ECDSA_SIG *ECDSA_do_sign(const unsigned char *dgst,int dgst_len,EC_KEY *eckey);
5180 ECDSA_SIG *ECDSA_do_sign_ex(const unsigned char *dgst, int dgstlen,
5181   const BIGNUM *kinv, const BIGNUM *rp, EC_KEY *eckey);
5182 int ECDSA_do_verify(const unsigned char *dgst, int dgst_len,
5183   const ECDSA_SIG *sig, EC_KEY* eckey);
5184 const ECDSA_METHOD *ECDSA_OpenSSL(void);
5185 void ECDSA_set_default_method(const ECDSA_METHOD *meth);
5186 const ECDSA_METHOD *ECDSA_get_default_method(void);
5187 int ECDSA_set_method(EC_KEY *eckey, const ECDSA_METHOD *meth);
5188 int ECDSA_size(const EC_KEY *eckey);
5189 int ECDSA_sign_setup(EC_KEY *eckey, BN_CTX *ctx, BIGNUM **kinv,
5190   BIGNUM **rp);
5191 int ECDSA_sign(int type, const unsigned char *dgst, int dgstlen,
5192   unsigned char *sig, unsigned int *siglen, EC_KEY *eckey);
5193 int ECDSA_sign_ex(int type, const unsigned char *dgst, int dgstlen,
5194   unsigned char *sig, unsigned int *siglen, const BIGNUM *kinv,
5195   const BIGNUM *rp, EC_KEY *eckey);
5196 int ECDSA_verify(int type, const unsigned char *dgst, int dgstlen,
5197   const unsigned char *sig, int siglen, EC_KEY *eckey);
5198 int ECDSA_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new
5199   *new_func, CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func);
5200 int ECDSA_set_ex_data(EC_KEY *d, int idx, void *arg);
5201 void *ECDSA_get_ex_data(EC_KEY *d, int idx);
5202 void ERR_load_ECDSA_strings(void);
5203 const ECDH_METHOD *ECDH_OpenSSL(void);
5204 void ECDH_set_default_method(const ECDH_METHOD *);
5205 const ECDH_METHOD *ECDH_get_default_method(void);
5206 int ECDH_set_method(EC_KEY *, const ECDH_METHOD *);
5207 int ECDH_compute_key(void *out, size_t outlen, const EC_POINT *pub_key, EC_KEY *ecdh,
5208                      void *(*KDF)(const void *in, size_t inlen, void *out, size_t *outlen));
5209 int ECDH_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new
5210   *new_func, CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func);
5211 int ECDH_set_ex_data(EC_KEY *d, int idx, void *arg);
5212 void *ECDH_get_ex_data(EC_KEY *d, int idx);
5213 void ERR_load_ECDH_strings(void);
5214 struct rsa_meth_st
5215  {
5216  const char *name;
5217  int (*rsa_pub_enc)(int flen,const unsigned char *from,
5218       unsigned char *to,
5219       RSA *rsa,int padding);
5220  int (*rsa_pub_dec)(int flen,const unsigned char *from,
5221       unsigned char *to,
5222       RSA *rsa,int padding);
5223  int (*rsa_priv_enc)(int flen,const unsigned char *from,
5224        unsigned char *to,
5225        RSA *rsa,int padding);
5226  int (*rsa_priv_dec)(int flen,const unsigned char *from,
5227        unsigned char *to,
5228        RSA *rsa,int padding);
5229  int (*rsa_mod_exp)(BIGNUM *r0,const BIGNUM *I,RSA *rsa,BN_CTX *ctx);
5230  int (*bn_mod_exp)(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,
5231      const BIGNUM *m, BN_CTX *ctx,
5232      BN_MONT_CTX *m_ctx);
5233  int (*init)(RSA *rsa);
5234  int (*finish)(RSA *rsa);
5235  int flags;
5236  char *app_data;
5237  int (*rsa_sign)(int type,
5238   const unsigned char *m, unsigned int m_length,
5239   unsigned char *sigret, unsigned int *siglen, const RSA *rsa);
5240  int (*rsa_verify)(int dtype,
5241   const unsigned char *m, unsigned int m_length,
5242   const unsigned char *sigbuf, unsigned int siglen,
5243         const RSA *rsa);
5244  int (*rsa_keygen)(RSA *rsa, int bits, BIGNUM *e, BN_GENCB *cb);
5245  };
5246 struct rsa_st
5247  {
5248  int pad;
5249  long version;
5250  const RSA_METHOD *meth;
5251  ENGINE *engine;
5252  BIGNUM *n;
5253  BIGNUM *e;
5254  BIGNUM *d;
5255  BIGNUM *p;
5256  BIGNUM *q;
5257  BIGNUM *dmp1;
5258  BIGNUM *dmq1;
5259  BIGNUM *iqmp;
5260  CRYPTO_EX_DATA ex_data;
5261  int references;
5262  int flags;
5263  BN_MONT_CTX *_method_mod_n;
5264  BN_MONT_CTX *_method_mod_p;
5265  BN_MONT_CTX *_method_mod_q;
5266  char *bignum_data;
5267  BN_BLINDING *blinding;
5268  BN_BLINDING *mt_blinding;
5269  };
5270 RSA * RSA_new(void);
5271 RSA * RSA_new_method(ENGINE *engine);
5272 int RSA_size(const RSA *rsa);
5273 RSA * RSA_generate_key(int bits, unsigned long e,void
5274   (*callback)(int,int,void *),void *cb_arg);
5275 int RSA_generate_key_ex(RSA *rsa, int bits, BIGNUM *e, BN_GENCB *cb);
5276 int RSA_check_key(const RSA *);
5277 int RSA_public_encrypt(int flen, const unsigned char *from,
5278   unsigned char *to, RSA *rsa,int padding);
5279 int RSA_private_encrypt(int flen, const unsigned char *from,
5280   unsigned char *to, RSA *rsa,int padding);
5281 int RSA_public_decrypt(int flen, const unsigned char *from,
5282   unsigned char *to, RSA *rsa,int padding);
5283 int RSA_private_decrypt(int flen, const unsigned char *from,
5284   unsigned char *to, RSA *rsa,int padding);
5285 void RSA_free (RSA *r);
5286 int RSA_up_ref(RSA *r);
5287 int RSA_flags(const RSA *r);
5288 void RSA_set_default_method(const RSA_METHOD *meth);
5289 const RSA_METHOD *RSA_get_default_method(void);
5290 const RSA_METHOD *RSA_get_method(const RSA *rsa);
5291 int RSA_set_method(RSA *rsa, const RSA_METHOD *meth);
5292 int RSA_memory_lock(RSA *r);
5293 const RSA_METHOD *RSA_PKCS1_SSLeay(void);
5294 const RSA_METHOD *RSA_null_method(void);
5295 RSA *d2i_RSAPublicKey(RSA **a, const unsigned char **in, long len); int i2d_RSAPublicKey(const RSA *a, unsigned char **out); extern const ASN1_ITEM RSAPublicKey_it;
5296 RSA *d2i_RSAPrivateKey(RSA **a, const unsigned char **in, long len); int i2d_RSAPrivateKey(const RSA *a, unsigned char **out); extern const ASN1_ITEM RSAPrivateKey_it;
5297 typedef struct rsa_pss_params_st
5298  {
5299  X509_ALGOR *hashAlgorithm;
5300  X509_ALGOR *maskGenAlgorithm;
5301  ASN1_INTEGER *saltLength;
5302  ASN1_INTEGER *trailerField;
5303  } RSA_PSS_PARAMS;
5304 RSA_PSS_PARAMS *RSA_PSS_PARAMS_new(void); void RSA_PSS_PARAMS_free(RSA_PSS_PARAMS *a); RSA_PSS_PARAMS *d2i_RSA_PSS_PARAMS(RSA_PSS_PARAMS **a, const unsigned char **in, long len); int i2d_RSA_PSS_PARAMS(RSA_PSS_PARAMS *a, unsigned char **out); extern const ASN1_ITEM RSA_PSS_PARAMS_it;
5305 int RSA_print_fp(FILE *fp, const RSA *r,int offset);
5306 int RSA_print(BIO *bp, const RSA *r,int offset);
5307 int i2d_RSA_NET(const RSA *a, unsigned char **pp,
5308   int (*cb)(char *buf, int len, const char *prompt, int verify),
5309   int sgckey);
5310 RSA *d2i_RSA_NET(RSA **a, const unsigned char **pp, long length,
5311    int (*cb)(char *buf, int len, const char *prompt, int verify),
5312    int sgckey);
5313 int i2d_Netscape_RSA(const RSA *a, unsigned char **pp,
5314        int (*cb)(char *buf, int len, const char *prompt,
5315           int verify));
5316 RSA *d2i_Netscape_RSA(RSA **a, const unsigned char **pp, long length,
5317         int (*cb)(char *buf, int len, const char *prompt,
5318     int verify));
5319 int RSA_sign(int type, const unsigned char *m, unsigned int m_length,
5320  unsigned char *sigret, unsigned int *siglen, RSA *rsa);
5321 int RSA_verify(int type, const unsigned char *m, unsigned int m_length,
5322  const unsigned char *sigbuf, unsigned int siglen, RSA *rsa);
5323 int RSA_sign_ASN1_OCTET_STRING(int type,
5324  const unsigned char *m, unsigned int m_length,
5325  unsigned char *sigret, unsigned int *siglen, RSA *rsa);
5326 int RSA_verify_ASN1_OCTET_STRING(int type,
5327  const unsigned char *m, unsigned int m_length,
5328  unsigned char *sigbuf, unsigned int siglen, RSA *rsa);
5329 int RSA_blinding_on(RSA *rsa, BN_CTX *ctx);
5330 void RSA_blinding_off(RSA *rsa);
5331 BN_BLINDING *RSA_setup_blinding(RSA *rsa, BN_CTX *ctx);
5332 int RSA_padding_add_PKCS1_type_1(unsigned char *to,int tlen,
5333  const unsigned char *f,int fl);
5334 int RSA_padding_check_PKCS1_type_1(unsigned char *to,int tlen,
5335  const unsigned char *f,int fl,int rsa_len);
5336 int RSA_padding_add_PKCS1_type_2(unsigned char *to,int tlen,
5337  const unsigned char *f,int fl);
5338 int RSA_padding_check_PKCS1_type_2(unsigned char *to,int tlen,
5339  const unsigned char *f,int fl,int rsa_len);
5340 int PKCS1_MGF1(unsigned char *mask, long len,
5341  const unsigned char *seed, long seedlen, const EVP_MD *dgst);
5342 int RSA_padding_add_PKCS1_OAEP(unsigned char *to,int tlen,
5343  const unsigned char *f,int fl,
5344  const unsigned char *p,int pl);
5345 int RSA_padding_check_PKCS1_OAEP(unsigned char *to,int tlen,
5346  const unsigned char *f,int fl,int rsa_len,
5347  const unsigned char *p,int pl);
5348 int RSA_padding_add_SSLv23(unsigned char *to,int tlen,
5349  const unsigned char *f,int fl);
5350 int RSA_padding_check_SSLv23(unsigned char *to,int tlen,
5351  const unsigned char *f,int fl,int rsa_len);
5352 int RSA_padding_add_none(unsigned char *to,int tlen,
5353  const unsigned char *f,int fl);
5354 int RSA_padding_check_none(unsigned char *to,int tlen,
5355  const unsigned char *f,int fl,int rsa_len);
5356 int RSA_padding_add_X931(unsigned char *to,int tlen,
5357  const unsigned char *f,int fl);
5358 int RSA_padding_check_X931(unsigned char *to,int tlen,
5359  const unsigned char *f,int fl,int rsa_len);
5360 int RSA_X931_hash_id(int nid);
5361 int RSA_verify_PKCS1_PSS(RSA *rsa, const unsigned char *mHash,
5362    const EVP_MD *Hash, const unsigned char *EM, int sLen);
5363 int RSA_padding_add_PKCS1_PSS(RSA *rsa, unsigned char *EM,
5364    const unsigned char *mHash,
5365    const EVP_MD *Hash, int sLen);
5366 int RSA_verify_PKCS1_PSS_mgf1(RSA *rsa, const unsigned char *mHash,
5367    const EVP_MD *Hash, const EVP_MD *mgf1Hash,
5368    const unsigned char *EM, int sLen);
5369 int RSA_padding_add_PKCS1_PSS_mgf1(RSA *rsa, unsigned char *EM,
5370    const unsigned char *mHash,
5371    const EVP_MD *Hash, const EVP_MD *mgf1Hash, int sLen);
5372 int RSA_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,
5373  CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func);
5374 int RSA_set_ex_data(RSA *r,int idx,void *arg);
5375 void *RSA_get_ex_data(const RSA *r, int idx);
5376 RSA *RSAPublicKey_dup(RSA *rsa);
5377 RSA *RSAPrivateKey_dup(RSA *rsa);
5378 void ERR_load_RSA_strings(void);
5379 struct dh_method
5380  {
5381  const char *name;
5382  int (*generate_key)(DH *dh);
5383  int (*compute_key)(unsigned char *key,const BIGNUM *pub_key,DH *dh);
5384  int (*bn_mod_exp)(const DH *dh, BIGNUM *r, const BIGNUM *a,
5385     const BIGNUM *p, const BIGNUM *m, BN_CTX *ctx,
5386     BN_MONT_CTX *m_ctx);
5387  int (*init)(DH *dh);
5388  int (*finish)(DH *dh);
5389  int flags;
5390  char *app_data;
5391  int (*generate_params)(DH *dh, int prime_len, int generator, BN_GENCB *cb);
5392  };
5393 struct dh_st
5394  {
5395  int pad;
5396  int version;
5397  BIGNUM *p;
5398  BIGNUM *g;
5399  long length;
5400  BIGNUM *pub_key;
5401  BIGNUM *priv_key;
5402  int flags;
5403  BN_MONT_CTX *method_mont_p;
5404  BIGNUM *q;
5405  BIGNUM *j;
5406  unsigned char *seed;
5407  int seedlen;
5408  BIGNUM *counter;
5409  int references;
5410  CRYPTO_EX_DATA ex_data;
5411  const DH_METHOD *meth;
5412  ENGINE *engine;
5413  };
5414 DH *DHparams_dup(DH *);
5415 const DH_METHOD *DH_OpenSSL(void);
5416 void DH_set_default_method(const DH_METHOD *meth);
5417 const DH_METHOD *DH_get_default_method(void);
5418 int DH_set_method(DH *dh, const DH_METHOD *meth);
5419 DH *DH_new_method(ENGINE *engine);
5420 DH * DH_new(void);
5421 void DH_free(DH *dh);
5422 int DH_up_ref(DH *dh);
5423 int DH_size(const DH *dh);
5424 int DH_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,
5425       CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func);
5426 int DH_set_ex_data(DH *d, int idx, void *arg);
5427 void *DH_get_ex_data(DH *d, int idx);
5428 DH * DH_generate_parameters(int prime_len,int generator,
5429   void (*callback)(int,int,void *),void *cb_arg);
5430 int DH_generate_parameters_ex(DH *dh, int prime_len,int generator, BN_GENCB *cb);
5431 int DH_check(const DH *dh,int *codes);
5432 int DH_check_pub_key(const DH *dh,const BIGNUM *pub_key, int *codes);
5433 int DH_generate_key(DH *dh);
5434 int DH_compute_key(unsigned char *key,const BIGNUM *pub_key,DH *dh);
5435 DH * d2i_DHparams(DH **a,const unsigned char **pp, long length);
5436 int i2d_DHparams(const DH *a,unsigned char **pp);
5437 int DHparams_print_fp(FILE *fp, const DH *x);
5438 int DHparams_print(BIO *bp, const DH *x);
5439 void ERR_load_DH_strings(void);
5440 typedef struct DSA_SIG_st
5441  {
5442  BIGNUM *r;
5443  BIGNUM *s;
5444  } DSA_SIG;
5445 struct dsa_method
5446  {
5447  const char *name;
5448  DSA_SIG * (*dsa_do_sign)(const unsigned char *dgst, int dlen, DSA *dsa);
5449  int (*dsa_sign_setup)(DSA *dsa, BN_CTX *ctx_in, BIGNUM **kinvp,
5450         BIGNUM **rp);
5451  int (*dsa_do_verify)(const unsigned char *dgst, int dgst_len,
5452         DSA_SIG *sig, DSA *dsa);
5453  int (*dsa_mod_exp)(DSA *dsa, BIGNUM *rr, BIGNUM *a1, BIGNUM *p1,
5454    BIGNUM *a2, BIGNUM *p2, BIGNUM *m, BN_CTX *ctx,
5455    BN_MONT_CTX *in_mont);
5456  int (*bn_mod_exp)(DSA *dsa, BIGNUM *r, BIGNUM *a, const BIGNUM *p,
5457     const BIGNUM *m, BN_CTX *ctx,
5458     BN_MONT_CTX *m_ctx);
5459  int (*init)(DSA *dsa);
5460  int (*finish)(DSA *dsa);
5461  int flags;
5462  char *app_data;
5463  int (*dsa_paramgen)(DSA *dsa, int bits,
5464    const unsigned char *seed, int seed_len,
5465    int *counter_ret, unsigned long *h_ret,
5466    BN_GENCB *cb);
5467  int (*dsa_keygen)(DSA *dsa);
5468  };
5469 struct dsa_st
5470  {
5471  int pad;
5472  long version;
5473  int write_params;
5474  BIGNUM *p;
5475  BIGNUM *q;
5476  BIGNUM *g;
5477  BIGNUM *pub_key;
5478  BIGNUM *priv_key;
5479  BIGNUM *kinv;
5480  BIGNUM *r;
5481  int flags;
5482  BN_MONT_CTX *method_mont_p;
5483  int references;
5484  CRYPTO_EX_DATA ex_data;
5485  const DSA_METHOD *meth;
5486  ENGINE *engine;
5487  };
5488 DSA *DSAparams_dup(DSA *x);
5489 DSA_SIG * DSA_SIG_new(void);
5490 void DSA_SIG_free(DSA_SIG *a);
5491 int i2d_DSA_SIG(const DSA_SIG *a, unsigned char **pp);
5492 DSA_SIG * d2i_DSA_SIG(DSA_SIG **v, const unsigned char **pp, long length);
5493 DSA_SIG * DSA_do_sign(const unsigned char *dgst,int dlen,DSA *dsa);
5494 int DSA_do_verify(const unsigned char *dgst,int dgst_len,
5495         DSA_SIG *sig,DSA *dsa);
5496 const DSA_METHOD *DSA_OpenSSL(void);
5497 void DSA_set_default_method(const DSA_METHOD *);
5498 const DSA_METHOD *DSA_get_default_method(void);
5499 int DSA_set_method(DSA *dsa, const DSA_METHOD *);
5500 DSA * DSA_new(void);
5501 DSA * DSA_new_method(ENGINE *engine);
5502 void DSA_free (DSA *r);
5503 int DSA_up_ref(DSA *r);
5504 int DSA_size(const DSA *);
5505 int DSA_sign_setup( DSA *dsa,BN_CTX *ctx_in,BIGNUM **kinvp,BIGNUM **rp);
5506 int DSA_sign(int type,const unsigned char *dgst,int dlen,
5507   unsigned char *sig, unsigned int *siglen, DSA *dsa);
5508 int DSA_verify(int type,const unsigned char *dgst,int dgst_len,
5509   const unsigned char *sigbuf, int siglen, DSA *dsa);
5510 int DSA_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,
5511       CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func);
5512 int DSA_set_ex_data(DSA *d, int idx, void *arg);
5513 void *DSA_get_ex_data(DSA *d, int idx);
5514 DSA * d2i_DSAPublicKey(DSA **a, const unsigned char **pp, long length);
5515 DSA * d2i_DSAPrivateKey(DSA **a, const unsigned char **pp, long length);
5516 DSA * d2i_DSAparams(DSA **a, const unsigned char **pp, long length);
5517 DSA * DSA_generate_parameters(int bits,
5518   unsigned char *seed,int seed_len,
5519   int *counter_ret, unsigned long *h_ret,void
5520   (*callback)(int, int, void *),void *cb_arg);
5521 int DSA_generate_parameters_ex(DSA *dsa, int bits,
5522   const unsigned char *seed,int seed_len,
5523   int *counter_ret, unsigned long *h_ret, BN_GENCB *cb);
5524 int DSA_generate_key(DSA *a);
5525 int i2d_DSAPublicKey(const DSA *a, unsigned char **pp);
5526 int i2d_DSAPrivateKey(const DSA *a, unsigned char **pp);
5527 int i2d_DSAparams(const DSA *a,unsigned char **pp);
5528 int DSAparams_print(BIO *bp, const DSA *x);
5529 int DSA_print(BIO *bp, const DSA *x, int off);
5530 int DSAparams_print_fp(FILE *fp, const DSA *x);
5531 int DSA_print_fp(FILE *bp, const DSA *x, int off);
5532 DH *DSA_dup_DH(const DSA *r);
5533 void ERR_load_DSA_strings(void);
5534 typedef struct SHAstate_st
5535  {
5536  unsigned int h0,h1,h2,h3,h4;
5537  unsigned int Nl,Nh;
5538  unsigned int data[16];
5539  unsigned int num;
5540  } SHA_CTX;
5541 int SHA_Init(SHA_CTX *c);
5542 int SHA_Update(SHA_CTX *c, const void *data, size_t len);
5543 int SHA_Final(unsigned char *md, SHA_CTX *c);
5544 unsigned char *SHA(const unsigned char *d, size_t n, unsigned char *md);
5545 void SHA_Transform(SHA_CTX *c, const unsigned char *data);
5546 int SHA1_Init(SHA_CTX *c);
5547 int SHA1_Update(SHA_CTX *c, const void *data, size_t len);
5548 int SHA1_Final(unsigned char *md, SHA_CTX *c);
5549 unsigned char *SHA1(const unsigned char *d, size_t n, unsigned char *md);
5550 void SHA1_Transform(SHA_CTX *c, const unsigned char *data);
5551 typedef struct SHA256state_st
5552  {
5553  unsigned int h[8];
5554  unsigned int Nl,Nh;
5555  unsigned int data[16];
5556  unsigned int num,md_len;
5557  } SHA256_CTX;
5558 int SHA224_Init(SHA256_CTX *c);
5559 int SHA224_Update(SHA256_CTX *c, const void *data, size_t len);
5560 int SHA224_Final(unsigned char *md, SHA256_CTX *c);
5561 unsigned char *SHA224(const unsigned char *d, size_t n,unsigned char *md);
5562 int SHA256_Init(SHA256_CTX *c);
5563 int SHA256_Update(SHA256_CTX *c, const void *data, size_t len);
5564 int SHA256_Final(unsigned char *md, SHA256_CTX *c);
5565 unsigned char *SHA256(const unsigned char *d, size_t n,unsigned char *md);
5566 void SHA256_Transform(SHA256_CTX *c, const unsigned char *data);
5567 typedef struct SHA512state_st
5568  {
5569  unsigned long long h[8];
5570  unsigned long long Nl,Nh;
5571  union {
5572   unsigned long long d[16];
5573   unsigned char p[(16*8)];
5574  } u;
5575  unsigned int num,md_len;
5576  } SHA512_CTX;
5577 int SHA384_Init(SHA512_CTX *c);
5578 int SHA384_Update(SHA512_CTX *c, const void *data, size_t len);
5579 int SHA384_Final(unsigned char *md, SHA512_CTX *c);
5580 unsigned char *SHA384(const unsigned char *d, size_t n,unsigned char *md);
5581 int SHA512_Init(SHA512_CTX *c);
5582 int SHA512_Update(SHA512_CTX *c, const void *data, size_t len);
5583 int SHA512_Final(unsigned char *md, SHA512_CTX *c);
5584 unsigned char *SHA512(const unsigned char *d, size_t n,unsigned char *md);
5585 void SHA512_Transform(SHA512_CTX *c, const unsigned char *data);
5586 typedef struct X509_objects_st
5587  {
5588  int nid;
5589  int (*a2i)(void);
5590  int (*i2a)(void);
5591  } X509_OBJECTS;
5592 struct X509_algor_st
5593  {
5594  ASN1_OBJECT *algorithm;
5595  ASN1_TYPE *parameter;
5596  } ;
5597 typedef struct stack_st_X509_ALGOR X509_ALGORS;
5598 typedef struct X509_val_st
5599  {
5600  ASN1_TIME *notBefore;
5601  ASN1_TIME *notAfter;
5602  } X509_VAL;
5603 struct X509_pubkey_st
5604  {
5605  X509_ALGOR *algor;
5606  ASN1_BIT_STRING *public_key;
5607  EVP_PKEY *pkey;
5608  };
5609 typedef struct X509_sig_st
5610  {
5611  X509_ALGOR *algor;
5612  ASN1_OCTET_STRING *digest;
5613  } X509_SIG;
5614 typedef struct X509_name_entry_st
5615  {
5616  ASN1_OBJECT *object;
5617  ASN1_STRING *value;
5618  int set;
5619  int size;
5620  } X509_NAME_ENTRY;
5621 struct stack_st_X509_NAME_ENTRY { _STACK stack; };
5622 struct X509_name_st
5623  {
5624  struct stack_st_X509_NAME_ENTRY *entries;
5625  int modified;
5626  BUF_MEM *bytes;
5627  unsigned char *canon_enc;
5628  int canon_enclen;
5629  } ;
5630 struct stack_st_X509_NAME { _STACK stack; };
5631 typedef struct X509_extension_st
5632  {
5633  ASN1_OBJECT *object;
5634  ASN1_BOOLEAN critical;
5635  ASN1_OCTET_STRING *value;
5636  } X509_EXTENSION;
5637 typedef struct stack_st_X509_EXTENSION X509_EXTENSIONS;
5638 struct stack_st_X509_EXTENSION { _STACK stack; };
5639 typedef struct x509_attributes_st
5640  {
5641  ASN1_OBJECT *object;
5642  int single;
5643  union {
5644   char *ptr;
5645          struct stack_st_ASN1_TYPE *set;
5646          ASN1_TYPE *single;
5647   } value;
5648  } X509_ATTRIBUTE;
5649 struct stack_st_X509_ATTRIBUTE { _STACK stack; };
5650 typedef struct X509_req_info_st
5651  {
5652  ASN1_ENCODING enc;
5653  ASN1_INTEGER *version;
5654  X509_NAME *subject;
5655  X509_PUBKEY *pubkey;
5656  struct stack_st_X509_ATTRIBUTE *attributes;
5657  } X509_REQ_INFO;
5658 typedef struct X509_req_st
5659  {
5660  X509_REQ_INFO *req_info;
5661  X509_ALGOR *sig_alg;
5662  ASN1_BIT_STRING *signature;
5663  int references;
5664  } X509_REQ;
5665 typedef struct x509_cinf_st
5666  {
5667  ASN1_INTEGER *version;
5668  ASN1_INTEGER *serialNumber;
5669  X509_ALGOR *signature;
5670  X509_NAME *issuer;
5671  X509_VAL *validity;
5672  X509_NAME *subject;
5673  X509_PUBKEY *key;
5674  ASN1_BIT_STRING *issuerUID;
5675  ASN1_BIT_STRING *subjectUID;
5676  struct stack_st_X509_EXTENSION *extensions;
5677  ASN1_ENCODING enc;
5678  } X509_CINF;
5679 typedef struct x509_cert_aux_st
5680  {
5681  struct stack_st_ASN1_OBJECT *trust;
5682  struct stack_st_ASN1_OBJECT *reject;
5683  ASN1_UTF8STRING *alias;
5684  ASN1_OCTET_STRING *keyid;
5685  struct stack_st_X509_ALGOR *other;
5686  } X509_CERT_AUX;
5687 struct x509_st
5688  {
5689  X509_CINF *cert_info;
5690  X509_ALGOR *sig_alg;
5691  ASN1_BIT_STRING *signature;
5692  int valid;
5693  int references;
5694  char *name;
5695  CRYPTO_EX_DATA ex_data;
5696  long ex_pathlen;
5697  long ex_pcpathlen;
5698  unsigned long ex_flags;
5699  unsigned long ex_kusage;
5700  unsigned long ex_xkusage;
5701  unsigned long ex_nscert;
5702  ASN1_OCTET_STRING *skid;
5703  AUTHORITY_KEYID *akid;
5704  X509_POLICY_CACHE *policy_cache;
5705  struct stack_st_DIST_POINT *crldp;
5706  struct stack_st_GENERAL_NAME *altname;
5707  NAME_CONSTRAINTS *nc;
5708  unsigned char sha1_hash[20];
5709  X509_CERT_AUX *aux;
5710  } ;
5711 struct stack_st_X509 { _STACK stack; };
5712 typedef struct x509_trust_st {
5713  int trust;
5714  int flags;
5715  int (*check_trust)(struct x509_trust_st *, X509 *, int);
5716  char *name;
5717  int arg1;
5718  void *arg2;
5719 } X509_TRUST;
5720 struct stack_st_X509_TRUST { _STACK stack; };
5721 typedef struct x509_cert_pair_st {
5722  X509 *forward;
5723  X509 *reverse;
5724 } X509_CERT_PAIR;
5725 struct x509_revoked_st
5726  {
5727  ASN1_INTEGER *serialNumber;
5728  ASN1_TIME *revocationDate;
5729  struct stack_st_X509_EXTENSION *extensions;
5730  struct stack_st_GENERAL_NAME *issuer;
5731  int reason;
5732  int sequence;
5733  };
5734 struct stack_st_X509_REVOKED { _STACK stack; };
5735 typedef struct X509_crl_info_st
5736  {
5737  ASN1_INTEGER *version;
5738  X509_ALGOR *sig_alg;
5739  X509_NAME *issuer;
5740  ASN1_TIME *lastUpdate;
5741  ASN1_TIME *nextUpdate;
5742  struct stack_st_X509_REVOKED *revoked;
5743  struct stack_st_X509_EXTENSION *extensions;
5744  ASN1_ENCODING enc;
5745  } X509_CRL_INFO;
5746 struct X509_crl_st
5747  {
5748  X509_CRL_INFO *crl;
5749  X509_ALGOR *sig_alg;
5750  ASN1_BIT_STRING *signature;
5751  int references;
5752  int flags;
5753  AUTHORITY_KEYID *akid;
5754  ISSUING_DIST_POINT *idp;
5755  int idp_flags;
5756  int idp_reasons;
5757  ASN1_INTEGER *crl_number;
5758  ASN1_INTEGER *base_crl_number;
5759  unsigned char sha1_hash[20];
5760  struct stack_st_GENERAL_NAMES *issuers;
5761  const X509_CRL_METHOD *meth;
5762  void *meth_data;
5763  } ;
5764 struct stack_st_X509_CRL { _STACK stack; };
5765 typedef struct private_key_st
5766  {
5767  int version;
5768  X509_ALGOR *enc_algor;
5769  ASN1_OCTET_STRING *enc_pkey;
5770  EVP_PKEY *dec_pkey;
5771  int key_length;
5772  char *key_data;
5773  int key_free;
5774  EVP_CIPHER_INFO cipher;
5775  int references;
5776  } X509_PKEY;
5777 typedef struct X509_info_st
5778  {
5779  X509 *x509;
5780  X509_CRL *crl;
5781  X509_PKEY *x_pkey;
5782  EVP_CIPHER_INFO enc_cipher;
5783  int enc_len;
5784  char *enc_data;
5785  int references;
5786  } X509_INFO;
5787 struct stack_st_X509_INFO { _STACK stack; };
5788 typedef struct Netscape_spkac_st
5789  {
5790  X509_PUBKEY *pubkey;
5791  ASN1_IA5STRING *challenge;
5792  } NETSCAPE_SPKAC;
5793 typedef struct Netscape_spki_st
5794  {
5795  NETSCAPE_SPKAC *spkac;
5796  X509_ALGOR *sig_algor;
5797  ASN1_BIT_STRING *signature;
5798  } NETSCAPE_SPKI;
5799 typedef struct Netscape_certificate_sequence
5800  {
5801  ASN1_OBJECT *type;
5802  struct stack_st_X509 *certs;
5803  } NETSCAPE_CERT_SEQUENCE;
5804 typedef struct PBEPARAM_st {
5805 ASN1_OCTET_STRING *salt;
5806 ASN1_INTEGER *iter;
5807 } PBEPARAM;
5808 typedef struct PBE2PARAM_st {
5809 X509_ALGOR *keyfunc;
5810 X509_ALGOR *encryption;
5811 } PBE2PARAM;
5812 typedef struct PBKDF2PARAM_st {
5813 ASN1_TYPE *salt;
5814 ASN1_INTEGER *iter;
5815 ASN1_INTEGER *keylength;
5816 X509_ALGOR *prf;
5817 } PBKDF2PARAM;
5818 struct pkcs8_priv_key_info_st
5819         {
5820         int broken;
5821         ASN1_INTEGER *version;
5822         X509_ALGOR *pkeyalg;
5823         ASN1_TYPE *pkey;
5824         struct stack_st_X509_ATTRIBUTE *attributes;
5825         };
5826 typedef struct lhash_node_st
5827  {
5828  void *data;
5829  struct lhash_node_st *next;
5830  unsigned long hash;
5831  } LHASH_NODE;
5832 typedef int (*LHASH_COMP_FN_TYPE)(const void *, const void *);
5833 typedef unsigned long (*LHASH_HASH_FN_TYPE)(const void *);
5834 typedef void (*LHASH_DOALL_FN_TYPE)(void *);
5835 typedef void (*LHASH_DOALL_ARG_FN_TYPE)(void *, void *);
5836 typedef struct lhash_st
5837  {
5838  LHASH_NODE **b;
5839  LHASH_COMP_FN_TYPE comp;
5840  LHASH_HASH_FN_TYPE hash;
5841  unsigned int num_nodes;
5842  unsigned int num_alloc_nodes;
5843  unsigned int p;
5844  unsigned int pmax;
5845  unsigned long up_load;
5846  unsigned long down_load;
5847  unsigned long num_items;
5848  unsigned long num_expands;
5849  unsigned long num_expand_reallocs;
5850  unsigned long num_contracts;
5851  unsigned long num_contract_reallocs;
5852  unsigned long num_hash_calls;
5853  unsigned long num_comp_calls;
5854  unsigned long num_insert;
5855  unsigned long num_replace;
5856  unsigned long num_delete;
5857  unsigned long num_no_delete;
5858  unsigned long num_retrieve;
5859  unsigned long num_retrieve_miss;
5860  unsigned long num_hash_comps;
5861  int error;
5862  } _LHASH;
5863 _LHASH *lh_new(LHASH_HASH_FN_TYPE h, LHASH_COMP_FN_TYPE c);
5864 void lh_free(_LHASH *lh);
5865 void *lh_insert(_LHASH *lh, void *data);
5866 void *lh_delete(_LHASH *lh, const void *data);
5867 void *lh_retrieve(_LHASH *lh, const void *data);
5868 void lh_doall(_LHASH *lh, LHASH_DOALL_FN_TYPE func);
5869 void lh_doall_arg(_LHASH *lh, LHASH_DOALL_ARG_FN_TYPE func, void *arg);
5870 unsigned long lh_strhash(const char *c);
5871 unsigned long lh_num_items(const _LHASH *lh);
5872 void lh_stats(const _LHASH *lh, FILE *out);
5873 void lh_node_stats(const _LHASH *lh, FILE *out);
5874 void lh_node_usage_stats(const _LHASH *lh, FILE *out);
5875 void lh_stats_bio(const _LHASH *lh, BIO *out);
5876 void lh_node_stats_bio(const _LHASH *lh, BIO *out);
5877 void lh_node_usage_stats_bio(const _LHASH *lh, BIO *out);
5878 struct lhash_st_OPENSSL_STRING { int dummy; };
5879 struct lhash_st_OPENSSL_CSTRING { int dummy; };
5880 typedef struct x509_file_st
5881  {
5882  int num_paths;
5883  int num_alloced;
5884  char **paths;
5885  int *path_type;
5886  } X509_CERT_FILE_CTX;
5887 typedef struct x509_object_st
5888  {
5889  int type;
5890  union {
5891   char *ptr;
5892   X509 *x509;
5893   X509_CRL *crl;
5894   EVP_PKEY *pkey;
5895   } data;
5896  } X509_OBJECT;
5897 typedef struct x509_lookup_st X509_LOOKUP;
5898 struct stack_st_X509_LOOKUP { _STACK stack; };
5899 struct stack_st_X509_OBJECT { _STACK stack; };
5900 typedef struct x509_lookup_method_st
5901  {
5902  const char *name;
5903  int (*new_item)(X509_LOOKUP *ctx);
5904  void (*free)(X509_LOOKUP *ctx);
5905  int (*init)(X509_LOOKUP *ctx);
5906  int (*shutdown)(X509_LOOKUP *ctx);
5907  int (*ctrl)(X509_LOOKUP *ctx,int cmd,const char *argc,long argl,
5908    char **ret);
5909  int (*get_by_subject)(X509_LOOKUP *ctx,int type,X509_NAME *name,
5910          X509_OBJECT *ret);
5911  int (*get_by_issuer_serial)(X509_LOOKUP *ctx,int type,X509_NAME *name,
5912         ASN1_INTEGER *serial,X509_OBJECT *ret);
5913  int (*get_by_fingerprint)(X509_LOOKUP *ctx,int type,
5914       unsigned char *bytes,int len,
5915       X509_OBJECT *ret);
5916  int (*get_by_alias)(X509_LOOKUP *ctx,int type,char *str,int len,
5917        X509_OBJECT *ret);
5918  } X509_LOOKUP_METHOD;
5919 typedef struct X509_VERIFY_PARAM_st
5920  {
5921  char *name;
5922  time_t check_time;
5923  unsigned long inh_flags;
5924  unsigned long flags;
5925  int purpose;
5926  int trust;
5927  int depth;
5928  struct stack_st_ASN1_OBJECT *policies;
5929  } X509_VERIFY_PARAM;
5930 struct stack_st_X509_VERIFY_PARAM { _STACK stack; };
5931 struct x509_store_st
5932  {
5933  int cache;
5934  struct stack_st_X509_OBJECT *objs;
5935  struct stack_st_X509_LOOKUP *get_cert_methods;
5936  X509_VERIFY_PARAM *param;
5937  int (*verify)(X509_STORE_CTX *ctx);
5938  int (*verify_cb)(int ok,X509_STORE_CTX *ctx);
5939  int (*get_issuer)(X509 **issuer, X509_STORE_CTX *ctx, X509 *x);
5940  int (*check_issued)(X509_STORE_CTX *ctx, X509 *x, X509 *issuer);
5941  int (*check_revocation)(X509_STORE_CTX *ctx);
5942  int (*get_crl)(X509_STORE_CTX *ctx, X509_CRL **crl, X509 *x);
5943  int (*check_crl)(X509_STORE_CTX *ctx, X509_CRL *crl);
5944  int (*cert_crl)(X509_STORE_CTX *ctx, X509_CRL *crl, X509 *x);
5945  struct stack_st_X509 * (*lookup_certs)(X509_STORE_CTX *ctx, X509_NAME *nm);
5946  struct stack_st_X509_CRL * (*lookup_crls)(X509_STORE_CTX *ctx, X509_NAME *nm);
5947  int (*cleanup)(X509_STORE_CTX *ctx);
5948  CRYPTO_EX_DATA ex_data;
5949  int references;
5950  } ;
5951 int X509_STORE_set_depth(X509_STORE *store, int depth);
5952 struct x509_lookup_st
5953  {
5954  int init;
5955  int skip;
5956  X509_LOOKUP_METHOD *method;
5957  char *method_data;
5958  X509_STORE *store_ctx;
5959  } ;
5960 struct x509_store_ctx_st
5961  {
5962  X509_STORE *ctx;
5963  int current_method;
5964  X509 *cert;
5965  struct stack_st_X509 *untrusted;
5966  struct stack_st_X509_CRL *crls;
5967  X509_VERIFY_PARAM *param;
5968  void *other_ctx;
5969  int (*verify)(X509_STORE_CTX *ctx);
5970  int (*verify_cb)(int ok,X509_STORE_CTX *ctx);
5971  int (*get_issuer)(X509 **issuer, X509_STORE_CTX *ctx, X509 *x);
5972  int (*check_issued)(X509_STORE_CTX *ctx, X509 *x, X509 *issuer);
5973  int (*check_revocation)(X509_STORE_CTX *ctx);
5974  int (*get_crl)(X509_STORE_CTX *ctx, X509_CRL **crl, X509 *x);
5975  int (*check_crl)(X509_STORE_CTX *ctx, X509_CRL *crl);
5976  int (*cert_crl)(X509_STORE_CTX *ctx, X509_CRL *crl, X509 *x);
5977  int (*check_policy)(X509_STORE_CTX *ctx);
5978  struct stack_st_X509 * (*lookup_certs)(X509_STORE_CTX *ctx, X509_NAME *nm);
5979  struct stack_st_X509_CRL * (*lookup_crls)(X509_STORE_CTX *ctx, X509_NAME *nm);
5980  int (*cleanup)(X509_STORE_CTX *ctx);
5981  int valid;
5982  int last_untrusted;
5983  struct stack_st_X509 *chain;
5984  X509_POLICY_TREE *tree;
5985  int explicit_policy;
5986  int error_depth;
5987  int error;
5988  X509 *current_cert;
5989  X509 *current_issuer;
5990  X509_CRL *current_crl;
5991  int current_crl_score;
5992  unsigned int current_reasons;
5993  X509_STORE_CTX *parent;
5994  CRYPTO_EX_DATA ex_data;
5995  } ;
5996 void X509_STORE_CTX_set_depth(X509_STORE_CTX *ctx, int depth);
5997 int X509_OBJECT_idx_by_subject(struct stack_st_X509_OBJECT *h, int type,
5998       X509_NAME *name);
5999 X509_OBJECT *X509_OBJECT_retrieve_by_subject(struct stack_st_X509_OBJECT *h,int type,X509_NAME *name);
6000 X509_OBJECT *X509_OBJECT_retrieve_match(struct stack_st_X509_OBJECT *h, X509_OBJECT *x);
6001 void X509_OBJECT_up_ref_count(X509_OBJECT *a);
6002 void X509_OBJECT_free_contents(X509_OBJECT *a);
6003 X509_STORE *X509_STORE_new(void );
6004 void X509_STORE_free(X509_STORE *v);
6005 struct stack_st_X509* X509_STORE_get1_certs(X509_STORE_CTX *st, X509_NAME *nm);
6006 struct stack_st_X509_CRL* X509_STORE_get1_crls(X509_STORE_CTX *st, X509_NAME *nm);
6007 int X509_STORE_set_flags(X509_STORE *ctx, unsigned long flags);
6008 int X509_STORE_set_purpose(X509_STORE *ctx, int purpose);
6009 int X509_STORE_set_trust(X509_STORE *ctx, int trust);
6010 int X509_STORE_set1_param(X509_STORE *ctx, X509_VERIFY_PARAM *pm);
6011 void X509_STORE_set_verify_cb(X509_STORE *ctx,
6012       int (*verify_cb)(int, X509_STORE_CTX *));
6013 X509_STORE_CTX *X509_STORE_CTX_new(void);
6014 int X509_STORE_CTX_get1_issuer(X509 **issuer, X509_STORE_CTX *ctx, X509 *x);
6015 void X509_STORE_CTX_free(X509_STORE_CTX *ctx);
6016 int X509_STORE_CTX_init(X509_STORE_CTX *ctx, X509_STORE *store,
6017     X509 *x509, struct stack_st_X509 *chain);
6018 void X509_STORE_CTX_trusted_stack(X509_STORE_CTX *ctx, struct stack_st_X509 *sk);
6019 void X509_STORE_CTX_cleanup(X509_STORE_CTX *ctx);
6020 X509_LOOKUP *X509_STORE_add_lookup(X509_STORE *v, X509_LOOKUP_METHOD *m);
6021 X509_LOOKUP_METHOD *X509_LOOKUP_hash_dir(void);
6022 X509_LOOKUP_METHOD *X509_LOOKUP_file(void);
6023 int X509_STORE_add_cert(X509_STORE *ctx, X509 *x);
6024 int X509_STORE_add_crl(X509_STORE *ctx, X509_CRL *x);
6025 int X509_STORE_get_by_subject(X509_STORE_CTX *vs,int type,X509_NAME *name,
6026  X509_OBJECT *ret);
6027 int X509_LOOKUP_ctrl(X509_LOOKUP *ctx, int cmd, const char *argc,
6028  long argl, char **ret);
6029 int X509_load_cert_file(X509_LOOKUP *ctx, const char *file, int type);
6030 int X509_load_crl_file(X509_LOOKUP *ctx, const char *file, int type);
6031 int X509_load_cert_crl_file(X509_LOOKUP *ctx, const char *file, int type);
6032 X509_LOOKUP *X509_LOOKUP_new(X509_LOOKUP_METHOD *method);
6033 void X509_LOOKUP_free(X509_LOOKUP *ctx);
6034 int X509_LOOKUP_init(X509_LOOKUP *ctx);
6035 int X509_LOOKUP_by_subject(X509_LOOKUP *ctx, int type, X509_NAME *name,
6036  X509_OBJECT *ret);
6037 int X509_LOOKUP_by_issuer_serial(X509_LOOKUP *ctx, int type, X509_NAME *name,
6038  ASN1_INTEGER *serial, X509_OBJECT *ret);
6039 int X509_LOOKUP_by_fingerprint(X509_LOOKUP *ctx, int type,
6040  unsigned char *bytes, int len, X509_OBJECT *ret);
6041 int X509_LOOKUP_by_alias(X509_LOOKUP *ctx, int type, char *str,
6042  int len, X509_OBJECT *ret);
6043 int X509_LOOKUP_shutdown(X509_LOOKUP *ctx);
6044 int X509_STORE_load_locations (X509_STORE *ctx,
6045   const char *file, const char *dir);
6046 int X509_STORE_set_default_paths(X509_STORE *ctx);
6047 int X509_STORE_CTX_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,
6048  CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func);
6049 int X509_STORE_CTX_set_ex_data(X509_STORE_CTX *ctx,int idx,void *data);
6050 void * X509_STORE_CTX_get_ex_data(X509_STORE_CTX *ctx,int idx);
6051 int X509_STORE_CTX_get_error(X509_STORE_CTX *ctx);
6052 void X509_STORE_CTX_set_error(X509_STORE_CTX *ctx,int s);
6053 int X509_STORE_CTX_get_error_depth(X509_STORE_CTX *ctx);
6054 X509 * X509_STORE_CTX_get_current_cert(X509_STORE_CTX *ctx);
6055 X509 *X509_STORE_CTX_get0_current_issuer(X509_STORE_CTX *ctx);
6056 X509_CRL *X509_STORE_CTX_get0_current_crl(X509_STORE_CTX *ctx);
6057 X509_STORE_CTX *X509_STORE_CTX_get0_parent_ctx(X509_STORE_CTX *ctx);
6058 struct stack_st_X509 *X509_STORE_CTX_get_chain(X509_STORE_CTX *ctx);
6059 struct stack_st_X509 *X509_STORE_CTX_get1_chain(X509_STORE_CTX *ctx);
6060 void X509_STORE_CTX_set_cert(X509_STORE_CTX *c,X509 *x);
6061 void X509_STORE_CTX_set_chain(X509_STORE_CTX *c,struct stack_st_X509 *sk);
6062 void X509_STORE_CTX_set0_crls(X509_STORE_CTX *c,struct stack_st_X509_CRL *sk);
6063 int X509_STORE_CTX_set_purpose(X509_STORE_CTX *ctx, int purpose);
6064 int X509_STORE_CTX_set_trust(X509_STORE_CTX *ctx, int trust);
6065 int X509_STORE_CTX_purpose_inherit(X509_STORE_CTX *ctx, int def_purpose,
6066     int purpose, int trust);
6067 void X509_STORE_CTX_set_flags(X509_STORE_CTX *ctx, unsigned long flags);
6068 void X509_STORE_CTX_set_time(X509_STORE_CTX *ctx, unsigned long flags,
6069         time_t t);
6070 void X509_STORE_CTX_set_verify_cb(X509_STORE_CTX *ctx,
6071       int (*verify_cb)(int, X509_STORE_CTX *));
6072 X509_POLICY_TREE *X509_STORE_CTX_get0_policy_tree(X509_STORE_CTX *ctx);
6073 int X509_STORE_CTX_get_explicit_policy(X509_STORE_CTX *ctx);
6074 X509_VERIFY_PARAM *X509_STORE_CTX_get0_param(X509_STORE_CTX *ctx);
6075 void X509_STORE_CTX_set0_param(X509_STORE_CTX *ctx, X509_VERIFY_PARAM *param);
6076 int X509_STORE_CTX_set_default(X509_STORE_CTX *ctx, const char *name);
6077 X509_VERIFY_PARAM *X509_VERIFY_PARAM_new(void);
6078 void X509_VERIFY_PARAM_free(X509_VERIFY_PARAM *param);
6079 int X509_VERIFY_PARAM_inherit(X509_VERIFY_PARAM *to,
6080       const X509_VERIFY_PARAM *from);
6081 int X509_VERIFY_PARAM_set1(X509_VERIFY_PARAM *to,
6082       const X509_VERIFY_PARAM *from);
6083 int X509_VERIFY_PARAM_set1_name(X509_VERIFY_PARAM *param, const char *name);
6084 int X509_VERIFY_PARAM_set_flags(X509_VERIFY_PARAM *param, unsigned long flags);
6085 int X509_VERIFY_PARAM_clear_flags(X509_VERIFY_PARAM *param,
6086        unsigned long flags);
6087 unsigned long X509_VERIFY_PARAM_get_flags(X509_VERIFY_PARAM *param);
6088 int X509_VERIFY_PARAM_set_purpose(X509_VERIFY_PARAM *param, int purpose);
6089 int X509_VERIFY_PARAM_set_trust(X509_VERIFY_PARAM *param, int trust);
6090 void X509_VERIFY_PARAM_set_depth(X509_VERIFY_PARAM *param, int depth);
6091 void X509_VERIFY_PARAM_set_time(X509_VERIFY_PARAM *param, time_t t);
6092 int X509_VERIFY_PARAM_add0_policy(X509_VERIFY_PARAM *param,
6093       ASN1_OBJECT *policy);
6094 int X509_VERIFY_PARAM_set1_policies(X509_VERIFY_PARAM *param,
6095      struct stack_st_ASN1_OBJECT *policies);
6096 int X509_VERIFY_PARAM_get_depth(const X509_VERIFY_PARAM *param);
6097 int X509_VERIFY_PARAM_add0_table(X509_VERIFY_PARAM *param);
6098 const X509_VERIFY_PARAM *X509_VERIFY_PARAM_lookup(const char *name);
6099 void X509_VERIFY_PARAM_table_cleanup(void);
6100 int X509_policy_check(X509_POLICY_TREE **ptree, int *pexplicit_policy,
6101    struct stack_st_X509 *certs,
6102    struct stack_st_ASN1_OBJECT *policy_oids,
6103    unsigned int flags);
6104 void X509_policy_tree_free(X509_POLICY_TREE *tree);
6105 int X509_policy_tree_level_count(const X509_POLICY_TREE *tree);
6106 X509_POLICY_LEVEL *
6107  X509_policy_tree_get0_level(const X509_POLICY_TREE *tree, int i);
6108 struct stack_st_X509_POLICY_NODE *
6109  X509_policy_tree_get0_policies(const X509_POLICY_TREE *tree);
6110 struct stack_st_X509_POLICY_NODE *
6111  X509_policy_tree_get0_user_policies(const X509_POLICY_TREE *tree);
6112 int X509_policy_level_node_count(X509_POLICY_LEVEL *level);
6113 X509_POLICY_NODE *X509_policy_level_get0_node(X509_POLICY_LEVEL *level, int i);
6114 const ASN1_OBJECT *X509_policy_node_get0_policy(const X509_POLICY_NODE *node);
6115 struct stack_st_POLICYQUALINFO *
6116  X509_policy_node_get0_qualifiers(const X509_POLICY_NODE *node);
6117 const X509_POLICY_NODE *
6118  X509_policy_node_get0_parent(const X509_POLICY_NODE *node);
6119 typedef struct pkcs7_issuer_and_serial_st
6120  {
6121  X509_NAME *issuer;
6122  ASN1_INTEGER *serial;
6123  } PKCS7_ISSUER_AND_SERIAL;
6124 typedef struct pkcs7_signer_info_st
6125  {
6126  ASN1_INTEGER *version;
6127  PKCS7_ISSUER_AND_SERIAL *issuer_and_serial;
6128  X509_ALGOR *digest_alg;
6129  struct stack_st_X509_ATTRIBUTE *auth_attr;
6130  X509_ALGOR *digest_enc_alg;
6131  ASN1_OCTET_STRING *enc_digest;
6132  struct stack_st_X509_ATTRIBUTE *unauth_attr;
6133  EVP_PKEY *pkey;
6134  } PKCS7_SIGNER_INFO;
6135 struct stack_st_PKCS7_SIGNER_INFO { _STACK stack; };
6136 typedef struct pkcs7_recip_info_st
6137  {
6138  ASN1_INTEGER *version;
6139  PKCS7_ISSUER_AND_SERIAL *issuer_and_serial;
6140  X509_ALGOR *key_enc_algor;
6141  ASN1_OCTET_STRING *enc_key;
6142  X509 *cert;
6143  } PKCS7_RECIP_INFO;
6144 struct stack_st_PKCS7_RECIP_INFO { _STACK stack; };
6145 typedef struct pkcs7_signed_st
6146  {
6147  ASN1_INTEGER *version;
6148  struct stack_st_X509_ALGOR *md_algs;
6149  struct stack_st_X509 *cert;
6150  struct stack_st_X509_CRL *crl;
6151  struct stack_st_PKCS7_SIGNER_INFO *signer_info;
6152  struct pkcs7_st *contents;
6153  } PKCS7_SIGNED;
6154 typedef struct pkcs7_enc_content_st
6155  {
6156  ASN1_OBJECT *content_type;
6157  X509_ALGOR *algorithm;
6158  ASN1_OCTET_STRING *enc_data;
6159  const EVP_CIPHER *cipher;
6160  } PKCS7_ENC_CONTENT;
6161 typedef struct pkcs7_enveloped_st
6162  {
6163  ASN1_INTEGER *version;
6164  struct stack_st_PKCS7_RECIP_INFO *recipientinfo;
6165  PKCS7_ENC_CONTENT *enc_data;
6166  } PKCS7_ENVELOPE;
6167 typedef struct pkcs7_signedandenveloped_st
6168  {
6169  ASN1_INTEGER *version;
6170  struct stack_st_X509_ALGOR *md_algs;
6171  struct stack_st_X509 *cert;
6172  struct stack_st_X509_CRL *crl;
6173  struct stack_st_PKCS7_SIGNER_INFO *signer_info;
6174  PKCS7_ENC_CONTENT *enc_data;
6175  struct stack_st_PKCS7_RECIP_INFO *recipientinfo;
6176  } PKCS7_SIGN_ENVELOPE;
6177 typedef struct pkcs7_digest_st
6178  {
6179  ASN1_INTEGER *version;
6180  X509_ALGOR *md;
6181  struct pkcs7_st *contents;
6182  ASN1_OCTET_STRING *digest;
6183  } PKCS7_DIGEST;
6184 typedef struct pkcs7_encrypted_st
6185  {
6186  ASN1_INTEGER *version;
6187  PKCS7_ENC_CONTENT *enc_data;
6188  } PKCS7_ENCRYPT;
6189 typedef struct pkcs7_st
6190  {
6191  unsigned char *asn1;
6192  long length;
6193  int state;
6194  int detached;
6195  ASN1_OBJECT *type;
6196  union {
6197   char *ptr;
6198   ASN1_OCTET_STRING *data;
6199   PKCS7_SIGNED *sign;
6200   PKCS7_ENVELOPE *enveloped;
6201   PKCS7_SIGN_ENVELOPE *signed_and_enveloped;
6202   PKCS7_DIGEST *digest;
6203   PKCS7_ENCRYPT *encrypted;
6204   ASN1_TYPE *other;
6205   } d;
6206  } PKCS7;
6207 struct stack_st_PKCS7 { _STACK stack; };
6208 PKCS7_ISSUER_AND_SERIAL *PKCS7_ISSUER_AND_SERIAL_new(void); void PKCS7_ISSUER_AND_SERIAL_free(PKCS7_ISSUER_AND_SERIAL *a); PKCS7_ISSUER_AND_SERIAL *d2i_PKCS7_ISSUER_AND_SERIAL(PKCS7_ISSUER_AND_SERIAL **a, const unsigned char **in, long len); int i2d_PKCS7_ISSUER_AND_SERIAL(PKCS7_ISSUER_AND_SERIAL *a, unsigned char **out); extern const ASN1_ITEM PKCS7_ISSUER_AND_SERIAL_it;
6209 int PKCS7_ISSUER_AND_SERIAL_digest(PKCS7_ISSUER_AND_SERIAL *data,const EVP_MD *type,
6210  unsigned char *md,unsigned int *len);
6211 PKCS7 *d2i_PKCS7_fp(FILE *fp,PKCS7 **p7);
6212 int i2d_PKCS7_fp(FILE *fp,PKCS7 *p7);
6213 PKCS7 *PKCS7_dup(PKCS7 *p7);
6214 PKCS7 *d2i_PKCS7_bio(BIO *bp,PKCS7 **p7);
6215 int i2d_PKCS7_bio(BIO *bp,PKCS7 *p7);
6216 int i2d_PKCS7_bio_stream(BIO *out, PKCS7 *p7, BIO *in, int flags);
6217 int PEM_write_bio_PKCS7_stream(BIO *out, PKCS7 *p7, BIO *in, int flags);
6218 PKCS7_SIGNER_INFO *PKCS7_SIGNER_INFO_new(void); void PKCS7_SIGNER_INFO_free(PKCS7_SIGNER_INFO *a); PKCS7_SIGNER_INFO *d2i_PKCS7_SIGNER_INFO(PKCS7_SIGNER_INFO **a, const unsigned char **in, long len); int i2d_PKCS7_SIGNER_INFO(PKCS7_SIGNER_INFO *a, unsigned char **out); extern const ASN1_ITEM PKCS7_SIGNER_INFO_it;
6219 PKCS7_RECIP_INFO *PKCS7_RECIP_INFO_new(void); void PKCS7_RECIP_INFO_free(PKCS7_RECIP_INFO *a); PKCS7_RECIP_INFO *d2i_PKCS7_RECIP_INFO(PKCS7_RECIP_INFO **a, const unsigned char **in, long len); int i2d_PKCS7_RECIP_INFO(PKCS7_RECIP_INFO *a, unsigned char **out); extern const ASN1_ITEM PKCS7_RECIP_INFO_it;
6220 PKCS7_SIGNED *PKCS7_SIGNED_new(void); void PKCS7_SIGNED_free(PKCS7_SIGNED *a); PKCS7_SIGNED *d2i_PKCS7_SIGNED(PKCS7_SIGNED **a, const unsigned char **in, long len); int i2d_PKCS7_SIGNED(PKCS7_SIGNED *a, unsigned char **out); extern const ASN1_ITEM PKCS7_SIGNED_it;
6221 PKCS7_ENC_CONTENT *PKCS7_ENC_CONTENT_new(void); void PKCS7_ENC_CONTENT_free(PKCS7_ENC_CONTENT *a); PKCS7_ENC_CONTENT *d2i_PKCS7_ENC_CONTENT(PKCS7_ENC_CONTENT **a, const unsigned char **in, long len); int i2d_PKCS7_ENC_CONTENT(PKCS7_ENC_CONTENT *a, unsigned char **out); extern const ASN1_ITEM PKCS7_ENC_CONTENT_it;
6222 PKCS7_ENVELOPE *PKCS7_ENVELOPE_new(void); void PKCS7_ENVELOPE_free(PKCS7_ENVELOPE *a); PKCS7_ENVELOPE *d2i_PKCS7_ENVELOPE(PKCS7_ENVELOPE **a, const unsigned char **in, long len); int i2d_PKCS7_ENVELOPE(PKCS7_ENVELOPE *a, unsigned char **out); extern const ASN1_ITEM PKCS7_ENVELOPE_it;
6223 PKCS7_SIGN_ENVELOPE *PKCS7_SIGN_ENVELOPE_new(void); void PKCS7_SIGN_ENVELOPE_free(PKCS7_SIGN_ENVELOPE *a); PKCS7_SIGN_ENVELOPE *d2i_PKCS7_SIGN_ENVELOPE(PKCS7_SIGN_ENVELOPE **a, const unsigned char **in, long len); int i2d_PKCS7_SIGN_ENVELOPE(PKCS7_SIGN_ENVELOPE *a, unsigned char **out); extern const ASN1_ITEM PKCS7_SIGN_ENVELOPE_it;
6224 PKCS7_DIGEST *PKCS7_DIGEST_new(void); void PKCS7_DIGEST_free(PKCS7_DIGEST *a); PKCS7_DIGEST *d2i_PKCS7_DIGEST(PKCS7_DIGEST **a, const unsigned char **in, long len); int i2d_PKCS7_DIGEST(PKCS7_DIGEST *a, unsigned char **out); extern const ASN1_ITEM PKCS7_DIGEST_it;
6225 PKCS7_ENCRYPT *PKCS7_ENCRYPT_new(void); void PKCS7_ENCRYPT_free(PKCS7_ENCRYPT *a); PKCS7_ENCRYPT *d2i_PKCS7_ENCRYPT(PKCS7_ENCRYPT **a, const unsigned char **in, long len); int i2d_PKCS7_ENCRYPT(PKCS7_ENCRYPT *a, unsigned char **out); extern const ASN1_ITEM PKCS7_ENCRYPT_it;
6226 PKCS7 *PKCS7_new(void); void PKCS7_free(PKCS7 *a); PKCS7 *d2i_PKCS7(PKCS7 **a, const unsigned char **in, long len); int i2d_PKCS7(PKCS7 *a, unsigned char **out); extern const ASN1_ITEM PKCS7_it;
6227 extern const ASN1_ITEM PKCS7_ATTR_SIGN_it;
6228 extern const ASN1_ITEM PKCS7_ATTR_VERIFY_it;
6229 int i2d_PKCS7_NDEF(PKCS7 *a, unsigned char **out);
6230 int PKCS7_print_ctx(BIO *out, PKCS7 *x, int indent, const ASN1_PCTX *pctx);
6231 long PKCS7_ctrl(PKCS7 *p7, int cmd, long larg, char *parg);
6232 int PKCS7_set_type(PKCS7 *p7, int type);
6233 int PKCS7_set0_type_other(PKCS7 *p7, int type, ASN1_TYPE *other);
6234 int PKCS7_set_content(PKCS7 *p7, PKCS7 *p7_data);
6235 int PKCS7_SIGNER_INFO_set(PKCS7_SIGNER_INFO *p7i, X509 *x509, EVP_PKEY *pkey,
6236  const EVP_MD *dgst);
6237 int PKCS7_SIGNER_INFO_sign(PKCS7_SIGNER_INFO *si);
6238 int PKCS7_add_signer(PKCS7 *p7, PKCS7_SIGNER_INFO *p7i);
6239 int PKCS7_add_certificate(PKCS7 *p7, X509 *x509);
6240 int PKCS7_add_crl(PKCS7 *p7, X509_CRL *x509);
6241 int PKCS7_content_new(PKCS7 *p7, int nid);
6242 int PKCS7_dataVerify(X509_STORE *cert_store, X509_STORE_CTX *ctx,
6243  BIO *bio, PKCS7 *p7, PKCS7_SIGNER_INFO *si);
6244 int PKCS7_signatureVerify(BIO *bio, PKCS7 *p7, PKCS7_SIGNER_INFO *si,
6245         X509 *x509);
6246 BIO *PKCS7_dataInit(PKCS7 *p7, BIO *bio);
6247 int PKCS7_dataFinal(PKCS7 *p7, BIO *bio);
6248 BIO *PKCS7_dataDecode(PKCS7 *p7, EVP_PKEY *pkey, BIO *in_bio, X509 *pcert);
6249 PKCS7_SIGNER_INFO *PKCS7_add_signature(PKCS7 *p7, X509 *x509,
6250  EVP_PKEY *pkey, const EVP_MD *dgst);
6251 X509 *PKCS7_cert_from_signer_info(PKCS7 *p7, PKCS7_SIGNER_INFO *si);
6252 int PKCS7_set_digest(PKCS7 *p7, const EVP_MD *md);
6253 struct stack_st_PKCS7_SIGNER_INFO *PKCS7_get_signer_info(PKCS7 *p7);
6254 PKCS7_RECIP_INFO *PKCS7_add_recipient(PKCS7 *p7, X509 *x509);
6255 void PKCS7_SIGNER_INFO_get0_algs(PKCS7_SIGNER_INFO *si, EVP_PKEY **pk,
6256      X509_ALGOR **pdig, X509_ALGOR **psig);
6257 void PKCS7_RECIP_INFO_get0_alg(PKCS7_RECIP_INFO *ri, X509_ALGOR **penc);
6258 int PKCS7_add_recipient_info(PKCS7 *p7, PKCS7_RECIP_INFO *ri);
6259 int PKCS7_RECIP_INFO_set(PKCS7_RECIP_INFO *p7i, X509 *x509);
6260 int PKCS7_set_cipher(PKCS7 *p7, const EVP_CIPHER *cipher);
6261 int PKCS7_stream(unsigned char ***boundary, PKCS7 *p7);
6262 PKCS7_ISSUER_AND_SERIAL *PKCS7_get_issuer_and_serial(PKCS7 *p7, int idx);
6263 ASN1_OCTET_STRING *PKCS7_digest_from_attributes(struct stack_st_X509_ATTRIBUTE *sk);
6264 int PKCS7_add_signed_attribute(PKCS7_SIGNER_INFO *p7si,int nid,int type,
6265  void *data);
6266 int PKCS7_add_attribute (PKCS7_SIGNER_INFO *p7si, int nid, int atrtype,
6267  void *value);
6268 ASN1_TYPE *PKCS7_get_attribute(PKCS7_SIGNER_INFO *si, int nid);
6269 ASN1_TYPE *PKCS7_get_signed_attribute(PKCS7_SIGNER_INFO *si, int nid);
6270 int PKCS7_set_signed_attributes(PKCS7_SIGNER_INFO *p7si,
6271     struct stack_st_X509_ATTRIBUTE *sk);
6272 int PKCS7_set_attributes(PKCS7_SIGNER_INFO *p7si,struct stack_st_X509_ATTRIBUTE *sk);
6273 PKCS7 *PKCS7_sign(X509 *signcert, EVP_PKEY *pkey, struct stack_st_X509 *certs,
6274        BIO *data, int flags);
6275 PKCS7_SIGNER_INFO *PKCS7_sign_add_signer(PKCS7 *p7,
6276    X509 *signcert, EVP_PKEY *pkey, const EVP_MD *md,
6277    int flags);
6278 int PKCS7_final(PKCS7 *p7, BIO *data, int flags);
6279 int PKCS7_verify(PKCS7 *p7, struct stack_st_X509 *certs, X509_STORE *store,
6280      BIO *indata, BIO *out, int flags);
6281 struct stack_st_X509 *PKCS7_get0_signers(PKCS7 *p7, struct stack_st_X509 *certs, int flags);
6282 PKCS7 *PKCS7_encrypt(struct stack_st_X509 *certs, BIO *in, const EVP_CIPHER *cipher,
6283         int flags);
6284 int PKCS7_decrypt(PKCS7 *p7, EVP_PKEY *pkey, X509 *cert, BIO *data, int flags);
6285 int PKCS7_add_attrib_smimecap(PKCS7_SIGNER_INFO *si,
6286          struct stack_st_X509_ALGOR *cap);
6287 struct stack_st_X509_ALGOR *PKCS7_get_smimecap(PKCS7_SIGNER_INFO *si);
6288 int PKCS7_simple_smimecap(struct stack_st_X509_ALGOR *sk, int nid, int arg);
6289 int PKCS7_add_attrib_content_type(PKCS7_SIGNER_INFO *si, ASN1_OBJECT *coid);
6290 int PKCS7_add0_attrib_signing_time(PKCS7_SIGNER_INFO *si, ASN1_TIME *t);
6291 int PKCS7_add1_attrib_digest(PKCS7_SIGNER_INFO *si,
6292     const unsigned char *md, int mdlen);
6293 int SMIME_write_PKCS7(BIO *bio, PKCS7 *p7, BIO *data, int flags);
6294 PKCS7 *SMIME_read_PKCS7(BIO *bio, BIO **bcont);
6295 BIO *BIO_new_PKCS7(BIO *out, PKCS7 *p7);
6296 void ERR_load_PKCS7_strings(void);
6297 void X509_CRL_set_default_method(const X509_CRL_METHOD *meth);
6298 X509_CRL_METHOD *X509_CRL_METHOD_new(
6299  int (*crl_init)(X509_CRL *crl),
6300  int (*crl_free)(X509_CRL *crl),
6301  int (*crl_lookup)(X509_CRL *crl, X509_REVOKED **ret,
6302     ASN1_INTEGER *ser, X509_NAME *issuer),
6303  int (*crl_verify)(X509_CRL *crl, EVP_PKEY *pk));
6304 void X509_CRL_METHOD_free(X509_CRL_METHOD *m);
6305 void X509_CRL_set_meth_data(X509_CRL *crl, void *dat);
6306 void *X509_CRL_get_meth_data(X509_CRL *crl);
6307 const char *X509_verify_cert_error_string(long n);
6308 int X509_verify(X509 *a, EVP_PKEY *r);
6309 int X509_REQ_verify(X509_REQ *a, EVP_PKEY *r);
6310 int X509_CRL_verify(X509_CRL *a, EVP_PKEY *r);
6311 int NETSCAPE_SPKI_verify(NETSCAPE_SPKI *a, EVP_PKEY *r);
6312 NETSCAPE_SPKI * NETSCAPE_SPKI_b64_decode(const char *str, int len);
6313 char * NETSCAPE_SPKI_b64_encode(NETSCAPE_SPKI *x);
6314 EVP_PKEY *NETSCAPE_SPKI_get_pubkey(NETSCAPE_SPKI *x);
6315 int NETSCAPE_SPKI_set_pubkey(NETSCAPE_SPKI *x, EVP_PKEY *pkey);
6316 int NETSCAPE_SPKI_print(BIO *out, NETSCAPE_SPKI *spki);
6317 int X509_signature_dump(BIO *bp,const ASN1_STRING *sig, int indent);
6318 int X509_signature_print(BIO *bp,X509_ALGOR *alg, ASN1_STRING *sig);
6319 int X509_sign(X509 *x, EVP_PKEY *pkey, const EVP_MD *md);
6320 int X509_sign_ctx(X509 *x, EVP_MD_CTX *ctx);
6321 int X509_REQ_sign(X509_REQ *x, EVP_PKEY *pkey, const EVP_MD *md);
6322 int X509_REQ_sign_ctx(X509_REQ *x, EVP_MD_CTX *ctx);
6323 int X509_CRL_sign(X509_CRL *x, EVP_PKEY *pkey, const EVP_MD *md);
6324 int X509_CRL_sign_ctx(X509_CRL *x, EVP_MD_CTX *ctx);
6325 int NETSCAPE_SPKI_sign(NETSCAPE_SPKI *x, EVP_PKEY *pkey, const EVP_MD *md);
6326 int X509_pubkey_digest(const X509 *data,const EVP_MD *type,
6327   unsigned char *md, unsigned int *len);
6328 int X509_digest(const X509 *data,const EVP_MD *type,
6329   unsigned char *md, unsigned int *len);
6330 int X509_CRL_digest(const X509_CRL *data,const EVP_MD *type,
6331   unsigned char *md, unsigned int *len);
6332 int X509_REQ_digest(const X509_REQ *data,const EVP_MD *type,
6333   unsigned char *md, unsigned int *len);
6334 int X509_NAME_digest(const X509_NAME *data,const EVP_MD *type,
6335   unsigned char *md, unsigned int *len);
6336 X509 *d2i_X509_fp(FILE *fp, X509 **x509);
6337 int i2d_X509_fp(FILE *fp,X509 *x509);
6338 X509_CRL *d2i_X509_CRL_fp(FILE *fp,X509_CRL **crl);
6339 int i2d_X509_CRL_fp(FILE *fp,X509_CRL *crl);
6340 X509_REQ *d2i_X509_REQ_fp(FILE *fp,X509_REQ **req);
6341 int i2d_X509_REQ_fp(FILE *fp,X509_REQ *req);
6342 RSA *d2i_RSAPrivateKey_fp(FILE *fp,RSA **rsa);
6343 int i2d_RSAPrivateKey_fp(FILE *fp,RSA *rsa);
6344 RSA *d2i_RSAPublicKey_fp(FILE *fp,RSA **rsa);
6345 int i2d_RSAPublicKey_fp(FILE *fp,RSA *rsa);
6346 RSA *d2i_RSA_PUBKEY_fp(FILE *fp,RSA **rsa);
6347 int i2d_RSA_PUBKEY_fp(FILE *fp,RSA *rsa);
6348 DSA *d2i_DSA_PUBKEY_fp(FILE *fp, DSA **dsa);
6349 int i2d_DSA_PUBKEY_fp(FILE *fp, DSA *dsa);
6350 DSA *d2i_DSAPrivateKey_fp(FILE *fp, DSA **dsa);
6351 int i2d_DSAPrivateKey_fp(FILE *fp, DSA *dsa);
6352 EC_KEY *d2i_EC_PUBKEY_fp(FILE *fp, EC_KEY **eckey);
6353 int i2d_EC_PUBKEY_fp(FILE *fp, EC_KEY *eckey);
6354 EC_KEY *d2i_ECPrivateKey_fp(FILE *fp, EC_KEY **eckey);
6355 int i2d_ECPrivateKey_fp(FILE *fp, EC_KEY *eckey);
6356 X509_SIG *d2i_PKCS8_fp(FILE *fp,X509_SIG **p8);
6357 int i2d_PKCS8_fp(FILE *fp,X509_SIG *p8);
6358 PKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO_fp(FILE *fp,
6359       PKCS8_PRIV_KEY_INFO **p8inf);
6360 int i2d_PKCS8_PRIV_KEY_INFO_fp(FILE *fp,PKCS8_PRIV_KEY_INFO *p8inf);
6361 int i2d_PKCS8PrivateKeyInfo_fp(FILE *fp, EVP_PKEY *key);
6362 int i2d_PrivateKey_fp(FILE *fp, EVP_PKEY *pkey);
6363 EVP_PKEY *d2i_PrivateKey_fp(FILE *fp, EVP_PKEY **a);
6364 int i2d_PUBKEY_fp(FILE *fp, EVP_PKEY *pkey);
6365 EVP_PKEY *d2i_PUBKEY_fp(FILE *fp, EVP_PKEY **a);
6366 X509 *d2i_X509_bio(BIO *bp,X509 **x509);
6367 int i2d_X509_bio(BIO *bp,X509 *x509);
6368 X509_CRL *d2i_X509_CRL_bio(BIO *bp,X509_CRL **crl);
6369 int i2d_X509_CRL_bio(BIO *bp,X509_CRL *crl);
6370 X509_REQ *d2i_X509_REQ_bio(BIO *bp,X509_REQ **req);
6371 int i2d_X509_REQ_bio(BIO *bp,X509_REQ *req);
6372 RSA *d2i_RSAPrivateKey_bio(BIO *bp,RSA **rsa);
6373 int i2d_RSAPrivateKey_bio(BIO *bp,RSA *rsa);
6374 RSA *d2i_RSAPublicKey_bio(BIO *bp,RSA **rsa);
6375 int i2d_RSAPublicKey_bio(BIO *bp,RSA *rsa);
6376 RSA *d2i_RSA_PUBKEY_bio(BIO *bp,RSA **rsa);
6377 int i2d_RSA_PUBKEY_bio(BIO *bp,RSA *rsa);
6378 DSA *d2i_DSA_PUBKEY_bio(BIO *bp, DSA **dsa);
6379 int i2d_DSA_PUBKEY_bio(BIO *bp, DSA *dsa);
6380 DSA *d2i_DSAPrivateKey_bio(BIO *bp, DSA **dsa);
6381 int i2d_DSAPrivateKey_bio(BIO *bp, DSA *dsa);
6382 EC_KEY *d2i_EC_PUBKEY_bio(BIO *bp, EC_KEY **eckey);
6383 int i2d_EC_PUBKEY_bio(BIO *bp, EC_KEY *eckey);
6384 EC_KEY *d2i_ECPrivateKey_bio(BIO *bp, EC_KEY **eckey);
6385 int i2d_ECPrivateKey_bio(BIO *bp, EC_KEY *eckey);
6386 X509_SIG *d2i_PKCS8_bio(BIO *bp,X509_SIG **p8);
6387 int i2d_PKCS8_bio(BIO *bp,X509_SIG *p8);
6388 PKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO_bio(BIO *bp,
6389       PKCS8_PRIV_KEY_INFO **p8inf);
6390 int i2d_PKCS8_PRIV_KEY_INFO_bio(BIO *bp,PKCS8_PRIV_KEY_INFO *p8inf);
6391 int i2d_PKCS8PrivateKeyInfo_bio(BIO *bp, EVP_PKEY *key);
6392 int i2d_PrivateKey_bio(BIO *bp, EVP_PKEY *pkey);
6393 EVP_PKEY *d2i_PrivateKey_bio(BIO *bp, EVP_PKEY **a);
6394 int i2d_PUBKEY_bio(BIO *bp, EVP_PKEY *pkey);
6395 EVP_PKEY *d2i_PUBKEY_bio(BIO *bp, EVP_PKEY **a);
6396 X509 *X509_dup(X509 *x509);
6397 X509_ATTRIBUTE *X509_ATTRIBUTE_dup(X509_ATTRIBUTE *xa);
6398 X509_EXTENSION *X509_EXTENSION_dup(X509_EXTENSION *ex);
6399 X509_CRL *X509_CRL_dup(X509_CRL *crl);
6400 X509_REQ *X509_REQ_dup(X509_REQ *req);
6401 X509_ALGOR *X509_ALGOR_dup(X509_ALGOR *xn);
6402 int X509_ALGOR_set0(X509_ALGOR *alg, ASN1_OBJECT *aobj, int ptype, void *pval);
6403 void X509_ALGOR_get0(ASN1_OBJECT **paobj, int *pptype, void **ppval,
6404       X509_ALGOR *algor);
6405 void X509_ALGOR_set_md(X509_ALGOR *alg, const EVP_MD *md);
6406 X509_NAME *X509_NAME_dup(X509_NAME *xn);
6407 X509_NAME_ENTRY *X509_NAME_ENTRY_dup(X509_NAME_ENTRY *ne);
6408 int X509_cmp_time(const ASN1_TIME *s, time_t *t);
6409 int X509_cmp_current_time(const ASN1_TIME *s);
6410 ASN1_TIME * X509_time_adj(ASN1_TIME *s, long adj, time_t *t);
6411 ASN1_TIME * X509_time_adj_ex(ASN1_TIME *s,
6412     int offset_day, long offset_sec, time_t *t);
6413 ASN1_TIME * X509_gmtime_adj(ASN1_TIME *s, long adj);
6414 const char * X509_get_default_cert_area(void );
6415 const char * X509_get_default_cert_dir(void );
6416 const char * X509_get_default_cert_file(void );
6417 const char * X509_get_default_cert_dir_env(void );
6418 const char * X509_get_default_cert_file_env(void );
6419 const char * X509_get_default_private_dir(void );
6420 X509_REQ * X509_to_X509_REQ(X509 *x, EVP_PKEY *pkey, const EVP_MD *md);
6421 X509 * X509_REQ_to_X509(X509_REQ *r, int days,EVP_PKEY *pkey);
6422 X509_ALGOR *X509_ALGOR_new(void); void X509_ALGOR_free(X509_ALGOR *a); X509_ALGOR *d2i_X509_ALGOR(X509_ALGOR **a, const unsigned char **in, long len); int i2d_X509_ALGOR(X509_ALGOR *a, unsigned char **out); extern const ASN1_ITEM X509_ALGOR_it;
6423 X509_ALGORS *d2i_X509_ALGORS(X509_ALGORS **a, const unsigned char **in, long len); int i2d_X509_ALGORS(X509_ALGORS *a, unsigned char **out); extern const ASN1_ITEM X509_ALGORS_it;
6424 X509_VAL *X509_VAL_new(void); void X509_VAL_free(X509_VAL *a); X509_VAL *d2i_X509_VAL(X509_VAL **a, const unsigned char **in, long len); int i2d_X509_VAL(X509_VAL *a, unsigned char **out); extern const ASN1_ITEM X509_VAL_it;
6425 X509_PUBKEY *X509_PUBKEY_new(void); void X509_PUBKEY_free(X509_PUBKEY *a); X509_PUBKEY *d2i_X509_PUBKEY(X509_PUBKEY **a, const unsigned char **in, long len); int i2d_X509_PUBKEY(X509_PUBKEY *a, unsigned char **out); extern const ASN1_ITEM X509_PUBKEY_it;
6426 int X509_PUBKEY_set(X509_PUBKEY **x, EVP_PKEY *pkey);
6427 EVP_PKEY * X509_PUBKEY_get(X509_PUBKEY *key);
6428 int X509_get_pubkey_parameters(EVP_PKEY *pkey,
6429         struct stack_st_X509 *chain);
6430 int i2d_PUBKEY(EVP_PKEY *a,unsigned char **pp);
6431 EVP_PKEY * d2i_PUBKEY(EVP_PKEY **a,const unsigned char **pp,
6432    long length);
6433 int i2d_RSA_PUBKEY(RSA *a,unsigned char **pp);
6434 RSA * d2i_RSA_PUBKEY(RSA **a,const unsigned char **pp,
6435    long length);
6436 int i2d_DSA_PUBKEY(DSA *a,unsigned char **pp);
6437 DSA * d2i_DSA_PUBKEY(DSA **a,const unsigned char **pp,
6438    long length);
6439 int i2d_EC_PUBKEY(EC_KEY *a, unsigned char **pp);
6440 EC_KEY *d2i_EC_PUBKEY(EC_KEY **a, const unsigned char **pp,
6441    long length);
6442 X509_SIG *X509_SIG_new(void); void X509_SIG_free(X509_SIG *a); X509_SIG *d2i_X509_SIG(X509_SIG **a, const unsigned char **in, long len); int i2d_X509_SIG(X509_SIG *a, unsigned char **out); extern const ASN1_ITEM X509_SIG_it;
6443 X509_REQ_INFO *X509_REQ_INFO_new(void); void X509_REQ_INFO_free(X509_REQ_INFO *a); X509_REQ_INFO *d2i_X509_REQ_INFO(X509_REQ_INFO **a, const unsigned char **in, long len); int i2d_X509_REQ_INFO(X509_REQ_INFO *a, unsigned char **out); extern const ASN1_ITEM X509_REQ_INFO_it;
6444 X509_REQ *X509_REQ_new(void); void X509_REQ_free(X509_REQ *a); X509_REQ *d2i_X509_REQ(X509_REQ **a, const unsigned char **in, long len); int i2d_X509_REQ(X509_REQ *a, unsigned char **out); extern const ASN1_ITEM X509_REQ_it;
6445 X509_ATTRIBUTE *X509_ATTRIBUTE_new(void); void X509_ATTRIBUTE_free(X509_ATTRIBUTE *a); X509_ATTRIBUTE *d2i_X509_ATTRIBUTE(X509_ATTRIBUTE **a, const unsigned char **in, long len); int i2d_X509_ATTRIBUTE(X509_ATTRIBUTE *a, unsigned char **out); extern const ASN1_ITEM X509_ATTRIBUTE_it;
6446 X509_ATTRIBUTE *X509_ATTRIBUTE_create(int nid, int atrtype, void *value);
6447 X509_EXTENSION *X509_EXTENSION_new(void); void X509_EXTENSION_free(X509_EXTENSION *a); X509_EXTENSION *d2i_X509_EXTENSION(X509_EXTENSION **a, const unsigned char **in, long len); int i2d_X509_EXTENSION(X509_EXTENSION *a, unsigned char **out); extern const ASN1_ITEM X509_EXTENSION_it;
6448 X509_EXTENSIONS *d2i_X509_EXTENSIONS(X509_EXTENSIONS **a, const unsigned char **in, long len); int i2d_X509_EXTENSIONS(X509_EXTENSIONS *a, unsigned char **out); extern const ASN1_ITEM X509_EXTENSIONS_it;
6449 X509_NAME_ENTRY *X509_NAME_ENTRY_new(void); void X509_NAME_ENTRY_free(X509_NAME_ENTRY *a); X509_NAME_ENTRY *d2i_X509_NAME_ENTRY(X509_NAME_ENTRY **a, const unsigned char **in, long len); int i2d_X509_NAME_ENTRY(X509_NAME_ENTRY *a, unsigned char **out); extern const ASN1_ITEM X509_NAME_ENTRY_it;
6450 X509_NAME *X509_NAME_new(void); void X509_NAME_free(X509_NAME *a); X509_NAME *d2i_X509_NAME(X509_NAME **a, const unsigned char **in, long len); int i2d_X509_NAME(X509_NAME *a, unsigned char **out); extern const ASN1_ITEM X509_NAME_it;
6451 int X509_NAME_set(X509_NAME **xn, X509_NAME *name);
6452 X509_CINF *X509_CINF_new(void); void X509_CINF_free(X509_CINF *a); X509_CINF *d2i_X509_CINF(X509_CINF **a, const unsigned char **in, long len); int i2d_X509_CINF(X509_CINF *a, unsigned char **out); extern const ASN1_ITEM X509_CINF_it;
6453 X509 *X509_new(void); void X509_free(X509 *a); X509 *d2i_X509(X509 **a, const unsigned char **in, long len); int i2d_X509(X509 *a, unsigned char **out); extern const ASN1_ITEM X509_it;
6454 X509_CERT_AUX *X509_CERT_AUX_new(void); void X509_CERT_AUX_free(X509_CERT_AUX *a); X509_CERT_AUX *d2i_X509_CERT_AUX(X509_CERT_AUX **a, const unsigned char **in, long len); int i2d_X509_CERT_AUX(X509_CERT_AUX *a, unsigned char **out); extern const ASN1_ITEM X509_CERT_AUX_it;
6455 X509_CERT_PAIR *X509_CERT_PAIR_new(void); void X509_CERT_PAIR_free(X509_CERT_PAIR *a); X509_CERT_PAIR *d2i_X509_CERT_PAIR(X509_CERT_PAIR **a, const unsigned char **in, long len); int i2d_X509_CERT_PAIR(X509_CERT_PAIR *a, unsigned char **out); extern const ASN1_ITEM X509_CERT_PAIR_it;
6456 int X509_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,
6457       CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func);
6458 int X509_set_ex_data(X509 *r, int idx, void *arg);
6459 void *X509_get_ex_data(X509 *r, int idx);
6460 int i2d_X509_AUX(X509 *a,unsigned char **pp);
6461 X509 * d2i_X509_AUX(X509 **a,const unsigned char **pp,long length);
6462 int X509_alias_set1(X509 *x, unsigned char *name, int len);
6463 int X509_keyid_set1(X509 *x, unsigned char *id, int len);
6464 unsigned char * X509_alias_get0(X509 *x, int *len);
6465 unsigned char * X509_keyid_get0(X509 *x, int *len);
6466 int (*X509_TRUST_set_default(int (*trust)(int , X509 *, int)))(int, X509 *, int);
6467 int X509_TRUST_set(int *t, int trust);
6468 int X509_add1_trust_object(X509 *x, ASN1_OBJECT *obj);
6469 int X509_add1_reject_object(X509 *x, ASN1_OBJECT *obj);
6470 void X509_trust_clear(X509 *x);
6471 void X509_reject_clear(X509 *x);
6472 X509_REVOKED *X509_REVOKED_new(void); void X509_REVOKED_free(X509_REVOKED *a); X509_REVOKED *d2i_X509_REVOKED(X509_REVOKED **a, const unsigned char **in, long len); int i2d_X509_REVOKED(X509_REVOKED *a, unsigned char **out); extern const ASN1_ITEM X509_REVOKED_it;
6473 X509_CRL_INFO *X509_CRL_INFO_new(void); void X509_CRL_INFO_free(X509_CRL_INFO *a); X509_CRL_INFO *d2i_X509_CRL_INFO(X509_CRL_INFO **a, const unsigned char **in, long len); int i2d_X509_CRL_INFO(X509_CRL_INFO *a, unsigned char **out); extern const ASN1_ITEM X509_CRL_INFO_it;
6474 X509_CRL *X509_CRL_new(void); void X509_CRL_free(X509_CRL *a); X509_CRL *d2i_X509_CRL(X509_CRL **a, const unsigned char **in, long len); int i2d_X509_CRL(X509_CRL *a, unsigned char **out); extern const ASN1_ITEM X509_CRL_it;
6475 int X509_CRL_add0_revoked(X509_CRL *crl, X509_REVOKED *rev);
6476 int X509_CRL_get0_by_serial(X509_CRL *crl,
6477   X509_REVOKED **ret, ASN1_INTEGER *serial);
6478 int X509_CRL_get0_by_cert(X509_CRL *crl, X509_REVOKED **ret, X509 *x);
6479 X509_PKEY * X509_PKEY_new(void );
6480 void X509_PKEY_free(X509_PKEY *a);
6481 int i2d_X509_PKEY(X509_PKEY *a,unsigned char **pp);
6482 X509_PKEY * d2i_X509_PKEY(X509_PKEY **a,const unsigned char **pp,long length);
6483 NETSCAPE_SPKI *NETSCAPE_SPKI_new(void); void NETSCAPE_SPKI_free(NETSCAPE_SPKI *a); NETSCAPE_SPKI *d2i_NETSCAPE_SPKI(NETSCAPE_SPKI **a, const unsigned char **in, long len); int i2d_NETSCAPE_SPKI(NETSCAPE_SPKI *a, unsigned char **out); extern const ASN1_ITEM NETSCAPE_SPKI_it;
6484 NETSCAPE_SPKAC *NETSCAPE_SPKAC_new(void); void NETSCAPE_SPKAC_free(NETSCAPE_SPKAC *a); NETSCAPE_SPKAC *d2i_NETSCAPE_SPKAC(NETSCAPE_SPKAC **a, const unsigned char **in, long len); int i2d_NETSCAPE_SPKAC(NETSCAPE_SPKAC *a, unsigned char **out); extern const ASN1_ITEM NETSCAPE_SPKAC_it;
6485 NETSCAPE_CERT_SEQUENCE *NETSCAPE_CERT_SEQUENCE_new(void); void NETSCAPE_CERT_SEQUENCE_free(NETSCAPE_CERT_SEQUENCE *a); NETSCAPE_CERT_SEQUENCE *d2i_NETSCAPE_CERT_SEQUENCE(NETSCAPE_CERT_SEQUENCE **a, const unsigned char **in, long len); int i2d_NETSCAPE_CERT_SEQUENCE(NETSCAPE_CERT_SEQUENCE *a, unsigned char **out); extern const ASN1_ITEM NETSCAPE_CERT_SEQUENCE_it;
6486 X509_INFO * X509_INFO_new(void);
6487 void X509_INFO_free(X509_INFO *a);
6488 char * X509_NAME_oneline(X509_NAME *a,char *buf,int size);
6489 int ASN1_verify(i2d_of_void *i2d, X509_ALGOR *algor1,
6490   ASN1_BIT_STRING *signature,char *data,EVP_PKEY *pkey);
6491 int ASN1_digest(i2d_of_void *i2d,const EVP_MD *type,char *data,
6492   unsigned char *md,unsigned int *len);
6493 int ASN1_sign(i2d_of_void *i2d, X509_ALGOR *algor1,
6494        X509_ALGOR *algor2, ASN1_BIT_STRING *signature,
6495        char *data,EVP_PKEY *pkey, const EVP_MD *type);
6496 int ASN1_item_digest(const ASN1_ITEM *it,const EVP_MD *type,void *data,
6497  unsigned char *md,unsigned int *len);
6498 int ASN1_item_verify(const ASN1_ITEM *it, X509_ALGOR *algor1,
6499  ASN1_BIT_STRING *signature,void *data,EVP_PKEY *pkey);
6500 int ASN1_item_sign(const ASN1_ITEM *it, X509_ALGOR *algor1, X509_ALGOR *algor2,
6501  ASN1_BIT_STRING *signature,
6502  void *data, EVP_PKEY *pkey, const EVP_MD *type);
6503 int ASN1_item_sign_ctx(const ASN1_ITEM *it,
6504   X509_ALGOR *algor1, X509_ALGOR *algor2,
6505        ASN1_BIT_STRING *signature, void *asn, EVP_MD_CTX *ctx);
6506 int X509_set_version(X509 *x,long version);
6507 int X509_set_serialNumber(X509 *x, ASN1_INTEGER *serial);
6508 ASN1_INTEGER * X509_get_serialNumber(X509 *x);
6509 int X509_set_issuer_name(X509 *x, X509_NAME *name);
6510 X509_NAME * X509_get_issuer_name(X509 *a);
6511 int X509_set_subject_name(X509 *x, X509_NAME *name);
6512 X509_NAME * X509_get_subject_name(X509 *a);
6513 int X509_set_notBefore(X509 *x, const ASN1_TIME *tm);
6514 int X509_set_notAfter(X509 *x, const ASN1_TIME *tm);
6515 int X509_set_pubkey(X509 *x, EVP_PKEY *pkey);
6516 EVP_PKEY * X509_get_pubkey(X509 *x);
6517 ASN1_BIT_STRING * X509_get0_pubkey_bitstr(const X509 *x);
6518 int X509_certificate_type(X509 *x,EVP_PKEY *pubkey );
6519 int X509_REQ_set_version(X509_REQ *x,long version);
6520 int X509_REQ_set_subject_name(X509_REQ *req,X509_NAME *name);
6521 int X509_REQ_set_pubkey(X509_REQ *x, EVP_PKEY *pkey);
6522 EVP_PKEY * X509_REQ_get_pubkey(X509_REQ *req);
6523 int X509_REQ_extension_nid(int nid);
6524 int * X509_REQ_get_extension_nids(void);
6525 void X509_REQ_set_extension_nids(int *nids);
6526 struct stack_st_X509_EXTENSION *X509_REQ_get_extensions(X509_REQ *req);
6527 int X509_REQ_add_extensions_nid(X509_REQ *req, struct stack_st_X509_EXTENSION *exts,
6528     int nid);
6529 int X509_REQ_add_extensions(X509_REQ *req, struct stack_st_X509_EXTENSION *exts);
6530 int X509_REQ_get_attr_count(const X509_REQ *req);
6531 int X509_REQ_get_attr_by_NID(const X509_REQ *req, int nid,
6532      int lastpos);
6533 int X509_REQ_get_attr_by_OBJ(const X509_REQ *req, ASN1_OBJECT *obj,
6534      int lastpos);
6535 X509_ATTRIBUTE *X509_REQ_get_attr(const X509_REQ *req, int loc);
6536 X509_ATTRIBUTE *X509_REQ_delete_attr(X509_REQ *req, int loc);
6537 int X509_REQ_add1_attr(X509_REQ *req, X509_ATTRIBUTE *attr);
6538 int X509_REQ_add1_attr_by_OBJ(X509_REQ *req,
6539    const ASN1_OBJECT *obj, int type,
6540    const unsigned char *bytes, int len);
6541 int X509_REQ_add1_attr_by_NID(X509_REQ *req,
6542    int nid, int type,
6543    const unsigned char *bytes, int len);
6544 int X509_REQ_add1_attr_by_txt(X509_REQ *req,
6545    const char *attrname, int type,
6546    const unsigned char *bytes, int len);
6547 int X509_CRL_set_version(X509_CRL *x, long version);
6548 int X509_CRL_set_issuer_name(X509_CRL *x, X509_NAME *name);
6549 int X509_CRL_set_lastUpdate(X509_CRL *x, const ASN1_TIME *tm);
6550 int X509_CRL_set_nextUpdate(X509_CRL *x, const ASN1_TIME *tm);
6551 int X509_CRL_sort(X509_CRL *crl);
6552 int X509_REVOKED_set_serialNumber(X509_REVOKED *x, ASN1_INTEGER *serial);
6553 int X509_REVOKED_set_revocationDate(X509_REVOKED *r, ASN1_TIME *tm);
6554 int X509_REQ_check_private_key(X509_REQ *x509,EVP_PKEY *pkey);
6555 int X509_check_private_key(X509 *x509,EVP_PKEY *pkey);
6556 int X509_issuer_and_serial_cmp(const X509 *a, const X509 *b);
6557 unsigned long X509_issuer_and_serial_hash(X509 *a);
6558 int X509_issuer_name_cmp(const X509 *a, const X509 *b);
6559 unsigned long X509_issuer_name_hash(X509 *a);
6560 int X509_subject_name_cmp(const X509 *a, const X509 *b);
6561 unsigned long X509_subject_name_hash(X509 *x);
6562 unsigned long X509_issuer_name_hash_old(X509 *a);
6563 unsigned long X509_subject_name_hash_old(X509 *x);
6564 int X509_cmp(const X509 *a, const X509 *b);
6565 int X509_NAME_cmp(const X509_NAME *a, const X509_NAME *b);
6566 unsigned long X509_NAME_hash(X509_NAME *x);
6567 unsigned long X509_NAME_hash_old(X509_NAME *x);
6568 int X509_CRL_cmp(const X509_CRL *a, const X509_CRL *b);
6569 int X509_CRL_match(const X509_CRL *a, const X509_CRL *b);
6570 int X509_print_ex_fp(FILE *bp,X509 *x, unsigned long nmflag, unsigned long cflag);
6571 int X509_print_fp(FILE *bp,X509 *x);
6572 int X509_CRL_print_fp(FILE *bp,X509_CRL *x);
6573 int X509_REQ_print_fp(FILE *bp,X509_REQ *req);
6574 int X509_NAME_print_ex_fp(FILE *fp, X509_NAME *nm, int indent, unsigned long flags);
6575 int X509_NAME_print(BIO *bp, X509_NAME *name, int obase);
6576 int X509_NAME_print_ex(BIO *out, X509_NAME *nm, int indent, unsigned long flags);
6577 int X509_print_ex(BIO *bp,X509 *x, unsigned long nmflag, unsigned long cflag);
6578 int X509_print(BIO *bp,X509 *x);
6579 int X509_ocspid_print(BIO *bp,X509 *x);
6580 int X509_CERT_AUX_print(BIO *bp,X509_CERT_AUX *x, int indent);
6581 int X509_CRL_print(BIO *bp,X509_CRL *x);
6582 int X509_REQ_print_ex(BIO *bp, X509_REQ *x, unsigned long nmflag, unsigned long cflag);
6583 int X509_REQ_print(BIO *bp,X509_REQ *req);
6584 int X509_NAME_entry_count(X509_NAME *name);
6585 int X509_NAME_get_text_by_NID(X509_NAME *name, int nid,
6586    char *buf,int len);
6587 int X509_NAME_get_text_by_OBJ(X509_NAME *name, ASN1_OBJECT *obj,
6588    char *buf,int len);
6589 int X509_NAME_get_index_by_NID(X509_NAME *name,int nid,int lastpos);
6590 int X509_NAME_get_index_by_OBJ(X509_NAME *name,ASN1_OBJECT *obj,
6591    int lastpos);
6592 X509_NAME_ENTRY *X509_NAME_get_entry(X509_NAME *name, int loc);
6593 X509_NAME_ENTRY *X509_NAME_delete_entry(X509_NAME *name, int loc);
6594 int X509_NAME_add_entry(X509_NAME *name,X509_NAME_ENTRY *ne,
6595    int loc, int set);
6596 int X509_NAME_add_entry_by_OBJ(X509_NAME *name, ASN1_OBJECT *obj, int type,
6597    unsigned char *bytes, int len, int loc, int set);
6598 int X509_NAME_add_entry_by_NID(X509_NAME *name, int nid, int type,
6599    unsigned char *bytes, int len, int loc, int set);
6600 X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_txt(X509_NAME_ENTRY **ne,
6601   const char *field, int type, const unsigned char *bytes, int len);
6602 X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_NID(X509_NAME_ENTRY **ne, int nid,
6603    int type,unsigned char *bytes, int len);
6604 int X509_NAME_add_entry_by_txt(X509_NAME *name, const char *field, int type,
6605    const unsigned char *bytes, int len, int loc, int set);
6606 X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_OBJ(X509_NAME_ENTRY **ne,
6607    ASN1_OBJECT *obj, int type,const unsigned char *bytes,
6608    int len);
6609 int X509_NAME_ENTRY_set_object(X509_NAME_ENTRY *ne,
6610    ASN1_OBJECT *obj);
6611 int X509_NAME_ENTRY_set_data(X509_NAME_ENTRY *ne, int type,
6612    const unsigned char *bytes, int len);
6613 ASN1_OBJECT * X509_NAME_ENTRY_get_object(X509_NAME_ENTRY *ne);
6614 ASN1_STRING * X509_NAME_ENTRY_get_data(X509_NAME_ENTRY *ne);
6615 int X509v3_get_ext_count(const struct stack_st_X509_EXTENSION *x);
6616 int X509v3_get_ext_by_NID(const struct stack_st_X509_EXTENSION *x,
6617           int nid, int lastpos);
6618 int X509v3_get_ext_by_OBJ(const struct stack_st_X509_EXTENSION *x,
6619           ASN1_OBJECT *obj,int lastpos);
6620 int X509v3_get_ext_by_critical(const struct stack_st_X509_EXTENSION *x,
6621         int crit, int lastpos);
6622 X509_EXTENSION *X509v3_get_ext(const struct stack_st_X509_EXTENSION *x, int loc);
6623 X509_EXTENSION *X509v3_delete_ext(struct stack_st_X509_EXTENSION *x, int loc);
6624 struct stack_st_X509_EXTENSION *X509v3_add_ext(struct stack_st_X509_EXTENSION **x,
6625       X509_EXTENSION *ex, int loc);
6626 int X509_get_ext_count(X509 *x);
6627 int X509_get_ext_by_NID(X509 *x, int nid, int lastpos);
6628 int X509_get_ext_by_OBJ(X509 *x,ASN1_OBJECT *obj,int lastpos);
6629 int X509_get_ext_by_critical(X509 *x, int crit, int lastpos);
6630 X509_EXTENSION *X509_get_ext(X509 *x, int loc);
6631 X509_EXTENSION *X509_delete_ext(X509 *x, int loc);
6632 int X509_add_ext(X509 *x, X509_EXTENSION *ex, int loc);
6633 void * X509_get_ext_d2i(X509 *x, int nid, int *crit, int *idx);
6634 int X509_add1_ext_i2d(X509 *x, int nid, void *value, int crit,
6635        unsigned long flags);
6636 int X509_CRL_get_ext_count(X509_CRL *x);
6637 int X509_CRL_get_ext_by_NID(X509_CRL *x, int nid, int lastpos);
6638 int X509_CRL_get_ext_by_OBJ(X509_CRL *x,ASN1_OBJECT *obj,int lastpos);
6639 int X509_CRL_get_ext_by_critical(X509_CRL *x, int crit, int lastpos);
6640 X509_EXTENSION *X509_CRL_get_ext(X509_CRL *x, int loc);
6641 X509_EXTENSION *X509_CRL_delete_ext(X509_CRL *x, int loc);
6642 int X509_CRL_add_ext(X509_CRL *x, X509_EXTENSION *ex, int loc);
6643 void * X509_CRL_get_ext_d2i(X509_CRL *x, int nid, int *crit, int *idx);
6644 int X509_CRL_add1_ext_i2d(X509_CRL *x, int nid, void *value, int crit,
6645        unsigned long flags);
6646 int X509_REVOKED_get_ext_count(X509_REVOKED *x);
6647 int X509_REVOKED_get_ext_by_NID(X509_REVOKED *x, int nid, int lastpos);
6648 int X509_REVOKED_get_ext_by_OBJ(X509_REVOKED *x,ASN1_OBJECT *obj,int lastpos);
6649 int X509_REVOKED_get_ext_by_critical(X509_REVOKED *x, int crit, int lastpos);
6650 X509_EXTENSION *X509_REVOKED_get_ext(X509_REVOKED *x, int loc);
6651 X509_EXTENSION *X509_REVOKED_delete_ext(X509_REVOKED *x, int loc);
6652 int X509_REVOKED_add_ext(X509_REVOKED *x, X509_EXTENSION *ex, int loc);
6653 void * X509_REVOKED_get_ext_d2i(X509_REVOKED *x, int nid, int *crit, int *idx);
6654 int X509_REVOKED_add1_ext_i2d(X509_REVOKED *x, int nid, void *value, int crit,
6655        unsigned long flags);
6656 X509_EXTENSION *X509_EXTENSION_create_by_NID(X509_EXTENSION **ex,
6657    int nid, int crit, ASN1_OCTET_STRING *data);
6658 X509_EXTENSION *X509_EXTENSION_create_by_OBJ(X509_EXTENSION **ex,
6659    ASN1_OBJECT *obj,int crit,ASN1_OCTET_STRING *data);
6660 int X509_EXTENSION_set_object(X509_EXTENSION *ex,ASN1_OBJECT *obj);
6661 int X509_EXTENSION_set_critical(X509_EXTENSION *ex, int crit);
6662 int X509_EXTENSION_set_data(X509_EXTENSION *ex,
6663    ASN1_OCTET_STRING *data);
6664 ASN1_OBJECT * X509_EXTENSION_get_object(X509_EXTENSION *ex);
6665 ASN1_OCTET_STRING *X509_EXTENSION_get_data(X509_EXTENSION *ne);
6666 int X509_EXTENSION_get_critical(X509_EXTENSION *ex);
6667 int X509at_get_attr_count(const struct stack_st_X509_ATTRIBUTE *x);
6668 int X509at_get_attr_by_NID(const struct stack_st_X509_ATTRIBUTE *x, int nid,
6669      int lastpos);
6670 int X509at_get_attr_by_OBJ(const struct stack_st_X509_ATTRIBUTE *sk, ASN1_OBJECT *obj,
6671      int lastpos);
6672 X509_ATTRIBUTE *X509at_get_attr(const struct stack_st_X509_ATTRIBUTE *x, int loc);
6673 X509_ATTRIBUTE *X509at_delete_attr(struct stack_st_X509_ATTRIBUTE *x, int loc);
6674 struct stack_st_X509_ATTRIBUTE *X509at_add1_attr(struct stack_st_X509_ATTRIBUTE **x,
6675       X509_ATTRIBUTE *attr);
6676 struct stack_st_X509_ATTRIBUTE *X509at_add1_attr_by_OBJ(struct stack_st_X509_ATTRIBUTE **x,
6677    const ASN1_OBJECT *obj, int type,
6678    const unsigned char *bytes, int len);
6679 struct stack_st_X509_ATTRIBUTE *X509at_add1_attr_by_NID(struct stack_st_X509_ATTRIBUTE **x,
6680    int nid, int type,
6681    const unsigned char *bytes, int len);
6682 struct stack_st_X509_ATTRIBUTE *X509at_add1_attr_by_txt(struct stack_st_X509_ATTRIBUTE **x,
6683    const char *attrname, int type,
6684    const unsigned char *bytes, int len);
6685 void *X509at_get0_data_by_OBJ(struct stack_st_X509_ATTRIBUTE *x,
6686     ASN1_OBJECT *obj, int lastpos, int type);
6687 X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_NID(X509_ATTRIBUTE **attr, int nid,
6688       int atrtype, const void *data, int len);
6689 X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_OBJ(X509_ATTRIBUTE **attr,
6690       const ASN1_OBJECT *obj, int atrtype, const void *data, int len);
6691 X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_txt(X509_ATTRIBUTE **attr,
6692   const char *atrname, int type, const unsigned char *bytes, int len);
6693 int X509_ATTRIBUTE_set1_object(X509_ATTRIBUTE *attr, const ASN1_OBJECT *obj);
6694 int X509_ATTRIBUTE_set1_data(X509_ATTRIBUTE *attr, int attrtype, const void *data, int len);
6695 void *X509_ATTRIBUTE_get0_data(X509_ATTRIBUTE *attr, int idx,
6696      int atrtype, void *data);
6697 int X509_ATTRIBUTE_count(X509_ATTRIBUTE *attr);
6698 ASN1_OBJECT *X509_ATTRIBUTE_get0_object(X509_ATTRIBUTE *attr);
6699 ASN1_TYPE *X509_ATTRIBUTE_get0_type(X509_ATTRIBUTE *attr, int idx);
6700 int EVP_PKEY_get_attr_count(const EVP_PKEY *key);
6701 int EVP_PKEY_get_attr_by_NID(const EVP_PKEY *key, int nid,
6702      int lastpos);
6703 int EVP_PKEY_get_attr_by_OBJ(const EVP_PKEY *key, ASN1_OBJECT *obj,
6704      int lastpos);
6705 X509_ATTRIBUTE *EVP_PKEY_get_attr(const EVP_PKEY *key, int loc);
6706 X509_ATTRIBUTE *EVP_PKEY_delete_attr(EVP_PKEY *key, int loc);
6707 int EVP_PKEY_add1_attr(EVP_PKEY *key, X509_ATTRIBUTE *attr);
6708 int EVP_PKEY_add1_attr_by_OBJ(EVP_PKEY *key,
6709    const ASN1_OBJECT *obj, int type,
6710    const unsigned char *bytes, int len);
6711 int EVP_PKEY_add1_attr_by_NID(EVP_PKEY *key,
6712    int nid, int type,
6713    const unsigned char *bytes, int len);
6714 int EVP_PKEY_add1_attr_by_txt(EVP_PKEY *key,
6715    const char *attrname, int type,
6716    const unsigned char *bytes, int len);
6717 int X509_verify_cert(X509_STORE_CTX *ctx);
6718 X509 *X509_find_by_issuer_and_serial(struct stack_st_X509 *sk,X509_NAME *name,
6719          ASN1_INTEGER *serial);
6720 X509 *X509_find_by_subject(struct stack_st_X509 *sk,X509_NAME *name);
6721 PBEPARAM *PBEPARAM_new(void); void PBEPARAM_free(PBEPARAM *a); PBEPARAM *d2i_PBEPARAM(PBEPARAM **a, const unsigned char **in, long len); int i2d_PBEPARAM(PBEPARAM *a, unsigned char **out); extern const ASN1_ITEM PBEPARAM_it;
6722 PBE2PARAM *PBE2PARAM_new(void); void PBE2PARAM_free(PBE2PARAM *a); PBE2PARAM *d2i_PBE2PARAM(PBE2PARAM **a, const unsigned char **in, long len); int i2d_PBE2PARAM(PBE2PARAM *a, unsigned char **out); extern const ASN1_ITEM PBE2PARAM_it;
6723 PBKDF2PARAM *PBKDF2PARAM_new(void); void PBKDF2PARAM_free(PBKDF2PARAM *a); PBKDF2PARAM *d2i_PBKDF2PARAM(PBKDF2PARAM **a, const unsigned char **in, long len); int i2d_PBKDF2PARAM(PBKDF2PARAM *a, unsigned char **out); extern const ASN1_ITEM PBKDF2PARAM_it;
6724 int PKCS5_pbe_set0_algor(X509_ALGOR *algor, int alg, int iter,
6725     const unsigned char *salt, int saltlen);
6726 X509_ALGOR *PKCS5_pbe_set(int alg, int iter,
6727     const unsigned char *salt, int saltlen);
6728 X509_ALGOR *PKCS5_pbe2_set(const EVP_CIPHER *cipher, int iter,
6729       unsigned char *salt, int saltlen);
6730 X509_ALGOR *PKCS5_pbe2_set_iv(const EVP_CIPHER *cipher, int iter,
6731      unsigned char *salt, int saltlen,
6732      unsigned char *aiv, int prf_nid);
6733 X509_ALGOR *PKCS5_pbkdf2_set(int iter, unsigned char *salt, int saltlen,
6734     int prf_nid, int keylen);
6735 PKCS8_PRIV_KEY_INFO *PKCS8_PRIV_KEY_INFO_new(void); void PKCS8_PRIV_KEY_INFO_free(PKCS8_PRIV_KEY_INFO *a); PKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO(PKCS8_PRIV_KEY_INFO **a, const unsigned char **in, long len); int i2d_PKCS8_PRIV_KEY_INFO(PKCS8_PRIV_KEY_INFO *a, unsigned char **out); extern const ASN1_ITEM PKCS8_PRIV_KEY_INFO_it;
6736 EVP_PKEY *EVP_PKCS82PKEY(PKCS8_PRIV_KEY_INFO *p8);
6737 PKCS8_PRIV_KEY_INFO *EVP_PKEY2PKCS8(EVP_PKEY *pkey);
6738 PKCS8_PRIV_KEY_INFO *EVP_PKEY2PKCS8_broken(EVP_PKEY *pkey, int broken);
6739 PKCS8_PRIV_KEY_INFO *PKCS8_set_broken(PKCS8_PRIV_KEY_INFO *p8, int broken);
6740 int PKCS8_pkey_set0(PKCS8_PRIV_KEY_INFO *priv, ASN1_OBJECT *aobj,
6741    int version, int ptype, void *pval,
6742     unsigned char *penc, int penclen);
6743 int PKCS8_pkey_get0(ASN1_OBJECT **ppkalg,
6744   const unsigned char **pk, int *ppklen,
6745   X509_ALGOR **pa,
6746   PKCS8_PRIV_KEY_INFO *p8);
6747 int X509_PUBKEY_set0_param(X509_PUBKEY *pub, ASN1_OBJECT *aobj,
6748      int ptype, void *pval,
6749      unsigned char *penc, int penclen);
6750 int X509_PUBKEY_get0_param(ASN1_OBJECT **ppkalg,
6751   const unsigned char **pk, int *ppklen,
6752   X509_ALGOR **pa,
6753   X509_PUBKEY *pub);
6754 int X509_check_trust(X509 *x, int id, int flags);
6755 int X509_TRUST_get_count(void);
6756 X509_TRUST * X509_TRUST_get0(int idx);
6757 int X509_TRUST_get_by_id(int id);
6758 int X509_TRUST_add(int id, int flags, int (*ck)(X509_TRUST *, X509 *, int),
6759      char *name, int arg1, void *arg2);
6760 void X509_TRUST_cleanup(void);
6761 int X509_TRUST_get_flags(X509_TRUST *xp);
6762 char *X509_TRUST_get0_name(X509_TRUST *xp);
6763 int X509_TRUST_get_trust(X509_TRUST *xp);
6764 void ERR_load_X509_strings(void);
6765 typedef struct PEM_Encode_Seal_st
6766  {
6767  EVP_ENCODE_CTX encode;
6768  EVP_MD_CTX md;
6769  EVP_CIPHER_CTX cipher;
6770  } PEM_ENCODE_SEAL_CTX;
6771 typedef struct pem_recip_st
6772  {
6773  char *name;
6774  X509_NAME *dn;
6775  int cipher;
6776  int key_enc;
6777  } PEM_USER;
6778 typedef struct pem_ctx_st
6779  {
6780  int type;
6781  struct {
6782   int version;
6783   int mode;
6784   } proc_type;
6785  char *domain;
6786  struct {
6787   int cipher;
6788   } DEK_info;
6789  PEM_USER *originator;
6790  int num_recipient;
6791  PEM_USER **recipient;
6792  EVP_MD *md;
6793  int md_enc;
6794  int md_len;
6795  char *md_data;
6796  EVP_CIPHER *dec;
6797  int key_len;
6798  unsigned char *key;
6799  int data_enc;
6800  int data_len;
6801  unsigned char *data;
6802  } PEM_CTX;
6803 typedef int pem_password_cb(char *buf, int size, int rwflag, void *userdata);
6804 int PEM_get_EVP_CIPHER_INFO(char *header, EVP_CIPHER_INFO *cipher);
6805 int PEM_do_header (EVP_CIPHER_INFO *cipher, unsigned char *data,long *len,
6806  pem_password_cb *callback,void *u);
6807 int PEM_read_bio(BIO *bp, char **name, char **header,
6808   unsigned char **data,long *len);
6809 int PEM_write_bio(BIO *bp,const char *name,char *hdr,unsigned char *data,
6810   long len);
6811 int PEM_bytes_read_bio(unsigned char **pdata, long *plen, char **pnm, const char *name, BIO *bp,
6812       pem_password_cb *cb, void *u);
6813 void * PEM_ASN1_read_bio(d2i_of_void *d2i, const char *name, BIO *bp,
6814      void **x, pem_password_cb *cb, void *u);
6815 int PEM_ASN1_write_bio(i2d_of_void *i2d,const char *name,BIO *bp, void *x,
6816       const EVP_CIPHER *enc,unsigned char *kstr,int klen,
6817       pem_password_cb *cb, void *u);
6818 struct stack_st_X509_INFO * PEM_X509_INFO_read_bio(BIO *bp, struct stack_st_X509_INFO *sk, pem_password_cb *cb, void *u);
6819 int PEM_X509_INFO_write_bio(BIO *bp,X509_INFO *xi, EVP_CIPHER *enc,
6820   unsigned char *kstr, int klen, pem_password_cb *cd, void *u);
6821 int PEM_read(FILE *fp, char **name, char **header,
6822   unsigned char **data,long *len);
6823 int PEM_write(FILE *fp,char *name,char *hdr,unsigned char *data,long len);
6824 void * PEM_ASN1_read(d2i_of_void *d2i, const char *name, FILE *fp, void **x,
6825         pem_password_cb *cb, void *u);
6826 int PEM_ASN1_write(i2d_of_void *i2d,const char *name,FILE *fp,
6827          void *x,const EVP_CIPHER *enc,unsigned char *kstr,
6828          int klen,pem_password_cb *callback, void *u);
6829 struct stack_st_X509_INFO * PEM_X509_INFO_read(FILE *fp, struct stack_st_X509_INFO *sk,
6830  pem_password_cb *cb, void *u);
6831 int PEM_SealInit(PEM_ENCODE_SEAL_CTX *ctx, EVP_CIPHER *type,
6832   EVP_MD *md_type, unsigned char **ek, int *ekl,
6833   unsigned char *iv, EVP_PKEY **pubk, int npubk);
6834 void PEM_SealUpdate(PEM_ENCODE_SEAL_CTX *ctx, unsigned char *out, int *outl,
6835   unsigned char *in, int inl);
6836 int PEM_SealFinal(PEM_ENCODE_SEAL_CTX *ctx, unsigned char *sig,int *sigl,
6837   unsigned char *out, int *outl, EVP_PKEY *priv);
6838 void PEM_SignInit(EVP_MD_CTX *ctx, EVP_MD *type);
6839 void PEM_SignUpdate(EVP_MD_CTX *ctx,unsigned char *d,unsigned int cnt);
6840 int PEM_SignFinal(EVP_MD_CTX *ctx, unsigned char *sigret,
6841   unsigned int *siglen, EVP_PKEY *pkey);
6842 int PEM_def_callback(char *buf, int num, int w, void *key);
6843 void PEM_proc_type(char *buf, int type);
6844 void PEM_dek_info(char *buf, const char *type, int len, char *str);
6845 X509 *PEM_read_bio_X509(BIO *bp, X509 **x, pem_password_cb *cb, void *u); X509 *PEM_read_X509(FILE *fp, X509 **x, pem_password_cb *cb, void *u); int PEM_write_bio_X509(BIO *bp, X509 *x); int PEM_write_X509(FILE *fp, X509 *x);
6846 X509 *PEM_read_bio_X509_AUX(BIO *bp, X509 **x, pem_password_cb *cb, void *u); X509 *PEM_read_X509_AUX(FILE *fp, X509 **x, pem_password_cb *cb, void *u); int PEM_write_bio_X509_AUX(BIO *bp, X509 *x); int PEM_write_X509_AUX(FILE *fp, X509 *x);
6847 X509_CERT_PAIR *PEM_read_bio_X509_CERT_PAIR(BIO *bp, X509_CERT_PAIR **x, pem_password_cb *cb, void *u); X509_CERT_PAIR *PEM_read_X509_CERT_PAIR(FILE *fp, X509_CERT_PAIR **x, pem_password_cb *cb, void *u); int PEM_write_bio_X509_CERT_PAIR(BIO *bp, X509_CERT_PAIR *x); int PEM_write_X509_CERT_PAIR(FILE *fp, X509_CERT_PAIR *x);
6848 X509_REQ *PEM_read_bio_X509_REQ(BIO *bp, X509_REQ **x, pem_password_cb *cb, void *u); X509_REQ *PEM_read_X509_REQ(FILE *fp, X509_REQ **x, pem_password_cb *cb, void *u); int PEM_write_bio_X509_REQ(BIO *bp, X509_REQ *x); int PEM_write_X509_REQ(FILE *fp, X509_REQ *x);
6849 int PEM_write_bio_X509_REQ_NEW(BIO *bp, X509_REQ *x); int PEM_write_X509_REQ_NEW(FILE *fp, X509_REQ *x);
6850 X509_CRL *PEM_read_bio_X509_CRL(BIO *bp, X509_CRL **x, pem_password_cb *cb, void *u); X509_CRL *PEM_read_X509_CRL(FILE *fp, X509_CRL **x, pem_password_cb *cb, void *u); int PEM_write_bio_X509_CRL(BIO *bp, X509_CRL *x); int PEM_write_X509_CRL(FILE *fp, X509_CRL *x);
6851 PKCS7 *PEM_read_bio_PKCS7(BIO *bp, PKCS7 **x, pem_password_cb *cb, void *u); PKCS7 *PEM_read_PKCS7(FILE *fp, PKCS7 **x, pem_password_cb *cb, void *u); int PEM_write_bio_PKCS7(BIO *bp, PKCS7 *x); int PEM_write_PKCS7(FILE *fp, PKCS7 *x);
6852 NETSCAPE_CERT_SEQUENCE *PEM_read_bio_NETSCAPE_CERT_SEQUENCE(BIO *bp, NETSCAPE_CERT_SEQUENCE **x, pem_password_cb *cb, void *u); NETSCAPE_CERT_SEQUENCE *PEM_read_NETSCAPE_CERT_SEQUENCE(FILE *fp, NETSCAPE_CERT_SEQUENCE **x, pem_password_cb *cb, void *u); int PEM_write_bio_NETSCAPE_CERT_SEQUENCE(BIO *bp, NETSCAPE_CERT_SEQUENCE *x); int PEM_write_NETSCAPE_CERT_SEQUENCE(FILE *fp, NETSCAPE_CERT_SEQUENCE *x);
6853 X509_SIG *PEM_read_bio_PKCS8(BIO *bp, X509_SIG **x, pem_password_cb *cb, void *u); X509_SIG *PEM_read_PKCS8(FILE *fp, X509_SIG **x, pem_password_cb *cb, void *u); int PEM_write_bio_PKCS8(BIO *bp, X509_SIG *x); int PEM_write_PKCS8(FILE *fp, X509_SIG *x);
6854 PKCS8_PRIV_KEY_INFO *PEM_read_bio_PKCS8_PRIV_KEY_INFO(BIO *bp, PKCS8_PRIV_KEY_INFO **x, pem_password_cb *cb, void *u); PKCS8_PRIV_KEY_INFO *PEM_read_PKCS8_PRIV_KEY_INFO(FILE *fp, PKCS8_PRIV_KEY_INFO **x, pem_password_cb *cb, void *u); int PEM_write_bio_PKCS8_PRIV_KEY_INFO(BIO *bp, PKCS8_PRIV_KEY_INFO *x); int PEM_write_PKCS8_PRIV_KEY_INFO(FILE *fp, PKCS8_PRIV_KEY_INFO *x);
6855 RSA *PEM_read_bio_RSAPrivateKey(BIO *bp, RSA **x, pem_password_cb *cb, void *u); RSA *PEM_read_RSAPrivateKey(FILE *fp, RSA **x, pem_password_cb *cb, void *u); int PEM_write_bio_RSAPrivateKey(BIO *bp, RSA *x, const EVP_CIPHER *enc, unsigned char *kstr, int klen, pem_password_cb *cb, void *u); int PEM_write_RSAPrivateKey(FILE *fp, RSA *x, const EVP_CIPHER *enc, unsigned char *kstr, int klen, pem_password_cb *cb, void *u);
6856 RSA *PEM_read_bio_RSAPublicKey(BIO *bp, RSA **x, pem_password_cb *cb, void *u); RSA *PEM_read_RSAPublicKey(FILE *fp, RSA **x, pem_password_cb *cb, void *u); int PEM_write_bio_RSAPublicKey(BIO *bp, const RSA *x); int PEM_write_RSAPublicKey(FILE *fp, const RSA *x);
6857 RSA *PEM_read_bio_RSA_PUBKEY(BIO *bp, RSA **x, pem_password_cb *cb, void *u); RSA *PEM_read_RSA_PUBKEY(FILE *fp, RSA **x, pem_password_cb *cb, void *u); int PEM_write_bio_RSA_PUBKEY(BIO *bp, RSA *x); int PEM_write_RSA_PUBKEY(FILE *fp, RSA *x);
6858 DSA *PEM_read_bio_DSAPrivateKey(BIO *bp, DSA **x, pem_password_cb *cb, void *u); DSA *PEM_read_DSAPrivateKey(FILE *fp, DSA **x, pem_password_cb *cb, void *u); int PEM_write_bio_DSAPrivateKey(BIO *bp, DSA *x, const EVP_CIPHER *enc, unsigned char *kstr, int klen, pem_password_cb *cb, void *u); int PEM_write_DSAPrivateKey(FILE *fp, DSA *x, const EVP_CIPHER *enc, unsigned char *kstr, int klen, pem_password_cb *cb, void *u);
6859 DSA *PEM_read_bio_DSA_PUBKEY(BIO *bp, DSA **x, pem_password_cb *cb, void *u); DSA *PEM_read_DSA_PUBKEY(FILE *fp, DSA **x, pem_password_cb *cb, void *u); int PEM_write_bio_DSA_PUBKEY(BIO *bp, DSA *x); int PEM_write_DSA_PUBKEY(FILE *fp, DSA *x);
6860 DSA *PEM_read_bio_DSAparams(BIO *bp, DSA **x, pem_password_cb *cb, void *u); DSA *PEM_read_DSAparams(FILE *fp, DSA **x, pem_password_cb *cb, void *u); int PEM_write_bio_DSAparams(BIO *bp, const DSA *x); int PEM_write_DSAparams(FILE *fp, const DSA *x);
6861 EC_GROUP *PEM_read_bio_ECPKParameters(BIO *bp, EC_GROUP **x, pem_password_cb *cb, void *u); EC_GROUP *PEM_read_ECPKParameters(FILE *fp, EC_GROUP **x, pem_password_cb *cb, void *u); int PEM_write_bio_ECPKParameters(BIO *bp, const EC_GROUP *x); int PEM_write_ECPKParameters(FILE *fp, const EC_GROUP *x);
6862 EC_KEY *PEM_read_bio_ECPrivateKey(BIO *bp, EC_KEY **x, pem_password_cb *cb, void *u); EC_KEY *PEM_read_ECPrivateKey(FILE *fp, EC_KEY **x, pem_password_cb *cb, void *u); int PEM_write_bio_ECPrivateKey(BIO *bp, EC_KEY *x, const EVP_CIPHER *enc, unsigned char *kstr, int klen, pem_password_cb *cb, void *u); int PEM_write_ECPrivateKey(FILE *fp, EC_KEY *x, const EVP_CIPHER *enc, unsigned char *kstr, int klen, pem_password_cb *cb, void *u);
6863 EC_KEY *PEM_read_bio_EC_PUBKEY(BIO *bp, EC_KEY **x, pem_password_cb *cb, void *u); EC_KEY *PEM_read_EC_PUBKEY(FILE *fp, EC_KEY **x, pem_password_cb *cb, void *u); int PEM_write_bio_EC_PUBKEY(BIO *bp, EC_KEY *x); int PEM_write_EC_PUBKEY(FILE *fp, EC_KEY *x);
6864 DH *PEM_read_bio_DHparams(BIO *bp, DH **x, pem_password_cb *cb, void *u); DH *PEM_read_DHparams(FILE *fp, DH **x, pem_password_cb *cb, void *u); int PEM_write_bio_DHparams(BIO *bp, const DH *x); int PEM_write_DHparams(FILE *fp, const DH *x);
6865 EVP_PKEY *PEM_read_bio_PrivateKey(BIO *bp, EVP_PKEY **x, pem_password_cb *cb, void *u); EVP_PKEY *PEM_read_PrivateKey(FILE *fp, EVP_PKEY **x, pem_password_cb *cb, void *u); int PEM_write_bio_PrivateKey(BIO *bp, EVP_PKEY *x, const EVP_CIPHER *enc, unsigned char *kstr, int klen, pem_password_cb *cb, void *u); int PEM_write_PrivateKey(FILE *fp, EVP_PKEY *x, const EVP_CIPHER *enc, unsigned char *kstr, int klen, pem_password_cb *cb, void *u);
6866 EVP_PKEY *PEM_read_bio_PUBKEY(BIO *bp, EVP_PKEY **x, pem_password_cb *cb, void *u); EVP_PKEY *PEM_read_PUBKEY(FILE *fp, EVP_PKEY **x, pem_password_cb *cb, void *u); int PEM_write_bio_PUBKEY(BIO *bp, EVP_PKEY *x); int PEM_write_PUBKEY(FILE *fp, EVP_PKEY *x);
6867 int PEM_write_bio_PKCS8PrivateKey_nid(BIO *bp, EVP_PKEY *x, int nid,
6868       char *kstr, int klen,
6869       pem_password_cb *cb, void *u);
6870 int PEM_write_bio_PKCS8PrivateKey(BIO *, EVP_PKEY *, const EVP_CIPHER *,
6871                                   char *, int, pem_password_cb *, void *);
6872 int i2d_PKCS8PrivateKey_bio(BIO *bp, EVP_PKEY *x, const EVP_CIPHER *enc,
6873       char *kstr, int klen,
6874       pem_password_cb *cb, void *u);
6875 int i2d_PKCS8PrivateKey_nid_bio(BIO *bp, EVP_PKEY *x, int nid,
6876       char *kstr, int klen,
6877       pem_password_cb *cb, void *u);
6878 EVP_PKEY *d2i_PKCS8PrivateKey_bio(BIO *bp, EVP_PKEY **x, pem_password_cb *cb, void *u);
6879 int i2d_PKCS8PrivateKey_fp(FILE *fp, EVP_PKEY *x, const EVP_CIPHER *enc,
6880       char *kstr, int klen,
6881       pem_password_cb *cb, void *u);
6882 int i2d_PKCS8PrivateKey_nid_fp(FILE *fp, EVP_PKEY *x, int nid,
6883       char *kstr, int klen,
6884       pem_password_cb *cb, void *u);
6885 int PEM_write_PKCS8PrivateKey_nid(FILE *fp, EVP_PKEY *x, int nid,
6886       char *kstr, int klen,
6887       pem_password_cb *cb, void *u);
6888 EVP_PKEY *d2i_PKCS8PrivateKey_fp(FILE *fp, EVP_PKEY **x, pem_password_cb *cb, void *u);
6889 int PEM_write_PKCS8PrivateKey(FILE *fp,EVP_PKEY *x,const EVP_CIPHER *enc,
6890          char *kstr,int klen, pem_password_cb *cd, void *u);
6891 EVP_PKEY *PEM_read_bio_Parameters(BIO *bp, EVP_PKEY **x);
6892 int PEM_write_bio_Parameters(BIO *bp, EVP_PKEY *x);
6893 EVP_PKEY *b2i_PrivateKey(const unsigned char **in, long length);
6894 EVP_PKEY *b2i_PublicKey(const unsigned char **in, long length);
6895 EVP_PKEY *b2i_PrivateKey_bio(BIO *in);
6896 EVP_PKEY *b2i_PublicKey_bio(BIO *in);
6897 int i2b_PrivateKey_bio(BIO *out, EVP_PKEY *pk);
6898 int i2b_PublicKey_bio(BIO *out, EVP_PKEY *pk);
6899 EVP_PKEY *b2i_PVK_bio(BIO *in, pem_password_cb *cb, void *u);
6900 int i2b_PVK_bio(BIO *out, EVP_PKEY *pk, int enclevel,
6901   pem_password_cb *cb, void *u);
6902 void ERR_load_PEM_strings(void);
6903 int EVP_DigestFinal_ex(EVP_MD_CTX *, unsigned char *, unsigned int *);
6904 int EVP_MD_CTX_copy_ex(EVP_MD_CTX *, const EVP_MD_CTX *);
6905 int ssh_EVP_CipherInit(EVP_CIPHER_CTX *, const EVP_CIPHER *, unsigned char *,
6906     unsigned char *, int);
6907 int ssh_EVP_Cipher(EVP_CIPHER_CTX *, char *, char *, int);
6908 int ssh_EVP_CIPHER_CTX_cleanup(EVP_CIPHER_CTX *);
6909 void ssh_OpenSSL_add_all_algorithms(void);
6910 struct flock
6911   {
6912     short int l_type;
6913     short int l_whence;
6914     __off64_t l_start;
6915     __off64_t l_len;
6916     __pid_t l_pid;
6917   };
6918 struct flock64
6919   {
6920     short int l_type;
6921     short int l_whence;
6922     __off64_t l_start;
6923     __off64_t l_len;
6924     __pid_t l_pid;
6925   };
6926 enum __pid_type
6927   {
6928     F_OWNER_TID = 0,
6929     F_OWNER_PID,
6930     F_OWNER_PGRP,
6931     F_OWNER_GID = F_OWNER_PGRP
6932   };
6933 struct f_owner_ex
6934   {
6935     enum __pid_type type;
6936     __pid_t pid;
6937   };
6938 struct file_handle
6939 {
6940   unsigned int handle_bytes;
6941   int handle_type;
6942   unsigned char f_handle[0];
6943 };
6944 extern ssize_t readahead (int __fd, __off64_t __offset, size_t __count)
6945     __attribute__ ((__nothrow__ , __leaf__));
6946 extern int sync_file_range (int __fd, __off64_t __offset, __off64_t __count,
6947        unsigned int __flags);
6948 extern ssize_t vmsplice (int __fdout, const struct iovec *__iov,
6949     size_t __count, unsigned int __flags);
6950 extern ssize_t splice (int __fdin, __off64_t *__offin, int __fdout,
6951          __off64_t *__offout, size_t __len,
6952          unsigned int __flags);
6953 extern ssize_t tee (int __fdin, int __fdout, size_t __len,
6954       unsigned int __flags);
6955 extern int fallocate (int __fd, int __mode, __off64_t __offset, __off64_t __len) __asm__ ("" "fallocate64")
6956                      ;
6957 extern int fallocate64 (int __fd, int __mode, __off64_t __offset,
6958    __off64_t __len);
6959 extern int name_to_handle_at (int __dfd, const char *__name,
6960          struct file_handle *__handle, int *__mnt_id,
6961          int __flags) __attribute__ ((__nothrow__ , __leaf__));
6962 extern int open_by_handle_at (int __mountdirfd, struct file_handle *__handle,
6963          int __flags);
6964 extern int fcntl (int __fd, int __cmd, ...);
6965 extern int open (const char *__file, int __oflag, ...) __asm__ ("" "open64")
6966      __attribute__ ((__nonnull__ (1)));
6967 extern int open64 (const char *__file, int __oflag, ...) __attribute__ ((__nonnull__ (1)));
6968 extern int openat (int __fd, const char *__file, int __oflag, ...) __asm__ ("" "openat64")
6969                     __attribute__ ((__nonnull__ (2)));
6970 extern int openat64 (int __fd, const char *__file, int __oflag, ...)
6971      __attribute__ ((__nonnull__ (2)));
6972 extern int creat (const char *__file, mode_t __mode) __asm__ ("" "creat64")
6973                   __attribute__ ((__nonnull__ (1)));
6974 extern int creat64 (const char *__file, mode_t __mode) __attribute__ ((__nonnull__ (1)));
6975 extern int lockf (int __fd, int __cmd, __off64_t __len) __asm__ ("" "lockf64");
6976 extern int lockf64 (int __fd, int __cmd, off64_t __len);
6977 extern int posix_fadvise (int __fd, __off64_t __offset, __off64_t __len, int __advise) __asm__ ("" "posix_fadvise64") __attribute__ ((__nothrow__ , __leaf__))
6978                       ;
6979 extern int posix_fadvise64 (int __fd, off64_t __offset, off64_t __len,
6980        int __advise) __attribute__ ((__nothrow__ , __leaf__));
6981 extern int posix_fallocate (int __fd, __off64_t __offset, __off64_t __len) __asm__ ("" "posix_fallocate64")
6982                            ;
6983 extern int posix_fallocate64 (int __fd, off64_t __offset, off64_t __len);
6984 extern int __open_2 (const char *__path, int __oflag) __asm__ ("" "__open64_2")
6985                      __attribute__ ((__nonnull__ (1)));
6986 extern int __open_alias (const char *__path, int __oflag, ...) __asm__ ("" "open64")
6987                  __attribute__ ((__nonnull__ (1)));
6988 extern void __open_too_many_args (void) __attribute__((__error__ ("open can be called either with 2 or 3 arguments, not more")))
6989                                                                   ;
6990 extern void __open_missing_mode (void) __attribute__((__error__ ("open with O_CREAT in second argument needs 3 arguments")))
6991                                                                ;
6992 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__artificial__)) int
6993 open (const char *__path, int __oflag, ...)
6994 {
6995   if (__builtin_va_arg_pack_len () > 1)
6996     __open_too_many_args ();
6997   if (__builtin_constant_p (__oflag))
6998     {
6999       if ((__oflag & 00000400) != 0 && __builtin_va_arg_pack_len () < 1)
7000  {
7001    __open_missing_mode ();
7002    return __open_2 (__path, __oflag);
7003  }
7004       return __open_alias (__path, __oflag, __builtin_va_arg_pack ());
7005     }
7006   if (__builtin_va_arg_pack_len () < 1)
7007     return __open_2 (__path, __oflag);
7008   return __open_alias (__path, __oflag, __builtin_va_arg_pack ());
7009 }
7010 extern int __open64_2 (const char *__path, int __oflag) __attribute__ ((__nonnull__ (1)));
7011 extern int __open64_alias (const char *__path, int __oflag, ...) __asm__ ("" "open64")
7012                    __attribute__ ((__nonnull__ (1)));
7013 extern void __open64_too_many_args (void) __attribute__((__error__ ("open64 can be called either with 2 or 3 arguments, not more")))
7014                                                                     ;
7015 extern void __open64_missing_mode (void) __attribute__((__error__ ("open64 with O_CREAT in second argument needs 3 arguments")))
7016                                                                  ;
7017 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__artificial__)) int
7018 open64 (const char *__path, int __oflag, ...)
7019 {
7020   if (__builtin_va_arg_pack_len () > 1)
7021     __open64_too_many_args ();
7022   if (__builtin_constant_p (__oflag))
7023     {
7024       if ((__oflag & 00000400) != 0 && __builtin_va_arg_pack_len () < 1)
7025  {
7026    __open64_missing_mode ();
7027    return __open64_2 (__path, __oflag);
7028  }
7029       return __open64_alias (__path, __oflag, __builtin_va_arg_pack ());
7030     }
7031   if (__builtin_va_arg_pack_len () < 1)
7032     return __open64_2 (__path, __oflag);
7033   return __open64_alias (__path, __oflag, __builtin_va_arg_pack ());
7034 }
7035 extern int __openat_2 (int __fd, const char *__path, int __oflag) __asm__ ("" "__openat64_2")
7036      __attribute__ ((__nonnull__ (2)));
7037 extern int __openat_alias (int __fd, const char *__path, int __oflag, ...) __asm__ ("" "openat64")
7038      __attribute__ ((__nonnull__ (2)));
7039 extern void __openat_too_many_args (void) __attribute__((__error__ ("openat can be called either with 3 or 4 arguments, not more")))
7040                                                                     ;
7041 extern void __openat_missing_mode (void) __attribute__((__error__ ("openat with O_CREAT in third argument needs 4 arguments")))
7042                                                                 ;
7043 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__artificial__)) int
7044 openat (int __fd, const char *__path, int __oflag, ...)
7045 {
7046   if (__builtin_va_arg_pack_len () > 1)
7047     __openat_too_many_args ();
7048   if (__builtin_constant_p (__oflag))
7049     {
7050       if ((__oflag & 00000400) != 0 && __builtin_va_arg_pack_len () < 1)
7051  {
7052    __openat_missing_mode ();
7053    return __openat_2 (__fd, __path, __oflag);
7054  }
7055       return __openat_alias (__fd, __path, __oflag, __builtin_va_arg_pack ());
7056     }
7057   if (__builtin_va_arg_pack_len () < 1)
7058     return __openat_2 (__fd, __path, __oflag);
7059   return __openat_alias (__fd, __path, __oflag, __builtin_va_arg_pack ());
7060 }
7061 extern int __openat64_2 (int __fd, const char *__path, int __oflag)
7062      __attribute__ ((__nonnull__ (2)));
7063 extern int __openat64_alias (int __fd, const char *__path, int __oflag, ...) __asm__ ("" "openat64")
7064      __attribute__ ((__nonnull__ (2)));
7065 extern void __openat64_too_many_args (void) __attribute__((__error__ ("openat64 can be called either with 3 or 4 arguments, not more")))
7066                                                                       ;
7067 extern void __openat64_missing_mode (void) __attribute__((__error__ ("openat64 with O_CREAT in third argument needs 4 arguments")))
7068                                                                   ;
7069 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__artificial__)) int
7070 openat64 (int __fd, const char *__path, int __oflag, ...)
7071 {
7072   if (__builtin_va_arg_pack_len () > 1)
7073     __openat64_too_many_args ();
7074   if (__builtin_constant_p (__oflag))
7075     {
7076       if ((__oflag & 00000400) != 0 && __builtin_va_arg_pack_len () < 1)
7077  {
7078    __openat64_missing_mode ();
7079    return __openat64_2 (__fd, __path, __oflag);
7080  }
7081       return __openat64_alias (__fd, __path, __oflag, __builtin_va_arg_pack ());
7082     }
7083   if (__builtin_va_arg_pack_len () < 1)
7084     return __openat64_2 (__fd, __path, __oflag);
7085   return __openat64_alias (__fd, __path, __oflag, __builtin_va_arg_pack ());
7086 }
7087 extern void *memcpy (void *__restrict __dest, const void *__restrict __src,
7088        size_t __n) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
7089 extern void *memmove (void *__dest, const void *__src, size_t __n)
7090      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
7091 extern void *memccpy (void *__restrict __dest, const void *__restrict __src,
7092         int __c, size_t __n)
7093      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
7094 extern void *memset (void *__s, int __c, size_t __n) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
7095 extern int memcmp (const void *__s1, const void *__s2, size_t __n)
7096      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
7097 extern void *memchr (const void *__s, int __c, size_t __n)
7098       __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
7099 extern void *rawmemchr (const void *__s, int __c)
7100      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
7101 extern void *memrchr (const void *__s, int __c, size_t __n)
7102       __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
7103 extern char *strcpy (char *__restrict __dest, const char *__restrict __src)
7104      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
7105 extern char *strncpy (char *__restrict __dest,
7106         const char *__restrict __src, size_t __n)
7107      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
7108 extern char *strcat (char *__restrict __dest, const char *__restrict __src)
7109      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
7110 extern char *strncat (char *__restrict __dest, const char *__restrict __src,
7111         size_t __n) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
7112 extern int strcmp (const char *__s1, const char *__s2)
7113      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
7114 extern int strncmp (const char *__s1, const char *__s2, size_t __n)
7115      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
7116 extern int strcoll (const char *__s1, const char *__s2)
7117      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
7118 extern size_t strxfrm (char *__restrict __dest,
7119          const char *__restrict __src, size_t __n)
7120      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)));
7121 extern int strcoll_l (const char *__s1, const char *__s2, __locale_t __l)
7122      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2, 3)));
7123 extern size_t strxfrm_l (char *__dest, const char *__src, size_t __n,
7124     __locale_t __l) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2, 4)));
7125 extern char *strdup (const char *__s)
7126      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__malloc__)) __attribute__ ((__nonnull__ (1)));
7127 extern char *strndup (const char *__string, size_t __n)
7128      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__malloc__)) __attribute__ ((__nonnull__ (1)));
7129 extern char *strchr (const char *__s, int __c)
7130      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
7131 extern char *strrchr (const char *__s, int __c)
7132      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
7133 extern char *strchrnul (const char *__s, int __c)
7134      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
7135 extern size_t strcspn (const char *__s, const char *__reject)
7136      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
7137 extern size_t strspn (const char *__s, const char *__accept)
7138      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
7139 extern char *strpbrk (const char *__s, const char *__accept)
7140      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
7141 extern char *strstr (const char *__haystack, const char *__needle)
7142      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
7143 extern char *strtok (char *__restrict __s, const char *__restrict __delim)
7144      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)));
7145 extern char *__strtok_r (char *__restrict __s,
7146     const char *__restrict __delim,
7147     char **__restrict __save_ptr)
7148      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2, 3)));
7149 extern char *strtok_r (char *__restrict __s, const char *__restrict __delim,
7150          char **__restrict __save_ptr)
7151      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2, 3)));
7152 extern char *strcasestr (const char *__haystack, const char *__needle)
7153      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
7154 extern void *memmem (const void *__haystack, size_t __haystacklen,
7155        const void *__needle, size_t __needlelen)
7156      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 3)));
7157 extern void *__mempcpy (void *__restrict __dest,
7158    const void *__restrict __src, size_t __n)
7159      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
7160 extern void *mempcpy (void *__restrict __dest,
7161         const void *__restrict __src, size_t __n)
7162      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
7163 extern size_t strlen (const char *__s)
7164      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
7165 extern size_t strnlen (const char *__string, size_t __maxlen)
7166      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
7167 extern char *strerror (int __errnum) __attribute__ ((__nothrow__ , __leaf__));
7168 extern char *strerror_r (int __errnum, char *__buf, size_t __buflen)
7169      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2))) __attribute__ ((__warn_unused_result__));
7170 extern char *strerror_l (int __errnum, __locale_t __l) __attribute__ ((__nothrow__ , __leaf__));
7171 extern void __bzero (void *__s, size_t __n) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
7172 extern void bcopy (const void *__src, void *__dest, size_t __n)
7173      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
7174 extern void bzero (void *__s, size_t __n) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
7175 extern int bcmp (const void *__s1, const void *__s2, size_t __n)
7176      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
7177 extern char *index (const char *__s, int __c)
7178      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
7179 extern char *rindex (const char *__s, int __c)
7180      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
7181 extern int ffs (int __i) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
7182 extern int ffsl (long int __l) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
7183 __extension__ extern int ffsll (long long int __ll)
7184      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
7185 extern int strcasecmp (const char *__s1, const char *__s2)
7186      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
7187 extern int strncasecmp (const char *__s1, const char *__s2, size_t __n)
7188      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
7189 extern int strcasecmp_l (const char *__s1, const char *__s2,
7190     __locale_t __loc)
7191      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2, 3)));
7192 extern int strncasecmp_l (const char *__s1, const char *__s2,
7193      size_t __n, __locale_t __loc)
7194      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2, 4)));
7195 extern char *strsep (char **__restrict __stringp,
7196        const char *__restrict __delim)
7197      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
7198 extern char *strsignal (int __sig) __attribute__ ((__nothrow__ , __leaf__));
7199 extern char *__stpcpy (char *__restrict __dest, const char *__restrict __src)
7200      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
7201 extern char *stpcpy (char *__restrict __dest, const char *__restrict __src)
7202      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
7203 extern char *__stpncpy (char *__restrict __dest,
7204    const char *__restrict __src, size_t __n)
7205      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
7206 extern char *stpncpy (char *__restrict __dest,
7207         const char *__restrict __src, size_t __n)
7208      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
7209 extern int strverscmp (const char *__s1, const char *__s2)
7210      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
7211 extern char *strfry (char *__string) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
7212 extern void *memfrob (void *__s, size_t __n) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
7213 extern char *basename (const char *__filename) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
7214 typedef struct { unsigned char __arr[2]; } __attribute__ ((__packed__)) __STRING2_COPY_ARR2;
7215 typedef struct { unsigned char __arr[3]; } __attribute__ ((__packed__)) __STRING2_COPY_ARR3;
7216 typedef struct { unsigned char __arr[4]; } __attribute__ ((__packed__)) __STRING2_COPY_ARR4;
7217 typedef struct { unsigned char __arr[5]; } __attribute__ ((__packed__)) __STRING2_COPY_ARR5;
7218 typedef struct { unsigned char __arr[6]; } __attribute__ ((__packed__)) __STRING2_COPY_ARR6;
7219 typedef struct { unsigned char __arr[7]; } __attribute__ ((__packed__)) __STRING2_COPY_ARR7;
7220 typedef struct { unsigned char __arr[8]; } __attribute__ ((__packed__)) __STRING2_COPY_ARR8;
7221 extern void *__rawmemchr (const void *__s, int __c);
7222 extern __inline size_t __strcspn_c1 (const char *__s, int __reject);
7223 extern __inline size_t
7224 __strcspn_c1 (const char *__s, int __reject)
7225 {
7226   register size_t __result = 0;
7227   while (__s[__result] != '\0' && __s[__result] != __reject)
7228     ++__result;
7229   return __result;
7230 }
7231 extern __inline size_t __strcspn_c2 (const char *__s, int __reject1,
7232          int __reject2);
7233 extern __inline size_t
7234 __strcspn_c2 (const char *__s, int __reject1, int __reject2)
7235 {
7236   register size_t __result = 0;
7237   while (__s[__result] != '\0' && __s[__result] != __reject1
7238   && __s[__result] != __reject2)
7239     ++__result;
7240   return __result;
7241 }
7242 extern __inline size_t __strcspn_c3 (const char *__s, int __reject1,
7243          int __reject2, int __reject3);
7244 extern __inline size_t
7245 __strcspn_c3 (const char *__s, int __reject1, int __reject2,
7246        int __reject3)
7247 {
7248   register size_t __result = 0;
7249   while (__s[__result] != '\0' && __s[__result] != __reject1
7250   && __s[__result] != __reject2 && __s[__result] != __reject3)
7251     ++__result;
7252   return __result;
7253 }
7254 extern __inline size_t __strspn_c1 (const char *__s, int __accept);
7255 extern __inline size_t
7256 __strspn_c1 (const char *__s, int __accept)
7257 {
7258   register size_t __result = 0;
7259   while (__s[__result] == __accept)
7260     ++__result;
7261   return __result;
7262 }
7263 extern __inline size_t __strspn_c2 (const char *__s, int __accept1,
7264         int __accept2);
7265 extern __inline size_t
7266 __strspn_c2 (const char *__s, int __accept1, int __accept2)
7267 {
7268   register size_t __result = 0;
7269   while (__s[__result] == __accept1 || __s[__result] == __accept2)
7270     ++__result;
7271   return __result;
7272 }
7273 extern __inline size_t __strspn_c3 (const char *__s, int __accept1,
7274         int __accept2, int __accept3);
7275 extern __inline size_t
7276 __strspn_c3 (const char *__s, int __accept1, int __accept2, int __accept3)
7277 {
7278   register size_t __result = 0;
7279   while (__s[__result] == __accept1 || __s[__result] == __accept2
7280   || __s[__result] == __accept3)
7281     ++__result;
7282   return __result;
7283 }
7284 extern __inline char *__strpbrk_c2 (const char *__s, int __accept1,
7285         int __accept2);
7286 extern __inline char *
7287 __strpbrk_c2 (const char *__s, int __accept1, int __accept2)
7288 {
7289   while (*__s != '\0' && *__s != __accept1 && *__s != __accept2)
7290     ++__s;
7291   return *__s == '\0' ? ((void *)0) : (char *) (size_t) __s;
7292 }
7293 extern __inline char *__strpbrk_c3 (const char *__s, int __accept1,
7294         int __accept2, int __accept3);
7295 extern __inline char *
7296 __strpbrk_c3 (const char *__s, int __accept1, int __accept2, int __accept3)
7297 {
7298   while (*__s != '\0' && *__s != __accept1 && *__s != __accept2
7299   && *__s != __accept3)
7300     ++__s;
7301   return *__s == '\0' ? ((void *)0) : (char *) (size_t) __s;
7302 }
7303 extern __inline char *__strtok_r_1c (char *__s, char __sep, char **__nextp);
7304 extern __inline char *
7305 __strtok_r_1c (char *__s, char __sep, char **__nextp)
7306 {
7307   char *__result;
7308   if (__s == ((void *)0))
7309     __s = *__nextp;
7310   while (*__s == __sep)
7311     ++__s;
7312   __result = ((void *)0);
7313   if (*__s != '\0')
7314     {
7315       __result = __s++;
7316       while (*__s != '\0')
7317  if (*__s++ == __sep)
7318    {
7319      __s[-1] = '\0';
7320      break;
7321    }
7322     }
7323   *__nextp = __s;
7324   return __result;
7325 }
7326 extern char *__strsep_g (char **__stringp, const char *__delim);
7327 extern __inline char *__strsep_1c (char **__s, char __reject);
7328 extern __inline char *
7329 __strsep_1c (char **__s, char __reject)
7330 {
7331   register char *__retval = *__s;
7332   if (__retval != ((void *)0) && (*__s = (__extension__ (__builtin_constant_p (__reject) && !__builtin_constant_p (__retval) && (__reject) == '\0' ? (char *) __rawmemchr (__retval, __reject) : __builtin_strchr (__retval, __reject)))) != ((void *)0))
7333     *(*__s)++ = '\0';
7334   return __retval;
7335 }
7336 extern __inline char *__strsep_2c (char **__s, char __reject1, char __reject2);
7337 extern __inline char *
7338 __strsep_2c (char **__s, char __reject1, char __reject2)
7339 {
7340   register char *__retval = *__s;
7341   if (__retval != ((void *)0))
7342     {
7343       register char *__cp = __retval;
7344       while (1)
7345  {
7346    if (*__cp == '\0')
7347      {
7348        __cp = ((void *)0);
7349    break;
7350      }
7351    if (*__cp == __reject1 || *__cp == __reject2)
7352      {
7353        *__cp++ = '\0';
7354        break;
7355      }
7356    ++__cp;
7357  }
7358       *__s = __cp;
7359     }
7360   return __retval;
7361 }
7362 extern __inline char *__strsep_3c (char **__s, char __reject1, char __reject2,
7363        char __reject3);
7364 extern __inline char *
7365 __strsep_3c (char **__s, char __reject1, char __reject2, char __reject3)
7366 {
7367   register char *__retval = *__s;
7368   if (__retval != ((void *)0))
7369     {
7370       register char *__cp = __retval;
7371       while (1)
7372  {
7373    if (*__cp == '\0')
7374      {
7375        __cp = ((void *)0);
7376    break;
7377      }
7378    if (*__cp == __reject1 || *__cp == __reject2 || *__cp == __reject3)
7379      {
7380        *__cp++ = '\0';
7381        break;
7382      }
7383    ++__cp;
7384  }
7385       *__s = __cp;
7386     }
7387   return __retval;
7388 }
7389 extern char *__strdup (const char *__string) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__malloc__));
7390 extern char *__strndup (const char *__string, size_t __n)
7391      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__malloc__));
7392 extern void __warn_memset_zero_len (void) __attribute__((__warning__ ("memset used with constant zero length parameter; this could be due to transposed parameters")))
7393                                                                                                    ;
7394 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__artificial__)) void *
7395 __attribute__ ((__nothrow__ , __leaf__)) memcpy (void *__restrict __dest, const void *__restrict __src, size_t __len)
7396 {
7397   return __builtin___memcpy_chk (__dest, __src, __len, __builtin_object_size (__dest, 0));
7398 }
7399 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__artificial__)) void *
7400 __attribute__ ((__nothrow__ , __leaf__)) memmove (void *__dest, const void *__src, size_t __len)
7401 {
7402   return __builtin___memmove_chk (__dest, __src, __len, __builtin_object_size (__dest, 0));
7403 }
7404 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__artificial__)) void *
7405 __attribute__ ((__nothrow__ , __leaf__)) mempcpy (void *__restrict __dest, const void *__restrict __src, size_t __len)
7406 {
7407   return __builtin___mempcpy_chk (__dest, __src, __len, __builtin_object_size (__dest, 0));
7408 }
7409 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__artificial__)) void *
7410 __attribute__ ((__nothrow__ , __leaf__)) memset (void *__dest, int __ch, size_t __len)
7411 {
7412   if (__builtin_constant_p (__len) && __len == 0
7413       && (!__builtin_constant_p (__ch) || __ch != 0))
7414     {
7415       __warn_memset_zero_len ();
7416       return __dest;
7417     }
7418   return __builtin___memset_chk (__dest, __ch, __len, __builtin_object_size (__dest, 0));
7419 }
7420 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__artificial__)) void
7421 __attribute__ ((__nothrow__ , __leaf__)) bcopy (const void *__src, void *__dest, size_t __len)
7422 {
7423   (void) __builtin___memmove_chk (__dest, __src, __len, __builtin_object_size (__dest, 0));
7424 }
7425 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__artificial__)) void
7426 __attribute__ ((__nothrow__ , __leaf__)) bzero (void *__dest, size_t __len)
7427 {
7428   (void) __builtin___memset_chk (__dest, '\0', __len, __builtin_object_size (__dest, 0));
7429 }
7430 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__artificial__)) char *
7431 __attribute__ ((__nothrow__ , __leaf__)) strcpy (char *__restrict __dest, const char *__restrict __src)
7432 {
7433   return __builtin___strcpy_chk (__dest, __src, __builtin_object_size (__dest, 2 > 1));
7434 }
7435 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__artificial__)) char *
7436 __attribute__ ((__nothrow__ , __leaf__)) stpcpy (char *__restrict __dest, const char *__restrict __src)
7437 {
7438   return __builtin___stpcpy_chk (__dest, __src, __builtin_object_size (__dest, 2 > 1));
7439 }
7440 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__artificial__)) char *
7441 __attribute__ ((__nothrow__ , __leaf__)) strncpy (char *__restrict __dest, const char *__restrict __src, size_t __len)
7442 {
7443   return __builtin___strncpy_chk (__dest, __src, __len, __builtin_object_size (__dest, 2 > 1));
7444 }
7445 extern char *__stpncpy_chk (char *__dest, const char *__src, size_t __n,
7446        size_t __destlen) __attribute__ ((__nothrow__ , __leaf__));
7447 extern char *__stpncpy_alias (char *__dest, const char *__src, size_t __n) __asm__ ("" "stpncpy") __attribute__ ((__nothrow__ , __leaf__))
7448                                  ;
7449 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__artificial__)) char *
7450 __attribute__ ((__nothrow__ , __leaf__)) stpncpy (char *__dest, const char *__src, size_t __n)
7451 {
7452   if (__builtin_object_size (__dest, 2 > 1) != (size_t) -1
7453       && (!__builtin_constant_p (__n) || __n <= __builtin_object_size (__dest, 2 > 1)))
7454     return __stpncpy_chk (__dest, __src, __n, __builtin_object_size (__dest, 2 > 1));
7455   return __stpncpy_alias (__dest, __src, __n);
7456 }
7457 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__artificial__)) char *
7458 __attribute__ ((__nothrow__ , __leaf__)) strcat (char *__restrict __dest, const char *__restrict __src)
7459 {
7460   return __builtin___strcat_chk (__dest, __src, __builtin_object_size (__dest, 2 > 1));
7461 }
7462 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__artificial__)) char *
7463 __attribute__ ((__nothrow__ , __leaf__)) strncat (char *__restrict __dest, const char *__restrict __src, size_t __len)
7464 {
7465   return __builtin___strncat_chk (__dest, __src, __len, __builtin_object_size (__dest, 2 > 1));
7466 }
7467 extern int access (const char *__name, int __type) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
7468 extern int euidaccess (const char *__name, int __type)
7469      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
7470 extern int eaccess (const char *__name, int __type)
7471      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
7472 extern int faccessat (int __fd, const char *__file, int __type, int __flag)
7473      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2))) __attribute__ ((__warn_unused_result__));
7474 extern __off64_t lseek (int __fd, __off64_t __offset, int __whence) __asm__ ("" "lseek64") __attribute__ ((__nothrow__ , __leaf__))
7475              ;
7476 extern __off64_t lseek64 (int __fd, __off64_t __offset, int __whence)
7477      __attribute__ ((__nothrow__ , __leaf__));
7478 extern int close (int __fd);
7479 extern ssize_t read (int __fd, void *__buf, size_t __nbytes) __attribute__ ((__warn_unused_result__));
7480 extern ssize_t write (int __fd, const void *__buf, size_t __n) __attribute__ ((__warn_unused_result__));
7481 extern ssize_t pread (int __fd, void *__buf, size_t __nbytes, __off64_t __offset) __asm__ ("" "pread64")
7482                __attribute__ ((__warn_unused_result__));
7483 extern ssize_t pwrite (int __fd, const void *__buf, size_t __nbytes, __off64_t __offset) __asm__ ("" "pwrite64")
7484                 __attribute__ ((__warn_unused_result__));
7485 extern ssize_t pread64 (int __fd, void *__buf, size_t __nbytes,
7486    __off64_t __offset) __attribute__ ((__warn_unused_result__));
7487 extern ssize_t pwrite64 (int __fd, const void *__buf, size_t __n,
7488     __off64_t __offset) __attribute__ ((__warn_unused_result__));
7489 extern int pipe (int __pipedes[2]) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
7490 extern int pipe2 (int __pipedes[2], int __flags) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
7491 extern unsigned int alarm (unsigned int __seconds) __attribute__ ((__nothrow__ , __leaf__));
7492 extern unsigned int sleep (unsigned int __seconds);
7493 extern __useconds_t ualarm (__useconds_t __value, __useconds_t __interval)
7494      __attribute__ ((__nothrow__ , __leaf__));
7495 extern int usleep (__useconds_t __useconds);
7496 extern int pause (void);
7497 extern int chown (const char *__file, __uid_t __owner, __gid_t __group)
7498      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
7499 extern int fchown (int __fd, __uid_t __owner, __gid_t __group) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
7500 extern int lchown (const char *__file, __uid_t __owner, __gid_t __group)
7501      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
7502 extern int fchownat (int __fd, const char *__file, __uid_t __owner,
7503        __gid_t __group, int __flag)
7504      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2))) __attribute__ ((__warn_unused_result__));
7505 extern int chdir (const char *__path) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
7506 extern int fchdir (int __fd) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
7507 extern char *getcwd (char *__buf, size_t __size) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
7508 extern char *get_current_dir_name (void) __attribute__ ((__nothrow__ , __leaf__));
7509 extern char *getwd (char *__buf)
7510      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__deprecated__)) __attribute__ ((__warn_unused_result__));
7511 extern int dup (int __fd) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
7512 extern int dup2 (int __fd, int __fd2) __attribute__ ((__nothrow__ , __leaf__));
7513 extern int dup3 (int __fd, int __fd2, int __flags) __attribute__ ((__nothrow__ , __leaf__));
7514 extern char **__environ;
7515 extern char **environ;
7516 extern int execve (const char *__path, char *const __argv[],
7517      char *const __envp[]) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
7518 extern int fexecve (int __fd, char *const __argv[], char *const __envp[])
7519      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)));
7520 extern int execv (const char *__path, char *const __argv[])
7521      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
7522 extern int execle (const char *__path, const char *__arg, ...)
7523      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
7524 extern int execl (const char *__path, const char *__arg, ...)
7525      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
7526 extern int execvp (const char *__file, char *const __argv[])
7527      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
7528 extern int execlp (const char *__file, const char *__arg, ...)
7529      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
7530 extern int execvpe (const char *__file, char *const __argv[],
7531       char *const __envp[])
7532      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
7533 extern int nice (int __inc) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
7534 extern void _exit (int __status) __attribute__ ((__noreturn__));
7535 enum
7536   {
7537     _PC_LINK_MAX,
7538     _PC_MAX_CANON,
7539     _PC_MAX_INPUT,
7540     _PC_NAME_MAX,
7541     _PC_PATH_MAX,
7542     _PC_PIPE_BUF,
7543     _PC_CHOWN_RESTRICTED,
7544     _PC_NO_TRUNC,
7545     _PC_VDISABLE,
7546     _PC_SYNC_IO,
7547     _PC_ASYNC_IO,
7548     _PC_PRIO_IO,
7549     _PC_SOCK_MAXBUF,
7550     _PC_FILESIZEBITS,
7551     _PC_REC_INCR_XFER_SIZE,
7552     _PC_REC_MAX_XFER_SIZE,
7553     _PC_REC_MIN_XFER_SIZE,
7554     _PC_REC_XFER_ALIGN,
7555     _PC_ALLOC_SIZE_MIN,
7556     _PC_SYMLINK_MAX,
7557     _PC_2_SYMLINKS
7558   };
7559 enum
7560   {
7561     _SC_ARG_MAX,
7562     _SC_CHILD_MAX,
7563     _SC_CLK_TCK,
7564     _SC_NGROUPS_MAX,
7565     _SC_OPEN_MAX,
7566     _SC_STREAM_MAX,
7567     _SC_TZNAME_MAX,
7568     _SC_JOB_CONTROL,
7569     _SC_SAVED_IDS,
7570     _SC_REALTIME_SIGNALS,
7571     _SC_PRIORITY_SCHEDULING,
7572     _SC_TIMERS,
7573     _SC_ASYNCHRONOUS_IO,
7574     _SC_PRIORITIZED_IO,
7575     _SC_SYNCHRONIZED_IO,
7576     _SC_FSYNC,
7577     _SC_MAPPED_FILES,
7578     _SC_MEMLOCK,
7579     _SC_MEMLOCK_RANGE,
7580     _SC_MEMORY_PROTECTION,
7581     _SC_MESSAGE_PASSING,
7582     _SC_SEMAPHORES,
7583     _SC_SHARED_MEMORY_OBJECTS,
7584     _SC_AIO_LISTIO_MAX,
7585     _SC_AIO_MAX,
7586     _SC_AIO_PRIO_DELTA_MAX,
7587     _SC_DELAYTIMER_MAX,
7588     _SC_MQ_OPEN_MAX,
7589     _SC_MQ_PRIO_MAX,
7590     _SC_VERSION,
7591     _SC_PAGESIZE,
7592     _SC_RTSIG_MAX,
7593     _SC_SEM_NSEMS_MAX,
7594     _SC_SEM_VALUE_MAX,
7595     _SC_SIGQUEUE_MAX,
7596     _SC_TIMER_MAX,
7597     _SC_BC_BASE_MAX,
7598     _SC_BC_DIM_MAX,
7599     _SC_BC_SCALE_MAX,
7600     _SC_BC_STRING_MAX,
7601     _SC_COLL_WEIGHTS_MAX,
7602     _SC_EQUIV_CLASS_MAX,
7603     _SC_EXPR_NEST_MAX,
7604     _SC_LINE_MAX,
7605     _SC_RE_DUP_MAX,
7606     _SC_CHARCLASS_NAME_MAX,
7607     _SC_2_VERSION,
7608     _SC_2_C_BIND,
7609     _SC_2_C_DEV,
7610     _SC_2_FORT_DEV,
7611     _SC_2_FORT_RUN,
7612     _SC_2_SW_DEV,
7613     _SC_2_LOCALEDEF,
7614     _SC_PII,
7615     _SC_PII_XTI,
7616     _SC_PII_SOCKET,
7617     _SC_PII_INTERNET,
7618     _SC_PII_OSI,
7619     _SC_POLL,
7620     _SC_SELECT,
7621     _SC_UIO_MAXIOV,
7622     _SC_IOV_MAX = _SC_UIO_MAXIOV,
7623     _SC_PII_INTERNET_STREAM,
7624     _SC_PII_INTERNET_DGRAM,
7625     _SC_PII_OSI_COTS,
7626     _SC_PII_OSI_CLTS,
7627     _SC_PII_OSI_M,
7628     _SC_T_IOV_MAX,
7629     _SC_THREADS,
7630     _SC_THREAD_SAFE_FUNCTIONS,
7631     _SC_GETGR_R_SIZE_MAX,
7632     _SC_GETPW_R_SIZE_MAX,
7633     _SC_LOGIN_NAME_MAX,
7634     _SC_TTY_NAME_MAX,
7635     _SC_THREAD_DESTRUCTOR_ITERATIONS,
7636     _SC_THREAD_KEYS_MAX,
7637     _SC_THREAD_STACK_MIN,
7638     _SC_THREAD_THREADS_MAX,
7639     _SC_THREAD_ATTR_STACKADDR,
7640     _SC_THREAD_ATTR_STACKSIZE,
7641     _SC_THREAD_PRIORITY_SCHEDULING,
7642     _SC_THREAD_PRIO_INHERIT,
7643     _SC_THREAD_PRIO_PROTECT,
7644     _SC_THREAD_PROCESS_SHARED,
7645     _SC_NPROCESSORS_CONF,
7646     _SC_NPROCESSORS_ONLN,
7647     _SC_PHYS_PAGES,
7648     _SC_AVPHYS_PAGES,
7649     _SC_ATEXIT_MAX,
7650     _SC_PASS_MAX,
7651     _SC_XOPEN_VERSION,
7652     _SC_XOPEN_XCU_VERSION,
7653     _SC_XOPEN_UNIX,
7654     _SC_XOPEN_CRYPT,
7655     _SC_XOPEN_ENH_I18N,
7656     _SC_XOPEN_SHM,
7657     _SC_2_CHAR_TERM,
7658     _SC_2_C_VERSION,
7659     _SC_2_UPE,
7660     _SC_XOPEN_XPG2,
7661     _SC_XOPEN_XPG3,
7662     _SC_XOPEN_XPG4,
7663     _SC_CHAR_BIT,
7664     _SC_CHAR_MAX,
7665     _SC_CHAR_MIN,
7666     _SC_INT_MAX,
7667     _SC_INT_MIN,
7668     _SC_LONG_BIT,
7669     _SC_WORD_BIT,
7670     _SC_MB_LEN_MAX,
7671     _SC_NZERO,
7672     _SC_SSIZE_MAX,
7673     _SC_SCHAR_MAX,
7674     _SC_SCHAR_MIN,
7675     _SC_SHRT_MAX,
7676     _SC_SHRT_MIN,
7677     _SC_UCHAR_MAX,
7678     _SC_UINT_MAX,
7679     _SC_ULONG_MAX,
7680     _SC_USHRT_MAX,
7681     _SC_NL_ARGMAX,
7682     _SC_NL_LANGMAX,
7683     _SC_NL_MSGMAX,
7684     _SC_NL_NMAX,
7685     _SC_NL_SETMAX,
7686     _SC_NL_TEXTMAX,
7687     _SC_XBS5_ILP32_OFF32,
7688     _SC_XBS5_ILP32_OFFBIG,
7689     _SC_XBS5_LP64_OFF64,
7690     _SC_XBS5_LPBIG_OFFBIG,
7691     _SC_XOPEN_LEGACY,
7692     _SC_XOPEN_REALTIME,
7693     _SC_XOPEN_REALTIME_THREADS,
7694     _SC_ADVISORY_INFO,
7695     _SC_BARRIERS,
7696     _SC_BASE,
7697     _SC_C_LANG_SUPPORT,
7698     _SC_C_LANG_SUPPORT_R,
7699     _SC_CLOCK_SELECTION,
7700     _SC_CPUTIME,
7701     _SC_THREAD_CPUTIME,
7702     _SC_DEVICE_IO,
7703     _SC_DEVICE_SPECIFIC,
7704     _SC_DEVICE_SPECIFIC_R,
7705     _SC_FD_MGMT,
7706     _SC_FIFO,
7707     _SC_PIPE,
7708     _SC_FILE_ATTRIBUTES,
7709     _SC_FILE_LOCKING,
7710     _SC_FILE_SYSTEM,
7711     _SC_MONOTONIC_CLOCK,
7712     _SC_MULTI_PROCESS,
7713     _SC_SINGLE_PROCESS,
7714     _SC_NETWORKING,
7715     _SC_READER_WRITER_LOCKS,
7716     _SC_SPIN_LOCKS,
7717     _SC_REGEXP,
7718     _SC_REGEX_VERSION,
7719     _SC_SHELL,
7720     _SC_SIGNALS,
7721     _SC_SPAWN,
7722     _SC_SPORADIC_SERVER,
7723     _SC_THREAD_SPORADIC_SERVER,
7724     _SC_SYSTEM_DATABASE,
7725     _SC_SYSTEM_DATABASE_R,
7726     _SC_TIMEOUTS,
7727     _SC_TYPED_MEMORY_OBJECTS,
7728     _SC_USER_GROUPS,
7729     _SC_USER_GROUPS_R,
7730     _SC_2_PBS,
7731     _SC_2_PBS_ACCOUNTING,
7732     _SC_2_PBS_LOCATE,
7733     _SC_2_PBS_MESSAGE,
7734     _SC_2_PBS_TRACK,
7735     _SC_SYMLOOP_MAX,
7736     _SC_STREAMS,
7737     _SC_2_PBS_CHECKPOINT,
7738     _SC_V6_ILP32_OFF32,
7739     _SC_V6_ILP32_OFFBIG,
7740     _SC_V6_LP64_OFF64,
7741     _SC_V6_LPBIG_OFFBIG,
7742     _SC_HOST_NAME_MAX,
7743     _SC_TRACE,
7744     _SC_TRACE_EVENT_FILTER,
7745     _SC_TRACE_INHERIT,
7746     _SC_TRACE_LOG,
7747     _SC_LEVEL1_ICACHE_SIZE,
7748     _SC_LEVEL1_ICACHE_ASSOC,
7749     _SC_LEVEL1_ICACHE_LINESIZE,
7750     _SC_LEVEL1_DCACHE_SIZE,
7751     _SC_LEVEL1_DCACHE_ASSOC,
7752     _SC_LEVEL1_DCACHE_LINESIZE,
7753     _SC_LEVEL2_CACHE_SIZE,
7754     _SC_LEVEL2_CACHE_ASSOC,
7755     _SC_LEVEL2_CACHE_LINESIZE,
7756     _SC_LEVEL3_CACHE_SIZE,
7757     _SC_LEVEL3_CACHE_ASSOC,
7758     _SC_LEVEL3_CACHE_LINESIZE,
7759     _SC_LEVEL4_CACHE_SIZE,
7760     _SC_LEVEL4_CACHE_ASSOC,
7761     _SC_LEVEL4_CACHE_LINESIZE,
7762     _SC_IPV6 = _SC_LEVEL1_ICACHE_SIZE + 50,
7763     _SC_RAW_SOCKETS,
7764     _SC_V7_ILP32_OFF32,
7765     _SC_V7_ILP32_OFFBIG,
7766     _SC_V7_LP64_OFF64,
7767     _SC_V7_LPBIG_OFFBIG,
7768     _SC_SS_REPL_MAX,
7769     _SC_TRACE_EVENT_NAME_MAX,
7770     _SC_TRACE_NAME_MAX,
7771     _SC_TRACE_SYS_MAX,
7772     _SC_TRACE_USER_EVENT_MAX,
7773     _SC_XOPEN_STREAMS,
7774     _SC_THREAD_ROBUST_PRIO_INHERIT,
7775     _SC_THREAD_ROBUST_PRIO_PROTECT
7776   };
7777 enum
7778   {
7779     _CS_PATH,
7780     _CS_V6_WIDTH_RESTRICTED_ENVS,
7781     _CS_GNU_LIBC_VERSION,
7782     _CS_GNU_LIBPTHREAD_VERSION,
7783     _CS_V5_WIDTH_RESTRICTED_ENVS,
7784     _CS_V7_WIDTH_RESTRICTED_ENVS,
7785     _CS_LFS_CFLAGS = 1000,
7786     _CS_LFS_LDFLAGS,
7787     _CS_LFS_LIBS,
7788     _CS_LFS_LINTFLAGS,
7789     _CS_LFS64_CFLAGS,
7790     _CS_LFS64_LDFLAGS,
7791     _CS_LFS64_LIBS,
7792     _CS_LFS64_LINTFLAGS,
7793     _CS_XBS5_ILP32_OFF32_CFLAGS = 1100,
7794     _CS_XBS5_ILP32_OFF32_LDFLAGS,
7795     _CS_XBS5_ILP32_OFF32_LIBS,
7796     _CS_XBS5_ILP32_OFF32_LINTFLAGS,
7797     _CS_XBS5_ILP32_OFFBIG_CFLAGS,
7798     _CS_XBS5_ILP32_OFFBIG_LDFLAGS,
7799     _CS_XBS5_ILP32_OFFBIG_LIBS,
7800     _CS_XBS5_ILP32_OFFBIG_LINTFLAGS,
7801     _CS_XBS5_LP64_OFF64_CFLAGS,
7802     _CS_XBS5_LP64_OFF64_LDFLAGS,
7803     _CS_XBS5_LP64_OFF64_LIBS,
7804     _CS_XBS5_LP64_OFF64_LINTFLAGS,
7805     _CS_XBS5_LPBIG_OFFBIG_CFLAGS,
7806     _CS_XBS5_LPBIG_OFFBIG_LDFLAGS,
7807     _CS_XBS5_LPBIG_OFFBIG_LIBS,
7808     _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS,
7809     _CS_POSIX_V6_ILP32_OFF32_CFLAGS,
7810     _CS_POSIX_V6_ILP32_OFF32_LDFLAGS,
7811     _CS_POSIX_V6_ILP32_OFF32_LIBS,
7812     _CS_POSIX_V6_ILP32_OFF32_LINTFLAGS,
7813     _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS,
7814     _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS,
7815     _CS_POSIX_V6_ILP32_OFFBIG_LIBS,
7816     _CS_POSIX_V6_ILP32_OFFBIG_LINTFLAGS,
7817     _CS_POSIX_V6_LP64_OFF64_CFLAGS,
7818     _CS_POSIX_V6_LP64_OFF64_LDFLAGS,
7819     _CS_POSIX_V6_LP64_OFF64_LIBS,
7820     _CS_POSIX_V6_LP64_OFF64_LINTFLAGS,
7821     _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS,
7822     _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS,
7823     _CS_POSIX_V6_LPBIG_OFFBIG_LIBS,
7824     _CS_POSIX_V6_LPBIG_OFFBIG_LINTFLAGS,
7825     _CS_POSIX_V7_ILP32_OFF32_CFLAGS,
7826     _CS_POSIX_V7_ILP32_OFF32_LDFLAGS,
7827     _CS_POSIX_V7_ILP32_OFF32_LIBS,
7828     _CS_POSIX_V7_ILP32_OFF32_LINTFLAGS,
7829     _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS,
7830     _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS,
7831     _CS_POSIX_V7_ILP32_OFFBIG_LIBS,
7832     _CS_POSIX_V7_ILP32_OFFBIG_LINTFLAGS,
7833     _CS_POSIX_V7_LP64_OFF64_CFLAGS,
7834     _CS_POSIX_V7_LP64_OFF64_LDFLAGS,
7835     _CS_POSIX_V7_LP64_OFF64_LIBS,
7836     _CS_POSIX_V7_LP64_OFF64_LINTFLAGS,
7837     _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS,
7838     _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS,
7839     _CS_POSIX_V7_LPBIG_OFFBIG_LIBS,
7840     _CS_POSIX_V7_LPBIG_OFFBIG_LINTFLAGS,
7841     _CS_V6_ENV,
7842     _CS_V7_ENV
7843   };
7844 extern long int pathconf (const char *__path, int __name)
7845      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
7846 extern long int fpathconf (int __fd, int __name) __attribute__ ((__nothrow__ , __leaf__));
7847 extern long int sysconf (int __name) __attribute__ ((__nothrow__ , __leaf__));
7848 extern size_t confstr (int __name, char *__buf, size_t __len) __attribute__ ((__nothrow__ , __leaf__));
7849 extern __pid_t getpid (void) __attribute__ ((__nothrow__ , __leaf__));
7850 extern __pid_t getppid (void) __attribute__ ((__nothrow__ , __leaf__));
7851 extern __pid_t getpgrp (void) __attribute__ ((__nothrow__ , __leaf__));
7852 extern __pid_t __getpgid (__pid_t __pid) __attribute__ ((__nothrow__ , __leaf__));
7853 extern __pid_t getpgid (__pid_t __pid) __attribute__ ((__nothrow__ , __leaf__));
7854 extern int setpgid (__pid_t __pid, __pid_t __pgid) __attribute__ ((__nothrow__ , __leaf__));
7855 extern int setpgrp (void) __attribute__ ((__nothrow__ , __leaf__));
7856 extern __pid_t setsid (void) __attribute__ ((__nothrow__ , __leaf__));
7857 extern __pid_t getsid (__pid_t __pid) __attribute__ ((__nothrow__ , __leaf__));
7858 extern __uid_t getuid (void) __attribute__ ((__nothrow__ , __leaf__));
7859 extern __uid_t geteuid (void) __attribute__ ((__nothrow__ , __leaf__));
7860 extern __gid_t getgid (void) __attribute__ ((__nothrow__ , __leaf__));
7861 extern __gid_t getegid (void) __attribute__ ((__nothrow__ , __leaf__));
7862 extern int getgroups (int __size, __gid_t __list[]) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
7863 extern int group_member (__gid_t __gid) __attribute__ ((__nothrow__ , __leaf__));
7864 extern int setuid (__uid_t __uid) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
7865 extern int setreuid (__uid_t __ruid, __uid_t __euid) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
7866 extern int seteuid (__uid_t __uid) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
7867 extern int setgid (__gid_t __gid) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
7868 extern int setregid (__gid_t __rgid, __gid_t __egid) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
7869 extern int setegid (__gid_t __gid) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
7870 extern int getresuid (__uid_t *__ruid, __uid_t *__euid, __uid_t *__suid)
7871      __attribute__ ((__nothrow__ , __leaf__));
7872 extern int getresgid (__gid_t *__rgid, __gid_t *__egid, __gid_t *__sgid)
7873      __attribute__ ((__nothrow__ , __leaf__));
7874 extern int setresuid (__uid_t __ruid, __uid_t __euid, __uid_t __suid)
7875      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
7876 extern int setresgid (__gid_t __rgid, __gid_t __egid, __gid_t __sgid)
7877      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
7878 extern __pid_t fork (void) __attribute__ ((__nothrow__));
7879 extern __pid_t vfork (void) __attribute__ ((__nothrow__ , __leaf__));
7880 extern char *ttyname (int __fd) __attribute__ ((__nothrow__ , __leaf__));
7881 extern int ttyname_r (int __fd, char *__buf, size_t __buflen)
7882      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2))) __attribute__ ((__warn_unused_result__));
7883 extern int isatty (int __fd) __attribute__ ((__nothrow__ , __leaf__));
7884 extern int ttyslot (void) __attribute__ ((__nothrow__ , __leaf__));
7885 extern int link (const char *__from, const char *__to)
7886      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2))) __attribute__ ((__warn_unused_result__));
7887 extern int linkat (int __fromfd, const char *__from, int __tofd,
7888      const char *__to, int __flags)
7889      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2, 4))) __attribute__ ((__warn_unused_result__));
7890 extern int symlink (const char *__from, const char *__to)
7891      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2))) __attribute__ ((__warn_unused_result__));
7892 extern ssize_t readlink (const char *__restrict __path,
7893     char *__restrict __buf, size_t __len)
7894      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2))) __attribute__ ((__warn_unused_result__));
7895 extern int symlinkat (const char *__from, int __tofd,
7896         const char *__to) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 3))) __attribute__ ((__warn_unused_result__));
7897 extern ssize_t readlinkat (int __fd, const char *__restrict __path,
7898       char *__restrict __buf, size_t __len)
7899      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2, 3))) __attribute__ ((__warn_unused_result__));
7900 extern int unlink (const char *__name) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
7901 extern int unlinkat (int __fd, const char *__name, int __flag)
7902      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)));
7903 extern int rmdir (const char *__path) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
7904 extern __pid_t tcgetpgrp (int __fd) __attribute__ ((__nothrow__ , __leaf__));
7905 extern int tcsetpgrp (int __fd, __pid_t __pgrp_id) __attribute__ ((__nothrow__ , __leaf__));
7906 extern char *getlogin (void);
7907 extern int getlogin_r (char *__name, size_t __name_len) __attribute__ ((__nonnull__ (1)));
7908 extern int setlogin (const char *__name) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
7909 extern char *BSDoptarg;
7910 extern int BSDoptind;
7911 extern int BSDopterr;
7912 extern int BSDoptopt;
7913 extern int BSDgetopt(int ___argc, char *const *___argv, const char *__shortopts)
7914        __attribute__ ((__nothrow__ , __leaf__));
7915 extern int gethostname (char *__name, size_t __len) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
7916 extern int sethostname (const char *__name, size_t __len)
7917      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
7918 extern int sethostid (long int __id) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
7919 extern int getdomainname (char *__name, size_t __len)
7920      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
7921 extern int setdomainname (const char *__name, size_t __len)
7922      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
7923 extern int vhangup (void) __attribute__ ((__nothrow__ , __leaf__));
7924 extern int revoke (const char *__file) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
7925 extern int profil (unsigned short int *__sample_buffer, size_t __size,
7926      size_t __offset, unsigned int __scale)
7927      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
7928 extern int acct (const char *__name) __attribute__ ((__nothrow__ , __leaf__));
7929 extern char *getusershell (void) __attribute__ ((__nothrow__ , __leaf__));
7930 extern void endusershell (void) __attribute__ ((__nothrow__ , __leaf__));
7931 extern void setusershell (void) __attribute__ ((__nothrow__ , __leaf__));
7932 extern int daemon (int __nochdir, int __noclose) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
7933 extern int chroot (const char *__path) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
7934 extern char *getpass (const char *__prompt) __attribute__ ((__nonnull__ (1)));
7935 extern int fsync (int __fd);
7936 extern int syncfs (int __fd) __attribute__ ((__nothrow__ , __leaf__));
7937 extern long int gethostid (void);
7938 extern void sync (void) __attribute__ ((__nothrow__ , __leaf__));
7939 extern int getpagesize (void) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
7940 extern int getdtablesize (void) __attribute__ ((__nothrow__ , __leaf__));
7941 extern int truncate (const char *__file, __off64_t __length) __asm__ ("" "truncate64") __attribute__ ((__nothrow__ , __leaf__))
7942                   __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
7943 extern int truncate64 (const char *__file, __off64_t __length)
7944      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
7945 extern int ftruncate (int __fd, __off64_t __length) __asm__ ("" "ftruncate64") __attribute__ ((__nothrow__ , __leaf__))
7946                    __attribute__ ((__warn_unused_result__));
7947 extern int ftruncate64 (int __fd, __off64_t __length) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
7948 extern int brk (void *__addr) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
7949 extern void *sbrk (intptr_t __delta) __attribute__ ((__nothrow__ , __leaf__));
7950 extern long int syscall (long int __sysno, ...) __attribute__ ((__nothrow__ , __leaf__));
7951 extern int fdatasync (int __fildes);
7952 extern char *crypt (const char *__key, const char *__salt)
7953      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
7954 extern void encrypt (char *__block, int __edflag) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
7955 extern void swab (const void *__restrict __from, void *__restrict __to,
7956     ssize_t __n) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
7957 extern ssize_t __read_chk (int __fd, void *__buf, size_t __nbytes,
7958       size_t __buflen) __attribute__ ((__warn_unused_result__));
7959 extern ssize_t __read_alias (int __fd, void *__buf, size_t __nbytes) __asm__ ("" "read")
7960                                __attribute__ ((__warn_unused_result__));
7961 extern ssize_t __read_chk_warn (int __fd, void *__buf, size_t __nbytes, size_t __buflen) __asm__ ("" "__read_chk")
7962      __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("read called with bigger length than size of " "the destination buffer")))
7963                                   ;
7964 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) ssize_t
7965 read (int __fd, void *__buf, size_t __nbytes)
7966 {
7967   if (__builtin_object_size (__buf, 0) != (size_t) -1)
7968     {
7969       if (!__builtin_constant_p (__nbytes))
7970  return __read_chk (__fd, __buf, __nbytes, __builtin_object_size (__buf, 0));
7971       if (__nbytes > __builtin_object_size (__buf, 0))
7972  return __read_chk_warn (__fd, __buf, __nbytes, __builtin_object_size (__buf, 0));
7973     }
7974   return __read_alias (__fd, __buf, __nbytes);
7975 }
7976 extern ssize_t __pread_chk (int __fd, void *__buf, size_t __nbytes,
7977        __off_t __offset, size_t __bufsize) __attribute__ ((__warn_unused_result__));
7978 extern ssize_t __pread64_chk (int __fd, void *__buf, size_t __nbytes,
7979          __off64_t __offset, size_t __bufsize) __attribute__ ((__warn_unused_result__));
7980 extern ssize_t __pread_alias (int __fd, void *__buf, size_t __nbytes, __off_t __offset) __asm__ ("" "pread")
7981                                  __attribute__ ((__warn_unused_result__));
7982 extern ssize_t __pread64_alias (int __fd, void *__buf, size_t __nbytes, __off64_t __offset) __asm__ ("" "pread64")
7983                                      __attribute__ ((__warn_unused_result__));
7984 extern ssize_t __pread_chk_warn (int __fd, void *__buf, size_t __nbytes, __off_t __offset, size_t __bufsize) __asm__ ("" "__pread_chk")
7985      __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("pread called with bigger length than size of " "the destination buffer")))
7986                                   ;
7987 extern ssize_t __pread64_chk_warn (int __fd, void *__buf, size_t __nbytes, __off64_t __offset, size_t __bufsize) __asm__ ("" "__pread64_chk")
7988      __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("pread64 called with bigger length than size of " "the destination buffer")))
7989                                   ;
7990 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) ssize_t
7991 pread (int __fd, void *__buf, size_t __nbytes, __off64_t __offset)
7992 {
7993   if (__builtin_object_size (__buf, 0) != (size_t) -1)
7994     {
7995       if (!__builtin_constant_p (__nbytes))
7996  return __pread64_chk (__fd, __buf, __nbytes, __offset, __builtin_object_size (__buf, 0));
7997       if ( __nbytes > __builtin_object_size (__buf, 0))
7998  return __pread64_chk_warn (__fd, __buf, __nbytes, __offset,
7999        __builtin_object_size (__buf, 0));
8000     }
8001   return __pread64_alias (__fd, __buf, __nbytes, __offset);
8002 }
8003 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) ssize_t
8004 pread64 (int __fd, void *__buf, size_t __nbytes, __off64_t __offset)
8005 {
8006   if (__builtin_object_size (__buf, 0) != (size_t) -1)
8007     {
8008       if (!__builtin_constant_p (__nbytes))
8009  return __pread64_chk (__fd, __buf, __nbytes, __offset, __builtin_object_size (__buf, 0));
8010       if ( __nbytes > __builtin_object_size (__buf, 0))
8011  return __pread64_chk_warn (__fd, __buf, __nbytes, __offset,
8012        __builtin_object_size (__buf, 0));
8013     }
8014   return __pread64_alias (__fd, __buf, __nbytes, __offset);
8015 }
8016 extern ssize_t __readlink_chk (const char *__restrict __path,
8017           char *__restrict __buf, size_t __len,
8018           size_t __buflen)
8019      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2))) __attribute__ ((__warn_unused_result__));
8020 extern ssize_t __readlink_alias (const char *__restrict __path, char *__restrict __buf, size_t __len) __asm__ ("" "readlink") __attribute__ ((__nothrow__ , __leaf__))
8021      __attribute__ ((__nonnull__ (1, 2))) __attribute__ ((__warn_unused_result__));
8022 extern ssize_t __readlink_chk_warn (const char *__restrict __path, char *__restrict __buf, size_t __len, size_t __buflen) __asm__ ("" "__readlink_chk") __attribute__ ((__nothrow__ , __leaf__))
8023      __attribute__ ((__nonnull__ (1, 2))) __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("readlink called with bigger length " "than size of destination buffer")))
8024                                          ;
8025 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__nonnull__ (1, 2))) __attribute__ ((__warn_unused_result__)) ssize_t
8026 __attribute__ ((__nothrow__ , __leaf__)) readlink (const char *__restrict __path, char *__restrict __buf, size_t __len)
8027 {
8028   if (__builtin_object_size (__buf, 2 > 1) != (size_t) -1)
8029     {
8030       if (!__builtin_constant_p (__len))
8031  return __readlink_chk (__path, __buf, __len, __builtin_object_size (__buf, 2 > 1));
8032       if ( __len > __builtin_object_size (__buf, 2 > 1))
8033  return __readlink_chk_warn (__path, __buf, __len, __builtin_object_size (__buf, 2 > 1));
8034     }
8035   return __readlink_alias (__path, __buf, __len);
8036 }
8037 extern ssize_t __readlinkat_chk (int __fd, const char *__restrict __path,
8038      char *__restrict __buf, size_t __len,
8039      size_t __buflen)
8040      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2, 3))) __attribute__ ((__warn_unused_result__));
8041 extern ssize_t __readlinkat_alias (int __fd, const char *__restrict __path, char *__restrict __buf, size_t __len) __asm__ ("" "readlinkat") __attribute__ ((__nothrow__ , __leaf__))
8042      __attribute__ ((__nonnull__ (2, 3))) __attribute__ ((__warn_unused_result__));
8043 extern ssize_t __readlinkat_chk_warn (int __fd, const char *__restrict __path, char *__restrict __buf, size_t __len, size_t __buflen) __asm__ ("" "__readlinkat_chk") __attribute__ ((__nothrow__ , __leaf__))
8044      __attribute__ ((__nonnull__ (2, 3))) __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("readlinkat called with bigger " "length than size of destination " "buffer")))
8045                 ;
8046 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__nonnull__ (2, 3))) __attribute__ ((__warn_unused_result__)) ssize_t
8047 __attribute__ ((__nothrow__ , __leaf__)) readlinkat (int __fd, const char *__restrict __path, char *__restrict __buf, size_t __len)
8048 {
8049   if (__builtin_object_size (__buf, 2 > 1) != (size_t) -1)
8050     {
8051       if (!__builtin_constant_p (__len))
8052  return __readlinkat_chk (__fd, __path, __buf, __len, __builtin_object_size (__buf, 2 > 1));
8053       if (__len > __builtin_object_size (__buf, 2 > 1))
8054  return __readlinkat_chk_warn (__fd, __path, __buf, __len,
8055           __builtin_object_size (__buf, 2 > 1));
8056     }
8057   return __readlinkat_alias (__fd, __path, __buf, __len);
8058 }
8059 extern char *__getcwd_chk (char *__buf, size_t __size, size_t __buflen)
8060      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
8061 extern char *__getcwd_alias (char *__buf, size_t __size) __asm__ ("" "getcwd") __attribute__ ((__nothrow__ , __leaf__))
8062                                               __attribute__ ((__warn_unused_result__));
8063 extern char *__getcwd_chk_warn (char *__buf, size_t __size, size_t __buflen) __asm__ ("" "__getcwd_chk") __attribute__ ((__nothrow__ , __leaf__))
8064      __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("getcwd caller with bigger length than size of " "destination buffer")))
8065                               ;
8066 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) char *
8067 __attribute__ ((__nothrow__ , __leaf__)) getcwd (char *__buf, size_t __size)
8068 {
8069   if (__builtin_object_size (__buf, 2 > 1) != (size_t) -1)
8070     {
8071       if (!__builtin_constant_p (__size))
8072  return __getcwd_chk (__buf, __size, __builtin_object_size (__buf, 2 > 1));
8073       if (__size > __builtin_object_size (__buf, 2 > 1))
8074  return __getcwd_chk_warn (__buf, __size, __builtin_object_size (__buf, 2 > 1));
8075     }
8076   return __getcwd_alias (__buf, __size);
8077 }
8078 extern char *__getwd_chk (char *__buf, size_t buflen)
8079      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
8080 extern char *__getwd_warn (char *__buf) __asm__ ("" "getwd") __attribute__ ((__nothrow__ , __leaf__))
8081      __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("please use getcwd instead, as getwd " "doesn't specify buffer size")))
8082                                          ;
8083 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__deprecated__)) __attribute__ ((__warn_unused_result__)) char *
8084 __attribute__ ((__nothrow__ , __leaf__)) getwd (char *__buf)
8085 {
8086   if (__builtin_object_size (__buf, 2 > 1) != (size_t) -1)
8087     return __getwd_chk (__buf, __builtin_object_size (__buf, 2 > 1));
8088   return __getwd_warn (__buf);
8089 }
8090 extern size_t __confstr_chk (int __name, char *__buf, size_t __len,
8091         size_t __buflen) __attribute__ ((__nothrow__ , __leaf__));
8092 extern size_t __confstr_alias (int __name, char *__buf, size_t __len) __asm__ ("" "confstr") __attribute__ ((__nothrow__ , __leaf__))
8093                              ;
8094 extern size_t __confstr_chk_warn (int __name, char *__buf, size_t __len, size_t __buflen) __asm__ ("" "__confstr_chk") __attribute__ ((__nothrow__ , __leaf__))
8095      __attribute__((__warning__ ("confstr called with bigger length than size of destination " "buffer")))
8096             ;
8097 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__artificial__)) size_t
8098 __attribute__ ((__nothrow__ , __leaf__)) confstr (int __name, char *__buf, size_t __len)
8099 {
8100   if (__builtin_object_size (__buf, 2 > 1) != (size_t) -1)
8101     {
8102       if (!__builtin_constant_p (__len))
8103  return __confstr_chk (__name, __buf, __len, __builtin_object_size (__buf, 2 > 1));
8104       if (__builtin_object_size (__buf, 2 > 1) < __len)
8105  return __confstr_chk_warn (__name, __buf, __len, __builtin_object_size (__buf, 2 > 1));
8106     }
8107   return __confstr_alias (__name, __buf, __len);
8108 }
8109 extern int __getgroups_chk (int __size, __gid_t __list[], size_t __listlen)
8110      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__));
8111 extern int __getgroups_alias (int __size, __gid_t __list[]) __asm__ ("" "getgroups") __attribute__ ((__nothrow__ , __leaf__))
8112                  __attribute__ ((__warn_unused_result__));
8113 extern int __getgroups_chk_warn (int __size, __gid_t __list[], size_t __listlen) __asm__ ("" "__getgroups_chk") __attribute__ ((__nothrow__ , __leaf__))
8114      __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("getgroups called with bigger group count than what " "can fit into destination buffer")))
8115                                            ;
8116 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__artificial__)) int
8117 __attribute__ ((__nothrow__ , __leaf__)) getgroups (int __size, __gid_t __list[])
8118 {
8119   if (__builtin_object_size (__list, 2 > 1) != (size_t) -1)
8120     {
8121       if (!__builtin_constant_p (__size) || __size < 0)
8122  return __getgroups_chk (__size, __list, __builtin_object_size (__list, 2 > 1));
8123       if (__size * sizeof (__gid_t) > __builtin_object_size (__list, 2 > 1))
8124  return __getgroups_chk_warn (__size, __list, __builtin_object_size (__list, 2 > 1));
8125     }
8126   return __getgroups_alias (__size, __list);
8127 }
8128 extern int __ttyname_r_chk (int __fd, char *__buf, size_t __buflen,
8129        size_t __nreal) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)));
8130 extern int __ttyname_r_alias (int __fd, char *__buf, size_t __buflen) __asm__ ("" "ttyname_r") __attribute__ ((__nothrow__ , __leaf__))
8131      __attribute__ ((__nonnull__ (2)));
8132 extern int __ttyname_r_chk_warn (int __fd, char *__buf, size_t __buflen, size_t __nreal) __asm__ ("" "__ttyname_r_chk") __attribute__ ((__nothrow__ , __leaf__))
8133      __attribute__ ((__nonnull__ (2))) __attribute__((__warning__ ("ttyname_r called with bigger buflen than " "size of destination buffer")))
8134                                   ;
8135 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__artificial__)) int
8136 __attribute__ ((__nothrow__ , __leaf__)) ttyname_r (int __fd, char *__buf, size_t __buflen)
8137 {
8138   if (__builtin_object_size (__buf, 2 > 1) != (size_t) -1)
8139     {
8140       if (!__builtin_constant_p (__buflen))
8141  return __ttyname_r_chk (__fd, __buf, __buflen, __builtin_object_size (__buf, 2 > 1));
8142       if (__buflen > __builtin_object_size (__buf, 2 > 1))
8143  return __ttyname_r_chk_warn (__fd, __buf, __buflen, __builtin_object_size (__buf, 2 > 1));
8144     }
8145   return __ttyname_r_alias (__fd, __buf, __buflen);
8146 }
8147 extern int __getlogin_r_chk (char *__buf, size_t __buflen, size_t __nreal)
8148      __attribute__ ((__nonnull__ (1)));
8149 extern int __getlogin_r_alias (char *__buf, size_t __buflen) __asm__ ("" "getlogin_r")
8150                      __attribute__ ((__nonnull__ (1)));
8151 extern int __getlogin_r_chk_warn (char *__buf, size_t __buflen, size_t __nreal) __asm__ ("" "__getlogin_r_chk")
8152      __attribute__ ((__nonnull__ (1))) __attribute__((__warning__ ("getlogin_r called with bigger buflen than " "size of destination buffer")))
8153                                   ;
8154 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__artificial__)) int
8155 getlogin_r (char *__buf, size_t __buflen)
8156 {
8157   if (__builtin_object_size (__buf, 2 > 1) != (size_t) -1)
8158     {
8159       if (!__builtin_constant_p (__buflen))
8160  return __getlogin_r_chk (__buf, __buflen, __builtin_object_size (__buf, 2 > 1));
8161       if (__buflen > __builtin_object_size (__buf, 2 > 1))
8162  return __getlogin_r_chk_warn (__buf, __buflen, __builtin_object_size (__buf, 2 > 1));
8163     }
8164   return __getlogin_r_alias (__buf, __buflen);
8165 }
8166 extern int __gethostname_chk (char *__buf, size_t __buflen, size_t __nreal)
8167      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
8168 extern int __gethostname_alias (char *__buf, size_t __buflen) __asm__ ("" "gethostname") __attribute__ ((__nothrow__ , __leaf__))
8169                    __attribute__ ((__nonnull__ (1)));
8170 extern int __gethostname_chk_warn (char *__buf, size_t __buflen, size_t __nreal) __asm__ ("" "__gethostname_chk") __attribute__ ((__nothrow__ , __leaf__))
8171      __attribute__ ((__nonnull__ (1))) __attribute__((__warning__ ("gethostname called with bigger buflen than " "size of destination buffer")))
8172                                   ;
8173 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__artificial__)) int
8174 __attribute__ ((__nothrow__ , __leaf__)) gethostname (char *__buf, size_t __buflen)
8175 {
8176   if (__builtin_object_size (__buf, 2 > 1) != (size_t) -1)
8177     {
8178       if (!__builtin_constant_p (__buflen))
8179  return __gethostname_chk (__buf, __buflen, __builtin_object_size (__buf, 2 > 1));
8180       if (__buflen > __builtin_object_size (__buf, 2 > 1))
8181  return __gethostname_chk_warn (__buf, __buflen, __builtin_object_size (__buf, 2 > 1));
8182     }
8183   return __gethostname_alias (__buf, __buflen);
8184 }
8185 extern int __getdomainname_chk (char *__buf, size_t __buflen, size_t __nreal)
8186      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
8187 extern int __getdomainname_alias (char *__buf, size_t __buflen) __asm__ ("" "getdomainname") __attribute__ ((__nothrow__ , __leaf__))
8188                      __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
8189 extern int __getdomainname_chk_warn (char *__buf, size_t __buflen, size_t __nreal) __asm__ ("" "__getdomainname_chk") __attribute__ ((__nothrow__ , __leaf__))
8190      __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("getdomainname called with bigger " "buflen than size of destination " "buffer")))
8191                     ;
8192 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__artificial__)) int
8193 __attribute__ ((__nothrow__ , __leaf__)) getdomainname (char *__buf, size_t __buflen)
8194 {
8195   if (__builtin_object_size (__buf, 2 > 1) != (size_t) -1)
8196     {
8197       if (!__builtin_constant_p (__buflen))
8198  return __getdomainname_chk (__buf, __buflen, __builtin_object_size (__buf, 2 > 1));
8199       if (__buflen > __builtin_object_size (__buf, 2 > 1))
8200  return __getdomainname_chk_warn (__buf, __buflen, __builtin_object_size (__buf, 2 > 1));
8201     }
8202   return __getdomainname_alias (__buf, __buflen);
8203 }
8204 void *xmalloc(size_t);
8205 void *xcalloc(size_t, size_t);
8206 void *xrealloc(void *, size_t, size_t);
8207 char *xstrdup(const char *);
8208 int xasprintf(char **, const char *, ...)
8209                 __attribute__((__format__ (printf, 2, 3)))
8210                 __attribute__((__nonnull__ (2)));
8211 typedef struct Key Key;
8212 enum types {
8213  KEY_RSA1,
8214  KEY_RSA,
8215  KEY_DSA,
8216  KEY_ECDSA,
8217  KEY_ED25519,
8218  KEY_RSA_CERT,
8219  KEY_DSA_CERT,
8220  KEY_ECDSA_CERT,
8221  KEY_ED25519_CERT,
8222  KEY_RSA_CERT_V00,
8223  KEY_DSA_CERT_V00,
8224  KEY_UNSPEC
8225 };
8226 enum fp_type {
8227  SSH_FP_SHA1,
8228  SSH_FP_MD5,
8229  SSH_FP_SHA256
8230 };
8231 enum fp_rep {
8232  SSH_FP_HEX,
8233  SSH_FP_BUBBLEBABBLE,
8234  SSH_FP_RANDOMART
8235 };
8236 struct KeyCert {
8237  Buffer certblob;
8238  u_int type;
8239  u_int64_t serial;
8240  char *key_id;
8241  u_int nprincipals;
8242  char **principals;
8243  u_int64_t valid_after, valid_before;
8244  Buffer critical;
8245  Buffer extensions;
8246  Key *signature_key;
8247 };
8248 struct Key {
8249  int type;
8250  int flags;
8251  RSA *rsa;
8252  DSA *dsa;
8253  int ecdsa_nid;
8254  EC_KEY *ecdsa;
8255  struct KeyCert *cert;
8256  u_char *ed25519_sk;
8257  u_char *ed25519_pk;
8258 };
8259 Key *key_new(int);
8260 void key_add_private(Key *);
8261 Key *key_new_private(int);
8262 void key_free(Key *);
8263 Key *key_demote(const Key *);
8264 int key_equal_public(const Key *, const Key *);
8265 int key_equal(const Key *, const Key *);
8266 char *key_fingerprint(const Key *, enum fp_type, enum fp_rep);
8267 u_char *key_fingerprint_raw(const Key *, enum fp_type, u_int *);
8268 const char *key_type(const Key *);
8269 const char *key_cert_type(const Key *);
8270 int key_write(const Key *, FILE *);
8271 int key_read(Key *, char **);
8272 u_int key_size(const Key *);
8273 Key *key_generate(int, u_int);
8274 Key *key_from_private(const Key *);
8275 int key_type_from_name(char *);
8276 int key_is_cert(const Key *);
8277 int key_type_is_cert(int);
8278 int key_type_plain(int);
8279 int key_to_certified(Key *, int);
8280 int key_drop_cert(Key *);
8281 int key_certify(Key *, Key *);
8282 void key_cert_copy(const Key *, struct Key *);
8283 int key_cert_check_authority(const Key *, int, int, const char *,
8284      const char **);
8285 int key_cert_is_legacy(const Key *);
8286 int key_ecdsa_nid_from_name(const char *);
8287 int key_curve_name_to_nid(const char *);
8288 const char *key_curve_nid_to_name(int);
8289 u_int key_curve_nid_to_bits(int);
8290 int key_ecdsa_bits_to_nid(int);
8291 int key_ecdsa_key_to_nid(EC_KEY *);
8292 int key_ec_nid_to_hash_alg(int nid);
8293 int key_ec_validate_public(const EC_GROUP *, const EC_POINT *);
8294 int key_ec_validate_private(const EC_KEY *);
8295 char *key_alg_list(int, int);
8296 Key *key_from_blob(const u_char *, u_int);
8297 int key_to_blob(const Key *, u_char **, u_int *);
8298 const char *key_ssh_name(const Key *);
8299 const char *key_ssh_name_plain(const Key *);
8300 int key_names_valid2(const char *);
8301 int key_sign(const Key *, u_char **, u_int *, const u_char *, u_int);
8302 int key_verify(const Key *, const u_char *, u_int, const u_char *, u_int);
8303 int ssh_dss_sign(const Key *, u_char **, u_int *, const u_char *, u_int);
8304 int ssh_dss_verify(const Key *, const u_char *, u_int, const u_char *, u_int);
8305 int ssh_ecdsa_sign(const Key *, u_char **, u_int *, const u_char *, u_int);
8306 int ssh_ecdsa_verify(const Key *, const u_char *, u_int, const u_char *, u_int);
8307 int ssh_rsa_sign(const Key *, u_char **, u_int *, const u_char *, u_int);
8308 int ssh_rsa_verify(const Key *, const u_char *, u_int, const u_char *, u_int);
8309 int ssh_ed25519_sign(const Key *, u_char **, u_int *, const u_char *, u_int);
8310 int ssh_ed25519_verify(const Key *, const u_char *, u_int, const u_char *, u_int);
8311 void key_private_serialize(const Key *, Buffer *);
8312 Key *key_private_deserialize(Buffer *);
8313 void rsa_public_encrypt(BIGNUM *, BIGNUM *, RSA *);
8314 int rsa_private_decrypt(BIGNUM *, BIGNUM *, RSA *);
8315 void rsa_generate_additional_parameters(RSA *);
8316 int key_save_private(Key *, const char *, const char *, const char *,
8317     int, const char *, int);
8318 int key_load_file(int, const char *, Buffer *);
8319 Key *key_load_cert(const char *);
8320 Key *key_load_public(const char *, char **);
8321 Key *key_load_public_type(int, const char *, char **);
8322 Key *key_parse_private(Buffer *, const char *, const char *, char **);
8323 Key *key_load_private(const char *, const char *, char **);
8324 Key *key_load_private_cert(int, const char *, const char *, int *);
8325 Key *key_load_private_type(int, const char *, const char *, char **, int *);
8326 Key *key_load_private_pem(int, int, const char *, char **);
8327 int key_perm_ok(int, const char *);
8328 int key_in_file(Key *, const char *, int);
8329 int uuencode(const u_char *, u_int, char *, size_t);
8330 int uudecode(const char *, u_char *, size_t);
8331 void dump_base64(FILE *, const u_char *, u_int);
8332 typedef enum {
8333  SYSLOG_FACILITY_DAEMON,
8334  SYSLOG_FACILITY_USER,
8335  SYSLOG_FACILITY_AUTH,
8336  SYSLOG_FACILITY_LOCAL0,
8337  SYSLOG_FACILITY_LOCAL1,
8338  SYSLOG_FACILITY_LOCAL2,
8339  SYSLOG_FACILITY_LOCAL3,
8340  SYSLOG_FACILITY_LOCAL4,
8341  SYSLOG_FACILITY_LOCAL5,
8342  SYSLOG_FACILITY_LOCAL6,
8343  SYSLOG_FACILITY_LOCAL7,
8344  SYSLOG_FACILITY_NOT_SET = -1
8345 } SyslogFacility;
8346 typedef enum {
8347  SYSLOG_LEVEL_QUIET,
8348  SYSLOG_LEVEL_FATAL,
8349  SYSLOG_LEVEL_ERROR,
8350  SYSLOG_LEVEL_INFO,
8351  SYSLOG_LEVEL_VERBOSE,
8352  SYSLOG_LEVEL_DEBUG1,
8353  SYSLOG_LEVEL_DEBUG2,
8354  SYSLOG_LEVEL_DEBUG3,
8355  SYSLOG_LEVEL_NOT_SET = -1
8356 } LogLevel;
8357 typedef void (log_handler_fn)(LogLevel, const char *, void *);
8358 void log_init(char *, LogLevel, SyslogFacility, int);
8359 void log_change_level(LogLevel);
8360 int log_is_on_stderr(void);
8361 void log_redirect_stderr_to(const char *);
8362 SyslogFacility log_facility_number(char *);
8363 const char * log_facility_name(SyslogFacility);
8364 LogLevel log_level_number(char *);
8365 const char * log_level_name(LogLevel);
8366 void fatal(const char *, ...) __attribute__((noreturn))
8367     __attribute__((format(printf, 1, 2)));
8368 void error(const char *, ...) __attribute__((format(printf, 1, 2)));
8369 void sigdie(const char *, ...) __attribute__((noreturn))
8370     __attribute__((format(printf, 1, 2)));
8371 void logit(const char *, ...) __attribute__((format(printf, 1, 2)));
8372 void verbose(const char *, ...) __attribute__((format(printf, 1, 2)));
8373 void debug(const char *, ...) __attribute__((format(printf, 1, 2)));
8374 void debug2(const char *, ...) __attribute__((format(printf, 1, 2)));
8375 void debug3(const char *, ...) __attribute__((format(printf, 1, 2)));
8376 void set_log_handler(log_handler_fn *, void *);
8377 void do_log2(LogLevel, const char *, ...)
8378     __attribute__((format(printf, 2, 3)));
8379 void do_log(LogLevel, const char *, va_list);
8380 void cleanup_exit(int) __attribute__((noreturn));
8381 char *chop(char *);
8382 char *strdelim(char **);
8383 int set_nonblock(int);
8384 int unset_nonblock(int);
8385 void set_nodelay(int);
8386 int a2port(const char *);
8387 int a2tun(const char *, int *);
8388 char *put_host_port(const char *, u_short);
8389 char *hpdelim(char **);
8390 char *cleanhostname(char *);
8391 char *colon(char *);
8392 long convtime(const char *);
8393 char *tilde_expand_filename(const char *, uid_t);
8394 char *percent_expand(const char *, ...) __attribute__(());
8395 char *tohex(const void *, size_t);
8396 void sanitise_stdfd(void);
8397 void ms_subtract_diff(struct timeval *, int *);
8398 void ms_to_timeval(struct timeval *, int);
8399 time_t monotime(void);
8400 void lowercase(char *s);
8401 void sock_set_v6only(int);
8402 struct passwd *pwcopy(struct passwd *);
8403 const char *ssh_gai_strerror(int);
8404 typedef struct arglist arglist;
8405 struct arglist {
8406  char **list;
8407  u_int num;
8408  u_int nalloc;
8409 };
8410 void addargs(arglist *, char *, ...)
8411       __attribute__((format(printf, 2, 3)));
8412 void replacearg(arglist *, u_int, char *, ...)
8413       __attribute__((format(printf, 3, 4)));
8414 void freeargs(arglist *);
8415 int tun_open(int, int);
8416 u_int64_t get_u64(const void *)
8417     __attribute__(());
8418 u_int32_t get_u32(const void *)
8419     __attribute__(());
8420 u_int16_t get_u16(const void *)
8421     __attribute__(());
8422 void put_u64(void *, u_int64_t)
8423     __attribute__(());
8424 void put_u32(void *, u_int32_t)
8425     __attribute__(());
8426 void put_u16(void *, u_int16_t)
8427     __attribute__(());
8428 struct bwlimit {
8429  size_t buflen;
8430  u_int64_t rate, thresh, lamt;
8431  struct timeval bwstart, bwend;
8432 };
8433 void bandwidth_limit_init(struct bwlimit *, u_int64_t, size_t);
8434 void bandwidth_limit(struct bwlimit *, size_t);
8435 int parse_ipqos(const char *);
8436 const char *iptos2str(int);
8437 void mktemp_proto(char *, size_t);
8438 char *read_passphrase(const char *, int);
8439 int ask_permission(const char *, ...) __attribute__((format(printf, 1, 2)));
8440 int read_keyfile_line(FILE *, const char *, char *, size_t, u_long *);
8441 int match_pattern(const char *, const char *);
8442 int match_pattern_list(const char *, const char *, u_int, int);
8443 int match_hostname(const char *, const char *, u_int);
8444 int match_host_and_ip(const char *, const char *, const char *);
8445 int match_user(const char *, const char *, const char *, const char *);
8446 char *match_list(const char *, const char *, u_int *);
8447 int addr_match_list(const char *, const char *);
8448 int addr_match_cidr_list(const char *, const char *);
8449 typedef enum {
8450  HOST_OK, HOST_NEW, HOST_CHANGED, HOST_REVOKED, HOST_FOUND
8451 } HostStatus;
8452 typedef enum {
8453  MRK_ERROR, MRK_NONE, MRK_REVOKE, MRK_CA
8454 } HostkeyMarker;
8455 struct hostkey_entry {
8456  char *host;
8457  char *file;
8458  u_long line;
8459  Key *key;
8460  HostkeyMarker marker;
8461 };
8462 struct hostkeys;
8463 struct hostkeys *init_hostkeys(void);
8464 void load_hostkeys(struct hostkeys *, const char *, const char *);
8465 void free_hostkeys(struct hostkeys *);
8466 HostStatus check_key_in_hostkeys(struct hostkeys *, Key *,
8467     const struct hostkey_entry **);
8468 int lookup_key_in_hostkeys_by_type(struct hostkeys *, int,
8469     const struct hostkey_entry **);
8470 int hostfile_read_key(char **, int *, Key *);
8471 int add_host_to_hostfile(const char *, const char *, const Key *, int);
8472 char *host_hash(const char *, const char *, u_int);
8473 enum sshfp_types {
8474  SSHFP_KEY_RESERVED = 0,
8475  SSHFP_KEY_RSA = 1,
8476  SSHFP_KEY_DSA = 2,
8477  SSHFP_KEY_ECDSA = 3
8478 };
8479 enum sshfp_hashes {
8480  SSHFP_HASH_RESERVED = 0,
8481  SSHFP_HASH_SHA1 = 1,
8482  SSHFP_HASH_SHA256 = 2,
8483  SSHFP_HASH_MAX = 3
8484 };
8485 int verify_host_key_dns(const char *, struct sockaddr *, Key *, int *);
8486 int export_dns_rr(const char *, Key *, FILE *, int);
8487 int pkcs11_init(int);
8488 void pkcs11_terminate(void);
8489 int pkcs11_add_provider(char *, char *, Key ***);
8490 int pkcs11_del_provider(char *);
8491 size_t
8492 atomicio6(ssize_t (*f) (int, void *, size_t), int fd, void *_s, size_t n,
8493     int (*cb)(void *, size_t), void *);
8494 size_t atomicio(ssize_t (*)(int, void *, size_t), int, void *, size_t);
8495 size_t
8496 atomiciov6(ssize_t (*f) (int, const struct iovec *, int), int fd,
8497     const struct iovec *_iov, int iovcnt, int (*cb)(void *, size_t), void *);
8498 size_t atomiciov(ssize_t (*)(int, const struct iovec *, int),
8499     int, const struct iovec *, int);
8500 struct ssh_krl;
8501 struct ssh_krl *ssh_krl_init(void);
8502 void ssh_krl_free(struct ssh_krl *krl);
8503 void ssh_krl_set_version(struct ssh_krl *krl, u_int64_t version);
8504 void ssh_krl_set_sign_key(struct ssh_krl *krl, const Key *sign_key);
8505 void ssh_krl_set_comment(struct ssh_krl *krl, const char *comment);
8506 int ssh_krl_revoke_cert_by_serial(struct ssh_krl *krl, const Key *ca_key,
8507     u_int64_t serial);
8508 int ssh_krl_revoke_cert_by_serial_range(struct ssh_krl *krl, const Key *ca_key,
8509     u_int64_t lo, u_int64_t hi);
8510 int ssh_krl_revoke_cert_by_key_id(struct ssh_krl *krl, const Key *ca_key,
8511     const char *key_id);
8512 int ssh_krl_revoke_key_explicit(struct ssh_krl *krl, const Key *key);
8513 int ssh_krl_revoke_key_sha1(struct ssh_krl *krl, const Key *key);
8514 int ssh_krl_revoke_key(struct ssh_krl *krl, const Key *key);
8515 int ssh_krl_to_blob(struct ssh_krl *krl, Buffer *buf, const Key **sign_keys,
8516     u_int nsign_keys);
8517 int ssh_krl_from_blob(Buffer *buf, struct ssh_krl **krlp,
8518     const Key **sign_ca_keys, u_int nsign_ca_keys);
8519 int ssh_krl_check_key(struct ssh_krl *krl, const Key *key);
8520 int ssh_krl_file_contains_key(const char *path, const Key *key);
8521 u_int32_t bits = 0;
8522 int change_passphrase = 0;
8523 int change_comment = 0;
8524 int quiet = 0;
8525 int log_level = SYSLOG_LEVEL_INFO;
8526 int hash_hosts = 0;
8527 int find_host = 0;
8528 int delete_host = 0;
8529 int show_cert = 0;
8530 int print_fingerprint = 0;
8531 int print_bubblebabble = 0;
8532 char identity_file[1024];
8533 int have_identity = 0;
8534 char *identity_passphrase = ((void *)0);
8535 char *identity_new_passphrase = ((void *)0);
8536 char *identity_comment = ((void *)0);
8537 char *ca_key_path = ((void *)0);
8538 unsigned long long cert_serial = 0;
8539 u_int cert_key_type = 1;
8540 char *cert_key_id = ((void *)0);
8541 char *cert_principals = ((void *)0);
8542 u_int64_t cert_valid_from = 0;
8543 u_int64_t cert_valid_to = ~0ULL;
8544 u_int32_t certflags_flags = ((1)|(1<<1)| (1<<2)|(1<<3)|(1<<4));
8545 char *certflags_command = ((void *)0);
8546 char *certflags_src_addr = ((void *)0);
8547 int convert_to = 0;
8548 int convert_from = 0;
8549 enum {
8550  FMT_RFC4716,
8551  FMT_PKCS8,
8552  FMT_PEM
8553 } convert_format = FMT_RFC4716;
8554 int print_public = 0;
8555 int print_generic = 0;
8556 char *key_type_name = ((void *)0);
8557 char *pkcs11provider = ((void *)0);
8558 int use_new_format = 0;
8559 char *new_format_cipher = ((void *)0);
8560 int rounds = 0;
8561 extern char *__progname;
8562 char hostname[64];
8563 int gen_candidates(FILE *, u_int32_t, u_int32_t, BIGNUM *);
8564 int prime_test(FILE *, FILE *, u_int32_t, u_int32_t, char *, unsigned long,
8565     unsigned long);
8566 static void
8567 type_bits_valid(int type, u_int32_t *bitsp)
8568 {
8569  u_int maxbits;
8570  if (type == KEY_UNSPEC) {
8571   fprintf(stderr, "unknown key type %s\n", key_type_name);
8572   exit(1);
8573  }
8574  if (*bitsp == 0) {
8575   if (type == KEY_DSA)
8576    *bitsp = 1024;
8577   else if (type == KEY_ECDSA)
8578    *bitsp = 256;
8579   else
8580    *bitsp = 2048;
8581  }
8582  maxbits = (type == KEY_DSA) ?
8583      10000 : 16384;
8584  if (*bitsp > maxbits) {
8585   fprintf(stderr, "key bits exceeds maximum %d\n", maxbits);
8586   exit(1);
8587  }
8588  if (type == KEY_DSA && *bitsp != 1024)
8589   fatal("DSA keys must be 1024 bits");
8590  else if (type != KEY_ECDSA && type != KEY_ED25519 && *bitsp < 768)
8591   fatal("Key must at least be 768 bits");
8592  else if (type == KEY_ECDSA && key_ecdsa_bits_to_nid(*bitsp) == -1)
8593   fatal("Invalid ECDSA key length - valid lengths are "
8594       "256, 384 or 521 bits");
8595 }
8596 static void
8597 ask_filename(struct passwd *pw, const char *prompt)
8598 {
8599  char buf[1024];
8600  char *name = ((void *)0);
8601  if (key_type_name == ((void *)0))
8602   name = ".ssh" "/id_rsa";
8603  else {
8604   switch (key_type_from_name(key_type_name)) {
8605   case KEY_RSA1:
8606    name = ".ssh" "/identity";
8607    break;
8608   case KEY_DSA_CERT:
8609   case KEY_DSA_CERT_V00:
8610   case KEY_DSA:
8611    name = ".ssh" "/id_dsa";
8612    break;
8613   case KEY_ECDSA_CERT:
8614   case KEY_ECDSA:
8615    name = ".ssh" "/id_ecdsa";
8616    break;
8617   case KEY_RSA_CERT:
8618   case KEY_RSA_CERT_V00:
8619   case KEY_RSA:
8620    name = ".ssh" "/id_rsa";
8621    break;
8622   case KEY_ED25519:
8623   case KEY_ED25519_CERT:
8624    name = ".ssh" "/id_ed25519";
8625    break;
8626   default:
8627    fprintf(stderr, "bad key type\n");
8628    exit(1);
8629    break;
8630   }
8631  }
8632  snprintf(identity_file, sizeof(identity_file), "%s/%s", pw->pw_dir, name);
8633  fprintf(stderr, "%s (%s): ", prompt, identity_file);
8634  if (fgets(buf, sizeof(buf), stdin) == ((void *)0))
8635   exit(1);
8636  buf[__extension__ ({ char __r0, __r1, __r2; (__builtin_constant_p ("\n") && ((size_t)(const void *)(("\n") + 1) - (size_t)(const void *)("\n") == 1) ? ((__builtin_constant_p (buf) && ((size_t)(const void *)((buf) + 1) - (size_t)(const void *)(buf) == 1)) ? __builtin_strcspn (buf, "\n") : ((__r0 = ((const char *) ("\n"))[0], __r0 == '\0') ? strlen (buf) : ((__r1 = ((const char *) ("\n"))[1], __r1 == '\0') ? __strcspn_c1 (buf, __r0) : ((__r2 = ((const char *) ("\n"))[2], __r2 == '\0') ? __strcspn_c2 (buf, __r0, __r1) : (((const char *) ("\n"))[3] == '\0' ? __strcspn_c3 (buf, __r0, __r1, __r2) : __builtin_strcspn (buf, "\n")))))) : __builtin_strcspn (buf, "\n")); })] = '\0';
8637  if (__extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (buf) && __builtin_constant_p ("") && (__s1_len = strlen (buf), __s2_len = strlen (""), (!((size_t)(const void *)((buf) + 1) - (size_t)(const void *)(buf) == 1) || __s1_len >= 4) && (!((size_t)(const void *)(("") + 1) - (size_t)(const void *)("") == 1) || __s2_len >= 4)) ? __builtin_strcmp (buf, "") : (__builtin_constant_p (buf) && ((size_t)(const void *)((buf) + 1) - (size_t)(const void *)(buf) == 1) && (__s1_len = strlen (buf), __s1_len < 4) ? (__builtin_constant_p ("") && ((size_t)(const void *)(("") + 1) - (size_t)(const void *)("") == 1) ? __builtin_strcmp (buf, "") : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (""); register int __result = (((const unsigned char *) (const char *) (buf))[0] - __s2[0]); if (__s1_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) (buf))[1] - __s2[1]); if (__s1_len > 1 && __result == 0) { __result = (((const unsigned char *) (const char *) (buf))[2] - __s2[2]); if (__s1_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) (buf))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p ("") && ((size_t)(const void *)(("") + 1) - (size_t)(const void *)("") == 1) && (__s2_len = strlen (""), __s2_len < 4) ? (__builtin_constant_p (buf) && ((size_t)(const void *)((buf) + 1) - (size_t)(const void *)(buf) == 1) ? __builtin_strcmp (buf, "") : (__extension__ ({ const unsigned char *__s1 = (const unsigned char *) (const char *) (buf); register int __result = __s1[0] - ((const unsigned char *) (const char *) (""))[0]; if (__s2_len > 0 && __result == 0) { __result = (__s1[1] - ((const unsigned char *) (const char *) (""))[1]); if (__s2_len > 1 && __result == 0) { __result = (__s1[2] - ((const unsigned char *) (const char *) (""))[2]); if (__s2_len > 2 && __result == 0) __result = (__s1[3] - ((const unsigned char *) (const char *) (""))[3]); } } __result; }))) : __builtin_strcmp (buf, "")))); }) != 0)
8638   strlcpy(identity_file, buf, sizeof(identity_file));
8639  have_identity = 1;
8640 }
8641 static Key *
8642 load_identity(char *filename)
8643 {
8644  char *pass;
8645  Key *prv;
8646  prv = key_load_private(filename, "", ((void *)0));
8647  if (prv == ((void *)0)) {
8648   if (identity_passphrase)
8649    pass = xstrdup(identity_passphrase);
8650   else
8651    pass = read_passphrase("Enter passphrase: ",
8652        0x0002);
8653   prv = key_load_private(filename, pass, ((void *)0));
8654   explicit_bzero(pass, strlen(pass));
8655   free(pass);
8656  }
8657  return prv;
8658 }
8659 static void
8660 do_convert_to_ssh2(struct passwd *pw, Key *k)
8661 {
8662  u_int len;
8663  u_char *blob;
8664  char comment[61];
8665  if (k->type == KEY_RSA1) {
8666   fprintf(stderr, "version 1 keys are not supported\n");
8667   exit(1);
8668  }
8669  if (key_to_blob(k, &blob, &len) <= 0) {
8670   fprintf(stderr, "key_to_blob failed\n");
8671   exit(1);
8672  }
8673  snprintf(comment, sizeof(comment),
8674      "%u-bit %s, converted by %s@%s from OpenSSH",
8675      key_size(k), key_type(k),
8676      pw->pw_name, hostname);
8677  fprintf(stdout, "%s\n", "---- BEGIN SSH2 PUBLIC KEY ----");
8678  fprintf(stdout, "Comment: \"%s\"\n", comment);
8679  dump_base64(stdout, blob, len);
8680  fprintf(stdout, "%s\n", "---- END SSH2 PUBLIC KEY ----");
8681  key_free(k);
8682  free(blob);
8683  exit(0);
8684 }
8685 static void
8686 do_convert_to_pkcs8(Key *k)
8687 {
8688  switch (key_type_plain(k->type)) {
8689  case KEY_RSA1:
8690  case KEY_RSA:
8691   if (!PEM_write_RSA_PUBKEY(stdout, k->rsa))
8692    fatal("PEM_write_RSA_PUBKEY failed");
8693   break;
8694  case KEY_DSA:
8695   if (!PEM_write_DSA_PUBKEY(stdout, k->dsa))
8696    fatal("PEM_write_DSA_PUBKEY failed");
8697   break;
8698  case KEY_ECDSA:
8699   if (!PEM_write_EC_PUBKEY(stdout, k->ecdsa))
8700    fatal("PEM_write_EC_PUBKEY failed");
8701   break;
8702  default:
8703   fatal("%s: unsupported key type %s", __func__, key_type(k));
8704  }
8705  exit(0);
8706 }
8707 static void
8708 do_convert_to_pem(Key *k)
8709 {
8710  switch (key_type_plain(k->type)) {
8711  case KEY_RSA1:
8712  case KEY_RSA:
8713   if (!PEM_write_RSAPublicKey(stdout, k->rsa))
8714    fatal("PEM_write_RSAPublicKey failed");
8715   break;
8716  default:
8717   fatal("%s: unsupported key type %s", __func__, key_type(k));
8718  }
8719  exit(0);
8720 }
8721 static void
8722 do_convert_to(struct passwd *pw)
8723 {
8724  Key *k;
8725  struct stat st;
8726  if (!have_identity)
8727   ask_filename(pw, "Enter file in which the key is");
8728  if (stat(identity_file, &st) < 0)
8729   fatal("%s: %s: %s", __progname, identity_file, strerror((*__errno_location ())));
8730  if ((k = key_load_public(identity_file, ((void *)0))) == ((void *)0)) {
8731   if ((k = load_identity(identity_file)) == ((void *)0)) {
8732    fprintf(stderr, "load failed\n");
8733    exit(1);
8734   }
8735  }
8736  switch (convert_format) {
8737  case FMT_RFC4716:
8738   do_convert_to_ssh2(pw, k);
8739   break;
8740  case FMT_PKCS8:
8741   do_convert_to_pkcs8(k);
8742   break;
8743  case FMT_PEM:
8744   do_convert_to_pem(k);
8745   break;
8746  default:
8747   fatal("%s: unknown key format %d", __func__, convert_format);
8748  }
8749  exit(0);
8750 }
8751 static void
8752 buffer_get_bignum_bits(Buffer *b, BIGNUM *value)
8753 {
8754  u_int bignum_bits = buffer_get_int(b);
8755  u_int bytes = (bignum_bits + 7) / 8;
8756  if (buffer_len(b) < bytes)
8757   fatal("buffer_get_bignum_bits: input buffer too small: "
8758       "need %d have %d", bytes, buffer_len(b));
8759  if (BN_bin2bn(buffer_ptr(b), bytes, value) == ((void *)0))
8760   fatal("buffer_get_bignum_bits: BN_bin2bn failed");
8761  buffer_consume(b, bytes);
8762 }
8763 static Key *
8764 do_convert_private_ssh2_from_blob(u_char *blob, u_int blen)
8765 {
8766  Buffer b;
8767  Key *key = ((void *)0);
8768  char *type, *cipher;
8769  u_char *sig, data[] = "abcde12345";
8770  int magic, rlen, ktype, i1, i2, i3, i4;
8771  u_int slen;
8772  u_long e;
8773  buffer_init(&b);
8774  buffer_append(&b, blob, blen);
8775  magic = buffer_get_int(&b);
8776  if (magic != 0x3f6ff9eb) {
8777   error("bad magic 0x%x != 0x%x", magic, 0x3f6ff9eb);
8778   buffer_free(&b);
8779   return ((void *)0);
8780  }
8781  i1 = buffer_get_int(&b);
8782  type = buffer_get_string(&b, ((void *)0));
8783  cipher = buffer_get_string(&b, ((void *)0));
8784  i2 = buffer_get_int(&b);
8785  i3 = buffer_get_int(&b);
8786  i4 = buffer_get_int(&b);
8787  debug("ignore (%d %d %d %d)", i1, i2, i3, i4);
8788  if (__extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (cipher) && __builtin_constant_p ("none") && (__s1_len = strlen (cipher), __s2_len = strlen ("none"), (!((size_t)(const void *)((cipher) + 1) - (size_t)(const void *)(cipher) == 1) || __s1_len >= 4) && (!((size_t)(const void *)(("none") + 1) - (size_t)(const void *)("none") == 1) || __s2_len >= 4)) ? __builtin_strcmp (cipher, "none") : (__builtin_constant_p (cipher) && ((size_t)(const void *)((cipher) + 1) - (size_t)(const void *)(cipher) == 1) && (__s1_len = strlen (cipher), __s1_len < 4) ? (__builtin_constant_p ("none") && ((size_t)(const void *)(("none") + 1) - (size_t)(const void *)("none") == 1) ? __builtin_strcmp (cipher, "none") : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) ("none"); register int __result = (((const unsigned char *) (const char *) (cipher))[0] - __s2[0]); if (__s1_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) (cipher))[1] - __s2[1]); if (__s1_len > 1 && __result == 0) { __result = (((const unsigned char *) (const char *) (cipher))[2] - __s2[2]); if (__s1_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) (cipher))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p ("none") && ((size_t)(const void *)(("none") + 1) - (size_t)(const void *)("none") == 1) && (__s2_len = strlen ("none"), __s2_len < 4) ? (__builtin_constant_p (cipher) && ((size_t)(const void *)((cipher) + 1) - (size_t)(const void *)(cipher) == 1) ? __builtin_strcmp (cipher, "none") : (__extension__ ({ const unsigned char *__s1 = (const unsigned char *) (const char *) (cipher); register int __result = __s1[0] - ((const unsigned char *) (const char *) ("none"))[0]; if (__s2_len > 0 && __result == 0) { __result = (__s1[1] - ((const unsigned char *) (const char *) ("none"))[1]); if (__s2_len > 1 && __result == 0) { __result = (__s1[2] - ((const unsigned char *) (const char *) ("none"))[2]); if (__s2_len > 2 && __result == 0) __result = (__s1[3] - ((const unsigned char *) (const char *) ("none"))[3]); } } __result; }))) : __builtin_strcmp (cipher, "none")))); }) != 0) {
8789   error("unsupported cipher %s", cipher);
8790   free(cipher);
8791   buffer_free(&b);
8792   free(type);
8793   return ((void *)0);
8794  }
8795  free(cipher);
8796  if (strstr(type, "dsa")) {
8797   ktype = KEY_DSA;
8798  } else if (strstr(type, "rsa")) {
8799   ktype = KEY_RSA;
8800  } else {
8801   buffer_free(&b);
8802   free(type);
8803   return ((void *)0);
8804  }
8805  key = key_new_private(ktype);
8806  free(type);
8807  switch (key->type) {
8808  case KEY_DSA:
8809   buffer_get_bignum_bits(&b, key->dsa->p);
8810   buffer_get_bignum_bits(&b, key->dsa->g);
8811   buffer_get_bignum_bits(&b, key->dsa->q);
8812   buffer_get_bignum_bits(&b, key->dsa->pub_key);
8813   buffer_get_bignum_bits(&b, key->dsa->priv_key);
8814   break;
8815  case KEY_RSA:
8816   e = buffer_get_char(&b);
8817   debug("e %lx", e);
8818   if (e < 30) {
8819    e <<= 8;
8820    e += buffer_get_char(&b);
8821    debug("e %lx", e);
8822    e <<= 8;
8823    e += buffer_get_char(&b);
8824    debug("e %lx", e);
8825   }
8826   if (!BN_set_word(key->rsa->e, e)) {
8827    buffer_free(&b);
8828    key_free(key);
8829    return ((void *)0);
8830   }
8831   buffer_get_bignum_bits(&b, key->rsa->d);
8832   buffer_get_bignum_bits(&b, key->rsa->n);
8833   buffer_get_bignum_bits(&b, key->rsa->iqmp);
8834   buffer_get_bignum_bits(&b, key->rsa->q);
8835   buffer_get_bignum_bits(&b, key->rsa->p);
8836   rsa_generate_additional_parameters(key->rsa);
8837   break;
8838  }
8839  rlen = buffer_len(&b);
8840  if (rlen != 0)
8841   error("do_convert_private_ssh2_from_blob: "
8842       "remaining bytes in key blob %d", rlen);
8843  buffer_free(&b);
8844  key_sign(key, &sig, &slen, data, sizeof(data));
8845  key_verify(key, sig, slen, data, sizeof(data));
8846  free(sig);
8847  return key;
8848 }
8849 static int
8850 get_line(FILE *fp, char *line, size_t len)
8851 {
8852  int c;
8853  size_t pos = 0;
8854  line[0] = '\0';
8855  while ((c = fgetc(fp)) != (-1)) {
8856   if (pos >= len - 1) {
8857    fprintf(stderr, "input line too long.\n");
8858    exit(1);
8859   }
8860   switch (c) {
8861   case '\r':
8862    c = fgetc(fp);
8863    if (c != (-1) && c != '\n' && ungetc(c, fp) == (-1)) {
8864     fprintf(stderr, "unget: %s\n", strerror((*__errno_location ())));
8865     exit(1);
8866    }
8867    return pos;
8868   case '\n':
8869    return pos;
8870   }
8871   line[pos++] = c;
8872   line[pos] = '\0';
8873  }
8874  return -1;
8875 }
8876 static void
8877 do_convert_from_ssh2(struct passwd *pw, Key **k, int *private)
8878 {
8879  int blen;
8880  u_int len;
8881  char line[1024];
8882  u_char blob[8096];
8883  char encoded[8096];
8884  int escaped = 0;
8885  FILE *fp;
8886  if ((fp = fopen(identity_file, "r")) == ((void *)0))
8887   fatal("%s: %s: %s", __progname, identity_file, strerror((*__errno_location ())));
8888  encoded[0] = '\0';
8889  while ((blen = get_line(fp, line, sizeof(line))) != -1) {
8890   if (blen > 0 && line[blen - 1] == '\\')
8891    escaped++;
8892   if ((__extension__ (__builtin_constant_p (4) && ((__builtin_constant_p (line) && strlen (line) < ((size_t) (4))) || (__builtin_constant_p ("----") && strlen ("----") < ((size_t) (4)))) ? __extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (line) && __builtin_constant_p ("----") && (__s1_len = strlen (line), __s2_len = strlen ("----"), (!((size_t)(const void *)((line) + 1) - (size_t)(const void *)(line) == 1) || __s1_len >= 4) && (!((size_t)(const void *)(("----") + 1) - (size_t)(const void *)("----") == 1) || __s2_len >= 4)) ? __builtin_strcmp (line, "----") : (__builtin_constant_p (line) && ((size_t)(const void *)((line) + 1) - (size_t)(const void *)(line) == 1) && (__s1_len = strlen (line), __s1_len < 4) ? (__builtin_constant_p ("----") && ((size_t)(const void *)(("----") + 1) - (size_t)(const void *)("----") == 1) ? __builtin_strcmp (line, "----") : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) ("----"); register int __result = (((const unsigned char *) (const char *) (line))[0] - __s2[0]); if (__s1_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) (line))[1] - __s2[1]); if (__s1_len > 1 && __result == 0) { __result = (((const unsigned char *) (const char *) (line))[2] - __s2[2]); if (__s1_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) (line))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p ("----") && ((size_t)(const void *)(("----") + 1) - (size_t)(const void *)("----") == 1) && (__s2_len = strlen ("----"), __s2_len < 4) ? (__builtin_constant_p (line) && ((size_t)(const void *)((line) + 1) - (size_t)(const void *)(line) == 1) ? __builtin_strcmp (line, "----") : (__extension__ ({ const unsigned char *__s1 = (const unsigned char *) (const char *) (line); register int __result = __s1[0] - ((const unsigned char *) (const char *) ("----"))[0]; if (__s2_len > 0 && __result == 0) { __result = (__s1[1] - ((const unsigned char *) (const char *) ("----"))[1]); if (__s2_len > 1 && __result == 0) { __result = (__s1[2] - ((const unsigned char *) (const char *) ("----"))[2]); if (__s2_len > 2 && __result == 0) __result = (__s1[3] - ((const unsigned char *) (const char *) ("----"))[3]); } } __result; }))) : __builtin_strcmp (line, "----")))); }) : strncmp (line, "----", 4))) == 0 ||
8893       strstr(line, ": ") != ((void *)0)) {
8894    if (strstr(line, "---- BEGIN SSH2 ENCRYPTED PRIVATE KEY ----") != ((void *)0))
8895     *private = 1;
8896    if (strstr(line, " END ") != ((void *)0)) {
8897     break;
8898    }
8899    continue;
8900   }
8901   if (escaped) {
8902    escaped--;
8903    continue;
8904   }
8905   strlcat(encoded, line, sizeof(encoded));
8906  }
8907  len = strlen(encoded);
8908  if (((len % 4) == 3) &&
8909      (encoded[len-1] == '=') &&
8910      (encoded[len-2] == '=') &&
8911      (encoded[len-3] == '='))
8912   encoded[len-3] = '\0';
8913  blen = uudecode(encoded, blob, sizeof(blob));
8914  if (blen < 0) {
8915   fprintf(stderr, "uudecode failed.\n");
8916   exit(1);
8917  }
8918  *k = *private ?
8919      do_convert_private_ssh2_from_blob(blob, blen) :
8920      key_from_blob(blob, blen);
8921  if (*k == ((void *)0)) {
8922   fprintf(stderr, "decode blob failed.\n");
8923   exit(1);
8924  }
8925  fclose(fp);
8926 }
8927 static void
8928 do_convert_from_pkcs8(Key **k, int *private)
8929 {
8930  EVP_PKEY *pubkey;
8931  FILE *fp;
8932  if ((fp = fopen(identity_file, "r")) == ((void *)0))
8933   fatal("%s: %s: %s", __progname, identity_file, strerror((*__errno_location ())));
8934  if ((pubkey = PEM_read_PUBKEY(fp, ((void *)0), ((void *)0), ((void *)0))) == ((void *)0)) {
8935   fatal("%s: %s is not a recognised public key format", __func__,
8936       identity_file);
8937  }
8938  fclose(fp);
8939  switch (EVP_PKEY_type(pubkey->type)) {
8940  case 6:
8941   *k = key_new(KEY_UNSPEC);
8942   (*k)->type = KEY_RSA;
8943   (*k)->rsa = EVP_PKEY_get1_RSA(pubkey);
8944   break;
8945  case 116:
8946   *k = key_new(KEY_UNSPEC);
8947   (*k)->type = KEY_DSA;
8948   (*k)->dsa = EVP_PKEY_get1_DSA(pubkey);
8949   break;
8950  case 408:
8951   *k = key_new(KEY_UNSPEC);
8952   (*k)->type = KEY_ECDSA;
8953   (*k)->ecdsa = EVP_PKEY_get1_EC_KEY(pubkey);
8954   (*k)->ecdsa_nid = key_ecdsa_key_to_nid((*k)->ecdsa);
8955   break;
8956  default:
8957   fatal("%s: unsupported pubkey type %d", __func__,
8958       EVP_PKEY_type(pubkey->type));
8959  }
8960  EVP_PKEY_free(pubkey);
8961  return;
8962 }
8963 static void
8964 do_convert_from_pem(Key **k, int *private)
8965 {
8966  FILE *fp;
8967  RSA *rsa;
8968  if ((fp = fopen(identity_file, "r")) == ((void *)0))
8969   fatal("%s: %s: %s", __progname, identity_file, strerror((*__errno_location ())));
8970  if ((rsa = PEM_read_RSAPublicKey(fp, ((void *)0), ((void *)0), ((void *)0))) != ((void *)0)) {
8971   *k = key_new(KEY_UNSPEC);
8972   (*k)->type = KEY_RSA;
8973   (*k)->rsa = rsa;
8974   fclose(fp);
8975   return;
8976  }
8977  fatal("%s: unrecognised raw private key format", __func__);
8978 }
8979 static void
8980 do_convert_from(struct passwd *pw)
8981 {
8982  Key *k = ((void *)0);
8983  int private = 0, ok = 0;
8984  struct stat st;
8985  if (!have_identity)
8986   ask_filename(pw, "Enter file in which the key is");
8987  if (stat(identity_file, &st) < 0)
8988   fatal("%s: %s: %s", __progname, identity_file, strerror((*__errno_location ())));
8989  switch (convert_format) {
8990  case FMT_RFC4716:
8991   do_convert_from_ssh2(pw, &k, &private);
8992   break;
8993  case FMT_PKCS8:
8994   do_convert_from_pkcs8(&k, &private);
8995   break;
8996  case FMT_PEM:
8997   do_convert_from_pem(&k, &private);
8998   break;
8999  default:
9000   fatal("%s: unknown key format %d", __func__, convert_format);
9001  }
9002  if (!private)
9003   ok = key_write(k, stdout);
9004   if (ok)
9005    fprintf(stdout, "\n");
9006  else {
9007   switch (k->type) {
9008   case KEY_DSA:
9009    ok = PEM_write_DSAPrivateKey(stdout, k->dsa, ((void *)0),
9010        ((void *)0), 0, ((void *)0), ((void *)0));
9011    break;
9012   case KEY_ECDSA:
9013    ok = PEM_write_ECPrivateKey(stdout, k->ecdsa, ((void *)0),
9014        ((void *)0), 0, ((void *)0), ((void *)0));
9015    break;
9016   case KEY_RSA:
9017    ok = PEM_write_RSAPrivateKey(stdout, k->rsa, ((void *)0),
9018        ((void *)0), 0, ((void *)0), ((void *)0));
9019    break;
9020   default:
9021    fatal("%s: unsupported key type %s", __func__,
9022        key_type(k));
9023   }
9024  }
9025  if (!ok) {
9026   fprintf(stderr, "key write failed\n");
9027   exit(1);
9028  }
9029  key_free(k);
9030  exit(0);
9031 }
9032 static void
9033 do_print_public(struct passwd *pw)
9034 {
9035  Key *prv;
9036  struct stat st;
9037  if (!have_identity)
9038   ask_filename(pw, "Enter file in which the key is");
9039  if (stat(identity_file, &st) < 0) {
9040   perror(identity_file);
9041   exit(1);
9042  }
9043  prv = load_identity(identity_file);
9044  if (prv == ((void *)0)) {
9045   fprintf(stderr, "load failed\n");
9046   exit(1);
9047  }
9048  if (!key_write(prv, stdout))
9049   fprintf(stderr, "key_write failed");
9050  key_free(prv);
9051  fprintf(stdout, "\n");
9052  exit(0);
9053 }
9054 static void
9055 do_download(struct passwd *pw)
9056 {
9057  Key **keys = ((void *)0);
9058  int i, nkeys;
9059  enum fp_rep rep;
9060  enum fp_type fptype;
9061  char *fp, *ra;
9062  fptype = print_bubblebabble ? SSH_FP_SHA1 : SSH_FP_MD5;
9063  rep = print_bubblebabble ? SSH_FP_BUBBLEBABBLE : SSH_FP_HEX;
9064  pkcs11_init(0);
9065  nkeys = pkcs11_add_provider(pkcs11provider, ((void *)0), &keys);
9066  if (nkeys <= 0)
9067   fatal("cannot read public key from pkcs11");
9068  for (i = 0; i < nkeys; i++) {
9069   if (print_fingerprint) {
9070    fp = key_fingerprint(keys[i], fptype, rep);
9071    ra = key_fingerprint(keys[i], SSH_FP_MD5,
9072        SSH_FP_RANDOMART);
9073    printf("%u %s %s (PKCS11 key)\n", key_size(keys[i]),
9074        fp, key_type(keys[i]));
9075    if (log_level >= SYSLOG_LEVEL_VERBOSE)
9076     printf("%s\n", ra);
9077    free(ra);
9078    free(fp);
9079   } else {
9080    key_write(keys[i], stdout);
9081    fprintf(stdout, "\n");
9082   }
9083   key_free(keys[i]);
9084  }
9085  free(keys);
9086  pkcs11_terminate();
9087  exit(0);
9088 }
9089 static void
9090 do_fingerprint(struct passwd *pw)
9091 {
9092  FILE *f;
9093  Key *public;
9094  char *comment = ((void *)0), *cp, *ep, line[16*1024], *fp, *ra;
9095  int i, skip = 0, num = 0, invalid = 1;
9096  enum fp_rep rep;
9097  enum fp_type fptype;
9098  struct stat st;
9099  fptype = print_bubblebabble ? SSH_FP_SHA1 : SSH_FP_MD5;
9100  rep = print_bubblebabble ? SSH_FP_BUBBLEBABBLE : SSH_FP_HEX;
9101  if (!have_identity)
9102   ask_filename(pw, "Enter file in which the key is");
9103  if (stat(identity_file, &st) < 0) {
9104   perror(identity_file);
9105   exit(1);
9106  }
9107  public = key_load_public(identity_file, &comment);
9108  if (public != ((void *)0)) {
9109   fp = key_fingerprint(public, fptype, rep);
9110   ra = key_fingerprint(public, SSH_FP_MD5, SSH_FP_RANDOMART);
9111   printf("%u %s %s (%s)\n", key_size(public), fp, comment,
9112       key_type(public));
9113   if (log_level >= SYSLOG_LEVEL_VERBOSE)
9114    printf("%s\n", ra);
9115   key_free(public);
9116   free(comment);
9117   free(ra);
9118   free(fp);
9119   exit(0);
9120  }
9121  if (comment) {
9122   free(comment);
9123   comment = ((void *)0);
9124  }
9125  if ((f = fopen(identity_file, "r")) == ((void *)0))
9126   fatal("%s: %s: %s", __progname, identity_file, strerror((*__errno_location ())));
9127  while (fgets(line, sizeof(line), f)) {
9128   if ((cp = (__extension__ (__builtin_constant_p ('\n') && !__builtin_constant_p (line) && ('\n') == '\0' ? (char *) __rawmemchr (line, '\n') : __builtin_strchr (line, '\n')))) == ((void *)0)) {
9129    error("line %d too long: %.40s...",
9130        num + 1, line);
9131    skip = 1;
9132    continue;
9133   }
9134   num++;
9135   if (skip) {
9136    skip = 0;
9137    continue;
9138   }
9139   *cp = '\0';
9140   for (cp = line; *cp == ' ' || *cp == '\t'; cp++)
9141    ;
9142   if (!*cp || *cp == '\n' || *cp == '#')
9143    continue;
9144   i = strtol(cp, &ep, 10);
9145   if (i == 0 || ep == ((void *)0) || (*ep != ' ' && *ep != '\t')) {
9146    int quoted = 0;
9147    comment = cp;
9148    for (; *cp && (quoted || (*cp != ' ' &&
9149        *cp != '\t')); cp++) {
9150     if (*cp == '\\' && cp[1] == '"')
9151      cp++;
9152     else if (*cp == '"')
9153      quoted = !quoted;
9154    }
9155    if (!*cp)
9156     continue;
9157    *cp++ = '\0';
9158   }
9159   ep = cp;
9160   public = key_new(KEY_RSA1);
9161   if (key_read(public, &cp) != 1) {
9162    cp = ep;
9163    key_free(public);
9164    public = key_new(KEY_UNSPEC);
9165    if (key_read(public, &cp) != 1) {
9166     key_free(public);
9167     continue;
9168    }
9169   }
9170   comment = *cp ? cp : comment;
9171   fp = key_fingerprint(public, fptype, rep);
9172   ra = key_fingerprint(public, SSH_FP_MD5, SSH_FP_RANDOMART);
9173   printf("%u %s %s (%s)\n", key_size(public), fp,
9174       comment ? comment : "no comment", key_type(public));
9175   if (log_level >= SYSLOG_LEVEL_VERBOSE)
9176    printf("%s\n", ra);
9177   free(ra);
9178   free(fp);
9179   key_free(public);
9180   invalid = 0;
9181  }
9182  fclose(f);
9183  if (invalid) {
9184   printf("%s is not a public key file.\n", identity_file);
9185   exit(1);
9186  }
9187  exit(0);
9188 }
9189 static void
9190 do_gen_all_hostkeys(struct passwd *pw)
9191 {
9192  struct {
9193   char *key_type;
9194   char *key_type_display;
9195   char *path;
9196  } key_types[] = {
9197   { "rsa1", "RSA1", "/etc/ssh" "/ssh_host_key" },
9198   { "rsa", "RSA" ,"/etc/ssh" "/ssh_host_rsa_key" },
9199   { "dsa", "DSA", "/etc/ssh" "/ssh_host_dsa_key" },
9200   { "ecdsa", "ECDSA","/etc/ssh" "/ssh_host_ecdsa_key" },
9201   { "ed25519", "ED25519","/etc/ssh" "/ssh_host_ed25519_key" },
9202   { ((void *)0), ((void *)0), ((void *)0) }
9203  };
9204  int first = 0;
9205  struct stat st;
9206  Key *private, *public;
9207  char comment[1024];
9208  int i, type, fd;
9209  FILE *f;
9210  for (i = 0; key_types[i].key_type; i++) {
9211   if (stat(key_types[i].path, &st) == 0)
9212    continue;
9213   if ((*__errno_location ()) != 2) {
9214    printf("Could not stat %s: %s", key_types[i].path,
9215        strerror((*__errno_location ())));
9216    first = 0;
9217    continue;
9218   }
9219   if (first == 0) {
9220    first = 1;
9221    printf("%s: generating new host keys: ", __progname);
9222   }
9223   printf("%s ", key_types[i].key_type_display);
9224   fflush(stdout);
9225   type = key_type_from_name(key_types[i].key_type);
9226   strlcpy(identity_file, key_types[i].path, sizeof(identity_file));
9227   bits = 0;
9228   type_bits_valid(type, &bits);
9229   private = key_generate(type, bits);
9230   if (private == ((void *)0)) {
9231    fprintf(stderr, "key_generate failed\n");
9232    first = 0;
9233    continue;
9234   }
9235   public = key_from_private(private);
9236   snprintf(comment, sizeof comment, "%s@%s", pw->pw_name,
9237       hostname);
9238   if (!key_save_private(private, identity_file, "", comment,
9239       use_new_format, new_format_cipher, rounds)) {
9240    printf("Saving the key failed: %s.\n", identity_file);
9241    key_free(private);
9242    key_free(public);
9243    first = 0;
9244    continue;
9245   }
9246   key_free(private);
9247   strlcat(identity_file, ".pub", sizeof(identity_file));
9248   fd = open(identity_file, 01 | 00000400 | 01000, 0644);
9249   if (fd == -1) {
9250    printf("Could not save your public key in %s\n",
9251        identity_file);
9252    key_free(public);
9253    first = 0;
9254    continue;
9255   }
9256   f = fdopen(fd, "w");
9257   if (f == ((void *)0)) {
9258    printf("fdopen %s failed\n", identity_file);
9259    key_free(public);
9260    first = 0;
9261    continue;
9262   }
9263   if (!key_write(public, f)) {
9264    fprintf(stderr, "write key failed\n");
9265    key_free(public);
9266    first = 0;
9267    continue;
9268   }
9269   fprintf(f, " %s\n", comment);
9270   fclose(f);
9271   key_free(public);
9272  }
9273  if (first != 0)
9274   printf("\n");
9275 }
9276 static void
9277 printhost(FILE *f, const char *name, Key *public, int ca, int hash)
9278 {
9279  if (print_fingerprint) {
9280   enum fp_rep rep;
9281   enum fp_type fptype;
9282   char *fp, *ra;
9283   fptype = print_bubblebabble ? SSH_FP_SHA1 : SSH_FP_MD5;
9284   rep = print_bubblebabble ? SSH_FP_BUBBLEBABBLE : SSH_FP_HEX;
9285   fp = key_fingerprint(public, fptype, rep);
9286   ra = key_fingerprint(public, SSH_FP_MD5, SSH_FP_RANDOMART);
9287   printf("%u %s %s (%s)\n", key_size(public), fp, name,
9288       key_type(public));
9289   if (log_level >= SYSLOG_LEVEL_VERBOSE)
9290    printf("%s\n", ra);
9291   free(ra);
9292   free(fp);
9293  } else {
9294   if (hash && (name = host_hash(name, ((void *)0), 0)) == ((void *)0))
9295    fatal("hash_host failed");
9296   fprintf(f, "%s%s%s ", ca ? "@cert-authority" : "", ca ? " " : "", name);
9297   if (!key_write(public, f))
9298    fatal("key_write failed");
9299   fprintf(f, "\n");
9300  }
9301 }
9302 static void
9303 do_known_hosts(struct passwd *pw, const char *name)
9304 {
9305  FILE *in, *out = stdout;
9306  Key *pub;
9307  char *cp, *cp2, *kp, *kp2;
9308  char line[16*1024], tmp[4096], old[4096];
9309  int c, skip = 0, inplace = 0, num = 0, invalid = 0, has_unhashed = 0;
9310  int ca;
9311  int found_key = 0;
9312  if (!have_identity) {
9313   cp = tilde_expand_filename("~/" ".ssh" "/known_hosts", pw->pw_uid);
9314   if (strlcpy(identity_file, cp, sizeof(identity_file)) >=
9315       sizeof(identity_file))
9316    fatal("Specified known hosts path too long");
9317   free(cp);
9318   have_identity = 1;
9319  }
9320  if ((in = fopen(identity_file, "r")) == ((void *)0))
9321   fatal("%s: %s: %s", __progname, identity_file, strerror((*__errno_location ())));
9322  if (!find_host && (hash_hosts || delete_host)) {
9323   if (strlcpy(tmp, identity_file, sizeof(tmp)) >= sizeof(tmp) ||
9324       strlcat(tmp, ".XXXXXXXXXX", sizeof(tmp)) >= sizeof(tmp) ||
9325       strlcpy(old, identity_file, sizeof(old)) >= sizeof(old) ||
9326       strlcat(old, ".old", sizeof(old)) >= sizeof(old))
9327    fatal("known_hosts path too long");
9328   umask(077);
9329   if ((c = mkstemp(tmp)) == -1)
9330    fatal("mkstemp: %s", strerror((*__errno_location ())));
9331   if ((out = fdopen(c, "w")) == ((void *)0)) {
9332    c = (*__errno_location ());
9333    unlink(tmp);
9334    fatal("fdopen: %s", strerror(c));
9335   }
9336   inplace = 1;
9337  }
9338  while (fgets(line, sizeof(line), in)) {
9339   if ((cp = (__extension__ (__builtin_constant_p ('\n') && !__builtin_constant_p (line) && ('\n') == '\0' ? (char *) __rawmemchr (line, '\n') : __builtin_strchr (line, '\n')))) == ((void *)0)) {
9340    error("line %d too long: %.40s...", num + 1, line);
9341    skip = 1;
9342    invalid = 1;
9343    continue;
9344   }
9345   num++;
9346   if (skip) {
9347    skip = 0;
9348    continue;
9349   }
9350   *cp = '\0';
9351   for (cp = line; *cp == ' ' || *cp == '\t'; cp++)
9352    ;
9353   if (!*cp || *cp == '\n' || *cp == '#') {
9354    if (inplace)
9355     fprintf(out, "%s\n", cp);
9356    continue;
9357   }
9358   if (strncasecmp(cp, "@cert-authority", sizeof("@cert-authority") - 1) == 0 &&
9359       (cp[sizeof("@cert-authority") - 1] == ' ' ||
9360       cp[sizeof("@cert-authority") - 1] == '\t')) {
9361    ca = 1;
9362    cp += sizeof("@cert-authority");
9363   } else
9364    ca = 0;
9365   for (kp = cp; *kp && *kp != ' ' && *kp != '\t'; kp++)
9366    ;
9367   if (*kp == '\0' || *(kp + 1) == '\0') {
9368    error("line %d missing key: %.40s...",
9369        num, line);
9370    invalid = 1;
9371    continue;
9372   }
9373   *kp++ = '\0';
9374   kp2 = kp;
9375   pub = key_new(KEY_RSA1);
9376   if (key_read(pub, &kp) != 1) {
9377    kp = kp2;
9378    key_free(pub);
9379    pub = key_new(KEY_UNSPEC);
9380    if (key_read(pub, &kp) != 1) {
9381     error("line %d invalid key: %.40s...",
9382         num, line);
9383     key_free(pub);
9384     invalid = 1;
9385     continue;
9386    }
9387   }
9388   if (*cp == '|') {
9389    if (find_host || delete_host) {
9390     cp2 = host_hash(name, cp, strlen(cp));
9391     if (cp2 == ((void *)0)) {
9392      error("line %d: invalid hashed "
9393          "name: %.64s...", num, line);
9394      invalid = 1;
9395      continue;
9396     }
9397     c = (__extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (cp2) && __builtin_constant_p (cp) && (__s1_len = strlen (cp2), __s2_len = strlen (cp), (!((size_t)(const void *)((cp2) + 1) - (size_t)(const void *)(cp2) == 1) || __s1_len >= 4) && (!((size_t)(const void *)((cp) + 1) - (size_t)(const void *)(cp) == 1) || __s2_len >= 4)) ? __builtin_strcmp (cp2, cp) : (__builtin_constant_p (cp2) && ((size_t)(const void *)((cp2) + 1) - (size_t)(const void *)(cp2) == 1) && (__s1_len = strlen (cp2), __s1_len < 4) ? (__builtin_constant_p (cp) && ((size_t)(const void *)((cp) + 1) - (size_t)(const void *)(cp) == 1) ? __builtin_strcmp (cp2, cp) : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (cp); register int __result = (((const unsigned char *) (const char *) (cp2))[0] - __s2[0]); if (__s1_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) (cp2))[1] - __s2[1]); if (__s1_len > 1 && __result == 0) { __result = (((const unsigned char *) (const char *) (cp2))[2] - __s2[2]); if (__s1_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) (cp2))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p (cp) && ((size_t)(const void *)((cp) + 1) - (size_t)(const void *)(cp) == 1) && (__s2_len = strlen (cp), __s2_len < 4) ? (__builtin_constant_p (cp2) && ((size_t)(const void *)((cp2) + 1) - (size_t)(const void *)(cp2) == 1) ? __builtin_strcmp (cp2, cp) : (__extension__ ({ const unsigned char *__s1 = (const unsigned char *) (const char *) (cp2); register int __result = __s1[0] - ((const unsigned char *) (const char *) (cp))[0]; if (__s2_len > 0 && __result == 0) { __result = (__s1[1] - ((const unsigned char *) (const char *) (cp))[1]); if (__s2_len > 1 && __result == 0) { __result = (__s1[2] - ((const unsigned char *) (const char *) (cp))[2]); if (__s2_len > 2 && __result == 0) __result = (__s1[3] - ((const unsigned char *) (const char *) (cp))[3]); } } __result; }))) : __builtin_strcmp (cp2, cp)))); }) == 0);
9398     if (find_host && c) {
9399      if (!quiet)
9400       printf("# Host %s found: "
9401           "line %d type %s%s\n", name,
9402           num, key_type(pub),
9403           ca ? " (CA key)" : "");
9404      printhost(out, cp, pub, ca, 0);
9405      found_key = 1;
9406     }
9407     if (delete_host) {
9408      if (!c && !ca)
9409       printhost(out, cp, pub, ca, 0);
9410      else
9411       printf("# Host %s found: "
9412           "line %d type %s\n", name,
9413           num, key_type(pub));
9414     }
9415    } else if (hash_hosts)
9416     printhost(out, cp, pub, ca, 0);
9417   } else {
9418    if (find_host || delete_host) {
9419     c = (match_hostname(name, cp,
9420         strlen(cp)) == 1);
9421     if (find_host && c) {
9422      if (!quiet)
9423       printf("# Host %s found: "
9424           "line %d type %s%s\n", name,
9425           num, key_type(pub),
9426           ca ? " (CA key)" : "");
9427      printhost(out, name, pub,
9428          ca, hash_hosts && !ca);
9429      found_key = 1;
9430     }
9431     if (delete_host) {
9432      if (!c && !ca)
9433       printhost(out, cp, pub, ca, 0);
9434      else
9435       printf("# Host %s found: "
9436           "line %d type %s\n", name,
9437           num, key_type(pub));
9438     }
9439    } else if (hash_hosts) {
9440     for (cp2 = __extension__ ({ char __r0, __r1, __r2; (__builtin_constant_p (",") && ((size_t)(const void *)((",") + 1) - (size_t)(const void *)(",") == 1) && (__r0 = ((const char *) (","))[0], ((const char *) (","))[0] != '\0') ? ((__r1 = ((const char *) (","))[1], ((const char *) (","))[1] == '\0') ? __strsep_1c (&cp, __r0) : ((__r2 = ((const char *) (","))[2], __r2 == '\0') ? __strsep_2c (&cp, __r0, __r1) : (((const char *) (","))[3] == '\0' ? __strsep_3c (&cp, __r0, __r1, __r2) : __strsep_g (&cp, ",")))) : __strsep_g (&cp, ",")); });
9441         cp2 != ((void *)0) && *cp2 != '\0';
9442         cp2 = __extension__ ({ char __r0, __r1, __r2; (__builtin_constant_p (",") && ((size_t)(const void *)((",") + 1) - (size_t)(const void *)(",") == 1) && (__r0 = ((const char *) (","))[0], ((const char *) (","))[0] != '\0') ? ((__r1 = ((const char *) (","))[1], ((const char *) (","))[1] == '\0') ? __strsep_1c (&cp, __r0) : ((__r2 = ((const char *) (","))[2], __r2 == '\0') ? __strsep_2c (&cp, __r0, __r1) : (((const char *) (","))[3] == '\0' ? __strsep_3c (&cp, __r0, __r1, __r2) : __strsep_g (&cp, ",")))) : __strsep_g (&cp, ",")); })) {
9443      if (ca) {
9444       fprintf(stderr, "Warning: "
9445           "ignoring CA key for host: "
9446           "%.64s\n", cp2);
9447       printhost(out, cp2, pub, ca, 0);
9448      } else if (__extension__ ({ char __r0, __r1, __r2; (__builtin_constant_p ("*?!") && ((size_t)(const void *)(("*?!") + 1) - (size_t)(const void *)("*?!") == 1) ? ((__builtin_constant_p (cp2) && ((size_t)(const void *)((cp2) + 1) - (size_t)(const void *)(cp2) == 1)) ? __builtin_strcspn (cp2, "*?!") : ((__r0 = ((const char *) ("*?!"))[0], __r0 == '\0') ? strlen (cp2) : ((__r1 = ((const char *) ("*?!"))[1], __r1 == '\0') ? __strcspn_c1 (cp2, __r0) : ((__r2 = ((const char *) ("*?!"))[2], __r2 == '\0') ? __strcspn_c2 (cp2, __r0, __r1) : (((const char *) ("*?!"))[3] == '\0' ? __strcspn_c3 (cp2, __r0, __r1, __r2) : __builtin_strcspn (cp2, "*?!")))))) : __builtin_strcspn (cp2, "*?!")); }) !=
9449          strlen(cp2)) {
9450       fprintf(stderr, "Warning: "
9451           "ignoring host name with "
9452           "metacharacters: %.64s\n",
9453           cp2);
9454       printhost(out, cp2, pub, ca, 0);
9455      } else
9456       printhost(out, cp2, pub, ca, 1);
9457     }
9458     has_unhashed = 1;
9459    }
9460   }
9461   key_free(pub);
9462  }
9463  fclose(in);
9464  if (invalid) {
9465   fprintf(stderr, "%s is not a valid known_hosts file.\n",
9466       identity_file);
9467   if (inplace) {
9468    fprintf(stderr, "Not replacing existing known_hosts "
9469        "file because of errors\n");
9470    fclose(out);
9471    unlink(tmp);
9472   }
9473   exit(1);
9474  }
9475  if (inplace) {
9476   fclose(out);
9477   if (unlink(old) == -1 && (*__errno_location ()) != 2)
9478    fatal("unlink %.100s: %s", old, strerror((*__errno_location ())));
9479   if (link(identity_file, old) == -1)
9480    fatal("link %.100s to %.100s: %s", identity_file, old,
9481        strerror((*__errno_location ())));
9482   if (rename(tmp, identity_file) == -1) {
9483    error("rename\"%s\" to \"%s\": %s", tmp, identity_file,
9484        strerror((*__errno_location ())));
9485    unlink(tmp);
9486    unlink(old);
9487    exit(1);
9488   }
9489   fprintf(stderr, "%s updated.\n", identity_file);
9490   fprintf(stderr, "Original contents retained as %s\n", old);
9491   if (has_unhashed) {
9492    fprintf(stderr, "WARNING: %s contains unhashed "
9493        "entries\n", old);
9494    fprintf(stderr, "Delete this file to ensure privacy "
9495        "of hostnames\n");
9496   }
9497  }
9498  exit (find_host && !found_key);
9499 }
9500 static void
9501 do_change_passphrase(struct passwd *pw)
9502 {
9503  char *comment;
9504  char *old_passphrase, *passphrase1, *passphrase2;
9505  struct stat st;
9506  Key *private;
9507  if (!have_identity)
9508   ask_filename(pw, "Enter file in which the key is");
9509  if (stat(identity_file, &st) < 0) {
9510   perror(identity_file);
9511   exit(1);
9512  }
9513  private = key_load_private(identity_file, "", &comment);
9514  if (private == ((void *)0)) {
9515   if (identity_passphrase)
9516    old_passphrase = xstrdup(identity_passphrase);
9517   else
9518    old_passphrase =
9519        read_passphrase("Enter old passphrase: ",
9520        0x0002);
9521   private = key_load_private(identity_file, old_passphrase,
9522       &comment);
9523   explicit_bzero(old_passphrase, strlen(old_passphrase));
9524   free(old_passphrase);
9525   if (private == ((void *)0)) {
9526    printf("Bad passphrase.\n");
9527    exit(1);
9528   }
9529  }
9530  printf("Key has comment '%s'\n", comment);
9531  if (identity_new_passphrase) {
9532   passphrase1 = xstrdup(identity_new_passphrase);
9533   passphrase2 = ((void *)0);
9534  } else {
9535   passphrase1 =
9536    read_passphrase("Enter new passphrase (empty for no "
9537        "passphrase): ", 0x0002);
9538   passphrase2 = read_passphrase("Enter same passphrase again: ",
9539       0x0002);
9540   if (__extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (passphrase1) && __builtin_constant_p (passphrase2) && (__s1_len = strlen (passphrase1), __s2_len = strlen (passphrase2), (!((size_t)(const void *)((passphrase1) + 1) - (size_t)(const void *)(passphrase1) == 1) || __s1_len >= 4) && (!((size_t)(const void *)((passphrase2) + 1) - (size_t)(const void *)(passphrase2) == 1) || __s2_len >= 4)) ? __builtin_strcmp (passphrase1, passphrase2) : (__builtin_constant_p (passphrase1) && ((size_t)(const void *)((passphrase1) + 1) - (size_t)(const void *)(passphrase1) == 1) && (__s1_len = strlen (passphrase1), __s1_len < 4) ? (__builtin_constant_p (passphrase2) && ((size_t)(const void *)((passphrase2) + 1) - (size_t)(const void *)(passphrase2) == 1) ? __builtin_strcmp (passphrase1, passphrase2) : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (passphrase2); register int __result = (((const unsigned char *) (const char *) (passphrase1))[0] - __s2[0]); if (__s1_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) (passphrase1))[1] - __s2[1]); if (__s1_len > 1 && __result == 0) { __result = (((const unsigned char *) (const char *) (passphrase1))[2] - __s2[2]); if (__s1_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) (passphrase1))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p (passphrase2) && ((size_t)(const void *)((passphrase2) + 1) - (size_t)(const void *)(passphrase2) == 1) && (__s2_len = strlen (passphrase2), __s2_len < 4) ? (__builtin_constant_p (passphrase1) && ((size_t)(const void *)((passphrase1) + 1) - (size_t)(const void *)(passphrase1) == 1) ? __builtin_strcmp (passphrase1, passphrase2) : (__extension__ ({ const unsigned char *__s1 = (const unsigned char *) (const char *) (passphrase1); register int __result = __s1[0] - ((const unsigned char *) (const char *) (passphrase2))[0]; if (__s2_len > 0 && __result == 0) { __result = (__s1[1] - ((const unsigned char *) (const char *) (passphrase2))[1]); if (__s2_len > 1 && __result == 0) { __result = (__s1[2] - ((const unsigned char *) (const char *) (passphrase2))[2]); if (__s2_len > 2 && __result == 0) __result = (__s1[3] - ((const unsigned char *) (const char *) (passphrase2))[3]); } } __result; }))) : __builtin_strcmp (passphrase1, passphrase2)))); }) != 0) {
9541    explicit_bzero(passphrase1, strlen(passphrase1));
9542    explicit_bzero(passphrase2, strlen(passphrase2));
9543    free(passphrase1);
9544    free(passphrase2);
9545    printf("Pass phrases do not match.  Try again.\n");
9546    exit(1);
9547   }
9548   explicit_bzero(passphrase2, strlen(passphrase2));
9549   free(passphrase2);
9550  }
9551  if (!key_save_private(private, identity_file, passphrase1, comment,
9552      use_new_format, new_format_cipher, rounds)) {
9553   printf("Saving the key failed: %s.\n", identity_file);
9554   explicit_bzero(passphrase1, strlen(passphrase1));
9555   free(passphrase1);
9556   key_free(private);
9557   free(comment);
9558   exit(1);
9559  }
9560  explicit_bzero(passphrase1, strlen(passphrase1));
9561  free(passphrase1);
9562  key_free(private);
9563  free(comment);
9564  printf("Your identification has been saved with the new passphrase.\n");
9565  exit(0);
9566 }
9567 static int
9568 do_print_resource_record(struct passwd *pw, char *fname, char *hname)
9569 {
9570  Key *public;
9571  char *comment = ((void *)0);
9572  struct stat st;
9573  if (fname == ((void *)0))
9574   fatal("%s: no filename", __func__);
9575  if (stat(fname, &st) < 0) {
9576   if ((*__errno_location ()) == 2)
9577    return 0;
9578   perror(fname);
9579   exit(1);
9580  }
9581  public = key_load_public(fname, &comment);
9582  if (public != ((void *)0)) {
9583   export_dns_rr(hname, public, stdout, print_generic);
9584   key_free(public);
9585   free(comment);
9586   return 1;
9587  }
9588  if (comment)
9589   free(comment);
9590  printf("failed to read v2 public key from %s.\n", fname);
9591  exit(1);
9592 }
9593 static void
9594 do_change_comment(struct passwd *pw)
9595 {
9596  char new_comment[1024], *comment, *passphrase;
9597  Key *private;
9598  Key *public;
9599  struct stat st;
9600  FILE *f;
9601  int fd;
9602  if (!have_identity)
9603   ask_filename(pw, "Enter file in which the key is");
9604  if (stat(identity_file, &st) < 0) {
9605   perror(identity_file);
9606   exit(1);
9607  }
9608  private = key_load_private(identity_file, "", &comment);
9609  if (private == ((void *)0)) {
9610   if (identity_passphrase)
9611    passphrase = xstrdup(identity_passphrase);
9612   else if (identity_new_passphrase)
9613    passphrase = xstrdup(identity_new_passphrase);
9614   else
9615    passphrase = read_passphrase("Enter passphrase: ",
9616        0x0002);
9617   private = key_load_private(identity_file, passphrase, &comment);
9618   if (private == ((void *)0)) {
9619    explicit_bzero(passphrase, strlen(passphrase));
9620    free(passphrase);
9621    printf("Bad passphrase.\n");
9622    exit(1);
9623   }
9624  } else {
9625   passphrase = xstrdup("");
9626  }
9627  if (private->type != KEY_RSA1) {
9628   fprintf(stderr, "Comments are only supported for RSA1 keys.\n");
9629   key_free(private);
9630   exit(1);
9631  }
9632  printf("Key now has comment '%s'\n", comment);
9633  if (identity_comment) {
9634   strlcpy(new_comment, identity_comment, sizeof(new_comment));
9635  } else {
9636   printf("Enter new comment: ");
9637   fflush(stdout);
9638   if (!fgets(new_comment, sizeof(new_comment), stdin)) {
9639    explicit_bzero(passphrase, strlen(passphrase));
9640    key_free(private);
9641    exit(1);
9642   }
9643   new_comment[__extension__ ({ char __r0, __r1, __r2; (__builtin_constant_p ("\n") && ((size_t)(const void *)(("\n") + 1) - (size_t)(const void *)("\n") == 1) ? ((__builtin_constant_p (new_comment) && ((size_t)(const void *)((new_comment) + 1) - (size_t)(const void *)(new_comment) == 1)) ? __builtin_strcspn (new_comment, "\n") : ((__r0 = ((const char *) ("\n"))[0], __r0 == '\0') ? strlen (new_comment) : ((__r1 = ((const char *) ("\n"))[1], __r1 == '\0') ? __strcspn_c1 (new_comment, __r0) : ((__r2 = ((const char *) ("\n"))[2], __r2 == '\0') ? __strcspn_c2 (new_comment, __r0, __r1) : (((const char *) ("\n"))[3] == '\0' ? __strcspn_c3 (new_comment, __r0, __r1, __r2) : __builtin_strcspn (new_comment, "\n")))))) : __builtin_strcspn (new_comment, "\n")); })] = '\0';
9644  }
9645  if (!key_save_private(private, identity_file, passphrase, new_comment,
9646      use_new_format, new_format_cipher, rounds)) {
9647   printf("Saving the key failed: %s.\n", identity_file);
9648   explicit_bzero(passphrase, strlen(passphrase));
9649   free(passphrase);
9650   key_free(private);
9651   free(comment);
9652   exit(1);
9653  }
9654  explicit_bzero(passphrase, strlen(passphrase));
9655  free(passphrase);
9656  public = key_from_private(private);
9657  key_free(private);
9658  strlcat(identity_file, ".pub", sizeof(identity_file));
9659  fd = open(identity_file, 01 | 00000400 | 01000, 0644);
9660  if (fd == -1) {
9661   printf("Could not save your public key in %s\n", identity_file);
9662   exit(1);
9663  }
9664  f = fdopen(fd, "w");
9665  if (f == ((void *)0)) {
9666   printf("fdopen %s failed\n", identity_file);
9667   exit(1);
9668  }
9669  if (!key_write(public, f))
9670   fprintf(stderr, "write key failed\n");
9671  key_free(public);
9672  fprintf(f, " %s\n", new_comment);
9673  fclose(f);
9674  free(comment);
9675  printf("The comment in your key file has been changed.\n");
9676  exit(0);
9677 }
9678 static const char *
9679 fmt_validity(u_int64_t valid_from, u_int64_t valid_to)
9680 {
9681  char from[32], to[32];
9682  static char ret[64];
9683  time_t tt;
9684  struct tm *tm;
9685  *from = *to = '\0';
9686  if (valid_from == 0 && valid_to == 0xffffffffffffffffULL)
9687   return "forever";
9688  if (valid_from != 0) {
9689   tt = valid_from > 2147483647 ? 2147483647 : valid_from;
9690   tm = localtime(&tt);
9691   strftime(from, sizeof(from), "%Y-%m-%dT%H:%M:%S", tm);
9692  }
9693  if (valid_to != 0xffffffffffffffffULL) {
9694   tt = valid_to > 2147483647 ? 2147483647 : valid_to;
9695   tm = localtime(&tt);
9696   strftime(to, sizeof(to), "%Y-%m-%dT%H:%M:%S", tm);
9697  }
9698  if (valid_from == 0) {
9699   snprintf(ret, sizeof(ret), "before %s", to);
9700   return ret;
9701  }
9702  if (valid_to == 0xffffffffffffffffULL) {
9703   snprintf(ret, sizeof(ret), "after %s", from);
9704   return ret;
9705  }
9706  snprintf(ret, sizeof(ret), "from %s to %s", from, to);
9707  return ret;
9708 }
9709 static void
9710 add_flag_option(Buffer *c, const char *name)
9711 {
9712  debug3("%s: %s", __func__, name);
9713  buffer_put_cstring(c, name);
9714  buffer_put_string(c, ((void *)0), 0);
9715 }
9716 static void
9717 add_string_option(Buffer *c, const char *name, const char *value)
9718 {
9719  Buffer b;
9720  debug3("%s: %s=%s", __func__, name, value);
9721  buffer_init(&b);
9722  buffer_put_cstring(&b, value);
9723  buffer_put_cstring(c, name);
9724  buffer_put_string(c, buffer_ptr(&b), buffer_len(&b));
9725  buffer_free(&b);
9726 }
9727 static void
9728 prepare_options_buf(Buffer *c, int which)
9729 {
9730  buffer_clear(c);
9731  if ((which & 1) != 0 &&
9732      certflags_command != ((void *)0))
9733   add_string_option(c, "force-command", certflags_command);
9734  if ((which & 2) != 0 &&
9735      (certflags_flags & (1)) != 0)
9736   add_flag_option(c, "permit-X11-forwarding");
9737  if ((which & 2) != 0 &&
9738      (certflags_flags & (1<<1)) != 0)
9739   add_flag_option(c, "permit-agent-forwarding");
9740  if ((which & 2) != 0 &&
9741      (certflags_flags & (1<<2)) != 0)
9742   add_flag_option(c, "permit-port-forwarding");
9743  if ((which & 2) != 0 &&
9744      (certflags_flags & (1<<3)) != 0)
9745   add_flag_option(c, "permit-pty");
9746  if ((which & 2) != 0 &&
9747      (certflags_flags & (1<<4)) != 0)
9748   add_flag_option(c, "permit-user-rc");
9749  if ((which & 1) != 0 &&
9750      certflags_src_addr != ((void *)0))
9751   add_string_option(c, "source-address", certflags_src_addr);
9752 }
9753 static Key *
9754 load_pkcs11_key(char *path)
9755 {
9756  Key **keys = ((void *)0), *public, *private = ((void *)0);
9757  int i, nkeys;
9758  if ((public = key_load_public(path, ((void *)0))) == ((void *)0))
9759   fatal("Couldn't load CA public key \"%s\"", path);
9760  nkeys = pkcs11_add_provider(pkcs11provider, identity_passphrase, &keys);
9761  debug3("%s: %d keys", __func__, nkeys);
9762  if (nkeys <= 0)
9763   fatal("cannot read public key from pkcs11");
9764  for (i = 0; i < nkeys; i++) {
9765   if (key_equal_public(public, keys[i])) {
9766    private = keys[i];
9767    continue;
9768   }
9769   key_free(keys[i]);
9770  }
9771  free(keys);
9772  key_free(public);
9773  return private;
9774 }
9775 static void
9776 do_ca_sign(struct passwd *pw, int argc, char **argv)
9777 {
9778  int i, fd;
9779  u_int n;
9780  Key *ca, *public;
9781  char *otmp, *tmp, *cp, *out, *comment, **plist = ((void *)0);
9782  FILE *f;
9783  int v00 = 0;
9784  if (key_type_name != ((void *)0)) {
9785   switch (key_type_from_name(key_type_name)) {
9786   case KEY_RSA_CERT_V00:
9787   case KEY_DSA_CERT_V00:
9788    v00 = 1;
9789    break;
9790   case KEY_UNSPEC:
9791    if (strcasecmp(key_type_name, "v00") == 0) {
9792     v00 = 1;
9793     break;
9794    } else if (strcasecmp(key_type_name, "v01") == 0)
9795     break;
9796   default:
9797    fprintf(stderr, "unknown key type %s\n", key_type_name);
9798    exit(1);
9799   }
9800  }
9801  pkcs11_init(1);
9802  tmp = tilde_expand_filename(ca_key_path, pw->pw_uid);
9803  if (pkcs11provider != ((void *)0)) {
9804   if ((ca = load_pkcs11_key(tmp)) == ((void *)0))
9805    fatal("No PKCS#11 key matching %s found", ca_key_path);
9806  } else if ((ca = load_identity(tmp)) == ((void *)0))
9807   fatal("Couldn't load CA key \"%s\"", tmp);
9808  free(tmp);
9809  for (i = 0; i < argc; i++) {
9810   n = 0;
9811   if (cert_principals != ((void *)0)) {
9812    otmp = tmp = xstrdup(cert_principals);
9813    plist = ((void *)0);
9814    for (; (cp = __extension__ ({ char __r0, __r1, __r2; (__builtin_constant_p (",") && ((size_t)(const void *)((",") + 1) - (size_t)(const void *)(",") == 1) && (__r0 = ((const char *) (","))[0], ((const char *) (","))[0] != '\0') ? ((__r1 = ((const char *) (","))[1], ((const char *) (","))[1] == '\0') ? __strsep_1c (&tmp, __r0) : ((__r2 = ((const char *) (","))[2], __r2 == '\0') ? __strsep_2c (&tmp, __r0, __r1) : (((const char *) (","))[3] == '\0' ? __strsep_3c (&tmp, __r0, __r1, __r2) : __strsep_g (&tmp, ",")))) : __strsep_g (&tmp, ",")); })) != ((void *)0); n++) {
9815     plist = xrealloc(plist, n + 1, sizeof(*plist));
9816     if (*(plist[n] = xstrdup(cp)) == '\0')
9817      fatal("Empty principal name");
9818    }
9819    free(otmp);
9820   }
9821   tmp = tilde_expand_filename(argv[i], pw->pw_uid);
9822   if ((public = key_load_public(tmp, &comment)) == ((void *)0))
9823    fatal("%s: unable to open \"%s\"", __func__, tmp);
9824   if (public->type != KEY_RSA && public->type != KEY_DSA &&
9825       public->type != KEY_ECDSA && public->type != KEY_ED25519)
9826    fatal("%s: key \"%s\" type %s cannot be certified",
9827        __func__, tmp, key_type(public));
9828   if (key_to_certified(public, v00) != 0)
9829    fatal("Could not upgrade key %s to certificate", tmp);
9830   public->cert->type = cert_key_type;
9831   public->cert->serial = (u_int64_t)cert_serial;
9832   public->cert->key_id = xstrdup(cert_key_id);
9833   public->cert->nprincipals = n;
9834   public->cert->principals = plist;
9835   public->cert->valid_after = cert_valid_from;
9836   public->cert->valid_before = cert_valid_to;
9837   if (v00) {
9838    prepare_options_buf(&public->cert->critical,
9839        1|2);
9840   } else {
9841    prepare_options_buf(&public->cert->critical,
9842        1);
9843    prepare_options_buf(&public->cert->extensions,
9844        2);
9845   }
9846   public->cert->signature_key = key_from_private(ca);
9847   if (key_certify(public, ca) != 0)
9848    fatal("Couldn't not certify key %s", tmp);
9849   if ((cp = strrchr(tmp, '.')) != ((void *)0) && __extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (cp) && __builtin_constant_p (".pub") && (__s1_len = strlen (cp), __s2_len = strlen (".pub"), (!((size_t)(const void *)((cp) + 1) - (size_t)(const void *)(cp) == 1) || __s1_len >= 4) && (!((size_t)(const void *)((".pub") + 1) - (size_t)(const void *)(".pub") == 1) || __s2_len >= 4)) ? __builtin_strcmp (cp, ".pub") : (__builtin_constant_p (cp) && ((size_t)(const void *)((cp) + 1) - (size_t)(const void *)(cp) == 1) && (__s1_len = strlen (cp), __s1_len < 4) ? (__builtin_constant_p (".pub") && ((size_t)(const void *)((".pub") + 1) - (size_t)(const void *)(".pub") == 1) ? __builtin_strcmp (cp, ".pub") : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (".pub"); register int __result = (((const unsigned char *) (const char *) (cp))[0] - __s2[0]); if (__s1_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) (cp))[1] - __s2[1]); if (__s1_len > 1 && __result == 0) { __result = (((const unsigned char *) (const char *) (cp))[2] - __s2[2]); if (__s1_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) (cp))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p (".pub") && ((size_t)(const void *)((".pub") + 1) - (size_t)(const void *)(".pub") == 1) && (__s2_len = strlen (".pub"), __s2_len < 4) ? (__builtin_constant_p (cp) && ((size_t)(const void *)((cp) + 1) - (size_t)(const void *)(cp) == 1) ? __builtin_strcmp (cp, ".pub") : (__extension__ ({ const unsigned char *__s1 = (const unsigned char *) (const char *) (cp); register int __result = __s1[0] - ((const unsigned char *) (const char *) (".pub"))[0]; if (__s2_len > 0 && __result == 0) { __result = (__s1[1] - ((const unsigned char *) (const char *) (".pub"))[1]); if (__s2_len > 1 && __result == 0) { __result = (__s1[2] - ((const unsigned char *) (const char *) (".pub"))[2]); if (__s2_len > 2 && __result == 0) __result = (__s1[3] - ((const unsigned char *) (const char *) (".pub"))[3]); } } __result; }))) : __builtin_strcmp (cp, ".pub")))); }) == 0)
9850    *cp = '\0';
9851   xasprintf(&out, "%s-cert.pub", tmp);
9852   free(tmp);
9853   if ((fd = open(out, 01|00000400|01000, 0644)) == -1)
9854    fatal("Could not open \"%s\" for writing: %s", out,
9855        strerror((*__errno_location ())));
9856   if ((f = fdopen(fd, "w")) == ((void *)0))
9857    fatal("%s: fdopen: %s", __func__, strerror((*__errno_location ())));
9858   if (!key_write(public, f))
9859    fatal("Could not write certified key to %s", out);
9860   fprintf(f, " %s\n", comment);
9861   fclose(f);
9862   if (!quiet) {
9863    logit("Signed %s key %s: id \"%s\" serial %llu%s%s "
9864        "valid %s", key_cert_type(public),
9865        out, public->cert->key_id,
9866        (unsigned long long)public->cert->serial,
9867        cert_principals != ((void *)0) ? " for " : "",
9868        cert_principals != ((void *)0) ? cert_principals : "",
9869        fmt_validity(cert_valid_from, cert_valid_to));
9870   }
9871   key_free(public);
9872   free(out);
9873  }
9874  pkcs11_terminate();
9875  exit(0);
9876 }
9877 static u_int64_t
9878 parse_relative_time(const char *s, time_t now)
9879 {
9880  int64_t mul, secs;
9881  mul = *s == '-' ? -1 : 1;
9882  if ((secs = convtime(s + 1)) == -1)
9883   fatal("Invalid relative certificate time %s", s);
9884  if (mul == -1 && secs > now)
9885   fatal("Certificate time %s cannot be represented", s);
9886  return now + (u_int64_t)(secs * mul);
9887 }
9888 static u_int64_t
9889 parse_absolute_time(const char *s)
9890 {
9891  struct tm tm;
9892  time_t tt;
9893  char buf[32], *fmt;
9894  switch (strlen(s)) {
9895  case 8:
9896   fmt = "%Y-%m-%d";
9897   snprintf(buf, sizeof(buf), "%.4s-%.2s-%.2s", s, s + 4, s + 6);
9898   break;
9899  case 14:
9900   fmt = "%Y-%m-%dT%H:%M:%S";
9901   snprintf(buf, sizeof(buf), "%.4s-%.2s-%.2sT%.2s:%.2s:%.2s",
9902       s, s + 4, s + 6, s + 8, s + 10, s + 12);
9903   break;
9904  default:
9905   fatal("Invalid certificate time format %s", s);
9906  }
9907  memset(&tm, 0, sizeof(tm));
9908  if (strptime(buf, fmt, &tm) == ((void *)0))
9909   fatal("Invalid certificate time %s", s);
9910  if ((tt = mktime(&tm)) < 0)
9911   fatal("Certificate time %s cannot be represented", s);
9912  return (u_int64_t)tt;
9913 }
9914 static void
9915 parse_cert_times(char *timespec)
9916 {
9917  char *from, *to;
9918  time_t now = time(((void *)0));
9919  int64_t secs;
9920  if (*timespec == '+' && (__extension__ (__builtin_constant_p (':') && !__builtin_constant_p (timespec) && (':') == '\0' ? (char *) __rawmemchr (timespec, ':') : __builtin_strchr (timespec, ':'))) == ((void *)0)) {
9921   if ((secs = convtime(timespec + 1)) == -1)
9922    fatal("Invalid relative certificate life %s", timespec);
9923   cert_valid_to = now + secs;
9924   cert_valid_from = ((now - 59)/ 60) * 60;
9925   return;
9926  }
9927  from = xstrdup(timespec);
9928  to = (__extension__ (__builtin_constant_p (':') && !__builtin_constant_p (from) && (':') == '\0' ? (char *) __rawmemchr (from, ':') : __builtin_strchr (from, ':')));
9929  if (to == ((void *)0) || from == to || *(to + 1) == '\0')
9930   fatal("Invalid certificate life specification %s", timespec);
9931  *to++ = '\0';
9932  if (*from == '-' || *from == '+')
9933   cert_valid_from = parse_relative_time(from, now);
9934  else
9935   cert_valid_from = parse_absolute_time(from);
9936  if (*to == '-' || *to == '+')
9937   cert_valid_to = parse_relative_time(to, now);
9938  else
9939   cert_valid_to = parse_absolute_time(to);
9940  if (cert_valid_to <= cert_valid_from)
9941   fatal("Empty certificate validity interval");
9942  free(from);
9943 }
9944 static void
9945 add_cert_option(char *opt)
9946 {
9947  char *val;
9948  if (strcasecmp(opt, "clear") == 0)
9949   certflags_flags = 0;
9950  else if (strcasecmp(opt, "no-x11-forwarding") == 0)
9951   certflags_flags &= ~(1);
9952  else if (strcasecmp(opt, "permit-x11-forwarding") == 0)
9953   certflags_flags |= (1);
9954  else if (strcasecmp(opt, "no-agent-forwarding") == 0)
9955   certflags_flags &= ~(1<<1);
9956  else if (strcasecmp(opt, "permit-agent-forwarding") == 0)
9957   certflags_flags |= (1<<1);
9958  else if (strcasecmp(opt, "no-port-forwarding") == 0)
9959   certflags_flags &= ~(1<<2);
9960  else if (strcasecmp(opt, "permit-port-forwarding") == 0)
9961   certflags_flags |= (1<<2);
9962  else if (strcasecmp(opt, "no-pty") == 0)
9963   certflags_flags &= ~(1<<3);
9964  else if (strcasecmp(opt, "permit-pty") == 0)
9965   certflags_flags |= (1<<3);
9966  else if (strcasecmp(opt, "no-user-rc") == 0)
9967   certflags_flags &= ~(1<<4);
9968  else if (strcasecmp(opt, "permit-user-rc") == 0)
9969   certflags_flags |= (1<<4);
9970  else if (strncasecmp(opt, "force-command=", 14) == 0) {
9971   val = opt + 14;
9972   if (*val == '\0')
9973    fatal("Empty force-command option");
9974   if (certflags_command != ((void *)0))
9975    fatal("force-command already specified");
9976   certflags_command = xstrdup(val);
9977  } else if (strncasecmp(opt, "source-address=", 15) == 0) {
9978   val = opt + 15;
9979   if (*val == '\0')
9980    fatal("Empty source-address option");
9981   if (certflags_src_addr != ((void *)0))
9982    fatal("source-address already specified");
9983   if (addr_match_cidr_list(((void *)0), val) != 0)
9984    fatal("Invalid source-address list");
9985   certflags_src_addr = xstrdup(val);
9986  } else
9987   fatal("Unsupported certificate option \"%s\"", opt);
9988 }
9989 static void
9990 show_options(const Buffer *optbuf, int v00, int in_critical)
9991 {
9992  char *name;
9993  u_char *data;
9994  u_int dlen;
9995  Buffer options, option;
9996  buffer_init(&options);
9997  buffer_append(&options, buffer_ptr(optbuf), buffer_len(optbuf));
9998  buffer_init(&option);
9999  while (buffer_len(&options) != 0) {
10000   name = buffer_get_string(&options, ((void *)0));
10001   data = buffer_get_string_ptr(&options, &dlen);
10002   buffer_append(&option, data, dlen);
10003   printf("                %s", name);
10004   if ((v00 || !in_critical) &&
10005       (__extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (name) && __builtin_constant_p ("permit-X11-forwarding") && (__s1_len = strlen (name), __s2_len = strlen ("permit-X11-forwarding"), (!((size_t)(const void *)((name) + 1) - (size_t)(const void *)(name) == 1) || __s1_len >= 4) && (!((size_t)(const void *)(("permit-X11-forwarding") + 1) - (size_t)(const void *)("permit-X11-forwarding") == 1) || __s2_len >= 4)) ? __builtin_strcmp (name, "permit-X11-forwarding") : (__builtin_constant_p (name) && ((size_t)(const void *)((name) + 1) - (size_t)(const void *)(name) == 1) && (__s1_len = strlen (name), __s1_len < 4) ? (__builtin_constant_p ("permit-X11-forwarding") && ((size_t)(const void *)(("permit-X11-forwarding") + 1) - (size_t)(const void *)("permit-X11-forwarding") == 1) ? __builtin_strcmp (name, "permit-X11-forwarding") : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) ("permit-X11-forwarding"); register int __result = (((const unsigned char *) (const char *) (name))[0] - __s2[0]); if (__s1_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) (name))[1] - __s2[1]); if (__s1_len > 1 && __result == 0) { __result = (((const unsigned char *) (const char *) (name))[2] - __s2[2]); if (__s1_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) (name))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p ("permit-X11-forwarding") && ((size_t)(const void *)(("permit-X11-forwarding") + 1) - (size_t)(const void *)("permit-X11-forwarding") == 1) && (__s2_len = strlen ("permit-X11-forwarding"), __s2_len < 4) ? (__builtin_constant_p (name) && ((size_t)(const void *)((name) + 1) - (size_t)(const void *)(name) == 1) ? __builtin_strcmp (name, "permit-X11-forwarding") : (__extension__ ({ const unsigned char *__s1 = (const unsigned char *) (const char *) (name); register int __result = __s1[0] - ((const unsigned char *) (const char *) ("permit-X11-forwarding"))[0]; if (__s2_len > 0 && __result == 0) { __result = (__s1[1] - ((const unsigned char *) (const char *) ("permit-X11-forwarding"))[1]); if (__s2_len > 1 && __result == 0) { __result = (__s1[2] - ((const unsigned char *) (const char *) ("permit-X11-forwarding"))[2]); if (__s2_len > 2 && __result == 0) __result = (__s1[3] - ((const unsigned char *) (const char *) ("permit-X11-forwarding"))[3]); } } __result; }))) : __builtin_strcmp (name, "permit-X11-forwarding")))); }) == 0 ||
10006       __extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (name) && __builtin_constant_p ("permit-agent-forwarding") && (__s1_len = strlen (name), __s2_len = strlen ("permit-agent-forwarding"), (!((size_t)(const void *)((name) + 1) - (size_t)(const void *)(name) == 1) || __s1_len >= 4) && (!((size_t)(const void *)(("permit-agent-forwarding") + 1) - (size_t)(const void *)("permit-agent-forwarding") == 1) || __s2_len >= 4)) ? __builtin_strcmp (name, "permit-agent-forwarding") : (__builtin_constant_p (name) && ((size_t)(const void *)((name) + 1) - (size_t)(const void *)(name) == 1) && (__s1_len = strlen (name), __s1_len < 4) ? (__builtin_constant_p ("permit-agent-forwarding") && ((size_t)(const void *)(("permit-agent-forwarding") + 1) - (size_t)(const void *)("permit-agent-forwarding") == 1) ? __builtin_strcmp (name, "permit-agent-forwarding") : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) ("permit-agent-forwarding"); register int __result = (((const unsigned char *) (const char *) (name))[0] - __s2[0]); if (__s1_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) (name))[1] - __s2[1]); if (__s1_len > 1 && __result == 0) { __result = (((const unsigned char *) (const char *) (name))[2] - __s2[2]); if (__s1_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) (name))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p ("permit-agent-forwarding") && ((size_t)(const void *)(("permit-agent-forwarding") + 1) - (size_t)(const void *)("permit-agent-forwarding") == 1) && (__s2_len = strlen ("permit-agent-forwarding"), __s2_len < 4) ? (__builtin_constant_p (name) && ((size_t)(const void *)((name) + 1) - (size_t)(const void *)(name) == 1) ? __builtin_strcmp (name, "permit-agent-forwarding") : (__extension__ ({ const unsigned char *__s1 = (const unsigned char *) (const char *) (name); register int __result = __s1[0] - ((const unsigned char *) (const char *) ("permit-agent-forwarding"))[0]; if (__s2_len > 0 && __result == 0) { __result = (__s1[1] - ((const unsigned char *) (const char *) ("permit-agent-forwarding"))[1]); if (__s2_len > 1 && __result == 0) { __result = (__s1[2] - ((const unsigned char *) (const char *) ("permit-agent-forwarding"))[2]); if (__s2_len > 2 && __result == 0) __result = (__s1[3] - ((const unsigned char *) (const char *) ("permit-agent-forwarding"))[3]); } } __result; }))) : __builtin_strcmp (name, "permit-agent-forwarding")))); }) == 0 ||
10007       __extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (name) && __builtin_constant_p ("permit-port-forwarding") && (__s1_len = strlen (name), __s2_len = strlen ("permit-port-forwarding"), (!((size_t)(const void *)((name) + 1) - (size_t)(const void *)(name) == 1) || __s1_len >= 4) && (!((size_t)(const void *)(("permit-port-forwarding") + 1) - (size_t)(const void *)("permit-port-forwarding") == 1) || __s2_len >= 4)) ? __builtin_strcmp (name, "permit-port-forwarding") : (__builtin_constant_p (name) && ((size_t)(const void *)((name) + 1) - (size_t)(const void *)(name) == 1) && (__s1_len = strlen (name), __s1_len < 4) ? (__builtin_constant_p ("permit-port-forwarding") && ((size_t)(const void *)(("permit-port-forwarding") + 1) - (size_t)(const void *)("permit-port-forwarding") == 1) ? __builtin_strcmp (name, "permit-port-forwarding") : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) ("permit-port-forwarding"); register int __result = (((const unsigned char *) (const char *) (name))[0] - __s2[0]); if (__s1_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) (name))[1] - __s2[1]); if (__s1_len > 1 && __result == 0) { __result = (((const unsigned char *) (const char *) (name))[2] - __s2[2]); if (__s1_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) (name))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p ("permit-port-forwarding") && ((size_t)(const void *)(("permit-port-forwarding") + 1) - (size_t)(const void *)("permit-port-forwarding") == 1) && (__s2_len = strlen ("permit-port-forwarding"), __s2_len < 4) ? (__builtin_constant_p (name) && ((size_t)(const void *)((name) + 1) - (size_t)(const void *)(name) == 1) ? __builtin_strcmp (name, "permit-port-forwarding") : (__extension__ ({ const unsigned char *__s1 = (const unsigned char *) (const char *) (name); register int __result = __s1[0] - ((const unsigned char *) (const char *) ("permit-port-forwarding"))[0]; if (__s2_len > 0 && __result == 0) { __result = (__s1[1] - ((const unsigned char *) (const char *) ("permit-port-forwarding"))[1]); if (__s2_len > 1 && __result == 0) { __result = (__s1[2] - ((const unsigned char *) (const char *) ("permit-port-forwarding"))[2]); if (__s2_len > 2 && __result == 0) __result = (__s1[3] - ((const unsigned char *) (const char *) ("permit-port-forwarding"))[3]); } } __result; }))) : __builtin_strcmp (name, "permit-port-forwarding")))); }) == 0 ||
10008       __extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (name) && __builtin_constant_p ("permit-pty") && (__s1_len = strlen (name), __s2_len = strlen ("permit-pty"), (!((size_t)(const void *)((name) + 1) - (size_t)(const void *)(name) == 1) || __s1_len >= 4) && (!((size_t)(const void *)(("permit-pty") + 1) - (size_t)(const void *)("permit-pty") == 1) || __s2_len >= 4)) ? __builtin_strcmp (name, "permit-pty") : (__builtin_constant_p (name) && ((size_t)(const void *)((name) + 1) - (size_t)(const void *)(name) == 1) && (__s1_len = strlen (name), __s1_len < 4) ? (__builtin_constant_p ("permit-pty") && ((size_t)(const void *)(("permit-pty") + 1) - (size_t)(const void *)("permit-pty") == 1) ? __builtin_strcmp (name, "permit-pty") : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) ("permit-pty"); register int __result = (((const unsigned char *) (const char *) (name))[0] - __s2[0]); if (__s1_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) (name))[1] - __s2[1]); if (__s1_len > 1 && __result == 0) { __result = (((const unsigned char *) (const char *) (name))[2] - __s2[2]); if (__s1_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) (name))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p ("permit-pty") && ((size_t)(const void *)(("permit-pty") + 1) - (size_t)(const void *)("permit-pty") == 1) && (__s2_len = strlen ("permit-pty"), __s2_len < 4) ? (__builtin_constant_p (name) && ((size_t)(const void *)((name) + 1) - (size_t)(const void *)(name) == 1) ? __builtin_strcmp (name, "permit-pty") : (__extension__ ({ const unsigned char *__s1 = (const unsigned char *) (const char *) (name); register int __result = __s1[0] - ((const unsigned char *) (const char *) ("permit-pty"))[0]; if (__s2_len > 0 && __result == 0) { __result = (__s1[1] - ((const unsigned char *) (const char *) ("permit-pty"))[1]); if (__s2_len > 1 && __result == 0) { __result = (__s1[2] - ((const unsigned char *) (const char *) ("permit-pty"))[2]); if (__s2_len > 2 && __result == 0) __result = (__s1[3] - ((const unsigned char *) (const char *) ("permit-pty"))[3]); } } __result; }))) : __builtin_strcmp (name, "permit-pty")))); }) == 0 ||
10009       __extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (name) && __builtin_constant_p ("permit-user-rc") && (__s1_len = strlen (name), __s2_len = strlen ("permit-user-rc"), (!((size_t)(const void *)((name) + 1) - (size_t)(const void *)(name) == 1) || __s1_len >= 4) && (!((size_t)(const void *)(("permit-user-rc") + 1) - (size_t)(const void *)("permit-user-rc") == 1) || __s2_len >= 4)) ? __builtin_strcmp (name, "permit-user-rc") : (__builtin_constant_p (name) && ((size_t)(const void *)((name) + 1) - (size_t)(const void *)(name) == 1) && (__s1_len = strlen (name), __s1_len < 4) ? (__builtin_constant_p ("permit-user-rc") && ((size_t)(const void *)(("permit-user-rc") + 1) - (size_t)(const void *)("permit-user-rc") == 1) ? __builtin_strcmp (name, "permit-user-rc") : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) ("permit-user-rc"); register int __result = (((const unsigned char *) (const char *) (name))[0] - __s2[0]); if (__s1_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) (name))[1] - __s2[1]); if (__s1_len > 1 && __result == 0) { __result = (((const unsigned char *) (const char *) (name))[2] - __s2[2]); if (__s1_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) (name))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p ("permit-user-rc") && ((size_t)(const void *)(("permit-user-rc") + 1) - (size_t)(const void *)("permit-user-rc") == 1) && (__s2_len = strlen ("permit-user-rc"), __s2_len < 4) ? (__builtin_constant_p (name) && ((size_t)(const void *)((name) + 1) - (size_t)(const void *)(name) == 1) ? __builtin_strcmp (name, "permit-user-rc") : (__extension__ ({ const unsigned char *__s1 = (const unsigned char *) (const char *) (name); register int __result = __s1[0] - ((const unsigned char *) (const char *) ("permit-user-rc"))[0]; if (__s2_len > 0 && __result == 0) { __result = (__s1[1] - ((const unsigned char *) (const char *) ("permit-user-rc"))[1]); if (__s2_len > 1 && __result == 0) { __result = (__s1[2] - ((const unsigned char *) (const char *) ("permit-user-rc"))[2]); if (__s2_len > 2 && __result == 0) __result = (__s1[3] - ((const unsigned char *) (const char *) ("permit-user-rc"))[3]); } } __result; }))) : __builtin_strcmp (name, "permit-user-rc")))); }) == 0))
10010    printf("\n");
10011   else if ((v00 || in_critical) &&
10012       (__extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (name) && __builtin_constant_p ("force-command") && (__s1_len = strlen (name), __s2_len = strlen ("force-command"), (!((size_t)(const void *)((name) + 1) - (size_t)(const void *)(name) == 1) || __s1_len >= 4) && (!((size_t)(const void *)(("force-command") + 1) - (size_t)(const void *)("force-command") == 1) || __s2_len >= 4)) ? __builtin_strcmp (name, "force-command") : (__builtin_constant_p (name) && ((size_t)(const void *)((name) + 1) - (size_t)(const void *)(name) == 1) && (__s1_len = strlen (name), __s1_len < 4) ? (__builtin_constant_p ("force-command") && ((size_t)(const void *)(("force-command") + 1) - (size_t)(const void *)("force-command") == 1) ? __builtin_strcmp (name, "force-command") : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) ("force-command"); register int __result = (((const unsigned char *) (const char *) (name))[0] - __s2[0]); if (__s1_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) (name))[1] - __s2[1]); if (__s1_len > 1 && __result == 0) { __result = (((const unsigned char *) (const char *) (name))[2] - __s2[2]); if (__s1_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) (name))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p ("force-command") && ((size_t)(const void *)(("force-command") + 1) - (size_t)(const void *)("force-command") == 1) && (__s2_len = strlen ("force-command"), __s2_len < 4) ? (__builtin_constant_p (name) && ((size_t)(const void *)((name) + 1) - (size_t)(const void *)(name) == 1) ? __builtin_strcmp (name, "force-command") : (__extension__ ({ const unsigned char *__s1 = (const unsigned char *) (const char *) (name); register int __result = __s1[0] - ((const unsigned char *) (const char *) ("force-command"))[0]; if (__s2_len > 0 && __result == 0) { __result = (__s1[1] - ((const unsigned char *) (const char *) ("force-command"))[1]); if (__s2_len > 1 && __result == 0) { __result = (__s1[2] - ((const unsigned char *) (const char *) ("force-command"))[2]); if (__s2_len > 2 && __result == 0) __result = (__s1[3] - ((const unsigned char *) (const char *) ("force-command"))[3]); } } __result; }))) : __builtin_strcmp (name, "force-command")))); }) == 0 ||
10013       __extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (name) && __builtin_constant_p ("source-address") && (__s1_len = strlen (name), __s2_len = strlen ("source-address"), (!((size_t)(const void *)((name) + 1) - (size_t)(const void *)(name) == 1) || __s1_len >= 4) && (!((size_t)(const void *)(("source-address") + 1) - (size_t)(const void *)("source-address") == 1) || __s2_len >= 4)) ? __builtin_strcmp (name, "source-address") : (__builtin_constant_p (name) && ((size_t)(const void *)((name) + 1) - (size_t)(const void *)(name) == 1) && (__s1_len = strlen (name), __s1_len < 4) ? (__builtin_constant_p ("source-address") && ((size_t)(const void *)(("source-address") + 1) - (size_t)(const void *)("source-address") == 1) ? __builtin_strcmp (name, "source-address") : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) ("source-address"); register int __result = (((const unsigned char *) (const char *) (name))[0] - __s2[0]); if (__s1_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) (name))[1] - __s2[1]); if (__s1_len > 1 && __result == 0) { __result = (((const unsigned char *) (const char *) (name))[2] - __s2[2]); if (__s1_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) (name))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p ("source-address") && ((size_t)(const void *)(("source-address") + 1) - (size_t)(const void *)("source-address") == 1) && (__s2_len = strlen ("source-address"), __s2_len < 4) ? (__builtin_constant_p (name) && ((size_t)(const void *)((name) + 1) - (size_t)(const void *)(name) == 1) ? __builtin_strcmp (name, "source-address") : (__extension__ ({ const unsigned char *__s1 = (const unsigned char *) (const char *) (name); register int __result = __s1[0] - ((const unsigned char *) (const char *) ("source-address"))[0]; if (__s2_len > 0 && __result == 0) { __result = (__s1[1] - ((const unsigned char *) (const char *) ("source-address"))[1]); if (__s2_len > 1 && __result == 0) { __result = (__s1[2] - ((const unsigned char *) (const char *) ("source-address"))[2]); if (__s2_len > 2 && __result == 0) __result = (__s1[3] - ((const unsigned char *) (const char *) ("source-address"))[3]); } } __result; }))) : __builtin_strcmp (name, "source-address")))); }) == 0)) {
10014    data = buffer_get_string(&option, ((void *)0));
10015    printf(" %s\n", data);
10016    free(data);
10017   } else {
10018    printf(" UNKNOWN OPTION (len %u)\n",
10019        buffer_len(&option));
10020    buffer_clear(&option);
10021   }
10022   free(name);
10023   if (buffer_len(&option) != 0)
10024    fatal("Option corrupt: extra data at end");
10025  }
10026  buffer_free(&option);
10027  buffer_free(&options);
10028 }
10029 static void
10030 do_show_cert(struct passwd *pw)
10031 {
10032  Key *key;
10033  struct stat st;
10034  char *key_fp, *ca_fp;
10035  u_int i, v00;
10036  if (!have_identity)
10037   ask_filename(pw, "Enter file in which the key is");
10038  if (stat(identity_file, &st) < 0)
10039   fatal("%s: %s: %s", __progname, identity_file, strerror((*__errno_location ())));
10040  if ((key = key_load_public(identity_file, ((void *)0))) == ((void *)0))
10041   fatal("%s is not a public key", identity_file);
10042  if (!key_is_cert(key))
10043   fatal("%s is not a certificate", identity_file);
10044  v00 = key->type == KEY_RSA_CERT_V00 || key->type == KEY_DSA_CERT_V00;
10045  key_fp = key_fingerprint(key, SSH_FP_MD5, SSH_FP_HEX);
10046  ca_fp = key_fingerprint(key->cert->signature_key,
10047      SSH_FP_MD5, SSH_FP_HEX);
10048  printf("%s:\n", identity_file);
10049  printf("        Type: %s %s certificate\n", key_ssh_name(key),
10050      key_cert_type(key));
10051  printf("        Public key: %s %s\n", key_type(key), key_fp);
10052  printf("        Signing CA: %s %s\n",
10053      key_type(key->cert->signature_key), ca_fp);
10054  printf("        Key ID: \"%s\"\n", key->cert->key_id);
10055  if (!v00) {
10056   printf("        Serial: %llu\n",
10057       (unsigned long long)key->cert->serial);
10058  }
10059  printf("        Valid: %s\n",
10060      fmt_validity(key->cert->valid_after, key->cert->valid_before));
10061  printf("        Principals: ");
10062  if (key->cert->nprincipals == 0)
10063   printf("(none)\n");
10064  else {
10065   for (i = 0; i < key->cert->nprincipals; i++)
10066    printf("\n                %s",
10067        key->cert->principals[i]);
10068   printf("\n");
10069  }
10070  printf("        Critical Options: ");
10071  if (buffer_len(&key->cert->critical) == 0)
10072   printf("(none)\n");
10073  else {
10074   printf("\n");
10075   show_options(&key->cert->critical, v00, 1);
10076  }
10077  if (!v00) {
10078   printf("        Extensions: ");
10079   if (buffer_len(&key->cert->extensions) == 0)
10080    printf("(none)\n");
10081   else {
10082    printf("\n");
10083    show_options(&key->cert->extensions, v00, 0);
10084   }
10085  }
10086  exit(0);
10087 }
10088 static void
10089 load_krl(const char *path, struct ssh_krl **krlp)
10090 {
10091  Buffer krlbuf;
10092  int fd;
10093  buffer_init(&krlbuf);
10094  if ((fd = open(path, 00)) == -1)
10095   fatal("open %s: %s", path, strerror((*__errno_location ())));
10096  if (!key_load_file(fd, path, &krlbuf))
10097   fatal("Unable to load KRL");
10098  close(fd);
10099  if (ssh_krl_from_blob(&krlbuf, krlp, ((void *)0), 0) != 0 ||
10100      *krlp == ((void *)0))
10101   fatal("Invalid KRL file");
10102  buffer_free(&krlbuf);
10103 }
10104 static void
10105 update_krl_from_file(struct passwd *pw, const char *file, const Key *ca,
10106     struct ssh_krl *krl)
10107 {
10108  Key *key = ((void *)0);
10109  u_long lnum = 0;
10110  char *path, *cp, *ep, line[8192];
10111  unsigned long long serial, serial2;
10112  int i, was_explicit_key, was_sha1, r;
10113  FILE *krl_spec;
10114  path = tilde_expand_filename(file, pw->pw_uid);
10115  if (__extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (path) && __builtin_constant_p ("-") && (__s1_len = strlen (path), __s2_len = strlen ("-"), (!((size_t)(const void *)((path) + 1) - (size_t)(const void *)(path) == 1) || __s1_len >= 4) && (!((size_t)(const void *)(("-") + 1) - (size_t)(const void *)("-") == 1) || __s2_len >= 4)) ? __builtin_strcmp (path, "-") : (__builtin_constant_p (path) && ((size_t)(const void *)((path) + 1) - (size_t)(const void *)(path) == 1) && (__s1_len = strlen (path), __s1_len < 4) ? (__builtin_constant_p ("-") && ((size_t)(const void *)(("-") + 1) - (size_t)(const void *)("-") == 1) ? __builtin_strcmp (path, "-") : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) ("-"); register int __result = (((const unsigned char *) (const char *) (path))[0] - __s2[0]); if (__s1_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) (path))[1] - __s2[1]); if (__s1_len > 1 && __result == 0) { __result = (((const unsigned char *) (const char *) (path))[2] - __s2[2]); if (__s1_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) (path))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p ("-") && ((size_t)(const void *)(("-") + 1) - (size_t)(const void *)("-") == 1) && (__s2_len = strlen ("-"), __s2_len < 4) ? (__builtin_constant_p (path) && ((size_t)(const void *)((path) + 1) - (size_t)(const void *)(path) == 1) ? __builtin_strcmp (path, "-") : (__extension__ ({ const unsigned char *__s1 = (const unsigned char *) (const char *) (path); register int __result = __s1[0] - ((const unsigned char *) (const char *) ("-"))[0]; if (__s2_len > 0 && __result == 0) { __result = (__s1[1] - ((const unsigned char *) (const char *) ("-"))[1]); if (__s2_len > 1 && __result == 0) { __result = (__s1[2] - ((const unsigned char *) (const char *) ("-"))[2]); if (__s2_len > 2 && __result == 0) __result = (__s1[3] - ((const unsigned char *) (const char *) ("-"))[3]); } } __result; }))) : __builtin_strcmp (path, "-")))); }) == 0) {
10116   krl_spec = stdin;
10117   free(path);
10118   path = xstrdup("(standard input)");
10119  } else if ((krl_spec = fopen(path, "r")) == ((void *)0))
10120   fatal("fopen %s: %s", path, strerror((*__errno_location ())));
10121  if (!quiet)
10122   printf("Revoking from %s\n", path);
10123  while (read_keyfile_line(krl_spec, path, line, sizeof(line),
10124      &lnum) == 0) {
10125   was_explicit_key = was_sha1 = 0;
10126   cp = line + __extension__ ({ char __a0, __a1, __a2; (__builtin_constant_p (" \t") && ((size_t)(const void *)((" \t") + 1) - (size_t)(const void *)(" \t") == 1) ? ((__builtin_constant_p (line) && ((size_t)(const void *)((line) + 1) - (size_t)(const void *)(line) == 1)) ? __builtin_strspn (line, " \t") : ((__a0 = ((const char *) (" \t"))[0], __a0 == '\0') ? ((void) (line), (size_t) 0) : ((__a1 = ((const char *) (" \t"))[1], __a1 == '\0') ? __strspn_c1 (line, __a0) : ((__a2 = ((const char *) (" \t"))[2], __a2 == '\0') ? __strspn_c2 (line, __a0, __a1) : (((const char *) (" \t"))[3] == '\0' ? __strspn_c3 (line, __a0, __a1, __a2) : __builtin_strspn (line, " \t")))))) : __builtin_strspn (line, " \t")); });
10127   for (i = 0, r = -1; cp[i] != '\0'; i++) {
10128    if (cp[i] == '#' || cp[i] == '\n') {
10129     cp[i] = '\0';
10130     break;
10131    }
10132    if (cp[i] == ' ' || cp[i] == '\t') {
10133     if (r == -1)
10134      r = i;
10135    } else
10136     r = -1;
10137   }
10138   if (r != -1)
10139    cp[r] = '\0';
10140   if (*cp == '\0')
10141    continue;
10142   if (strncasecmp(cp, "serial:", 7) == 0) {
10143    if (ca == ((void *)0)) {
10144     fatal("revoking certificates by serial number "
10145         "requires specification of a CA key");
10146    }
10147    cp += 7;
10148    cp = cp + __extension__ ({ char __a0, __a1, __a2; (__builtin_constant_p (" \t") && ((size_t)(const void *)((" \t") + 1) - (size_t)(const void *)(" \t") == 1) ? ((__builtin_constant_p (cp) && ((size_t)(const void *)((cp) + 1) - (size_t)(const void *)(cp) == 1)) ? __builtin_strspn (cp, " \t") : ((__a0 = ((const char *) (" \t"))[0], __a0 == '\0') ? ((void) (cp), (size_t) 0) : ((__a1 = ((const char *) (" \t"))[1], __a1 == '\0') ? __strspn_c1 (cp, __a0) : ((__a2 = ((const char *) (" \t"))[2], __a2 == '\0') ? __strspn_c2 (cp, __a0, __a1) : (((const char *) (" \t"))[3] == '\0' ? __strspn_c3 (cp, __a0, __a1, __a2) : __builtin_strspn (cp, " \t")))))) : __builtin_strspn (cp, " \t")); });
10149    (*__errno_location ()) = 0;
10150    serial = strtoull(cp, &ep, 0);
10151    if (*cp == '\0' || (*ep != '\0' && *ep != '-'))
10152     fatal("%s:%lu: invalid serial \"%s\"",
10153         path, lnum, cp);
10154    if ((*__errno_location ()) == 34 && serial == (9223372036854775807LL * 2ULL + 1))
10155     fatal("%s:%lu: serial out of range",
10156         path, lnum);
10157    serial2 = serial;
10158    if (*ep == '-') {
10159     cp = ep + 1;
10160     (*__errno_location ()) = 0;
10161     serial2 = strtoull(cp, &ep, 0);
10162     if (*cp == '\0' || *ep != '\0')
10163      fatal("%s:%lu: invalid serial \"%s\"",
10164          path, lnum, cp);
10165     if ((*__errno_location ()) == 34 && serial2 == (9223372036854775807LL * 2ULL + 1))
10166      fatal("%s:%lu: serial out of range",
10167          path, lnum);
10168     if (serial2 <= serial)
10169      fatal("%s:%lu: invalid serial range "
10170          "%llu:%llu", path, lnum,
10171          (unsigned long long)serial,
10172          (unsigned long long)serial2);
10173    }
10174    if (ssh_krl_revoke_cert_by_serial_range(krl,
10175        ca, serial, serial2) != 0) {
10176     fatal("%s: revoke serial failed",
10177         __func__);
10178    }
10179   } else if (strncasecmp(cp, "id:", 3) == 0) {
10180    if (ca == ((void *)0)) {
10181     fatal("revoking certificates by key ID "
10182         "requires specification of a CA key");
10183    }
10184    cp += 3;
10185    cp = cp + __extension__ ({ char __a0, __a1, __a2; (__builtin_constant_p (" \t") && ((size_t)(const void *)((" \t") + 1) - (size_t)(const void *)(" \t") == 1) ? ((__builtin_constant_p (cp) && ((size_t)(const void *)((cp) + 1) - (size_t)(const void *)(cp) == 1)) ? __builtin_strspn (cp, " \t") : ((__a0 = ((const char *) (" \t"))[0], __a0 == '\0') ? ((void) (cp), (size_t) 0) : ((__a1 = ((const char *) (" \t"))[1], __a1 == '\0') ? __strspn_c1 (cp, __a0) : ((__a2 = ((const char *) (" \t"))[2], __a2 == '\0') ? __strspn_c2 (cp, __a0, __a1) : (((const char *) (" \t"))[3] == '\0' ? __strspn_c3 (cp, __a0, __a1, __a2) : __builtin_strspn (cp, " \t")))))) : __builtin_strspn (cp, " \t")); });
10186    if (ssh_krl_revoke_cert_by_key_id(krl, ca, cp) != 0)
10187     fatal("%s: revoke key ID failed", __func__);
10188   } else {
10189    if (strncasecmp(cp, "key:", 4) == 0) {
10190     cp += 4;
10191     cp = cp + __extension__ ({ char __a0, __a1, __a2; (__builtin_constant_p (" \t") && ((size_t)(const void *)((" \t") + 1) - (size_t)(const void *)(" \t") == 1) ? ((__builtin_constant_p (cp) && ((size_t)(const void *)((cp) + 1) - (size_t)(const void *)(cp) == 1)) ? __builtin_strspn (cp, " \t") : ((__a0 = ((const char *) (" \t"))[0], __a0 == '\0') ? ((void) (cp), (size_t) 0) : ((__a1 = ((const char *) (" \t"))[1], __a1 == '\0') ? __strspn_c1 (cp, __a0) : ((__a2 = ((const char *) (" \t"))[2], __a2 == '\0') ? __strspn_c2 (cp, __a0, __a1) : (((const char *) (" \t"))[3] == '\0' ? __strspn_c3 (cp, __a0, __a1, __a2) : __builtin_strspn (cp, " \t")))))) : __builtin_strspn (cp, " \t")); });
10192     was_explicit_key = 1;
10193    } else if (strncasecmp(cp, "sha1:", 5) == 0) {
10194     cp += 5;
10195     cp = cp + __extension__ ({ char __a0, __a1, __a2; (__builtin_constant_p (" \t") && ((size_t)(const void *)((" \t") + 1) - (size_t)(const void *)(" \t") == 1) ? ((__builtin_constant_p (cp) && ((size_t)(const void *)((cp) + 1) - (size_t)(const void *)(cp) == 1)) ? __builtin_strspn (cp, " \t") : ((__a0 = ((const char *) (" \t"))[0], __a0 == '\0') ? ((void) (cp), (size_t) 0) : ((__a1 = ((const char *) (" \t"))[1], __a1 == '\0') ? __strspn_c1 (cp, __a0) : ((__a2 = ((const char *) (" \t"))[2], __a2 == '\0') ? __strspn_c2 (cp, __a0, __a1) : (((const char *) (" \t"))[3] == '\0' ? __strspn_c3 (cp, __a0, __a1, __a2) : __builtin_strspn (cp, " \t")))))) : __builtin_strspn (cp, " \t")); });
10196     was_sha1 = 1;
10197    } else {
10198    }
10199    if ((key = key_new(KEY_UNSPEC)) == ((void *)0))
10200     fatal("key_new");
10201    if (key_read(key, &cp) != 1)
10202     fatal("%s:%lu: invalid key", path, lnum);
10203    if (was_explicit_key)
10204     r = ssh_krl_revoke_key_explicit(krl, key);
10205    else if (was_sha1)
10206     r = ssh_krl_revoke_key_sha1(krl, key);
10207    else
10208     r = ssh_krl_revoke_key(krl, key);
10209    if (r != 0)
10210     fatal("%s: revoke key failed", __func__);
10211    key_free(key);
10212   }
10213  }
10214  if (__extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (path) && __builtin_constant_p ("-") && (__s1_len = strlen (path), __s2_len = strlen ("-"), (!((size_t)(const void *)((path) + 1) - (size_t)(const void *)(path) == 1) || __s1_len >= 4) && (!((size_t)(const void *)(("-") + 1) - (size_t)(const void *)("-") == 1) || __s2_len >= 4)) ? __builtin_strcmp (path, "-") : (__builtin_constant_p (path) && ((size_t)(const void *)((path) + 1) - (size_t)(const void *)(path) == 1) && (__s1_len = strlen (path), __s1_len < 4) ? (__builtin_constant_p ("-") && ((size_t)(const void *)(("-") + 1) - (size_t)(const void *)("-") == 1) ? __builtin_strcmp (path, "-") : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) ("-"); register int __result = (((const unsigned char *) (const char *) (path))[0] - __s2[0]); if (__s1_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) (path))[1] - __s2[1]); if (__s1_len > 1 && __result == 0) { __result = (((const unsigned char *) (const char *) (path))[2] - __s2[2]); if (__s1_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) (path))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p ("-") && ((size_t)(const void *)(("-") + 1) - (size_t)(const void *)("-") == 1) && (__s2_len = strlen ("-"), __s2_len < 4) ? (__builtin_constant_p (path) && ((size_t)(const void *)((path) + 1) - (size_t)(const void *)(path) == 1) ? __builtin_strcmp (path, "-") : (__extension__ ({ const unsigned char *__s1 = (const unsigned char *) (const char *) (path); register int __result = __s1[0] - ((const unsigned char *) (const char *) ("-"))[0]; if (__s2_len > 0 && __result == 0) { __result = (__s1[1] - ((const unsigned char *) (const char *) ("-"))[1]); if (__s2_len > 1 && __result == 0) { __result = (__s1[2] - ((const unsigned char *) (const char *) ("-"))[2]); if (__s2_len > 2 && __result == 0) __result = (__s1[3] - ((const unsigned char *) (const char *) ("-"))[3]); } } __result; }))) : __builtin_strcmp (path, "-")))); }) != 0)
10215   fclose(krl_spec);
10216  free(path);
10217 }
10218 static void
10219 do_gen_krl(struct passwd *pw, int updating, int argc, char **argv)
10220 {
10221  struct ssh_krl *krl;
10222  struct stat sb;
10223  Key *ca = ((void *)0);
10224  int fd, i;
10225  char *tmp;
10226  Buffer kbuf;
10227  if (*identity_file == '\0')
10228   fatal("KRL generation requires an output file");
10229  if (stat(identity_file, &sb) == -1) {
10230   if ((*__errno_location ()) != 2)
10231    fatal("Cannot access KRL \"%s\": %s",
10232        identity_file, strerror((*__errno_location ())));
10233   if (updating)
10234    fatal("KRL \"%s\" does not exist", identity_file);
10235  }
10236  if (ca_key_path != ((void *)0)) {
10237   tmp = tilde_expand_filename(ca_key_path, pw->pw_uid);
10238   if ((ca = key_load_public(tmp, ((void *)0))) == ((void *)0))
10239    fatal("Cannot load CA public key %s", tmp);
10240   free(tmp);
10241  }
10242  if (updating)
10243   load_krl(identity_file, &krl);
10244  else if ((krl = ssh_krl_init()) == ((void *)0))
10245   fatal("couldn't create KRL");
10246  if (cert_serial != 0)
10247   ssh_krl_set_version(krl, cert_serial);
10248  if (identity_comment != ((void *)0))
10249   ssh_krl_set_comment(krl, identity_comment);
10250  for (i = 0; i < argc; i++)
10251   update_krl_from_file(pw, argv[i], ca, krl);
10252  buffer_init(&kbuf);
10253  if (ssh_krl_to_blob(krl, &kbuf, ((void *)0), 0) != 0)
10254   fatal("Couldn't generate KRL");
10255  if ((fd = open(identity_file, 01|00000400|01000, 0644)) == -1)
10256   fatal("open %s: %s", identity_file, strerror((*__errno_location ())));
10257  if (atomicio((ssize_t (*)(int, void *, size_t))write, fd, buffer_ptr(&kbuf), buffer_len(&kbuf)) !=
10258      buffer_len(&kbuf))
10259   fatal("write %s: %s", identity_file, strerror((*__errno_location ())));
10260  close(fd);
10261  buffer_free(&kbuf);
10262  ssh_krl_free(krl);
10263  if (ca != ((void *)0))
10264   key_free(ca);
10265 }
10266 static void
10267 do_check_krl(struct passwd *pw, int argc, char **argv)
10268 {
10269  int i, r, ret = 0;
10270  char *comment;
10271  struct ssh_krl *krl;
10272  Key *k;
10273  if (*identity_file == '\0')
10274   fatal("KRL checking requires an input file");
10275  load_krl(identity_file, &krl);
10276  for (i = 0; i < argc; i++) {
10277   if ((k = key_load_public(argv[i], &comment)) == ((void *)0))
10278    fatal("Cannot load public key %s", argv[i]);
10279   r = ssh_krl_check_key(krl, k);
10280   printf("%s%s%s%s: %s\n", argv[i],
10281       *comment ? " (" : "", comment, *comment ? ")" : "",
10282       r == 0 ? "ok" : "REVOKED");
10283   if (r != 0)
10284    ret = 1;
10285   key_free(k);
10286   free(comment);
10287  }
10288  ssh_krl_free(krl);
10289  exit(ret);
10290 }
10291 static void
10292 usage(void)
10293 {
10294  fprintf(stderr, "usage: %s [options]\n", __progname);
10295  fprintf(stderr, "Options:\n");
10296  fprintf(stderr, "  -A          Generate non-existent host keys for all key types.\n");
10297  fprintf(stderr, "  -a number   Number of KDF rounds for new key format or moduli primality tests.\n");
10298  fprintf(stderr, "  -B          Show bubblebabble digest of key file.\n");
10299  fprintf(stderr, "  -b bits     Number of bits in the key to create.\n");
10300  fprintf(stderr, "  -C comment  Provide new comment.\n");
10301  fprintf(stderr, "  -c          Change comment in private and public key files.\n");
10302  fprintf(stderr, "  -D pkcs11   Download public key from pkcs11 token.\n");
10303  fprintf(stderr, "  -e          Export OpenSSH to foreign format key file.\n");
10304  fprintf(stderr, "  -F hostname Find hostname in known hosts file.\n");
10305  fprintf(stderr, "  -f filename Filename of the key file.\n");
10306  fprintf(stderr, "  -G file     Generate candidates for DH-GEX moduli.\n");
10307  fprintf(stderr, "  -g          Use generic DNS resource record format.\n");
10308  fprintf(stderr, "  -H          Hash names in known_hosts file.\n");
10309  fprintf(stderr, "  -h          Generate host certificate instead of a user certificate.\n");
10310  fprintf(stderr, "  -I key_id   Key identifier to include in certificate.\n");
10311  fprintf(stderr, "  -i          Import foreign format to OpenSSH key file.\n");
10312  fprintf(stderr, "  -J number   Screen this number of moduli lines.\n");
10313  fprintf(stderr, "  -j number   Start screening moduli at specified line.\n");
10314  fprintf(stderr, "  -K checkpt  Write checkpoints to this file.\n");
10315  fprintf(stderr, "  -k          Generate a KRL file.\n");
10316  fprintf(stderr, "  -L          Print the contents of a certificate.\n");
10317  fprintf(stderr, "  -l          Show fingerprint of key file.\n");
10318  fprintf(stderr, "  -M memory   Amount of memory (MB) to use for generating DH-GEX moduli.\n");
10319  fprintf(stderr, "  -m key_fmt  Conversion format for -e/-i (PEM|PKCS8|RFC4716).\n");
10320  fprintf(stderr, "  -N phrase   Provide new passphrase.\n");
10321  fprintf(stderr, "  -n name,... User/host principal names to include in certificate\n");
10322  fprintf(stderr, "  -O option   Specify a certificate option.\n");
10323  fprintf(stderr, "  -o          Enforce new private key format.\n");
10324  fprintf(stderr, "  -P phrase   Provide old passphrase.\n");
10325  fprintf(stderr, "  -p          Change passphrase of private key file.\n");
10326  fprintf(stderr, "  -Q          Test whether key(s) are revoked in KRL.\n");
10327  fprintf(stderr, "  -q          Quiet.\n");
10328  fprintf(stderr, "  -R hostname Remove host from known_hosts file.\n");
10329  fprintf(stderr, "  -r hostname Print DNS resource record.\n");
10330  fprintf(stderr, "  -S start    Start point (hex) for generating DH-GEX moduli.\n");
10331  fprintf(stderr, "  -s ca_key   Certify keys with CA key.\n");
10332  fprintf(stderr, "  -T file     Screen candidates for DH-GEX moduli.\n");
10333  fprintf(stderr, "  -t type     Specify type of key to create.\n");
10334  fprintf(stderr, "  -u          Update KRL rather than creating a new one.\n");
10335  fprintf(stderr, "  -V from:to  Specify certificate validity interval.\n");
10336  fprintf(stderr, "  -v          Verbose.\n");
10337  fprintf(stderr, "  -W gen      Generator to use for generating DH-GEX moduli.\n");
10338  fprintf(stderr, "  -y          Read private key file and print public key.\n");
10339  fprintf(stderr, "  -Z cipher   Specify a cipher for new private key format.\n");
10340  fprintf(stderr, "  -z serial   Specify a serial number.\n");
10341  exit(1);
10342 }
10343 int
10344 main(int argc, char **argv)
10345 {
10346  char dotsshdir[4096], comment[1024], *passphrase1, *passphrase2;
10347  char *checkpoint = ((void *)0);
10348  char out_file[4096], *ep, *rr_hostname = ((void *)0);
10349  Key *private, *public;
10350  struct passwd *pw;
10351  struct stat st;
10352  int opt, type, fd;
10353  u_int32_t memory = 0, generator_wanted = 0;
10354  int do_gen_candidates = 0, do_screen_candidates = 0;
10355  int gen_all_hostkeys = 0, gen_krl = 0, update_krl = 0, check_krl = 0;
10356  unsigned long start_lineno = 0, lines_to_process = 0;
10357  BIGNUM *start = ((void *)0);
10358  FILE *f;
10359  const char *errstr;
10360  extern int BSDoptind;
10361  extern char *BSDoptarg;
10362  sanitise_stdfd();
10363  __progname = ssh_get_progname(argv[0]);
10364  ssh_OpenSSL_add_all_algorithms();
10365  log_init(argv[0], SYSLOG_LEVEL_INFO, SYSLOG_FACILITY_USER, 1);
10366  seed_rng();
10367  pw = getpwuid(getuid());
10368  if (!pw) {
10369   printf("No user exists for uid %lu\n", (u_long)getuid());
10370   exit(1);
10371  }
10372  if (gethostname(hostname, sizeof(hostname)) < 0) {
10373   perror("gethostname");
10374   exit(1);
10375  }
10376  while ((opt = BSDgetopt(argc, argv, "ABHLQXceghiklopquvxy" "C:D:F:G:I:J:K:M:N:O:P:R:S:T:V:W:Z:a:b:f:g:j:m:n:r:s:t:z:")
10377                                                                 ) != -1) {
10378   switch (opt) {
10379   case 'A':
10380    gen_all_hostkeys = 1;
10381    break;
10382   case 'b':
10383    bits = (u_int32_t)strtonum(BSDoptarg, 256, 32768, &errstr);
10384    if (errstr)
10385     fatal("Bits has bad value %s (%s)",
10386      BSDoptarg, errstr);
10387    break;
10388   case 'F':
10389    find_host = 1;
10390    rr_hostname = BSDoptarg;
10391    break;
10392   case 'H':
10393    hash_hosts = 1;
10394    break;
10395   case 'I':
10396    cert_key_id = BSDoptarg;
10397    break;
10398   case 'J':
10399    lines_to_process = strtoul(BSDoptarg, ((void *)0), 10);
10400                         break;
10401   case 'j':
10402    start_lineno = strtoul(BSDoptarg, ((void *)0), 10);
10403                         break;
10404   case 'R':
10405    delete_host = 1;
10406    rr_hostname = BSDoptarg;
10407    break;
10408   case 'L':
10409    show_cert = 1;
10410    break;
10411   case 'l':
10412    print_fingerprint = 1;
10413    break;
10414   case 'B':
10415    print_bubblebabble = 1;
10416    break;
10417   case 'm':
10418    if (strcasecmp(BSDoptarg, "RFC4716") == 0 ||
10419        strcasecmp(BSDoptarg, "ssh2") == 0) {
10420     convert_format = FMT_RFC4716;
10421     break;
10422    }
10423    if (strcasecmp(BSDoptarg, "PKCS8") == 0) {
10424     convert_format = FMT_PKCS8;
10425     break;
10426    }
10427    if (strcasecmp(BSDoptarg, "PEM") == 0) {
10428     convert_format = FMT_PEM;
10429     break;
10430    }
10431    fatal("Unsupported conversion format \"%s\"", BSDoptarg);
10432   case 'n':
10433    cert_principals = BSDoptarg;
10434    break;
10435   case 'o':
10436    use_new_format = 1;
10437    break;
10438   case 'p':
10439    change_passphrase = 1;
10440    break;
10441   case 'c':
10442    change_comment = 1;
10443    break;
10444   case 'f':
10445    if (strlcpy(identity_file, BSDoptarg, sizeof(identity_file)) >=
10446        sizeof(identity_file))
10447     fatal("Identity filename too long");
10448    have_identity = 1;
10449    break;
10450   case 'g':
10451    print_generic = 1;
10452    break;
10453   case 'P':
10454    identity_passphrase = BSDoptarg;
10455    break;
10456   case 'N':
10457    identity_new_passphrase = BSDoptarg;
10458    break;
10459   case 'Q':
10460    check_krl = 1;
10461    break;
10462   case 'O':
10463    add_cert_option(BSDoptarg);
10464    break;
10465   case 'Z':
10466    new_format_cipher = BSDoptarg;
10467    break;
10468   case 'C':
10469    identity_comment = BSDoptarg;
10470    break;
10471   case 'q':
10472    quiet = 1;
10473    break;
10474   case 'e':
10475   case 'x':
10476    convert_to = 1;
10477    break;
10478   case 'h':
10479    cert_key_type = 2;
10480    certflags_flags = 0;
10481    break;
10482   case 'k':
10483    gen_krl = 1;
10484    break;
10485   case 'i':
10486   case 'X':
10487    convert_from = 1;
10488    break;
10489   case 'y':
10490    print_public = 1;
10491    break;
10492   case 's':
10493    ca_key_path = BSDoptarg;
10494    break;
10495   case 't':
10496    key_type_name = BSDoptarg;
10497    break;
10498   case 'D':
10499    pkcs11provider = BSDoptarg;
10500    break;
10501   case 'u':
10502    update_krl = 1;
10503    break;
10504   case 'v':
10505    if (log_level == SYSLOG_LEVEL_INFO)
10506     log_level = SYSLOG_LEVEL_DEBUG1;
10507    else {
10508     if (log_level >= SYSLOG_LEVEL_DEBUG1 &&
10509         log_level < SYSLOG_LEVEL_DEBUG3)
10510      log_level++;
10511    }
10512    break;
10513   case 'r':
10514    rr_hostname = BSDoptarg;
10515    break;
10516   case 'W':
10517    generator_wanted = (u_int32_t)strtonum(BSDoptarg, 1,
10518        (2147483647 * 2U + 1U), &errstr);
10519    if (errstr)
10520     fatal("Desired generator has bad value: %s (%s)",
10521      BSDoptarg, errstr);
10522    break;
10523   case 'a':
10524    rounds = (int)strtonum(BSDoptarg, 1, 2147483647, &errstr);
10525    if (errstr)
10526     fatal("Invalid number: %s (%s)",
10527      BSDoptarg, errstr);
10528    break;
10529   case 'M':
10530    memory = (u_int32_t)strtonum(BSDoptarg, 1, (2147483647 * 2U + 1U), &errstr);
10531    if (errstr)
10532     fatal("Memory limit is %s: %s", errstr, BSDoptarg);
10533    break;
10534   case 'G':
10535    do_gen_candidates = 1;
10536    if (strlcpy(out_file, BSDoptarg, sizeof(out_file)) >=
10537        sizeof(out_file))
10538     fatal("Output filename too long");
10539    break;
10540   case 'T':
10541    do_screen_candidates = 1;
10542    if (strlcpy(out_file, BSDoptarg, sizeof(out_file)) >=
10543        sizeof(out_file))
10544     fatal("Output filename too long");
10545    break;
10546   case 'K':
10547    if (strlen(BSDoptarg) >= 4096)
10548     fatal("Checkpoint filename too long");
10549    checkpoint = xstrdup(BSDoptarg);
10550    break;
10551   case 'S':
10552    if (BN_hex2bn(&start, BSDoptarg) == 0)
10553     fatal("Invalid start point.");
10554    break;
10555   case 'V':
10556    parse_cert_times(BSDoptarg);
10557    break;
10558   case 'z':
10559    (*__errno_location ()) = 0;
10560    cert_serial = strtoull(BSDoptarg, &ep, 10);
10561    if (*BSDoptarg < '0' || *BSDoptarg > '9' || *ep != '\0' ||
10562        ((*__errno_location ()) == 34 && cert_serial == (9223372036854775807LL * 2ULL + 1)))
10563     fatal("Invalid serial number \"%s\"", BSDoptarg);
10564    break;
10565   case '?':
10566   default:
10567    usage();
10568   }
10569  }
10570  log_init(argv[0], log_level, SYSLOG_FACILITY_USER, 1);
10571  argv += BSDoptind;
10572  argc -= BSDoptind;
10573  if (ca_key_path != ((void *)0)) {
10574   if (argc < 1 && !gen_krl) {
10575    printf("Too few arguments.\n");
10576    usage();
10577   }
10578  } else if (argc > 0 && !gen_krl && !check_krl) {
10579   printf("Too many arguments.\n");
10580   usage();
10581  }
10582  if (change_passphrase && change_comment) {
10583   printf("Can only have one of -p and -c.\n");
10584   usage();
10585  }
10586  if (print_fingerprint && (delete_host || hash_hosts)) {
10587   printf("Cannot use -l with -H or -R.\n");
10588   usage();
10589  }
10590  if (gen_krl) {
10591   do_gen_krl(pw, update_krl, argc, argv);
10592   return (0);
10593  }
10594  if (check_krl) {
10595   do_check_krl(pw, argc, argv);
10596   return (0);
10597  }
10598  if (ca_key_path != ((void *)0)) {
10599   if (cert_key_id == ((void *)0))
10600    fatal("Must specify key id (-I) when certifying");
10601   do_ca_sign(pw, argc, argv);
10602  }
10603  if (show_cert)
10604   do_show_cert(pw);
10605  if (delete_host || hash_hosts || find_host)
10606   do_known_hosts(pw, rr_hostname);
10607  if (pkcs11provider != ((void *)0))
10608   do_download(pw);
10609  if (print_fingerprint || print_bubblebabble)
10610   do_fingerprint(pw);
10611  if (change_passphrase)
10612   do_change_passphrase(pw);
10613  if (change_comment)
10614   do_change_comment(pw);
10615  if (convert_to)
10616   do_convert_to(pw);
10617  if (convert_from)
10618   do_convert_from(pw);
10619  if (print_public)
10620   do_print_public(pw);
10621  if (rr_hostname != ((void *)0)) {
10622   unsigned int n = 0;
10623   if (have_identity) {
10624    n = do_print_resource_record(pw,
10625        identity_file, rr_hostname);
10626    if (n == 0) {
10627     perror(identity_file);
10628     exit(1);
10629    }
10630    exit(0);
10631   } else {
10632    n += do_print_resource_record(pw,
10633        "/etc/ssh" "/ssh_host_rsa_key", rr_hostname);
10634    n += do_print_resource_record(pw,
10635        "/etc/ssh" "/ssh_host_dsa_key", rr_hostname);
10636    n += do_print_resource_record(pw,
10637        "/etc/ssh" "/ssh_host_ecdsa_key", rr_hostname);
10638    if (n == 0)
10639     fatal("no keys found.");
10640    exit(0);
10641   }
10642  }
10643  if (do_gen_candidates) {
10644   FILE *out = fopen(out_file, "w");
10645   if (out == ((void *)0)) {
10646    error("Couldn't open modulus candidate file \"%s\": %s",
10647        out_file, strerror((*__errno_location ())));
10648    return (1);
10649   }
10650   if (bits == 0)
10651    bits = 2048;
10652   if (gen_candidates(out, memory, bits, start) != 0)
10653    fatal("modulus candidate generation failed");
10654   return (0);
10655  }
10656  if (do_screen_candidates) {
10657   FILE *in;
10658   FILE *out = fopen(out_file, "a");
10659   if (have_identity && __extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (identity_file) && __builtin_constant_p ("-") && (__s1_len = strlen (identity_file), __s2_len = strlen ("-"), (!((size_t)(const void *)((identity_file) + 1) - (size_t)(const void *)(identity_file) == 1) || __s1_len >= 4) && (!((size_t)(const void *)(("-") + 1) - (size_t)(const void *)("-") == 1) || __s2_len >= 4)) ? __builtin_strcmp (identity_file, "-") : (__builtin_constant_p (identity_file) && ((size_t)(const void *)((identity_file) + 1) - (size_t)(const void *)(identity_file) == 1) && (__s1_len = strlen (identity_file), __s1_len < 4) ? (__builtin_constant_p ("-") && ((size_t)(const void *)(("-") + 1) - (size_t)(const void *)("-") == 1) ? __builtin_strcmp (identity_file, "-") : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) ("-"); register int __result = (((const unsigned char *) (const char *) (identity_file))[0] - __s2[0]); if (__s1_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) (identity_file))[1] - __s2[1]); if (__s1_len > 1 && __result == 0) { __result = (((const unsigned char *) (const char *) (identity_file))[2] - __s2[2]); if (__s1_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) (identity_file))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p ("-") && ((size_t)(const void *)(("-") + 1) - (size_t)(const void *)("-") == 1) && (__s2_len = strlen ("-"), __s2_len < 4) ? (__builtin_constant_p (identity_file) && ((size_t)(const void *)((identity_file) + 1) - (size_t)(const void *)(identity_file) == 1) ? __builtin_strcmp (identity_file, "-") : (__extension__ ({ const unsigned char *__s1 = (const unsigned char *) (const char *) (identity_file); register int __result = __s1[0] - ((const unsigned char *) (const char *) ("-"))[0]; if (__s2_len > 0 && __result == 0) { __result = (__s1[1] - ((const unsigned char *) (const char *) ("-"))[1]); if (__s2_len > 1 && __result == 0) { __result = (__s1[2] - ((const unsigned char *) (const char *) ("-"))[2]); if (__s2_len > 2 && __result == 0) __result = (__s1[3] - ((const unsigned char *) (const char *) ("-"))[3]); } } __result; }))) : __builtin_strcmp (identity_file, "-")))); }) != 0) {
10660    if ((in = fopen(identity_file, "r")) == ((void *)0)) {
10661     fatal("Couldn't open modulus candidate "
10662         "file \"%s\": %s", identity_file,
10663         strerror((*__errno_location ())));
10664    }
10665   } else
10666    in = stdin;
10667   if (out == ((void *)0)) {
10668    fatal("Couldn't open moduli file \"%s\": %s",
10669        out_file, strerror((*__errno_location ())));
10670   }
10671   if (prime_test(in, out, rounds == 0 ? 100 : rounds,
10672       generator_wanted, checkpoint,
10673       start_lineno, lines_to_process) != 0)
10674    fatal("modulus screening failed");
10675   return (0);
10676  }
10677  if (gen_all_hostkeys) {
10678   do_gen_all_hostkeys(pw);
10679   return (0);
10680  }
10681  if (key_type_name == ((void *)0))
10682   key_type_name = "rsa";
10683  type = key_type_from_name(key_type_name);
10684  type_bits_valid(type, &bits);
10685  if (!quiet)
10686   printf("Generating public/private %s key pair.\n", key_type_name);
10687  private = key_generate(type, bits);
10688  if (private == ((void *)0)) {
10689   fprintf(stderr, "key_generate failed\n");
10690   exit(1);
10691  }
10692  public = key_from_private(private);
10693  if (!have_identity)
10694   ask_filename(pw, "Enter file in which to save the key");
10695  snprintf(dotsshdir, sizeof dotsshdir, "%s/%s",
10696      pw->pw_dir, ".ssh");
10697  if (strstr(identity_file, dotsshdir) != ((void *)0)) {
10698   if (stat(dotsshdir, &st) < 0) {
10699    if ((*__errno_location ()) != 2) {
10700     error("Could not stat %s: %s", dotsshdir,
10701         strerror((*__errno_location ())));
10702    } else if (mkdir(dotsshdir, 0700) < 0) {
10703     error("Could not create directory '%s': %s",
10704         dotsshdir, strerror((*__errno_location ())));
10705    } else if (!quiet)
10706     printf("Created directory '%s'.\n", dotsshdir);
10707   }
10708  }
10709  if (stat(identity_file, &st) >= 0) {
10710   char yesno[3];
10711   printf("%s already exists.\n", identity_file);
10712   printf("Overwrite (y/n)? ");
10713   fflush(stdout);
10714   if (fgets(yesno, sizeof(yesno), stdin) == ((void *)0))
10715    exit(1);
10716   if (yesno[0] != 'y' && yesno[0] != 'Y')
10717    exit(1);
10718  }
10719  if (identity_passphrase)
10720   passphrase1 = xstrdup(identity_passphrase);
10721  else if (identity_new_passphrase)
10722   passphrase1 = xstrdup(identity_new_passphrase);
10723  else {
10724 passphrase_again:
10725   passphrase1 =
10726    read_passphrase("Enter passphrase (empty for no "
10727        "passphrase): ", 0x0002);
10728   passphrase2 = read_passphrase("Enter same passphrase again: ",
10729       0x0002);
10730   if (__extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (passphrase1) && __builtin_constant_p (passphrase2) && (__s1_len = strlen (passphrase1), __s2_len = strlen (passphrase2), (!((size_t)(const void *)((passphrase1) + 1) - (size_t)(const void *)(passphrase1) == 1) || __s1_len >= 4) && (!((size_t)(const void *)((passphrase2) + 1) - (size_t)(const void *)(passphrase2) == 1) || __s2_len >= 4)) ? __builtin_strcmp (passphrase1, passphrase2) : (__builtin_constant_p (passphrase1) && ((size_t)(const void *)((passphrase1) + 1) - (size_t)(const void *)(passphrase1) == 1) && (__s1_len = strlen (passphrase1), __s1_len < 4) ? (__builtin_constant_p (passphrase2) && ((size_t)(const void *)((passphrase2) + 1) - (size_t)(const void *)(passphrase2) == 1) ? __builtin_strcmp (passphrase1, passphrase2) : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (passphrase2); register int __result = (((const unsigned char *) (const char *) (passphrase1))[0] - __s2[0]); if (__s1_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) (passphrase1))[1] - __s2[1]); if (__s1_len > 1 && __result == 0) { __result = (((const unsigned char *) (const char *) (passphrase1))[2] - __s2[2]); if (__s1_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) (passphrase1))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p (passphrase2) && ((size_t)(const void *)((passphrase2) + 1) - (size_t)(const void *)(passphrase2) == 1) && (__s2_len = strlen (passphrase2), __s2_len < 4) ? (__builtin_constant_p (passphrase1) && ((size_t)(const void *)((passphrase1) + 1) - (size_t)(const void *)(passphrase1) == 1) ? __builtin_strcmp (passphrase1, passphrase2) : (__extension__ ({ const unsigned char *__s1 = (const unsigned char *) (const char *) (passphrase1); register int __result = __s1[0] - ((const unsigned char *) (const char *) (passphrase2))[0]; if (__s2_len > 0 && __result == 0) { __result = (__s1[1] - ((const unsigned char *) (const char *) (passphrase2))[1]); if (__s2_len > 1 && __result == 0) { __result = (__s1[2] - ((const unsigned char *) (const char *) (passphrase2))[2]); if (__s2_len > 2 && __result == 0) __result = (__s1[3] - ((const unsigned char *) (const char *) (passphrase2))[3]); } } __result; }))) : __builtin_strcmp (passphrase1, passphrase2)))); }) != 0) {
10731    explicit_bzero(passphrase1, strlen(passphrase1));
10732    explicit_bzero(passphrase2, strlen(passphrase2));
10733    free(passphrase1);
10734    free(passphrase2);
10735    printf("Passphrases do not match.  Try again.\n");
10736    goto passphrase_again;
10737   }
10738   explicit_bzero(passphrase2, strlen(passphrase2));
10739   free(passphrase2);
10740  }
10741  if (identity_comment) {
10742   strlcpy(comment, identity_comment, sizeof(comment));
10743  } else {
10744   snprintf(comment, sizeof comment, "%s@%s", pw->pw_name, hostname);
10745  }
10746  if (!key_save_private(private, identity_file, passphrase1, comment,
10747      use_new_format, new_format_cipher, rounds)) {
10748   printf("Saving the key failed: %s.\n", identity_file);
10749   explicit_bzero(passphrase1, strlen(passphrase1));
10750   free(passphrase1);
10751   exit(1);
10752  }
10753  explicit_bzero(passphrase1, strlen(passphrase1));
10754  free(passphrase1);
10755  key_free(private);
10756  if (!quiet)
10757   printf("Your identification has been saved in %s.\n", identity_file);
10758  strlcat(identity_file, ".pub", sizeof(identity_file));
10759  fd = open(identity_file, 01 | 00000400 | 01000, 0644);
10760  if (fd == -1) {
10761   printf("Could not save your public key in %s\n", identity_file);
10762   exit(1);
10763  }
10764  f = fdopen(fd, "w");
10765  if (f == ((void *)0)) {
10766   printf("fdopen %s failed\n", identity_file);
10767   exit(1);
10768  }
10769  if (!key_write(public, f))
10770   fprintf(stderr, "write key failed\n");
10771  fprintf(f, " %s\n", comment);
10772  fclose(f);
10773  if (!quiet) {
10774   char *fp = key_fingerprint(public, SSH_FP_MD5, SSH_FP_HEX);
10775   char *ra = key_fingerprint(public, SSH_FP_MD5,
10776       SSH_FP_RANDOMART);
10777   printf("Your public key has been saved in %s.\n",
10778       identity_file);
10779   printf("The key fingerprint is:\n");
10780   printf("%s %s\n", fp, comment);
10781   printf("The key's randomart image is:\n");
10782   printf("%s\n", ra);
10783   free(ra);
10784   free(fp);
10785  }
10786  key_free(public);
10787  exit(0);
10788 }