xref: /haiku/src/bin/unzip/crypt.h (revision 17049c451a91f427aec94b944b75876b611103e7)
1 /*
2   Copyright (c) 1990-2000 Info-ZIP.  All rights reserved.
3 
4   See the accompanying file LICENSE, version 2000-Apr-09 or later
5   (the contents of which are also included in zip.h) for terms of use.
6   If, for some reason, all these files are missing, the Info-ZIP license
7   also may be found at:  ftp://ftp.info-zip.org/pub/infozip/license.html
8 */
9 /*
10   crypt.h (full version) by Info-ZIP.   Last revised:  [see CR_VERSION_DATE]
11 
12   This encryption/decryption source code for Info-Zip software was
13   originally written in Europe.  The whole source package can be
14   freely distributed, including from the USA.  (Prior to January 2000,
15   re-export from the US was a violation of US law.)
16 
17   NOTE on copyright history:
18   Previous versions of this source package (up to version 2.8) were
19   not copyrighted and put in the public domain.  If you cannot comply
20   with the Info-Zip LICENSE, you may want to look for one of those
21   public domain versions.
22  */
23 
24 #ifndef __crypt_h   /* don't include more than once */
25 #define __crypt_h
26 
27 #ifdef CRYPT
28 #  undef CRYPT
29 #endif
30 /*
31    Logic of selecting "full crypt" code:
32    a) default behaviour:
33       - dummy crypt code when used to compile Zip
34         (because we do not distribute encrypting versions of Zip from US
35         servers)
36       - dummy crypt code when compiling UnZipSFX stub, to minimize size
37       - full crypt code when used to compile UnZip and fUnZip
38    b) USE_CRYPT defined:
39       - always full crypt code
40    c) NO_CRYPT defined:
41       - never full crypt code
42    NO_CRYPT takes precedence over USE_CRYPT
43  */
44 #if defined(NO_CRYPT)
45 #  define CRYPT  0  /* dummy version */
46 #else
47 #if defined(USE_CRYPT)
48 #  define CRYPT  1  /* full version */
49 #else
50 #if (!defined(ZIP) && !defined(SFX))
51 #  define CRYPT  1  /* full version */
52 #else
53 #  define CRYPT  0  /* dummy version */
54 #endif
55 #endif /* ?USE_CRYPT */
56 #endif /* ?NO_CRYPT */
57 
58 #if CRYPT
59 /* full version */
60 
61 #ifdef CR_BETA
62 #  undef CR_BETA    /* this is not a beta release */
63 #endif
64 
65 #define CR_MAJORVER        2
66 #define CR_MINORVER        9
67 #ifdef CR_BETA
68 #  define CR_BETA_VER      "a BETA"
69 #  define CR_VERSION_DATE  "05 May 2000"       /* last real code change */
70 #else
71 #  define CR_BETA_VER      ""
72 #  define CR_VERSION_DATE  "05 May 2000"       /* last public release date */
73 #  define CR_RELEASE
74 #endif
75 
76 #ifndef __G         /* UnZip only, for now (DLL stuff) */
77 #  define __G
78 #  define __G__
79 #  define __GDEF
80 #  define __GPRO    void
81 #  define __GPRO__
82 #endif
83 
84 #if defined(MSDOS) || defined(OS2) || defined(WIN32)
85 #  ifndef DOS_OS2_W32
86 #    define DOS_OS2_W32
87 #  endif
88 #endif
89 
90 #if defined(DOS_OS2_W32) || defined(__human68k__)
91 #  ifndef DOS_H68_OS2_W32
92 #    define DOS_H68_OS2_W32
93 #  endif
94 #endif
95 
96 #if defined(VM_CMS) || defined(MVS)
97 #  ifndef CMS_MVS
98 #    define CMS_MVS
99 #  endif
100 #endif
101 
102 /* To allow combining of Zip and UnZip static libraries in a single binary,
103  * the Zip and UnZip versions of the crypt core functions have to be named
104  * differently.
105  */
106 #ifdef ZIP
107 #  ifdef REALLY_SHORT_SYMS
108 #    define decrypt_byte   zdcrby
109 #  else
110 #    define decrypt_byte   zp_decrypt_byte
111 #  endif
112 #  define  update_keys     zp_update_keys
113 #  define  init_keys       zp_init_keys
114 #else /* !ZIP */
115 #  ifdef REALLY_SHORT_SYMS
116 #    define decrypt_byte   dcrbyt
117 #  endif
118 #endif /* ?ZIP */
119 
120 #define IZ_PWLEN  80    /* input buffer size for reading encryption key */
121 #ifndef PWLEN           /* for compatibility with previous zcrypt release... */
122 #  define PWLEN IZ_PWLEN
123 #endif
124 #define RAND_HEAD_LEN  12       /* length of encryption random header */
125 
126 /* the crc_32_tab array has to be provided externally for the crypt calculus */
127 #ifndef CRC_32_TAB                   /* UnZip provides this in globals.h */
128 # if (!defined(USE_ZLIB) || defined(USE_OWN_CRCTAB))
129    extern ZCONST ulg near *crc_32_tab;
130 # else
131    extern ZCONST ulg Far *crc_32_tab;
132 # endif
133 #endif /* !CRC_32_TAB */
134 
135 /* encode byte c, using temp t.  Warning: c must not have side effects. */
136 #define zencode(c,t)  (t=decrypt_byte(__G), update_keys(c), t^(c))
137 
138 /* decode byte c in place */
139 #define zdecode(c)   update_keys(__G__ c ^= decrypt_byte(__G))
140 
141 int  decrypt_byte OF((__GPRO));
142 int  update_keys OF((__GPRO__ int c));
143 void init_keys OF((__GPRO__ ZCONST char *passwd));
144 
145 #ifdef ZIP
146    void crypthead OF((ZCONST char *, ulg, FILE *));
147 #  ifdef UTIL
148      int zipcloak OF((struct zlist far *, FILE *, FILE *, ZCONST char *));
149      int zipbare OF((struct zlist far *, FILE *, FILE *, ZCONST char *));
150 #  else
151      unsigned zfwrite OF((zvoid *, extent, extent, FILE *));
152      extern char *key;
153 #  endif
154 #endif /* ZIP */
155 
156 #if (defined(UNZIP) && !defined(FUNZIP))
157    int  decrypt OF((__GPRO__ ZCONST char *passwrd));
158 #endif
159 
160 #ifdef FUNZIP
161    extern int encrypted;
162 #  ifdef NEXTBYTE
163 #    undef NEXTBYTE
164 #  endif
165 #  define NEXTBYTE \
166    (encrypted? update_keys(__G__ getc(G.in)^decrypt_byte(__G)) : getc(G.in))
167 #endif /* FUNZIP */
168 
169 #else /* !CRYPT */
170 /* dummy version */
171 
172 #define zencode
173 #define zdecode
174 
175 #define zfwrite  fwrite
176 
177 #endif /* ?CRYPT */
178 #endif /* !__crypt_h */
179