@yume-chan/adb 0.0.23 → 0.0.24
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/CHANGELOG.json +33 -0
- package/CHANGELOG.md +15 -1
- package/LICENSE +1 -1
- package/esm/adb.d.ts +2 -2
- package/esm/adb.d.ts.map +1 -1
- package/esm/adb.js +2 -2
- package/esm/adb.js.map +1 -1
- package/esm/commands/power.d.ts.map +1 -1
- package/esm/commands/power.js +6 -5
- package/esm/commands/power.js.map +1 -1
- package/esm/commands/reverse.d.ts.map +1 -1
- package/esm/commands/reverse.js +22 -10
- package/esm/commands/reverse.js.map +1 -1
- package/esm/commands/subprocess/command.js +3 -3
- package/esm/commands/subprocess/command.js.map +1 -1
- package/esm/commands/subprocess/protocols/none.d.ts +2 -2
- package/esm/commands/subprocess/protocols/none.d.ts.map +1 -1
- package/esm/commands/subprocess/protocols/shell.d.ts +3 -3
- package/esm/commands/subprocess/protocols/shell.d.ts.map +1 -1
- package/esm/commands/subprocess/protocols/shell.js +5 -6
- package/esm/commands/subprocess/protocols/shell.js.map +1 -1
- package/esm/commands/subprocess/protocols/types.d.ts +2 -2
- package/esm/commands/subprocess/protocols/types.d.ts.map +1 -1
- package/esm/commands/sync/list.d.ts +2 -5
- package/esm/commands/sync/list.d.ts.map +1 -1
- package/esm/commands/sync/list.js +2 -4
- package/esm/commands/sync/list.js.map +1 -1
- package/esm/commands/sync/pull.d.ts +1 -4
- package/esm/commands/sync/pull.d.ts.map +1 -1
- package/esm/commands/sync/pull.js +2 -2
- package/esm/commands/sync/pull.js.map +1 -1
- package/esm/commands/sync/push.d.ts +4 -7
- package/esm/commands/sync/push.d.ts.map +1 -1
- package/esm/commands/sync/push.js +3 -6
- package/esm/commands/sync/push.js.map +1 -1
- package/esm/commands/sync/request.d.ts +13 -18
- package/esm/commands/sync/request.d.ts.map +1 -1
- package/esm/commands/sync/request.js +23 -28
- package/esm/commands/sync/request.js.map +1 -1
- package/esm/commands/sync/response.d.ts +18 -12
- package/esm/commands/sync/response.d.ts.map +1 -1
- package/esm/commands/sync/response.js +39 -17
- package/esm/commands/sync/response.js.map +1 -1
- package/esm/commands/sync/socket.d.ts +2 -2
- package/esm/commands/sync/socket.d.ts.map +1 -1
- package/esm/commands/sync/socket.js +10 -5
- package/esm/commands/sync/socket.js.map +1 -1
- package/esm/commands/sync/stat.d.ts +0 -3
- package/esm/commands/sync/stat.d.ts.map +1 -1
- package/esm/commands/sync/stat.js +0 -2
- package/esm/commands/sync/stat.js.map +1 -1
- package/esm/commands/sync/sync.d.ts +4 -3
- package/esm/commands/sync/sync.d.ts.map +1 -1
- package/esm/commands/sync/sync.js +4 -1
- package/esm/commands/sync/sync.js.map +1 -1
- package/esm/commands/tcpip.js +1 -1
- package/esm/commands/tcpip.js.map +1 -1
- package/esm/daemon/auth.js +1 -1
- package/esm/daemon/auth.js.map +1 -1
- package/esm/daemon/crypto.d.ts +3 -2
- package/esm/daemon/crypto.d.ts.map +1 -1
- package/esm/daemon/crypto.js +56 -49
- package/esm/daemon/crypto.js.map +1 -1
- package/esm/daemon/dispatcher.d.ts +35 -10
- package/esm/daemon/dispatcher.d.ts.map +1 -1
- package/esm/daemon/dispatcher.js +44 -31
- package/esm/daemon/dispatcher.js.map +1 -1
- package/esm/daemon/packet.d.ts +2 -2
- package/esm/daemon/packet.d.ts.map +1 -1
- package/esm/daemon/packet.js +13 -12
- package/esm/daemon/packet.js.map +1 -1
- package/esm/daemon/socket.d.ts +10 -5
- package/esm/daemon/socket.d.ts.map +1 -1
- package/esm/daemon/socket.js +17 -15
- package/esm/daemon/socket.js.map +1 -1
- package/esm/daemon/transport.d.ts +55 -15
- package/esm/daemon/transport.d.ts.map +1 -1
- package/esm/daemon/transport.js +9 -10
- package/esm/daemon/transport.js.map +1 -1
- package/esm/server/client.d.ts +128 -50
- package/esm/server/client.d.ts.map +1 -1
- package/esm/server/client.js +325 -124
- package/esm/server/client.js.map +1 -1
- package/esm/server/transport.js +4 -4
- package/esm/server/transport.js.map +1 -1
- package/esm/utils/base64.d.ts.map +1 -1
- package/esm/utils/base64.js +33 -22
- package/esm/utils/base64.js.map +1 -1
- package/esm/utils/hex.d.ts +1 -1
- package/esm/utils/hex.d.ts.map +1 -1
- package/esm/utils/hex.js +12 -14
- package/esm/utils/hex.js.map +1 -1
- package/esm/utils/index.d.ts +1 -1
- package/esm/utils/index.d.ts.map +1 -1
- package/esm/utils/index.js +1 -1
- package/esm/utils/index.js.map +1 -1
- package/esm/utils/sequence-equal.d.ts +2 -0
- package/esm/utils/sequence-equal.d.ts.map +1 -0
- package/esm/utils/sequence-equal.js +12 -0
- package/esm/utils/sequence-equal.js.map +1 -0
- package/package.json +12 -14
- package/src/adb.ts +7 -4
- package/src/commands/power.ts +7 -5
- package/src/commands/reverse.ts +30 -17
- package/src/commands/subprocess/command.ts +3 -3
- package/src/commands/subprocess/protocols/none.ts +2 -2
- package/src/commands/subprocess/protocols/shell.ts +7 -11
- package/src/commands/subprocess/protocols/types.ts +2 -2
- package/src/commands/sync/list.ts +2 -4
- package/src/commands/sync/pull.ts +2 -2
- package/src/commands/sync/push.ts +7 -10
- package/src/commands/sync/request.ts +32 -32
- package/src/commands/sync/response.ts +47 -20
- package/src/commands/sync/socket.ts +13 -8
- package/src/commands/sync/stat.ts +0 -2
- package/src/commands/sync/sync.ts +8 -3
- package/src/commands/tcpip.ts +1 -1
- package/src/daemon/auth.ts +1 -1
- package/src/daemon/crypto.ts +64 -55
- package/src/daemon/dispatcher.ts +104 -42
- package/src/daemon/packet.ts +21 -14
- package/src/daemon/socket.ts +28 -25
- package/src/daemon/transport.ts +71 -24
- package/src/server/client.ts +420 -208
- package/src/server/transport.ts +4 -4
- package/src/utils/base64.ts +33 -22
- package/src/utils/hex.ts +16 -14
- package/src/utils/index.ts +1 -1
- package/src/utils/sequence-equal.ts +13 -0
- package/tsconfig.build.tsbuildinfo +1 -1
- package/esm/utils/conditional-variable.d.ts +0 -8
- package/esm/utils/conditional-variable.d.ts.map +0 -1
- package/esm/utils/conditional-variable.js +0 -34
- package/esm/utils/conditional-variable.js.map +0 -1
- package/src/utils/conditional-variable.ts +0 -45
package/esm/daemon/auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/daemon/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAGnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,OAAO,EACH,4BAA4B,EAC5B,YAAY,EACZ,UAAU,GACb,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACH,oBAAoB,EACpB,mBAAmB,EACnB,OAAO,GACV,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AA4BzC,MAAM,CAAN,IAAY,WAIX;AAJD,WAAY,WAAW;IACnB,+CAAS,CAAA;IACT,uDAAa,CAAA;IACb,uDAAa,CAAA;AACjB,CAAC,EAJW,WAAW,KAAX,WAAW,QAItB;AAoBD,MAAM,CAAC,MAAM,yBAAyB,GAAqB,KAAK,SAAS,CAAC,EACtE,eAAmC,EACnC,cAA4C;IAE5C,IAAI,KAAK,EAAE,MAAM,GAAG,IAAI,eAAe,CAAC,WAAW,EAAE,EAAE,CAAC;QACpD,MAAM,MAAM,GAAG,MAAM,cAAc,EAAE,CAAC;QAEtC,IAAI,MAAM,CAAC,IAAI,KAAK,WAAW,CAAC,KAAK,EAAE,CAAC;YACpC,OAAO;QACX,CAAC;QAED,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QACtD,MAAM;YACF,OAAO,EAAE,UAAU,CAAC,IAAI;YACxB,IAAI,EAAE,WAAW,CAAC,SAAS;YAC3B,IAAI,EAAE,CAAC;YACP,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/daemon/auth.ts"],"names":[],"mappings":"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"}
|
package/esm/daemon/crypto.d.ts
CHANGED
|
@@ -5,15 +5,16 @@
|
|
|
5
5
|
* Only supports Big-Endian, because that's what ADB uses.
|
|
6
6
|
* @param byteOffset The place in the buffer at which the value should be retrieved.
|
|
7
7
|
*/
|
|
8
|
-
export declare function getBigUint(
|
|
8
|
+
export declare function getBigUint(array: Uint8Array, byteOffset: number, length: number): bigint;
|
|
9
9
|
/**
|
|
10
10
|
* Stores an arbitrary-precision positive `BigInt` value at the specified byte offset from the start of the view.
|
|
11
11
|
* @param byteOffset The place in the buffer at which the value should be set.
|
|
12
|
+
* @param length The number of bytes to set.
|
|
12
13
|
* @param value The value to set.
|
|
13
14
|
* @param littleEndian If `false` or `undefined`, a big-endian value should be written,
|
|
14
15
|
* otherwise a little-endian value should be written.
|
|
15
16
|
*/
|
|
16
|
-
export declare function setBigUint(
|
|
17
|
+
export declare function setBigUint(array: Uint8Array, byteOffset: number, length: number, value: bigint, littleEndian?: boolean): void;
|
|
17
18
|
export declare function rsaParsePrivateKey(key: Uint8Array): [n: bigint, d: bigint];
|
|
18
19
|
export declare function modInverse(a: number, m: number): number;
|
|
19
20
|
export declare function adbGetPublicKeySize(): number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../src/daemon/crypto.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../src/daemon/crypto.ts"],"names":[],"mappings":"AAMA;;;;;;GAMG;AACH,wBAAgB,UAAU,CACtB,KAAK,EAAE,UAAU,EACjB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,GACf,MAAM,CAaR;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CACtB,KAAK,EAAE,UAAU,EACjB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,YAAY,CAAC,EAAE,OAAO,QAgBzB;AA4BD,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,UAAU,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,CAI1E;AAeD,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,UAuB9C;AAKD,wBAAgB,mBAAmB,WAElC;AAED,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,UAAU,GAAG,UAAU,CAAC;AACzE,wBAAgB,oBAAoB,CAChC,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,UAAU,GACnB,MAAM,CAAC;AA+EV;;;;;;GAMG;AACH,wBAAgB,MAAM,CAClB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GAChB,MAAM,CAkBR;AAED,eAAO,MAAM,kBAAkB,KAAK,CAAC;AAErC,eAAO,MAAM,aAAa,KAAO,CAAC;AAClC,eAAO,MAAM,iBAAiB,IAAO,CAAC;AACtC,eAAO,MAAM,SAAS,IAAO,CAAC;AAC9B,eAAO,MAAM,QAAQ,IAAO,CAAC;AAG7B,eAAO,MAAM,gBAAgB,YAiB3B,CAAC;AAQH,wBAAgB,OAAO,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,GAAG,UAAU,CAqC5E"}
|
package/esm/daemon/crypto.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { getUint64BigEndian, setInt64BigEndian, setInt64LittleEndian, } from "@yume-chan/no-data-view";
|
|
2
2
|
/**
|
|
3
3
|
* Gets the `BigInt` value at the specified byte offset and length from the start of the view. There is
|
|
4
4
|
* no alignment constraint; multi-byte values may be fetched from any offset.
|
|
@@ -6,47 +6,41 @@ import { getBigUint64, setBigUint64, } from "@yume-chan/dataview-bigint-polyfill
|
|
|
6
6
|
* Only supports Big-Endian, because that's what ADB uses.
|
|
7
7
|
* @param byteOffset The place in the buffer at which the value should be retrieved.
|
|
8
8
|
*/
|
|
9
|
-
export function getBigUint(
|
|
9
|
+
export function getBigUint(array, byteOffset, length) {
|
|
10
10
|
let result = 0n;
|
|
11
11
|
// Currently `length` must be a multiplication of 8
|
|
12
12
|
// Support for arbitrary length can be easily added
|
|
13
13
|
for (let i = byteOffset; i < byteOffset + length; i += 8) {
|
|
14
14
|
result <<= 64n;
|
|
15
|
-
const value =
|
|
16
|
-
result
|
|
15
|
+
const value = getUint64BigEndian(array, i);
|
|
16
|
+
result |= value;
|
|
17
17
|
}
|
|
18
18
|
return result;
|
|
19
19
|
}
|
|
20
20
|
/**
|
|
21
21
|
* Stores an arbitrary-precision positive `BigInt` value at the specified byte offset from the start of the view.
|
|
22
22
|
* @param byteOffset The place in the buffer at which the value should be set.
|
|
23
|
+
* @param length The number of bytes to set.
|
|
23
24
|
* @param value The value to set.
|
|
24
25
|
* @param littleEndian If `false` or `undefined`, a big-endian value should be written,
|
|
25
26
|
* otherwise a little-endian value should be written.
|
|
26
27
|
*/
|
|
27
|
-
export function setBigUint(
|
|
28
|
-
const start = byteOffset;
|
|
28
|
+
export function setBigUint(array, byteOffset, length, value, littleEndian) {
|
|
29
29
|
if (littleEndian) {
|
|
30
30
|
while (value > 0n) {
|
|
31
|
-
|
|
31
|
+
setInt64LittleEndian(array, byteOffset, value);
|
|
32
32
|
byteOffset += 8;
|
|
33
33
|
value >>= 64n;
|
|
34
34
|
}
|
|
35
35
|
}
|
|
36
36
|
else {
|
|
37
|
-
|
|
38
|
-
// Convert it to an array of `uint64` first.
|
|
39
|
-
const uint64Array = [];
|
|
37
|
+
let position = byteOffset + length - 8;
|
|
40
38
|
while (value > 0n) {
|
|
41
|
-
|
|
39
|
+
setInt64BigEndian(array, position, value);
|
|
40
|
+
position -= 8;
|
|
42
41
|
value >>= 64n;
|
|
43
42
|
}
|
|
44
|
-
for (let i = uint64Array.length - 1; i >= 0; i -= 1) {
|
|
45
|
-
setBigUint64(dataView, byteOffset, uint64Array[i], false);
|
|
46
|
-
byteOffset += 8;
|
|
47
|
-
}
|
|
48
43
|
}
|
|
49
|
-
return byteOffset - start;
|
|
50
44
|
}
|
|
51
45
|
// These values are correct only if
|
|
52
46
|
// modulus length is 2048 and
|
|
@@ -71,16 +65,24 @@ const RsaPrivateKeyNLength = 2048 / 8;
|
|
|
71
65
|
const RsaPrivateKeyDOffset = 303;
|
|
72
66
|
const RsaPrivateKeyDLength = 2048 / 8;
|
|
73
67
|
export function rsaParsePrivateKey(key) {
|
|
74
|
-
const
|
|
75
|
-
const
|
|
76
|
-
const d = getBigUint(view, RsaPrivateKeyDOffset, RsaPrivateKeyDLength);
|
|
68
|
+
const n = getBigUint(key, RsaPrivateKeyNOffset, RsaPrivateKeyNLength);
|
|
69
|
+
const d = getBigUint(key, RsaPrivateKeyDOffset, RsaPrivateKeyDLength);
|
|
77
70
|
return [n, d];
|
|
78
71
|
}
|
|
72
|
+
function nonNegativeMod(m, d) {
|
|
73
|
+
const r = m % d;
|
|
74
|
+
if (r > 0) {
|
|
75
|
+
return r;
|
|
76
|
+
}
|
|
77
|
+
return r + (d > 0 ? d : -d);
|
|
78
|
+
}
|
|
79
|
+
// https://en.wikipedia.org/wiki/Modular_multiplicative_inverse
|
|
80
|
+
// Solve for the smallest positive `x` in the equation `a * x ≡ 1 (mod m)`,
|
|
81
|
+
// or in other words, `a * x % m = 1`
|
|
79
82
|
// Taken from https://stackoverflow.com/a/51562038
|
|
80
|
-
// I can't understand, but it does work
|
|
81
83
|
// Only used with numbers smaller than 2^32 so doesn't need BigInt
|
|
82
84
|
export function modInverse(a, m) {
|
|
83
|
-
a = (
|
|
85
|
+
a = nonNegativeMod(a, m);
|
|
84
86
|
if (!a || m < 2) {
|
|
85
87
|
return NaN; // invalid input
|
|
86
88
|
}
|
|
@@ -91,6 +93,7 @@ export function modInverse(a, m) {
|
|
|
91
93
|
[a, b] = [b, a % b];
|
|
92
94
|
s.push({ a, b });
|
|
93
95
|
}
|
|
96
|
+
/* istanbul ignore next */
|
|
94
97
|
if (a !== 1) {
|
|
95
98
|
return NaN; // inverse does not exists
|
|
96
99
|
}
|
|
@@ -100,27 +103,33 @@ export function modInverse(a, m) {
|
|
|
100
103
|
for (let i = s.length - 2; i >= 0; i -= 1) {
|
|
101
104
|
[x, y] = [y, x - y * Math.floor(s[i].a / s[i].b)];
|
|
102
105
|
}
|
|
103
|
-
return (
|
|
106
|
+
return nonNegativeMod(y, m);
|
|
104
107
|
}
|
|
108
|
+
const ModulusLengthInBytes = 2048 / 8;
|
|
109
|
+
const ModulusLengthInWords = ModulusLengthInBytes / 4;
|
|
105
110
|
export function adbGetPublicKeySize() {
|
|
106
|
-
return 4 + 4 +
|
|
111
|
+
return 4 + 4 + ModulusLengthInBytes + ModulusLengthInBytes + 4;
|
|
107
112
|
}
|
|
108
113
|
export function adbGeneratePublicKey(privateKey, output) {
|
|
109
|
-
//
|
|
110
|
-
//
|
|
111
|
-
//
|
|
114
|
+
// cspell: ignore: mincrypt
|
|
115
|
+
// Android 6 and earlier has its own encryption library called mincrypt
|
|
116
|
+
// This is the RSA public key format used by mincrypt:
|
|
117
|
+
// https://android.googlesource.com/platform/system/core/+/bb0c180e62703c2068a1b2c9f8ba6d634bf1553c/include/mincrypt/rsa.h#46
|
|
118
|
+
// `n0inv` and `rr` are pre-calculated to speed up RSA operations
|
|
119
|
+
// Android 7 switched its encryption library to BoringSSL, but still keeps the key format:
|
|
120
|
+
// https://android.googlesource.com/platform/system/core.git/+/91784040db2b9273687f88d8b95f729d4a61ecc2/libcrypto_utils/android_pubkey.cpp#38
|
|
121
|
+
// Except when reading a key, `n0inv` and `rr` are ignored (they are still populated when generating a key):
|
|
122
|
+
// https://android.googlesource.com/platform/system/core.git/+/91784040db2b9273687f88d8b95f729d4a61ecc2/libcrypto_utils/android_pubkey.cpp#55
|
|
123
|
+
// The public key is a struct (in little endian) of:
|
|
112
124
|
//
|
|
113
125
|
// [
|
|
114
126
|
// modulusLengthInWords, // 32-bit integer, a "word" is 32-bit so it must be 2048 / 8 / 4
|
|
115
|
-
// //
|
|
116
|
-
// n0inv, // 32-bit integer, the modular inverse of (
|
|
117
|
-
// modulus, // n
|
|
127
|
+
// // (the comment in Android source code is incorrect saying "This must be ANDROID_PUBKEY_MODULUS_SIZE")
|
|
128
|
+
// n0inv, // 32-bit integer, the modular inverse of (lower 32 bits of `n`)
|
|
129
|
+
// modulus, // `n`
|
|
118
130
|
// rr, // Montgomery parameter R^2
|
|
119
|
-
// exponent, // 32-bit integer, must be 65537
|
|
131
|
+
// exponent, // 32-bit integer, must be 3 or 65537
|
|
120
132
|
// ]
|
|
121
|
-
//
|
|
122
|
-
// (All in little endian)
|
|
123
|
-
// See https://android.googlesource.com/platform/system/core.git/+/91784040db2b9273687f88d8b95f729d4a61ecc2/libcrypto_utils/android_pubkey.cpp#38
|
|
124
133
|
let outputType;
|
|
125
134
|
const outputLength = adbGetPublicKeySize();
|
|
126
135
|
if (!output) {
|
|
@@ -128,30 +137,29 @@ export function adbGeneratePublicKey(privateKey, output) {
|
|
|
128
137
|
outputType = "Uint8Array";
|
|
129
138
|
}
|
|
130
139
|
else {
|
|
131
|
-
if (output.
|
|
132
|
-
throw new
|
|
140
|
+
if (output.length < outputLength) {
|
|
141
|
+
throw new TypeError("output buffer is too small");
|
|
133
142
|
}
|
|
134
143
|
outputType = "number";
|
|
135
144
|
}
|
|
136
|
-
const outputView = new DataView(output.buffer, output.byteOffset, output.
|
|
145
|
+
const outputView = new DataView(output.buffer, output.byteOffset, output.length);
|
|
137
146
|
let outputOffset = 0;
|
|
138
147
|
// modulusLengthInWords
|
|
139
|
-
outputView.setUint32(outputOffset,
|
|
148
|
+
outputView.setUint32(outputOffset, ModulusLengthInWords, true);
|
|
140
149
|
outputOffset += 4;
|
|
141
150
|
// extract `n` from private key
|
|
142
151
|
const [n] = rsaParsePrivateKey(privateKey);
|
|
143
152
|
// Calculate `n0inv`
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
const n0inv = modInverse(-Number(BigInt.asUintN(32, n)), 2 ** 32);
|
|
147
|
-
outputView.setUint32(outputOffset, n0inv, true);
|
|
153
|
+
const n0inv = -modInverse(Number(n % 2n ** 32n), 2 ** 32);
|
|
154
|
+
outputView.setInt32(outputOffset, n0inv, true);
|
|
148
155
|
outputOffset += 4;
|
|
149
|
-
// Write n
|
|
150
|
-
setBigUint(
|
|
151
|
-
outputOffset +=
|
|
152
|
-
// Calculate rr = (2
|
|
156
|
+
// Write `n` (a.k.a. `modulus`)
|
|
157
|
+
setBigUint(output, outputOffset, ModulusLengthInBytes, n, true);
|
|
158
|
+
outputOffset += ModulusLengthInBytes;
|
|
159
|
+
// Calculate rr = (2 ** (rsa_size)) ** 2 % n
|
|
153
160
|
const rr = 2n ** 4096n % n;
|
|
154
|
-
|
|
161
|
+
setBigUint(output, outputOffset, ModulusLengthInBytes, rr, true);
|
|
162
|
+
outputOffset += ModulusLengthInBytes;
|
|
155
163
|
// exponent
|
|
156
164
|
outputView.setUint32(outputOffset, 65537, true);
|
|
157
165
|
outputOffset += 4;
|
|
@@ -235,11 +243,10 @@ export function rsaSign(privateKey, data) {
|
|
|
235
243
|
padded.set(data, index);
|
|
236
244
|
// Encryption
|
|
237
245
|
// signature = padded ** d % n
|
|
238
|
-
const
|
|
239
|
-
const signature = powMod(getBigUint(view, 0, view.byteLength), d, n);
|
|
246
|
+
const signature = powMod(getBigUint(padded, 0, padded.length), d, n);
|
|
240
247
|
// `padded` is not used anymore,
|
|
241
248
|
// re-use the buffer to store the result
|
|
242
|
-
setBigUint(
|
|
249
|
+
setBigUint(padded, 0, padded.length, signature, false);
|
|
243
250
|
return padded;
|
|
244
251
|
}
|
|
245
252
|
//# sourceMappingURL=crypto.js.map
|
package/esm/daemon/crypto.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../src/daemon/crypto.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,
|
|
1
|
+
{"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../src/daemon/crypto.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,29 +1,54 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ReadableWritablePair } from "@yume-chan/stream-extra";
|
|
2
|
+
import { Consumable } from "@yume-chan/stream-extra";
|
|
2
3
|
import type { AdbIncomingSocketHandler, AdbSocket, Closeable } from "../adb.js";
|
|
3
4
|
import type { AdbPacketData, AdbPacketInit } from "./packet.js";
|
|
4
5
|
import { AdbCommand } from "./packet.js";
|
|
5
6
|
export interface AdbPacketDispatcherOptions {
|
|
7
|
+
/**
|
|
8
|
+
* From Android 9.0, ADB stopped checking the checksum in packet header to improve performance.
|
|
9
|
+
*
|
|
10
|
+
* The value should be inferred from the device's ADB protocol version.
|
|
11
|
+
*/
|
|
6
12
|
calculateChecksum: boolean;
|
|
7
13
|
/**
|
|
8
|
-
* Before Android 9.0, ADB uses `char*` to parse service
|
|
14
|
+
* Before Android 9.0, ADB uses `char*` to parse service strings,
|
|
9
15
|
* thus requires a null character to terminate.
|
|
10
16
|
*
|
|
11
|
-
*
|
|
17
|
+
* The value should be inferred from the device's ADB protocol version.
|
|
18
|
+
* Usually it should have the same value as `calculateChecksum`, since they both changed
|
|
19
|
+
* in Android 9.0.
|
|
12
20
|
*/
|
|
13
21
|
appendNullToServiceString: boolean;
|
|
14
22
|
maxPayloadSize: number;
|
|
23
|
+
/**
|
|
24
|
+
* Whether to keep the `connection` open (don't call `writable.close` and `readable.cancel`)
|
|
25
|
+
* when `AdbPacketDispatcher.close` is called.
|
|
26
|
+
*
|
|
27
|
+
* @default false
|
|
28
|
+
*/
|
|
29
|
+
preserveConnection?: boolean | undefined;
|
|
15
30
|
/**
|
|
16
31
|
* The number of bytes the device can send before receiving an ack packet.
|
|
17
|
-
|
|
18
|
-
*
|
|
19
|
-
*
|
|
32
|
+
* Using delayed ack can improve the throughput,
|
|
33
|
+
* especially when the device is connected over Wi-Fi (so the latency is higher).
|
|
34
|
+
*
|
|
35
|
+
* This must be the negotiated value between the client and device. If the device enabled
|
|
36
|
+
* delayed ack but the client didn't, the device will throw an error when the client sends
|
|
37
|
+
* the first `WRTE` packet. And vice versa.
|
|
20
38
|
*/
|
|
21
39
|
initialDelayedAckBytes: number;
|
|
22
40
|
/**
|
|
23
|
-
*
|
|
41
|
+
* When set, the dispatcher will throw an error when
|
|
42
|
+
* one of the socket readable stalls for this amount of milliseconds.
|
|
43
|
+
*
|
|
44
|
+
* Because ADB is a multiplexed protocol, blocking one socket will also block all other sockets.
|
|
45
|
+
* It's important to always read from all sockets to prevent stalling.
|
|
46
|
+
*
|
|
47
|
+
* This option is helpful to detect bugs in the client code.
|
|
48
|
+
*
|
|
49
|
+
* @default false
|
|
24
50
|
*/
|
|
25
|
-
|
|
26
|
-
debugSlowRead?: boolean | undefined;
|
|
51
|
+
readTimeLimit?: number | undefined;
|
|
27
52
|
}
|
|
28
53
|
/**
|
|
29
54
|
* The dispatcher is the "dumb" part of the connection handling logic.
|
|
@@ -44,7 +69,7 @@ export declare class AdbPacketDispatcher implements Closeable {
|
|
|
44
69
|
addReverseTunnel(service: string, handler: AdbIncomingSocketHandler): void;
|
|
45
70
|
removeReverseTunnel(address: string): void;
|
|
46
71
|
clearReverseTunnels(): void;
|
|
47
|
-
sendPacket(command: AdbCommand, arg0: number, arg1: number, payload
|
|
72
|
+
sendPacket(command: AdbCommand, arg0: number, arg1: number, payload: string | Uint8Array): Promise<void>;
|
|
48
73
|
close(): Promise<void>;
|
|
49
74
|
}
|
|
50
75
|
//# sourceMappingURL=dispatcher.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dispatcher.d.ts","sourceRoot":"","sources":["../../src/daemon/dispatcher.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dispatcher.d.ts","sourceRoot":"","sources":["../../src/daemon/dispatcher.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EACR,oBAAoB,EAEvB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAEH,UAAU,EAEb,MAAM,yBAAyB,CAAC;AAGjC,OAAO,KAAK,EAAE,wBAAwB,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEhF,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,EAAE,UAAU,EAAqB,MAAM,aAAa,CAAC;AAG5D,MAAM,WAAW,0BAA0B;IACvC;;;;OAIG;IACH,iBAAiB,EAAE,OAAO,CAAC;IAE3B;;;;;;;OAOG;IACH,yBAAyB,EAAE,OAAO,CAAC;IAEnC,cAAc,EAAE,MAAM,CAAC;IAEvB;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAEzC;;;;;;;;OAQG;IACH,sBAAsB,EAAE,MAAM,CAAC;IAE/B;;;;;;;;;;OAUG;IACH,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACtC;AAOD;;;;;;;;;GASG;AACH,qBAAa,mBAAoB,YAAW,SAAS;;IAWjD,QAAQ,CAAC,OAAO,EAAE,0BAA0B,CAAC;IAI7C,IAAI,YAAY,kBAEf;gBAMG,UAAU,EAAE,oBAAoB,CAC5B,aAAa,EACb,UAAU,CAAC,aAAa,CAAC,CAC5B,EACD,OAAO,EAAE,0BAA0B;IAqQjC,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IA6BvD,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,wBAAwB;IAInE,mBAAmB,CAAC,OAAO,EAAE,MAAM;IAInC,mBAAmB;IAIb,UAAU,CACZ,OAAO,EAAE,UAAU,EACnB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EAEZ,OAAO,EAAE,MAAM,GAAG,UAAU,GAC7B,OAAO,CAAC,IAAI,CAAC;IAqBV,KAAK;CA4Bd"}
|
package/esm/daemon/dispatcher.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { AsyncOperationManager, PromiseResolver, delay, } from "@yume-chan/async";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { decodeUtf8, encodeUtf8 } from "
|
|
2
|
+
import { getUint32LittleEndian, setUint32LittleEndian, } from "@yume-chan/no-data-view";
|
|
3
|
+
import { AbortController, Consumable, WritableStream, } from "@yume-chan/stream-extra";
|
|
4
|
+
import { EMPTY_UINT8_ARRAY, decodeUtf8, encodeUtf8 } from "@yume-chan/struct";
|
|
5
5
|
import { AdbCommand, calculateChecksum } from "./packet.js";
|
|
6
6
|
import { AdbDaemonSocketController } from "./socket.js";
|
|
7
7
|
/**
|
|
@@ -107,13 +107,13 @@ export class AdbPacketDispatcher {
|
|
|
107
107
|
#handleOkay(packet) {
|
|
108
108
|
let ackBytes;
|
|
109
109
|
if (this.options.initialDelayedAckBytes !== 0) {
|
|
110
|
-
if (packet.payload.
|
|
110
|
+
if (packet.payload.length !== 4) {
|
|
111
111
|
throw new Error("Invalid OKAY packet. Payload size should be 4");
|
|
112
112
|
}
|
|
113
|
-
ackBytes =
|
|
113
|
+
ackBytes = getUint32LittleEndian(packet.payload, 0);
|
|
114
114
|
}
|
|
115
115
|
else {
|
|
116
|
-
if (packet.payload.
|
|
116
|
+
if (packet.payload.length !== 0) {
|
|
117
117
|
throw new Error("Invalid OKAY packet. Payload size should be 0");
|
|
118
118
|
}
|
|
119
119
|
ackBytes = Infinity;
|
|
@@ -136,13 +136,15 @@ export class AdbPacketDispatcher {
|
|
|
136
136
|
}
|
|
137
137
|
// Maybe the device is responding to a packet of last connection
|
|
138
138
|
// Tell the device to close the socket
|
|
139
|
-
void this.sendPacket(AdbCommand.Close, packet.arg1, packet.arg0);
|
|
139
|
+
void this.sendPacket(AdbCommand.Close, packet.arg1, packet.arg0, EMPTY_UINT8_ARRAY);
|
|
140
140
|
}
|
|
141
141
|
#sendOkay(localId, remoteId, ackBytes) {
|
|
142
142
|
let payload;
|
|
143
143
|
if (this.options.initialDelayedAckBytes !== 0) {
|
|
144
|
+
// TODO: try reusing this buffer to reduce memory allocation
|
|
145
|
+
// However, that requires blocking reentrance of `sendOkay`, which might be more expensive
|
|
144
146
|
payload = new Uint8Array(4);
|
|
145
|
-
|
|
147
|
+
setUint32LittleEndian(payload, 0, ackBytes);
|
|
146
148
|
}
|
|
147
149
|
else {
|
|
148
150
|
payload = EMPTY_UINT8_ARRAY;
|
|
@@ -150,27 +152,33 @@ export class AdbPacketDispatcher {
|
|
|
150
152
|
return this.sendPacket(AdbCommand.Okay, localId, remoteId, payload);
|
|
151
153
|
}
|
|
152
154
|
async #handleOpen(packet) {
|
|
153
|
-
//
|
|
154
|
-
//
|
|
155
|
+
// Allocate a local ID for the socket from `#initializers`.
|
|
156
|
+
// `AsyncOperationManager` doesn't directly support returning the next ID,
|
|
157
|
+
// so use `add` + `resolve` to simulate this
|
|
155
158
|
const [localId] = this.#initializers.add();
|
|
156
159
|
this.#initializers.resolve(localId, undefined);
|
|
157
160
|
const remoteId = packet.arg0;
|
|
158
|
-
let
|
|
159
|
-
|
|
161
|
+
let availableWriteBytes = packet.arg1;
|
|
162
|
+
let service = decodeUtf8(packet.payload);
|
|
163
|
+
// ADB Daemon still adds a null character to the service string
|
|
164
|
+
if (service.endsWith("\0")) {
|
|
165
|
+
service = service.substring(0, service.length - 1);
|
|
166
|
+
}
|
|
167
|
+
// Check remote delayed ack enablement is consistent with local
|
|
160
168
|
if (this.options.initialDelayedAckBytes === 0) {
|
|
161
|
-
if (
|
|
169
|
+
if (availableWriteBytes !== 0) {
|
|
162
170
|
throw new Error("Invalid OPEN packet. arg1 should be 0");
|
|
163
171
|
}
|
|
164
|
-
|
|
172
|
+
availableWriteBytes = Infinity;
|
|
165
173
|
}
|
|
166
174
|
else {
|
|
167
|
-
if (
|
|
175
|
+
if (availableWriteBytes === 0) {
|
|
168
176
|
throw new Error("Invalid OPEN packet. arg1 should be greater than 0");
|
|
169
177
|
}
|
|
170
178
|
}
|
|
171
179
|
const handler = this.#incomingSocketHandlers.get(service);
|
|
172
180
|
if (!handler) {
|
|
173
|
-
await this.sendPacket(AdbCommand.Close, 0, remoteId);
|
|
181
|
+
await this.sendPacket(AdbCommand.Close, 0, remoteId, EMPTY_UINT8_ARRAY);
|
|
174
182
|
return;
|
|
175
183
|
}
|
|
176
184
|
const controller = new AdbDaemonSocketController({
|
|
@@ -179,15 +187,15 @@ export class AdbPacketDispatcher {
|
|
|
179
187
|
remoteId,
|
|
180
188
|
localCreated: false,
|
|
181
189
|
service,
|
|
190
|
+
availableWriteBytes,
|
|
182
191
|
});
|
|
183
|
-
controller.ack(initialDelayedAckBytes);
|
|
184
192
|
try {
|
|
185
193
|
await handler(controller.socket);
|
|
186
194
|
this.#sockets.set(localId, controller);
|
|
187
195
|
await this.#sendOkay(localId, remoteId, this.options.initialDelayedAckBytes);
|
|
188
196
|
}
|
|
189
197
|
catch (e) {
|
|
190
|
-
await this.sendPacket(AdbCommand.Close, 0, remoteId);
|
|
198
|
+
await this.sendPacket(AdbCommand.Close, 0, remoteId, EMPTY_UINT8_ARRAY);
|
|
191
199
|
}
|
|
192
200
|
}
|
|
193
201
|
async #handleWrite(packet) {
|
|
@@ -196,19 +204,22 @@ export class AdbPacketDispatcher {
|
|
|
196
204
|
throw new Error(`Unknown local socket id: ${packet.arg1}`);
|
|
197
205
|
}
|
|
198
206
|
let handled = false;
|
|
199
|
-
|
|
200
|
-
delay(5000).then(() => {
|
|
201
|
-
if (this.options.debugSlowRead && !handled) {
|
|
202
|
-
throw new Error(`packet for \`${socket.service}\` not handled in 5 seconds`);
|
|
203
|
-
}
|
|
204
|
-
}),
|
|
207
|
+
const promises = [
|
|
205
208
|
(async () => {
|
|
206
209
|
await socket.enqueue(packet.payload);
|
|
207
210
|
await this.#sendOkay(packet.arg1, packet.arg0, packet.payload.length);
|
|
208
211
|
handled = true;
|
|
209
212
|
})(),
|
|
210
|
-
]
|
|
211
|
-
|
|
213
|
+
];
|
|
214
|
+
if (this.options.readTimeLimit) {
|
|
215
|
+
promises.push((async () => {
|
|
216
|
+
await delay(this.options.readTimeLimit);
|
|
217
|
+
if (!handled) {
|
|
218
|
+
throw new Error(`readable of \`${socket.service}\` has stalled for ${this.options.readTimeLimit} milliseconds`);
|
|
219
|
+
}
|
|
220
|
+
})());
|
|
221
|
+
}
|
|
222
|
+
await Promise.race(promises);
|
|
212
223
|
}
|
|
213
224
|
async createSocket(service) {
|
|
214
225
|
if (this.options.appendNullToServiceString) {
|
|
@@ -224,8 +235,8 @@ export class AdbPacketDispatcher {
|
|
|
224
235
|
remoteId,
|
|
225
236
|
localCreated: true,
|
|
226
237
|
service,
|
|
238
|
+
availableWriteBytes,
|
|
227
239
|
});
|
|
228
|
-
controller.ack(availableWriteBytes);
|
|
229
240
|
this.#sockets.set(localId, controller);
|
|
230
241
|
return controller.socket;
|
|
231
242
|
}
|
|
@@ -238,14 +249,16 @@ export class AdbPacketDispatcher {
|
|
|
238
249
|
clearReverseTunnels() {
|
|
239
250
|
this.#incomingSocketHandlers.clear();
|
|
240
251
|
}
|
|
241
|
-
async sendPacket(command, arg0, arg1,
|
|
252
|
+
async sendPacket(command, arg0, arg1,
|
|
253
|
+
// PERF: It's slightly faster to not use default parameter values
|
|
254
|
+
payload) {
|
|
242
255
|
if (typeof payload === "string") {
|
|
243
256
|
payload = encodeUtf8(payload);
|
|
244
257
|
}
|
|
245
|
-
if (payload.
|
|
246
|
-
throw new
|
|
258
|
+
if (payload.length > this.options.maxPayloadSize) {
|
|
259
|
+
throw new TypeError("payload too large");
|
|
247
260
|
}
|
|
248
|
-
await
|
|
261
|
+
await Consumable.WritableStream.write(this.#writer, {
|
|
249
262
|
command,
|
|
250
263
|
arg0,
|
|
251
264
|
arg1,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dispatcher.js","sourceRoot":"","sources":["../../src/daemon/dispatcher.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,qBAAqB,EACrB,eAAe,EACf,KAAK,GACR,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"dispatcher.js","sourceRoot":"","sources":["../../src/daemon/dispatcher.ts"],"names":[],"mappings":"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"}
|
package/esm/daemon/packet.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Consumable, TransformStream } from "@yume-chan/stream-extra";
|
|
2
2
|
import Struct from "@yume-chan/struct";
|
|
3
3
|
export declare enum AdbCommand {
|
|
4
4
|
Auth = 1213486401,// 'AUTH'
|
|
@@ -40,7 +40,7 @@ export type AdbPacket = (typeof AdbPacket)["TDeserializeResult"];
|
|
|
40
40
|
export type AdbPacketData = Omit<(typeof AdbPacket)["TInit"], "checksum" | "magic">;
|
|
41
41
|
export type AdbPacketInit = (typeof AdbPacket)["TInit"];
|
|
42
42
|
export declare function calculateChecksum(payload: Uint8Array): number;
|
|
43
|
-
export declare class AdbPacketSerializeStream extends
|
|
43
|
+
export declare class AdbPacketSerializeStream extends TransformStream<Consumable<AdbPacketInit>, Consumable<Uint8Array>> {
|
|
44
44
|
constructor();
|
|
45
45
|
}
|
|
46
46
|
//# sourceMappingURL=packet.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"packet.d.ts","sourceRoot":"","sources":["../../src/daemon/packet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"packet.d.ts","sourceRoot":"","sources":["../../src/daemon/packet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,MAAM,MAAM,mBAAmB,CAAC;AAEvC,oBAAY,UAAU;IAClB,IAAI,aAAa,CAAE,SAAS;IAC5B,KAAK,aAAa,CAAE,SAAS;IAC7B,OAAO,aAAa,CAAE,SAAS;IAC/B,IAAI,aAAa,CAAE,SAAS;IAC5B,IAAI,aAAa,CAAE,SAAS;IAC5B,KAAK,aAAa;CACrB;AAED,eAAO,MAAM,eAAe;;;;;;;0CAMT,CAAC;AAEpB,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,oBAAoB,CAAC,CAAC;AAI7E,eAAO,MAAM,SAAS;;;;;;;;oDAEsC,CAAC;AAE7D,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,oBAAoB,CAAC,CAAC;AAEjE;;;;;;;;;GASG;AACH,MAAM,MAAM,aAAa,GAAG,IAAI,CAC5B,CAAC,OAAO,SAAS,CAAC,CAAC,OAAO,CAAC,EAC3B,UAAU,GAAG,OAAO,CACvB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC;AAExD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,UAAU,GAAG,MAAM,CAE7D;AAED,qBAAa,wBAAyB,SAAQ,eAAe,CACzD,UAAU,CAAC,aAAa,CAAC,EACzB,UAAU,CAAC,UAAU,CAAC,CACzB;;CA2BA"}
|