@yume-chan/adb 0.0.17 → 0.0.19

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.
Files changed (177) hide show
  1. package/CHANGELOG.json +27 -0
  2. package/CHANGELOG.md +16 -1
  3. package/LICENSE +1 -1
  4. package/esm/adb.d.ts +63 -60
  5. package/esm/adb.d.ts.map +1 -1
  6. package/esm/adb.js +257 -229
  7. package/esm/adb.js.map +1 -1
  8. package/esm/auth.d.ts +51 -51
  9. package/esm/auth.d.ts.map +1 -1
  10. package/esm/auth.js +95 -96
  11. package/esm/auth.js.map +1 -1
  12. package/esm/backend.d.ts +8 -8
  13. package/esm/backend.d.ts.map +1 -1
  14. package/esm/backend.js +1 -1
  15. package/esm/commands/base.d.ts +6 -6
  16. package/esm/commands/base.js +8 -8
  17. package/esm/commands/framebuffer.d.ts +53 -53
  18. package/esm/commands/framebuffer.d.ts.map +1 -1
  19. package/esm/commands/framebuffer.js +46 -47
  20. package/esm/commands/framebuffer.js.map +1 -1
  21. package/esm/commands/index.d.ts +7 -8
  22. package/esm/commands/index.d.ts.map +1 -1
  23. package/esm/commands/index.js +7 -8
  24. package/esm/commands/index.js.map +1 -1
  25. package/esm/commands/install.d.ts +9 -3
  26. package/esm/commands/install.d.ts.map +1 -1
  27. package/esm/commands/install.js +27 -21
  28. package/esm/commands/install.js.map +1 -1
  29. package/esm/commands/power.d.ts +22 -22
  30. package/esm/commands/power.d.ts.map +1 -1
  31. package/esm/commands/power.js +48 -44
  32. package/esm/commands/power.js.map +1 -1
  33. package/esm/commands/reverse.d.ts +41 -28
  34. package/esm/commands/reverse.d.ts.map +1 -1
  35. package/esm/commands/reverse.js +125 -98
  36. package/esm/commands/reverse.js.map +1 -1
  37. package/esm/commands/subprocess/command.d.ts +57 -51
  38. package/esm/commands/subprocess/command.d.ts.map +1 -1
  39. package/esm/commands/subprocess/command.js +86 -82
  40. package/esm/commands/subprocess/command.js.map +1 -1
  41. package/esm/commands/subprocess/index.d.ts +3 -3
  42. package/esm/commands/subprocess/index.js +3 -3
  43. package/esm/commands/subprocess/protocols/index.d.ts +3 -3
  44. package/esm/commands/subprocess/protocols/index.js +3 -3
  45. package/esm/commands/subprocess/protocols/none.d.ts +35 -35
  46. package/esm/commands/subprocess/protocols/none.d.ts.map +1 -1
  47. package/esm/commands/subprocess/protocols/none.js +65 -55
  48. package/esm/commands/subprocess/protocols/none.js.map +1 -1
  49. package/esm/commands/subprocess/protocols/shell.d.ts +39 -38
  50. package/esm/commands/subprocess/protocols/shell.d.ts.map +1 -1
  51. package/esm/commands/subprocess/protocols/shell.js +166 -154
  52. package/esm/commands/subprocess/protocols/shell.js.map +1 -1
  53. package/esm/commands/subprocess/protocols/types.d.ts +49 -49
  54. package/esm/commands/subprocess/protocols/types.d.ts.map +1 -1
  55. package/esm/commands/subprocess/protocols/types.js +1 -1
  56. package/esm/commands/subprocess/utils.d.ts +1 -1
  57. package/esm/commands/subprocess/utils.js +18 -18
  58. package/esm/commands/sync/index.d.ts +8 -7
  59. package/esm/commands/sync/index.d.ts.map +1 -1
  60. package/esm/commands/sync/index.js +8 -7
  61. package/esm/commands/sync/index.js.map +1 -1
  62. package/esm/commands/sync/list.d.ts +42 -40
  63. package/esm/commands/sync/list.d.ts.map +1 -1
  64. package/esm/commands/sync/list.js +67 -35
  65. package/esm/commands/sync/list.js.map +1 -1
  66. package/esm/commands/sync/pull.d.ts +13 -11
  67. package/esm/commands/sync/pull.d.ts.map +1 -1
  68. package/esm/commands/sync/pull.js +35 -36
  69. package/esm/commands/sync/pull.js.map +1 -1
  70. package/esm/commands/sync/push.d.ts +46 -7
  71. package/esm/commands/sync/push.d.ts.map +1 -1
  72. package/esm/commands/sync/push.js +89 -23
  73. package/esm/commands/sync/push.js.map +1 -1
  74. package/esm/commands/sync/request.d.ts +26 -23
  75. package/esm/commands/sync/request.d.ts.map +1 -1
  76. package/esm/commands/sync/request.js +40 -42
  77. package/esm/commands/sync/request.js.map +1 -1
  78. package/esm/commands/sync/response.d.ts +19 -19
  79. package/esm/commands/sync/response.d.ts.map +1 -1
  80. package/esm/commands/sync/response.js +54 -54
  81. package/esm/commands/sync/response.js.map +1 -1
  82. package/esm/commands/sync/socket.d.ts +27 -0
  83. package/esm/commands/sync/socket.d.ts.map +1 -0
  84. package/esm/commands/sync/socket.js +66 -0
  85. package/esm/commands/sync/socket.js.map +1 -0
  86. package/esm/commands/sync/stat.d.ts +72 -72
  87. package/esm/commands/sync/stat.d.ts.map +1 -1
  88. package/esm/commands/sync/stat.js +116 -94
  89. package/esm/commands/sync/stat.js.map +1 -1
  90. package/esm/commands/sync/sync.d.ts +72 -60
  91. package/esm/commands/sync/sync.d.ts.map +1 -1
  92. package/esm/commands/sync/sync.js +127 -148
  93. package/esm/commands/sync/sync.js.map +1 -1
  94. package/esm/commands/tcpip.d.ts +5 -5
  95. package/esm/commands/tcpip.js +18 -18
  96. package/esm/crypto.d.ts +36 -36
  97. package/esm/crypto.d.ts.map +1 -1
  98. package/esm/crypto.js +248 -238
  99. package/esm/crypto.js.map +1 -1
  100. package/esm/features.d.ts +10 -7
  101. package/esm/features.d.ts.map +1 -1
  102. package/esm/features.js +13 -10
  103. package/esm/features.js.map +1 -1
  104. package/esm/index.d.ts +9 -9
  105. package/esm/index.d.ts.map +1 -1
  106. package/esm/index.js +9 -9
  107. package/esm/index.js.map +1 -1
  108. package/esm/packet.d.ts +45 -46
  109. package/esm/packet.d.ts.map +1 -1
  110. package/esm/packet.js +43 -46
  111. package/esm/packet.js.map +1 -1
  112. package/esm/socket/dispatcher.d.ts +59 -59
  113. package/esm/socket/dispatcher.d.ts.map +1 -1
  114. package/esm/socket/dispatcher.js +223 -231
  115. package/esm/socket/dispatcher.js.map +1 -1
  116. package/esm/socket/index.d.ts +2 -2
  117. package/esm/socket/index.js +2 -2
  118. package/esm/socket/socket.d.ts +59 -59
  119. package/esm/socket/socket.d.ts.map +1 -1
  120. package/esm/socket/socket.js +118 -98
  121. package/esm/socket/socket.js.map +1 -1
  122. package/esm/utils/auto-reset-event.d.ts +9 -9
  123. package/esm/utils/auto-reset-event.d.ts.map +1 -1
  124. package/esm/utils/auto-reset-event.js +33 -33
  125. package/esm/utils/auto-reset-event.js.map +1 -1
  126. package/esm/utils/base64.d.ts +27 -27
  127. package/esm/utils/base64.d.ts.map +1 -1
  128. package/esm/utils/base64.js +246 -245
  129. package/esm/utils/base64.js.map +1 -1
  130. package/esm/utils/conditional-variable.d.ts +9 -0
  131. package/esm/utils/conditional-variable.d.ts.map +1 -0
  132. package/esm/utils/conditional-variable.js +34 -0
  133. package/esm/utils/conditional-variable.js.map +1 -0
  134. package/esm/utils/index.d.ts +4 -3
  135. package/esm/utils/index.d.ts.map +1 -1
  136. package/esm/utils/index.js +4 -3
  137. package/esm/utils/index.js.map +1 -1
  138. package/package.json +17 -13
  139. package/src/adb.ts +160 -101
  140. package/src/auth.ts +31 -22
  141. package/src/backend.ts +6 -4
  142. package/src/commands/base.ts +2 -2
  143. package/src/commands/framebuffer.ts +37 -41
  144. package/src/commands/index.ts +7 -8
  145. package/src/commands/power.ts +15 -11
  146. package/src/commands/reverse.ts +74 -30
  147. package/src/commands/subprocess/command.ts +34 -23
  148. package/src/commands/subprocess/index.ts +3 -3
  149. package/src/commands/subprocess/protocols/index.ts +3 -3
  150. package/src/commands/subprocess/protocols/none.ts +26 -11
  151. package/src/commands/subprocess/protocols/shell.ts +110 -56
  152. package/src/commands/subprocess/protocols/types.ts +10 -6
  153. package/src/commands/subprocess/utils.ts +1 -1
  154. package/src/commands/sync/index.ts +8 -7
  155. package/src/commands/sync/list.ts +74 -28
  156. package/src/commands/sync/pull.ts +49 -37
  157. package/src/commands/sync/push.ts +153 -32
  158. package/src/commands/sync/request.ts +37 -34
  159. package/src/commands/sync/response.ts +34 -27
  160. package/src/commands/sync/socket.ts +97 -0
  161. package/src/commands/sync/stat.ts +98 -70
  162. package/src/commands/sync/sync.ts +78 -97
  163. package/src/commands/tcpip.ts +5 -5
  164. package/src/crypto.ts +60 -32
  165. package/src/features.ts +9 -6
  166. package/src/index.ts +9 -10
  167. package/src/packet.ts +41 -46
  168. package/src/socket/dispatcher.ts +130 -108
  169. package/src/socket/index.ts +2 -2
  170. package/src/socket/socket.ts +84 -34
  171. package/src/utils/auto-reset-event.ts +16 -17
  172. package/src/utils/base64.ts +51 -41
  173. package/src/utils/conditional-variable.ts +45 -0
  174. package/src/utils/index.ts +4 -3
  175. package/tsconfig.build.json +1 -1
  176. package/tsconfig.build.tsbuildinfo +1 -1
  177. package/src/commands/install.ts +0 -32
package/esm/crypto.js CHANGED
@@ -1,239 +1,249 @@
1
- import { getBigUint64, setBigUint64 } from '@yume-chan/dataview-bigint-polyfill/esm/fallback.js';
2
- const BigInt0 = BigInt(0);
3
- const BigInt1 = BigInt(1);
4
- const BigInt2 = BigInt(2);
5
- const BigInt64 = BigInt(64);
6
- /**
7
- * Gets the `BigInt` value at the specified byte offset and length from the start of the view. There is
8
- * no alignment constraint; multi-byte values may be fetched from any offset.
9
- *
10
- * Only supports Big-Endian, because that's what ADB uses.
11
- * @param byteOffset The place in the buffer at which the value should be retrieved.
12
- */
13
- export function getBigUint(dataView, byteOffset, length) {
14
- let result = BigInt0;
15
- // Currently `length` must be a multiplication of 8
16
- // Support for arbitrary length can be easily added
17
- for (let i = byteOffset; i < byteOffset + length; i += 8) {
18
- result <<= BigInt64;
19
- const value = getBigUint64(dataView, i, false);
20
- result += value;
21
- }
22
- return result;
23
- }
24
- /**
25
- * Stores an arbitrary-precision positive `BigInt` value at the specified byte offset from the start of the view.
26
- * @param byteOffset The place in the buffer at which the value should be set.
27
- * @param value The value to set.
28
- * @param littleEndian If `false` or `undefined`, a big-endian value should be written,
29
- * otherwise a little-endian value should be written.
30
- */
31
- export function setBigUint(dataView, byteOffset, value, littleEndian) {
32
- const start = byteOffset;
33
- if (littleEndian) {
34
- while (value > BigInt0) {
35
- setBigUint64(dataView, byteOffset, value, true);
36
- byteOffset += 8;
37
- value >>= BigInt64;
38
- }
39
- }
40
- else {
41
- // Because we don't know how long (in bits) the `value` is,
42
- // Convert it to an array of `uint64` first.
43
- const uint64Array = [];
44
- while (value > BigInt0) {
45
- uint64Array.push(BigInt.asUintN(64, value));
46
- value >>= BigInt64;
47
- }
48
- for (let i = uint64Array.length - 1; i >= 0; i -= 1) {
49
- setBigUint64(dataView, byteOffset, uint64Array[i], false);
50
- byteOffset += 8;
51
- }
52
- }
53
- return byteOffset - start;
54
- }
55
- // These values are correct only if
56
- // modulus length is 2048 and
57
- // public exponent (e) is 65537
58
- // Anyway, that's how this library generates keys
59
- // To support other parameters,
60
- // a proper ASN.1 parser can be used
61
- // References:
62
- //
63
- // https://tools.ietf.org/html/rfc8017#appendix-A.1.2
64
- // PKCS #1: RSA Cryptography Specifications Version 2.2
65
- // A.1.2. RSA Private Key Syntax
66
- //
67
- // https://lapo.it/asn1js/
68
- // https://github.com/lapo-luchini/asn1js
69
- // ASN.1 JavaScript decoder
70
- //
71
- // https://www.itu.int/rec/T-REC-X.690-201508-I/en
72
- // X.690: Specification of Distinguished Encoding Rules (DER)
73
- const RsaPrivateKeyNOffset = 38;
74
- const RsaPrivateKeyNLength = 2048 / 8;
75
- const RsaPrivateKeyDOffset = 303;
76
- const RsaPrivateKeyDLength = 2048 / 8;
77
- export function parsePrivateKey(key) {
78
- const view = new DataView(key.buffer, key.byteOffset, key.byteLength);
79
- const n = getBigUint(view, RsaPrivateKeyNOffset, RsaPrivateKeyNLength);
80
- const d = getBigUint(view, RsaPrivateKeyDOffset, RsaPrivateKeyDLength);
81
- return [n, d];
82
- }
83
- // Taken from https://stackoverflow.com/a/51562038
84
- // I can't understand, but it does work
85
- // Only used with numbers smaller than 2^32 so doesn't need BigInt
86
- export function modInverse(a, m) {
87
- a = (a % m + m) % m;
88
- if (!a || m < 2) {
89
- return NaN; // invalid input
90
- }
91
- // find the gcd
92
- const s = [];
93
- let b = m;
94
- while (b) {
95
- [a, b] = [b, a % b];
96
- s.push({ a, b });
97
- }
98
- if (a !== 1) {
99
- return NaN; // inverse does not exists
100
- }
101
- // find the inverse
102
- let x = 1;
103
- let y = 0;
104
- for (let i = s.length - 2; i >= 0; --i) {
105
- [x, y] = [y, x - y * Math.floor(s[i].a / s[i].b)];
106
- }
107
- return (y % m + m) % m;
108
- }
109
- export function calculatePublicKeyLength() {
110
- return 4 + 4 + 2048 / 8 + 2048 / 8 + 4;
111
- }
112
- export function calculatePublicKey(privateKey, output) {
113
- // Android has its own public key generation algorithm
114
- // See https://android.googlesource.com/platform/system/core.git/+/91784040db2b9273687f88d8b95f729d4a61ecc2/libcrypto_utils/android_pubkey.cpp#111
115
- // The public key is an array of
116
- //
117
- // [
118
- // modulusLengthInWords, // 32-bit integer, a "word" is 32-bit so it must be 2048 / 8 / 4
119
- // // Actually the comment in Android source code was wrong
120
- // n0inv, // 32-bit integer, the modular inverse of (low 32 bits of n)
121
- // modulus, // n
122
- // rr, // Montgomery parameter R^2
123
- // exponent, // 32-bit integer, must be 65537
124
- // ]
125
- //
126
- // (All in little endian)
127
- // See https://android.googlesource.com/platform/system/core.git/+/91784040db2b9273687f88d8b95f729d4a61ecc2/libcrypto_utils/android_pubkey.cpp#38
128
- // extract `n` from private key
129
- const [n] = parsePrivateKey(privateKey);
130
- let outputType;
131
- const outputLength = calculatePublicKeyLength();
132
- if (!output) {
133
- output = new Uint8Array(outputLength);
134
- outputType = 'Uint8Array';
135
- }
136
- else {
137
- if (output.byteLength < outputLength) {
138
- throw new Error('output buffer is too small');
139
- }
140
- outputType = 'number';
141
- }
142
- const outputView = new DataView(output.buffer, output.byteOffset, output.byteLength);
143
- let outputOffset = 0;
144
- // modulusLengthInWords
145
- outputView.setUint32(outputOffset, 2048 / 8 / 4, true);
146
- outputOffset += 4;
147
- // Calculate `n0inv`
148
- // Don't know why need to multiple -1
149
- // Didn't exist in Android codebase
150
- const n0inv = modInverse(Number(BigInt.asUintN(32, n) * BigInt(-1)), 2 ** 32);
151
- outputView.setUint32(outputOffset, n0inv, true);
152
- outputOffset += 4;
153
- // Write n
154
- setBigUint(outputView, outputOffset, n, true);
155
- outputOffset += 256;
156
- // Calculate rr = (2^(rsa_size)) ^ 2 mod n
157
- let rr = BigInt(2) ** BigInt(4096) % n;
158
- outputOffset += setBigUint(outputView, outputOffset, rr, true);
159
- // exponent
160
- outputView.setUint32(outputOffset, 65537, true);
161
- outputOffset += 4;
162
- if (outputType === 'Uint8Array') {
163
- return output;
164
- }
165
- else {
166
- return outputLength;
167
- }
168
- }
169
- /**
170
- * Modular exponentiation.
171
- *
172
- * Calculate `(base ** exponent) % modulus` without actually calculating `(base ** exponent)`.
173
- *
174
- * See https://en.wikipedia.org/wiki/Modular_exponentiation#Implementation_in_Lua
175
- */
176
- export function powMod(base, exponent, modulus) {
177
- if (modulus === BigInt1) {
178
- return BigInt0;
179
- }
180
- let r = BigInt1;
181
- base = base % modulus;
182
- while (exponent > BigInt0) {
183
- if (BigInt.asUintN(1, exponent) === BigInt1) {
184
- r = r * base % modulus;
185
- }
186
- exponent >>= BigInt1;
187
- base = base ** BigInt2 % modulus;
188
- }
189
- return r;
190
- }
191
- export const SHA1_DIGEST_LENGTH = 20;
192
- export const ASN1_SEQUENCE = 0x30;
193
- export const ASN1_OCTET_STRING = 0x04;
194
- export const ASN1_NULL = 0x05;
195
- export const ASN1_OID = 0x06;
196
- // PKCS#1 SHA-1 hash digest info
197
- export const SHA1_DIGEST_INFO = new Uint8Array([
198
- ASN1_SEQUENCE, 0x0d + SHA1_DIGEST_LENGTH,
199
- ASN1_SEQUENCE, 0x09,
200
- // SHA-1 (1 3 14 3 2 26)
201
- ASN1_OID, 0x05, 1 * 40 + 3, 14, 3, 2, 26,
202
- ASN1_NULL, 0x00,
203
- ASN1_OCTET_STRING, SHA1_DIGEST_LENGTH
204
- ]);
205
- // SubtleCrypto.sign() will hash the given data and sign the hash
206
- // But we don't need the hashing step
207
- // (In another word, ADB just requires the client to
208
- // encrypt the given data with its private key)
209
- // However SubtileCrypto.encrypt() doesn't accept 'RSASSA-PKCS1-v1_5' algorithm
210
- // So we need to implement the encryption by ourself
211
- export function sign(privateKey, data) {
212
- const [n, d] = parsePrivateKey(privateKey);
213
- // PKCS#1 padding
214
- const padded = new Uint8Array(256);
215
- let index = 0;
216
- padded[index] = 0;
217
- index += 1;
218
- padded[index] = 1;
219
- index += 1;
220
- const fillLength = padded.length - SHA1_DIGEST_INFO.length - data.length - 1;
221
- while (index < fillLength) {
222
- padded[index] = 0xff;
223
- index += 1;
224
- }
225
- padded[index] = 0;
226
- index += 1;
227
- padded.set(SHA1_DIGEST_INFO, index);
228
- index += SHA1_DIGEST_INFO.length;
229
- padded.set(data, index);
230
- // Encryption
231
- // signature = padded ** d % n
232
- const view = new DataView(padded.buffer);
233
- const signature = powMod(getBigUint(view, 0, view.byteLength), d, n);
234
- // `padded` is not used anymore,
235
- // re-use the buffer to store the result
236
- setBigUint(view, 0, signature, false);
237
- return padded;
238
- }
1
+ import { getBigUint64, setBigUint64, } from "@yume-chan/dataview-bigint-polyfill/esm/fallback.js";
2
+ const BigInt0 = BigInt(0);
3
+ const BigInt1 = BigInt(1);
4
+ const BigInt2 = BigInt(2);
5
+ const BigInt64 = BigInt(64);
6
+ /**
7
+ * Gets the `BigInt` value at the specified byte offset and length from the start of the view. There is
8
+ * no alignment constraint; multi-byte values may be fetched from any offset.
9
+ *
10
+ * Only supports Big-Endian, because that's what ADB uses.
11
+ * @param byteOffset The place in the buffer at which the value should be retrieved.
12
+ */
13
+ export function getBigUint(dataView, byteOffset, length) {
14
+ let result = BigInt0;
15
+ // Currently `length` must be a multiplication of 8
16
+ // Support for arbitrary length can be easily added
17
+ for (let i = byteOffset; i < byteOffset + length; i += 8) {
18
+ result <<= BigInt64;
19
+ const value = getBigUint64(dataView, i, false);
20
+ result += value;
21
+ }
22
+ return result;
23
+ }
24
+ /**
25
+ * Stores an arbitrary-precision positive `BigInt` value at the specified byte offset from the start of the view.
26
+ * @param byteOffset The place in the buffer at which the value should be set.
27
+ * @param value The value to set.
28
+ * @param littleEndian If `false` or `undefined`, a big-endian value should be written,
29
+ * otherwise a little-endian value should be written.
30
+ */
31
+ export function setBigUint(dataView, byteOffset, value, littleEndian) {
32
+ const start = byteOffset;
33
+ if (littleEndian) {
34
+ while (value > BigInt0) {
35
+ setBigUint64(dataView, byteOffset, value, true);
36
+ byteOffset += 8;
37
+ value >>= BigInt64;
38
+ }
39
+ }
40
+ else {
41
+ // Because we don't know how long (in bits) the `value` is,
42
+ // Convert it to an array of `uint64` first.
43
+ const uint64Array = [];
44
+ while (value > BigInt0) {
45
+ uint64Array.push(BigInt.asUintN(64, value));
46
+ value >>= BigInt64;
47
+ }
48
+ for (let i = uint64Array.length - 1; i >= 0; i -= 1) {
49
+ setBigUint64(dataView, byteOffset, uint64Array[i], false);
50
+ byteOffset += 8;
51
+ }
52
+ }
53
+ return byteOffset - start;
54
+ }
55
+ // These values are correct only if
56
+ // modulus length is 2048 and
57
+ // public exponent (e) is 65537
58
+ // Anyway, that's how this library generates keys
59
+ // To support other parameters,
60
+ // a proper ASN.1 parser can be used
61
+ // References:
62
+ //
63
+ // https://tools.ietf.org/html/rfc8017#appendix-A.1.2
64
+ // PKCS #1: RSA Cryptography Specifications Version 2.2
65
+ // A.1.2. RSA Private Key Syntax
66
+ //
67
+ // https://lapo.it/asn1js/
68
+ // https://github.com/lapo-luchini/asn1js
69
+ // ASN.1 JavaScript decoder
70
+ //
71
+ // https://www.itu.int/rec/T-REC-X.690-201508-I/en
72
+ // X.690: Specification of Distinguished Encoding Rules (DER)
73
+ const RsaPrivateKeyNOffset = 38;
74
+ const RsaPrivateKeyNLength = 2048 / 8;
75
+ const RsaPrivateKeyDOffset = 303;
76
+ const RsaPrivateKeyDLength = 2048 / 8;
77
+ export function parsePrivateKey(key) {
78
+ const view = new DataView(key.buffer, key.byteOffset, key.byteLength);
79
+ const n = getBigUint(view, RsaPrivateKeyNOffset, RsaPrivateKeyNLength);
80
+ const d = getBigUint(view, RsaPrivateKeyDOffset, RsaPrivateKeyDLength);
81
+ return [n, d];
82
+ }
83
+ // Taken from https://stackoverflow.com/a/51562038
84
+ // I can't understand, but it does work
85
+ // Only used with numbers smaller than 2^32 so doesn't need BigInt
86
+ export function modInverse(a, m) {
87
+ a = ((a % m) + m) % m;
88
+ if (!a || m < 2) {
89
+ return NaN; // invalid input
90
+ }
91
+ // find the gcd
92
+ const s = [];
93
+ let b = m;
94
+ while (b) {
95
+ [a, b] = [b, a % b];
96
+ s.push({ a, b });
97
+ }
98
+ if (a !== 1) {
99
+ return NaN; // inverse does not exists
100
+ }
101
+ // find the inverse
102
+ let x = 1;
103
+ let y = 0;
104
+ for (let i = s.length - 2; i >= 0; i -= 1) {
105
+ [x, y] = [y, x - y * Math.floor(s[i].a / s[i].b)];
106
+ }
107
+ return ((y % m) + m) % m;
108
+ }
109
+ export function calculatePublicKeyLength() {
110
+ return 4 + 4 + 2048 / 8 + 2048 / 8 + 4;
111
+ }
112
+ export function calculatePublicKey(privateKey, output) {
113
+ // Android has its own public key generation algorithm
114
+ // See https://android.googlesource.com/platform/system/core.git/+/91784040db2b9273687f88d8b95f729d4a61ecc2/libcrypto_utils/android_pubkey.cpp#111
115
+ // The public key is an array of
116
+ //
117
+ // [
118
+ // modulusLengthInWords, // 32-bit integer, a "word" is 32-bit so it must be 2048 / 8 / 4
119
+ // // Actually the comment in Android source code was wrong
120
+ // n0inv, // 32-bit integer, the modular inverse of (low 32 bits of n)
121
+ // modulus, // n
122
+ // rr, // Montgomery parameter R^2
123
+ // exponent, // 32-bit integer, must be 65537
124
+ // ]
125
+ //
126
+ // (All in little endian)
127
+ // See https://android.googlesource.com/platform/system/core.git/+/91784040db2b9273687f88d8b95f729d4a61ecc2/libcrypto_utils/android_pubkey.cpp#38
128
+ // extract `n` from private key
129
+ const [n] = parsePrivateKey(privateKey);
130
+ let outputType;
131
+ const outputLength = calculatePublicKeyLength();
132
+ if (!output) {
133
+ output = new Uint8Array(outputLength);
134
+ outputType = "Uint8Array";
135
+ }
136
+ else {
137
+ if (output.byteLength < outputLength) {
138
+ throw new Error("output buffer is too small");
139
+ }
140
+ outputType = "number";
141
+ }
142
+ const outputView = new DataView(output.buffer, output.byteOffset, output.byteLength);
143
+ let outputOffset = 0;
144
+ // modulusLengthInWords
145
+ outputView.setUint32(outputOffset, 2048 / 8 / 4, true);
146
+ outputOffset += 4;
147
+ // Calculate `n0inv`
148
+ // Don't know why need to multiple -1
149
+ // Didn't exist in Android codebase
150
+ const n0inv = modInverse(Number(BigInt.asUintN(32, n) * BigInt(-1)), 2 ** 32);
151
+ outputView.setUint32(outputOffset, n0inv, true);
152
+ outputOffset += 4;
153
+ // Write n
154
+ setBigUint(outputView, outputOffset, n, true);
155
+ outputOffset += 256;
156
+ // Calculate rr = (2^(rsa_size)) ^ 2 mod n
157
+ const rr = BigInt(2) ** BigInt(4096) % n;
158
+ outputOffset += setBigUint(outputView, outputOffset, rr, true);
159
+ // exponent
160
+ outputView.setUint32(outputOffset, 65537, true);
161
+ outputOffset += 4;
162
+ if (outputType === "Uint8Array") {
163
+ return output;
164
+ }
165
+ else {
166
+ return outputLength;
167
+ }
168
+ }
169
+ /**
170
+ * Modular exponentiation.
171
+ *
172
+ * Calculate `(base ** exponent) % modulus` without actually calculating `(base ** exponent)`.
173
+ *
174
+ * See https://en.wikipedia.org/wiki/Modular_exponentiation#Implementation_in_Lua
175
+ */
176
+ export function powMod(base, exponent, modulus) {
177
+ if (modulus === BigInt1) {
178
+ return BigInt0;
179
+ }
180
+ let r = BigInt1;
181
+ base = base % modulus;
182
+ while (exponent > BigInt0) {
183
+ if (BigInt.asUintN(1, exponent) === BigInt1) {
184
+ r = (r * base) % modulus;
185
+ }
186
+ exponent >>= BigInt1;
187
+ base = base ** BigInt2 % modulus;
188
+ }
189
+ return r;
190
+ }
191
+ export const SHA1_DIGEST_LENGTH = 20;
192
+ export const ASN1_SEQUENCE = 0x30;
193
+ export const ASN1_OCTET_STRING = 0x04;
194
+ export const ASN1_NULL = 0x05;
195
+ export const ASN1_OID = 0x06;
196
+ // PKCS#1 SHA-1 hash digest info
197
+ export const SHA1_DIGEST_INFO = new Uint8Array([
198
+ ASN1_SEQUENCE,
199
+ 0x0d + SHA1_DIGEST_LENGTH,
200
+ ASN1_SEQUENCE,
201
+ 0x09,
202
+ // SHA-1 (1 3 14 3 2 26)
203
+ ASN1_OID,
204
+ 0x05,
205
+ 1 * 40 + 3,
206
+ 14,
207
+ 3,
208
+ 2,
209
+ 26,
210
+ ASN1_NULL,
211
+ 0x00,
212
+ ASN1_OCTET_STRING,
213
+ SHA1_DIGEST_LENGTH,
214
+ ]);
215
+ // SubtleCrypto.sign() will hash the given data and sign the hash
216
+ // But we don't need the hashing step
217
+ // (In another word, ADB just requires the client to
218
+ // encrypt the given data with its private key)
219
+ // However SubtileCrypto.encrypt() doesn't accept 'RSASSA-PKCS1-v1_5' algorithm
220
+ // So we need to implement the encryption by ourself
221
+ export function sign(privateKey, data) {
222
+ const [n, d] = parsePrivateKey(privateKey);
223
+ // PKCS#1 padding
224
+ const padded = new Uint8Array(256);
225
+ let index = 0;
226
+ padded[index] = 0;
227
+ index += 1;
228
+ padded[index] = 1;
229
+ index += 1;
230
+ const fillLength = padded.length - SHA1_DIGEST_INFO.length - data.length - 1;
231
+ while (index < fillLength) {
232
+ padded[index] = 0xff;
233
+ index += 1;
234
+ }
235
+ padded[index] = 0;
236
+ index += 1;
237
+ padded.set(SHA1_DIGEST_INFO, index);
238
+ index += SHA1_DIGEST_INFO.length;
239
+ padded.set(data, index);
240
+ // Encryption
241
+ // signature = padded ** d % n
242
+ const view = new DataView(padded.buffer);
243
+ const signature = powMod(getBigUint(view, 0, view.byteLength), d, n);
244
+ // `padded` is not used anymore,
245
+ // re-use the buffer to store the result
246
+ setBigUint(view, 0, signature, false);
247
+ return padded;
248
+ }
239
249
  //# sourceMappingURL=crypto.js.map
package/esm/crypto.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"crypto.js","sourceRoot":"","sources":["../src/crypto.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"crypto.js","sourceRoot":"","sources":["../src/crypto.ts"],"names":[],"mappings":"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"}
package/esm/features.d.ts CHANGED
@@ -1,8 +1,11 @@
1
- export declare enum AdbFeatures {
2
- ShellV2 = "shell_v2",
3
- Cmd = "cmd",
4
- StatV2 = "stat_v2",
5
- ListV2 = "ls_v2",
6
- FixedPushMkdir = "fixed_push_mkdir"
7
- }
1
+ export declare enum AdbFeature {
2
+ ShellV2 = "shell_v2",
3
+ Cmd = "cmd",
4
+ StatV2 = "stat_v2",
5
+ ListV2 = "ls_v2",
6
+ FixedPushMkdir = "fixed_push_mkdir",
7
+ Abb = "abb",
8
+ AbbExec = "abb_exec",
9
+ SendReceiveV2 = "sendrecv_v2"
10
+ }
8
11
  //# sourceMappingURL=features.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"features.d.ts","sourceRoot":"","sources":["../src/features.ts"],"names":[],"mappings":"AAEA,oBAAY,WAAW;IACnB,OAAO,aAAa;IACpB,GAAG,QAAQ;IACX,MAAM,YAAY;IAClB,MAAM,UAAU;IAChB,cAAc,qBAAqB;CACtC"}
1
+ {"version":3,"file":"features.d.ts","sourceRoot":"","sources":["../src/features.ts"],"names":[],"mappings":"AAEA,oBAAY,UAAU;IAClB,OAAO,aAAa;IACpB,GAAG,QAAQ;IACX,MAAM,YAAY;IAClB,MAAM,UAAU;IAChB,cAAc,qBAAqB;IACnC,GAAG,QAAQ;IACX,OAAO,aAAa;IACpB,aAAa,gBAAgB;CAChC"}
package/esm/features.js CHANGED
@@ -1,11 +1,14 @@
1
- // The order follows
2
- // https://android.googlesource.com/platform/packages/modules/adb/+/79010dc6d5ca7490c493df800d4421730f5466ca/transport.cpp#1252
3
- export var AdbFeatures;
4
- (function (AdbFeatures) {
5
- AdbFeatures["ShellV2"] = "shell_v2";
6
- AdbFeatures["Cmd"] = "cmd";
7
- AdbFeatures["StatV2"] = "stat_v2";
8
- AdbFeatures["ListV2"] = "ls_v2";
9
- AdbFeatures["FixedPushMkdir"] = "fixed_push_mkdir";
10
- })(AdbFeatures = AdbFeatures || (AdbFeatures = {}));
1
+ // The order follows
2
+ // https://android.googlesource.com/platform/packages/modules/adb/+/79010dc6d5ca7490c493df800d4421730f5466ca/transport.cpp#1252
3
+ export var AdbFeature;
4
+ (function (AdbFeature) {
5
+ AdbFeature["ShellV2"] = "shell_v2";
6
+ AdbFeature["Cmd"] = "cmd";
7
+ AdbFeature["StatV2"] = "stat_v2";
8
+ AdbFeature["ListV2"] = "ls_v2";
9
+ AdbFeature["FixedPushMkdir"] = "fixed_push_mkdir";
10
+ AdbFeature["Abb"] = "abb";
11
+ AdbFeature["AbbExec"] = "abb_exec";
12
+ AdbFeature["SendReceiveV2"] = "sendrecv_v2";
13
+ })(AdbFeature = AdbFeature || (AdbFeature = {}));
11
14
  //# sourceMappingURL=features.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"features.js","sourceRoot":"","sources":["../src/features.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB,+HAA+H;AAC/H,MAAM,CAAN,IAAY,WAMX;AAND,WAAY,WAAW;IACnB,mCAAoB,CAAA;IACpB,0BAAW,CAAA;IACX,iCAAkB,CAAA;IAClB,+BAAgB,CAAA;IAChB,kDAAmC,CAAA;AACvC,CAAC,EANW,WAAW,GAAX,WAAW,KAAX,WAAW,QAMtB"}
1
+ {"version":3,"file":"features.js","sourceRoot":"","sources":["../src/features.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB,+HAA+H;AAC/H,MAAM,CAAN,IAAY,UASX;AATD,WAAY,UAAU;IAClB,kCAAoB,CAAA;IACpB,yBAAW,CAAA;IACX,gCAAkB,CAAA;IAClB,8BAAgB,CAAA;IAChB,iDAAmC,CAAA;IACnC,yBAAW,CAAA;IACX,kCAAoB,CAAA;IACpB,2CAA6B,CAAA;AACjC,CAAC,EATW,UAAU,GAAV,UAAU,KAAV,UAAU,QASrB"}
package/esm/index.d.ts CHANGED
@@ -1,10 +1,10 @@
1
- export * from './adb.js';
2
- export * from './auth.js';
3
- export * from './backend.js';
4
- export * from './commands/index.js';
5
- export * from './crypto.js';
6
- export * from './features.js';
7
- export * from './packet.js';
8
- export * from './socket/index.js';
9
- export * from './utils/index.js';
1
+ export * from "./adb.js";
2
+ export * from "./auth.js";
3
+ export * from "./backend.js";
4
+ export * from "./commands/index.js";
5
+ export * from "./crypto.js";
6
+ export * from "./features.js";
7
+ export * from "./packet.js";
8
+ export * from "./socket/index.js";
9
+ export * from "./utils/index.js";
10
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC"}
package/esm/index.js CHANGED
@@ -1,10 +1,10 @@
1
- export * from './adb.js';
2
- export * from './auth.js';
3
- export * from './backend.js';
4
- export * from './commands/index.js';
5
- export * from './crypto.js';
6
- export * from './features.js';
7
- export * from './packet.js';
8
- export * from './socket/index.js';
9
- export * from './utils/index.js';
1
+ export * from "./adb.js";
2
+ export * from "./auth.js";
3
+ export * from "./backend.js";
4
+ export * from "./commands/index.js";
5
+ export * from "./crypto.js";
6
+ export * from "./features.js";
7
+ export * from "./packet.js";
8
+ export * from "./socket/index.js";
9
+ export * from "./utils/index.js";
10
10
  //# sourceMappingURL=index.js.map
package/esm/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC"}