2020-11-17 11:16:16 +00:00
|
|
|
/* crypt.h -- base code for traditional PKWARE encryption
|
|
|
|
Version 1.2.0, September 16th, 2017
|
|
|
|
|
|
|
|
Copyright (C) 2012-2017 Nathan Moinvaziri
|
|
|
|
https://github.com/nmoinvaz/minizip
|
|
|
|
Copyright (C) 1998-2005 Gilles Vollant
|
|
|
|
Modifications for Info-ZIP crypting
|
|
|
|
http://www.winimage.com/zLibDll/minizip.html
|
|
|
|
Copyright (C) 2003 Terry Thorsen
|
|
|
|
|
|
|
|
This code is a modified version of crypting code in Info-ZIP distribution
|
|
|
|
|
|
|
|
Copyright (C) 1990-2000 Info-ZIP. All rights reserved.
|
|
|
|
|
|
|
|
This program is distributed under the terms of the same license as zlib.
|
|
|
|
See the accompanying LICENSE file for the full text of the license.
|
2021-08-04 20:23:18 +00:00
|
|
|
*/
|
2020-11-17 11:16:16 +00:00
|
|
|
|
|
|
|
#ifndef _MINICRYPT_H
|
|
|
|
#define _MINICRYPT_H
|
|
|
|
|
|
|
|
#if ZLIB_VERNUM < 0x1270
|
|
|
|
typedef unsigned long z_crc_t;
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
extern "C" {
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#define RAND_HEAD_LEN 12
|
|
|
|
|
|
|
|
/***************************************************************************/
|
|
|
|
|
|
|
|
#define zdecode(pkeys,pcrc_32_tab,c) \
|
2021-08-04 20:23:18 +00:00
|
|
|
(update_keys(pkeys,pcrc_32_tab, c ^= decrypt_byte(pkeys)))
|
2020-11-17 11:16:16 +00:00
|
|
|
|
|
|
|
#define zencode(pkeys,pcrc_32_tab,c,t) \
|
2021-08-04 20:23:18 +00:00
|
|
|
(t = decrypt_byte(pkeys), update_keys(pkeys,pcrc_32_tab,c), t^(c))
|
2020-11-17 11:16:16 +00:00
|
|
|
|
|
|
|
/***************************************************************************/
|
|
|
|
|
|
|
|
/* Return the next byte in the pseudo-random sequence */
|
|
|
|
uint8_t decrypt_byte(uint32_t *pkeys);
|
|
|
|
|
|
|
|
/* Update the encryption keys with the next byte of plain text */
|
|
|
|
uint8_t update_keys(uint32_t *pkeys, const z_crc_t *pcrc_32_tab, int32_t c);
|
|
|
|
|
|
|
|
/* Initialize the encryption keys and the random header according to the given password. */
|
|
|
|
void init_keys(const char *passwd, uint32_t *pkeys, const z_crc_t *pcrc_32_tab);
|
|
|
|
|
|
|
|
#ifndef NOCRYPT
|
|
|
|
/* Generate cryptographically secure random numbers */
|
|
|
|
int cryptrand(unsigned char *buf, unsigned int len);
|
|
|
|
|
|
|
|
/* Create encryption header */
|
|
|
|
int crypthead(const char *passwd, uint8_t *buf, int buf_size, uint32_t *pkeys,
|
2021-08-04 20:23:18 +00:00
|
|
|
const z_crc_t *pcrc_32_tab, uint8_t verify1, uint8_t verify2);
|
2020-11-17 11:16:16 +00:00
|
|
|
#endif
|
|
|
|
|
|
|
|
/***************************************************************************/
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#endif
|