dfghfhgfg commited on
Commit
dcdb337
·
verified ·
1 Parent(s): f6496c3

Upload 12 files

Browse files
Files changed (12) hide show
  1. Cargo.lock +1471 -0
  2. Cargo.toml +23 -0
  3. build.rs +7 -0
  4. sign.config.toml +4 -0
  5. src/appinfo/3.2.19-39038.json +18 -0
  6. src/config.rs +40 -0
  7. src/error.rs +48 -0
  8. src/main.rs +35 -0
  9. src/service.rs +87 -0
  10. src/sign.c +65 -0
  11. src/sign.rs +71 -0
  12. symbols.c +6 -0
Cargo.lock ADDED
@@ -0,0 +1,1471 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # This file is automatically @generated by Cargo.
2
+ # It is not intended for manual editing.
3
+ version = 4
4
+
5
+ [[package]]
6
+ name = "ahash"
7
+ version = "0.8.12"
8
+ source = "registry+https://github.com/rust-lang/crates.io-index"
9
+ checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75"
10
+ dependencies = [
11
+ "cfg-if",
12
+ "getrandom",
13
+ "once_cell",
14
+ "version_check",
15
+ "zerocopy",
16
+ ]
17
+
18
+ [[package]]
19
+ name = "aho-corasick"
20
+ version = "1.1.3"
21
+ source = "registry+https://github.com/rust-lang/crates.io-index"
22
+ checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916"
23
+ dependencies = [
24
+ "memchr",
25
+ ]
26
+
27
+ [[package]]
28
+ name = "aligned-array"
29
+ version = "1.0.1"
30
+ source = "registry+https://github.com/rust-lang/crates.io-index"
31
+ checksum = "e05c92d086290f52938013f6242ac62bf7d401fab8ad36798a609faa65c3fd2c"
32
+ dependencies = [
33
+ "generic-array",
34
+ ]
35
+
36
+ [[package]]
37
+ name = "arrayvec"
38
+ version = "0.7.6"
39
+ source = "registry+https://github.com/rust-lang/crates.io-index"
40
+ checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50"
41
+
42
+ [[package]]
43
+ name = "async-channel"
44
+ version = "2.5.0"
45
+ source = "registry+https://github.com/rust-lang/crates.io-index"
46
+ checksum = "924ed96dd52d1b75e9c1a3e6275715fd320f5f9439fb5a4a11fa51f4221158d2"
47
+ dependencies = [
48
+ "concurrent-queue",
49
+ "event-listener-strategy",
50
+ "futures-core",
51
+ "pin-project-lite",
52
+ ]
53
+
54
+ [[package]]
55
+ name = "async-task"
56
+ version = "4.7.1"
57
+ source = "registry+https://github.com/rust-lang/crates.io-index"
58
+ checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de"
59
+
60
+ [[package]]
61
+ name = "atomic-waker"
62
+ version = "1.1.2"
63
+ source = "registry+https://github.com/rust-lang/crates.io-index"
64
+ checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0"
65
+
66
+ [[package]]
67
+ name = "base64"
68
+ version = "0.22.1"
69
+ source = "registry+https://github.com/rust-lang/crates.io-index"
70
+ checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
71
+
72
+ [[package]]
73
+ name = "bitflags"
74
+ version = "2.9.4"
75
+ source = "registry+https://github.com/rust-lang/crates.io-index"
76
+ checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394"
77
+
78
+ [[package]]
79
+ name = "block-buffer"
80
+ version = "0.10.4"
81
+ source = "registry+https://github.com/rust-lang/crates.io-index"
82
+ checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
83
+ dependencies = [
84
+ "generic-array",
85
+ ]
86
+
87
+ [[package]]
88
+ name = "bytes"
89
+ version = "1.10.1"
90
+ source = "registry+https://github.com/rust-lang/crates.io-index"
91
+ checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a"
92
+
93
+ [[package]]
94
+ name = "cc"
95
+ version = "1.2.41"
96
+ source = "registry+https://github.com/rust-lang/crates.io-index"
97
+ checksum = "ac9fe6cdbb24b6ade63616c0a0688e45bb56732262c158df3c0c4bea4ca47cb7"
98
+ dependencies = [
99
+ "find-msvc-tools",
100
+ "shlex",
101
+ ]
102
+
103
+ [[package]]
104
+ name = "cfg-if"
105
+ version = "1.0.4"
106
+ source = "registry+https://github.com/rust-lang/crates.io-index"
107
+ checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
108
+
109
+ [[package]]
110
+ name = "cfg_aliases"
111
+ version = "0.2.1"
112
+ source = "registry+https://github.com/rust-lang/crates.io-index"
113
+ checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724"
114
+
115
+ [[package]]
116
+ name = "compio-buf"
117
+ version = "0.6.0"
118
+ source = "registry+https://github.com/rust-lang/crates.io-index"
119
+ checksum = "3ce94a45a47ef8c0e3f44084fe67c8effc25e7ac1de6de2ee1a29a59e6c6ba8e"
120
+ dependencies = [
121
+ "arrayvec",
122
+ "bytes",
123
+ "libc",
124
+ ]
125
+
126
+ [[package]]
127
+ name = "compio-driver"
128
+ version = "0.8.2"
129
+ source = "registry+https://github.com/rust-lang/crates.io-index"
130
+ checksum = "6ea757a5a1be2c2613f298a4ca703958251ff34bfdb803d78d55d01f48fae249"
131
+ dependencies = [
132
+ "aligned-array",
133
+ "cfg-if",
134
+ "cfg_aliases",
135
+ "compio-buf",
136
+ "compio-log",
137
+ "crossbeam-channel",
138
+ "crossbeam-queue",
139
+ "futures-util",
140
+ "io-uring",
141
+ "io_uring_buf_ring",
142
+ "libc",
143
+ "once_cell",
144
+ "paste",
145
+ "polling",
146
+ "slab",
147
+ "socket2",
148
+ "windows-sys 0.52.0",
149
+ ]
150
+
151
+ [[package]]
152
+ name = "compio-io"
153
+ version = "0.7.0"
154
+ source = "registry+https://github.com/rust-lang/crates.io-index"
155
+ checksum = "c2b05cc4142659f2c90b6e44c68568ff71c83c6fb9285aca686952250b914932"
156
+ dependencies = [
157
+ "compio-buf",
158
+ "futures-util",
159
+ "paste",
160
+ ]
161
+
162
+ [[package]]
163
+ name = "compio-log"
164
+ version = "0.1.0"
165
+ source = "registry+https://github.com/rust-lang/crates.io-index"
166
+ checksum = "fc4e560213c1996b618da369b7c9109564b41af9033802ae534465c4ee4e132f"
167
+ dependencies = [
168
+ "tracing",
169
+ ]
170
+
171
+ [[package]]
172
+ name = "compio-net"
173
+ version = "0.8.0"
174
+ source = "registry+https://github.com/rust-lang/crates.io-index"
175
+ checksum = "0c1fabe3393bc0c3a0dca8e99a35bf97e42caa12bb3cc6bba83df04e28c9c142"
176
+ dependencies = [
177
+ "cfg-if",
178
+ "compio-buf",
179
+ "compio-driver",
180
+ "compio-io",
181
+ "compio-runtime",
182
+ "either",
183
+ "libc",
184
+ "once_cell",
185
+ "socket2",
186
+ "widestring",
187
+ "windows-sys 0.52.0",
188
+ ]
189
+
190
+ [[package]]
191
+ name = "compio-runtime"
192
+ version = "0.8.1"
193
+ source = "registry+https://github.com/rust-lang/crates.io-index"
194
+ checksum = "b7df559e87b7ab05ba61c32619f6076dd5cc2daf5a8cb30cb9931fb355d20aff"
195
+ dependencies = [
196
+ "async-task",
197
+ "cfg-if",
198
+ "compio-buf",
199
+ "compio-driver",
200
+ "compio-log",
201
+ "crossbeam-queue",
202
+ "futures-util",
203
+ "libc",
204
+ "once_cell",
205
+ "scoped-tls",
206
+ "socket2",
207
+ "windows-sys 0.52.0",
208
+ ]
209
+
210
+ [[package]]
211
+ name = "concurrent-queue"
212
+ version = "2.5.0"
213
+ source = "registry+https://github.com/rust-lang/crates.io-index"
214
+ checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973"
215
+ dependencies = [
216
+ "crossbeam-utils",
217
+ ]
218
+
219
+ [[package]]
220
+ name = "core_affinity"
221
+ version = "0.8.3"
222
+ source = "registry+https://github.com/rust-lang/crates.io-index"
223
+ checksum = "a034b3a7b624016c6e13f5df875747cc25f884156aad2abd12b6c46797971342"
224
+ dependencies = [
225
+ "libc",
226
+ "num_cpus",
227
+ "winapi",
228
+ ]
229
+
230
+ [[package]]
231
+ name = "cpufeatures"
232
+ version = "0.2.17"
233
+ source = "registry+https://github.com/rust-lang/crates.io-index"
234
+ checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280"
235
+ dependencies = [
236
+ "libc",
237
+ ]
238
+
239
+ [[package]]
240
+ name = "crossbeam-channel"
241
+ version = "0.5.15"
242
+ source = "registry+https://github.com/rust-lang/crates.io-index"
243
+ checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2"
244
+ dependencies = [
245
+ "crossbeam-utils",
246
+ ]
247
+
248
+ [[package]]
249
+ name = "crossbeam-queue"
250
+ version = "0.3.12"
251
+ source = "registry+https://github.com/rust-lang/crates.io-index"
252
+ checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115"
253
+ dependencies = [
254
+ "crossbeam-utils",
255
+ ]
256
+
257
+ [[package]]
258
+ name = "crossbeam-utils"
259
+ version = "0.8.21"
260
+ source = "registry+https://github.com/rust-lang/crates.io-index"
261
+ checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28"
262
+
263
+ [[package]]
264
+ name = "crypto-common"
265
+ version = "0.1.6"
266
+ source = "registry+https://github.com/rust-lang/crates.io-index"
267
+ checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
268
+ dependencies = [
269
+ "generic-array",
270
+ "typenum",
271
+ ]
272
+
273
+ [[package]]
274
+ name = "ctrlc"
275
+ version = "3.5.0"
276
+ source = "registry+https://github.com/rust-lang/crates.io-index"
277
+ checksum = "881c5d0a13b2f1498e2306e82cbada78390e152d4b1378fb28a84f4dcd0dc4f3"
278
+ dependencies = [
279
+ "dispatch",
280
+ "nix",
281
+ "windows-sys 0.61.2",
282
+ ]
283
+
284
+ [[package]]
285
+ name = "data-encoding"
286
+ version = "2.9.0"
287
+ source = "registry+https://github.com/rust-lang/crates.io-index"
288
+ checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476"
289
+
290
+ [[package]]
291
+ name = "digest"
292
+ version = "0.10.7"
293
+ source = "registry+https://github.com/rust-lang/crates.io-index"
294
+ checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
295
+ dependencies = [
296
+ "block-buffer",
297
+ "crypto-common",
298
+ ]
299
+
300
+ [[package]]
301
+ name = "dispatch"
302
+ version = "0.2.0"
303
+ source = "registry+https://github.com/rust-lang/crates.io-index"
304
+ checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b"
305
+
306
+ [[package]]
307
+ name = "either"
308
+ version = "1.15.0"
309
+ source = "registry+https://github.com/rust-lang/crates.io-index"
310
+ checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719"
311
+
312
+ [[package]]
313
+ name = "encoding_rs"
314
+ version = "0.8.35"
315
+ source = "registry+https://github.com/rust-lang/crates.io-index"
316
+ checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3"
317
+ dependencies = [
318
+ "cfg-if",
319
+ ]
320
+
321
+ [[package]]
322
+ name = "env_filter"
323
+ version = "0.1.4"
324
+ source = "registry+https://github.com/rust-lang/crates.io-index"
325
+ checksum = "1bf3c259d255ca70051b30e2e95b5446cdb8949ac4cd22c0d7fd634d89f568e2"
326
+ dependencies = [
327
+ "log",
328
+ ]
329
+
330
+ [[package]]
331
+ name = "env_logger"
332
+ version = "0.11.8"
333
+ source = "registry+https://github.com/rust-lang/crates.io-index"
334
+ checksum = "13c863f0904021b108aa8b2f55046443e6b1ebde8fd4a15c399893aae4fa069f"
335
+ dependencies = [
336
+ "env_filter",
337
+ "log",
338
+ ]
339
+
340
+ [[package]]
341
+ name = "equivalent"
342
+ version = "1.0.2"
343
+ source = "registry+https://github.com/rust-lang/crates.io-index"
344
+ checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
345
+
346
+ [[package]]
347
+ name = "errno"
348
+ version = "0.3.14"
349
+ source = "registry+https://github.com/rust-lang/crates.io-index"
350
+ checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
351
+ dependencies = [
352
+ "libc",
353
+ "windows-sys 0.61.2",
354
+ ]
355
+
356
+ [[package]]
357
+ name = "event-listener"
358
+ version = "5.4.1"
359
+ source = "registry+https://github.com/rust-lang/crates.io-index"
360
+ checksum = "e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab"
361
+ dependencies = [
362
+ "concurrent-queue",
363
+ "parking",
364
+ "pin-project-lite",
365
+ ]
366
+
367
+ [[package]]
368
+ name = "event-listener-strategy"
369
+ version = "0.5.4"
370
+ source = "registry+https://github.com/rust-lang/crates.io-index"
371
+ checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93"
372
+ dependencies = [
373
+ "event-listener",
374
+ "pin-project-lite",
375
+ ]
376
+
377
+ [[package]]
378
+ name = "find-msvc-tools"
379
+ version = "0.1.4"
380
+ source = "registry+https://github.com/rust-lang/crates.io-index"
381
+ checksum = "52051878f80a721bb68ebfbc930e07b65ba72f2da88968ea5c06fd6ca3d3a127"
382
+
383
+ [[package]]
384
+ name = "fnv"
385
+ version = "1.0.7"
386
+ source = "registry+https://github.com/rust-lang/crates.io-index"
387
+ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
388
+
389
+ [[package]]
390
+ name = "form_urlencoded"
391
+ version = "1.2.2"
392
+ source = "registry+https://github.com/rust-lang/crates.io-index"
393
+ checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf"
394
+ dependencies = [
395
+ "percent-encoding",
396
+ ]
397
+
398
+ [[package]]
399
+ name = "futures-core"
400
+ version = "0.3.31"
401
+ source = "registry+https://github.com/rust-lang/crates.io-index"
402
+ checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e"
403
+
404
+ [[package]]
405
+ name = "futures-macro"
406
+ version = "0.3.31"
407
+ source = "registry+https://github.com/rust-lang/crates.io-index"
408
+ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650"
409
+ dependencies = [
410
+ "proc-macro2",
411
+ "quote",
412
+ "syn 2.0.107",
413
+ ]
414
+
415
+ [[package]]
416
+ name = "futures-sink"
417
+ version = "0.3.31"
418
+ source = "registry+https://github.com/rust-lang/crates.io-index"
419
+ checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7"
420
+
421
+ [[package]]
422
+ name = "futures-task"
423
+ version = "0.3.31"
424
+ source = "registry+https://github.com/rust-lang/crates.io-index"
425
+ checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988"
426
+
427
+ [[package]]
428
+ name = "futures-timer"
429
+ version = "3.0.3"
430
+ source = "registry+https://github.com/rust-lang/crates.io-index"
431
+ checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24"
432
+
433
+ [[package]]
434
+ name = "futures-util"
435
+ version = "0.3.31"
436
+ source = "registry+https://github.com/rust-lang/crates.io-index"
437
+ checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81"
438
+ dependencies = [
439
+ "futures-core",
440
+ "futures-macro",
441
+ "futures-sink",
442
+ "futures-task",
443
+ "pin-project-lite",
444
+ "pin-utils",
445
+ "slab",
446
+ ]
447
+
448
+ [[package]]
449
+ name = "generic-array"
450
+ version = "0.14.9"
451
+ source = "registry+https://github.com/rust-lang/crates.io-index"
452
+ checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2"
453
+ dependencies = [
454
+ "typenum",
455
+ "version_check",
456
+ ]
457
+
458
+ [[package]]
459
+ name = "getrandom"
460
+ version = "0.3.4"
461
+ source = "registry+https://github.com/rust-lang/crates.io-index"
462
+ checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd"
463
+ dependencies = [
464
+ "cfg-if",
465
+ "libc",
466
+ "r-efi",
467
+ "wasip2",
468
+ ]
469
+
470
+ [[package]]
471
+ name = "hashbrown"
472
+ version = "0.16.0"
473
+ source = "registry+https://github.com/rust-lang/crates.io-index"
474
+ checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d"
475
+
476
+ [[package]]
477
+ name = "hermit-abi"
478
+ version = "0.5.2"
479
+ source = "registry+https://github.com/rust-lang/crates.io-index"
480
+ checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c"
481
+
482
+ [[package]]
483
+ name = "http"
484
+ version = "1.3.1"
485
+ source = "registry+https://github.com/rust-lang/crates.io-index"
486
+ checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565"
487
+ dependencies = [
488
+ "bytes",
489
+ "fnv",
490
+ "itoa",
491
+ ]
492
+
493
+ [[package]]
494
+ name = "httparse"
495
+ version = "1.10.1"
496
+ source = "registry+https://github.com/rust-lang/crates.io-index"
497
+ checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87"
498
+
499
+ [[package]]
500
+ name = "httpdate"
501
+ version = "1.0.3"
502
+ source = "registry+https://github.com/rust-lang/crates.io-index"
503
+ checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9"
504
+
505
+ [[package]]
506
+ name = "indexmap"
507
+ version = "2.12.0"
508
+ source = "registry+https://github.com/rust-lang/crates.io-index"
509
+ checksum = "6717a8d2a5a929a1a2eb43a12812498ed141a0bcfb7e8f7844fbdbe4303bba9f"
510
+ dependencies = [
511
+ "equivalent",
512
+ "hashbrown",
513
+ ]
514
+
515
+ [[package]]
516
+ name = "io-uring"
517
+ version = "0.7.10"
518
+ source = "registry+https://github.com/rust-lang/crates.io-index"
519
+ checksum = "046fa2d4d00aea763528b4950358d0ead425372445dc8ff86312b3c69ff7727b"
520
+ dependencies = [
521
+ "bitflags",
522
+ "cfg-if",
523
+ "libc",
524
+ ]
525
+
526
+ [[package]]
527
+ name = "io_uring_buf_ring"
528
+ version = "0.2.1"
529
+ source = "registry+https://github.com/rust-lang/crates.io-index"
530
+ checksum = "8a8867874ff5758b47c1dac069e6e86541432f9da8be9111c5e94154134f07d0"
531
+ dependencies = [
532
+ "bytes",
533
+ "io-uring",
534
+ "rustix",
535
+ ]
536
+
537
+ [[package]]
538
+ name = "itoa"
539
+ version = "1.0.15"
540
+ source = "registry+https://github.com/rust-lang/crates.io-index"
541
+ checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c"
542
+
543
+ [[package]]
544
+ name = "libc"
545
+ version = "0.2.177"
546
+ source = "registry+https://github.com/rust-lang/crates.io-index"
547
+ checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976"
548
+
549
+ [[package]]
550
+ name = "linux-raw-sys"
551
+ version = "0.11.0"
552
+ source = "registry+https://github.com/rust-lang/crates.io-index"
553
+ checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039"
554
+
555
+ [[package]]
556
+ name = "log"
557
+ version = "0.4.28"
558
+ source = "registry+https://github.com/rust-lang/crates.io-index"
559
+ checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432"
560
+
561
+ [[package]]
562
+ name = "memchr"
563
+ version = "2.7.6"
564
+ source = "registry+https://github.com/rust-lang/crates.io-index"
565
+ checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273"
566
+
567
+ [[package]]
568
+ name = "mime"
569
+ version = "0.3.17"
570
+ source = "registry+https://github.com/rust-lang/crates.io-index"
571
+ checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
572
+
573
+ [[package]]
574
+ name = "nanorand"
575
+ version = "0.8.0"
576
+ source = "registry+https://github.com/rust-lang/crates.io-index"
577
+ checksum = "6e3d189da485332e96ba8a5ef646a311871abd7915bf06ac848a9117f19cf6e4"
578
+
579
+ [[package]]
580
+ name = "nix"
581
+ version = "0.30.1"
582
+ source = "registry+https://github.com/rust-lang/crates.io-index"
583
+ checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6"
584
+ dependencies = [
585
+ "bitflags",
586
+ "cfg-if",
587
+ "cfg_aliases",
588
+ "libc",
589
+ ]
590
+
591
+ [[package]]
592
+ name = "ntex"
593
+ version = "2.16.0"
594
+ source = "registry+https://github.com/rust-lang/crates.io-index"
595
+ checksum = "d4b41d1af2e11a7c29499395c2505550507749c35b29fa4a31234130abdb2285"
596
+ dependencies = [
597
+ "base64",
598
+ "bitflags",
599
+ "encoding_rs",
600
+ "env_logger",
601
+ "httparse",
602
+ "httpdate",
603
+ "log",
604
+ "mime",
605
+ "nanorand",
606
+ "ntex-bytes",
607
+ "ntex-codec",
608
+ "ntex-h2",
609
+ "ntex-http",
610
+ "ntex-io",
611
+ "ntex-macros",
612
+ "ntex-net",
613
+ "ntex-router",
614
+ "ntex-rt",
615
+ "ntex-server",
616
+ "ntex-service",
617
+ "ntex-tls",
618
+ "ntex-util",
619
+ "percent-encoding",
620
+ "pin-project-lite",
621
+ "regex",
622
+ "serde",
623
+ "serde_json",
624
+ "serde_urlencoded",
625
+ "sha1",
626
+ "thiserror",
627
+ "variadics_please",
628
+ ]
629
+
630
+ [[package]]
631
+ name = "ntex-bytes"
632
+ version = "0.1.30"
633
+ source = "registry+https://github.com/rust-lang/crates.io-index"
634
+ checksum = "53d23b86ef2f4a947e29e959a61bdae71c9d52a80df02936a9992bc6dbda9ddb"
635
+ dependencies = [
636
+ "bitflags",
637
+ "bytes",
638
+ "futures-core",
639
+ "serde",
640
+ ]
641
+
642
+ [[package]]
643
+ name = "ntex-codec"
644
+ version = "0.6.2"
645
+ source = "registry+https://github.com/rust-lang/crates.io-index"
646
+ checksum = "69a7e111d946bb915d712df496728ca2a120b1b5643f66c580f13023bce46fda"
647
+ dependencies = [
648
+ "ntex-bytes",
649
+ ]
650
+
651
+ [[package]]
652
+ name = "ntex-compio"
653
+ version = "0.4.0"
654
+ source = "registry+https://github.com/rust-lang/crates.io-index"
655
+ checksum = "10a040ee6290a2ed08e4eed25f2c978c5fe81b8f05c1665de39e905c7c93e43e"
656
+ dependencies = [
657
+ "compio-buf",
658
+ "compio-driver",
659
+ "compio-io",
660
+ "compio-net",
661
+ "compio-runtime",
662
+ "log",
663
+ "ntex-bytes",
664
+ "ntex-io",
665
+ "ntex-rt",
666
+ "ntex-util",
667
+ ]
668
+
669
+ [[package]]
670
+ name = "ntex-h2"
671
+ version = "1.13.0"
672
+ source = "registry+https://github.com/rust-lang/crates.io-index"
673
+ checksum = "2bfa6c16696b2b08cef057d581b67726213b71b42be69cda1977e351b9a36e5c"
674
+ dependencies = [
675
+ "ahash",
676
+ "bitflags",
677
+ "log",
678
+ "nanorand",
679
+ "ntex-bytes",
680
+ "ntex-codec",
681
+ "ntex-http",
682
+ "ntex-io",
683
+ "ntex-net",
684
+ "ntex-service",
685
+ "ntex-util",
686
+ "pin-project-lite",
687
+ "thiserror",
688
+ ]
689
+
690
+ [[package]]
691
+ name = "ntex-http"
692
+ version = "0.1.15"
693
+ source = "registry+https://github.com/rust-lang/crates.io-index"
694
+ checksum = "61da3d6c8bec83c5481d7e36ed4cf1a8cd0edee3e2fa411290932b17549d5cf2"
695
+ dependencies = [
696
+ "ahash",
697
+ "futures-core",
698
+ "http",
699
+ "itoa",
700
+ "log",
701
+ "ntex-bytes",
702
+ "serde",
703
+ "thiserror",
704
+ ]
705
+
706
+ [[package]]
707
+ name = "ntex-io"
708
+ version = "2.14.0"
709
+ source = "registry+https://github.com/rust-lang/crates.io-index"
710
+ checksum = "55eb13ef2e89f799ef0395911b6365052cab4cea65a7d2ef870e39732bf346b2"
711
+ dependencies = [
712
+ "bitflags",
713
+ "log",
714
+ "ntex-bytes",
715
+ "ntex-codec",
716
+ "ntex-service",
717
+ "ntex-util",
718
+ "pin-project-lite",
719
+ ]
720
+
721
+ [[package]]
722
+ name = "ntex-macros"
723
+ version = "0.1.4"
724
+ source = "registry+https://github.com/rust-lang/crates.io-index"
725
+ checksum = "7389855b7cf0a7cc4cd6748b6d31ad8d45481c9a4d6c977d289a469a362f7766"
726
+ dependencies = [
727
+ "proc-macro2",
728
+ "quote",
729
+ "syn 1.0.109",
730
+ ]
731
+
732
+ [[package]]
733
+ name = "ntex-net"
734
+ version = "2.8.1"
735
+ source = "registry+https://github.com/rust-lang/crates.io-index"
736
+ checksum = "a53c65509e4e3abf6490514e98a570d4cbcdbf18628e9569a02cc1d47c1e29b9"
737
+ dependencies = [
738
+ "bitflags",
739
+ "cfg-if",
740
+ "libc",
741
+ "log",
742
+ "ntex-bytes",
743
+ "ntex-compio",
744
+ "ntex-http",
745
+ "ntex-io",
746
+ "ntex-rt",
747
+ "ntex-service",
748
+ "ntex-util",
749
+ "thiserror",
750
+ ]
751
+
752
+ [[package]]
753
+ name = "ntex-router"
754
+ version = "0.5.3"
755
+ source = "registry+https://github.com/rust-lang/crates.io-index"
756
+ checksum = "bb9c68c26a87ffca54339be5f95223339db3e7bcc5d64733fef20812970a746f"
757
+ dependencies = [
758
+ "http",
759
+ "log",
760
+ "ntex-bytes",
761
+ "regex",
762
+ "serde",
763
+ ]
764
+
765
+ [[package]]
766
+ name = "ntex-rt"
767
+ version = "0.4.32"
768
+ source = "registry+https://github.com/rust-lang/crates.io-index"
769
+ checksum = "c30a11a3017f0bf2ea00d0bd6ba8f69e52906aa8c1f894a060341056d8b1eef8"
770
+ dependencies = [
771
+ "async-channel",
772
+ "compio-driver",
773
+ "compio-runtime",
774
+ "futures-timer",
775
+ "log",
776
+ "oneshot",
777
+ ]
778
+
779
+ [[package]]
780
+ name = "ntex-server"
781
+ version = "2.8.1"
782
+ source = "registry+https://github.com/rust-lang/crates.io-index"
783
+ checksum = "b886e739e5101ba06f083244bda0557997521c3ddf9b8f85ca74bc2aa165aa29"
784
+ dependencies = [
785
+ "async-channel",
786
+ "atomic-waker",
787
+ "core_affinity",
788
+ "ctrlc",
789
+ "log",
790
+ "ntex-bytes",
791
+ "ntex-net",
792
+ "ntex-rt",
793
+ "ntex-service",
794
+ "ntex-util",
795
+ "oneshot",
796
+ "polling",
797
+ "signal-hook",
798
+ "socket2",
799
+ ]
800
+
801
+ [[package]]
802
+ name = "ntex-service"
803
+ version = "3.5.0"
804
+ source = "registry+https://github.com/rust-lang/crates.io-index"
805
+ checksum = "35dc63ff1a6d11eac0f27682997e4d8c2055b151e45e10dc1d76347b49fa52b7"
806
+ dependencies = [
807
+ "slab",
808
+ "version_check",
809
+ ]
810
+
811
+ [[package]]
812
+ name = "ntex-tls"
813
+ version = "2.6.1"
814
+ source = "registry+https://github.com/rust-lang/crates.io-index"
815
+ checksum = "08c6c64b87ddbd44a9140810712ced321d3fec149d74e9b76beef11aa3bc8110"
816
+ dependencies = [
817
+ "log",
818
+ "ntex-bytes",
819
+ "ntex-io",
820
+ "ntex-net",
821
+ "ntex-service",
822
+ "ntex-util",
823
+ ]
824
+
825
+ [[package]]
826
+ name = "ntex-util"
827
+ version = "2.15.0"
828
+ source = "registry+https://github.com/rust-lang/crates.io-index"
829
+ checksum = "877b628fb2feecdd602174933568980aa96ac5c62766af60b09f38bf2bd10d09"
830
+ dependencies = [
831
+ "ahash",
832
+ "bitflags",
833
+ "futures-core",
834
+ "futures-timer",
835
+ "log",
836
+ "ntex-bytes",
837
+ "ntex-rt",
838
+ "ntex-service",
839
+ "pin-project-lite",
840
+ "slab",
841
+ "thiserror",
842
+ ]
843
+
844
+ [[package]]
845
+ name = "num_cpus"
846
+ version = "1.17.0"
847
+ source = "registry+https://github.com/rust-lang/crates.io-index"
848
+ checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b"
849
+ dependencies = [
850
+ "hermit-abi",
851
+ "libc",
852
+ ]
853
+
854
+ [[package]]
855
+ name = "once_cell"
856
+ version = "1.21.3"
857
+ source = "registry+https://github.com/rust-lang/crates.io-index"
858
+ checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"
859
+
860
+ [[package]]
861
+ name = "oneshot"
862
+ version = "0.1.11"
863
+ source = "registry+https://github.com/rust-lang/crates.io-index"
864
+ checksum = "b4ce411919553d3f9fa53a0880544cda985a112117a0444d5ff1e870a893d6ea"
865
+
866
+ [[package]]
867
+ name = "parking"
868
+ version = "2.2.1"
869
+ source = "registry+https://github.com/rust-lang/crates.io-index"
870
+ checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba"
871
+
872
+ [[package]]
873
+ name = "paste"
874
+ version = "1.0.15"
875
+ source = "registry+https://github.com/rust-lang/crates.io-index"
876
+ checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a"
877
+
878
+ [[package]]
879
+ name = "percent-encoding"
880
+ version = "2.3.2"
881
+ source = "registry+https://github.com/rust-lang/crates.io-index"
882
+ checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220"
883
+
884
+ [[package]]
885
+ name = "pin-project-lite"
886
+ version = "0.2.16"
887
+ source = "registry+https://github.com/rust-lang/crates.io-index"
888
+ checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b"
889
+
890
+ [[package]]
891
+ name = "pin-utils"
892
+ version = "0.1.0"
893
+ source = "registry+https://github.com/rust-lang/crates.io-index"
894
+ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
895
+
896
+ [[package]]
897
+ name = "polling"
898
+ version = "3.11.0"
899
+ source = "registry+https://github.com/rust-lang/crates.io-index"
900
+ checksum = "5d0e4f59085d47d8241c88ead0f274e8a0cb551f3625263c05eb8dd897c34218"
901
+ dependencies = [
902
+ "cfg-if",
903
+ "concurrent-queue",
904
+ "hermit-abi",
905
+ "pin-project-lite",
906
+ "rustix",
907
+ "windows-sys 0.61.2",
908
+ ]
909
+
910
+ [[package]]
911
+ name = "proc-macro2"
912
+ version = "1.0.101"
913
+ source = "registry+https://github.com/rust-lang/crates.io-index"
914
+ checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de"
915
+ dependencies = [
916
+ "unicode-ident",
917
+ ]
918
+
919
+ [[package]]
920
+ name = "quote"
921
+ version = "1.0.41"
922
+ source = "registry+https://github.com/rust-lang/crates.io-index"
923
+ checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1"
924
+ dependencies = [
925
+ "proc-macro2",
926
+ ]
927
+
928
+ [[package]]
929
+ name = "r-efi"
930
+ version = "5.3.0"
931
+ source = "registry+https://github.com/rust-lang/crates.io-index"
932
+ checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f"
933
+
934
+ [[package]]
935
+ name = "regex"
936
+ version = "1.12.2"
937
+ source = "registry+https://github.com/rust-lang/crates.io-index"
938
+ checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4"
939
+ dependencies = [
940
+ "aho-corasick",
941
+ "memchr",
942
+ "regex-automata",
943
+ "regex-syntax",
944
+ ]
945
+
946
+ [[package]]
947
+ name = "regex-automata"
948
+ version = "0.4.13"
949
+ source = "registry+https://github.com/rust-lang/crates.io-index"
950
+ checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c"
951
+ dependencies = [
952
+ "aho-corasick",
953
+ "memchr",
954
+ "regex-syntax",
955
+ ]
956
+
957
+ [[package]]
958
+ name = "regex-syntax"
959
+ version = "0.8.8"
960
+ source = "registry+https://github.com/rust-lang/crates.io-index"
961
+ checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58"
962
+
963
+ [[package]]
964
+ name = "rust-embed"
965
+ version = "8.8.0"
966
+ source = "registry+https://github.com/rust-lang/crates.io-index"
967
+ checksum = "fb44e1917075637ee8c7bcb865cf8830e3a92b5b1189e44e3a0ab5a0d5be314b"
968
+ dependencies = [
969
+ "rust-embed-impl",
970
+ "rust-embed-utils",
971
+ "walkdir",
972
+ ]
973
+
974
+ [[package]]
975
+ name = "rust-embed-impl"
976
+ version = "8.8.0"
977
+ source = "registry+https://github.com/rust-lang/crates.io-index"
978
+ checksum = "382499b49db77a7c19abd2a574f85ada7e9dbe125d5d1160fa5cad7c4cf71fc9"
979
+ dependencies = [
980
+ "proc-macro2",
981
+ "quote",
982
+ "rust-embed-utils",
983
+ "syn 2.0.107",
984
+ "walkdir",
985
+ ]
986
+
987
+ [[package]]
988
+ name = "rust-embed-utils"
989
+ version = "8.8.0"
990
+ source = "registry+https://github.com/rust-lang/crates.io-index"
991
+ checksum = "21fcbee55c2458836bcdbfffb6ec9ba74bbc23ca7aa6816015a3dd2c4d8fc185"
992
+ dependencies = [
993
+ "sha2",
994
+ "walkdir",
995
+ ]
996
+
997
+ [[package]]
998
+ name = "rustix"
999
+ version = "1.1.2"
1000
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1001
+ checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e"
1002
+ dependencies = [
1003
+ "bitflags",
1004
+ "errno",
1005
+ "libc",
1006
+ "linux-raw-sys",
1007
+ "windows-sys 0.61.2",
1008
+ ]
1009
+
1010
+ [[package]]
1011
+ name = "ryu"
1012
+ version = "1.0.20"
1013
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1014
+ checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f"
1015
+
1016
+ [[package]]
1017
+ name = "same-file"
1018
+ version = "1.0.6"
1019
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1020
+ checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
1021
+ dependencies = [
1022
+ "winapi-util",
1023
+ ]
1024
+
1025
+ [[package]]
1026
+ name = "scoped-tls"
1027
+ version = "1.0.1"
1028
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1029
+ checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294"
1030
+
1031
+ [[package]]
1032
+ name = "serde"
1033
+ version = "1.0.228"
1034
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1035
+ checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e"
1036
+ dependencies = [
1037
+ "serde_core",
1038
+ "serde_derive",
1039
+ ]
1040
+
1041
+ [[package]]
1042
+ name = "serde_core"
1043
+ version = "1.0.228"
1044
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1045
+ checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad"
1046
+ dependencies = [
1047
+ "serde_derive",
1048
+ ]
1049
+
1050
+ [[package]]
1051
+ name = "serde_derive"
1052
+ version = "1.0.228"
1053
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1054
+ checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79"
1055
+ dependencies = [
1056
+ "proc-macro2",
1057
+ "quote",
1058
+ "syn 2.0.107",
1059
+ ]
1060
+
1061
+ [[package]]
1062
+ name = "serde_json"
1063
+ version = "1.0.145"
1064
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1065
+ checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c"
1066
+ dependencies = [
1067
+ "itoa",
1068
+ "memchr",
1069
+ "ryu",
1070
+ "serde",
1071
+ "serde_core",
1072
+ ]
1073
+
1074
+ [[package]]
1075
+ name = "serde_spanned"
1076
+ version = "1.0.3"
1077
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1078
+ checksum = "e24345aa0fe688594e73770a5f6d1b216508b4f93484c0026d521acd30134392"
1079
+ dependencies = [
1080
+ "serde_core",
1081
+ ]
1082
+
1083
+ [[package]]
1084
+ name = "serde_urlencoded"
1085
+ version = "0.7.1"
1086
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1087
+ checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
1088
+ dependencies = [
1089
+ "form_urlencoded",
1090
+ "itoa",
1091
+ "ryu",
1092
+ "serde",
1093
+ ]
1094
+
1095
+ [[package]]
1096
+ name = "sha1"
1097
+ version = "0.10.6"
1098
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1099
+ checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba"
1100
+ dependencies = [
1101
+ "cfg-if",
1102
+ "cpufeatures",
1103
+ "digest",
1104
+ ]
1105
+
1106
+ [[package]]
1107
+ name = "sha2"
1108
+ version = "0.10.9"
1109
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1110
+ checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283"
1111
+ dependencies = [
1112
+ "cfg-if",
1113
+ "cpufeatures",
1114
+ "digest",
1115
+ ]
1116
+
1117
+ [[package]]
1118
+ name = "shlex"
1119
+ version = "1.3.0"
1120
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1121
+ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
1122
+
1123
+ [[package]]
1124
+ name = "sign"
1125
+ version = "1.2.0"
1126
+ dependencies = [
1127
+ "cc",
1128
+ "data-encoding",
1129
+ "ntex",
1130
+ "rust-embed",
1131
+ "serde",
1132
+ "thiserror",
1133
+ "toml",
1134
+ ]
1135
+
1136
+ [[package]]
1137
+ name = "signal-hook"
1138
+ version = "0.3.18"
1139
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1140
+ checksum = "d881a16cf4426aa584979d30bd82cb33429027e42122b169753d6ef1085ed6e2"
1141
+ dependencies = [
1142
+ "libc",
1143
+ "signal-hook-registry",
1144
+ ]
1145
+
1146
+ [[package]]
1147
+ name = "signal-hook-registry"
1148
+ version = "1.4.6"
1149
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1150
+ checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b"
1151
+ dependencies = [
1152
+ "libc",
1153
+ ]
1154
+
1155
+ [[package]]
1156
+ name = "slab"
1157
+ version = "0.4.11"
1158
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1159
+ checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589"
1160
+
1161
+ [[package]]
1162
+ name = "socket2"
1163
+ version = "0.5.10"
1164
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1165
+ checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678"
1166
+ dependencies = [
1167
+ "libc",
1168
+ "windows-sys 0.52.0",
1169
+ ]
1170
+
1171
+ [[package]]
1172
+ name = "syn"
1173
+ version = "1.0.109"
1174
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1175
+ checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
1176
+ dependencies = [
1177
+ "proc-macro2",
1178
+ "quote",
1179
+ "unicode-ident",
1180
+ ]
1181
+
1182
+ [[package]]
1183
+ name = "syn"
1184
+ version = "2.0.107"
1185
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1186
+ checksum = "2a26dbd934e5451d21ef060c018dae56fc073894c5a7896f882928a76e6d081b"
1187
+ dependencies = [
1188
+ "proc-macro2",
1189
+ "quote",
1190
+ "unicode-ident",
1191
+ ]
1192
+
1193
+ [[package]]
1194
+ name = "thiserror"
1195
+ version = "2.0.17"
1196
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1197
+ checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8"
1198
+ dependencies = [
1199
+ "thiserror-impl",
1200
+ ]
1201
+
1202
+ [[package]]
1203
+ name = "thiserror-impl"
1204
+ version = "2.0.17"
1205
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1206
+ checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913"
1207
+ dependencies = [
1208
+ "proc-macro2",
1209
+ "quote",
1210
+ "syn 2.0.107",
1211
+ ]
1212
+
1213
+ [[package]]
1214
+ name = "toml"
1215
+ version = "0.9.8"
1216
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1217
+ checksum = "f0dc8b1fb61449e27716ec0e1bdf0f6b8f3e8f6b05391e8497b8b6d7804ea6d8"
1218
+ dependencies = [
1219
+ "indexmap",
1220
+ "serde_core",
1221
+ "serde_spanned",
1222
+ "toml_datetime",
1223
+ "toml_parser",
1224
+ "toml_writer",
1225
+ "winnow",
1226
+ ]
1227
+
1228
+ [[package]]
1229
+ name = "toml_datetime"
1230
+ version = "0.7.3"
1231
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1232
+ checksum = "f2cdb639ebbc97961c51720f858597f7f24c4fc295327923af55b74c3c724533"
1233
+ dependencies = [
1234
+ "serde_core",
1235
+ ]
1236
+
1237
+ [[package]]
1238
+ name = "toml_parser"
1239
+ version = "1.0.4"
1240
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1241
+ checksum = "c0cbe268d35bdb4bb5a56a2de88d0ad0eb70af5384a99d648cd4b3d04039800e"
1242
+ dependencies = [
1243
+ "winnow",
1244
+ ]
1245
+
1246
+ [[package]]
1247
+ name = "toml_writer"
1248
+ version = "1.0.4"
1249
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1250
+ checksum = "df8b2b54733674ad286d16267dcfc7a71ed5c776e4ac7aa3c3e2561f7c637bf2"
1251
+
1252
+ [[package]]
1253
+ name = "tracing"
1254
+ version = "0.1.41"
1255
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1256
+ checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0"
1257
+ dependencies = [
1258
+ "pin-project-lite",
1259
+ "tracing-core",
1260
+ ]
1261
+
1262
+ [[package]]
1263
+ name = "tracing-core"
1264
+ version = "0.1.34"
1265
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1266
+ checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678"
1267
+
1268
+ [[package]]
1269
+ name = "typenum"
1270
+ version = "1.19.0"
1271
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1272
+ checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb"
1273
+
1274
+ [[package]]
1275
+ name = "unicode-ident"
1276
+ version = "1.0.19"
1277
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1278
+ checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d"
1279
+
1280
+ [[package]]
1281
+ name = "variadics_please"
1282
+ version = "1.1.0"
1283
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1284
+ checksum = "41b6d82be61465f97d42bd1d15bf20f3b0a3a0905018f38f9d6f6962055b0b5c"
1285
+ dependencies = [
1286
+ "proc-macro2",
1287
+ "quote",
1288
+ "syn 2.0.107",
1289
+ ]
1290
+
1291
+ [[package]]
1292
+ name = "version_check"
1293
+ version = "0.9.5"
1294
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1295
+ checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
1296
+
1297
+ [[package]]
1298
+ name = "walkdir"
1299
+ version = "2.5.0"
1300
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1301
+ checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b"
1302
+ dependencies = [
1303
+ "same-file",
1304
+ "winapi-util",
1305
+ ]
1306
+
1307
+ [[package]]
1308
+ name = "wasip2"
1309
+ version = "1.0.1+wasi-0.2.4"
1310
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1311
+ checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7"
1312
+ dependencies = [
1313
+ "wit-bindgen",
1314
+ ]
1315
+
1316
+ [[package]]
1317
+ name = "widestring"
1318
+ version = "1.2.1"
1319
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1320
+ checksum = "72069c3113ab32ab29e5584db3c6ec55d416895e60715417b5b883a357c3e471"
1321
+
1322
+ [[package]]
1323
+ name = "winapi"
1324
+ version = "0.3.9"
1325
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1326
+ checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
1327
+ dependencies = [
1328
+ "winapi-i686-pc-windows-gnu",
1329
+ "winapi-x86_64-pc-windows-gnu",
1330
+ ]
1331
+
1332
+ [[package]]
1333
+ name = "winapi-i686-pc-windows-gnu"
1334
+ version = "0.4.0"
1335
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1336
+ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
1337
+
1338
+ [[package]]
1339
+ name = "winapi-util"
1340
+ version = "0.1.11"
1341
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1342
+ checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22"
1343
+ dependencies = [
1344
+ "windows-sys 0.61.2",
1345
+ ]
1346
+
1347
+ [[package]]
1348
+ name = "winapi-x86_64-pc-windows-gnu"
1349
+ version = "0.4.0"
1350
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1351
+ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
1352
+
1353
+ [[package]]
1354
+ name = "windows-link"
1355
+ version = "0.2.1"
1356
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1357
+ checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5"
1358
+
1359
+ [[package]]
1360
+ name = "windows-sys"
1361
+ version = "0.52.0"
1362
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1363
+ checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
1364
+ dependencies = [
1365
+ "windows-targets",
1366
+ ]
1367
+
1368
+ [[package]]
1369
+ name = "windows-sys"
1370
+ version = "0.61.2"
1371
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1372
+ checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc"
1373
+ dependencies = [
1374
+ "windows-link",
1375
+ ]
1376
+
1377
+ [[package]]
1378
+ name = "windows-targets"
1379
+ version = "0.52.6"
1380
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1381
+ checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
1382
+ dependencies = [
1383
+ "windows_aarch64_gnullvm",
1384
+ "windows_aarch64_msvc",
1385
+ "windows_i686_gnu",
1386
+ "windows_i686_gnullvm",
1387
+ "windows_i686_msvc",
1388
+ "windows_x86_64_gnu",
1389
+ "windows_x86_64_gnullvm",
1390
+ "windows_x86_64_msvc",
1391
+ ]
1392
+
1393
+ [[package]]
1394
+ name = "windows_aarch64_gnullvm"
1395
+ version = "0.52.6"
1396
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1397
+ checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
1398
+
1399
+ [[package]]
1400
+ name = "windows_aarch64_msvc"
1401
+ version = "0.52.6"
1402
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1403
+ checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
1404
+
1405
+ [[package]]
1406
+ name = "windows_i686_gnu"
1407
+ version = "0.52.6"
1408
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1409
+ checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
1410
+
1411
+ [[package]]
1412
+ name = "windows_i686_gnullvm"
1413
+ version = "0.52.6"
1414
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1415
+ checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
1416
+
1417
+ [[package]]
1418
+ name = "windows_i686_msvc"
1419
+ version = "0.52.6"
1420
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1421
+ checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
1422
+
1423
+ [[package]]
1424
+ name = "windows_x86_64_gnu"
1425
+ version = "0.52.6"
1426
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1427
+ checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
1428
+
1429
+ [[package]]
1430
+ name = "windows_x86_64_gnullvm"
1431
+ version = "0.52.6"
1432
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1433
+ checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
1434
+
1435
+ [[package]]
1436
+ name = "windows_x86_64_msvc"
1437
+ version = "0.52.6"
1438
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1439
+ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
1440
+
1441
+ [[package]]
1442
+ name = "winnow"
1443
+ version = "0.7.13"
1444
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1445
+ checksum = "21a0236b59786fed61e2a80582dd500fe61f18b5dca67a4a067d0bc9039339cf"
1446
+
1447
+ [[package]]
1448
+ name = "wit-bindgen"
1449
+ version = "0.46.0"
1450
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1451
+ checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59"
1452
+
1453
+ [[package]]
1454
+ name = "zerocopy"
1455
+ version = "0.8.27"
1456
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1457
+ checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c"
1458
+ dependencies = [
1459
+ "zerocopy-derive",
1460
+ ]
1461
+
1462
+ [[package]]
1463
+ name = "zerocopy-derive"
1464
+ version = "0.8.27"
1465
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1466
+ checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831"
1467
+ dependencies = [
1468
+ "proc-macro2",
1469
+ "quote",
1470
+ "syn 2.0.107",
1471
+ ]
Cargo.toml ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [package]
2
+ name = "sign"
3
+ version = "1.2.0"
4
+ edition = "2024"
5
+ readme = "README.md"
6
+ license = "AGPL-3.0-only"
7
+ authors = ["Moew72 <Moew72@proton.me>"]
8
+
9
+ [build-dependencies]
10
+ cc = "1.2.41"
11
+
12
+ [dependencies]
13
+ data-encoding = "2.9.0"
14
+ ntex = { version = "2.16.0", features = ["compio"] }
15
+ rust-embed = "8.8.0"
16
+ serde = { version = "1.0.228", features = ["derive"] }
17
+ thiserror = "2.0.17"
18
+ toml = "0.9.8"
19
+
20
+ [profile.release]
21
+ codegen-units = 1
22
+ lto = true
23
+ strip = true
build.rs ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ // SPDX-License-Identifier: AGPL-3.0-only
2
+ // Copyright (C) 2025 Moew72 <Moew72@proton.me>
3
+
4
+ fn main() {
5
+ println!("cargo:rerun-if-changed=src/sign.c");
6
+ cc::Build::new().file("src/sign.c").compile("sign");
7
+ }
sign.config.toml ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ module_path = "./wrapper.node"
2
+ listen = "127.0.0.1:8080"
3
+ offset = 0x5ADE220
4
+ version = "3.2.19-39038"
src/appinfo/3.2.19-39038.json ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "Os": "Linux",
3
+ "VendorOs": "linux",
4
+ "Kernel": "Linux",
5
+ "CurrentVersion": "3.2.19-39038",
6
+ "MiscBitmap": 32764,
7
+ "PtVersion": "2.0.0",
8
+ "SsoVersion": 19,
9
+ "PackageName": "com.tencent.qq",
10
+ "WtLoginSdk": "nt.wtlogin.0.0.1",
11
+ "AppId": 1600001615,
12
+ "SubAppId": 537313942,
13
+ "AppIdQrCode": 537313942,
14
+ "AppClientVersion": 39038,
15
+ "MainSigMap": 169742560,
16
+ "SubSigMap": 0,
17
+ "NTLoginType": 1
18
+ }
src/config.rs ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // SPDX-License-Identifier: AGPL-3.0-only
2
+ // Copyright (C) 2025 Moew72 <Moew72@proton.me>
3
+
4
+ use std::fs;
5
+ use std::io::Read;
6
+ use std::sync::LazyLock;
7
+
8
+ use serde::Deserialize;
9
+
10
+ pub(crate) static CONFIG: LazyLock<Config> = LazyLock::new(|| {
11
+ if fs::exists("sign.config.toml").unwrap() {
12
+ let mut buf = Vec::new();
13
+ fs::File::open("sign.config.toml")
14
+ .unwrap()
15
+ .read_to_end(&mut buf)
16
+ .unwrap();
17
+ toml::from_slice::<Config>(&buf).unwrap()
18
+ } else {
19
+ Config::default()
20
+ }
21
+ });
22
+
23
+ #[derive(Debug, Deserialize)]
24
+ pub(crate) struct Config {
25
+ pub(crate) module_path: String,
26
+ pub(crate) listen: String,
27
+ pub(crate) offset: usize,
28
+ pub(crate) version: String,
29
+ }
30
+
31
+ impl Default for Config {
32
+ fn default() -> Self {
33
+ Self {
34
+ module_path: "./wrapper.node".to_string(),
35
+ listen: "127.0.0.1:8080".to_string(),
36
+ offset: 0x5ADE220,
37
+ version: "3.2.19-39038".to_string(),
38
+ }
39
+ }
40
+ }
src/error.rs ADDED
@@ -0,0 +1,48 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // SPDX-License-Identifier: AGPL-3.0-only
2
+ // Copyright (C) 2025 Moew72 <Moew72@proton.me>
3
+
4
+ use ntex::web;
5
+ use serde::Serialize;
6
+
7
+ #[derive(thiserror::Error, Debug)]
8
+ pub(crate) enum Error {
9
+ #[error("std io: `{0}`")]
10
+ Io(#[from] std::io::Error),
11
+ #[error("from utf8: `{0}`")]
12
+ FromUtf8(#[from] std::string::FromUtf8Error),
13
+ #[error("data_encoding: `{0}`")]
14
+ DataEncoding(#[from] data_encoding::DecodeError),
15
+ #[error("ntex runtime JoinHandle: `{0}`")]
16
+ NtexRuntimeJoinHandle(#[from] ntex::rt::JoinError),
17
+ #[error("other: `{0}`")]
18
+ Other(String),
19
+ }
20
+
21
+ pub type Result<T> = std::result::Result<T, Error>;
22
+
23
+ pub(crate) trait Context<T> {
24
+ fn context(self, ctx: Error) -> Result<T>;
25
+ }
26
+
27
+ impl<T> Context<T> for Option<T> {
28
+ fn context(self, ctx: Error) -> Result<T> {
29
+ match self {
30
+ Some(v) => Ok(v),
31
+ None => Err(ctx),
32
+ }
33
+ }
34
+ }
35
+
36
+ impl web::WebResponseError for Error {
37
+ fn error_response(&self, _: &ntex::web::HttpRequest) -> ntex::http::Response {
38
+ #[derive(Debug, Serialize)]
39
+ struct RespBody {
40
+ status: u16,
41
+ message: String,
42
+ }
43
+ web::HttpResponse::build(self.status_code()).json(&RespBody {
44
+ status: 400,
45
+ message: self.to_string(),
46
+ })
47
+ }
48
+ }
src/main.rs ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // SPDX-License-Identifier: AGPL-3.0-only
2
+ // Copyright (C) 2025 Moew72 <Moew72@proton.me>
3
+
4
+ mod config;
5
+ mod error;
6
+ mod service;
7
+ mod sign;
8
+
9
+ use ntex::web;
10
+
11
+ use crate::{
12
+ config::CONFIG,
13
+ sign::{load_module, set_module_path, set_offset, unload_module},
14
+ };
15
+
16
+ #[ntex::main]
17
+ async fn main() -> std::io::Result<()> {
18
+ set_module_path(CONFIG.module_path.clone());
19
+ set_offset(CONFIG.offset);
20
+ load_module();
21
+
22
+ web::HttpServer::new(|| {
23
+ web::App::new()
24
+ .service(service::sign_get)
25
+ .service(service::sign_post)
26
+ .service(service::appinfo)
27
+ })
28
+ .bind(CONFIG.listen.clone())?
29
+ .run()
30
+ .await?;
31
+
32
+ unload_module();
33
+
34
+ Ok(())
35
+ }
src/service.rs ADDED
@@ -0,0 +1,87 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // SPDX-License-Identifier: AGPL-3.0-only
2
+ // Copyright (C) 2025 Moew72 <Moew72@proton.me>
3
+
4
+ use std::fs;
5
+ use std::io::Read;
6
+
7
+ use data_encoding::HEXUPPER;
8
+ use ntex::http::Response;
9
+ use ntex::http::StatusCode;
10
+ use ntex::http::header::CONTENT_TYPE;
11
+ use ntex::rt::spawn;
12
+ use ntex::web;
13
+ use serde::{Deserialize, Serialize};
14
+
15
+ use crate::config::CONFIG;
16
+ use crate::error::{Context, Error, Result};
17
+
18
+ #[derive(rust_embed::Embed)]
19
+ #[folder = "src/appinfo"]
20
+ struct Asset;
21
+
22
+ #[derive(Deserialize)]
23
+ struct Params {
24
+ cmd: String,
25
+ src: String,
26
+ seq: i32,
27
+ }
28
+
29
+ #[web::get("/")]
30
+ pub(crate) async fn sign_get(params: web::types::Query<Params>) -> Result<Response> {
31
+ sign_common(params.0).await
32
+ }
33
+
34
+ #[web::post("/")]
35
+ pub(crate) async fn sign_post(params: web::types::Json<Params>) -> Result<Response> {
36
+ sign_common(params.0).await
37
+ }
38
+
39
+ #[inline]
40
+ async fn sign_common(params: Params) -> Result<Response> {
41
+ #[derive(Serialize)]
42
+ struct RespBody {
43
+ platform: String,
44
+ version: String,
45
+ value: Value,
46
+ }
47
+ #[derive(Serialize)]
48
+ struct Value {
49
+ token: String,
50
+ extra: String,
51
+ sign: String,
52
+ }
53
+ let src = HEXUPPER.decode(params.src.to_uppercase().as_bytes())?;
54
+ let [token, extra, sign] =
55
+ spawn(async move { crate::sign::sign(&params.cmd, &src, params.seq) }).await?;
56
+ let token = HEXUPPER.encode(&token);
57
+ let extra = HEXUPPER.encode(&extra);
58
+ let sign = HEXUPPER.encode(&sign);
59
+ let value = Value { token, extra, sign };
60
+ let body = RespBody {
61
+ platform: "Linux".to_string(),
62
+ value,
63
+ version: CONFIG.version.clone(),
64
+ };
65
+ let resp = web::HttpResponse::Ok().json(&body);
66
+ Ok(resp)
67
+ }
68
+
69
+ #[web::get("/appinfo")]
70
+ pub(crate) async fn appinfo() -> Result<Response> {
71
+ let path = &format!("{}.json", CONFIG.version.clone());
72
+ let body = if fs::exists(path)? {
73
+ let mut buf = String::new();
74
+ fs::File::open(path)?.read_to_string(&mut buf)?;
75
+ buf
76
+ } else {
77
+ let data = Asset::get(path)
78
+ .context(Error::Other(format!("appinfo {} not found.", path)))?
79
+ .data
80
+ .to_vec();
81
+ String::from_utf8(data)?
82
+ };
83
+ let resp = web::HttpResponse::build(StatusCode::OK)
84
+ .set_header(CONTENT_TYPE, "application/json")
85
+ .body(body);
86
+ Ok(resp)
87
+ }
src/sign.c ADDED
@@ -0,0 +1,65 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // SPDX-License-Identifier: AGPL-3.0-only
2
+ // Copyright (C) 2025 Moew72 <Moew72@proton.me>
3
+
4
+ #define _GNU_SOURCE
5
+ #include <stdio.h>
6
+ #include <stdlib.h>
7
+ #include <string.h>
8
+ #include <dlfcn.h>
9
+
10
+ #ifndef __USE_GNU
11
+ #define __USE_GNU
12
+ #endif
13
+ #include <link.h>
14
+
15
+ typedef long long (*func)(char*, unsigned char*, int, int, unsigned char*);
16
+
17
+ char* module_path;
18
+ uintptr_t offset;
19
+ func sign;
20
+
21
+ static uintptr_t module_base;
22
+ static void* module;
23
+
24
+ int callback(struct dl_phdr_info* info, size_t, void*) {
25
+ if (info->dlpi_name && strstr(info->dlpi_name, "wrapper.node")) {
26
+ module_base = info->dlpi_addr;
27
+ printf("Found wrapper.node at base: 0x%lx\n", module_base);
28
+ return 1;
29
+ }
30
+ return 0;
31
+ }
32
+
33
+ int load_module() {
34
+ module = dlopen(module_path, RTLD_LAZY);
35
+ if (!module) {
36
+ fprintf(stderr, "dlopen failed: %s\n", dlerror());
37
+ return 1;
38
+ }
39
+
40
+ printf("Module handle: %p\n", module);
41
+
42
+ dl_iterate_phdr(callback, NULL);
43
+
44
+ if (module_base == 0) {
45
+ fprintf(stderr, "Failed to find module base\n");
46
+ dlclose(module);
47
+ return 1;
48
+ }
49
+
50
+ sign = (func)(module_base + offset);
51
+
52
+ printf("Calculated function address: %p\n", (void*)sign);
53
+
54
+ if ((uintptr_t)sign < 0x10000) {
55
+ fprintf(stderr, "Invalid function pointer: %p\n", (void*)sign);
56
+ dlclose(module);
57
+ return 1;
58
+ }
59
+
60
+ return 0;
61
+ }
62
+
63
+ void unload_module() {
64
+ dlclose(module);
65
+ }
src/sign.rs ADDED
@@ -0,0 +1,71 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // SPDX-License-Identifier: AGPL-3.0-only
2
+ // Copyright (C) 2025 Moew72 <Moew72@proton.me>
3
+
4
+ use std::ffi::CString;
5
+ use std::mem::ManuallyDrop;
6
+
7
+ mod lib {
8
+ use std::ffi::*;
9
+ type Func = extern "C" fn(*const c_char, *const c_uchar, c_int, c_int, *mut c_uchar);
10
+ unsafe extern "C" {
11
+ pub(super) static mut module_path: *const c_char;
12
+ pub(super) static mut offset: usize;
13
+ pub(super) static mut sign: Func;
14
+ pub(super) fn load_module() -> c_int;
15
+ pub(super) fn unload_module();
16
+ }
17
+ }
18
+
19
+ pub(crate) fn set_module_path(path: String) {
20
+ let path = CString::new(path.as_str()).unwrap();
21
+ unsafe {
22
+ lib::module_path = ManuallyDrop::new(path).as_ptr();
23
+ }
24
+ }
25
+
26
+ pub(crate) fn set_offset(offset: usize) {
27
+ unsafe {
28
+ lib::offset = offset;
29
+ }
30
+ }
31
+
32
+ pub(crate) fn load_module() {
33
+ let ret = unsafe { lib::load_module() };
34
+ if ret != 0 {
35
+ panic!("load module error.");
36
+ }
37
+ }
38
+
39
+ pub(crate) fn unload_module() {
40
+ unsafe { lib::unload_module() }
41
+ }
42
+
43
+ pub(crate) fn sign(cmd: &str, src: &[u8], seq: i32) -> [Vec<u8>; 3] {
44
+ const TOKEN_DATA_OFFSET: usize = 0x000;
45
+ const TOKEN_LEN_OFFSET: usize = 0x0FF;
46
+ const EXTRA_DATA_OFFSET: usize = 0x100;
47
+ const EXTRA_LEN_OFFSET: usize = 0x1FF;
48
+ const SIGN_DATA_OFFSET: usize = 0x200;
49
+ const SIGN_LEN_OFFSET: usize = 0x2FF;
50
+
51
+ let c_cmd = CString::new(cmd).unwrap();
52
+ let mut buf = [0u8; 0x300];
53
+ unsafe {
54
+ lib::sign(
55
+ c_cmd.as_ptr(),
56
+ src.as_ptr(),
57
+ src.len() as i32,
58
+ seq,
59
+ buf.as_mut_ptr(),
60
+ )
61
+ };
62
+
63
+ let token_len = buf[TOKEN_LEN_OFFSET];
64
+ let token = &buf[TOKEN_DATA_OFFSET..TOKEN_DATA_OFFSET + token_len as usize];
65
+ let extra_len = buf[EXTRA_LEN_OFFSET];
66
+ let extra = &buf[EXTRA_DATA_OFFSET..EXTRA_DATA_OFFSET + extra_len as usize];
67
+ let sign_len = buf[SIGN_LEN_OFFSET];
68
+ let sign = &buf[SIGN_DATA_OFFSET..SIGN_DATA_OFFSET + sign_len as usize];
69
+
70
+ [Vec::from(token), Vec::from(extra), Vec::from(sign)]
71
+ }
symbols.c ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ // SPDX-License-Identifier: AGPL-3.0-only
2
+ // Copyright (C) 2025 Moew72 <Moew72@proton.me>
3
+
4
+ void qq_magic_napi_register(void*) { }
5
+ void _ZTVN4vips7VOptionE(void*) { }
6
+ void _ZNSt6thread6_StateD2Ev(void*) { }