@neoware_inc/neozipkit 0.5.0
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/README.md +134 -0
- package/dist/browser/ZipkitBrowser.d.ts +27 -0
- package/dist/browser/ZipkitBrowser.d.ts.map +1 -0
- package/dist/browser/ZipkitBrowser.js +303 -0
- package/dist/browser/ZipkitBrowser.js.map +1 -0
- package/dist/browser/index.d.ts +9 -0
- package/dist/browser/index.d.ts.map +1 -0
- package/dist/browser/index.esm.d.ts +12 -0
- package/dist/browser/index.esm.d.ts.map +1 -0
- package/dist/browser/index.esm.js +46 -0
- package/dist/browser/index.esm.js.map +1 -0
- package/dist/browser/index.js +38 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/browser-esm/index.d.ts +9 -0
- package/dist/browser-esm/index.js +50211 -0
- package/dist/browser-esm/index.js.map +7 -0
- package/dist/browser-umd/index.d.ts +9 -0
- package/dist/browser-umd/index.js +50221 -0
- package/dist/browser-umd/index.js.map +7 -0
- package/dist/browser-umd/index.min.js +39 -0
- package/dist/browser.d.ts +9 -0
- package/dist/browser.js +38 -0
- package/dist/core/ZipCompress.d.ts +99 -0
- package/dist/core/ZipCompress.d.ts.map +1 -0
- package/dist/core/ZipCompress.js +287 -0
- package/dist/core/ZipCompress.js.map +1 -0
- package/dist/core/ZipCopy.d.ts +175 -0
- package/dist/core/ZipCopy.d.ts.map +1 -0
- package/dist/core/ZipCopy.js +310 -0
- package/dist/core/ZipCopy.js.map +1 -0
- package/dist/core/ZipDecompress.d.ts +57 -0
- package/dist/core/ZipDecompress.d.ts.map +1 -0
- package/dist/core/ZipDecompress.js +155 -0
- package/dist/core/ZipDecompress.js.map +1 -0
- package/dist/core/ZipEntry.d.ts +138 -0
- package/dist/core/ZipEntry.d.ts.map +1 -0
- package/dist/core/ZipEntry.js +829 -0
- package/dist/core/ZipEntry.js.map +1 -0
- package/dist/core/Zipkit.d.ts +315 -0
- package/dist/core/Zipkit.d.ts.map +1 -0
- package/dist/core/Zipkit.js +647 -0
- package/dist/core/Zipkit.js.map +1 -0
- package/dist/core/ZstdManager.d.ts +56 -0
- package/dist/core/ZstdManager.d.ts.map +1 -0
- package/dist/core/ZstdManager.js +144 -0
- package/dist/core/ZstdManager.js.map +1 -0
- package/dist/core/components/HashCalculator.d.ts +138 -0
- package/dist/core/components/HashCalculator.d.ts.map +1 -0
- package/dist/core/components/HashCalculator.js +360 -0
- package/dist/core/components/HashCalculator.js.map +1 -0
- package/dist/core/components/Logger.d.ts +73 -0
- package/dist/core/components/Logger.d.ts.map +1 -0
- package/dist/core/components/Logger.js +156 -0
- package/dist/core/components/Logger.js.map +1 -0
- package/dist/core/components/ProgressTracker.d.ts +43 -0
- package/dist/core/components/ProgressTracker.d.ts.map +1 -0
- package/dist/core/components/ProgressTracker.js +112 -0
- package/dist/core/components/ProgressTracker.js.map +1 -0
- package/dist/core/components/Support.d.ts +64 -0
- package/dist/core/components/Support.d.ts.map +1 -0
- package/dist/core/components/Support.js +71 -0
- package/dist/core/components/Support.js.map +1 -0
- package/dist/core/components/Util.d.ts +26 -0
- package/dist/core/components/Util.d.ts.map +1 -0
- package/dist/core/components/Util.js +95 -0
- package/dist/core/components/Util.js.map +1 -0
- package/dist/core/constants/Errors.d.ts +52 -0
- package/dist/core/constants/Errors.d.ts.map +1 -0
- package/dist/core/constants/Errors.js +67 -0
- package/dist/core/constants/Errors.js.map +1 -0
- package/dist/core/constants/Headers.d.ts +170 -0
- package/dist/core/constants/Headers.d.ts.map +1 -0
- package/dist/core/constants/Headers.js +194 -0
- package/dist/core/constants/Headers.js.map +1 -0
- package/dist/core/encryption/Manager.d.ts +58 -0
- package/dist/core/encryption/Manager.d.ts.map +1 -0
- package/dist/core/encryption/Manager.js +121 -0
- package/dist/core/encryption/Manager.js.map +1 -0
- package/dist/core/encryption/ZipCrypto.d.ts +172 -0
- package/dist/core/encryption/ZipCrypto.d.ts.map +1 -0
- package/dist/core/encryption/ZipCrypto.js +554 -0
- package/dist/core/encryption/ZipCrypto.js.map +1 -0
- package/dist/core/encryption/index.d.ts +9 -0
- package/dist/core/encryption/index.d.ts.map +1 -0
- package/dist/core/encryption/index.js +17 -0
- package/dist/core/encryption/index.js.map +1 -0
- package/dist/core/encryption/types.d.ts +29 -0
- package/dist/core/encryption/types.d.ts.map +1 -0
- package/dist/core/encryption/types.js +12 -0
- package/dist/core/encryption/types.js.map +1 -0
- package/dist/core/index.d.ts +27 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +59 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/version.d.ts +5 -0
- package/dist/core/version.d.ts.map +1 -0
- package/dist/core/version.js +31 -0
- package/dist/core/version.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +38 -0
- package/dist/index.js.map +1 -0
- package/dist/node/ZipCompressNode.d.ts +123 -0
- package/dist/node/ZipCompressNode.d.ts.map +1 -0
- package/dist/node/ZipCompressNode.js +565 -0
- package/dist/node/ZipCompressNode.js.map +1 -0
- package/dist/node/ZipCopyNode.d.ts +165 -0
- package/dist/node/ZipCopyNode.d.ts.map +1 -0
- package/dist/node/ZipCopyNode.js +347 -0
- package/dist/node/ZipCopyNode.js.map +1 -0
- package/dist/node/ZipDecompressNode.d.ts +197 -0
- package/dist/node/ZipDecompressNode.d.ts.map +1 -0
- package/dist/node/ZipDecompressNode.js +678 -0
- package/dist/node/ZipDecompressNode.js.map +1 -0
- package/dist/node/ZipkitNode.d.ts +466 -0
- package/dist/node/ZipkitNode.d.ts.map +1 -0
- package/dist/node/ZipkitNode.js +1426 -0
- package/dist/node/ZipkitNode.js.map +1 -0
- package/dist/node/index.d.ts +25 -0
- package/dist/node/index.d.ts.map +1 -0
- package/dist/node/index.js +54 -0
- package/dist/node/index.js.map +1 -0
- package/dist/types/index.d.ts +45 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +11 -0
- package/dist/types/index.js.map +1 -0
- package/examples/README.md +261 -0
- package/examples/append-data.json +44 -0
- package/examples/copy-zip-append.ts +139 -0
- package/examples/copy-zip.ts +152 -0
- package/examples/create-zip.ts +172 -0
- package/examples/extract-zip.ts +118 -0
- package/examples/list-zip.ts +161 -0
- package/examples/test-files/data.json +116 -0
- package/examples/test-files/document.md +80 -0
- package/examples/test-files/document.txt +6 -0
- package/examples/test-files/file1.txt +48 -0
- package/examples/test-files/file2.txt +80 -0
- package/examples/tsconfig.json +44 -0
- package/package.json +167 -0
- package/src/browser/ZipkitBrowser.ts +305 -0
- package/src/browser/index.esm.ts +32 -0
- package/src/browser/index.ts +19 -0
- package/src/core/ZipCompress.ts +370 -0
- package/src/core/ZipCopy.ts +434 -0
- package/src/core/ZipDecompress.ts +191 -0
- package/src/core/ZipEntry.ts +917 -0
- package/src/core/Zipkit.ts +794 -0
- package/src/core/ZstdManager.ts +165 -0
- package/src/core/components/HashCalculator.ts +384 -0
- package/src/core/components/Logger.ts +180 -0
- package/src/core/components/ProgressTracker.ts +134 -0
- package/src/core/components/Support.ts +77 -0
- package/src/core/components/Util.ts +91 -0
- package/src/core/constants/Errors.ts +78 -0
- package/src/core/constants/Headers.ts +205 -0
- package/src/core/encryption/Manager.ts +137 -0
- package/src/core/encryption/ZipCrypto.ts +650 -0
- package/src/core/encryption/index.ts +15 -0
- package/src/core/encryption/types.ts +33 -0
- package/src/core/index.ts +42 -0
- package/src/core/version.ts +33 -0
- package/src/index.ts +19 -0
- package/src/node/ZipCompressNode.ts +618 -0
- package/src/node/ZipCopyNode.ts +437 -0
- package/src/node/ZipDecompressNode.ts +793 -0
- package/src/node/ZipkitNode.ts +1706 -0
- package/src/node/index.ts +40 -0
- package/src/types/index.ts +68 -0
- package/src/types/modules.d.ts +22 -0
- package/src/types/opentimestamps.d.ts +1 -0
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Traditional ZIP Crypto encryption implementation
|
|
3
|
+
* Compatible with standard ZIP 2.0 encryption (ZipCrypto)
|
|
4
|
+
*/
|
|
5
|
+
import { EncryptionProvider, EncryptionOptions, EncryptionResult, DecryptionResult, EncryptionMethod } from './types';
|
|
6
|
+
import ZipEntry from '../ZipEntry';
|
|
7
|
+
export declare class ZipCrypto implements EncryptionProvider {
|
|
8
|
+
private static readonly KEY_LENGTH;
|
|
9
|
+
canHandle(method: EncryptionMethod): boolean;
|
|
10
|
+
getMethodName(): string;
|
|
11
|
+
getKeyLength(): number;
|
|
12
|
+
encrypt(data: Buffer, options: EncryptionOptions): Promise<EncryptionResult>;
|
|
13
|
+
decrypt(data: Buffer, options: EncryptionOptions): Promise<DecryptionResult>;
|
|
14
|
+
/**
|
|
15
|
+
* Verify password using check byte from decrypted header
|
|
16
|
+
* @param decryptedHeader - 12-byte decrypted encryption header
|
|
17
|
+
* @param checkByte - Expected check byte value
|
|
18
|
+
* @throws Error if password verification fails
|
|
19
|
+
*/
|
|
20
|
+
verifyPassword(decryptedHeader: Buffer, checkByte: number): void;
|
|
21
|
+
/**
|
|
22
|
+
* Parse local header to extract information needed for decryption
|
|
23
|
+
* @param localHeaderBuffer - 30-byte local header buffer
|
|
24
|
+
* @param entry - ZIP entry to update with extracted information
|
|
25
|
+
* @returns Object with bitFlags, lastModTimeDate, localCrc, and checkByte
|
|
26
|
+
*/
|
|
27
|
+
parseLocalHeaderForDecryption(localHeaderBuffer: Buffer, entry: ZipEntry): {
|
|
28
|
+
bitFlags: number;
|
|
29
|
+
lastModTimeDate: number;
|
|
30
|
+
localCrc: number;
|
|
31
|
+
checkByte: number;
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Create encryption header (12 bytes) for PKZIP encryption
|
|
35
|
+
* Generates 11 random bytes + 1 check byte
|
|
36
|
+
* @param entry - ZIP entry to create header for
|
|
37
|
+
* @param password - Password for encryption (used to calculate check byte)
|
|
38
|
+
* @returns 12-byte encryption header buffer
|
|
39
|
+
*/
|
|
40
|
+
createEncryptionHeader(entry: ZipEntry, password: string): Buffer;
|
|
41
|
+
/**
|
|
42
|
+
* Encrypt buffer (header + compressed data) for PKZIP encryption
|
|
43
|
+
* Creates encryption header, concatenates with compressed data, and encrypts everything
|
|
44
|
+
* @param entry - ZIP entry to encrypt
|
|
45
|
+
* @param compressedData - Compressed data to encrypt
|
|
46
|
+
* @param password - Password for encryption
|
|
47
|
+
* @returns Encrypted buffer (encrypted header + encrypted compressed data)
|
|
48
|
+
*/
|
|
49
|
+
encryptBuffer(entry: ZipEntry, compressedData: Buffer, password: string): Buffer;
|
|
50
|
+
/**
|
|
51
|
+
* Decrypt buffer-based encrypted data (for in-memory extraction)
|
|
52
|
+
* Handles local header parsing, encryption header extraction, and decryption
|
|
53
|
+
* @param entry - ZIP entry with encryption information
|
|
54
|
+
* @param buffer - Full ZIP file buffer
|
|
55
|
+
* @param encryptedData - Encrypted data without header (from parseLocalHeader)
|
|
56
|
+
* @param password - Password for decryption
|
|
57
|
+
* @returns Decrypted compressed data (without header)
|
|
58
|
+
*/
|
|
59
|
+
decryptBuffer(entry: ZipEntry, buffer: Buffer, encryptedData: Buffer, password: string): Buffer;
|
|
60
|
+
/**
|
|
61
|
+
* Create a streaming decryptor for chunked data processing
|
|
62
|
+
* Handles 12-byte header decryption and verification, then yields decrypted chunks
|
|
63
|
+
*
|
|
64
|
+
* MEMORY EFFICIENCY: This method processes encrypted data one block at a time.
|
|
65
|
+
* - Decryption state (keys) is maintained across blocks via updateKeys()
|
|
66
|
+
* - Only the minimum 12-byte header is accumulated before password verification
|
|
67
|
+
* - Each decrypted block is yielded immediately without accumulation
|
|
68
|
+
*
|
|
69
|
+
* @param password - Password for decryption
|
|
70
|
+
* @param checkByte - Expected check byte value for password verification
|
|
71
|
+
* @param encryptedStream - Async generator of encrypted data chunks (one block at a time)
|
|
72
|
+
* @returns Async generator of decrypted data chunks (one block at a time)
|
|
73
|
+
*/
|
|
74
|
+
createStreamDecryptor(password: string, checkByte: number, encryptedStream: AsyncGenerator<Buffer>): AsyncGenerator<Buffer>;
|
|
75
|
+
/**
|
|
76
|
+
* Initialize encryption keys from password
|
|
77
|
+
*/
|
|
78
|
+
private initKeys;
|
|
79
|
+
/**
|
|
80
|
+
* Update encryption keys with a byte
|
|
81
|
+
* Based on zip.js implementation - uses Math.imul for 32-bit integer multiplication
|
|
82
|
+
*/
|
|
83
|
+
private updateKeys;
|
|
84
|
+
/**
|
|
85
|
+
* Encrypt a single byte
|
|
86
|
+
* Based on zip.js implementation - uses Math.imul for 32-bit integer multiplication
|
|
87
|
+
*/
|
|
88
|
+
private encryptByte;
|
|
89
|
+
/**
|
|
90
|
+
* Decrypt a single byte
|
|
91
|
+
* Based on zip.js implementation - uses Math.imul for 32-bit integer multiplication
|
|
92
|
+
*/
|
|
93
|
+
private decryptByte;
|
|
94
|
+
/**
|
|
95
|
+
* CRC32 lookup table (shared for all CRC32 operations)
|
|
96
|
+
*/
|
|
97
|
+
static readonly CRC_TABLE: number[];
|
|
98
|
+
/**
|
|
99
|
+
* CRC32 implementation for ZIP crypto (single byte update)
|
|
100
|
+
* Used internally for key updates during encryption/decryption
|
|
101
|
+
*/
|
|
102
|
+
private crc32;
|
|
103
|
+
/**
|
|
104
|
+
* Static CRC32 calculation for a full buffer
|
|
105
|
+
* Delegates to exported crc32() function
|
|
106
|
+
* @param buf - Buffer or string to calculate CRC32 for
|
|
107
|
+
* @returns CRC32 checksum as unsigned 32-bit integer
|
|
108
|
+
*/
|
|
109
|
+
static crc32(buf: Buffer | string): number;
|
|
110
|
+
/**
|
|
111
|
+
* Static CRC32 incremental update (single byte)
|
|
112
|
+
* Delegates to exported crc32update() function
|
|
113
|
+
* @param crc - Current CRC32 value
|
|
114
|
+
* @param byte - Byte to update with
|
|
115
|
+
* @returns Updated CRC32 value
|
|
116
|
+
*/
|
|
117
|
+
static crc32update(crc: number, byte: number): number;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* CRC32 calculation for a full buffer
|
|
121
|
+
* Main public API for CRC32 calculation
|
|
122
|
+
* @param buf - Buffer or string to calculate CRC32 for
|
|
123
|
+
* @returns CRC32 checksum as unsigned 32-bit integer
|
|
124
|
+
*/
|
|
125
|
+
export declare function crc32(buf: Buffer | string): number;
|
|
126
|
+
/**
|
|
127
|
+
* CRC32 incremental update (single byte)
|
|
128
|
+
* Used for streaming CRC32 calculation
|
|
129
|
+
* @param crc - Current CRC32 value
|
|
130
|
+
* @param byte - Byte to update with
|
|
131
|
+
* @returns Updated CRC32 value
|
|
132
|
+
*/
|
|
133
|
+
export declare function crc32update(crc: number, byte: number): number;
|
|
134
|
+
export declare function sha256(data: Buffer): string;
|
|
135
|
+
/**
|
|
136
|
+
* Options for creating a DecryptionStream
|
|
137
|
+
*/
|
|
138
|
+
export interface DecryptionStreamOptions {
|
|
139
|
+
password: string;
|
|
140
|
+
method: EncryptionMethod;
|
|
141
|
+
entry: ZipEntry;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Streaming decryption for chunked compressed data processing
|
|
145
|
+
* Encapsulated within ZipCrypto for PKZIP decryption
|
|
146
|
+
*/
|
|
147
|
+
export declare class DecryptionStream {
|
|
148
|
+
private password;
|
|
149
|
+
private method;
|
|
150
|
+
private entry;
|
|
151
|
+
private zipCrypto;
|
|
152
|
+
constructor(options: DecryptionStreamOptions);
|
|
153
|
+
/**
|
|
154
|
+
* Decrypt compressed data stream chunk by chunk
|
|
155
|
+
*/
|
|
156
|
+
decrypt(encryptedStream: AsyncGenerator<Buffer>): AsyncGenerator<Buffer>;
|
|
157
|
+
/**
|
|
158
|
+
* Calculate check byte for password verification
|
|
159
|
+
* For DATA_DESC files: lastModTimeDate >> 8
|
|
160
|
+
* For non-DATA_DESC files: CRC >> 24
|
|
161
|
+
*/
|
|
162
|
+
private calculateCheckByte;
|
|
163
|
+
/**
|
|
164
|
+
* Prepare entry for decryption by parsing local header from file handle
|
|
165
|
+
* This extracts the information needed for check byte calculation
|
|
166
|
+
* @param fileHandle - File handle to read from
|
|
167
|
+
* @param entry - ZIP entry to update
|
|
168
|
+
* @returns Check byte value for password verification
|
|
169
|
+
*/
|
|
170
|
+
static prepareEntryForDecryption(fileHandle: any, entry: ZipEntry): Promise<number>;
|
|
171
|
+
}
|
|
172
|
+
//# sourceMappingURL=ZipCrypto.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ZipCrypto.d.ts","sourceRoot":"","sources":["../../../src/core/encryption/ZipCrypto.ts"],"names":[],"mappings":"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"}
|