@futpib/parser 1.0.2 → 1.0.4
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/.github/copilot-instructions.md +149 -0
- package/.github/workflows/copilot-setup-steps.yml +18 -0
- package/.github/workflows/main.yml +29 -8
- package/.yarn/releases/yarn-4.9.4.cjs +942 -0
- package/.yarnrc.yml +1 -1
- package/build/allSettledStream.js +1 -1
- package/build/allSettledStream.test.js +2 -2
- package/build/androidPackageParser.d.ts +1 -1
- package/build/androidPackageParser.js +5 -3
- package/build/androidPackageParser.test.js +7 -7
- package/build/androidPackageUnparser.d.ts +2 -2
- package/build/androidPackageUnparser.js +18 -14
- package/build/androidPackageUnparser.test.js +7 -7
- package/build/arbitrarilySlicedAsyncInterator.js +2 -1
- package/build/arbitraryDalvikBytecode.d.ts +4 -0
- package/build/arbitraryDalvikBytecode.js +640 -0
- package/build/arbitraryDalvikExecutable.d.ts +3 -0
- package/build/arbitraryDalvikExecutable.js +282 -0
- package/build/arbitraryDosDateTime.js +1 -0
- package/build/arbitraryZipStream.js +1 -1
- package/build/arrayParser.js +2 -2
- package/build/arrayUnparser.d.ts +1 -1
- package/build/backsmali.d.ts +3 -1
- package/build/backsmali.js +31 -3
- package/build/bash.d.ts +84 -0
- package/build/bash.js +1 -0
- package/build/bashParser.d.ts +6 -0
- package/build/bashParser.js +294 -0
- package/build/bashParser.test.d.ts +1 -0
- package/build/bashParser.test.js +181 -0
- package/build/customInvariant.d.ts +2 -1
- package/build/customInvariant.js +4 -6
- package/build/dalvikBytecodeParser/formatParsers.d.ts +76 -2
- package/build/dalvikBytecodeParser/formatParsers.js +146 -11
- package/build/dalvikBytecodeParser/formatSizes.d.ts +34 -0
- package/build/dalvikBytecodeParser/formatSizes.js +34 -0
- package/build/dalvikBytecodeParser/operationFormats.d.ts +225 -0
- package/build/dalvikBytecodeParser/operationFormats.js +225 -0
- package/build/dalvikBytecodeParser.d.ts +1105 -5
- package/build/dalvikBytecodeParser.js +658 -205
- package/build/dalvikBytecodeUnparser/formatUnparsers.d.ts +152 -0
- package/build/dalvikBytecodeUnparser/formatUnparsers.js +225 -0
- package/build/dalvikBytecodeUnparser.d.ts +3 -0
- package/build/dalvikBytecodeUnparser.js +642 -0
- package/build/dalvikBytecodeUnparser.test.d.ts +1 -0
- package/build/dalvikBytecodeUnparser.test.js +25 -0
- package/build/dalvikExecutable.d.ts +65 -8
- package/build/dalvikExecutable.js +36 -0
- package/build/dalvikExecutableParser/stringSyntaxParser.d.ts +1 -1
- package/build/dalvikExecutableParser/stringSyntaxParser.js +17 -17
- package/build/dalvikExecutableParser/typeParsers.d.ts +2 -1
- package/build/dalvikExecutableParser/typeParsers.js +16 -11
- package/build/dalvikExecutableParser/typedNumbers.d.ts +85 -69
- package/build/dalvikExecutableParser/typedNumbers.js +0 -1
- package/build/dalvikExecutableParser.d.ts +2 -2
- package/build/dalvikExecutableParser.js +655 -337
- package/build/dalvikExecutableParser.test.js +24 -22
- package/build/dalvikExecutableParserAgainstSmaliParser.test.js +223 -246
- package/build/dalvikExecutableUnparser/annotationUnparsers.d.ts +14 -0
- package/build/dalvikExecutableUnparser/annotationUnparsers.js +97 -0
- package/build/dalvikExecutableUnparser/poolBuilders.d.ts +49 -0
- package/build/dalvikExecutableUnparser/poolBuilders.js +140 -0
- package/build/dalvikExecutableUnparser/poolScanners.d.ts +4 -0
- package/build/dalvikExecutableUnparser/poolScanners.js +220 -0
- package/build/dalvikExecutableUnparser/sectionUnparsers.d.ts +25 -0
- package/build/dalvikExecutableUnparser/sectionUnparsers.js +581 -0
- package/build/dalvikExecutableUnparser/utils.d.ts +10 -0
- package/build/dalvikExecutableUnparser/utils.js +108 -0
- package/build/dalvikExecutableUnparser.d.ts +4 -0
- package/build/dalvikExecutableUnparser.js +406 -0
- package/build/dalvikExecutableUnparser.test.d.ts +1 -0
- package/build/dalvikExecutableUnparser.test.js +31 -0
- package/build/debugLogInputParser.js +1 -1
- package/build/disjunctionParser.d.ts +2 -2
- package/build/disjunctionParser.js +2 -2
- package/build/elementTerminatedArrayParser.d.ts +2 -2
- package/build/elementTerminatedArrayParser.js +1 -1
- package/build/elementTerminatedArrayParser.test.js +5 -5
- package/build/elementTerminatedSequenceArrayParser.d.ts +2 -2
- package/build/elementTerminatedSequenceArrayParser.js +1 -1
- package/build/elementTerminatedSequenceArrayParser.test.js +2 -2
- package/build/elementTerminatedSequenceParser.d.ts +2 -2
- package/build/elementTerminatedSequenceParser.js +1 -1
- package/build/elementTerminatedSequenceParser.test.js +2 -2
- package/build/endOfInputParser.d.ts +1 -1
- package/build/exactElementSwitchParser.d.ts +3 -0
- package/build/exactElementSwitchParser.js +22 -0
- package/build/fetchCid.js +2 -6
- package/build/fetchCid.test.d.ts +1 -0
- package/build/fetchCid.test.js +16 -0
- package/build/fixedLengthSequenceParser.test.js +2 -2
- package/build/hasExecutable.js +2 -2
- package/build/highResolutionTimer.js +1 -1
- package/build/index.d.ts +24 -2
- package/build/index.js +22 -1
- package/build/inputReader.d.ts +1 -1
- package/build/inputReader.test.js +33 -45
- package/build/javaKeyStoreParser.test.js +6 -6
- package/build/jsonParser.js +8 -8
- package/build/lazyMessageError.d.ts +48 -0
- package/build/lazyMessageError.js +53 -0
- package/build/lazyMessageError.test.d.ts +1 -0
- package/build/lazyMessageError.test.js +15 -0
- package/build/leb128Parser.d.ts +1 -1
- package/build/leb128Parser.js +10 -10
- package/build/leb128Parser.test.js +7 -7
- package/build/negativeLookaheadParser.js +2 -2
- package/build/negativeLookaheadParser.test.js +4 -4
- package/build/noStackCaptureOverheadError.d.ts +4 -0
- package/build/noStackCaptureOverheadError.js +9 -0
- package/build/noStackCaptureOverheadError.test.d.ts +1 -0
- package/build/noStackCaptureOverheadError.test.js +15 -0
- package/build/nonEmptyArrayParser.js +2 -2
- package/build/nonEmptyArrayParser.test.js +2 -1
- package/build/optionalParser.js +2 -2
- package/build/parser.d.ts +2 -1
- package/build/parser.js +23 -8
- package/build/parser.test.js +78 -29
- package/build/parserConsumedSequenceParser.d.ts +1 -1
- package/build/parserConsumedSequenceParser.js +2 -2
- package/build/parserContext.d.ts +8 -6
- package/build/parserContext.js +60 -33
- package/build/parserContext.test.js +7 -3
- package/build/parserError.d.ts +603 -44
- package/build/parserError.js +98 -53
- package/build/parserImplementationInvariant.d.ts +1 -1
- package/build/parserImplementationInvariant.js +2 -2
- package/build/parserInputCompanion.js +2 -2
- package/build/promiseCompose.js +1 -2
- package/build/regexpParser.d.ts +2 -0
- package/build/regexpParser.js +71 -0
- package/build/regexpParser.test.d.ts +1 -0
- package/build/regexpParser.test.js +83 -0
- package/build/regularExpression.d.ts +63 -0
- package/build/regularExpression.js +1 -0
- package/build/regularExpressionParser.d.ts +3 -0
- package/build/regularExpressionParser.js +580 -0
- package/build/regularExpressionParser.test.d.ts +1 -0
- package/build/regularExpressionParser.test.js +89 -0
- package/build/separatedArrayParser.js +2 -2
- package/build/separatedNonEmptyArrayParser.d.ts +2 -0
- package/build/separatedNonEmptyArrayParser.js +40 -0
- package/build/separatedNonEmptyArrayParser.test.d.ts +1 -0
- package/build/separatedNonEmptyArrayParser.test.js +66 -0
- package/build/sequenceBuffer.js +1 -1
- package/build/sequenceTerminatedSequenceParser.d.ts +2 -2
- package/build/sequenceTerminatedSequenceParser.js +3 -3
- package/build/sequenceTerminatedSequenceParser.test.js +1 -1
- package/build/sequenceUnparser.d.ts +1 -1
- package/build/skipToParser.d.ts +1 -1
- package/build/skipToParser.js +2 -2
- package/build/sliceBoundedParser.test.js +4 -9
- package/build/smali.d.ts +1 -1
- package/build/smali.js +6 -2
- package/build/smaliParser.d.ts +62 -6
- package/build/smaliParser.js +1721 -296
- package/build/smaliParser.test.js +338 -43
- package/build/stringFromAsyncIterable.d.ts +1 -0
- package/build/stringFromAsyncIterable.js +7 -0
- package/build/terminatedArrayParser.js +4 -4
- package/build/terminatedArrayParser.test.js +7 -7
- package/build/toAsyncIterator.js +4 -4
- package/build/unionParser.d.ts +1 -1
- package/build/unionParser.js +2 -2
- package/build/unionParser.test.js +3 -3
- package/build/unparser.d.ts +3 -3
- package/build/unparser.js +6 -4
- package/build/unparser.test.js +7 -19
- package/build/unparserContext.d.ts +2 -2
- package/build/unparserContext.js +2 -3
- package/build/unparserError.d.ts +2 -1
- package/build/unparserError.js +2 -1
- package/build/unparserImplementationInvariant.d.ts +1 -1
- package/build/unparserOutputCompanion.d.ts +1 -1
- package/build/unparserOutputCompanion.js +1 -1
- package/build/zipParser.js +1 -1
- package/build/zipUnparser.d.ts +3 -3
- package/build/zipUnparser.js +9 -19
- package/build/zipUnparser.test.js +1 -1
- package/package.json +20 -26
- package/src/allSettledStream.test.ts +2 -2
- package/src/allSettledStream.ts +3 -3
- package/src/androidPackageParser.test.ts +17 -19
- package/src/androidPackageParser.ts +129 -171
- package/src/androidPackageUnparser.test.ts +19 -21
- package/src/androidPackageUnparser.ts +23 -17
- package/src/arbitrarilySlicedAsyncInterable.ts +1 -1
- package/src/arbitrarilySlicedAsyncInterator.ts +4 -4
- package/src/arbitraryDalvikBytecode.ts +992 -0
- package/src/arbitraryDalvikExecutable.ts +434 -0
- package/src/arbitraryDosDateTime.ts +1 -0
- package/src/arbitraryZipStream.ts +1 -1
- package/src/arrayParser.ts +2 -2
- package/src/arrayUnparser.ts +2 -2
- package/src/backsmali.ts +48 -4
- package/src/bash.ts +120 -0
- package/src/bashParser.test.ts +332 -0
- package/src/bashParser.ts +461 -0
- package/src/bsonParser.test.ts +12 -14
- package/src/customInvariant.ts +8 -12
- package/src/dalvikBytecodeParser/formatParsers.ts +376 -17
- package/src/dalvikBytecodeParser/formatSizes.ts +35 -0
- package/src/dalvikBytecodeParser/operationFormats.ts +226 -0
- package/src/dalvikBytecodeParser.ts +1042 -243
- package/src/dalvikBytecodeUnparser/formatUnparsers.ts +442 -0
- package/src/dalvikBytecodeUnparser.test.ts +44 -0
- package/src/dalvikBytecodeUnparser.ts +758 -0
- package/src/dalvikExecutable.ts +110 -48
- package/src/dalvikExecutableParser/stringSyntaxParser.ts +33 -33
- package/src/dalvikExecutableParser/typeParsers.ts +23 -14
- package/src/dalvikExecutableParser/typedNumbers.ts +19 -19
- package/src/dalvikExecutableParser.test.ts +60 -60
- package/src/dalvikExecutableParser.test.ts.md +6 -6
- package/src/dalvikExecutableParser.test.ts.snap +0 -0
- package/src/dalvikExecutableParser.ts +911 -434
- package/src/dalvikExecutableParserAgainstSmaliParser.test.ts +256 -239
- package/src/dalvikExecutableUnparser/annotationUnparsers.ts +135 -0
- package/src/dalvikExecutableUnparser/poolBuilders.ts +189 -0
- package/src/dalvikExecutableUnparser/poolScanners.ts +297 -0
- package/src/dalvikExecutableUnparser/sectionUnparsers.ts +683 -0
- package/src/dalvikExecutableUnparser/utils.ts +149 -0
- package/src/dalvikExecutableUnparser.test.ts +57 -0
- package/src/dalvikExecutableUnparser.ts +581 -0
- package/src/debugLogInputParser.ts +1 -1
- package/src/disjunctionParser.ts +5 -5
- package/src/elementTerminatedArrayParser.test.ts +8 -8
- package/src/elementTerminatedArrayParser.ts +2 -2
- package/src/elementTerminatedSequenceArrayParser.test.ts +4 -6
- package/src/elementTerminatedSequenceArrayParser.ts +2 -2
- package/src/elementTerminatedSequenceParser.test.ts +4 -6
- package/src/elementTerminatedSequenceParser.ts +2 -2
- package/src/endOfInputParser.ts +1 -1
- package/src/exactElementSwitchParser.ts +41 -0
- package/src/fetchCid.test.ts +20 -0
- package/src/fetchCid.ts +3 -7
- package/src/fixedLengthSequenceParser.test.ts +10 -12
- package/src/hasExecutable.ts +2 -2
- package/src/highResolutionTimer.ts +1 -1
- package/src/index.ts +113 -2
- package/src/inputReader.test.ts +39 -52
- package/src/inputReader.ts +2 -4
- package/src/inputReaderState.ts +1 -1
- package/src/inspect.ts +1 -1
- package/src/javaKeyStoreParser.test.ts +12 -14
- package/src/javaKeyStoreParser.ts +2 -6
- package/src/jsonParser.test.ts +2 -4
- package/src/jsonParser.ts +34 -38
- package/src/lazyMessageError.test.ts +21 -0
- package/src/lazyMessageError.ts +88 -0
- package/src/leb128Parser.test.ts +25 -23
- package/src/leb128Parser.ts +19 -19
- package/src/negativeLookaheadParser.test.ts +7 -11
- package/src/negativeLookaheadParser.ts +2 -2
- package/src/noStackCaptureOverheadError.test.ts +17 -0
- package/src/noStackCaptureOverheadError.ts +12 -0
- package/src/nonEmptyArrayParser.test.ts +3 -2
- package/src/nonEmptyArrayParser.ts +2 -2
- package/src/optionalParser.ts +2 -2
- package/src/parser.test.ts +96 -43
- package/src/parser.test.ts.md +13 -6
- package/src/parser.test.ts.snap +0 -0
- package/src/parser.ts +35 -12
- package/src/parserAccessorParser.ts +1 -1
- package/src/parserConsumedSequenceParser.ts +3 -3
- package/src/parserContext.test.ts +7 -3
- package/src/parserContext.ts +82 -48
- package/src/parserError.ts +143 -63
- package/src/parserImplementationInvariant.ts +3 -3
- package/src/parserInputCompanion.ts +2 -2
- package/src/promiseCompose.ts +2 -2
- package/src/regexpParser.test.ts +186 -0
- package/src/regexpParser.ts +94 -0
- package/src/regularExpression.ts +24 -0
- package/src/regularExpressionParser.test.ts +102 -0
- package/src/regularExpressionParser.ts +921 -0
- package/src/separatedArrayParser.ts +3 -3
- package/src/separatedNonEmptyArrayParser.test.ts +117 -0
- package/src/separatedNonEmptyArrayParser.ts +61 -0
- package/src/sequenceBuffer.test.ts +9 -9
- package/src/sequenceBuffer.ts +4 -4
- package/src/sequenceTerminatedSequenceParser.test.ts +3 -5
- package/src/sequenceTerminatedSequenceParser.ts +4 -4
- package/src/sequenceUnparser.ts +2 -2
- package/src/skipToParser.ts +2 -2
- package/src/sliceBoundedParser.test.ts +4 -12
- package/src/sliceBoundedParser.ts +2 -2
- package/src/smali.ts +8 -3
- package/src/smaliParser.test.ts +377 -66
- package/src/smaliParser.test.ts.md +1635 -48
- package/src/smaliParser.test.ts.snap +0 -0
- package/src/smaliParser.ts +2751 -569
- package/src/stringFromAsyncIterable.ts +9 -0
- package/src/terminatedArrayParser.test.ts +11 -11
- package/src/terminatedArrayParser.ts +5 -7
- package/src/toAsyncIterator.ts +8 -8
- package/src/uint8Array.ts +2 -3
- package/src/unionParser.test.ts +22 -23
- package/src/unionParser.ts +6 -8
- package/src/unparser.test.ts +18 -34
- package/src/unparser.ts +13 -9
- package/src/unparserContext.ts +9 -13
- package/src/unparserError.ts +2 -1
- package/src/unparserImplementationInvariant.ts +1 -1
- package/src/unparserOutputCompanion.ts +1 -1
- package/src/zip.ts +2 -6
- package/src/zipParser.ts +10 -18
- package/src/zipUnparser.test.ts +1 -1
- package/src/zipUnparser.ts +52 -64
- package/tsconfig.json +7 -1
- package/xo.config.ts +15 -0
- package/.yarn/releases/yarn-4.5.3.cjs +0 -934
|
@@ -9,15 +9,17 @@ import {
|
|
|
9
9
|
zip64EndOfCentralDirectoryRecordParser,
|
|
10
10
|
zipArchiveDecryptionHeaderParser,
|
|
11
11
|
zipArchiveExtraDataRecordParser,
|
|
12
|
-
ZipCentralDirectoryHeader,
|
|
12
|
+
type ZipCentralDirectoryHeader,
|
|
13
13
|
zipCentralDirectoryHeaderParser,
|
|
14
|
-
ZipEndOfCentralDirectoryRecord,
|
|
14
|
+
type ZipEndOfCentralDirectoryRecord,
|
|
15
15
|
zipEndOfCentralDirectoryRecordParser,
|
|
16
16
|
zipFromZipSegments,
|
|
17
|
-
ZipLocalFile,
|
|
17
|
+
type ZipLocalFile,
|
|
18
18
|
zipLocalFileParser,
|
|
19
19
|
} from './zipParser.js';
|
|
20
|
-
import {
|
|
20
|
+
import {
|
|
21
|
+
type AndroidPackageSignatureV2AdditionalAttribute, type AndroidPackageSignatureV2Digest, type AndroidPackageSignatureV2Signature, type AndroidPackageSignatureV2SignedData, type AndroidPackageSignatureV2Signer, type AndroidPackage, type AndroidPackageSigningBlock, type AndroidPackageSigningBlockPair,
|
|
22
|
+
} from './androidPackage.js';
|
|
21
23
|
import { createFixedLengthSequenceParser } from './fixedLengthSequenceParser.js';
|
|
22
24
|
import { parserCreatorCompose } from './parserCreatorCompose.js';
|
|
23
25
|
import { createExactSequenceParser } from './exactSequenceParser.js';
|
|
@@ -55,9 +57,7 @@ const createUint64LengthPrefixedParser = <T>(createInnerParser: (length: bigint)
|
|
|
55
57
|
length => createInnerParser(length),
|
|
56
58
|
)();
|
|
57
59
|
|
|
58
|
-
const createUint32LengthPrefixedSliceBoundedParser = <T>(innerParser: Parser<T, Uint8Array>): Parser<T, Uint8Array> => createUint32LengthPrefixedParser(
|
|
59
|
-
length => createSliceBoundedParser(innerParser, length),
|
|
60
|
-
);
|
|
60
|
+
const createUint32LengthPrefixedSliceBoundedParser = <T>(innerParser: Parser<T, Uint8Array>): Parser<T, Uint8Array> => createUint32LengthPrefixedParser(length => createSliceBoundedParser(innerParser, length));
|
|
61
61
|
|
|
62
62
|
const createUint32LengthPrefixedSliceBoundedArrayParser = <T>(innerParser: Parser<T, Uint8Array>): Parser<T[], Uint8Array> => createUint32LengthPrefixedSliceBoundedParser(createArrayParser(innerParser));
|
|
63
63
|
|
|
@@ -143,180 +143,150 @@ const createAndroidPackageSigningBlockPairInnerParser = (length: number): Parser
|
|
|
143
143
|
return androidPackageSigningBlockPairInnerParser;
|
|
144
144
|
};
|
|
145
145
|
|
|
146
|
-
const androidPackageSigningBlockPairParser: Parser<AndroidPackageSigningBlockPairType, Uint8Array> = createUint64LengthPrefixedParser(
|
|
147
|
-
length => createAndroidPackageSigningBlockPairInnerParser(Number(length)),
|
|
148
|
-
);
|
|
146
|
+
const androidPackageSigningBlockPairParser: Parser<AndroidPackageSigningBlockPairType, Uint8Array> = createUint64LengthPrefixedParser(length => createAndroidPackageSigningBlockPairInnerParser(Number(length)));
|
|
149
147
|
|
|
150
148
|
setParserName(androidPackageSigningBlockPairParser, 'androidPackageSigningBlockPairParser');
|
|
151
149
|
|
|
152
150
|
const androidPackageSigningBlockPairsParser: Parser<AndroidPackageSigningBlockPairType[], Uint8Array> = createArrayParser(androidPackageSigningBlockPairParser);
|
|
153
151
|
|
|
154
|
-
export const androidPackageSigningBlockParser: Parser<AndroidPackageSigningBlock, Uint8Array> = createUint64LengthPrefixedParser(
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
152
|
+
export const androidPackageSigningBlockParser: Parser<AndroidPackageSigningBlock, Uint8Array> = createUint64LengthPrefixedParser(sizeOfBlock => promiseCompose(
|
|
153
|
+
createTupleParser([
|
|
154
|
+
androidPackageSigningBlockPairsParser,
|
|
155
|
+
uint64LEParser,
|
|
156
|
+
createExactSequenceParser<Uint8Array>(Buffer.from('APK Sig Block 42', 'utf8')),
|
|
157
|
+
]),
|
|
158
|
+
async ([
|
|
159
|
+
pairs,
|
|
160
|
+
sizeOfBlockRepeated,
|
|
161
|
+
_magic,
|
|
162
|
+
]): Promise<AndroidPackageSigningBlock> => {
|
|
163
|
+
invariant(sizeOfBlock === sizeOfBlockRepeated, 'Size of block mismatch: %s !== %s.', sizeOfBlock, sizeOfBlockRepeated);
|
|
164
|
+
|
|
165
|
+
const zeroPaddingPair = pairs.find(pair => pair.type === 'zeroPadding');
|
|
166
|
+
const signatureV2Pair = pairs.find(pair => pair.type === 'signatureV2');
|
|
167
|
+
|
|
168
|
+
const genericPairs = (
|
|
169
|
+
pairs
|
|
170
|
+
.filter(pair => (
|
|
171
|
+
pair !== zeroPaddingPair
|
|
172
|
+
&& pair !== signatureV2Pair
|
|
173
|
+
))
|
|
174
|
+
.map(pair => {
|
|
175
|
+
invariant(pair.type === 'generic', 'Expected generic pair, got %s.', pair.type);
|
|
176
|
+
return pair.pair;
|
|
177
|
+
})
|
|
178
|
+
);
|
|
179
|
+
|
|
180
|
+
return {
|
|
181
|
+
zeroPaddingLength: zeroPaddingPair?.length,
|
|
182
|
+
signatureV2: signatureV2Pair
|
|
183
|
+
? {
|
|
186
184
|
signers: signatureV2Pair?.signers,
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
);
|
|
185
|
+
}
|
|
186
|
+
: undefined,
|
|
187
|
+
pairs: genericPairs,
|
|
188
|
+
};
|
|
189
|
+
},
|
|
190
|
+
));
|
|
193
191
|
|
|
194
|
-
const androidPackageSignatureV2DigestParser = createUint32LengthPrefixedParser<AndroidPackageSignatureV2Digest>(
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
]),
|
|
202
|
-
([ signatureAlgorithmId, digest ]) => ({ signatureAlgorithmId, digest }),
|
|
203
|
-
),
|
|
204
|
-
);
|
|
192
|
+
const androidPackageSignatureV2DigestParser = createUint32LengthPrefixedParser<AndroidPackageSignatureV2Digest>(pairLength => promiseCompose(
|
|
193
|
+
createTupleParser([
|
|
194
|
+
uint32LEParser,
|
|
195
|
+
createUint32LengthPrefixedParser(digestLength => createFixedLengthSequenceParser(digestLength)),
|
|
196
|
+
]),
|
|
197
|
+
([ signatureAlgorithmId, digest ]) => ({ signatureAlgorithmId, digest }),
|
|
198
|
+
));
|
|
205
199
|
|
|
206
|
-
const androidPackageSignatureV2DigestsParser = createUint32LengthPrefixedSliceBoundedArrayParser(
|
|
207
|
-
androidPackageSignatureV2DigestParser,
|
|
208
|
-
);
|
|
200
|
+
const androidPackageSignatureV2DigestsParser = createUint32LengthPrefixedSliceBoundedArrayParser(androidPackageSignatureV2DigestParser);
|
|
209
201
|
|
|
210
202
|
setParserName(androidPackageSignatureV2DigestsParser, 'androidPackageSignatureV2DigestsParser');
|
|
211
203
|
|
|
212
|
-
const androidPackageSignatureV2CertificateParser = createUint32LengthPrefixedParser(
|
|
213
|
-
certificateLength => createFixedLengthSequenceParser(certificateLength),
|
|
214
|
-
);
|
|
204
|
+
const androidPackageSignatureV2CertificateParser = createUint32LengthPrefixedParser(certificateLength => createFixedLengthSequenceParser(certificateLength));
|
|
215
205
|
|
|
216
206
|
setParserName(androidPackageSignatureV2CertificateParser, 'androidPackageSignatureV2CertificateParser');
|
|
217
207
|
|
|
218
|
-
const androidPackageSignatureV2CertificatesParser = createUint32LengthPrefixedSliceBoundedArrayParser(
|
|
219
|
-
androidPackageSignatureV2CertificateParser,
|
|
220
|
-
);
|
|
208
|
+
const androidPackageSignatureV2CertificatesParser = createUint32LengthPrefixedSliceBoundedArrayParser(androidPackageSignatureV2CertificateParser);
|
|
221
209
|
|
|
222
210
|
setParserName(androidPackageSignatureV2CertificatesParser, 'androidPackageSignatureV2CertificatesParser');
|
|
223
211
|
|
|
224
|
-
const androidPackageSignatureV2AdditionalAttributeParser = createUint32LengthPrefixedParser<AndroidPackageSignatureV2AdditionalAttribute>(
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
),
|
|
232
|
-
);
|
|
212
|
+
const androidPackageSignatureV2AdditionalAttributeParser = createUint32LengthPrefixedParser<AndroidPackageSignatureV2AdditionalAttribute>(pairLength => promiseCompose(
|
|
213
|
+
createTupleParser([
|
|
214
|
+
uint32LEParser,
|
|
215
|
+
createFixedLengthSequenceParser(pairLength - 4),
|
|
216
|
+
]),
|
|
217
|
+
([ id, value ]) => ({ id, value }),
|
|
218
|
+
));
|
|
233
219
|
|
|
234
220
|
setParserName(androidPackageSignatureV2AdditionalAttributeParser, 'androidPackageSignatureV2AdditionalAttributeParser');
|
|
235
221
|
|
|
236
|
-
const androidPackageSignatureV2AdditionalAttributesParser = createUint32LengthPrefixedSliceBoundedArrayParser(
|
|
237
|
-
androidPackageSignatureV2AdditionalAttributeParser,
|
|
238
|
-
);
|
|
222
|
+
const androidPackageSignatureV2AdditionalAttributesParser = createUint32LengthPrefixedSliceBoundedArrayParser(androidPackageSignatureV2AdditionalAttributeParser);
|
|
239
223
|
|
|
240
224
|
setParserName(androidPackageSignatureV2AdditionalAttributesParser, 'androidPackageSignatureV2AdditionalAttributesParser');
|
|
241
225
|
|
|
242
|
-
const androidPackageSignatureV2SignedDataParser = createUint32LengthPrefixedSliceBoundedParser(
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
),
|
|
262
|
-
);
|
|
226
|
+
const androidPackageSignatureV2SignedDataParser = createUint32LengthPrefixedSliceBoundedParser(promiseCompose(
|
|
227
|
+
createTupleParser([
|
|
228
|
+
androidPackageSignatureV2DigestsParser,
|
|
229
|
+
androidPackageSignatureV2CertificatesParser,
|
|
230
|
+
androidPackageSignatureV2AdditionalAttributesParser,
|
|
231
|
+
createArrayParser(createExactElementParser(0)),
|
|
232
|
+
]),
|
|
233
|
+
([
|
|
234
|
+
digests,
|
|
235
|
+
certificates,
|
|
236
|
+
additionalAttributes,
|
|
237
|
+
zeroPadding,
|
|
238
|
+
]): AndroidPackageSignatureV2SignedData => ({
|
|
239
|
+
digests,
|
|
240
|
+
certificates,
|
|
241
|
+
additionalAttributes,
|
|
242
|
+
zeroPaddingLength: zeroPadding.length,
|
|
243
|
+
}),
|
|
244
|
+
));
|
|
263
245
|
|
|
264
246
|
setParserName(androidPackageSignatureV2SignedDataParser, 'androidPackageSignatureV2SignedDataParser');
|
|
265
247
|
|
|
266
|
-
const androidPackageSignatureV2SignatureParser = createUint32LengthPrefixedParser(
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
signature,
|
|
280
|
-
}),
|
|
281
|
-
),
|
|
282
|
-
);
|
|
248
|
+
const androidPackageSignatureV2SignatureParser = createUint32LengthPrefixedParser(signatureLength => promiseCompose(
|
|
249
|
+
createTupleParser([
|
|
250
|
+
uint32LEParser,
|
|
251
|
+
createUint32LengthPrefixedParser(signatureLength => createFixedLengthSequenceParser(signatureLength)),
|
|
252
|
+
]),
|
|
253
|
+
([
|
|
254
|
+
signatureAlgorithmId,
|
|
255
|
+
signature,
|
|
256
|
+
]): AndroidPackageSignatureV2Signature => ({
|
|
257
|
+
signatureAlgorithmId,
|
|
258
|
+
signature,
|
|
259
|
+
}),
|
|
260
|
+
));
|
|
283
261
|
|
|
284
|
-
const androidPackageSignatureV2SignaturesParser = createUint32LengthPrefixedSliceBoundedArrayParser(
|
|
285
|
-
androidPackageSignatureV2SignatureParser,
|
|
286
|
-
);
|
|
262
|
+
const androidPackageSignatureV2SignaturesParser = createUint32LengthPrefixedSliceBoundedArrayParser(androidPackageSignatureV2SignatureParser);
|
|
287
263
|
|
|
288
264
|
setParserName(androidPackageSignatureV2SignaturesParser, 'androidPackageSignatureV2SignaturesParser');
|
|
289
265
|
|
|
290
|
-
const androidPackageSignatureV2PublicKeyParser = createUint32LengthPrefixedParser(
|
|
291
|
-
publicKeyLength => createFixedLengthSequenceParser(publicKeyLength),
|
|
292
|
-
);
|
|
266
|
+
const androidPackageSignatureV2PublicKeyParser = createUint32LengthPrefixedParser(publicKeyLength => createFixedLengthSequenceParser(publicKeyLength));
|
|
293
267
|
|
|
294
268
|
setParserName(androidPackageSignatureV2PublicKeyParser, 'androidPackageSignatureV2PublicKeyParser');
|
|
295
269
|
|
|
296
|
-
const androidPackageSignatureV2SignerParser = createUint32LengthPrefixedSliceBoundedParser(
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
),
|
|
313
|
-
);
|
|
270
|
+
const androidPackageSignatureV2SignerParser = createUint32LengthPrefixedSliceBoundedParser(promiseCompose(
|
|
271
|
+
createTupleParser([
|
|
272
|
+
androidPackageSignatureV2SignedDataParser,
|
|
273
|
+
androidPackageSignatureV2SignaturesParser,
|
|
274
|
+
androidPackageSignatureV2PublicKeyParser,
|
|
275
|
+
]),
|
|
276
|
+
([
|
|
277
|
+
signedData,
|
|
278
|
+
signatures = [],
|
|
279
|
+
publicKey,
|
|
280
|
+
]): AndroidPackageSignatureV2Signer => ({
|
|
281
|
+
signedData,
|
|
282
|
+
signatures,
|
|
283
|
+
publicKey,
|
|
284
|
+
}),
|
|
285
|
+
));
|
|
314
286
|
|
|
315
287
|
setParserName(androidPackageSignatureV2SignerParser, 'androidPackageSignatureV2SignerParser');
|
|
316
288
|
|
|
317
|
-
const androidPackageSignatureV2SignersParser = createUint32LengthPrefixedSliceBoundedArrayParser(
|
|
318
|
-
androidPackageSignatureV2SignerParser,
|
|
319
|
-
);
|
|
289
|
+
const androidPackageSignatureV2SignersParser = createUint32LengthPrefixedSliceBoundedArrayParser(androidPackageSignatureV2SignerParser);
|
|
320
290
|
|
|
321
291
|
setParserName(androidPackageSignatureV2SignersParser, 'androidPackageSignatureV2SignersParser');
|
|
322
292
|
|
|
@@ -371,35 +341,23 @@ export type AndroidPackageSignableSections = {
|
|
|
371
341
|
androidPackageSigningBlockUint8Array?: Uint8Array;
|
|
372
342
|
zipCentralDirectoryUint8Array: Uint8Array;
|
|
373
343
|
zipEndOfCentralDirectoryUint8Array: Uint8Array;
|
|
374
|
-
}
|
|
344
|
+
};
|
|
375
345
|
|
|
376
346
|
export const androidPackageSignableSectionsParser: Parser<AndroidPackageSignableSections, Uint8Array> = promiseCompose(
|
|
377
347
|
createTupleParser([
|
|
378
|
-
createParserConsumedSequenceParser(
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
),
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
),
|
|
392
|
-
),
|
|
393
|
-
createParserConsumedSequenceParser(
|
|
394
|
-
createTupleParser([
|
|
395
|
-
createArrayParser(zipCentralDirectoryHeaderParser),
|
|
396
|
-
createOptionalParser(zip64EndOfCentralDirectoryRecordParser),
|
|
397
|
-
createOptionalParser(zip64EndOfCentralDirectoryLocatorParser),
|
|
398
|
-
]),
|
|
399
|
-
),
|
|
400
|
-
createParserConsumedSequenceParser(
|
|
401
|
-
zipEndOfCentralDirectoryRecordParser,
|
|
402
|
-
),
|
|
348
|
+
createParserConsumedSequenceParser(createTupleParser([
|
|
349
|
+
createArrayParser(zipLocalFileParser),
|
|
350
|
+
createOptionalParser(zipArchiveDecryptionHeaderParser),
|
|
351
|
+
createOptionalParser(zipArchiveExtraDataRecordParser),
|
|
352
|
+
])),
|
|
353
|
+
createArrayParser(createExactElementParser(0)),
|
|
354
|
+
createOptionalParser(createParserConsumedSequenceParser(androidPackageSigningBlockParser)),
|
|
355
|
+
createParserConsumedSequenceParser(createTupleParser([
|
|
356
|
+
createArrayParser(zipCentralDirectoryHeaderParser),
|
|
357
|
+
createOptionalParser(zip64EndOfCentralDirectoryRecordParser),
|
|
358
|
+
createOptionalParser(zip64EndOfCentralDirectoryLocatorParser),
|
|
359
|
+
])),
|
|
360
|
+
createParserConsumedSequenceParser(zipEndOfCentralDirectoryRecordParser),
|
|
403
361
|
]),
|
|
404
362
|
async ([
|
|
405
363
|
[
|
|
@@ -1,36 +1,34 @@
|
|
|
1
1
|
import test from 'ava';
|
|
2
|
+
import invariant from 'invariant';
|
|
2
3
|
import { uint8ArrayParserInputCompanion } from './parserInputCompanion.js';
|
|
3
4
|
import { runParser } from './parser.js';
|
|
4
5
|
import { androidPackageParser, androidPackageSigningBlockParser } from './androidPackageParser.js';
|
|
5
6
|
import { runUnparser } from './unparser.js';
|
|
6
7
|
import { androidPackageSigningBlockUnparser } from './androidPackageUnparser.js';
|
|
7
8
|
import { uint8ArrayUnparserOutputCompanion } from './unparserOutputCompanion.js';
|
|
8
|
-
import invariant from 'invariant';
|
|
9
9
|
import { fetchCid } from './fetchCid.js';
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
11
|
+
const androidPackageUnparserMacro = test.macro({
|
|
12
|
+
title: (providedTitle, androidPackageCid: string) => providedTitle ?? `androidPackage ${androidPackageCid}`,
|
|
13
|
+
async exec(t, androidPackageCid: string) {
|
|
14
|
+
const androidPackageStream = await fetchCid(androidPackageCid);
|
|
15
|
+
|
|
16
|
+
const androidPackage = await runParser(androidPackageParser, androidPackageStream, uint8ArrayParserInputCompanion, {
|
|
17
|
+
errorJoinMode: 'all',
|
|
18
|
+
});
|
|
18
19
|
|
|
19
|
-
|
|
20
|
-
errorJoinMode: 'all',
|
|
21
|
-
});
|
|
20
|
+
const androidPackageSigningBlock = androidPackage.signingBlock;
|
|
22
21
|
|
|
23
|
-
|
|
22
|
+
invariant(androidPackageSigningBlock, 'APK has no signing block');
|
|
24
23
|
|
|
25
|
-
|
|
24
|
+
const androidPackageSigningBlockStream = runUnparser(androidPackageSigningBlockUnparser, androidPackageSigningBlock, uint8ArrayUnparserOutputCompanion);
|
|
26
25
|
|
|
27
|
-
|
|
26
|
+
const actual = await runParser(androidPackageSigningBlockParser, androidPackageSigningBlockStream, uint8ArrayParserInputCompanion, {
|
|
27
|
+
errorJoinMode: 'all',
|
|
28
|
+
});
|
|
28
29
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
30
|
+
t.deepEqual(actual, androidPackageSigningBlock);
|
|
31
|
+
},
|
|
32
|
+
});
|
|
32
33
|
|
|
33
|
-
|
|
34
|
-
},
|
|
35
|
-
);
|
|
36
|
-
}
|
|
34
|
+
test(androidPackageUnparserMacro, 'bafkreicckcmzrdxwoc3w2in3tivpyxrdtcfpct4zwauq3igew3nkpvfapu');
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
type AndroidPackageSignatureV2AdditionalAttribute, type AndroidPackageSignatureV2Digest, type AndroidPackageSignatureV2Signature, type AndroidPackageSignatureV2SignedData, type AndroidPackageSignatureV2Signer, type AndroidPackageSigningBlock,
|
|
3
|
+
} from './androidPackage.js';
|
|
4
|
+
import { createArrayUnparser } from './arrayUnparser.js';
|
|
5
|
+
import { createSequenceUnparser } from './sequenceUnparser.js';
|
|
6
|
+
import { type Unparser } from './unparser.js';
|
|
5
7
|
|
|
6
8
|
const uint8ArrayUnparser = createSequenceUnparser<Uint8Array>();
|
|
7
9
|
|
|
@@ -9,7 +11,7 @@ const uint32LEUnparser: Unparser<number, Uint8Array> = async function * (input)
|
|
|
9
11
|
const buffer = Buffer.alloc(4);
|
|
10
12
|
buffer.writeUInt32LE(input);
|
|
11
13
|
yield buffer;
|
|
12
|
-
}
|
|
14
|
+
};
|
|
13
15
|
|
|
14
16
|
const uint64LEUnparser: Unparser<number | bigint, Uint8Array> = async function * (input) {
|
|
15
17
|
const buffer = Buffer.alloc(8);
|
|
@@ -97,18 +99,22 @@ export const androidPackageSigningBlockUnparser: Unparser<AndroidPackageSigningB
|
|
|
97
99
|
) {
|
|
98
100
|
const pairs = [
|
|
99
101
|
...input.pairs,
|
|
100
|
-
...(input.signatureV2
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
102
|
+
...(input.signatureV2
|
|
103
|
+
? [
|
|
104
|
+
{
|
|
105
|
+
id: 0x71_09_87_1A,
|
|
106
|
+
value: input.signatureV2.signers,
|
|
107
|
+
},
|
|
108
|
+
]
|
|
109
|
+
: []),
|
|
110
|
+
...(input.zeroPaddingLength
|
|
111
|
+
? [
|
|
112
|
+
{
|
|
113
|
+
id: 0x42_72_65_77,
|
|
114
|
+
value: Buffer.alloc(input.zeroPaddingLength),
|
|
115
|
+
},
|
|
116
|
+
]
|
|
117
|
+
: []),
|
|
112
118
|
];
|
|
113
119
|
|
|
114
120
|
const sizeOfBlockWriteLater = yield * unparserContext.writeLater(8);
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
import { type Arbitrary } from 'fast-check';
|
|
2
2
|
import { arbitrarilySlicedAsyncIterable } from './arbitrarilySlicedAsyncInterable.js';
|
|
3
3
|
|
|
4
|
-
export function arbitrarilySlicedAsyncIterator<Sliceable extends string | Uint8Array>(
|
|
5
|
-
arbitrarySliceable: Arbitrary<Sliceable>,
|
|
6
|
-
): Arbitrary<[ Sliceable, AsyncIterator<Sliceable> ]> {
|
|
4
|
+
export function arbitrarilySlicedAsyncIterator<Sliceable extends string | Uint8Array>(arbitrarySliceable: Arbitrary<Sliceable>): Arbitrary<[ Sliceable, AsyncIterator<Sliceable> ]> {
|
|
7
5
|
return (
|
|
8
6
|
arbitrarilySlicedAsyncIterable(arbitrarySliceable)
|
|
9
7
|
.map(([ sliceable, asyncIterable ]) => {
|
|
10
8
|
const asyncIterator_ = asyncIterable[Symbol.asyncIterator]();
|
|
11
9
|
|
|
10
|
+
const asyncIterableWithTag = asyncIterable as AsyncIterable<Sliceable> & { [Symbol.toStringTag]?: string };
|
|
11
|
+
|
|
12
12
|
const asyncIterator = {
|
|
13
13
|
next: asyncIterator_.next.bind(asyncIterator_),
|
|
14
14
|
return: asyncIterator_.return?.bind(asyncIterator_),
|
|
15
15
|
throw: asyncIterator_.throw?.bind(asyncIterator_),
|
|
16
|
-
[Symbol.toStringTag]: 'ArbitrarilySlicedAsyncIterator ' + (
|
|
16
|
+
[Symbol.toStringTag]: 'ArbitrarilySlicedAsyncIterator ' + (asyncIterableWithTag[Symbol.toStringTag] ?? ''),
|
|
17
17
|
};
|
|
18
18
|
|
|
19
19
|
return [
|