@yume-chan/adb 0.0.9 → 0.0.12

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 (407) hide show
  1. package/CHANGELOG.json +55 -0
  2. package/CHANGELOG.md +35 -0
  3. package/LICENSE +21 -21
  4. package/README.md +240 -257
  5. package/esm/adb.d.ts +48 -0
  6. package/esm/adb.d.ts.map +1 -0
  7. package/esm/adb.js +141 -145
  8. package/esm/adb.js.map +1 -1
  9. package/{dts → esm}/auth.d.ts +17 -7
  10. package/esm/auth.d.ts.map +1 -0
  11. package/esm/auth.js +69 -109
  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 +21 -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 +50 -60
  38. package/esm/commands/reverse.js.map +1 -1
  39. package/esm/commands/subprocess/index.d.ts +57 -0
  40. package/esm/commands/subprocess/index.d.ts.map +1 -0
  41. package/esm/commands/subprocess/index.js +83 -0
  42. package/esm/commands/subprocess/index.js.map +1 -0
  43. package/esm/commands/subprocess/legacy.d.ts +28 -0
  44. package/esm/commands/subprocess/legacy.d.ts.map +1 -0
  45. package/esm/commands/subprocess/legacy.js +44 -0
  46. package/esm/commands/subprocess/legacy.js.map +1 -0
  47. package/esm/commands/subprocess/protocol.d.ts +38 -0
  48. package/esm/commands/subprocess/protocol.d.ts.map +1 -0
  49. package/esm/commands/subprocess/protocol.js +155 -0
  50. package/esm/commands/subprocess/protocol.js.map +1 -0
  51. package/esm/commands/subprocess/types.d.ts +47 -0
  52. package/esm/commands/subprocess/types.d.ts.map +1 -0
  53. package/esm/commands/{shell → subprocess}/types.js +0 -0
  54. package/{cjs/commands/shell → esm/commands/subprocess}/types.js.map +1 -1
  55. package/{dts/commands/shell → esm/commands/subprocess}/utils.d.ts +0 -0
  56. package/esm/commands/subprocess/utils.d.ts.map +1 -0
  57. package/esm/commands/{shell → subprocess}/utils.js +0 -0
  58. package/esm/commands/subprocess/utils.js.map +1 -0
  59. package/esm/commands/sync/index.d.ts +8 -0
  60. package/esm/commands/sync/index.d.ts.map +1 -0
  61. package/esm/commands/sync/index.js +7 -7
  62. package/esm/commands/sync/index.js.map +1 -1
  63. package/{dts → esm}/commands/sync/list.d.ts +4 -4
  64. package/esm/commands/sync/list.d.ts.map +1 -0
  65. package/esm/commands/sync/list.js +16 -19
  66. package/esm/commands/sync/list.js.map +1 -1
  67. package/esm/commands/sync/pull.d.ts +11 -0
  68. package/esm/commands/sync/pull.d.ts.map +1 -0
  69. package/esm/commands/sync/pull.js +17 -11
  70. package/esm/commands/sync/pull.js.map +1 -1
  71. package/esm/commands/sync/push.d.ts +8 -0
  72. package/esm/commands/sync/push.d.ts.map +1 -0
  73. package/esm/commands/sync/push.js +19 -37
  74. package/esm/commands/sync/push.js.map +1 -1
  75. package/{dts → esm}/commands/sync/request.d.ts +3 -3
  76. package/esm/commands/sync/request.d.ts.map +1 -0
  77. package/esm/commands/sync/request.js +24 -26
  78. package/esm/commands/sync/request.js.map +1 -1
  79. package/{dts → esm}/commands/sync/response.d.ts +3 -3
  80. package/esm/commands/sync/response.d.ts.map +1 -0
  81. package/esm/commands/sync/response.js +16 -19
  82. package/esm/commands/sync/response.js.map +1 -1
  83. package/{dts → esm}/commands/sync/stat.d.ts +4 -4
  84. package/esm/commands/sync/stat.d.ts.map +1 -0
  85. package/esm/commands/sync/stat.js +22 -27
  86. package/esm/commands/sync/stat.js.map +1 -1
  87. package/esm/commands/sync/sync.d.ts +83 -0
  88. package/esm/commands/sync/sync.d.ts.map +1 -0
  89. package/esm/commands/sync/sync.js +92 -89
  90. package/esm/commands/sync/sync.js.map +1 -1
  91. package/{dts → esm}/commands/tcpip.d.ts +1 -1
  92. package/{dts → esm}/commands/tcpip.d.ts.map +1 -1
  93. package/esm/commands/tcpip.js +14 -19
  94. package/esm/commands/tcpip.js.map +1 -1
  95. package/esm/crypto.d.ts +24 -0
  96. package/esm/crypto.d.ts.map +1 -0
  97. package/esm/crypto.js +33 -31
  98. package/esm/crypto.js.map +1 -1
  99. package/{dts → esm}/features.d.ts +0 -0
  100. package/{dts → esm}/features.d.ts.map +0 -0
  101. package/esm/features.js +1 -1
  102. package/esm/features.js.map +1 -1
  103. package/esm/index.d.ts +11 -0
  104. package/esm/index.d.ts.map +1 -0
  105. package/esm/index.js +10 -10
  106. package/esm/index.js.map +1 -1
  107. package/esm/packet.d.ts +28 -0
  108. package/esm/packet.d.ts.map +1 -0
  109. package/esm/packet.js +26 -53
  110. package/esm/packet.js.map +1 -1
  111. package/esm/socket/controller.d.ts +37 -0
  112. package/esm/socket/controller.d.ts.map +1 -0
  113. package/esm/socket/controller.js +52 -66
  114. package/esm/socket/controller.js.map +1 -1
  115. package/{dts → esm}/socket/dispatcher.d.ts +10 -23
  116. package/esm/socket/dispatcher.d.ts.map +1 -0
  117. package/esm/socket/dispatcher.js +148 -164
  118. package/esm/socket/dispatcher.js.map +1 -1
  119. package/esm/socket/index.d.ts +3 -0
  120. package/esm/socket/index.d.ts.map +1 -0
  121. package/esm/socket/index.js +2 -6
  122. package/esm/socket/index.js.map +1 -1
  123. package/esm/socket/socket.d.ts +34 -0
  124. package/esm/socket/socket.d.ts.map +1 -0
  125. package/esm/socket/socket.js +69 -14
  126. package/esm/socket/socket.js.map +1 -1
  127. package/esm/stream/buffered.d.ts +35 -0
  128. package/esm/stream/buffered.d.ts.map +1 -0
  129. package/esm/stream/buffered.js +123 -0
  130. package/esm/stream/buffered.js.map +1 -0
  131. package/esm/stream/detect.bak.d.ts +240 -0
  132. package/esm/stream/detect.bak.d.ts.map +1 -0
  133. package/esm/stream/detect.bak.js +60 -0
  134. package/esm/stream/detect.bak.js.map +1 -0
  135. package/esm/stream/detect.d.ts +18 -0
  136. package/esm/stream/detect.d.ts.map +1 -0
  137. package/esm/stream/detect.js +6 -0
  138. package/esm/stream/detect.js.map +1 -0
  139. package/esm/stream/detect.native.d.ts +240 -0
  140. package/esm/stream/detect.native.d.ts.map +1 -0
  141. package/esm/stream/detect.native.js +60 -0
  142. package/esm/stream/detect.native.js.map +1 -0
  143. package/esm/stream/detect.polyfill.d.ts +18 -0
  144. package/esm/stream/detect.polyfill.d.ts.map +1 -0
  145. package/esm/stream/detect.polyfill.js +6 -0
  146. package/esm/stream/detect.polyfill.js.map +1 -0
  147. package/esm/stream/index.d.ts +4 -0
  148. package/esm/stream/index.d.ts.map +1 -0
  149. package/esm/stream/index.js +3 -2
  150. package/esm/stream/index.js.map +1 -1
  151. package/esm/stream/transform.d.ts +98 -0
  152. package/esm/stream/transform.d.ts.map +1 -0
  153. package/esm/stream/transform.js +352 -0
  154. package/esm/stream/transform.js.map +1 -0
  155. package/{dts → esm}/utils/auto-reset-event.d.ts +1 -1
  156. package/esm/utils/auto-reset-event.d.ts.map +1 -0
  157. package/esm/utils/auto-reset-event.js +2 -1
  158. package/esm/utils/auto-reset-event.js.map +1 -1
  159. package/esm/utils/base64.d.ts +5 -0
  160. package/esm/utils/base64.d.ts.map +1 -0
  161. package/esm/utils/base64.js +116 -80
  162. package/esm/utils/base64.js.map +1 -1
  163. package/esm/utils/encoding.d.ts +3 -0
  164. package/esm/utils/encoding.d.ts.map +1 -0
  165. package/esm/utils/encoding.js +11 -0
  166. package/esm/utils/encoding.js.map +1 -0
  167. package/esm/utils/index.d.ts +4 -0
  168. package/esm/utils/index.d.ts.map +1 -0
  169. package/esm/utils/index.js +3 -4
  170. package/esm/utils/index.js.map +1 -1
  171. package/package.json +49 -50
  172. package/src/adb.ts +247 -242
  173. package/src/auth.ts +170 -156
  174. package/src/backend.ts +11 -24
  175. package/src/commands/base.ts +11 -11
  176. package/src/commands/framebuffer.ts +73 -73
  177. package/src/commands/index.ts +8 -8
  178. package/src/commands/install.ts +32 -21
  179. package/src/commands/power.ts +54 -0
  180. package/src/commands/reverse.ts +136 -133
  181. package/src/commands/subprocess/index.ts +124 -0
  182. package/src/commands/subprocess/legacy.ts +58 -0
  183. package/src/commands/subprocess/protocol.ts +185 -0
  184. package/src/commands/subprocess/types.ts +55 -0
  185. package/src/commands/{shell → subprocess}/utils.ts +20 -20
  186. package/src/commands/sync/index.ts +7 -7
  187. package/src/commands/sync/list.ts +40 -39
  188. package/src/commands/sync/pull.ts +43 -34
  189. package/src/commands/sync/push.ts +41 -46
  190. package/src/commands/sync/request.ts +49 -48
  191. package/src/commands/sync/response.ts +58 -57
  192. package/src/commands/sync/stat.ts +123 -121
  193. package/src/commands/sync/sync.ts +145 -113
  194. package/src/commands/tcpip.ts +21 -21
  195. package/src/crypto.ts +280 -280
  196. package/src/features.ts +5 -5
  197. package/src/index.ts +11 -10
  198. package/src/packet.ts +69 -89
  199. package/src/socket/dispatcher.ts +256 -269
  200. package/src/socket/index.ts +2 -6
  201. package/src/socket/socket.ts +129 -28
  202. package/src/stream/buffered.ts +147 -0
  203. package/src/stream/detect.native.ts +362 -0
  204. package/src/stream/detect.polyfill.ts +25 -0
  205. package/src/stream/detect.ts +25 -0
  206. package/src/stream/index.ts +3 -2
  207. package/src/stream/transform.ts +427 -0
  208. package/src/utils/auto-reset-event.ts +41 -41
  209. package/src/utils/base64.ts +306 -274
  210. package/src/utils/encoding.ts +13 -0
  211. package/src/utils/index.ts +3 -4
  212. package/tsconfig.build.json +3 -0
  213. package/tsconfig.build.tsbuildinfo +1 -0
  214. package/tsconfig.test.json +10 -0
  215. package/cjs/adb.js +0 -205
  216. package/cjs/adb.js.map +0 -1
  217. package/cjs/auth.js +0 -141
  218. package/cjs/auth.js.map +0 -1
  219. package/cjs/backend.js +0 -3
  220. package/cjs/backend.js.map +0 -1
  221. package/cjs/commands/base.js +0 -12
  222. package/cjs/commands/base.js.map +0 -1
  223. package/cjs/commands/demo-mode.js +0 -174
  224. package/cjs/commands/demo-mode.js.map +0 -1
  225. package/cjs/commands/framebuffer.js +0 -66
  226. package/cjs/commands/framebuffer.js.map +0 -1
  227. package/cjs/commands/index.js +0 -12
  228. package/cjs/commands/index.js.map +0 -1
  229. package/cjs/commands/install.js +0 -20
  230. package/cjs/commands/install.js.map +0 -1
  231. package/cjs/commands/reverse.js +0 -105
  232. package/cjs/commands/reverse.js.map +0 -1
  233. package/cjs/commands/shell/index.js +0 -56
  234. package/cjs/commands/shell/index.js.map +0 -1
  235. package/cjs/commands/shell/legacy.js +0 -37
  236. package/cjs/commands/shell/legacy.js.map +0 -1
  237. package/cjs/commands/shell/protocol.js +0 -83
  238. package/cjs/commands/shell/protocol.js.map +0 -1
  239. package/cjs/commands/shell/types.js +0 -3
  240. package/cjs/commands/shell/utils.js +0 -23
  241. package/cjs/commands/shell/utils.js.map +0 -1
  242. package/cjs/commands/sync/index.js +0 -11
  243. package/cjs/commands/sync/index.js.map +0 -1
  244. package/cjs/commands/sync/list.js +0 -36
  245. package/cjs/commands/sync/list.js.map +0 -1
  246. package/cjs/commands/sync/pull.js +0 -34
  247. package/cjs/commands/sync/pull.js.map +0 -1
  248. package/cjs/commands/sync/push.js +0 -49
  249. package/cjs/commands/sync/push.js.map +0 -1
  250. package/cjs/commands/sync/request.js +0 -48
  251. package/cjs/commands/sync/request.js.map +0 -1
  252. package/cjs/commands/sync/response.js +0 -53
  253. package/cjs/commands/sync/response.js.map +0 -1
  254. package/cjs/commands/sync/stat.js +0 -109
  255. package/cjs/commands/sync/stat.js.map +0 -1
  256. package/cjs/commands/sync/sync.js +0 -118
  257. package/cjs/commands/sync/sync.js.map +0 -1
  258. package/cjs/commands/tcpip.js +0 -28
  259. package/cjs/commands/tcpip.js.map +0 -1
  260. package/cjs/crypto.js +0 -231
  261. package/cjs/crypto.js.map +0 -1
  262. package/cjs/features.js +0 -10
  263. package/cjs/features.js.map +0 -1
  264. package/cjs/index.js +0 -14
  265. package/cjs/index.js.map +0 -1
  266. package/cjs/packet.js +0 -77
  267. package/cjs/packet.js.map +0 -1
  268. package/cjs/socket/close-event-emitter.js +0 -32
  269. package/cjs/socket/close-event-emitter.js.map +0 -1
  270. package/cjs/socket/controller.js +0 -84
  271. package/cjs/socket/controller.js.map +0 -1
  272. package/cjs/socket/data-event-emitter.js +0 -29
  273. package/cjs/socket/data-event-emitter.js.map +0 -1
  274. package/cjs/socket/dispatcher.js +0 -219
  275. package/cjs/socket/dispatcher.js.map +0 -1
  276. package/cjs/socket/index.js +0 -10
  277. package/cjs/socket/index.js.map +0 -1
  278. package/cjs/socket/logger.js +0 -3
  279. package/cjs/socket/logger.js.map +0 -1
  280. package/cjs/socket/socket.js +0 -24
  281. package/cjs/socket/socket.js.map +0 -1
  282. package/cjs/stream/buffered-stream.js +0 -78
  283. package/cjs/stream/buffered-stream.js.map +0 -1
  284. package/cjs/stream/index.js +0 -6
  285. package/cjs/stream/index.js.map +0 -1
  286. package/cjs/stream/stream.js +0 -45
  287. package/cjs/stream/stream.js.map +0 -1
  288. package/cjs/utils/auto-reset-event.js +0 -37
  289. package/cjs/utils/auto-reset-event.js.map +0 -1
  290. package/cjs/utils/base64.js +0 -210
  291. package/cjs/utils/base64.js.map +0 -1
  292. package/cjs/utils/chunk.js +0 -75
  293. package/cjs/utils/chunk.js.map +0 -1
  294. package/cjs/utils/event-queue.js +0 -108
  295. package/cjs/utils/event-queue.js.map +0 -1
  296. package/cjs/utils/index.js +0 -8
  297. package/cjs/utils/index.js.map +0 -1
  298. package/dts/adb.d.ts +0 -46
  299. package/dts/adb.d.ts.map +0 -1
  300. package/dts/auth.d.ts.map +0 -1
  301. package/dts/backend.d.ts +0 -15
  302. package/dts/backend.d.ts.map +0 -1
  303. package/dts/commands/base.d.ts.map +0 -1
  304. package/dts/commands/demo-mode.d.ts +0 -41
  305. package/dts/commands/demo-mode.d.ts.map +0 -1
  306. package/dts/commands/framebuffer.d.ts.map +0 -1
  307. package/dts/commands/index.d.ts +0 -9
  308. package/dts/commands/index.d.ts.map +0 -1
  309. package/dts/commands/install.d.ts +0 -3
  310. package/dts/commands/install.d.ts.map +0 -1
  311. package/dts/commands/reverse.d.ts.map +0 -1
  312. package/dts/commands/shell/index.d.ts +0 -20
  313. package/dts/commands/shell/index.d.ts.map +0 -1
  314. package/dts/commands/shell/legacy.d.ts +0 -27
  315. package/dts/commands/shell/legacy.d.ts.map +0 -1
  316. package/dts/commands/shell/protocol.d.ts +0 -37
  317. package/dts/commands/shell/protocol.d.ts.map +0 -1
  318. package/dts/commands/shell/types.d.ts +0 -15
  319. package/dts/commands/shell/types.d.ts.map +0 -1
  320. package/dts/commands/shell/utils.d.ts.map +0 -1
  321. package/dts/commands/sync/index.d.ts +0 -8
  322. package/dts/commands/sync/index.d.ts.map +0 -1
  323. package/dts/commands/sync/list.d.ts.map +0 -1
  324. package/dts/commands/sync/pull.d.ts +0 -11
  325. package/dts/commands/sync/pull.d.ts.map +0 -1
  326. package/dts/commands/sync/push.d.ts +0 -8
  327. package/dts/commands/sync/push.d.ts.map +0 -1
  328. package/dts/commands/sync/request.d.ts.map +0 -1
  329. package/dts/commands/sync/response.d.ts.map +0 -1
  330. package/dts/commands/sync/stat.d.ts.map +0 -1
  331. package/dts/commands/sync/sync.d.ts +0 -68
  332. package/dts/commands/sync/sync.d.ts.map +0 -1
  333. package/dts/crypto.d.ts +0 -17
  334. package/dts/crypto.d.ts.map +0 -1
  335. package/dts/index.d.ts +0 -11
  336. package/dts/index.d.ts.map +0 -1
  337. package/dts/packet.d.ts +0 -27
  338. package/dts/packet.d.ts.map +0 -1
  339. package/dts/socket/close-event-emitter.d.ts +0 -8
  340. package/dts/socket/close-event-emitter.d.ts.map +0 -1
  341. package/dts/socket/controller.d.ts +0 -43
  342. package/dts/socket/controller.d.ts.map +0 -1
  343. package/dts/socket/data-event-emitter.d.ts +0 -10
  344. package/dts/socket/data-event-emitter.d.ts.map +0 -1
  345. package/dts/socket/dispatcher.d.ts.map +0 -1
  346. package/dts/socket/index.d.ts +0 -7
  347. package/dts/socket/index.d.ts.map +0 -1
  348. package/dts/socket/logger.d.ts +0 -9
  349. package/dts/socket/logger.d.ts.map +0 -1
  350. package/dts/socket/socket.d.ts +0 -22
  351. package/dts/socket/socket.d.ts.map +0 -1
  352. package/dts/stream/buffered-stream.d.ts +0 -30
  353. package/dts/stream/buffered-stream.d.ts.map +0 -1
  354. package/dts/stream/index.d.ts +0 -3
  355. package/dts/stream/index.d.ts.map +0 -1
  356. package/dts/stream/stream.d.ts +0 -15
  357. package/dts/stream/stream.d.ts.map +0 -1
  358. package/dts/utils/auto-reset-event.d.ts.map +0 -1
  359. package/dts/utils/base64.d.ts +0 -7
  360. package/dts/utils/base64.d.ts.map +0 -1
  361. package/dts/utils/chunk.d.ts +0 -3
  362. package/dts/utils/chunk.d.ts.map +0 -1
  363. package/dts/utils/event-queue.d.ts +0 -35
  364. package/dts/utils/event-queue.d.ts.map +0 -1
  365. package/dts/utils/index.d.ts +0 -5
  366. package/dts/utils/index.d.ts.map +0 -1
  367. package/esm/commands/demo-mode.js +0 -170
  368. package/esm/commands/demo-mode.js.map +0 -1
  369. package/esm/commands/shell/index.js +0 -52
  370. package/esm/commands/shell/index.js.map +0 -1
  371. package/esm/commands/shell/legacy.js +0 -33
  372. package/esm/commands/shell/legacy.js.map +0 -1
  373. package/esm/commands/shell/protocol.js +0 -79
  374. package/esm/commands/shell/protocol.js.map +0 -1
  375. package/esm/commands/shell/types.js.map +0 -1
  376. package/esm/commands/shell/utils.js.map +0 -1
  377. package/esm/socket/close-event-emitter.js +0 -28
  378. package/esm/socket/close-event-emitter.js.map +0 -1
  379. package/esm/socket/data-event-emitter.js +0 -25
  380. package/esm/socket/data-event-emitter.js.map +0 -1
  381. package/esm/socket/logger.js +0 -2
  382. package/esm/socket/logger.js.map +0 -1
  383. package/esm/stream/buffered-stream.js +0 -73
  384. package/esm/stream/buffered-stream.js.map +0 -1
  385. package/esm/stream/stream.js +0 -41
  386. package/esm/stream/stream.js.map +0 -1
  387. package/esm/utils/chunk.js +0 -70
  388. package/esm/utils/chunk.js.map +0 -1
  389. package/esm/utils/event-queue.js +0 -104
  390. package/esm/utils/event-queue.js.map +0 -1
  391. package/src/commands/demo-mode.ts +0 -160
  392. package/src/commands/shell/index.ts +0 -68
  393. package/src/commands/shell/legacy.ts +0 -42
  394. package/src/commands/shell/protocol.ts +0 -94
  395. package/src/commands/shell/types.ts +0 -21
  396. package/src/socket/close-event-emitter.ts +0 -28
  397. package/src/socket/controller.ts +0 -105
  398. package/src/socket/data-event-emitter.ts +0 -27
  399. package/src/socket/logger.ts +0 -12
  400. package/src/stream/buffered-stream.ts +0 -100
  401. package/src/stream/stream.ts +0 -50
  402. package/src/utils/chunk.ts +0 -70
  403. package/src/utils/event-queue.ts +0 -145
  404. package/tsconfig.cjs.json +0 -11
  405. package/tsconfig.esm.json +0 -28
  406. package/tsconfig.esm.tsbuildinfo +0 -1305
  407. package/tsconfig.json +0 -18
package/src/crypto.ts CHANGED
@@ -1,280 +1,280 @@
1
- const BigInt0 = BigInt(0);
2
- const BigInt1 = BigInt(1);
3
- const BigInt2 = BigInt(2);
4
-
5
- const BigInt2To64 = BigInt2 ** BigInt(64);
6
-
7
- export function getBig(
8
- buffer: ArrayBuffer,
9
- offset = 0,
10
- length = buffer.byteLength - offset
11
- ): bigint {
12
- const view = new DataView(buffer);
13
-
14
- let result = BigInt0;
15
-
16
- // Now `length` must be a multiplication of 8
17
- // Support for arbitrary length can be easily added
18
-
19
- for (let i = offset; i < offset + length; i += 8) {
20
- result *= BigInt2To64;
21
- const value = view.getBigUint64(i, false);
22
- result += value;
23
- }
24
-
25
- return result;
26
- }
27
-
28
- export function setBig(buffer: ArrayBuffer, value: bigint, offset: number = 0) {
29
- const uint64Array: bigint[] = [];
30
- while (value > BigInt0) {
31
- uint64Array.push(BigInt.asUintN(64, value));
32
- value /= BigInt2To64;
33
- }
34
-
35
- const view = new DataView(buffer);
36
- for (let i = uint64Array.length - 1; i >= 0; i -= 1) {
37
- view.setBigUint64(offset, uint64Array[i], false);
38
- offset += 8;
39
- }
40
- }
41
-
42
- export function setBigLE(buffer: ArrayBuffer, value: bigint, offset = 0) {
43
- const view = new DataView(buffer);
44
- while (value > BigInt0) {
45
- view.setBigUint64(offset, value, true);
46
- offset += 8;
47
- value /= BigInt2To64;
48
- }
49
- }
50
-
51
- // These values are correct only if
52
- // modulus length is 2048 and
53
- // public exponent (e) is 65537
54
- // Anyway, that's how this library generates keys
55
-
56
- // To support other parameters,
57
- // a proper ASN.1 parser can be used
58
-
59
- // References:
60
- //
61
- // https://tools.ietf.org/html/rfc8017#appendix-A.1.2
62
- // PKCS #1: RSA Cryptography Specifications Version 2.2
63
- // A.1.2. RSA Private Key Syntax
64
- //
65
- // https://lapo.it/asn1js/
66
- // https://github.com/lapo-luchini/asn1js
67
- // ASN.1 JavaScript decoder
68
- //
69
- // https://www.itu.int/rec/T-REC-X.690-201508-I/en
70
- // X.690: Specification of Distinguished Encoding Rules (DER)
71
-
72
- const RsaPrivateKeyNOffset = 38;
73
- const RsaPrivateKeyNLength = 2048 / 8;
74
- const RsaPrivateKeyDOffset = 303;
75
- const RsaPrivateKeyDLength = 2048 / 8;
76
-
77
- export function parsePrivateKey(key: ArrayBuffer): [n: bigint, d: bigint] {
78
- let n = getBig(key, RsaPrivateKeyNOffset, RsaPrivateKeyNLength);
79
- let d = getBig(key, RsaPrivateKeyDOffset, RsaPrivateKeyDLength);
80
-
81
- return [n, d];
82
- }
83
-
84
- // Taken from https://stackoverflow.com/a/51562038
85
- // I can't understand, but it does work
86
- // Only used with numbers less than 2^32 so doesn't need BigInt
87
- export function modInverse(a: number, m: number) {
88
- // validate inputs
89
- [a, m] = [Number(a), Number(m)];
90
- if (Number.isNaN(a) || Number.isNaN(m)) {
91
- return NaN; // invalid input
92
- }
93
- a = (a % m + m) % m;
94
- if (!a || m < 2) {
95
- return NaN; // invalid input
96
- }
97
- // find the gcd
98
- const s = [];
99
- let b = m;
100
- while (b) {
101
- [a, b] = [b, a % b];
102
- s.push({ a, b });
103
- }
104
- if (a !== 1) {
105
- return NaN; // inverse does not exists
106
- }
107
- // find the inverse
108
- let x = 1;
109
- let y = 0;
110
- for (let i = s.length - 2; i >= 0; --i) {
111
- [x, y] = [y, x - y * Math.floor(s[i].a / s[i].b)];
112
- }
113
- return (y % m + m) % m;
114
- }
115
-
116
- export function calculatePublicKeyLength() {
117
- return 4 + 4 + 2048 / 8 + 2048 / 8 + 4;
118
- }
119
-
120
- export function calculatePublicKey(
121
- privateKey: ArrayBuffer
122
- ): ArrayBuffer;
123
- export function calculatePublicKey(
124
- privateKey: ArrayBuffer,
125
- output: ArrayBuffer,
126
- outputOffset?: number
127
- ): number;
128
- export function calculatePublicKey(
129
- privateKey: ArrayBuffer,
130
- output?: ArrayBuffer,
131
- outputOffset: number = 0
132
- ): ArrayBuffer | number {
133
- // Android has its own public key generation algorithm
134
- // See https://android.googlesource.com/platform/system/core.git/+/91784040db2b9273687f88d8b95f729d4a61ecc2/libcrypto_utils/android_pubkey.cpp#111
135
-
136
- // The public key is an array of
137
- //
138
- // [
139
- // modulusLengthInWords, // 32-bit integer, a "word" is 32-bit so it must be 2048 / 8 / 4
140
- // // Actually the comment in Android source code was wrong
141
- // n0inv, // 32-bit integer, the modular inverse of (lower 32 bits of) n
142
- // modulus, // n
143
- // rr, // Montgomery parameter R^2
144
- // exponent, // 32-bit integer, must be 65537
145
- // ]
146
- //
147
- // (All in little endian)
148
- // See https://android.googlesource.com/platform/system/core.git/+/91784040db2b9273687f88d8b95f729d4a61ecc2/libcrypto_utils/android_pubkey.cpp#38
149
-
150
- // extract `n` from private key
151
- const [n] = parsePrivateKey(privateKey);
152
-
153
- let outputType: 'ArrayBuffer' | 'number';
154
- const outputLength = calculatePublicKeyLength();
155
- if (!output) {
156
- output = new ArrayBuffer(outputLength);
157
- outputType = 'ArrayBuffer';
158
- } else {
159
- if (output.byteLength - outputOffset < outputLength) {
160
- throw new Error('output buffer is too small');
161
- }
162
-
163
- outputType = 'number';
164
- }
165
-
166
- const outputView = new DataView(output);
167
-
168
- // modulusLengthInWords
169
- outputView.setUint32(outputOffset, 2048 / 8 / 4, true);
170
- outputOffset += 4;
171
-
172
- // Calculate `n0inv`
173
- // Don't know why need to multiple -1
174
- // Didn't exist in Android codebase
175
- const n0inv = modInverse(Number(BigInt.asUintN(32, n) * BigInt(-1)), 2 ** 32);
176
- outputView.setUint32(outputOffset, n0inv, true);
177
- outputOffset += 4;
178
-
179
- // Write n
180
- setBigLE(output, n, outputOffset);
181
- outputOffset += 256;
182
-
183
- // Calculate rr = (2^(rsa_size)) ^ 2 mod n
184
- let rr = BigInt(2) ** BigInt(4096) % n;
185
- setBigLE(output, rr, outputOffset);
186
- outputOffset += 256;
187
-
188
- // exponent
189
- outputView.setUint32(outputOffset, 65537, true);
190
- outputOffset += 4;
191
-
192
- if (outputType === 'ArrayBuffer') {
193
- return output;
194
- } else {
195
- return outputLength;
196
- }
197
- }
198
-
199
- // Modular exponentiation
200
- // See https://en.wikipedia.org/wiki/Modular_exponentiation#Implementation_in_Lua
201
- export function powMod(base: bigint, exponent: bigint, modulus: bigint): bigint {
202
- if (modulus === BigInt1) {
203
- return BigInt0;
204
- }
205
-
206
- let r = BigInt1;
207
- base = base % modulus;
208
-
209
- while (exponent > BigInt0) {
210
- if (BigInt.asUintN(1, exponent) === BigInt1) {
211
- r = r * base % modulus;
212
- }
213
-
214
- exponent >>= BigInt1;
215
- base = base ** BigInt2 % modulus;
216
- }
217
-
218
- return r;
219
- }
220
-
221
- export const Sha1DigestLength = 20;
222
-
223
- export const Asn1Sequence = 0x30;
224
- export const Asn1OctetString = 0x04;
225
- export const Asn1Null = 0x05;
226
- export const Asn1Oid = 0x06;
227
-
228
- // PKCS#1 SHA-1 hash digest info
229
- export const Sha1DigestInfo = [
230
- Asn1Sequence, 0x0d + Sha1DigestLength,
231
- Asn1Sequence, 0x09,
232
- // SHA-1 (1 3 14 3 2 26)
233
- Asn1Oid, 0x05, 1 * 40 + 3, 14, 3, 2, 26,
234
- Asn1Null, 0x00,
235
- Asn1OctetString, Sha1DigestLength
236
- ];
237
-
238
- // SubtleCrypto.sign() will hash the given data and sign the hash
239
- // But we don't need the hashing step
240
- // (In another word, ADB just requires the client to
241
- // encrypt the given data with its private key)
242
- // However SubtileCrypto.encrypt() doesn't accept 'RSASSA-PKCS1-v1_5' algorithm
243
- // So we need to implement the encryption by ourself
244
- export function sign(privateKey: ArrayBuffer, data: ArrayBuffer): ArrayBuffer {
245
- const [n, d] = parsePrivateKey(privateKey);
246
-
247
- // PKCS#1 padding
248
- const padded = new Uint8Array(256);
249
- let index = 0;
250
-
251
- padded[index] = 0;
252
- index += 1;
253
-
254
- padded[index] = 1;
255
- index += 1;
256
-
257
- const fillLength = padded.length - Sha1DigestInfo.length - data.byteLength - 1;
258
- while (index < fillLength) {
259
- padded[index] = 0xff;
260
- index += 1;
261
- }
262
-
263
- padded[index] = 0;
264
- index += 1;
265
-
266
- padded.set(new Uint8Array(Sha1DigestInfo), index);
267
- index += Sha1DigestInfo.length;
268
-
269
- padded.set(new Uint8Array(data), index);
270
-
271
- // Encryption
272
- // signature = padded ** d % n
273
- let signature = powMod(getBig(padded.buffer), d, n);
274
-
275
- // Put into an ArrayBuffer
276
- const result = new ArrayBuffer(256);
277
- setBig(result, signature);
278
-
279
- return result;
280
- }
1
+ import { getBigUint64, setBigUint64 } from '@yume-chan/dataview-bigint-polyfill/esm/fallback.js';
2
+
3
+ const BigInt0 = BigInt(0);
4
+ const BigInt1 = BigInt(1);
5
+ const BigInt2 = BigInt(2);
6
+ const BigInt64 = BigInt(64);
7
+
8
+ export function getBig(
9
+ array: Uint8Array,
10
+ offset = 0,
11
+ length = array.byteLength - offset
12
+ ): bigint {
13
+ const view = new DataView(array.buffer, array.byteOffset, array.byteLength);
14
+
15
+ let result = BigInt0;
16
+
17
+ // Currently `length` must be a multiplication of 8
18
+ // Support for arbitrary length can be easily added
19
+
20
+ for (let i = offset; i < offset + length; i += 8) {
21
+ result <<= BigInt64;
22
+ const value = getBigUint64(view, i, false);
23
+ result += value;
24
+ }
25
+
26
+ return result;
27
+ }
28
+
29
+ export function setBig(buffer: ArrayBuffer, value: bigint, offset: number = 0) {
30
+ const uint64Array: bigint[] = [];
31
+ while (value > BigInt0) {
32
+ uint64Array.push(BigInt.asUintN(64, value));
33
+ value >>= BigInt64;
34
+ }
35
+
36
+ const view = new DataView(buffer);
37
+ for (let i = uint64Array.length - 1; i >= 0; i -= 1) {
38
+ setBigUint64(view, offset, uint64Array[i]!, false);
39
+ offset += 8;
40
+ }
41
+ }
42
+
43
+ export function setBigLE(array: Uint8Array, value: bigint, offset = 0) {
44
+ const view = new DataView(array.buffer, array.byteOffset, array.byteLength);
45
+ while (value > BigInt0) {
46
+ setBigUint64(view, offset, value, true);
47
+ offset += 8;
48
+ value >>= BigInt64;
49
+ }
50
+ }
51
+
52
+ // These values are correct only if
53
+ // modulus length is 2048 and
54
+ // public exponent (e) is 65537
55
+ // Anyway, that's how this library generates keys
56
+
57
+ // To support other parameters,
58
+ // a proper ASN.1 parser can be used
59
+
60
+ // References:
61
+ //
62
+ // https://tools.ietf.org/html/rfc8017#appendix-A.1.2
63
+ // PKCS #1: RSA Cryptography Specifications Version 2.2
64
+ // A.1.2. RSA Private Key Syntax
65
+ //
66
+ // https://lapo.it/asn1js/
67
+ // https://github.com/lapo-luchini/asn1js
68
+ // ASN.1 JavaScript decoder
69
+ //
70
+ // https://www.itu.int/rec/T-REC-X.690-201508-I/en
71
+ // X.690: Specification of Distinguished Encoding Rules (DER)
72
+
73
+ const RsaPrivateKeyNOffset = 38;
74
+ const RsaPrivateKeyNLength = 2048 / 8;
75
+ const RsaPrivateKeyDOffset = 303;
76
+ const RsaPrivateKeyDLength = 2048 / 8;
77
+
78
+ export function parsePrivateKey(key: Uint8Array): [n: bigint, d: bigint] {
79
+ let n = getBig(key, RsaPrivateKeyNOffset, RsaPrivateKeyNLength);
80
+ let d = getBig(key, RsaPrivateKeyDOffset, RsaPrivateKeyDLength);
81
+
82
+ return [n, d];
83
+ }
84
+
85
+ // Taken from https://stackoverflow.com/a/51562038
86
+ // I can't understand, but it does work
87
+ // Only used with numbers less than 2^32 so doesn't need BigInt
88
+ export function modInverse(a: number, m: number) {
89
+ a = (a % m + m) % m;
90
+ if (!a || m < 2) {
91
+ return NaN; // invalid input
92
+ }
93
+ // find the gcd
94
+ const s = [];
95
+ let b = m;
96
+ while (b) {
97
+ [a, b] = [b, a % b];
98
+ s.push({ a, b });
99
+ }
100
+ if (a !== 1) {
101
+ return NaN; // inverse does not exists
102
+ }
103
+ // find the inverse
104
+ let x = 1;
105
+ let y = 0;
106
+ for (let i = s.length - 2; i >= 0; --i) {
107
+ [x, y] = [y, x - y * Math.floor(s[i]!.a / s[i]!.b)];
108
+ }
109
+ return (y % m + m) % m;
110
+ }
111
+
112
+ export function calculatePublicKeyLength() {
113
+ return 4 + 4 + 2048 / 8 + 2048 / 8 + 4;
114
+ }
115
+
116
+ export function calculatePublicKey(
117
+ privateKey: Uint8Array
118
+ ): Uint8Array;
119
+ export function calculatePublicKey(
120
+ privateKey: Uint8Array,
121
+ output: Uint8Array,
122
+ ): number;
123
+ export function calculatePublicKey(
124
+ privateKey: Uint8Array,
125
+ output?: Uint8Array,
126
+ ): Uint8Array | number {
127
+ // Android has its own public key generation algorithm
128
+ // See https://android.googlesource.com/platform/system/core.git/+/91784040db2b9273687f88d8b95f729d4a61ecc2/libcrypto_utils/android_pubkey.cpp#111
129
+
130
+ // The public key is an array of
131
+ //
132
+ // [
133
+ // modulusLengthInWords, // 32-bit integer, a "word" is 32-bit so it must be 2048 / 8 / 4
134
+ // // Actually the comment in Android source code was wrong
135
+ // n0inv, // 32-bit integer, the modular inverse of (lower 32 bits of) n
136
+ // modulus, // n
137
+ // rr, // Montgomery parameter R^2
138
+ // exponent, // 32-bit integer, must be 65537
139
+ // ]
140
+ //
141
+ // (All in little endian)
142
+ // See https://android.googlesource.com/platform/system/core.git/+/91784040db2b9273687f88d8b95f729d4a61ecc2/libcrypto_utils/android_pubkey.cpp#38
143
+
144
+ // extract `n` from private key
145
+ const [n] = parsePrivateKey(privateKey);
146
+
147
+ let outputType: 'Uint8Array' | 'number';
148
+ const outputLength = calculatePublicKeyLength();
149
+ if (!output) {
150
+ output = new Uint8Array(outputLength);
151
+ outputType = 'Uint8Array';
152
+ } else {
153
+ if (output.byteLength < outputLength) {
154
+ throw new Error('output buffer is too small');
155
+ }
156
+
157
+ outputType = 'number';
158
+ }
159
+
160
+ const outputView = new DataView(output.buffer, output.byteOffset, output.byteLength);
161
+ let outputOffset = 0;
162
+
163
+ // modulusLengthInWords
164
+ outputView.setUint32(outputOffset, 2048 / 8 / 4, true);
165
+ outputOffset += 4;
166
+
167
+ // Calculate `n0inv`
168
+ // Don't know why need to multiple -1
169
+ // Didn't exist in Android codebase
170
+ const n0inv = modInverse(Number(BigInt.asUintN(32, n) * BigInt(-1)), 2 ** 32);
171
+ outputView.setUint32(outputOffset, n0inv, true);
172
+ outputOffset += 4;
173
+
174
+ // Write n
175
+ setBigLE(output, n, outputOffset);
176
+ outputOffset += 256;
177
+
178
+ // Calculate rr = (2^(rsa_size)) ^ 2 mod n
179
+ let rr = BigInt(2) ** BigInt(4096) % n;
180
+ setBigLE(output, rr, outputOffset);
181
+ outputOffset += 256;
182
+
183
+ // exponent
184
+ outputView.setUint32(outputOffset, 65537, true);
185
+ outputOffset += 4;
186
+
187
+ if (outputType === 'Uint8Array') {
188
+ return output;
189
+ } else {
190
+ return outputLength;
191
+ }
192
+ }
193
+
194
+ /**
195
+ * Modular exponentiation.
196
+ *
197
+ * Calculate `(base ** exponent) % modulus` without actually calculating `(base ** exponent)`.
198
+ *
199
+ * See https://en.wikipedia.org/wiki/Modular_exponentiation#Implementation_in_Lua
200
+ */
201
+ export function powMod(base: bigint, exponent: bigint, modulus: bigint): bigint {
202
+ if (modulus === BigInt1) {
203
+ return BigInt0;
204
+ }
205
+
206
+ let r = BigInt1;
207
+ base = base % modulus;
208
+
209
+ while (exponent > BigInt0) {
210
+ if (BigInt.asUintN(1, exponent) === BigInt1) {
211
+ r = r * base % modulus;
212
+ }
213
+
214
+ exponent >>= BigInt1;
215
+ base = base ** BigInt2 % modulus;
216
+ }
217
+
218
+ return r;
219
+ }
220
+
221
+ export const Sha1DigestLength = 20;
222
+
223
+ export const Asn1Sequence = 0x30;
224
+ export const Asn1OctetString = 0x04;
225
+ export const Asn1Null = 0x05;
226
+ export const Asn1Oid = 0x06;
227
+
228
+ // PKCS#1 SHA-1 hash digest info
229
+ export const Sha1DigestInfo = new Uint8Array([
230
+ Asn1Sequence, 0x0d + Sha1DigestLength,
231
+ Asn1Sequence, 0x09,
232
+ // SHA-1 (1 3 14 3 2 26)
233
+ Asn1Oid, 0x05, 1 * 40 + 3, 14, 3, 2, 26,
234
+ Asn1Null, 0x00,
235
+ Asn1OctetString, Sha1DigestLength
236
+ ]);
237
+
238
+ // SubtleCrypto.sign() will hash the given data and sign the hash
239
+ // But we don't need the hashing step
240
+ // (In another word, ADB just requires the client to
241
+ // encrypt the given data with its private key)
242
+ // However SubtileCrypto.encrypt() doesn't accept 'RSASSA-PKCS1-v1_5' algorithm
243
+ // So we need to implement the encryption by ourself
244
+ export function sign(privateKey: Uint8Array, data: Uint8Array): ArrayBuffer {
245
+ const [n, d] = parsePrivateKey(privateKey);
246
+
247
+ // PKCS#1 padding
248
+ const padded = new Uint8Array(256);
249
+ let index = 0;
250
+
251
+ padded[index] = 0;
252
+ index += 1;
253
+
254
+ padded[index] = 1;
255
+ index += 1;
256
+
257
+ const fillLength = padded.length - Sha1DigestInfo.length - data.length - 1;
258
+ while (index < fillLength) {
259
+ padded[index] = 0xff;
260
+ index += 1;
261
+ }
262
+
263
+ padded[index] = 0;
264
+ index += 1;
265
+
266
+ padded.set(Sha1DigestInfo, index);
267
+ index += Sha1DigestInfo.length;
268
+
269
+ padded.set(data, index);
270
+
271
+ // Encryption
272
+ // signature = padded ** d % n
273
+ let signature = powMod(getBig(padded), d, n);
274
+
275
+ // Put into an ArrayBuffer
276
+ const result = new ArrayBuffer(256);
277
+ setBig(result, signature);
278
+
279
+ return result;
280
+ }
package/src/features.ts CHANGED
@@ -1,5 +1,5 @@
1
- export enum AdbFeatures {
2
- StatV2 = 'stat_v2',
3
- Cmd = 'cmd',
4
- ShellV2 = "shell_v2"
5
- }
1
+ export enum AdbFeatures {
2
+ StatV2 = 'stat_v2',
3
+ Cmd = 'cmd',
4
+ ShellV2 = "shell_v2"
5
+ }
package/src/index.ts CHANGED
@@ -1,10 +1,11 @@
1
- export * from './adb';
2
- export * from './auth';
3
- export * from './backend';
4
- export * from './commands';
5
- export * from './crypto';
6
- export * from './features';
7
- export * from './packet';
8
- export * from './socket';
9
- export * from './stream';
10
- export * from './utils';
1
+
2
+ export * from './adb.js';
3
+ export * from './auth.js';
4
+ export * from './backend.js';
5
+ export * from './commands/index.js';
6
+ export * from './crypto.js';
7
+ export * from './features.js';
8
+ export * from './packet.js';
9
+ export * from './socket/index.js';
10
+ export * from './stream/index.js';
11
+ export * from './utils/index.js';