170 lines
4.6 KiB
C
170 lines
4.6 KiB
C
|
/*
|
||
|
Copyright (c) 1990-2007 Info-ZIP. All rights reserved.
|
||
|
|
||
|
See the accompanying file LICENSE, version 2005-Feb-10 or later
|
||
|
(the contents of which are also included in (un)zip.h) for terms of use.
|
||
|
If, for some reason, all these files are missing, the Info-ZIP license
|
||
|
also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html
|
||
|
*/
|
||
|
/*
|
||
|
crypt.h (full version) by Info-ZIP. Last revised: [see CR_VERSION_DATE]
|
||
|
|
||
|
The main encryption/decryption source code for Info-Zip software was
|
||
|
originally written in Europe. To the best of our knowledge, it can
|
||
|
be freely distributed in both source and object forms from any country,
|
||
|
including the USA under License Exception TSU of the U.S. Export
|
||
|
Administration Regulations (section 740.13(e)) of 6 June 2002.
|
||
|
|
||
|
NOTE on copyright history:
|
||
|
Previous versions of this source package (up to version 2.8) were
|
||
|
not copyrighted and put in the public domain. If you cannot comply
|
||
|
with the Info-Zip LICENSE, you may want to look for one of those
|
||
|
public domain versions.
|
||
|
*/
|
||
|
|
||
|
#ifndef __crypt_h /* don't include more than once */
|
||
|
#define __crypt_h
|
||
|
|
||
|
#ifdef CRYPT
|
||
|
# undef CRYPT
|
||
|
#endif
|
||
|
/*
|
||
|
Logic of selecting "full crypt" code:
|
||
|
a) default behaviour:
|
||
|
- dummy crypt code when compiling UnZipSFX stub, to minimize size
|
||
|
- full crypt code when used to compile Zip, UnZip and fUnZip
|
||
|
b) USE_CRYPT defined:
|
||
|
- always full crypt code
|
||
|
c) NO_CRYPT defined:
|
||
|
- never full crypt code
|
||
|
NO_CRYPT takes precedence over USE_CRYPT
|
||
|
*/
|
||
|
#if defined(NO_CRYPT)
|
||
|
# define CRYPT 0 /* dummy version */
|
||
|
#else
|
||
|
#if defined(USE_CRYPT)
|
||
|
# define CRYPT 1 /* full version */
|
||
|
#else
|
||
|
#if !defined(SFX)
|
||
|
# define CRYPT 1 /* full version for zip and main unzip */
|
||
|
#else
|
||
|
# define CRYPT 0 /* dummy version for unzip sfx */
|
||
|
#endif
|
||
|
#endif /* ?USE_CRYPT */
|
||
|
#endif /* ?NO_CRYPT */
|
||
|
|
||
|
#if CRYPT
|
||
|
/* full version */
|
||
|
|
||
|
#ifdef CR_BETA
|
||
|
# undef CR_BETA /* this is not a beta release */
|
||
|
#endif
|
||
|
|
||
|
#define CR_MAJORVER 2
|
||
|
#define CR_MINORVER 11
|
||
|
#ifdef CR_BETA
|
||
|
# define CR_BETA_VER "c BETA"
|
||
|
# define CR_VERSION_DATE "05 Jan 2007" /* last real code change */
|
||
|
#else
|
||
|
# define CR_BETA_VER ""
|
||
|
# define CR_VERSION_DATE "05 Jan 2007" /* last public release date */
|
||
|
# define CR_RELEASE
|
||
|
#endif
|
||
|
|
||
|
#ifndef __G /* UnZip only, for now (DLL stuff) */
|
||
|
# define __G
|
||
|
# define __G__
|
||
|
# define __GDEF
|
||
|
# define __GPRO void
|
||
|
# define __GPRO__
|
||
|
#endif
|
||
|
|
||
|
#if defined(MSDOS) || defined(OS2) || defined(WIN32)
|
||
|
# ifndef DOS_OS2_W32
|
||
|
# define DOS_OS2_W32
|
||
|
# endif
|
||
|
#endif
|
||
|
|
||
|
#if defined(DOS_OS2_W32) || defined(__human68k__)
|
||
|
# ifndef DOS_H68_OS2_W32
|
||
|
# define DOS_H68_OS2_W32
|
||
|
# endif
|
||
|
#endif
|
||
|
|
||
|
#if defined(VM_CMS) || defined(MVS)
|
||
|
# ifndef CMS_MVS
|
||
|
# define CMS_MVS
|
||
|
# endif
|
||
|
#endif
|
||
|
|
||
|
/* To allow combining of Zip and UnZip static libraries in a single binary,
|
||
|
* the Zip and UnZip versions of the crypt core functions have to be named
|
||
|
* differently.
|
||
|
*/
|
||
|
#ifdef ZIP
|
||
|
# ifdef REALLY_SHORT_SYMS
|
||
|
# define decrypt_byte zdcrby
|
||
|
# else
|
||
|
# define decrypt_byte zp_decrypt_byte
|
||
|
# endif
|
||
|
# define update_keys zp_update_keys
|
||
|
# define init_keys zp_init_keys
|
||
|
#else /* !ZIP */
|
||
|
# ifdef REALLY_SHORT_SYMS
|
||
|
# define decrypt_byte dcrbyt
|
||
|
# endif
|
||
|
#endif /* ?ZIP */
|
||
|
|
||
|
#define IZ_PWLEN 80 /* input buffer size for reading encryption key */
|
||
|
#ifndef PWLEN /* for compatibility with previous zcrypt release... */
|
||
|
# define PWLEN IZ_PWLEN
|
||
|
#endif
|
||
|
#define RAND_HEAD_LEN 12 /* length of encryption random header */
|
||
|
|
||
|
/* the crc_32_tab array has to be provided externally for the crypt calculus */
|
||
|
|
||
|
/* encode byte c, using temp t. Warning: c must not have side effects. */
|
||
|
#define zencode(c,t) (t=decrypt_byte(__G), update_keys(c), t^(c))
|
||
|
|
||
|
/* decode byte c in place */
|
||
|
#define zdecode(c) update_keys(__G__ c ^= decrypt_byte(__G))
|
||
|
|
||
|
int decrypt_byte OF((__GPRO));
|
||
|
int update_keys OF((__GPRO__ int c));
|
||
|
void init_keys OF((__GPRO__ ZCONST char *passwd));
|
||
|
|
||
|
#ifdef ZIP
|
||
|
void crypthead OF((ZCONST char *, ulg, FILE *));
|
||
|
# ifdef UTIL
|
||
|
int zipcloak OF((struct zlist far *, FILE *, FILE *, ZCONST char *));
|
||
|
int zipbare OF((struct zlist far *, FILE *, FILE *, ZCONST char *));
|
||
|
# else
|
||
|
unsigned zfwrite OF((zvoid *, extent, extent, FILE *));
|
||
|
extern char *key;
|
||
|
# endif
|
||
|
#endif /* ZIP */
|
||
|
|
||
|
#if (defined(UNZIP) && !defined(FUNZIP))
|
||
|
int decrypt OF((__GPRO__ ZCONST char *passwrd));
|
||
|
#endif
|
||
|
|
||
|
#ifdef FUNZIP
|
||
|
extern int encrypted;
|
||
|
# ifdef NEXTBYTE
|
||
|
# undef NEXTBYTE
|
||
|
# endif
|
||
|
# define NEXTBYTE \
|
||
|
(encrypted? update_keys(__G__ getc(G.in)^decrypt_byte(__G)) : getc(G.in))
|
||
|
#endif /* FUNZIP */
|
||
|
|
||
|
#else /* !CRYPT */
|
||
|
/* dummy version */
|
||
|
|
||
|
#define zencode
|
||
|
#define zdecode
|
||
|
|
||
|
#define zfwrite fwrite
|
||
|
|
||
|
#endif /* ?CRYPT */
|
||
|
#endif /* !__crypt_h */
|