]> git.wh0rd.org Git - ICEs.git/blob - not-unused/des.i.0
initial import
[ICEs.git] / not-unused / des.i.0
1
2 typedef long unsigned int size_t;
3 typedef unsigned char __u_char;
4 typedef unsigned short int __u_short;
5 typedef unsigned int __u_int;
6 typedef unsigned long int __u_long;
7 typedef signed char __int8_t;
8 typedef unsigned char __uint8_t;
9 typedef signed short int __int16_t;
10 typedef unsigned short int __uint16_t;
11 typedef signed int __int32_t;
12 typedef unsigned int __uint32_t;
13 typedef signed long int __int64_t;
14 typedef unsigned long int __uint64_t;
15 typedef long int __quad_t;
16 typedef unsigned long int __u_quad_t;
17 typedef unsigned long int __dev_t;
18 typedef unsigned int __uid_t;
19 typedef unsigned int __gid_t;
20 typedef unsigned long int __ino_t;
21 typedef unsigned long int __ino64_t;
22 typedef unsigned int __mode_t;
23 typedef unsigned long int __nlink_t;
24 typedef long int __off_t;
25 typedef long int __off64_t;
26 typedef int __pid_t;
27 typedef struct { int __val[2]; } __fsid_t;
28 typedef long int __clock_t;
29 typedef unsigned long int __rlim_t;
30 typedef unsigned long int __rlim64_t;
31 typedef unsigned int __id_t;
32 typedef long int __time_t;
33 typedef unsigned int __useconds_t;
34 typedef long int __suseconds_t;
35 typedef int __daddr_t;
36 typedef long int __swblk_t;
37 typedef int __key_t;
38 typedef int __clockid_t;
39 typedef void * __timer_t;
40 typedef long int __blksize_t;
41 typedef long int __blkcnt_t;
42 typedef long int __blkcnt64_t;
43 typedef unsigned long int __fsblkcnt_t;
44 typedef unsigned long int __fsblkcnt64_t;
45 typedef unsigned long int __fsfilcnt_t;
46 typedef unsigned long int __fsfilcnt64_t;
47 typedef long int __ssize_t;
48 typedef __off64_t __loff_t;
49 typedef __quad_t *__qaddr_t;
50 typedef char *__caddr_t;
51 typedef long int __intptr_t;
52 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 __ino_t ino_t;
62
63
64 typedef __dev_t dev_t;
65
66
67
68
69 typedef __gid_t gid_t;
70
71
72
73
74 typedef __mode_t mode_t;
75
76
77
78
79 typedef __nlink_t nlink_t;
80
81
82
83
84 typedef __uid_t uid_t;
85
86
87
88
89
90 typedef __off_t off_t;
91 typedef __pid_t pid_t;
92 typedef __id_t id_t;
93 typedef __ssize_t ssize_t;
94 typedef __daddr_t daddr_t;
95 typedef __caddr_t caddr_t;
96 typedef __key_t key_t;
97
98 typedef __time_t time_t;
99
100
101 typedef __clockid_t clockid_t;
102
103
104
105
106
107 typedef __timer_t timer_t;
108 typedef unsigned long int ulong;
109 typedef unsigned short int ushort;
110 typedef unsigned int uint;
111 typedef int int8_t __attribute__ ((__mode__ (__QI__)));
112 typedef int int16_t __attribute__ ((__mode__ (__HI__)));
113 typedef int int32_t __attribute__ ((__mode__ (__SI__)));
114 typedef int int64_t __attribute__ ((__mode__ (__DI__)));
115 typedef unsigned int u_int8_t __attribute__ ((__mode__ (__QI__)));
116 typedef unsigned int u_int16_t __attribute__ ((__mode__ (__HI__)));
117 typedef unsigned int u_int32_t __attribute__ ((__mode__ (__SI__)));
118 typedef unsigned int u_int64_t __attribute__ ((__mode__ (__DI__)));
119 typedef int register_t __attribute__ ((__mode__ (__word__)));
120 typedef int __sig_atomic_t;
121 typedef struct
122   {
123     unsigned long int __val[(1024 / (8 * sizeof (unsigned long int)))];
124   } __sigset_t;
125 typedef __sigset_t sigset_t;
126 struct timespec
127   {
128     __time_t tv_sec;
129     long int tv_nsec;
130   };
131 struct timeval
132   {
133     __time_t tv_sec;
134     __suseconds_t tv_usec;
135   };
136 typedef __suseconds_t suseconds_t;
137 typedef long int __fd_mask;
138 typedef struct
139   {
140     __fd_mask __fds_bits[1024 / (8 * sizeof (__fd_mask))];
141   } fd_set;
142 typedef __fd_mask fd_mask;
143
144 extern int select (int __nfds, fd_set *__restrict __readfds,
145      fd_set *__restrict __writefds,
146      fd_set *__restrict __exceptfds,
147      struct timeval *__restrict __timeout);
148 extern int pselect (int __nfds, fd_set *__restrict __readfds,
149       fd_set *__restrict __writefds,
150       fd_set *__restrict __exceptfds,
151       const struct timespec *__restrict __timeout,
152       const __sigset_t *__restrict __sigmask);
153
154 __extension__
155 extern __inline unsigned int gnu_dev_major (unsigned long long int __dev)
156      __attribute__ ((__nothrow__));
157 __extension__
158 extern __inline unsigned int gnu_dev_minor (unsigned long long int __dev)
159      __attribute__ ((__nothrow__));
160 __extension__
161 extern __inline unsigned long long int gnu_dev_makedev (unsigned int __major,
162        unsigned int __minor)
163      __attribute__ ((__nothrow__));
164 __extension__ extern __inline unsigned int
165 __attribute__ ((__nothrow__)) gnu_dev_major (unsigned long long int __dev)
166 {
167   return ((__dev >> 8) & 0xfff) | ((unsigned int) (__dev >> 32) & ~0xfff);
168 }
169 __extension__ extern __inline unsigned int
170 __attribute__ ((__nothrow__)) gnu_dev_minor (unsigned long long int __dev)
171 {
172   return (__dev & 0xff) | ((unsigned int) (__dev >> 12) & ~0xff);
173 }
174 __extension__ extern __inline unsigned long long int
175 __attribute__ ((__nothrow__)) gnu_dev_makedev (unsigned int __major, unsigned int __minor)
176 {
177   return ((__minor & 0xff) | ((__major & 0xfff) << 8)
178    | (((unsigned long long int) (__minor & ~0xff)) << 12)
179    | (((unsigned long long int) (__major & ~0xfff)) << 32));
180 }
181 typedef __blkcnt_t blkcnt_t;
182 typedef __fsblkcnt_t fsblkcnt_t;
183 typedef __fsfilcnt_t fsfilcnt_t;
184 typedef unsigned long int pthread_t;
185 typedef union
186 {
187   char __size[56];
188   long int __align;
189 } pthread_attr_t;
190 typedef struct __pthread_internal_list
191 {
192   struct __pthread_internal_list *__prev;
193   struct __pthread_internal_list *__next;
194 } __pthread_list_t;
195 typedef union
196 {
197   struct __pthread_mutex_s
198   {
199     int __lock;
200     unsigned int __count;
201     int __owner;
202     unsigned int __nusers;
203     int __kind;
204     int __spins;
205     __pthread_list_t __list;
206   } __data;
207   char __size[40];
208   long int __align;
209 } pthread_mutex_t;
210 typedef union
211 {
212   char __size[4];
213   int __align;
214 } pthread_mutexattr_t;
215 typedef union
216 {
217   struct
218   {
219     int __lock;
220     unsigned int __futex;
221     __extension__ unsigned long long int __total_seq;
222     __extension__ unsigned long long int __wakeup_seq;
223     __extension__ unsigned long long int __woken_seq;
224     void *__mutex;
225     unsigned int __nwaiters;
226     unsigned int __broadcast_seq;
227   } __data;
228   char __size[48];
229   __extension__ long long int __align;
230 } pthread_cond_t;
231 typedef union
232 {
233   char __size[4];
234   int __align;
235 } pthread_condattr_t;
236 typedef unsigned int pthread_key_t;
237 typedef int pthread_once_t;
238 typedef union
239 {
240   struct
241   {
242     int __lock;
243     unsigned int __nr_readers;
244     unsigned int __readers_wakeup;
245     unsigned int __writer_wakeup;
246     unsigned int __nr_readers_queued;
247     unsigned int __nr_writers_queued;
248     int __writer;
249     int __pad1;
250     unsigned long int __pad2;
251     unsigned long int __pad3;
252     unsigned int __flags;
253   } __data;
254   char __size[56];
255   long int __align;
256 } pthread_rwlock_t;
257 typedef union
258 {
259   char __size[8];
260   long int __align;
261 } pthread_rwlockattr_t;
262 typedef volatile int pthread_spinlock_t;
263 typedef union
264 {
265   char __size[32];
266   long int __align;
267 } pthread_barrier_t;
268 typedef union
269 {
270   char __size[4];
271   int __align;
272 } pthread_barrierattr_t;
273
274
275
276 typedef unsigned char uint8_t;
277 typedef unsigned short int uint16_t;
278 typedef unsigned int uint32_t;
279 typedef unsigned long int uint64_t;
280 typedef signed char int_least8_t;
281 typedef short int int_least16_t;
282 typedef int int_least32_t;
283 typedef long int int_least64_t;
284 typedef unsigned char uint_least8_t;
285 typedef unsigned short int uint_least16_t;
286 typedef unsigned int uint_least32_t;
287 typedef unsigned long int uint_least64_t;
288 typedef signed char int_fast8_t;
289 typedef long int int_fast16_t;
290 typedef long int int_fast32_t;
291 typedef long int int_fast64_t;
292 typedef unsigned char uint_fast8_t;
293 typedef unsigned long int uint_fast16_t;
294 typedef unsigned long int uint_fast32_t;
295 typedef unsigned long int uint_fast64_t;
296 typedef long int intptr_t;
297 typedef unsigned long int uintptr_t;
298 typedef long int intmax_t;
299 typedef unsigned long int uintmax_t;
300
301
302 struct iovec
303   {
304     void *iov_base;
305     size_t iov_len;
306   };
307 extern ssize_t readv (int __fd, __const struct iovec *__iovec, int __count);
308 extern ssize_t writev (int __fd, __const struct iovec *__iovec, int __count);
309
310 typedef __socklen_t socklen_t;
311 enum __socket_type
312 {
313   SOCK_STREAM = 1,
314   SOCK_DGRAM = 2,
315   SOCK_RAW = 3,
316   SOCK_RDM = 4,
317   SOCK_SEQPACKET = 5,
318   SOCK_PACKET = 10
319 };
320 typedef unsigned short int sa_family_t;
321 struct sockaddr
322   {
323     sa_family_t sa_family;
324     char sa_data[14];
325   };
326 struct sockaddr_storage
327   {
328     sa_family_t ss_family;
329     __uint64_t __ss_align;
330     char __ss_padding[(128 - (2 * sizeof (__uint64_t)))];
331   };
332 enum
333   {
334     MSG_OOB = 0x01,
335     MSG_PEEK = 0x02,
336     MSG_DONTROUTE = 0x04,
337     MSG_CTRUNC = 0x08,
338     MSG_PROXY = 0x10,
339     MSG_TRUNC = 0x20,
340     MSG_DONTWAIT = 0x40,
341     MSG_EOR = 0x80,
342     MSG_WAITALL = 0x100,
343     MSG_FIN = 0x200,
344     MSG_SYN = 0x400,
345     MSG_CONFIRM = 0x800,
346     MSG_RST = 0x1000,
347     MSG_ERRQUEUE = 0x2000,
348     MSG_NOSIGNAL = 0x4000,
349     MSG_MORE = 0x8000
350   };
351 struct msghdr
352   {
353     void *msg_name;
354     socklen_t msg_namelen;
355     struct iovec *msg_iov;
356     size_t msg_iovlen;
357     void *msg_control;
358     size_t msg_controllen;
359     int msg_flags;
360   };
361 struct cmsghdr
362   {
363     size_t cmsg_len;
364     int cmsg_level;
365     int cmsg_type;
366     __extension__ unsigned char __cmsg_data [];
367   };
368 extern struct cmsghdr *__cmsg_nxthdr (struct msghdr *__mhdr,
369           struct cmsghdr *__cmsg) __attribute__ ((__nothrow__));
370 enum
371   {
372     SCM_RIGHTS = 0x01
373     , SCM_CREDENTIALS = 0x02
374   };
375 struct ucred
376 {
377   pid_t pid;
378   uid_t uid;
379   gid_t gid;
380 };
381 struct linger
382   {
383     int l_onoff;
384     int l_linger;
385   };
386 struct osockaddr
387   {
388     unsigned short int sa_family;
389     unsigned char sa_data[14];
390   };
391 enum
392 {
393   SHUT_RD = 0,
394   SHUT_WR,
395   SHUT_RDWR
396 };
397 extern int socket (int __domain, int __type, int __protocol) __attribute__ ((__nothrow__));
398 extern int socketpair (int __domain, int __type, int __protocol,
399          int __fds[2]) __attribute__ ((__nothrow__));
400 extern int bind (int __fd, __const struct sockaddr * __addr, socklen_t __len)
401      __attribute__ ((__nothrow__));
402 extern int getsockname (int __fd, struct sockaddr *__restrict __addr,
403    socklen_t *__restrict __len) __attribute__ ((__nothrow__));
404 extern int connect (int __fd, __const struct sockaddr * __addr, socklen_t __len);
405 extern int getpeername (int __fd, struct sockaddr *__restrict __addr,
406    socklen_t *__restrict __len) __attribute__ ((__nothrow__));
407 extern ssize_t send (int __fd, __const void *__buf, size_t __n, int __flags);
408 extern ssize_t recv (int __fd, void *__buf, size_t __n, int __flags);
409 extern ssize_t sendto (int __fd, __const void *__buf, size_t __n,
410          int __flags, __const struct sockaddr * __addr,
411          socklen_t __addr_len);
412 extern ssize_t recvfrom (int __fd, void *__restrict __buf, size_t __n,
413     int __flags, struct sockaddr *__restrict __addr,
414     socklen_t *__restrict __addr_len);
415 extern ssize_t sendmsg (int __fd, __const struct msghdr *__message,
416    int __flags);
417 extern ssize_t recvmsg (int __fd, struct msghdr *__message, int __flags);
418 extern int getsockopt (int __fd, int __level, int __optname,
419          void *__restrict __optval,
420          socklen_t *__restrict __optlen) __attribute__ ((__nothrow__));
421 extern int setsockopt (int __fd, int __level, int __optname,
422          __const void *__optval, socklen_t __optlen) __attribute__ ((__nothrow__));
423 extern int listen (int __fd, int __n) __attribute__ ((__nothrow__));
424 extern int accept (int __fd, struct sockaddr *__restrict __addr,
425      socklen_t *__restrict __addr_len);
426 extern int shutdown (int __fd, int __how) __attribute__ ((__nothrow__));
427 extern int sockatmark (int __fd) __attribute__ ((__nothrow__));
428 extern int isfdtype (int __fd, int __fdtype) __attribute__ ((__nothrow__));
429
430
431 enum
432   {
433     IPPROTO_IP = 0,
434     IPPROTO_HOPOPTS = 0,
435     IPPROTO_ICMP = 1,
436     IPPROTO_IGMP = 2,
437     IPPROTO_IPIP = 4,
438     IPPROTO_TCP = 6,
439     IPPROTO_EGP = 8,
440     IPPROTO_PUP = 12,
441     IPPROTO_UDP = 17,
442     IPPROTO_IDP = 22,
443     IPPROTO_TP = 29,
444     IPPROTO_IPV6 = 41,
445     IPPROTO_ROUTING = 43,
446     IPPROTO_FRAGMENT = 44,
447     IPPROTO_RSVP = 46,
448     IPPROTO_GRE = 47,
449     IPPROTO_ESP = 50,
450     IPPROTO_AH = 51,
451     IPPROTO_ICMPV6 = 58,
452     IPPROTO_NONE = 59,
453     IPPROTO_DSTOPTS = 60,
454     IPPROTO_MTP = 92,
455     IPPROTO_ENCAP = 98,
456     IPPROTO_PIM = 103,
457     IPPROTO_COMP = 108,
458     IPPROTO_SCTP = 132,
459     IPPROTO_RAW = 255,
460     IPPROTO_MAX
461   };
462 typedef uint16_t in_port_t;
463 enum
464   {
465     IPPORT_ECHO = 7,
466     IPPORT_DISCARD = 9,
467     IPPORT_SYSTAT = 11,
468     IPPORT_DAYTIME = 13,
469     IPPORT_NETSTAT = 15,
470     IPPORT_FTP = 21,
471     IPPORT_TELNET = 23,
472     IPPORT_SMTP = 25,
473     IPPORT_TIMESERVER = 37,
474     IPPORT_NAMESERVER = 42,
475     IPPORT_WHOIS = 43,
476     IPPORT_MTP = 57,
477     IPPORT_TFTP = 69,
478     IPPORT_RJE = 77,
479     IPPORT_FINGER = 79,
480     IPPORT_TTYLINK = 87,
481     IPPORT_SUPDUP = 95,
482     IPPORT_EXECSERVER = 512,
483     IPPORT_LOGINSERVER = 513,
484     IPPORT_CMDSERVER = 514,
485     IPPORT_EFSSERVER = 520,
486     IPPORT_BIFFUDP = 512,
487     IPPORT_WHOSERVER = 513,
488     IPPORT_ROUTESERVER = 520,
489     IPPORT_RESERVED = 1024,
490     IPPORT_USERRESERVED = 5000
491   };
492 typedef uint32_t in_addr_t;
493 struct in_addr
494   {
495     in_addr_t s_addr;
496   };
497 struct in6_addr
498   {
499     union
500       {
501  uint8_t u6_addr8[16];
502  uint16_t u6_addr16[8];
503  uint32_t u6_addr32[4];
504       } in6_u;
505   };
506 extern const struct in6_addr in6addr_any;
507 extern const struct in6_addr in6addr_loopback;
508 struct sockaddr_in
509   {
510     sa_family_t sin_family;
511     in_port_t sin_port;
512     struct in_addr sin_addr;
513     unsigned char sin_zero[sizeof (struct sockaddr) -
514       (sizeof (unsigned short int)) -
515       sizeof (in_port_t) -
516       sizeof (struct in_addr)];
517   };
518 struct sockaddr_in6
519   {
520     sa_family_t sin6_family;
521     in_port_t sin6_port;
522     uint32_t sin6_flowinfo;
523     struct in6_addr sin6_addr;
524     uint32_t sin6_scope_id;
525   };
526 struct ip_mreq
527   {
528     struct in_addr imr_multiaddr;
529     struct in_addr imr_interface;
530   };
531 struct ip_mreq_source
532   {
533     struct in_addr imr_multiaddr;
534     struct in_addr imr_interface;
535     struct in_addr imr_sourceaddr;
536   };
537 struct ipv6_mreq
538   {
539     struct in6_addr ipv6mr_multiaddr;
540     unsigned int ipv6mr_interface;
541   };
542 struct group_req
543   {
544     uint32_t gr_interface;
545     struct sockaddr_storage gr_group;
546   };
547 struct group_source_req
548   {
549     uint32_t gsr_interface;
550     struct sockaddr_storage gsr_group;
551     struct sockaddr_storage gsr_source;
552   };
553 struct ip_msfilter
554   {
555     struct in_addr imsf_multiaddr;
556     struct in_addr imsf_interface;
557     uint32_t imsf_fmode;
558     uint32_t imsf_numsrc;
559     struct in_addr imsf_slist[1];
560   };
561 struct group_filter
562   {
563     uint32_t gf_interface;
564     struct sockaddr_storage gf_group;
565     uint32_t gf_fmode;
566     uint32_t gf_numsrc;
567     struct sockaddr_storage gf_slist[1];
568 };
569 struct ip_opts
570   {
571     struct in_addr ip_dst;
572     char ip_opts[40];
573   };
574 struct ip_mreqn
575   {
576     struct in_addr imr_multiaddr;
577     struct in_addr imr_address;
578     int imr_ifindex;
579   };
580 struct in_pktinfo
581   {
582     int ipi_ifindex;
583     struct in_addr ipi_spec_dst;
584     struct in_addr ipi_addr;
585   };
586 extern uint32_t ntohl (uint32_t __netlong) __attribute__ ((__nothrow__)) __attribute__ ((__const__));
587 extern uint16_t ntohs (uint16_t __netshort)
588      __attribute__ ((__nothrow__)) __attribute__ ((__const__));
589 extern uint32_t htonl (uint32_t __hostlong)
590      __attribute__ ((__nothrow__)) __attribute__ ((__const__));
591 extern uint16_t htons (uint16_t __hostshort)
592      __attribute__ ((__nothrow__)) __attribute__ ((__const__));
593 extern int bindresvport (int __sockfd, struct sockaddr_in *__sock_in) __attribute__ ((__nothrow__));
594 extern int bindresvport6 (int __sockfd, struct sockaddr_in6 *__sock_in)
595      __attribute__ ((__nothrow__));
596 struct in6_pktinfo
597   {
598     struct in6_addr ipi6_addr;
599     unsigned int ipi6_ifindex;
600   };
601 struct ip6_mtuinfo
602   {
603     struct sockaddr_in6 ip6m_addr;
604     uint32_t ip6m_mtu;
605   };
606
607
608 struct passwd
609 {
610   char *pw_name;
611   char *pw_passwd;
612   __uid_t pw_uid;
613   __gid_t pw_gid;
614   char *pw_gecos;
615   char *pw_dir;
616   char *pw_shell;
617 };
618
619 typedef struct _IO_FILE FILE;
620
621
622 extern void setpwent (void);
623 extern void endpwent (void);
624 extern struct passwd *getpwent (void);
625 extern struct passwd *fgetpwent (FILE *__stream);
626 extern int putpwent (__const struct passwd *__restrict __p,
627        FILE *__restrict __f);
628 extern struct passwd *getpwuid (__uid_t __uid);
629 extern struct passwd *getpwnam (__const char *__name);
630 extern int getpwent_r (struct passwd *__restrict __resultbuf,
631          char *__restrict __buffer, size_t __buflen,
632          struct passwd **__restrict __result);
633 extern int getpwuid_r (__uid_t __uid,
634          struct passwd *__restrict __resultbuf,
635          char *__restrict __buffer, size_t __buflen,
636          struct passwd **__restrict __result);
637 extern int getpwnam_r (__const char *__restrict __name,
638          struct passwd *__restrict __resultbuf,
639          char *__restrict __buffer, size_t __buflen,
640          struct passwd **__restrict __result);
641 extern int fgetpwent_r (FILE *__restrict __stream,
642    struct passwd *__restrict __resultbuf,
643    char *__restrict __buffer, size_t __buflen,
644    struct passwd **__restrict __result);
645
646
647
648 extern void *memcpy (void *__restrict __dest,
649        __const void *__restrict __src, size_t __n)
650      __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
651 extern void *memmove (void *__dest, __const void *__src, size_t __n)
652      __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
653
654 extern void *memccpy (void *__restrict __dest, __const void *__restrict __src,
655         int __c, size_t __n)
656      __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
657
658 extern void *memset (void *__s, int __c, size_t __n) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
659 extern int memcmp (__const void *__s1, __const void *__s2, size_t __n)
660      __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
661 extern void *memchr (__const void *__s, int __c, size_t __n)
662       __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
663
664
665 extern char *strcpy (char *__restrict __dest, __const char *__restrict __src)
666      __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
667 extern char *strncpy (char *__restrict __dest,
668         __const char *__restrict __src, size_t __n)
669      __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
670 extern char *strcat (char *__restrict __dest, __const char *__restrict __src)
671      __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
672 extern char *strncat (char *__restrict __dest, __const char *__restrict __src,
673         size_t __n) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
674 extern int strcmp (__const char *__s1, __const char *__s2)
675      __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
676 extern int strncmp (__const char *__s1, __const char *__s2, size_t __n)
677      __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
678 extern int strcoll (__const char *__s1, __const char *__s2)
679      __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
680 extern size_t strxfrm (char *__restrict __dest,
681          __const char *__restrict __src, size_t __n)
682      __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (2)));
683
684 extern char *strdup (__const char *__s)
685      __attribute__ ((__nothrow__)) __attribute__ ((__malloc__)) __attribute__ ((__nonnull__ (1)));
686
687 extern char *strchr (__const char *__s, int __c)
688      __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
689 extern char *strrchr (__const char *__s, int __c)
690      __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
691
692
693 extern size_t strcspn (__const char *__s, __const char *__reject)
694      __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
695 extern size_t strspn (__const char *__s, __const char *__accept)
696      __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
697 extern char *strpbrk (__const char *__s, __const char *__accept)
698      __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
699 extern char *strstr (__const char *__haystack, __const char *__needle)
700      __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
701 extern char *strtok (char *__restrict __s, __const char *__restrict __delim)
702      __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (2)));
703
704 extern char *__strtok_r (char *__restrict __s,
705     __const char *__restrict __delim,
706     char **__restrict __save_ptr)
707      __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (2, 3)));
708 extern char *strtok_r (char *__restrict __s, __const char *__restrict __delim,
709          char **__restrict __save_ptr)
710      __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (2, 3)));
711
712 extern size_t strlen (__const char *__s)
713      __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
714
715
716 extern char *strerror (int __errnum) __attribute__ ((__nothrow__));
717
718 extern int strerror_r (int __errnum, char *__buf, size_t __buflen) __asm__ ("" "__xpg_strerror_r") __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (2)));
719 extern void __bzero (void *__s, size_t __n) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
720 extern void bcopy (__const void *__src, void *__dest, size_t __n)
721      __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
722 extern void bzero (void *__s, size_t __n) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
723 extern int bcmp (__const void *__s1, __const void *__s2, size_t __n)
724      __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
725 extern char *index (__const char *__s, int __c)
726      __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
727 extern char *rindex (__const char *__s, int __c)
728      __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
729 extern int ffs (int __i) __attribute__ ((__nothrow__)) __attribute__ ((__const__));
730 extern int strcasecmp (__const char *__s1, __const char *__s2)
731      __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
732 extern int strncasecmp (__const char *__s1, __const char *__s2, size_t __n)
733      __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
734 extern char *strsep (char **__restrict __stringp,
735        __const char *__restrict __delim)
736      __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
737
738
739 extern char *crypt (__const char *__key, __const char *__salt)
740      __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
741 extern void setkey (__const char *__key) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
742 extern void encrypt (char *__block, int __edflag) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
743
744 extern char *__md5_crypt(const unsigned char *pw, const unsigned char *salt);
745 extern char *__des_crypt(const unsigned char *pw, const unsigned char *salt);
746 static u_char inv_key_perm[64];
747 static u_char inv_comp_perm[56];
748 static u_char u_sbox[8][64];
749 static u_char un_pbox[32];
750 static u_int32_t en_keysl[16], en_keysr[16];
751 static u_int32_t de_keysl[16], de_keysr[16];
752 static u_int32_t ip_maskl[8][256], ip_maskr[8][256];
753 static u_int32_t fp_maskl[8][256], fp_maskr[8][256];
754 static u_int32_t key_perm_maskl[8][128], key_perm_maskr[8][128];
755 static u_int32_t comp_maskl[8][128], comp_maskr[8][128];
756 static u_int32_t saltbits;
757 static u_int32_t old_salt;
758 static u_int32_t old_rawkey0, old_rawkey1;
759 static u_char init_perm[64], final_perm[64];
760 static u_char m_sbox[4][4096];
761 static u_int32_t psbox[4][256];
762 static const u_char ascii64[] =
763     "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
764 static const u_char IP[64] = {
765  58, 50, 42, 34, 26, 18, 10, 2, 60, 52, 44, 36, 28, 20, 12, 4,
766  62, 54, 46, 38, 30, 22, 14, 6, 64, 56, 48, 40, 32, 24, 16, 8,
767  57, 49, 41, 33, 25, 17, 9, 1, 59, 51, 43, 35, 27, 19, 11, 3,
768  61, 53, 45, 37, 29, 21, 13, 5, 63, 55, 47, 39, 31, 23, 15, 7
769 };
770 static const u_char key_perm[56] = {
771  57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18,
772  10, 2, 59, 51, 43, 35, 27, 19, 11, 3, 60, 52, 44, 36,
773  63, 55, 47, 39, 31, 23, 15, 7, 62, 54, 46, 38, 30, 22,
774  14, 6, 61, 53, 45, 37, 29, 21, 13, 5, 28, 20, 12, 4
775 };
776 static const u_char key_shifts[16] = {
777  1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1
778 };
779 static const u_char comp_perm[48] = {
780  14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21, 10,
781  23, 19, 12, 4, 26, 8, 16, 7, 27, 20, 13, 2,
782  41, 52, 31, 37, 47, 55, 30, 40, 51, 45, 33, 48,
783  44, 49, 39, 56, 34, 53, 46, 42, 50, 36, 29, 32
784 };
785 static const u_char sbox[8][64] = {
786  {
787   14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7,
788   0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8,
789   4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0,
790   15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13},
791  {
792   15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10,
793   3, 13, 4, 7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5,
794   0, 14, 7, 11, 10, 4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15,
795   13, 8, 10, 1, 3, 15, 4, 2, 11, 6, 7, 12, 0, 5, 14, 9},
796  {
797   10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8,
798   13, 7, 0, 9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1,
799   13, 6, 4, 9, 8, 15, 3, 0, 11, 1, 2, 12, 5, 10, 14, 7,
800   1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 11, 5, 2, 12},
801  {
802   7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15,
803   13, 8, 11, 5, 6, 15, 0, 3, 4, 7, 2, 12, 1, 10, 14, 9,
804   10, 6, 9, 0, 12, 11, 7, 13, 15, 1, 3, 14, 5, 2, 8, 4,
805   3, 15, 0, 6, 10, 1, 13, 8, 9, 4, 5, 11, 12, 7, 2, 14},
806  {
807   2, 12, 4, 1, 7, 10, 11, 6, 8, 5, 3, 15, 13, 0, 14, 9,
808   14, 11, 2, 12, 4, 7, 13, 1, 5, 0, 15, 10, 3, 9, 8, 6,
809   4, 2, 1, 11, 10, 13, 7, 8, 15, 9, 12, 5, 6, 3, 0, 14,
810   11, 8, 12, 7, 1, 14, 2, 13, 6, 15, 0, 9, 10, 4, 5, 3},
811  {
812   12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11,
813   10, 15, 4, 2, 7, 12, 9, 5, 6, 1, 13, 14, 0, 11, 3, 8,
814   9, 14, 15, 5, 2, 8, 12, 3, 7, 0, 4, 10, 1, 13, 11, 6,
815   4, 3, 2, 12, 9, 5, 15, 10, 11, 14, 1, 7, 6, 0, 8, 13},
816  {
817   4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1,
818   13, 0, 11, 7, 4, 9, 1, 10, 14, 3, 5, 12, 2, 15, 8, 6,
819   1, 4, 11, 13, 12, 3, 7, 14, 10, 15, 6, 8, 0, 5, 9, 2,
820   6, 11, 13, 8, 1, 4, 10, 7, 9, 5, 0, 15, 14, 2, 3, 12},
821  {
822   13, 2, 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7,
823   1, 15, 13, 8, 10, 3, 7, 4, 12, 5, 6, 11, 0, 14, 9, 2,
824   7, 11, 4, 1, 9, 12, 14, 2, 0, 6, 10, 13, 15, 3, 5, 8,
825   2, 1, 14, 7, 4, 10, 8, 13, 15, 12, 9, 0, 3, 5, 6, 11}
826 };
827 static const u_char pbox[32] = {
828  16, 7, 20, 21, 29, 12, 28, 17, 1, 15, 23, 26, 5, 18, 31, 10,
829  2, 8, 24, 14, 32, 27, 3, 9, 19, 13, 30, 6, 22, 11, 4, 25
830 };
831 static const u_int32_t bits32[32] = {
832  0x80000000, 0x40000000, 0x20000000, 0x10000000,
833  0x08000000, 0x04000000, 0x02000000, 0x01000000,
834  0x00800000, 0x00400000, 0x00200000, 0x00100000,
835  0x00080000, 0x00040000, 0x00020000, 0x00010000,
836  0x00008000, 0x00004000, 0x00002000, 0x00001000,
837  0x00000800, 0x00000400, 0x00000200, 0x00000100,
838  0x00000080, 0x00000040, 0x00000020, 0x00000010,
839  0x00000008, 0x00000004, 0x00000002, 0x00000001
840 };
841 static const u_char bits8[8] =
842     { 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01 };
843 static const u_int32_t *bits28, *bits24;
844 static int ascii_to_bin(char ch)
845 {
846  if (ch > 'z')
847   return (0);
848  if (ch >= 'a')
849   return (ch - 'a' + 38);
850  if (ch > 'Z')
851   return (0);
852  if (ch >= 'A')
853   return (ch - 'A' + 12);
854  if (ch > '9')
855   return (0);
856  if (ch >= '.')
857   return (ch - '.');
858  return (0);
859 }
860 static void des_init(void)
861 {
862  int i, j, b, k, inbit, obit;
863  u_int32_t *p, *il, *ir, *fl, *fr;
864  static int des_initialised = 0;
865  if (des_initialised == 1)
866   return;
867  old_rawkey0 = old_rawkey1 = 0L;
868  saltbits = 0L;
869  old_salt = 0L;
870  bits24 = (bits28 = bits32 + 4) + 4;
871  for (i = 0; i < 8; i++)
872   for (j = 0; j < 64; j++) {
873    b = (j & 0x20) | ((j & 1) << 4) | ((j >> 1) & 0xf);
874    u_sbox[i][j] = sbox[i][b];
875   }
876  for (b = 0; b < 4; b++)
877   for (i = 0; i < 64; i++)
878    for (j = 0; j < 64; j++)
879     m_sbox[b][(i << 6) | j] =
880         (u_char) ((u_sbox[(b << 1)][i] << 4) |
881            u_sbox[(b << 1) + 1][j]);
882  for (i = 0; i < 64; i++) {
883   init_perm[final_perm[i] = IP[i] - 1] = (u_char) i;
884   inv_key_perm[i] = 255;
885  }
886  for (i = 0; i < 56; i++) {
887   inv_key_perm[key_perm[i] - 1] = (u_char) i;
888   inv_comp_perm[i] = 255;
889  }
890  for (i = 0; i < 48; i++) {
891   inv_comp_perm[comp_perm[i] - 1] = (u_char) i;
892  }
893  for (k = 0; k < 8; k++) {
894   for (i = 0; i < 256; i++) {
895    *(il = &ip_maskl[k][i]) = 0L;
896    *(ir = &ip_maskr[k][i]) = 0L;
897    *(fl = &fp_maskl[k][i]) = 0L;
898    *(fr = &fp_maskr[k][i]) = 0L;
899    for (j = 0; j < 8; j++) {
900     inbit = 8 * k + j;
901     if (i & bits8[j]) {
902      if ((obit = init_perm[inbit]) < 32)
903       *il |= bits32[obit];
904      else
905       *ir |= bits32[obit - 32];
906      if ((obit = final_perm[inbit]) < 32)
907       *fl |= bits32[obit];
908      else
909       *fr |= bits32[obit - 32];
910     }
911    }
912   }
913   for (i = 0; i < 128; i++) {
914    *(il = &key_perm_maskl[k][i]) = 0L;
915    *(ir = &key_perm_maskr[k][i]) = 0L;
916    for (j = 0; j < 7; j++) {
917     inbit = 8 * k + j;
918     if (i & bits8[j + 1]) {
919      if ((obit = inv_key_perm[inbit]) == 255)
920       continue;
921      if (obit < 28)
922       *il |= bits28[obit];
923      else
924       *ir |= bits28[obit - 28];
925     }
926    }
927    *(il = &comp_maskl[k][i]) = 0L;
928    *(ir = &comp_maskr[k][i]) = 0L;
929    for (j = 0; j < 7; j++) {
930     inbit = 7 * k + j;
931     if (i & bits8[j + 1]) {
932      if ((obit =
933           inv_comp_perm[inbit]) == 255)
934       continue;
935      if (obit < 24)
936       *il |= bits24[obit];
937      else
938       *ir |= bits24[obit - 24];
939     }
940    }
941   }
942  }
943  for (i = 0; i < 32; i++)
944   un_pbox[pbox[i] - 1] = (u_char) i;
945  for (b = 0; b < 4; b++)
946   for (i = 0; i < 256; i++) {
947    *(p = &psbox[b][i]) = 0L;
948    for (j = 0; j < 8; j++) {
949     if (i & bits8[j])
950      *p |= bits32[un_pbox[8 * b + j]];
951    }
952   }
953  des_initialised = 1;
954 }
955 static void setup_salt(u_int32_t salt)
956 {
957  u_int32_t obit, saltbit;
958  int i;
959  if (salt == old_salt)
960   return;
961  old_salt = salt;
962  saltbits = 0L;
963  saltbit = 1;
964  obit = 0x800000;
965  for (i = 0; i < 24; i++) {
966   if (salt & saltbit)
967    saltbits |= obit;
968   saltbit <<= 1;
969   obit >>= 1;
970  }
971 }
972 static int des_setkey(const char *key)
973 {
974  u_int32_t k0, k1, rawkey0, rawkey1;
975  int shifts, round;
976  des_init();
977  rawkey0 = ntohl(*(const u_int32_t *)key);
978  rawkey1 = ntohl(*(const u_int32_t *)(key + 4));
979  if ((rawkey0 | rawkey1)
980      && rawkey0 == old_rawkey0 && rawkey1 == old_rawkey1) {
981   return (0);
982  }
983  old_rawkey0 = rawkey0;
984  old_rawkey1 = rawkey1;
985  k0 = key_perm_maskl[0][rawkey0 >> 25]
986      | key_perm_maskl[1][(rawkey0 >> 17) & 0x7f]
987      | key_perm_maskl[2][(rawkey0 >> 9) & 0x7f]
988      | key_perm_maskl[3][(rawkey0 >> 1) & 0x7f]
989      | key_perm_maskl[4][rawkey1 >> 25]
990      | key_perm_maskl[5][(rawkey1 >> 17) & 0x7f]
991      | key_perm_maskl[6][(rawkey1 >> 9) & 0x7f]
992      | key_perm_maskl[7][(rawkey1 >> 1) & 0x7f];
993  k1 = key_perm_maskr[0][rawkey0 >> 25]
994      | key_perm_maskr[1][(rawkey0 >> 17) & 0x7f]
995      | key_perm_maskr[2][(rawkey0 >> 9) & 0x7f]
996      | key_perm_maskr[3][(rawkey0 >> 1) & 0x7f]
997      | key_perm_maskr[4][rawkey1 >> 25]
998      | key_perm_maskr[5][(rawkey1 >> 17) & 0x7f]
999      | key_perm_maskr[6][(rawkey1 >> 9) & 0x7f]
1000      | key_perm_maskr[7][(rawkey1 >> 1) & 0x7f];
1001  shifts = 0;
1002  for (round = 0; round < 16; round++) {
1003   u_int32_t t0, t1;
1004   shifts += key_shifts[round];
1005   t0 = (k0 << shifts) | (k0 >> (28 - shifts));
1006   t1 = (k1 << shifts) | (k1 >> (28 - shifts));
1007   de_keysl[15 - round] =
1008       en_keysl[round] = comp_maskl[0][(t0 >> 21) & 0x7f]
1009       | comp_maskl[1][(t0 >> 14) & 0x7f]
1010       | comp_maskl[2][(t0 >> 7) & 0x7f]
1011       | comp_maskl[3][t0 & 0x7f]
1012       | comp_maskl[4][(t1 >> 21) & 0x7f]
1013       | comp_maskl[5][(t1 >> 14) & 0x7f]
1014       | comp_maskl[6][(t1 >> 7) & 0x7f]
1015       | comp_maskl[7][t1 & 0x7f];
1016   de_keysr[15 - round] =
1017       en_keysr[round] = comp_maskr[0][(t0 >> 21) & 0x7f]
1018       | comp_maskr[1][(t0 >> 14) & 0x7f]
1019       | comp_maskr[2][(t0 >> 7) & 0x7f]
1020       | comp_maskr[3][t0 & 0x7f]
1021       | comp_maskr[4][(t1 >> 21) & 0x7f]
1022       | comp_maskr[5][(t1 >> 14) & 0x7f]
1023       | comp_maskr[6][(t1 >> 7) & 0x7f]
1024       | comp_maskr[7][t1 & 0x7f];
1025  }
1026  return (0);
1027 }
1028 static int
1029 do_des(u_int32_t l_in, u_int32_t r_in, u_int32_t * l_out, u_int32_t * r_out,
1030        int count)
1031 {
1032  u_int32_t l, r, *kl, *kr, *kl1, *kr1;
1033  u_int32_t f, r48l, r48r;
1034  int round;
1035  if (count == 0) {
1036   return (1);
1037  } else if (count > 0) {
1038   kl1 = en_keysl;
1039   kr1 = en_keysr;
1040  } else {
1041   count = -count;
1042   kl1 = de_keysl;
1043   kr1 = de_keysr;
1044  }
1045  l = ip_maskl[0][l_in >> 24]
1046      | ip_maskl[1][(l_in >> 16) & 0xff]
1047      | ip_maskl[2][(l_in >> 8) & 0xff]
1048      | ip_maskl[3][l_in & 0xff]
1049      | ip_maskl[4][r_in >> 24]
1050      | ip_maskl[5][(r_in >> 16) & 0xff]
1051      | ip_maskl[6][(r_in >> 8) & 0xff]
1052      | ip_maskl[7][r_in & 0xff];
1053  r = ip_maskr[0][l_in >> 24]
1054      | ip_maskr[1][(l_in >> 16) & 0xff]
1055      | ip_maskr[2][(l_in >> 8) & 0xff]
1056      | ip_maskr[3][l_in & 0xff]
1057      | ip_maskr[4][r_in >> 24]
1058      | ip_maskr[5][(r_in >> 16) & 0xff]
1059      | ip_maskr[6][(r_in >> 8) & 0xff]
1060      | ip_maskr[7][r_in & 0xff];
1061  while (count--) {
1062   kl = kl1;
1063   kr = kr1;
1064   round = 16;
1065   while (round--) {
1066    r48l = ((r & 0x00000001) << 23)
1067        | ((r & 0xf8000000) >> 9)
1068        | ((r & 0x1f800000) >> 11)
1069        | ((r & 0x01f80000) >> 13)
1070        | ((r & 0x001f8000) >> 15);
1071    r48r = ((r & 0x0001f800) << 7)
1072        | ((r & 0x00001f80) << 5)
1073        | ((r & 0x000001f8) << 3)
1074        | ((r & 0x0000001f) << 1)
1075        | ((r & 0x80000000) >> 31);
1076    f = (r48l ^ r48r) & saltbits;
1077    r48l ^= f ^ *kl++;
1078    r48r ^= f ^ *kr++;
1079    f = psbox[0][m_sbox[0][r48l >> 12]]
1080        | psbox[1][m_sbox[1][r48l & 0xfff]]
1081        | psbox[2][m_sbox[2][r48r >> 12]]
1082        | psbox[3][m_sbox[3][r48r & 0xfff]];
1083    f ^= l;
1084    l = r;
1085    r = f;
1086   }
1087   r = l;
1088   l = f;
1089  }
1090  *l_out = fp_maskl[0][l >> 24]
1091      | fp_maskl[1][(l >> 16) & 0xff]
1092      | fp_maskl[2][(l >> 8) & 0xff]
1093      | fp_maskl[3][l & 0xff]
1094      | fp_maskl[4][r >> 24]
1095      | fp_maskl[5][(r >> 16) & 0xff]
1096      | fp_maskl[6][(r >> 8) & 0xff]
1097      | fp_maskl[7][r & 0xff];
1098  *r_out = fp_maskr[0][l >> 24]
1099      | fp_maskr[1][(l >> 16) & 0xff]
1100      | fp_maskr[2][(l >> 8) & 0xff]
1101      | fp_maskr[3][l & 0xff]
1102      | fp_maskr[4][r >> 24]
1103      | fp_maskr[5][(r >> 16) & 0xff]
1104      | fp_maskr[6][(r >> 8) & 0xff]
1105      | fp_maskr[7][r & 0xff];
1106  return (0);
1107 }
1108 void setkey(const char *key)
1109 {
1110  int i, j;
1111  u_int32_t packed_keys[2];
1112  u_char *p;
1113  p = (u_char *) packed_keys;
1114  for (i = 0; i < 8; i++) {
1115   p[i] = 0;
1116   for (j = 0; j < 8; j++)
1117    if (*key++ & 1)
1118     p[i] |= bits8[j];
1119  }
1120  des_setkey((char *)p);
1121 }
1122 void encrypt(char *block, int flag)
1123 {
1124  u_int32_t io[2];
1125  u_char *p;
1126  int i, j;
1127  des_init();
1128  setup_salt(0L);
1129  p = (u_char *) block;
1130  for (i = 0; i < 2; i++) {
1131   io[i] = 0L;
1132   for (j = 0; j < 32; j++)
1133    if (*p++ & 1)
1134     io[i] |= bits32[j];
1135  }
1136  do_des(io[0], io[1], io, io + 1, flag ? -1 : 1);
1137  for (i = 0; i < 2; i++)
1138   for (j = 0; j < 32; j++)
1139    block[(i << 5) | j] = (io[i] & bits32[j]) ? 1 : 0;
1140 }
1141 char *__des_crypt(const unsigned char *key, const unsigned char *setting)
1142 {
1143  u_int32_t count, salt, l, r0, r1, keybuf[2];
1144  u_char *p, *q;
1145  static char output[21];
1146  des_init();
1147  q = (u_char *) keybuf;
1148  while (q - (u_char *) keybuf - 8) {
1149   *q++ = *key << 1;
1150   if (*(q - 1))
1151    key++;
1152  }
1153  if (des_setkey((char *)keybuf))
1154   return (((void *)0));
1155  {
1156   count = 25;
1157   salt = (ascii_to_bin(setting[1]) << 6)
1158       | ascii_to_bin(setting[0]);
1159   output[0] = setting[0];
1160   output[1] = setting[1] ? setting[1] : output[0];
1161   p = (u_char *) output + 2;
1162  }
1163  setup_salt(salt);
1164  if (do_des(0L, 0L, &r0, &r1, (int)count))
1165   return (((void *)0));
1166  l = (r0 >> 8);
1167  *p++ = ascii64[(l >> 18) & 0x3f];
1168  *p++ = ascii64[(l >> 12) & 0x3f];
1169  *p++ = ascii64[(l >> 6) & 0x3f];
1170  *p++ = ascii64[l & 0x3f];
1171  l = (r0 << 16) | ((r1 >> 16) & 0xffff);
1172  *p++ = ascii64[(l >> 18) & 0x3f];
1173  *p++ = ascii64[(l >> 12) & 0x3f];
1174  *p++ = ascii64[(l >> 6) & 0x3f];
1175  *p++ = ascii64[l & 0x3f];
1176  l = r1 << 2;
1177  *p++ = ascii64[(l >> 12) & 0x3f];
1178  *p++ = ascii64[(l >> 6) & 0x3f];
1179  *p++ = ascii64[l & 0x3f];
1180  *p = 0;
1181  return (output);
1182 }