@yume-chan/adb 0.0.10 → 0.0.13

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 (342) hide show
  1. package/CHANGELOG.json +50 -0
  2. package/CHANGELOG.md +29 -1
  3. package/LICENSE +1 -1
  4. package/README.md +71 -51
  5. package/esm/adb.d.ts +48 -0
  6. package/esm/adb.d.ts.map +1 -0
  7. package/esm/adb.js +149 -136
  8. package/esm/adb.js.map +1 -1
  9. package/{dts → esm}/auth.d.ts +11 -11
  10. package/esm/auth.d.ts.map +1 -0
  11. package/esm/auth.js +72 -110
  12. package/esm/auth.js.map +1 -1
  13. package/esm/backend.d.ts +9 -0
  14. package/esm/backend.d.ts.map +1 -0
  15. package/{dts → esm}/commands/base.d.ts +1 -1
  16. package/esm/commands/base.d.ts.map +1 -0
  17. package/esm/commands/base.js +1 -0
  18. package/esm/commands/base.js.map +1 -1
  19. package/{dts → esm}/commands/framebuffer.d.ts +3 -3
  20. package/esm/commands/framebuffer.d.ts.map +1 -0
  21. package/esm/commands/framebuffer.js +15 -18
  22. package/esm/commands/framebuffer.js.map +1 -1
  23. package/esm/commands/index.d.ts +9 -0
  24. package/esm/commands/index.d.ts.map +1 -0
  25. package/esm/commands/index.js +8 -8
  26. package/esm/commands/index.js.map +1 -1
  27. package/esm/commands/install.d.ts +4 -0
  28. package/esm/commands/install.d.ts.map +1 -0
  29. package/esm/commands/install.js +19 -13
  30. package/esm/commands/install.js.map +1 -1
  31. package/esm/commands/power.d.ts +23 -0
  32. package/esm/commands/power.d.ts.map +1 -0
  33. package/esm/commands/power.js +45 -0
  34. package/esm/commands/power.js.map +1 -0
  35. package/{dts → esm}/commands/reverse.d.ts +3 -3
  36. package/esm/commands/reverse.d.ts.map +1 -0
  37. package/esm/commands/reverse.js +49 -60
  38. package/esm/commands/reverse.js.map +1 -1
  39. package/esm/commands/subprocess/index.d.ts +56 -0
  40. package/esm/commands/subprocess/index.d.ts.map +1 -0
  41. package/esm/commands/subprocess/index.js +88 -0
  42. package/esm/commands/subprocess/index.js.map +1 -0
  43. package/esm/commands/subprocess/legacy.d.ts +35 -0
  44. package/esm/commands/subprocess/legacy.d.ts.map +1 -0
  45. package/esm/commands/subprocess/legacy.js +53 -0
  46. package/esm/commands/subprocess/legacy.js.map +1 -0
  47. package/esm/commands/subprocess/protocol.d.ts +39 -0
  48. package/esm/commands/subprocess/protocol.d.ts.map +1 -0
  49. package/esm/commands/subprocess/protocol.js +157 -0
  50. package/esm/commands/subprocess/protocol.js.map +1 -0
  51. package/esm/commands/subprocess/protocols/index.d.ts +4 -0
  52. package/esm/commands/subprocess/protocols/index.d.ts.map +1 -0
  53. package/esm/commands/subprocess/protocols/index.js +4 -0
  54. package/esm/commands/subprocess/protocols/index.js.map +1 -0
  55. package/esm/commands/subprocess/protocols/none.d.ts +35 -0
  56. package/esm/commands/subprocess/protocols/none.d.ts.map +1 -0
  57. package/esm/commands/subprocess/protocols/none.js +53 -0
  58. package/esm/commands/subprocess/protocols/none.js.map +1 -0
  59. package/esm/commands/subprocess/protocols/shell.d.ts +39 -0
  60. package/esm/commands/subprocess/protocols/shell.d.ts.map +1 -0
  61. package/esm/commands/subprocess/protocols/shell.js +155 -0
  62. package/esm/commands/subprocess/protocols/shell.js.map +1 -0
  63. package/esm/commands/subprocess/protocols/types.d.ts +50 -0
  64. package/esm/commands/subprocess/protocols/types.d.ts.map +1 -0
  65. package/esm/commands/{shell → subprocess/protocols}/types.js +0 -0
  66. package/esm/commands/subprocess/protocols/types.js.map +1 -0
  67. package/esm/commands/subprocess/types.d.ts +50 -0
  68. package/esm/commands/subprocess/types.d.ts.map +1 -0
  69. package/esm/commands/subprocess/types.js +2 -0
  70. package/esm/commands/{shell → subprocess}/types.js.map +1 -1
  71. package/{dts/commands/shell → esm/commands/subprocess}/utils.d.ts +0 -0
  72. package/esm/commands/subprocess/utils.d.ts.map +1 -0
  73. package/esm/commands/{shell → subprocess}/utils.js +0 -0
  74. package/esm/commands/subprocess/utils.js.map +1 -0
  75. package/esm/commands/sync/index.d.ts +8 -0
  76. package/esm/commands/sync/index.d.ts.map +1 -0
  77. package/esm/commands/sync/index.js +7 -7
  78. package/esm/commands/sync/index.js.map +1 -1
  79. package/esm/commands/sync/list.d.ts +41 -0
  80. package/esm/commands/sync/list.d.ts.map +1 -0
  81. package/esm/commands/sync/list.js +52 -20
  82. package/esm/commands/sync/list.js.map +1 -1
  83. package/esm/commands/sync/pull.d.ts +11 -0
  84. package/esm/commands/sync/pull.d.ts.map +1 -0
  85. package/esm/commands/sync/pull.js +17 -11
  86. package/esm/commands/sync/pull.js.map +1 -1
  87. package/esm/commands/sync/push.d.ts +8 -0
  88. package/esm/commands/sync/push.d.ts.map +1 -0
  89. package/esm/commands/sync/push.js +19 -37
  90. package/esm/commands/sync/push.js.map +1 -1
  91. package/{dts → esm}/commands/sync/request.d.ts +4 -3
  92. package/esm/commands/sync/request.d.ts.map +1 -0
  93. package/esm/commands/sync/request.js +25 -27
  94. package/esm/commands/sync/request.js.map +1 -1
  95. package/{dts → esm}/commands/sync/response.d.ts +4 -3
  96. package/esm/commands/sync/response.d.ts.map +1 -0
  97. package/esm/commands/sync/response.js +17 -20
  98. package/esm/commands/sync/response.js.map +1 -1
  99. package/{dts → esm}/commands/sync/stat.d.ts +16 -4
  100. package/esm/commands/sync/stat.d.ts.map +1 -0
  101. package/esm/commands/sync/stat.js +38 -30
  102. package/esm/commands/sync/stat.js.map +1 -1
  103. package/esm/commands/sync/sync.d.ts +61 -0
  104. package/esm/commands/sync/sync.d.ts.map +1 -0
  105. package/esm/commands/sync/sync.js +122 -89
  106. package/esm/commands/sync/sync.js.map +1 -1
  107. package/{dts → esm}/commands/tcpip.d.ts +1 -1
  108. package/{dts → esm}/commands/tcpip.d.ts.map +1 -1
  109. package/esm/commands/tcpip.js +14 -19
  110. package/esm/commands/tcpip.js.map +1 -1
  111. package/esm/crypto.d.ts +37 -0
  112. package/esm/crypto.d.ts.map +1 -0
  113. package/esm/crypto.js +77 -62
  114. package/esm/crypto.js.map +1 -1
  115. package/esm/features.d.ts +8 -0
  116. package/esm/features.d.ts.map +1 -0
  117. package/esm/features.js +7 -3
  118. package/esm/features.js.map +1 -1
  119. package/esm/index.d.ts +11 -0
  120. package/esm/index.d.ts.map +1 -0
  121. package/esm/index.js +10 -10
  122. package/esm/index.js.map +1 -1
  123. package/esm/packet.d.ts +47 -0
  124. package/esm/packet.d.ts.map +1 -0
  125. package/esm/packet.js +27 -52
  126. package/esm/packet.js.map +1 -1
  127. package/esm/socket/controller.d.ts +37 -0
  128. package/esm/socket/controller.d.ts.map +1 -0
  129. package/esm/socket/controller.js +52 -66
  130. package/esm/socket/controller.js.map +1 -1
  131. package/esm/socket/dispatcher.d.ts +44 -0
  132. package/esm/socket/dispatcher.d.ts.map +1 -0
  133. package/esm/socket/dispatcher.js +146 -165
  134. package/esm/socket/dispatcher.js.map +1 -1
  135. package/esm/socket/index.d.ts +3 -0
  136. package/esm/socket/index.d.ts.map +1 -0
  137. package/esm/socket/index.js +2 -6
  138. package/esm/socket/index.js.map +1 -1
  139. package/esm/socket/socket.d.ts +46 -0
  140. package/esm/socket/socket.d.ts.map +1 -0
  141. package/esm/socket/socket.js +77 -13
  142. package/esm/socket/socket.js.map +1 -1
  143. package/esm/stream/buffered.d.ts +35 -0
  144. package/esm/stream/buffered.d.ts.map +1 -0
  145. package/esm/stream/buffered.js +123 -0
  146. package/esm/stream/buffered.js.map +1 -0
  147. package/esm/stream/detect.bak.d.ts +240 -0
  148. package/esm/stream/detect.bak.d.ts.map +1 -0
  149. package/esm/stream/detect.bak.js +60 -0
  150. package/esm/stream/detect.bak.js.map +1 -0
  151. package/esm/stream/detect.d.ts +2 -0
  152. package/esm/stream/detect.d.ts.map +1 -0
  153. package/esm/stream/detect.js +5 -0
  154. package/esm/stream/detect.js.map +1 -0
  155. package/esm/stream/detect.native.d.ts +240 -0
  156. package/esm/stream/detect.native.d.ts.map +1 -0
  157. package/esm/stream/detect.native.js +60 -0
  158. package/esm/stream/detect.native.js.map +1 -0
  159. package/esm/stream/detect.polyfill.d.ts +18 -0
  160. package/esm/stream/detect.polyfill.d.ts.map +1 -0
  161. package/esm/stream/detect.polyfill.js +9 -0
  162. package/esm/stream/detect.polyfill.js.map +1 -0
  163. package/esm/stream/index.d.ts +4 -0
  164. package/esm/stream/index.d.ts.map +1 -0
  165. package/esm/stream/index.js +3 -2
  166. package/esm/stream/index.js.map +1 -1
  167. package/esm/stream/transform.d.ts +98 -0
  168. package/esm/stream/transform.d.ts.map +1 -0
  169. package/esm/stream/transform.js +402 -0
  170. package/esm/stream/transform.js.map +1 -0
  171. package/{dts → esm}/utils/auto-reset-event.d.ts +1 -1
  172. package/esm/utils/auto-reset-event.d.ts.map +1 -0
  173. package/esm/utils/auto-reset-event.js +2 -1
  174. package/esm/utils/auto-reset-event.js.map +1 -1
  175. package/esm/utils/base64.d.ts +5 -0
  176. package/esm/utils/base64.d.ts.map +1 -0
  177. package/esm/utils/base64.js +116 -80
  178. package/esm/utils/base64.js.map +1 -1
  179. package/esm/utils/encoding.d.ts +3 -0
  180. package/esm/utils/encoding.d.ts.map +1 -0
  181. package/esm/utils/encoding.js +1 -1
  182. package/esm/utils/encoding.js.map +1 -1
  183. package/esm/utils/index.d.ts +4 -0
  184. package/esm/utils/index.d.ts.map +1 -0
  185. package/esm/utils/index.js +3 -5
  186. package/esm/utils/index.js.map +1 -1
  187. package/package.json +50 -44
  188. package/src/adb.ts +177 -150
  189. package/src/auth.ts +37 -30
  190. package/src/backend.ts +3 -12
  191. package/src/commands/base.ts +1 -1
  192. package/src/commands/framebuffer.ts +4 -4
  193. package/src/commands/index.ts +8 -8
  194. package/src/commands/install.ts +24 -15
  195. package/src/commands/power.ts +54 -0
  196. package/src/commands/reverse.ts +10 -8
  197. package/src/commands/subprocess/index.ts +139 -0
  198. package/src/commands/subprocess/protocols/index.ts +3 -0
  199. package/src/commands/subprocess/protocols/none.ts +68 -0
  200. package/src/commands/subprocess/protocols/shell.ts +190 -0
  201. package/src/commands/subprocess/protocols/types.ts +59 -0
  202. package/src/commands/{shell → subprocess}/utils.ts +0 -0
  203. package/src/commands/sync/index.ts +7 -7
  204. package/src/commands/sync/list.ts +56 -9
  205. package/src/commands/sync/pull.ts +27 -18
  206. package/src/commands/sync/push.ts +25 -30
  207. package/src/commands/sync/request.ts +8 -7
  208. package/src/commands/sync/response.ts +12 -6
  209. package/src/commands/sync/stat.ts +43 -14
  210. package/src/commands/sync/sync.ts +102 -34
  211. package/src/commands/tcpip.ts +3 -3
  212. package/src/crypto.ts +95 -84
  213. package/src/features.ts +6 -2
  214. package/src/index.ts +11 -10
  215. package/src/packet.ts +49 -53
  216. package/src/socket/dispatcher.ts +110 -109
  217. package/src/socket/index.ts +2 -6
  218. package/src/socket/socket.ts +125 -17
  219. package/src/stream/buffered.ts +147 -0
  220. package/src/stream/detect.native.ts +362 -0
  221. package/src/stream/detect.polyfill.ts +28 -0
  222. package/src/stream/detect.ts +5 -0
  223. package/src/stream/index.ts +3 -2
  224. package/src/stream/transform.ts +483 -0
  225. package/src/utils/auto-reset-event.ts +1 -1
  226. package/src/utils/base64.ts +161 -129
  227. package/src/utils/index.ts +3 -5
  228. package/tsconfig.build.json +3 -0
  229. package/tsconfig.build.tsbuildinfo +1 -0
  230. package/tsconfig.test.json +10 -0
  231. package/dts/adb.d.ts +0 -46
  232. package/dts/adb.d.ts.map +0 -1
  233. package/dts/auth.d.ts.map +0 -1
  234. package/dts/backend.d.ts +0 -13
  235. package/dts/backend.d.ts.map +0 -1
  236. package/dts/commands/base.d.ts.map +0 -1
  237. package/dts/commands/demo-mode.d.ts +0 -41
  238. package/dts/commands/demo-mode.d.ts.map +0 -1
  239. package/dts/commands/framebuffer.d.ts.map +0 -1
  240. package/dts/commands/index.d.ts +0 -9
  241. package/dts/commands/index.d.ts.map +0 -1
  242. package/dts/commands/install.d.ts +0 -3
  243. package/dts/commands/install.d.ts.map +0 -1
  244. package/dts/commands/reverse.d.ts.map +0 -1
  245. package/dts/commands/shell/index.d.ts +0 -46
  246. package/dts/commands/shell/index.d.ts.map +0 -1
  247. package/dts/commands/shell/legacy.d.ts +0 -38
  248. package/dts/commands/shell/legacy.d.ts.map +0 -1
  249. package/dts/commands/shell/protocol.d.ts +0 -45
  250. package/dts/commands/shell/protocol.d.ts.map +0 -1
  251. package/dts/commands/shell/types.d.ts +0 -47
  252. package/dts/commands/shell/types.d.ts.map +0 -1
  253. package/dts/commands/shell/utils.d.ts.map +0 -1
  254. package/dts/commands/sync/index.d.ts +0 -8
  255. package/dts/commands/sync/index.d.ts.map +0 -1
  256. package/dts/commands/sync/list.d.ts +0 -17
  257. package/dts/commands/sync/list.d.ts.map +0 -1
  258. package/dts/commands/sync/pull.d.ts +0 -11
  259. package/dts/commands/sync/pull.d.ts.map +0 -1
  260. package/dts/commands/sync/push.d.ts +0 -8
  261. package/dts/commands/sync/push.d.ts.map +0 -1
  262. package/dts/commands/sync/request.d.ts.map +0 -1
  263. package/dts/commands/sync/response.d.ts.map +0 -1
  264. package/dts/commands/sync/stat.d.ts.map +0 -1
  265. package/dts/commands/sync/sync.d.ts +0 -68
  266. package/dts/commands/sync/sync.d.ts.map +0 -1
  267. package/dts/crypto.d.ts +0 -24
  268. package/dts/crypto.d.ts.map +0 -1
  269. package/dts/features.d.ts +0 -6
  270. package/dts/features.d.ts.map +0 -1
  271. package/dts/index.d.ts +0 -11
  272. package/dts/index.d.ts.map +0 -1
  273. package/dts/packet.d.ts +0 -27
  274. package/dts/packet.d.ts.map +0 -1
  275. package/dts/socket/close-event-emitter.d.ts +0 -8
  276. package/dts/socket/close-event-emitter.d.ts.map +0 -1
  277. package/dts/socket/controller.d.ts +0 -43
  278. package/dts/socket/controller.d.ts.map +0 -1
  279. package/dts/socket/data-event-emitter.d.ts +0 -10
  280. package/dts/socket/data-event-emitter.d.ts.map +0 -1
  281. package/dts/socket/dispatcher.d.ts +0 -53
  282. package/dts/socket/dispatcher.d.ts.map +0 -1
  283. package/dts/socket/index.d.ts +0 -7
  284. package/dts/socket/index.d.ts.map +0 -1
  285. package/dts/socket/logger.d.ts +0 -9
  286. package/dts/socket/logger.d.ts.map +0 -1
  287. package/dts/socket/socket.d.ts +0 -22
  288. package/dts/socket/socket.d.ts.map +0 -1
  289. package/dts/stream/buffered-stream.d.ts +0 -28
  290. package/dts/stream/buffered-stream.d.ts.map +0 -1
  291. package/dts/stream/index.d.ts +0 -3
  292. package/dts/stream/index.d.ts.map +0 -1
  293. package/dts/stream/stream.d.ts +0 -15
  294. package/dts/stream/stream.d.ts.map +0 -1
  295. package/dts/utils/auto-reset-event.d.ts.map +0 -1
  296. package/dts/utils/base64.d.ts +0 -7
  297. package/dts/utils/base64.d.ts.map +0 -1
  298. package/dts/utils/chunk.d.ts +0 -3
  299. package/dts/utils/chunk.d.ts.map +0 -1
  300. package/dts/utils/encoding.d.ts +0 -3
  301. package/dts/utils/encoding.d.ts.map +0 -1
  302. package/dts/utils/event-queue.d.ts +0 -35
  303. package/dts/utils/event-queue.d.ts.map +0 -1
  304. package/dts/utils/index.d.ts +0 -6
  305. package/dts/utils/index.d.ts.map +0 -1
  306. package/esm/commands/demo-mode.js +0 -170
  307. package/esm/commands/demo-mode.js.map +0 -1
  308. package/esm/commands/shell/index.js +0 -62
  309. package/esm/commands/shell/index.js.map +0 -1
  310. package/esm/commands/shell/legacy.js +0 -49
  311. package/esm/commands/shell/legacy.js.map +0 -1
  312. package/esm/commands/shell/protocol.js +0 -106
  313. package/esm/commands/shell/protocol.js.map +0 -1
  314. package/esm/commands/shell/utils.js.map +0 -1
  315. package/esm/socket/close-event-emitter.js +0 -28
  316. package/esm/socket/close-event-emitter.js.map +0 -1
  317. package/esm/socket/data-event-emitter.js +0 -25
  318. package/esm/socket/data-event-emitter.js.map +0 -1
  319. package/esm/socket/logger.js +0 -2
  320. package/esm/socket/logger.js.map +0 -1
  321. package/esm/stream/buffered-stream.js +0 -67
  322. package/esm/stream/buffered-stream.js.map +0 -1
  323. package/esm/stream/stream.js +0 -41
  324. package/esm/stream/stream.js.map +0 -1
  325. package/esm/utils/chunk.js +0 -70
  326. package/esm/utils/chunk.js.map +0 -1
  327. package/esm/utils/event-queue.js +0 -104
  328. package/esm/utils/event-queue.js.map +0 -1
  329. package/src/commands/demo-mode.ts +0 -160
  330. package/src/commands/shell/index.ts +0 -87
  331. package/src/commands/shell/legacy.ts +0 -59
  332. package/src/commands/shell/protocol.ts +0 -121
  333. package/src/commands/shell/types.ts +0 -55
  334. package/src/socket/close-event-emitter.ts +0 -28
  335. package/src/socket/controller.ts +0 -105
  336. package/src/socket/data-event-emitter.ts +0 -27
  337. package/src/socket/logger.ts +0 -12
  338. package/src/stream/buffered-stream.ts +0 -92
  339. package/src/stream/stream.ts +0 -50
  340. package/src/utils/chunk.ts +0 -70
  341. package/src/utils/encoding.ts +0 -13
  342. package/src/utils/event-queue.ts +0 -145
@@ -1,114 +1,147 @@
1
- import { __asyncDelegator, __asyncGenerator, __asyncValues, __await, __awaiter } from "tslib";
2
1
  import { AutoDisposable } from '@yume-chan/event';
3
- import { AdbFeatures } from '../../features';
4
- import { AdbBufferedStream } from '../../stream';
5
- import { AutoResetEvent } from '../../utils';
6
- import { adbSyncOpenDir } from './list';
7
- import { adbSyncPull } from './pull';
8
- import { adbSyncPush } from './push';
9
- import { adbSyncLstat, adbSyncStat } from './stat';
2
+ import { AdbFeatures } from '../../features.js';
3
+ import { AdbBufferedStream, WrapReadableStream, WrapWritableStream } from '../../stream/index.js';
4
+ import { AutoResetEvent } from '../../utils/index.js';
5
+ import { escapeArg } from "../index.js";
6
+ import { adbSyncOpenDir } from './list.js';
7
+ import { adbSyncPull } from './pull.js';
8
+ import { adbSyncPush } from './push.js';
9
+ import { adbSyncLstat, adbSyncStat } from './stat.js';
10
+ /**
11
+ * A simplified `dirname` function that only handles absolute unix paths.
12
+ * @param path an absolute unix path
13
+ * @returns the directory name of the input path
14
+ */
15
+ export function dirname(path) {
16
+ const end = path.lastIndexOf('/');
17
+ if (end === -1) {
18
+ throw new Error(`Invalid path`);
19
+ }
20
+ if (end === 0) {
21
+ return '/';
22
+ }
23
+ return path.substring(0, end);
24
+ }
10
25
  export class AdbSync extends AutoDisposable {
26
+ adb;
27
+ stream;
28
+ writer;
29
+ sendLock = this.addDisposable(new AutoResetEvent());
30
+ get supportsStat() {
31
+ return this.adb.features.includes(AdbFeatures.StatV2);
32
+ }
33
+ get supportsList2() {
34
+ return this.adb.features.includes(AdbFeatures.ListV2);
35
+ }
36
+ get fixedPushMkdir() {
37
+ return this.adb.features.includes(AdbFeatures.FixedPushMkdir);
38
+ }
39
+ get needPushMkdirWorkaround() {
40
+ // https://android.googlesource.com/platform/packages/modules/adb/+/91768a57b7138166e0a3d11f79cd55909dda7014/client/file_sync_client.cpp#1361
41
+ return this.adb.features.includes(AdbFeatures.ShellV2) && !this.fixedPushMkdir;
42
+ }
11
43
  constructor(adb, socket) {
12
44
  super();
13
- this.sendLock = this.addDisposable(new AutoResetEvent());
14
45
  this.adb = adb;
15
46
  this.stream = new AdbBufferedStream(socket);
47
+ this.writer = socket.writable.getWriter();
16
48
  }
17
- get supportsStat() {
18
- return this.adb.features.includes(AdbFeatures.StatV2);
49
+ async lstat(path) {
50
+ await this.sendLock.wait();
51
+ try {
52
+ return adbSyncLstat(this.stream, this.writer, path, this.supportsStat);
53
+ }
54
+ finally {
55
+ this.sendLock.notify();
56
+ }
19
57
  }
20
- lstat(path) {
21
- return __awaiter(this, void 0, void 0, function* () {
22
- yield this.sendLock.wait();
23
- try {
24
- return adbSyncLstat(this.stream, path, this.supportsStat);
25
- }
26
- finally {
27
- this.sendLock.notify();
28
- }
29
- });
58
+ async stat(path) {
59
+ if (!this.supportsStat) {
60
+ throw new Error('Not supported');
61
+ }
62
+ await this.sendLock.wait();
63
+ try {
64
+ return adbSyncStat(this.stream, this.writer, path);
65
+ }
66
+ finally {
67
+ this.sendLock.notify();
68
+ }
30
69
  }
31
- stat(path) {
32
- return __awaiter(this, void 0, void 0, function* () {
33
- if (!this.supportsStat) {
34
- throw new Error('Not supported');
35
- }
36
- yield this.sendLock.wait();
37
- try {
38
- return adbSyncStat(this.stream, path);
39
- }
40
- finally {
41
- this.sendLock.notify();
42
- }
43
- });
44
- }
45
- isDirectory(path) {
46
- return __awaiter(this, void 0, void 0, function* () {
47
- try {
48
- yield this.lstat(path + '/');
49
- return true;
50
- }
51
- catch (e) {
52
- return false;
53
- }
54
- });
70
+ async isDirectory(path) {
71
+ try {
72
+ await this.lstat(path + '/');
73
+ return true;
74
+ }
75
+ catch (e) {
76
+ return false;
77
+ }
55
78
  }
56
- opendir(path) {
57
- return __asyncGenerator(this, arguments, function* opendir_1() {
58
- yield __await(this.sendLock.wait());
59
- try {
60
- yield __await(yield* __asyncDelegator(__asyncValues(adbSyncOpenDir(this.stream, path))));
61
- }
62
- finally {
63
- this.sendLock.notify();
64
- }
65
- });
79
+ async *opendir(path) {
80
+ await this.sendLock.wait();
81
+ try {
82
+ yield* adbSyncOpenDir(this.stream, this.writer, path, this.supportsList2);
83
+ }
84
+ finally {
85
+ this.sendLock.notify();
86
+ }
66
87
  }
67
- readdir(path) {
68
- var e_1, _a;
69
- return __awaiter(this, void 0, void 0, function* () {
70
- const results = [];
71
- try {
72
- for (var _b = __asyncValues(this.opendir(path)), _c; _c = yield _b.next(), !_c.done;) {
73
- const entry = _c.value;
74
- results.push(entry);
75
- }
76
- }
77
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
78
- finally {
79
- try {
80
- if (_c && !_c.done && (_a = _b.return)) yield _a.call(_b);
81
- }
82
- finally { if (e_1) throw e_1.error; }
83
- }
84
- return results;
85
- });
88
+ async readdir(path) {
89
+ const results = [];
90
+ for await (const entry of this.opendir(path)) {
91
+ results.push(entry);
92
+ }
93
+ return results;
86
94
  }
95
+ /**
96
+ * Read the content of a file on device.
97
+ *
98
+ * @param filename The full path of the file on device to read.
99
+ * @returns A `ReadableStream` that reads from the file.
100
+ */
87
101
  read(filename) {
88
- return __asyncGenerator(this, arguments, function* read_1() {
89
- yield __await(this.sendLock.wait());
90
- try {
91
- yield __await(yield* __asyncDelegator(__asyncValues(adbSyncPull(this.stream, filename))));
92
- }
93
- finally {
102
+ return new WrapReadableStream({
103
+ start: async () => {
104
+ await this.sendLock.wait();
105
+ return adbSyncPull(this.stream, this.writer, filename);
106
+ },
107
+ close: async () => {
94
108
  this.sendLock.notify();
95
- }
109
+ },
96
110
  });
97
111
  }
98
- write(filename, content, mode, mtime, onProgress) {
99
- return __awaiter(this, void 0, void 0, function* () {
100
- yield this.sendLock.wait();
101
- try {
102
- yield adbSyncPush(this.stream, filename, content, mode, mtime, undefined, onProgress);
103
- }
104
- finally {
112
+ /**
113
+ * Write (or overwrite) a file on device.
114
+ *
115
+ * @param filename The full path of the file on device to write.
116
+ * @param mode The unix permissions of the file.
117
+ * @param mtime The modified time of the file.
118
+ * @returns A `WritableStream` that writes to the file.
119
+ */
120
+ write(filename, mode, mtime) {
121
+ return new WrapWritableStream({
122
+ start: async () => {
123
+ await this.sendLock.wait();
124
+ if (this.needPushMkdirWorkaround) {
125
+ // It may fail if the path is already existed.
126
+ // Ignore the result.
127
+ // TODO: sync: test this
128
+ await this.adb.subprocess.spawnAndWait([
129
+ 'mkdir',
130
+ '-p',
131
+ escapeArg(dirname(filename)),
132
+ ]);
133
+ }
134
+ return adbSyncPush(this.stream, this.writer, filename, mode, mtime);
135
+ },
136
+ close: async () => {
105
137
  this.sendLock.notify();
106
138
  }
107
139
  });
108
140
  }
109
- dispose() {
141
+ async dispose() {
110
142
  super.dispose();
111
143
  this.stream.close();
144
+ await this.writer.close();
112
145
  }
113
146
  }
114
147
  //# sourceMappingURL=sync.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../../src/commands/sync/sync.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../../src/commands/sync/sync.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { AdbCommandBase } from './base';
1
+ import { AdbCommandBase } from './base.js';
2
2
  export declare class AdbTcpIpCommand extends AdbCommandBase {
3
3
  setPort(port: number): Promise<void>;
4
4
  disable(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"tcpip.d.ts","sourceRoot":"","sources":["../../src/commands/tcpip.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAExC,qBAAa,eAAgB,SAAQ,cAAc;IAClC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWpC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAMxC"}
1
+ {"version":3,"file":"tcpip.d.ts","sourceRoot":"","sources":["../../src/commands/tcpip.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE3C,qBAAa,eAAgB,SAAQ,cAAc;IAClC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWpC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAMxC"}
@@ -1,24 +1,19 @@
1
- import { __awaiter } from "tslib";
2
- import { AdbCommandBase } from './base';
1
+ import { AdbCommandBase } from './base.js';
3
2
  export class AdbTcpIpCommand extends AdbCommandBase {
4
- setPort(port) {
5
- return __awaiter(this, void 0, void 0, function* () {
6
- if (port <= 0) {
7
- throw new Error(`Invalid port ${port}`);
8
- }
9
- const output = yield this.adb.createSocketAndReadAll(`tcpip:${port}`);
10
- if (output !== `restarting in TCP mode port: ${port}\n`) {
11
- throw new Error('Invalid response');
12
- }
13
- });
3
+ async setPort(port) {
4
+ if (port <= 0) {
5
+ throw new Error(`Invalid port ${port}`);
6
+ }
7
+ const output = await this.adb.createSocketAndWait(`tcpip:${port}`);
8
+ if (output !== `restarting in TCP mode port: ${port}\n`) {
9
+ throw new Error('Invalid response');
10
+ }
14
11
  }
15
- disable() {
16
- return __awaiter(this, void 0, void 0, function* () {
17
- const output = yield this.adb.createSocketAndReadAll('usb:');
18
- if (output !== 'restarting in USB mode\n') {
19
- throw new Error('Invalid response');
20
- }
21
- });
12
+ async disable() {
13
+ const output = await this.adb.createSocketAndWait('usb:');
14
+ if (output !== 'restarting in USB mode\n') {
15
+ throw new Error('Invalid response');
16
+ }
22
17
  }
23
18
  }
24
19
  //# sourceMappingURL=tcpip.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tcpip.js","sourceRoot":"","sources":["../../src/commands/tcpip.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAExC,MAAM,OAAO,eAAgB,SAAQ,cAAc;IAClC,OAAO,CAAC,IAAY;;YAC7B,IAAI,IAAI,IAAI,CAAC,EAAE;gBACX,MAAM,IAAI,KAAK,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAC;aAC3C;YAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,sBAAsB,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;YACtE,IAAI,MAAM,KAAK,gCAAgC,IAAI,IAAI,EAAE;gBACrD,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;aACvC;QACL,CAAC;KAAA;IAEY,OAAO;;YAChB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;YAC7D,IAAI,MAAM,KAAK,0BAA0B,EAAE;gBACvC,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;aACvC;QACL,CAAC;KAAA;CACJ"}
1
+ {"version":3,"file":"tcpip.js","sourceRoot":"","sources":["../../src/commands/tcpip.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE3C,MAAM,OAAO,eAAgB,SAAQ,cAAc;IACxC,KAAK,CAAC,OAAO,CAAC,IAAY;QAC7B,IAAI,IAAI,IAAI,CAAC,EAAE;YACX,MAAM,IAAI,KAAK,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAC;SAC3C;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;QACnE,IAAI,MAAM,KAAK,gCAAgC,IAAI,IAAI,EAAE;YACrD,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;SACvC;IACL,CAAC;IAEM,KAAK,CAAC,OAAO;QAChB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;QAC1D,IAAI,MAAM,KAAK,0BAA0B,EAAE;YACvC,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;SACvC;IACL,CAAC;CACJ"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Gets the `BigInt` value at the specified byte offset and length from the start of the view. There is
3
+ * no alignment constraint; multi-byte values may be fetched from any offset.
4
+ *
5
+ * Only supports Big-Endian, because that's what ADB uses.
6
+ * @param byteOffset The place in the buffer at which the value should be retrieved.
7
+ */
8
+ export declare function getBigUint(dataView: DataView, byteOffset: number, length: number): bigint;
9
+ /**
10
+ * Stores an arbitrary-precision positive `BigInt` value at the specified byte offset from the start of the view.
11
+ * @param byteOffset The place in the buffer at which the value should be set.
12
+ * @param value The value to set.
13
+ * @param littleEndian If `false` or `undefined`, a big-endian value should be written,
14
+ * otherwise a little-endian value should be written.
15
+ */
16
+ export declare function setBigUint(dataView: DataView, byteOffset: number, value: bigint, littleEndian?: boolean): number;
17
+ export declare function parsePrivateKey(key: Uint8Array): [n: bigint, d: bigint];
18
+ export declare function modInverse(a: number, m: number): number;
19
+ export declare function calculatePublicKeyLength(): number;
20
+ export declare function calculatePublicKey(privateKey: Uint8Array): Uint8Array;
21
+ export declare function calculatePublicKey(privateKey: Uint8Array, output: Uint8Array): number;
22
+ /**
23
+ * Modular exponentiation.
24
+ *
25
+ * Calculate `(base ** exponent) % modulus` without actually calculating `(base ** exponent)`.
26
+ *
27
+ * See https://en.wikipedia.org/wiki/Modular_exponentiation#Implementation_in_Lua
28
+ */
29
+ export declare function powMod(base: bigint, exponent: bigint, modulus: bigint): bigint;
30
+ export declare const SHA1_DIGEST_LENGTH = 20;
31
+ export declare const ASN1_SEQUENCE = 48;
32
+ export declare const ASN1_OCTET_STRING = 4;
33
+ export declare const ASN1_NULL = 5;
34
+ export declare const ASN1_OID = 6;
35
+ export declare const SHA1_DIGEST_INFO: Uint8Array;
36
+ export declare function sign(privateKey: Uint8Array, data: Uint8Array): Uint8Array;
37
+ //# sourceMappingURL=crypto.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../src/crypto.ts"],"names":[],"mappings":"AAOA;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAazF;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,OAAO,UAyBvG;AA4BD,wBAAgB,eAAe,CAAC,GAAG,EAAE,UAAU,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,CAKvE;AAKD,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,UAsB9C;AAED,wBAAgB,wBAAwB,WAEvC;AAED,wBAAgB,kBAAkB,CAC9B,UAAU,EAAE,UAAU,GACvB,UAAU,CAAC;AACd,wBAAgB,kBAAkB,CAC9B,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,UAAU,GACnB,MAAM,CAAC;AAuEV;;;;;;GAMG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAkB9E;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,YAO3B,CAAC;AAQH,wBAAgB,IAAI,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,GAAG,UAAU,CAyCzE"}
package/esm/crypto.js CHANGED
@@ -1,38 +1,56 @@
1
+ import { getBigUint64, setBigUint64 } from '@yume-chan/dataview-bigint-polyfill/esm/fallback.js';
1
2
  const BigInt0 = BigInt(0);
2
3
  const BigInt1 = BigInt(1);
3
4
  const BigInt2 = BigInt(2);
4
- const BigInt2To64 = BigInt2 ** BigInt(64);
5
- export function getBig(buffer, offset = 0, length = buffer.byteLength - offset) {
6
- const view = new DataView(buffer);
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) {
7
14
  let result = BigInt0;
8
- // Now `length` must be a multiplication of 8
15
+ // Currently `length` must be a multiplication of 8
9
16
  // Support for arbitrary length can be easily added
10
- for (let i = offset; i < offset + length; i += 8) {
11
- result *= BigInt2To64;
12
- const value = view.getBigUint64(i, false);
17
+ for (let i = byteOffset; i < byteOffset + length; i += 8) {
18
+ result <<= BigInt64;
19
+ const value = getBigUint64(dataView, i, false);
13
20
  result += value;
14
21
  }
15
22
  return result;
16
23
  }
17
- export function setBig(buffer, value, offset = 0) {
18
- const uint64Array = [];
19
- while (value > BigInt0) {
20
- uint64Array.push(BigInt.asUintN(64, value));
21
- value /= BigInt2To64;
22
- }
23
- const view = new DataView(buffer);
24
- for (let i = uint64Array.length - 1; i >= 0; i -= 1) {
25
- view.setBigUint64(offset, uint64Array[i], false);
26
- offset += 8;
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
+ }
27
39
  }
28
- }
29
- export function setBigLE(buffer, value, offset = 0) {
30
- const view = new DataView(buffer);
31
- while (value > BigInt0) {
32
- view.setBigUint64(offset, value, true);
33
- offset += 8;
34
- value /= BigInt2To64;
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
+ }
35
52
  }
53
+ return byteOffset - start;
36
54
  }
37
55
  // These values are correct only if
38
56
  // modulus length is 2048 and
@@ -57,19 +75,15 @@ const RsaPrivateKeyNLength = 2048 / 8;
57
75
  const RsaPrivateKeyDOffset = 303;
58
76
  const RsaPrivateKeyDLength = 2048 / 8;
59
77
  export function parsePrivateKey(key) {
60
- let n = getBig(key, RsaPrivateKeyNOffset, RsaPrivateKeyNLength);
61
- let d = getBig(key, RsaPrivateKeyDOffset, RsaPrivateKeyDLength);
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);
62
81
  return [n, d];
63
82
  }
64
83
  // Taken from https://stackoverflow.com/a/51562038
65
84
  // I can't understand, but it does work
66
85
  // Only used with numbers less than 2^32 so doesn't need BigInt
67
86
  export function modInverse(a, m) {
68
- // validate inputs
69
- [a, m] = [Number(a), Number(m)];
70
- if (Number.isNaN(a) || Number.isNaN(m)) {
71
- return NaN; // invalid input
72
- }
73
87
  a = (a % m + m) % m;
74
88
  if (!a || m < 2) {
75
89
  return NaN; // invalid input
@@ -95,7 +109,7 @@ export function modInverse(a, m) {
95
109
  export function calculatePublicKeyLength() {
96
110
  return 4 + 4 + 2048 / 8 + 2048 / 8 + 4;
97
111
  }
98
- export function calculatePublicKey(privateKey, output, outputOffset = 0) {
112
+ export function calculatePublicKey(privateKey, output) {
99
113
  // Android has its own public key generation algorithm
100
114
  // See https://android.googlesource.com/platform/system/core.git/+/91784040db2b9273687f88d8b95f729d4a61ecc2/libcrypto_utils/android_pubkey.cpp#111
101
115
  // The public key is an array of
@@ -103,7 +117,7 @@ export function calculatePublicKey(privateKey, output, outputOffset = 0) {
103
117
  // [
104
118
  // modulusLengthInWords, // 32-bit integer, a "word" is 32-bit so it must be 2048 / 8 / 4
105
119
  // // Actually the comment in Android source code was wrong
106
- // n0inv, // 32-bit integer, the modular inverse of (lower 32 bits of) n
120
+ // n0inv, // 32-bit integer, the modular inverse of (low 32 bits of n)
107
121
  // modulus, // n
108
122
  // rr, // Montgomery parameter R^2
109
123
  // exponent, // 32-bit integer, must be 65537
@@ -116,16 +130,17 @@ export function calculatePublicKey(privateKey, output, outputOffset = 0) {
116
130
  let outputType;
117
131
  const outputLength = calculatePublicKeyLength();
118
132
  if (!output) {
119
- output = new ArrayBuffer(outputLength);
120
- outputType = 'ArrayBuffer';
133
+ output = new Uint8Array(outputLength);
134
+ outputType = 'Uint8Array';
121
135
  }
122
136
  else {
123
- if (output.byteLength - outputOffset < outputLength) {
137
+ if (output.byteLength < outputLength) {
124
138
  throw new Error('output buffer is too small');
125
139
  }
126
140
  outputType = 'number';
127
141
  }
128
- const outputView = new DataView(output);
142
+ const outputView = new DataView(output.buffer, output.byteOffset, output.byteLength);
143
+ let outputOffset = 0;
129
144
  // modulusLengthInWords
130
145
  outputView.setUint32(outputOffset, 2048 / 8 / 4, true);
131
146
  outputOffset += 4;
@@ -136,16 +151,15 @@ export function calculatePublicKey(privateKey, output, outputOffset = 0) {
136
151
  outputView.setUint32(outputOffset, n0inv, true);
137
152
  outputOffset += 4;
138
153
  // Write n
139
- setBigLE(output, n, outputOffset);
154
+ setBigUint(outputView, outputOffset, n, true);
140
155
  outputOffset += 256;
141
156
  // Calculate rr = (2^(rsa_size)) ^ 2 mod n
142
157
  let rr = BigInt(2) ** BigInt(4096) % n;
143
- setBigLE(output, rr, outputOffset);
144
- outputOffset += 256;
158
+ outputOffset += setBigUint(outputView, outputOffset, rr, true);
145
159
  // exponent
146
160
  outputView.setUint32(outputOffset, 65537, true);
147
161
  outputOffset += 4;
148
- if (outputType === 'ArrayBuffer') {
162
+ if (outputType === 'Uint8Array') {
149
163
  return output;
150
164
  }
151
165
  else {
@@ -174,20 +188,20 @@ export function powMod(base, exponent, modulus) {
174
188
  }
175
189
  return r;
176
190
  }
177
- export const Sha1DigestLength = 20;
178
- export const Asn1Sequence = 0x30;
179
- export const Asn1OctetString = 0x04;
180
- export const Asn1Null = 0x05;
181
- export const Asn1Oid = 0x06;
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;
182
196
  // PKCS#1 SHA-1 hash digest info
183
- export const Sha1DigestInfo = [
184
- Asn1Sequence, 0x0d + Sha1DigestLength,
185
- Asn1Sequence, 0x09,
197
+ export const SHA1_DIGEST_INFO = new Uint8Array([
198
+ ASN1_SEQUENCE, 0x0d + SHA1_DIGEST_LENGTH,
199
+ ASN1_SEQUENCE, 0x09,
186
200
  // SHA-1 (1 3 14 3 2 26)
187
- Asn1Oid, 0x05, 1 * 40 + 3, 14, 3, 2, 26,
188
- Asn1Null, 0x00,
189
- Asn1OctetString, Sha1DigestLength
190
- ];
201
+ ASN1_OID, 0x05, 1 * 40 + 3, 14, 3, 2, 26,
202
+ ASN1_NULL, 0x00,
203
+ ASN1_OCTET_STRING, SHA1_DIGEST_LENGTH
204
+ ]);
191
205
  // SubtleCrypto.sign() will hash the given data and sign the hash
192
206
  // But we don't need the hashing step
193
207
  // (In another word, ADB just requires the client to
@@ -203,22 +217,23 @@ export function sign(privateKey, data) {
203
217
  index += 1;
204
218
  padded[index] = 1;
205
219
  index += 1;
206
- const fillLength = padded.length - Sha1DigestInfo.length - data.byteLength - 1;
220
+ const fillLength = padded.length - SHA1_DIGEST_INFO.length - data.length - 1;
207
221
  while (index < fillLength) {
208
222
  padded[index] = 0xff;
209
223
  index += 1;
210
224
  }
211
225
  padded[index] = 0;
212
226
  index += 1;
213
- padded.set(new Uint8Array(Sha1DigestInfo), index);
214
- index += Sha1DigestInfo.length;
215
- padded.set(new Uint8Array(data), index);
227
+ padded.set(SHA1_DIGEST_INFO, index);
228
+ index += SHA1_DIGEST_INFO.length;
229
+ padded.set(data, index);
216
230
  // Encryption
217
231
  // signature = padded ** d % n
218
- let signature = powMod(getBig(padded.buffer), d, n);
219
- // Put into an ArrayBuffer
220
- const result = new ArrayBuffer(256);
221
- setBig(result, signature);
222
- return result;
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;
223
238
  }
224
239
  //# 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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"}