@appzung/react-native-code-push 8.3.2 → 9.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CodePush.podspec +3 -3
- package/README.md +3 -1
- package/android/app/build.gradle +2 -0
- package/android/app/src/main/AndroidManifest.xml +1 -2
- package/android/app/src/main/java/com/microsoft/codepush/react/CodePushUpdateUtils.java +15 -8
- package/android/build.gradle +3 -0
- package/ios/CodePush/CodePush.m +2 -1
- package/ios/CodePush/SSZipArchive/Info.plist +26 -0
- package/ios/CodePush/SSZipArchive/README.md +1 -1
- package/ios/CodePush/SSZipArchive/SSZipArchive.h +129 -27
- package/ios/CodePush/SSZipArchive/SSZipArchive.m +1119 -314
- package/ios/CodePush/SSZipArchive/SSZipCommon.h +71 -0
- package/ios/CodePush/SSZipArchive/Supporting Files/PrivacyInfo.xcprivacy +23 -0
- package/ios/CodePush/SSZipArchive/include/ZipArchive.h +25 -0
- package/ios/CodePush/SSZipArchive/minizip/LICENSE +17 -0
- package/ios/CodePush/SSZipArchive/minizip/mz.h +273 -0
- package/ios/CodePush/SSZipArchive/minizip/mz_compat.c +1306 -0
- package/ios/CodePush/SSZipArchive/minizip/mz_compat.h +346 -0
- package/ios/CodePush/SSZipArchive/minizip/mz_crypt.c +187 -0
- package/ios/CodePush/SSZipArchive/minizip/mz_crypt.h +65 -0
- package/ios/CodePush/SSZipArchive/minizip/mz_crypt_apple.c +526 -0
- package/ios/CodePush/SSZipArchive/minizip/mz_os.c +348 -0
- package/ios/CodePush/SSZipArchive/minizip/mz_os.h +176 -0
- package/ios/CodePush/SSZipArchive/minizip/mz_os_posix.c +350 -0
- package/ios/CodePush/SSZipArchive/minizip/mz_strm.c +556 -0
- package/ios/CodePush/SSZipArchive/minizip/mz_strm.h +132 -0
- package/ios/CodePush/SSZipArchive/minizip/mz_strm_buf.c +383 -0
- package/ios/CodePush/SSZipArchive/minizip/mz_strm_buf.h +42 -0
- package/ios/CodePush/SSZipArchive/minizip/mz_strm_mem.c +269 -0
- package/ios/CodePush/SSZipArchive/minizip/mz_strm_mem.h +48 -0
- package/ios/CodePush/SSZipArchive/minizip/mz_strm_os.h +40 -0
- package/ios/CodePush/SSZipArchive/minizip/mz_strm_os_posix.c +203 -0
- package/ios/CodePush/SSZipArchive/minizip/mz_strm_pkcrypt.c +334 -0
- package/ios/CodePush/SSZipArchive/minizip/mz_strm_pkcrypt.h +46 -0
- package/ios/CodePush/SSZipArchive/minizip/mz_strm_split.c +429 -0
- package/ios/CodePush/SSZipArchive/minizip/mz_strm_split.h +43 -0
- package/ios/CodePush/SSZipArchive/minizip/mz_strm_wzaes.c +360 -0
- package/ios/CodePush/SSZipArchive/minizip/mz_strm_wzaes.h +46 -0
- package/ios/CodePush/SSZipArchive/minizip/mz_strm_zlib.c +389 -0
- package/ios/CodePush/SSZipArchive/minizip/mz_strm_zlib.h +43 -0
- package/ios/CodePush/SSZipArchive/minizip/mz_zip.c +2782 -0
- package/ios/CodePush/SSZipArchive/minizip/mz_zip.h +262 -0
- package/ios/CodePush/SSZipArchive/minizip/mz_zip_rw.c +1942 -0
- package/ios/CodePush/SSZipArchive/minizip/mz_zip_rw.h +285 -0
- package/ios/CodePush.xcodeproj/project.pbxproj +245 -130
- package/ios/PrivacyInfo.xcprivacy +31 -0
- package/package.json +2 -2
- package/ios/CodePush/SSZipArchive/Common.h +0 -81
- package/ios/CodePush/SSZipArchive/aes/aes.h +0 -198
- package/ios/CodePush/SSZipArchive/aes/aes_via_ace.h +0 -541
- package/ios/CodePush/SSZipArchive/aes/aescrypt.c +0 -294
- package/ios/CodePush/SSZipArchive/aes/aeskey.c +0 -548
- package/ios/CodePush/SSZipArchive/aes/aesopt.h +0 -739
- package/ios/CodePush/SSZipArchive/aes/aestab.c +0 -391
- package/ios/CodePush/SSZipArchive/aes/aestab.h +0 -173
- package/ios/CodePush/SSZipArchive/aes/brg_endian.h +0 -126
- package/ios/CodePush/SSZipArchive/aes/brg_types.h +0 -219
- package/ios/CodePush/SSZipArchive/aes/entropy.c +0 -54
- package/ios/CodePush/SSZipArchive/aes/entropy.h +0 -16
- package/ios/CodePush/SSZipArchive/aes/fileenc.c +0 -144
- package/ios/CodePush/SSZipArchive/aes/fileenc.h +0 -121
- package/ios/CodePush/SSZipArchive/aes/hmac.c +0 -145
- package/ios/CodePush/SSZipArchive/aes/hmac.h +0 -103
- package/ios/CodePush/SSZipArchive/aes/prng.c +0 -155
- package/ios/CodePush/SSZipArchive/aes/prng.h +0 -82
- package/ios/CodePush/SSZipArchive/aes/pwd2key.c +0 -103
- package/ios/CodePush/SSZipArchive/aes/pwd2key.h +0 -57
- package/ios/CodePush/SSZipArchive/aes/sha1.c +0 -258
- package/ios/CodePush/SSZipArchive/aes/sha1.h +0 -73
- package/ios/CodePush/SSZipArchive/minizip/crypt.h +0 -130
- package/ios/CodePush/SSZipArchive/minizip/ioapi.c +0 -369
- package/ios/CodePush/SSZipArchive/minizip/ioapi.h +0 -175
- package/ios/CodePush/SSZipArchive/minizip/mztools.c +0 -284
- package/ios/CodePush/SSZipArchive/minizip/mztools.h +0 -31
- package/ios/CodePush/SSZipArchive/minizip/unzip.c +0 -1839
- package/ios/CodePush/SSZipArchive/minizip/unzip.h +0 -248
- package/ios/CodePush/SSZipArchive/minizip/zip.c +0 -1910
- package/ios/CodePush/SSZipArchive/minizip/zip.h +0 -202
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/* mz_strm_mem.h -- Stream for memory access
|
|
2
|
+
part of the minizip-ng project
|
|
3
|
+
|
|
4
|
+
Copyright (C) Nathan Moinvaziri
|
|
5
|
+
https://github.com/zlib-ng/minizip-ng
|
|
6
|
+
|
|
7
|
+
This program is distributed under the terms of the same license as zlib.
|
|
8
|
+
See the accompanying LICENSE file for the full text of the license.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
#ifndef MZ_STREAM_MEM_H
|
|
12
|
+
#define MZ_STREAM_MEM_H
|
|
13
|
+
|
|
14
|
+
#ifdef __cplusplus
|
|
15
|
+
extern "C" {
|
|
16
|
+
#endif
|
|
17
|
+
|
|
18
|
+
/***************************************************************************/
|
|
19
|
+
|
|
20
|
+
int32_t mz_stream_mem_open(void *stream, const char *filename, int32_t mode);
|
|
21
|
+
int32_t mz_stream_mem_is_open(void *stream);
|
|
22
|
+
int32_t mz_stream_mem_read(void *stream, void *buf, int32_t size);
|
|
23
|
+
int32_t mz_stream_mem_write(void *stream, const void *buf, int32_t size);
|
|
24
|
+
int64_t mz_stream_mem_tell(void *stream);
|
|
25
|
+
int32_t mz_stream_mem_seek(void *stream, int64_t offset, int32_t origin);
|
|
26
|
+
int32_t mz_stream_mem_close(void *stream);
|
|
27
|
+
int32_t mz_stream_mem_error(void *stream);
|
|
28
|
+
|
|
29
|
+
void mz_stream_mem_set_buffer(void *stream, void *buf, int32_t size);
|
|
30
|
+
int32_t mz_stream_mem_get_buffer(void *stream, const void **buf);
|
|
31
|
+
int32_t mz_stream_mem_get_buffer_at(void *stream, int64_t position, const void **buf);
|
|
32
|
+
int32_t mz_stream_mem_get_buffer_at_current(void *stream, const void **buf);
|
|
33
|
+
void mz_stream_mem_get_buffer_length(void *stream, int32_t *length);
|
|
34
|
+
void mz_stream_mem_set_buffer_limit(void *stream, int32_t limit);
|
|
35
|
+
void mz_stream_mem_set_grow_size(void *stream, int32_t grow_size);
|
|
36
|
+
|
|
37
|
+
void* mz_stream_mem_create(void **stream);
|
|
38
|
+
void mz_stream_mem_delete(void **stream);
|
|
39
|
+
|
|
40
|
+
void* mz_stream_mem_get_interface(void);
|
|
41
|
+
|
|
42
|
+
/***************************************************************************/
|
|
43
|
+
|
|
44
|
+
#ifdef __cplusplus
|
|
45
|
+
}
|
|
46
|
+
#endif
|
|
47
|
+
|
|
48
|
+
#endif
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/* mz_sstrm_os.h -- Stream for filesystem access
|
|
2
|
+
part of the minizip-ng project
|
|
3
|
+
|
|
4
|
+
Copyright (C) Nathan Moinvaziri
|
|
5
|
+
https://github.com/zlib-ng/minizip-ng
|
|
6
|
+
|
|
7
|
+
This program is distributed under the terms of the same license as zlib.
|
|
8
|
+
See the accompanying LICENSE file for the full text of the license.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
#ifndef MZ_STREAM_OS_H
|
|
12
|
+
#define MZ_STREAM_OS_H
|
|
13
|
+
|
|
14
|
+
#ifdef __cplusplus
|
|
15
|
+
extern "C" {
|
|
16
|
+
#endif
|
|
17
|
+
|
|
18
|
+
/***************************************************************************/
|
|
19
|
+
|
|
20
|
+
int32_t mz_stream_os_open(void *stream, const char *path, int32_t mode);
|
|
21
|
+
int32_t mz_stream_os_is_open(void *stream);
|
|
22
|
+
int32_t mz_stream_os_read(void *stream, void *buf, int32_t size);
|
|
23
|
+
int32_t mz_stream_os_write(void *stream, const void *buf, int32_t size);
|
|
24
|
+
int64_t mz_stream_os_tell(void *stream);
|
|
25
|
+
int32_t mz_stream_os_seek(void *stream, int64_t offset, int32_t origin);
|
|
26
|
+
int32_t mz_stream_os_close(void *stream);
|
|
27
|
+
int32_t mz_stream_os_error(void *stream);
|
|
28
|
+
|
|
29
|
+
void* mz_stream_os_create(void **stream);
|
|
30
|
+
void mz_stream_os_delete(void **stream);
|
|
31
|
+
|
|
32
|
+
void* mz_stream_os_get_interface(void);
|
|
33
|
+
|
|
34
|
+
/***************************************************************************/
|
|
35
|
+
|
|
36
|
+
#ifdef __cplusplus
|
|
37
|
+
}
|
|
38
|
+
#endif
|
|
39
|
+
|
|
40
|
+
#endif
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
/* mz_strm_posix.c -- Stream for filesystem access for posix/linux
|
|
2
|
+
part of the minizip-ng project
|
|
3
|
+
|
|
4
|
+
Copyright (C) Nathan Moinvaziri
|
|
5
|
+
https://github.com/zlib-ng/minizip-ng
|
|
6
|
+
Modifications for Zip64 support
|
|
7
|
+
Copyright (C) 2009-2010 Mathias Svensson
|
|
8
|
+
http://result42.com
|
|
9
|
+
Copyright (C) 1998-2010 Gilles Vollant
|
|
10
|
+
https://www.winimage.com/zLibDll/minizip.html
|
|
11
|
+
|
|
12
|
+
This program is distributed under the terms of the same license as zlib.
|
|
13
|
+
See the accompanying LICENSE file for the full text of the license.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
#include "mz.h"
|
|
17
|
+
#include "mz_strm.h"
|
|
18
|
+
#include "mz_strm_os.h"
|
|
19
|
+
|
|
20
|
+
#include <stdio.h> /* fopen, fread.. */
|
|
21
|
+
#include <errno.h>
|
|
22
|
+
|
|
23
|
+
/***************************************************************************/
|
|
24
|
+
|
|
25
|
+
#define fopen64 fopen
|
|
26
|
+
#ifndef MZ_FILE32_API
|
|
27
|
+
# ifndef NO_FSEEKO
|
|
28
|
+
# define ftello64 ftello
|
|
29
|
+
# define fseeko64 fseeko
|
|
30
|
+
# elif defined(_MSC_VER) && (_MSC_VER >= 1400)
|
|
31
|
+
# define ftello64 _ftelli64
|
|
32
|
+
# define fseeko64 _fseeki64
|
|
33
|
+
# endif
|
|
34
|
+
#endif
|
|
35
|
+
#ifndef ftello64
|
|
36
|
+
# define ftello64 ftell
|
|
37
|
+
#endif
|
|
38
|
+
#ifndef fseeko64
|
|
39
|
+
# define fseeko64 fseek
|
|
40
|
+
#endif
|
|
41
|
+
|
|
42
|
+
/***************************************************************************/
|
|
43
|
+
|
|
44
|
+
static mz_stream_vtbl mz_stream_os_vtbl = {
|
|
45
|
+
mz_stream_os_open,
|
|
46
|
+
mz_stream_os_is_open,
|
|
47
|
+
mz_stream_os_read,
|
|
48
|
+
mz_stream_os_write,
|
|
49
|
+
mz_stream_os_tell,
|
|
50
|
+
mz_stream_os_seek,
|
|
51
|
+
mz_stream_os_close,
|
|
52
|
+
mz_stream_os_error,
|
|
53
|
+
mz_stream_os_create,
|
|
54
|
+
mz_stream_os_delete,
|
|
55
|
+
NULL,
|
|
56
|
+
NULL
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
/***************************************************************************/
|
|
60
|
+
|
|
61
|
+
typedef struct mz_stream_posix_s {
|
|
62
|
+
mz_stream stream;
|
|
63
|
+
int32_t error;
|
|
64
|
+
FILE *handle;
|
|
65
|
+
} mz_stream_posix;
|
|
66
|
+
|
|
67
|
+
/***************************************************************************/
|
|
68
|
+
|
|
69
|
+
int32_t mz_stream_os_open(void *stream, const char *path, int32_t mode) {
|
|
70
|
+
mz_stream_posix *posix = (mz_stream_posix *)stream;
|
|
71
|
+
const char *mode_fopen = NULL;
|
|
72
|
+
|
|
73
|
+
if (!path)
|
|
74
|
+
return MZ_PARAM_ERROR;
|
|
75
|
+
|
|
76
|
+
if ((mode & MZ_OPEN_MODE_READWRITE) == MZ_OPEN_MODE_READ)
|
|
77
|
+
mode_fopen = "rb";
|
|
78
|
+
else if (mode & MZ_OPEN_MODE_APPEND)
|
|
79
|
+
mode_fopen = "r+b";
|
|
80
|
+
else if (mode & MZ_OPEN_MODE_CREATE)
|
|
81
|
+
mode_fopen = "wb";
|
|
82
|
+
else
|
|
83
|
+
return MZ_OPEN_ERROR;
|
|
84
|
+
|
|
85
|
+
posix->handle = fopen64(path, mode_fopen);
|
|
86
|
+
if (!posix->handle) {
|
|
87
|
+
posix->error = errno;
|
|
88
|
+
return MZ_OPEN_ERROR;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
if (mode & MZ_OPEN_MODE_APPEND)
|
|
92
|
+
return mz_stream_os_seek(stream, 0, MZ_SEEK_END);
|
|
93
|
+
|
|
94
|
+
return MZ_OK;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
int32_t mz_stream_os_is_open(void *stream) {
|
|
98
|
+
mz_stream_posix *posix = (mz_stream_posix *)stream;
|
|
99
|
+
if (!posix->handle)
|
|
100
|
+
return MZ_OPEN_ERROR;
|
|
101
|
+
return MZ_OK;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
int32_t mz_stream_os_read(void *stream, void *buf, int32_t size) {
|
|
105
|
+
mz_stream_posix *posix = (mz_stream_posix *)stream;
|
|
106
|
+
int32_t read = (int32_t)fread(buf, 1, (size_t)size, posix->handle);
|
|
107
|
+
if (read < size && ferror(posix->handle)) {
|
|
108
|
+
posix->error = errno;
|
|
109
|
+
return MZ_READ_ERROR;
|
|
110
|
+
}
|
|
111
|
+
return read;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
int32_t mz_stream_os_write(void *stream, const void *buf, int32_t size) {
|
|
115
|
+
mz_stream_posix *posix = (mz_stream_posix *)stream;
|
|
116
|
+
int32_t written = (int32_t)fwrite(buf, 1, (size_t)size, posix->handle);
|
|
117
|
+
if (written < size && ferror(posix->handle)) {
|
|
118
|
+
posix->error = errno;
|
|
119
|
+
return MZ_WRITE_ERROR;
|
|
120
|
+
}
|
|
121
|
+
return written;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
int64_t mz_stream_os_tell(void *stream) {
|
|
125
|
+
mz_stream_posix *posix = (mz_stream_posix *)stream;
|
|
126
|
+
int64_t position = ftello64(posix->handle);
|
|
127
|
+
if (position == -1) {
|
|
128
|
+
posix->error = errno;
|
|
129
|
+
return MZ_TELL_ERROR;
|
|
130
|
+
}
|
|
131
|
+
return position;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
int32_t mz_stream_os_seek(void *stream, int64_t offset, int32_t origin) {
|
|
135
|
+
mz_stream_posix *posix = (mz_stream_posix *)stream;
|
|
136
|
+
int32_t fseek_origin = 0;
|
|
137
|
+
|
|
138
|
+
switch (origin) {
|
|
139
|
+
case MZ_SEEK_CUR:
|
|
140
|
+
fseek_origin = SEEK_CUR;
|
|
141
|
+
break;
|
|
142
|
+
case MZ_SEEK_END:
|
|
143
|
+
fseek_origin = SEEK_END;
|
|
144
|
+
break;
|
|
145
|
+
case MZ_SEEK_SET:
|
|
146
|
+
fseek_origin = SEEK_SET;
|
|
147
|
+
break;
|
|
148
|
+
default:
|
|
149
|
+
return MZ_SEEK_ERROR;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
if (fseeko64(posix->handle, offset, fseek_origin) != 0) {
|
|
153
|
+
posix->error = errno;
|
|
154
|
+
return MZ_SEEK_ERROR;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
return MZ_OK;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
int32_t mz_stream_os_close(void *stream) {
|
|
161
|
+
mz_stream_posix *posix = (mz_stream_posix *)stream;
|
|
162
|
+
int32_t closed = 0;
|
|
163
|
+
if (posix->handle) {
|
|
164
|
+
closed = fclose(posix->handle);
|
|
165
|
+
posix->handle = NULL;
|
|
166
|
+
}
|
|
167
|
+
if (closed != 0) {
|
|
168
|
+
posix->error = errno;
|
|
169
|
+
return MZ_CLOSE_ERROR;
|
|
170
|
+
}
|
|
171
|
+
return MZ_OK;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
int32_t mz_stream_os_error(void *stream) {
|
|
175
|
+
mz_stream_posix *posix = (mz_stream_posix *)stream;
|
|
176
|
+
return posix->error;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
void *mz_stream_os_create(void **stream) {
|
|
180
|
+
mz_stream_posix *posix = NULL;
|
|
181
|
+
|
|
182
|
+
posix = (mz_stream_posix *)calloc(1, sizeof(mz_stream_posix));
|
|
183
|
+
if (posix)
|
|
184
|
+
posix->stream.vtbl = &mz_stream_os_vtbl;
|
|
185
|
+
if (stream)
|
|
186
|
+
*stream = posix;
|
|
187
|
+
|
|
188
|
+
return posix;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
void mz_stream_os_delete(void **stream) {
|
|
192
|
+
mz_stream_posix *posix = NULL;
|
|
193
|
+
if (!stream)
|
|
194
|
+
return;
|
|
195
|
+
posix = (mz_stream_posix *)*stream;
|
|
196
|
+
if (posix)
|
|
197
|
+
free(posix);
|
|
198
|
+
*stream = NULL;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
void *mz_stream_os_get_interface(void) {
|
|
202
|
+
return (void *)&mz_stream_os_vtbl;
|
|
203
|
+
}
|
|
@@ -0,0 +1,334 @@
|
|
|
1
|
+
/* mz_strm_pkcrypt.c -- Code for traditional PKWARE encryption
|
|
2
|
+
part of the minizip-ng project
|
|
3
|
+
|
|
4
|
+
Copyright (C) Nathan Moinvaziri
|
|
5
|
+
https://github.com/zlib-ng/minizip-ng
|
|
6
|
+
Copyright (C) 1998-2005 Gilles Vollant
|
|
7
|
+
Modifications for Info-ZIP crypting
|
|
8
|
+
https://www.winimage.com/zLibDll/minizip.html
|
|
9
|
+
Copyright (C) 2003 Terry Thorsen
|
|
10
|
+
|
|
11
|
+
This code is a modified version of crypting code in Info-ZIP distribution
|
|
12
|
+
|
|
13
|
+
Copyright (C) 1990-2000 Info-ZIP. All rights reserved.
|
|
14
|
+
|
|
15
|
+
This program is distributed under the terms of the same license as zlib.
|
|
16
|
+
See the accompanying LICENSE file for the full text of the license.
|
|
17
|
+
|
|
18
|
+
This encryption code is a direct transcription of the algorithm from
|
|
19
|
+
Roger Schlafly, described by Phil Katz in the file appnote.txt. This
|
|
20
|
+
file (appnote.txt) is distributed with the PKZIP program (even in the
|
|
21
|
+
version without encryption capabilities).
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
#include "mz.h"
|
|
25
|
+
#include "mz_crypt.h"
|
|
26
|
+
#include "mz_strm.h"
|
|
27
|
+
#include "mz_strm_pkcrypt.h"
|
|
28
|
+
|
|
29
|
+
/***************************************************************************/
|
|
30
|
+
|
|
31
|
+
static mz_stream_vtbl mz_stream_pkcrypt_vtbl = {
|
|
32
|
+
mz_stream_pkcrypt_open,
|
|
33
|
+
mz_stream_pkcrypt_is_open,
|
|
34
|
+
mz_stream_pkcrypt_read,
|
|
35
|
+
mz_stream_pkcrypt_write,
|
|
36
|
+
mz_stream_pkcrypt_tell,
|
|
37
|
+
mz_stream_pkcrypt_seek,
|
|
38
|
+
mz_stream_pkcrypt_close,
|
|
39
|
+
mz_stream_pkcrypt_error,
|
|
40
|
+
mz_stream_pkcrypt_create,
|
|
41
|
+
mz_stream_pkcrypt_delete,
|
|
42
|
+
mz_stream_pkcrypt_get_prop_int64,
|
|
43
|
+
mz_stream_pkcrypt_set_prop_int64
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
/***************************************************************************/
|
|
47
|
+
|
|
48
|
+
typedef struct mz_stream_pkcrypt_s {
|
|
49
|
+
mz_stream stream;
|
|
50
|
+
int32_t error;
|
|
51
|
+
int16_t initialized;
|
|
52
|
+
uint8_t buffer[UINT16_MAX];
|
|
53
|
+
int64_t total_in;
|
|
54
|
+
int64_t max_total_in;
|
|
55
|
+
int64_t total_out;
|
|
56
|
+
uint32_t keys[3]; /* keys defining the pseudo-random sequence */
|
|
57
|
+
uint8_t verify1;
|
|
58
|
+
uint8_t verify2;
|
|
59
|
+
const char *password;
|
|
60
|
+
} mz_stream_pkcrypt;
|
|
61
|
+
|
|
62
|
+
/***************************************************************************/
|
|
63
|
+
|
|
64
|
+
#define mz_stream_pkcrypt_decode(strm, c) \
|
|
65
|
+
(mz_stream_pkcrypt_update_keys(strm, \
|
|
66
|
+
c ^= mz_stream_pkcrypt_decrypt_byte(strm)))
|
|
67
|
+
|
|
68
|
+
#define mz_stream_pkcrypt_encode(strm, c, t) \
|
|
69
|
+
(t = mz_stream_pkcrypt_decrypt_byte(strm), \
|
|
70
|
+
mz_stream_pkcrypt_update_keys(strm, (uint8_t)c), (uint8_t)(t^(c)))
|
|
71
|
+
|
|
72
|
+
/***************************************************************************/
|
|
73
|
+
|
|
74
|
+
static uint8_t mz_stream_pkcrypt_decrypt_byte(void *stream) {
|
|
75
|
+
mz_stream_pkcrypt *pkcrypt = (mz_stream_pkcrypt *)stream;
|
|
76
|
+
|
|
77
|
+
unsigned temp; /* POTENTIAL BUG: temp*(temp^1) may overflow in an */
|
|
78
|
+
/* unpredictable manner on 16-bit systems; not a problem */
|
|
79
|
+
/* with any known compiler so far, though. */
|
|
80
|
+
|
|
81
|
+
temp = pkcrypt->keys[2] | 2;
|
|
82
|
+
return (uint8_t)(((temp * (temp ^ 1)) >> 8) & 0xff);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
static uint8_t mz_stream_pkcrypt_update_keys(void *stream, uint8_t c) {
|
|
86
|
+
mz_stream_pkcrypt *pkcrypt = (mz_stream_pkcrypt *)stream;
|
|
87
|
+
uint8_t buf = c;
|
|
88
|
+
|
|
89
|
+
pkcrypt->keys[0] = (uint32_t)~mz_crypt_crc32_update(~pkcrypt->keys[0], &buf, 1);
|
|
90
|
+
|
|
91
|
+
pkcrypt->keys[1] += pkcrypt->keys[0] & 0xff;
|
|
92
|
+
pkcrypt->keys[1] *= 134775813L;
|
|
93
|
+
pkcrypt->keys[1] += 1;
|
|
94
|
+
|
|
95
|
+
buf = (uint8_t)(pkcrypt->keys[1] >> 24);
|
|
96
|
+
pkcrypt->keys[2] = (uint32_t)~mz_crypt_crc32_update(~pkcrypt->keys[2], &buf, 1);
|
|
97
|
+
|
|
98
|
+
return (uint8_t)c;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
static void mz_stream_pkcrypt_init_keys(void *stream, const char *password) {
|
|
102
|
+
mz_stream_pkcrypt *pkcrypt = (mz_stream_pkcrypt *)stream;
|
|
103
|
+
|
|
104
|
+
pkcrypt->keys[0] = 305419896L;
|
|
105
|
+
pkcrypt->keys[1] = 591751049L;
|
|
106
|
+
pkcrypt->keys[2] = 878082192L;
|
|
107
|
+
|
|
108
|
+
while (*password != 0) {
|
|
109
|
+
mz_stream_pkcrypt_update_keys(stream, (uint8_t)*password);
|
|
110
|
+
password += 1;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/***************************************************************************/
|
|
115
|
+
|
|
116
|
+
int32_t mz_stream_pkcrypt_open(void *stream, const char *path, int32_t mode) {
|
|
117
|
+
mz_stream_pkcrypt *pkcrypt = (mz_stream_pkcrypt *)stream;
|
|
118
|
+
uint16_t t = 0;
|
|
119
|
+
int16_t i = 0;
|
|
120
|
+
uint8_t verify1 = 0;
|
|
121
|
+
uint8_t verify2 = 0;
|
|
122
|
+
uint8_t header[MZ_PKCRYPT_HEADER_SIZE];
|
|
123
|
+
const char *password = path;
|
|
124
|
+
|
|
125
|
+
pkcrypt->total_in = 0;
|
|
126
|
+
pkcrypt->total_out = 0;
|
|
127
|
+
pkcrypt->initialized = 0;
|
|
128
|
+
|
|
129
|
+
if (mz_stream_is_open(pkcrypt->stream.base) != MZ_OK)
|
|
130
|
+
return MZ_OPEN_ERROR;
|
|
131
|
+
|
|
132
|
+
if (!password)
|
|
133
|
+
password = pkcrypt->password;
|
|
134
|
+
if (!password)
|
|
135
|
+
return MZ_PARAM_ERROR;
|
|
136
|
+
|
|
137
|
+
mz_stream_pkcrypt_init_keys(stream, password);
|
|
138
|
+
|
|
139
|
+
if (mode & MZ_OPEN_MODE_WRITE) {
|
|
140
|
+
/* First generate RAND_HEAD_LEN - 2 random bytes. */
|
|
141
|
+
mz_crypt_rand(header, MZ_PKCRYPT_HEADER_SIZE - 2);
|
|
142
|
+
|
|
143
|
+
/* Encrypt random header (last two bytes is high word of crc) */
|
|
144
|
+
for (i = 0; i < MZ_PKCRYPT_HEADER_SIZE - 2; i++)
|
|
145
|
+
header[i] = mz_stream_pkcrypt_encode(stream, header[i], t);
|
|
146
|
+
|
|
147
|
+
header[i++] = mz_stream_pkcrypt_encode(stream, pkcrypt->verify1, t);
|
|
148
|
+
header[i++] = mz_stream_pkcrypt_encode(stream, pkcrypt->verify2, t);
|
|
149
|
+
|
|
150
|
+
if (mz_stream_write(pkcrypt->stream.base, header, sizeof(header)) != sizeof(header))
|
|
151
|
+
return MZ_WRITE_ERROR;
|
|
152
|
+
|
|
153
|
+
pkcrypt->total_out += MZ_PKCRYPT_HEADER_SIZE;
|
|
154
|
+
} else if (mode & MZ_OPEN_MODE_READ) {
|
|
155
|
+
if (mz_stream_read(pkcrypt->stream.base, header, sizeof(header)) != sizeof(header))
|
|
156
|
+
return MZ_READ_ERROR;
|
|
157
|
+
|
|
158
|
+
for (i = 0; i < MZ_PKCRYPT_HEADER_SIZE - 2; i++)
|
|
159
|
+
header[i] = mz_stream_pkcrypt_decode(stream, header[i]);
|
|
160
|
+
|
|
161
|
+
verify1 = mz_stream_pkcrypt_decode(stream, header[i++]);
|
|
162
|
+
verify2 = mz_stream_pkcrypt_decode(stream, header[i++]);
|
|
163
|
+
|
|
164
|
+
/* Older versions used 2 byte check, newer versions use 1 byte check. */
|
|
165
|
+
MZ_UNUSED(verify1);
|
|
166
|
+
if ((verify2 != 0) && (verify2 != pkcrypt->verify2))
|
|
167
|
+
return MZ_PASSWORD_ERROR;
|
|
168
|
+
|
|
169
|
+
pkcrypt->total_in += MZ_PKCRYPT_HEADER_SIZE;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
pkcrypt->initialized = 1;
|
|
173
|
+
return MZ_OK;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
int32_t mz_stream_pkcrypt_is_open(void *stream) {
|
|
177
|
+
mz_stream_pkcrypt *pkcrypt = (mz_stream_pkcrypt *)stream;
|
|
178
|
+
if (!pkcrypt->initialized)
|
|
179
|
+
return MZ_OPEN_ERROR;
|
|
180
|
+
return MZ_OK;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
int32_t mz_stream_pkcrypt_read(void *stream, void *buf, int32_t size) {
|
|
184
|
+
mz_stream_pkcrypt *pkcrypt = (mz_stream_pkcrypt *)stream;
|
|
185
|
+
uint8_t *buf_ptr = (uint8_t *)buf;
|
|
186
|
+
int32_t bytes_to_read = size;
|
|
187
|
+
int32_t read = 0;
|
|
188
|
+
int32_t i = 0;
|
|
189
|
+
|
|
190
|
+
if ((int64_t)bytes_to_read > (pkcrypt->max_total_in - pkcrypt->total_in))
|
|
191
|
+
bytes_to_read = (int32_t)(pkcrypt->max_total_in - pkcrypt->total_in);
|
|
192
|
+
|
|
193
|
+
read = mz_stream_read(pkcrypt->stream.base, buf, bytes_to_read);
|
|
194
|
+
|
|
195
|
+
for (i = 0; i < read; i++)
|
|
196
|
+
buf_ptr[i] = mz_stream_pkcrypt_decode(stream, buf_ptr[i]);
|
|
197
|
+
|
|
198
|
+
if (read > 0)
|
|
199
|
+
pkcrypt->total_in += read;
|
|
200
|
+
|
|
201
|
+
return read;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
int32_t mz_stream_pkcrypt_write(void *stream, const void *buf, int32_t size) {
|
|
205
|
+
mz_stream_pkcrypt *pkcrypt = (mz_stream_pkcrypt *)stream;
|
|
206
|
+
const uint8_t *buf_ptr = (const uint8_t *)buf;
|
|
207
|
+
int32_t bytes_to_write = sizeof(pkcrypt->buffer);
|
|
208
|
+
int32_t total_written = 0;
|
|
209
|
+
int32_t written = 0;
|
|
210
|
+
int32_t i = 0;
|
|
211
|
+
uint16_t t = 0;
|
|
212
|
+
|
|
213
|
+
if (size < 0)
|
|
214
|
+
return MZ_PARAM_ERROR;
|
|
215
|
+
|
|
216
|
+
do {
|
|
217
|
+
if (bytes_to_write > (size - total_written))
|
|
218
|
+
bytes_to_write = (size - total_written);
|
|
219
|
+
|
|
220
|
+
for (i = 0; i < bytes_to_write; i += 1) {
|
|
221
|
+
pkcrypt->buffer[i] = mz_stream_pkcrypt_encode(stream, *buf_ptr, t);
|
|
222
|
+
buf_ptr += 1;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
written = mz_stream_write(pkcrypt->stream.base, pkcrypt->buffer, bytes_to_write);
|
|
226
|
+
if (written < 0)
|
|
227
|
+
return written;
|
|
228
|
+
|
|
229
|
+
total_written += written;
|
|
230
|
+
} while (total_written < size && written > 0);
|
|
231
|
+
|
|
232
|
+
pkcrypt->total_out += total_written;
|
|
233
|
+
return total_written;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
int64_t mz_stream_pkcrypt_tell(void *stream) {
|
|
237
|
+
mz_stream_pkcrypt *pkcrypt = (mz_stream_pkcrypt *)stream;
|
|
238
|
+
return mz_stream_tell(pkcrypt->stream.base);
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
int32_t mz_stream_pkcrypt_seek(void *stream, int64_t offset, int32_t origin) {
|
|
242
|
+
mz_stream_pkcrypt *pkcrypt = (mz_stream_pkcrypt *)stream;
|
|
243
|
+
return mz_stream_seek(pkcrypt->stream.base, offset, origin);
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
int32_t mz_stream_pkcrypt_close(void *stream) {
|
|
247
|
+
mz_stream_pkcrypt *pkcrypt = (mz_stream_pkcrypt *)stream;
|
|
248
|
+
pkcrypt->initialized = 0;
|
|
249
|
+
return MZ_OK;
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
int32_t mz_stream_pkcrypt_error(void *stream) {
|
|
253
|
+
mz_stream_pkcrypt *pkcrypt = (mz_stream_pkcrypt *)stream;
|
|
254
|
+
return pkcrypt->error;
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
void mz_stream_pkcrypt_set_password(void *stream, const char *password) {
|
|
258
|
+
mz_stream_pkcrypt *pkcrypt = (mz_stream_pkcrypt *)stream;
|
|
259
|
+
pkcrypt->password = password;
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
void mz_stream_pkcrypt_set_verify(void *stream, uint8_t verify1, uint8_t verify2) {
|
|
263
|
+
mz_stream_pkcrypt *pkcrypt = (mz_stream_pkcrypt *)stream;
|
|
264
|
+
pkcrypt->verify1 = verify1;
|
|
265
|
+
pkcrypt->verify2 = verify2;
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
void mz_stream_pkcrypt_get_verify(void *stream, uint8_t *verify1, uint8_t *verify2) {
|
|
269
|
+
mz_stream_pkcrypt *pkcrypt = (mz_stream_pkcrypt *)stream;
|
|
270
|
+
*verify1 = pkcrypt->verify1;
|
|
271
|
+
*verify2 = pkcrypt->verify2;
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
int32_t mz_stream_pkcrypt_get_prop_int64(void *stream, int32_t prop, int64_t *value) {
|
|
275
|
+
mz_stream_pkcrypt *pkcrypt = (mz_stream_pkcrypt *)stream;
|
|
276
|
+
switch (prop) {
|
|
277
|
+
case MZ_STREAM_PROP_TOTAL_IN:
|
|
278
|
+
*value = pkcrypt->total_in;
|
|
279
|
+
break;
|
|
280
|
+
case MZ_STREAM_PROP_TOTAL_OUT:
|
|
281
|
+
*value = pkcrypt->total_out;
|
|
282
|
+
break;
|
|
283
|
+
case MZ_STREAM_PROP_TOTAL_IN_MAX:
|
|
284
|
+
*value = pkcrypt->max_total_in;
|
|
285
|
+
break;
|
|
286
|
+
case MZ_STREAM_PROP_HEADER_SIZE:
|
|
287
|
+
*value = MZ_PKCRYPT_HEADER_SIZE;
|
|
288
|
+
break;
|
|
289
|
+
case MZ_STREAM_PROP_FOOTER_SIZE:
|
|
290
|
+
*value = 0;
|
|
291
|
+
break;
|
|
292
|
+
default:
|
|
293
|
+
return MZ_EXIST_ERROR;
|
|
294
|
+
}
|
|
295
|
+
return MZ_OK;
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
int32_t mz_stream_pkcrypt_set_prop_int64(void *stream, int32_t prop, int64_t value) {
|
|
299
|
+
mz_stream_pkcrypt *pkcrypt = (mz_stream_pkcrypt *)stream;
|
|
300
|
+
switch (prop) {
|
|
301
|
+
case MZ_STREAM_PROP_TOTAL_IN_MAX:
|
|
302
|
+
pkcrypt->max_total_in = value;
|
|
303
|
+
break;
|
|
304
|
+
default:
|
|
305
|
+
return MZ_EXIST_ERROR;
|
|
306
|
+
}
|
|
307
|
+
return MZ_OK;
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
void *mz_stream_pkcrypt_create(void **stream) {
|
|
311
|
+
mz_stream_pkcrypt *pkcrypt = NULL;
|
|
312
|
+
|
|
313
|
+
pkcrypt = (mz_stream_pkcrypt *)calloc(1, sizeof(mz_stream_pkcrypt));
|
|
314
|
+
if (pkcrypt)
|
|
315
|
+
pkcrypt->stream.vtbl = &mz_stream_pkcrypt_vtbl;
|
|
316
|
+
if (stream)
|
|
317
|
+
*stream = pkcrypt;
|
|
318
|
+
|
|
319
|
+
return pkcrypt;
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
void mz_stream_pkcrypt_delete(void **stream) {
|
|
323
|
+
mz_stream_pkcrypt *pkcrypt = NULL;
|
|
324
|
+
if (!stream)
|
|
325
|
+
return;
|
|
326
|
+
pkcrypt = (mz_stream_pkcrypt *)*stream;
|
|
327
|
+
if (pkcrypt)
|
|
328
|
+
free(pkcrypt);
|
|
329
|
+
*stream = NULL;
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
void *mz_stream_pkcrypt_get_interface(void) {
|
|
333
|
+
return (void *)&mz_stream_pkcrypt_vtbl;
|
|
334
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/* mz_strm_pkcrypt.h -- Code for traditional PKWARE encryption
|
|
2
|
+
part of the minizip-ng project
|
|
3
|
+
|
|
4
|
+
Copyright (C) Nathan Moinvaziri
|
|
5
|
+
https://github.com/zlib-ng/minizip-ng
|
|
6
|
+
|
|
7
|
+
This program is distributed under the terms of the same license as zlib.
|
|
8
|
+
See the accompanying LICENSE file for the full text of the license.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
#ifndef MZ_STREAM_PKCRYPT_H
|
|
12
|
+
#define MZ_STREAM_PKCRYPT_H
|
|
13
|
+
|
|
14
|
+
#ifdef __cplusplus
|
|
15
|
+
extern "C" {
|
|
16
|
+
#endif
|
|
17
|
+
|
|
18
|
+
/***************************************************************************/
|
|
19
|
+
|
|
20
|
+
int32_t mz_stream_pkcrypt_open(void *stream, const char *filename, int32_t mode);
|
|
21
|
+
int32_t mz_stream_pkcrypt_is_open(void *stream);
|
|
22
|
+
int32_t mz_stream_pkcrypt_read(void *stream, void *buf, int32_t size);
|
|
23
|
+
int32_t mz_stream_pkcrypt_write(void *stream, const void *buf, int32_t size);
|
|
24
|
+
int64_t mz_stream_pkcrypt_tell(void *stream);
|
|
25
|
+
int32_t mz_stream_pkcrypt_seek(void *stream, int64_t offset, int32_t origin);
|
|
26
|
+
int32_t mz_stream_pkcrypt_close(void *stream);
|
|
27
|
+
int32_t mz_stream_pkcrypt_error(void *stream);
|
|
28
|
+
|
|
29
|
+
void mz_stream_pkcrypt_set_password(void *stream, const char *password);
|
|
30
|
+
void mz_stream_pkcrypt_set_verify(void *stream, uint8_t verify1, uint8_t verify2);
|
|
31
|
+
void mz_stream_pkcrypt_get_verify(void *stream, uint8_t *verify1, uint8_t *verify2);
|
|
32
|
+
int32_t mz_stream_pkcrypt_get_prop_int64(void *stream, int32_t prop, int64_t *value);
|
|
33
|
+
int32_t mz_stream_pkcrypt_set_prop_int64(void *stream, int32_t prop, int64_t value);
|
|
34
|
+
|
|
35
|
+
void* mz_stream_pkcrypt_create(void **stream);
|
|
36
|
+
void mz_stream_pkcrypt_delete(void **stream);
|
|
37
|
+
|
|
38
|
+
void* mz_stream_pkcrypt_get_interface(void);
|
|
39
|
+
|
|
40
|
+
/***************************************************************************/
|
|
41
|
+
|
|
42
|
+
#ifdef __cplusplus
|
|
43
|
+
}
|
|
44
|
+
#endif
|
|
45
|
+
|
|
46
|
+
#endif
|