Create cargo vanadium app

+10
.cargo/config.toml
··· 1 + [build] 2 + target = "x86_64-unknown-linux-gnu" 3 + 4 + 5 + [target.riscv32imc-unknown-none-elf] 6 + rustflags = [ 7 + # The VM expects ELF binaries with 2 segments (rx and rw). Don't put 8 + # read-only non-executable sections in their own segment. 9 + "-Clink-arg=--no-rosegment", 10 + ]
+1
.gitignore
··· 1 + target/
+1773
Cargo.lock
··· 1 + # This file is automatically @generated by Cargo. 2 + # It is not intended for manual editing. 3 + version = 4 4 + 5 + [[package]] 6 + name = "addr2line" 7 + version = "0.24.2" 8 + source = "registry+https://github.com/rust-lang/crates.io-index" 9 + checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" 10 + dependencies = [ 11 + "gimli", 12 + ] 13 + 14 + [[package]] 15 + name = "adler2" 16 + version = "2.0.0" 17 + source = "registry+https://github.com/rust-lang/crates.io-index" 18 + checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" 19 + 20 + [[package]] 21 + name = "aho-corasick" 22 + version = "1.1.3" 23 + source = "registry+https://github.com/rust-lang/crates.io-index" 24 + checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" 25 + dependencies = [ 26 + "memchr", 27 + ] 28 + 29 + [[package]] 30 + name = "anstream" 31 + version = "0.6.19" 32 + source = "registry+https://github.com/rust-lang/crates.io-index" 33 + checksum = "301af1932e46185686725e0fad2f8f2aa7da69dd70bf6ecc44d6b703844a3933" 34 + dependencies = [ 35 + "anstyle", 36 + "anstyle-parse", 37 + "anstyle-query", 38 + "anstyle-wincon", 39 + "colorchoice", 40 + "is_terminal_polyfill", 41 + "utf8parse", 42 + ] 43 + 44 + [[package]] 45 + name = "anstyle" 46 + version = "1.0.11" 47 + source = "registry+https://github.com/rust-lang/crates.io-index" 48 + checksum = "862ed96ca487e809f1c8e5a8447f6ee2cf102f846893800b20cebdf541fc6bbd" 49 + 50 + [[package]] 51 + name = "anstyle-parse" 52 + version = "0.2.7" 53 + source = "registry+https://github.com/rust-lang/crates.io-index" 54 + checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2" 55 + dependencies = [ 56 + "utf8parse", 57 + ] 58 + 59 + [[package]] 60 + name = "anstyle-query" 61 + version = "1.1.3" 62 + source = "registry+https://github.com/rust-lang/crates.io-index" 63 + checksum = "6c8bdeb6047d8983be085bab0ba1472e6dc604e7041dbf6fcd5e71523014fae9" 64 + dependencies = [ 65 + "windows-sys 0.59.0", 66 + ] 67 + 68 + [[package]] 69 + name = "anstyle-wincon" 70 + version = "3.0.9" 71 + source = "registry+https://github.com/rust-lang/crates.io-index" 72 + checksum = "403f75924867bb1033c59fbf0797484329750cfbe3c4325cd33127941fabc882" 73 + dependencies = [ 74 + "anstyle", 75 + "once_cell_polyfill", 76 + "windows-sys 0.59.0", 77 + ] 78 + 79 + [[package]] 80 + name = "arrayref" 81 + version = "0.3.9" 82 + source = "registry+https://github.com/rust-lang/crates.io-index" 83 + checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" 84 + 85 + [[package]] 86 + name = "async-trait" 87 + version = "0.1.88" 88 + source = "registry+https://github.com/rust-lang/crates.io-index" 89 + checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5" 90 + dependencies = [ 91 + "proc-macro2", 92 + "quote", 93 + "syn", 94 + ] 95 + 96 + [[package]] 97 + name = "autocfg" 98 + version = "1.4.0" 99 + source = "registry+https://github.com/rust-lang/crates.io-index" 100 + checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" 101 + 102 + [[package]] 103 + name = "backtrace" 104 + version = "0.3.75" 105 + source = "registry+https://github.com/rust-lang/crates.io-index" 106 + checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002" 107 + dependencies = [ 108 + "addr2line", 109 + "cfg-if", 110 + "libc", 111 + "miniz_oxide", 112 + "object", 113 + "rustc-demangle", 114 + "windows-targets 0.52.6", 115 + ] 116 + 117 + [[package]] 118 + name = "base-x" 119 + version = "0.2.11" 120 + source = "registry+https://github.com/rust-lang/crates.io-index" 121 + checksum = "4cbbc9d0964165b47557570cce6c952866c2678457aca742aafc9fb771d30270" 122 + 123 + [[package]] 124 + name = "base16ct" 125 + version = "0.2.0" 126 + source = "registry+https://github.com/rust-lang/crates.io-index" 127 + checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" 128 + 129 + [[package]] 130 + name = "base58" 131 + version = "0.2.0" 132 + source = "registry+https://github.com/rust-lang/crates.io-index" 133 + checksum = "6107fe1be6682a68940da878d9e9f5e90ca5745b3dec9fd1bb393c8777d4f581" 134 + 135 + [[package]] 136 + name = "base64ct" 137 + version = "1.8.0" 138 + source = "registry+https://github.com/rust-lang/crates.io-index" 139 + checksum = "55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba" 140 + 141 + [[package]] 142 + name = "bip32" 143 + version = "0.5.3" 144 + source = "registry+https://github.com/rust-lang/crates.io-index" 145 + checksum = "db40d3dfbeab4e031d78c844642fa0caa0b0db11ce1607ac9d2986dff1405c69" 146 + dependencies = [ 147 + "bs58", 148 + "hmac", 149 + "k256", 150 + "once_cell", 151 + "pbkdf2", 152 + "rand_core 0.6.4", 153 + "ripemd", 154 + "secp256k1", 155 + "sha2", 156 + "subtle", 157 + "zeroize", 158 + ] 159 + 160 + [[package]] 161 + name = "bitflags" 162 + version = "2.9.1" 163 + source = "registry+https://github.com/rust-lang/crates.io-index" 164 + checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" 165 + 166 + [[package]] 167 + name = "block-buffer" 168 + version = "0.10.4" 169 + source = "registry+https://github.com/rust-lang/crates.io-index" 170 + checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" 171 + dependencies = [ 172 + "generic-array", 173 + ] 174 + 175 + [[package]] 176 + name = "bs58" 177 + version = "0.5.1" 178 + source = "registry+https://github.com/rust-lang/crates.io-index" 179 + checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" 180 + dependencies = [ 181 + "sha2", 182 + ] 183 + 184 + [[package]] 185 + name = "byteorder" 186 + version = "1.5.0" 187 + source = "registry+https://github.com/rust-lang/crates.io-index" 188 + checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" 189 + 190 + [[package]] 191 + name = "bytes" 192 + version = "1.10.1" 193 + source = "registry+https://github.com/rust-lang/crates.io-index" 194 + checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" 195 + 196 + [[package]] 197 + name = "cargo_toml" 198 + version = "0.22.1" 199 + source = "registry+https://github.com/rust-lang/crates.io-index" 200 + checksum = "02260d489095346e5cafd04dea8e8cb54d1d74fcd759022a9b72986ebe9a1257" 201 + dependencies = [ 202 + "serde", 203 + "toml", 204 + ] 205 + 206 + [[package]] 207 + name = "cbor4ii" 208 + version = "0.2.14" 209 + source = "registry+https://github.com/rust-lang/crates.io-index" 210 + checksum = "b544cf8c89359205f4f990d0e6f3828db42df85b5dac95d09157a250eb0749c4" 211 + 212 + [[package]] 213 + name = "cc" 214 + version = "1.2.26" 215 + source = "registry+https://github.com/rust-lang/crates.io-index" 216 + checksum = "956a5e21988b87f372569b66183b78babf23ebc2e744b733e4350a752c4dafac" 217 + dependencies = [ 218 + "shlex", 219 + ] 220 + 221 + [[package]] 222 + name = "cfg-if" 223 + version = "1.0.0" 224 + source = "registry+https://github.com/rust-lang/crates.io-index" 225 + checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 226 + 227 + [[package]] 228 + name = "cfg_aliases" 229 + version = "0.2.1" 230 + source = "registry+https://github.com/rust-lang/crates.io-index" 231 + checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" 232 + 233 + [[package]] 234 + name = "cid" 235 + version = "0.11.1" 236 + source = "git+https://github.com/edouardparis/rust-cid?branch=fix-dep-serde_bytes-features#d8aeda78e2dd4784dbea3086a6ca85fa88782d2d" 237 + dependencies = [ 238 + "core2", 239 + "multibase", 240 + "multihash", 241 + "serde", 242 + "serde_bytes", 243 + "unsigned-varint", 244 + ] 245 + 246 + [[package]] 247 + name = "clap" 248 + version = "4.5.39" 249 + source = "registry+https://github.com/rust-lang/crates.io-index" 250 + checksum = "fd60e63e9be68e5fb56422e397cf9baddded06dae1d2e523401542383bc72a9f" 251 + dependencies = [ 252 + "clap_builder", 253 + "clap_derive", 254 + ] 255 + 256 + [[package]] 257 + name = "clap_builder" 258 + version = "4.5.39" 259 + source = "registry+https://github.com/rust-lang/crates.io-index" 260 + checksum = "89cc6392a1f72bbeb820d71f32108f61fdaf18bc526e1d23954168a67759ef51" 261 + dependencies = [ 262 + "anstream", 263 + "anstyle", 264 + "clap_lex", 265 + "strsim", 266 + ] 267 + 268 + [[package]] 269 + name = "clap_derive" 270 + version = "4.5.32" 271 + source = "registry+https://github.com/rust-lang/crates.io-index" 272 + checksum = "09176aae279615badda0765c0c0b3f6ed53f4709118af73cf4655d85d1530cd7" 273 + dependencies = [ 274 + "heck", 275 + "proc-macro2", 276 + "quote", 277 + "syn", 278 + ] 279 + 280 + [[package]] 281 + name = "clap_lex" 282 + version = "0.7.4" 283 + source = "registry+https://github.com/rust-lang/crates.io-index" 284 + checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" 285 + 286 + [[package]] 287 + name = "clipboard-win" 288 + version = "5.4.0" 289 + source = "registry+https://github.com/rust-lang/crates.io-index" 290 + checksum = "15efe7a882b08f34e38556b14f2fb3daa98769d06c7f0c1b076dfd0d983bc892" 291 + dependencies = [ 292 + "error-code", 293 + ] 294 + 295 + [[package]] 296 + name = "cobs" 297 + version = "0.2.3" 298 + source = "registry+https://github.com/rust-lang/crates.io-index" 299 + checksum = "67ba02a97a2bd10f4b59b25c7973101c79642302776489e030cd13cdab09ed15" 300 + 301 + [[package]] 302 + name = "colorchoice" 303 + version = "1.0.4" 304 + source = "registry+https://github.com/rust-lang/crates.io-index" 305 + checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" 306 + 307 + [[package]] 308 + name = "common" 309 + version = "0.1.0" 310 + source = "git+https://github.com/LedgerHQ/vanadium#547d41b86a37827c01be47e928487611cd985ef2" 311 + dependencies = [ 312 + "serde", 313 + "serde_json", 314 + "vanadium_macros", 315 + ] 316 + 317 + [[package]] 318 + name = "const-oid" 319 + version = "0.9.6" 320 + source = "registry+https://github.com/rust-lang/crates.io-index" 321 + checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" 322 + 323 + [[package]] 324 + name = "core2" 325 + version = "0.4.0" 326 + source = "registry+https://github.com/rust-lang/crates.io-index" 327 + checksum = "b49ba7ef1ad6107f8824dbe97de947cbaac53c44e7f9756a1fba0d37c1eec505" 328 + dependencies = [ 329 + "memchr", 330 + ] 331 + 332 + [[package]] 333 + name = "cpufeatures" 334 + version = "0.2.17" 335 + source = "registry+https://github.com/rust-lang/crates.io-index" 336 + checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" 337 + dependencies = [ 338 + "libc", 339 + ] 340 + 341 + [[package]] 342 + name = "critical-section" 343 + version = "1.2.0" 344 + source = "registry+https://github.com/rust-lang/crates.io-index" 345 + checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" 346 + 347 + [[package]] 348 + name = "crypto-bigint" 349 + version = "0.5.5" 350 + source = "registry+https://github.com/rust-lang/crates.io-index" 351 + checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" 352 + dependencies = [ 353 + "generic-array", 354 + "rand_core 0.6.4", 355 + "subtle", 356 + "zeroize", 357 + ] 358 + 359 + [[package]] 360 + name = "crypto-common" 361 + version = "0.1.6" 362 + source = "registry+https://github.com/rust-lang/crates.io-index" 363 + checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" 364 + dependencies = [ 365 + "generic-array", 366 + "typenum", 367 + ] 368 + 369 + [[package]] 370 + name = "data-encoding" 371 + version = "2.9.0" 372 + source = "registry+https://github.com/rust-lang/crates.io-index" 373 + checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476" 374 + 375 + [[package]] 376 + name = "data-encoding-macro" 377 + version = "0.1.18" 378 + source = "registry+https://github.com/rust-lang/crates.io-index" 379 + checksum = "47ce6c96ea0102f01122a185683611bd5ac8d99e62bc59dd12e6bda344ee673d" 380 + dependencies = [ 381 + "data-encoding", 382 + "data-encoding-macro-internal", 383 + ] 384 + 385 + [[package]] 386 + name = "data-encoding-macro-internal" 387 + version = "0.1.16" 388 + source = "registry+https://github.com/rust-lang/crates.io-index" 389 + checksum = "8d162beedaa69905488a8da94f5ac3edb4dd4788b732fadb7bd120b2625c1976" 390 + dependencies = [ 391 + "data-encoding", 392 + "syn", 393 + ] 394 + 395 + [[package]] 396 + name = "der" 397 + version = "0.7.10" 398 + source = "registry+https://github.com/rust-lang/crates.io-index" 399 + checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" 400 + dependencies = [ 401 + "const-oid", 402 + "zeroize", 403 + ] 404 + 405 + [[package]] 406 + name = "digest" 407 + version = "0.10.7" 408 + source = "registry+https://github.com/rust-lang/crates.io-index" 409 + checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" 410 + dependencies = [ 411 + "block-buffer", 412 + "const-oid", 413 + "crypto-common", 414 + "subtle", 415 + ] 416 + 417 + [[package]] 418 + name = "ecdsa" 419 + version = "0.16.9" 420 + source = "registry+https://github.com/rust-lang/crates.io-index" 421 + checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" 422 + dependencies = [ 423 + "der", 424 + "digest", 425 + "elliptic-curve", 426 + "rfc6979", 427 + "signature", 428 + "spki", 429 + ] 430 + 431 + [[package]] 432 + name = "elliptic-curve" 433 + version = "0.13.8" 434 + source = "registry+https://github.com/rust-lang/crates.io-index" 435 + checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" 436 + dependencies = [ 437 + "base16ct", 438 + "crypto-bigint", 439 + "digest", 440 + "ff", 441 + "generic-array", 442 + "group", 443 + "pkcs8", 444 + "rand_core 0.6.4", 445 + "sec1", 446 + "subtle", 447 + "zeroize", 448 + ] 449 + 450 + [[package]] 451 + name = "embedded-alloc" 452 + version = "0.5.1" 453 + source = "registry+https://github.com/rust-lang/crates.io-index" 454 + checksum = "ddae17915accbac2cfbc64ea0ae6e3b330e6ea124ba108dada63646fd3c6f815" 455 + dependencies = [ 456 + "critical-section", 457 + "linked_list_allocator", 458 + ] 459 + 460 + [[package]] 461 + name = "embedded-io" 462 + version = "0.4.0" 463 + source = "registry+https://github.com/rust-lang/crates.io-index" 464 + checksum = "ef1a6892d9eef45c8fa6b9e0086428a2cca8491aca8f787c534a3d6d0bcb3ced" 465 + 466 + [[package]] 467 + name = "embedded-io" 468 + version = "0.6.1" 469 + source = "registry+https://github.com/rust-lang/crates.io-index" 470 + checksum = "edd0f118536f44f5ccd48bcb8b111bdc3de888b58c74639dfb034a357d0f206d" 471 + 472 + [[package]] 473 + name = "endian-type" 474 + version = "0.1.2" 475 + source = "registry+https://github.com/rust-lang/crates.io-index" 476 + checksum = "c34f04666d835ff5d62e058c3995147c06f42fe86ff053337632bca83e42702d" 477 + 478 + [[package]] 479 + name = "equivalent" 480 + version = "1.0.2" 481 + source = "registry+https://github.com/rust-lang/crates.io-index" 482 + checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" 483 + 484 + [[package]] 485 + name = "errno" 486 + version = "0.3.12" 487 + source = "registry+https://github.com/rust-lang/crates.io-index" 488 + checksum = "cea14ef9355e3beab063703aa9dab15afd25f0667c341310c1e5274bb1d0da18" 489 + dependencies = [ 490 + "libc", 491 + "windows-sys 0.59.0", 492 + ] 493 + 494 + [[package]] 495 + name = "error-code" 496 + version = "3.3.2" 497 + source = "registry+https://github.com/rust-lang/crates.io-index" 498 + checksum = "dea2df4cf52843e0452895c455a1a2cfbb842a1e7329671acf418fdc53ed4c59" 499 + 500 + [[package]] 501 + name = "fd-lock" 502 + version = "4.0.4" 503 + source = "registry+https://github.com/rust-lang/crates.io-index" 504 + checksum = "0ce92ff622d6dadf7349484f42c93271a0d49b7cc4d466a936405bacbe10aa78" 505 + dependencies = [ 506 + "cfg-if", 507 + "rustix", 508 + "windows-sys 0.59.0", 509 + ] 510 + 511 + [[package]] 512 + name = "ff" 513 + version = "0.13.1" 514 + source = "registry+https://github.com/rust-lang/crates.io-index" 515 + checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393" 516 + dependencies = [ 517 + "rand_core 0.6.4", 518 + "subtle", 519 + ] 520 + 521 + [[package]] 522 + name = "generic-array" 523 + version = "0.14.7" 524 + source = "registry+https://github.com/rust-lang/crates.io-index" 525 + checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" 526 + dependencies = [ 527 + "typenum", 528 + "version_check", 529 + "zeroize", 530 + ] 531 + 532 + [[package]] 533 + name = "getrandom" 534 + version = "0.3.3" 535 + source = "registry+https://github.com/rust-lang/crates.io-index" 536 + checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" 537 + dependencies = [ 538 + "cfg-if", 539 + "libc", 540 + "r-efi", 541 + "wasi 0.14.2+wasi-0.2.4", 542 + ] 543 + 544 + [[package]] 545 + name = "gimli" 546 + version = "0.31.1" 547 + source = "registry+https://github.com/rust-lang/crates.io-index" 548 + checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" 549 + 550 + [[package]] 551 + name = "goblin" 552 + version = "0.8.2" 553 + source = "registry+https://github.com/rust-lang/crates.io-index" 554 + checksum = "1b363a30c165f666402fe6a3024d3bec7ebc898f96a4a23bd1c99f8dbf3f4f47" 555 + dependencies = [ 556 + "log", 557 + "plain", 558 + "scroll", 559 + ] 560 + 561 + [[package]] 562 + name = "group" 563 + version = "0.13.0" 564 + source = "registry+https://github.com/rust-lang/crates.io-index" 565 + checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" 566 + dependencies = [ 567 + "ff", 568 + "rand_core 0.6.4", 569 + "subtle", 570 + ] 571 + 572 + [[package]] 573 + name = "hashbrown" 574 + version = "0.15.4" 575 + source = "registry+https://github.com/rust-lang/crates.io-index" 576 + checksum = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5" 577 + 578 + [[package]] 579 + name = "heck" 580 + version = "0.5.0" 581 + source = "registry+https://github.com/rust-lang/crates.io-index" 582 + checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" 583 + 584 + [[package]] 585 + name = "hex" 586 + version = "0.4.3" 587 + source = "registry+https://github.com/rust-lang/crates.io-index" 588 + checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" 589 + 590 + [[package]] 591 + name = "hex-literal" 592 + version = "0.4.1" 593 + source = "registry+https://github.com/rust-lang/crates.io-index" 594 + checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46" 595 + 596 + [[package]] 597 + name = "hidapi" 598 + version = "2.6.3" 599 + source = "registry+https://github.com/rust-lang/crates.io-index" 600 + checksum = "03b876ecf37e86b359573c16c8366bc3eba52b689884a0fc42ba3f67203d2a8b" 601 + dependencies = [ 602 + "cc", 603 + "cfg-if", 604 + "libc", 605 + "pkg-config", 606 + "windows-sys 0.48.0", 607 + ] 608 + 609 + [[package]] 610 + name = "hmac" 611 + version = "0.12.1" 612 + source = "registry+https://github.com/rust-lang/crates.io-index" 613 + checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" 614 + dependencies = [ 615 + "digest", 616 + ] 617 + 618 + [[package]] 619 + name = "home" 620 + version = "0.5.11" 621 + source = "registry+https://github.com/rust-lang/crates.io-index" 622 + checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" 623 + dependencies = [ 624 + "windows-sys 0.59.0", 625 + ] 626 + 627 + [[package]] 628 + name = "indexmap" 629 + version = "2.9.0" 630 + source = "registry+https://github.com/rust-lang/crates.io-index" 631 + checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e" 632 + dependencies = [ 633 + "equivalent", 634 + "hashbrown", 635 + ] 636 + 637 + [[package]] 638 + name = "ipld-core" 639 + version = "0.4.2" 640 + source = "registry+https://github.com/rust-lang/crates.io-index" 641 + checksum = "104718b1cc124d92a6d01ca9c9258a7df311405debb3408c445a36452f9bf8db" 642 + dependencies = [ 643 + "cid", 644 + "serde", 645 + "serde_bytes", 646 + ] 647 + 648 + [[package]] 649 + name = "is_terminal_polyfill" 650 + version = "1.70.1" 651 + source = "registry+https://github.com/rust-lang/crates.io-index" 652 + checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" 653 + 654 + [[package]] 655 + name = "itoa" 656 + version = "1.0.15" 657 + source = "registry+https://github.com/rust-lang/crates.io-index" 658 + checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" 659 + 660 + [[package]] 661 + name = "k256" 662 + version = "0.13.4" 663 + source = "registry+https://github.com/rust-lang/crates.io-index" 664 + checksum = "f6e3919bbaa2945715f0bb6d3934a173d1e9a59ac23767fbaaef277265a7411b" 665 + dependencies = [ 666 + "cfg-if", 667 + "ecdsa", 668 + "elliptic-curve", 669 + "sha2", 670 + "signature", 671 + ] 672 + 673 + [[package]] 674 + name = "lazy_static" 675 + version = "1.5.0" 676 + source = "registry+https://github.com/rust-lang/crates.io-index" 677 + checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" 678 + 679 + [[package]] 680 + name = "ledger-apdu" 681 + version = "0.11.0" 682 + source = "registry+https://github.com/rust-lang/crates.io-index" 683 + checksum = "c21ffd28d97c9252671ab2ebe7078c9fa860ff3c5a125039e174d25ec6872169" 684 + dependencies = [ 685 + "arrayref", 686 + "no-std-compat", 687 + "snafu", 688 + ] 689 + 690 + [[package]] 691 + name = "ledger-transport" 692 + version = "0.11.0" 693 + source = "registry+https://github.com/rust-lang/crates.io-index" 694 + checksum = "c2f18de77d956a030dbc5869ced47d404bbd641216ef2f9dce7ca90833ca64ff" 695 + dependencies = [ 696 + "async-trait", 697 + "ledger-apdu", 698 + ] 699 + 700 + [[package]] 701 + name = "ledger-transport-hid" 702 + version = "0.11.0" 703 + source = "registry+https://github.com/rust-lang/crates.io-index" 704 + checksum = "a4e34341e2708fbf805a9ada44ef6182170c6464c4fc068ab801abb7562fd5e8" 705 + dependencies = [ 706 + "byteorder", 707 + "cfg-if", 708 + "hex", 709 + "hidapi", 710 + "ledger-transport", 711 + "libc", 712 + "log", 713 + "thiserror", 714 + ] 715 + 716 + [[package]] 717 + name = "libc" 718 + version = "0.2.172" 719 + source = "registry+https://github.com/rust-lang/crates.io-index" 720 + checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa" 721 + 722 + [[package]] 723 + name = "linked_list_allocator" 724 + version = "0.10.5" 725 + source = "registry+https://github.com/rust-lang/crates.io-index" 726 + checksum = "9afa463f5405ee81cdb9cc2baf37e08ec7e4c8209442b5d72c04cfb2cd6e6286" 727 + 728 + [[package]] 729 + name = "linux-raw-sys" 730 + version = "0.9.4" 731 + source = "registry+https://github.com/rust-lang/crates.io-index" 732 + checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" 733 + 734 + [[package]] 735 + name = "log" 736 + version = "0.4.27" 737 + source = "registry+https://github.com/rust-lang/crates.io-index" 738 + checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" 739 + 740 + [[package]] 741 + name = "memchr" 742 + version = "2.7.4" 743 + source = "registry+https://github.com/rust-lang/crates.io-index" 744 + checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" 745 + 746 + [[package]] 747 + name = "miniz_oxide" 748 + version = "0.8.8" 749 + source = "registry+https://github.com/rust-lang/crates.io-index" 750 + checksum = "3be647b768db090acb35d5ec5db2b0e1f1de11133ca123b9eacf5137868f892a" 751 + dependencies = [ 752 + "adler2", 753 + ] 754 + 755 + [[package]] 756 + name = "mio" 757 + version = "1.0.4" 758 + source = "registry+https://github.com/rust-lang/crates.io-index" 759 + checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" 760 + dependencies = [ 761 + "libc", 762 + "wasi 0.11.0+wasi-snapshot-preview1", 763 + "windows-sys 0.59.0", 764 + ] 765 + 766 + [[package]] 767 + name = "multibase" 768 + version = "0.9.1" 769 + source = "registry+https://github.com/rust-lang/crates.io-index" 770 + checksum = "9b3539ec3c1f04ac9748a260728e855f261b4977f5c3406612c884564f329404" 771 + dependencies = [ 772 + "base-x", 773 + "data-encoding", 774 + "data-encoding-macro", 775 + ] 776 + 777 + [[package]] 778 + name = "multihash" 779 + version = "0.19.3" 780 + source = "registry+https://github.com/rust-lang/crates.io-index" 781 + checksum = "6b430e7953c29dd6a09afc29ff0bb69c6e306329ee6794700aee27b76a1aea8d" 782 + dependencies = [ 783 + "core2", 784 + "serde", 785 + "unsigned-varint", 786 + ] 787 + 788 + [[package]] 789 + name = "nibble_vec" 790 + version = "0.1.0" 791 + source = "registry+https://github.com/rust-lang/crates.io-index" 792 + checksum = "77a5d83df9f36fe23f0c3648c6bbb8b0298bb5f1939c8f2704431371f4b84d43" 793 + dependencies = [ 794 + "smallvec", 795 + ] 796 + 797 + [[package]] 798 + name = "nix" 799 + version = "0.29.0" 800 + source = "registry+https://github.com/rust-lang/crates.io-index" 801 + checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" 802 + dependencies = [ 803 + "bitflags", 804 + "cfg-if", 805 + "cfg_aliases", 806 + "libc", 807 + ] 808 + 809 + [[package]] 810 + name = "no-std-compat" 811 + version = "0.4.1" 812 + source = "registry+https://github.com/rust-lang/crates.io-index" 813 + checksum = "b93853da6d84c2e3c7d730d6473e8817692dd89be387eb01b94d7f108ecb5b8c" 814 + 815 + [[package]] 816 + name = "num-bigint" 817 + version = "0.4.6" 818 + source = "registry+https://github.com/rust-lang/crates.io-index" 819 + checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" 820 + dependencies = [ 821 + "num-integer", 822 + "num-traits", 823 + ] 824 + 825 + [[package]] 826 + name = "num-integer" 827 + version = "0.1.46" 828 + source = "registry+https://github.com/rust-lang/crates.io-index" 829 + checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" 830 + dependencies = [ 831 + "num-traits", 832 + ] 833 + 834 + [[package]] 835 + name = "num-traits" 836 + version = "0.2.19" 837 + source = "registry+https://github.com/rust-lang/crates.io-index" 838 + checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" 839 + dependencies = [ 840 + "autocfg", 841 + ] 842 + 843 + [[package]] 844 + name = "object" 845 + version = "0.36.7" 846 + source = "registry+https://github.com/rust-lang/crates.io-index" 847 + checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" 848 + dependencies = [ 849 + "memchr", 850 + ] 851 + 852 + [[package]] 853 + name = "once_cell" 854 + version = "1.21.3" 855 + source = "registry+https://github.com/rust-lang/crates.io-index" 856 + checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" 857 + 858 + [[package]] 859 + name = "once_cell_polyfill" 860 + version = "1.70.1" 861 + source = "registry+https://github.com/rust-lang/crates.io-index" 862 + checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" 863 + 864 + [[package]] 865 + name = "pbkdf2" 866 + version = "0.12.2" 867 + source = "registry+https://github.com/rust-lang/crates.io-index" 868 + checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" 869 + dependencies = [ 870 + "digest", 871 + "hmac", 872 + ] 873 + 874 + [[package]] 875 + name = "pin-project-lite" 876 + version = "0.2.16" 877 + source = "registry+https://github.com/rust-lang/crates.io-index" 878 + checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" 879 + 880 + [[package]] 881 + name = "pkcs8" 882 + version = "0.10.2" 883 + source = "registry+https://github.com/rust-lang/crates.io-index" 884 + checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" 885 + dependencies = [ 886 + "der", 887 + "spki", 888 + ] 889 + 890 + [[package]] 891 + name = "pkg-config" 892 + version = "0.3.32" 893 + source = "registry+https://github.com/rust-lang/crates.io-index" 894 + checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" 895 + 896 + [[package]] 897 + name = "plain" 898 + version = "0.2.3" 899 + source = "registry+https://github.com/rust-lang/crates.io-index" 900 + checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" 901 + 902 + [[package]] 903 + name = "postcard" 904 + version = "1.1.1" 905 + source = "registry+https://github.com/rust-lang/crates.io-index" 906 + checksum = "170a2601f67cc9dba8edd8c4870b15f71a6a2dc196daec8c83f72b59dff628a8" 907 + dependencies = [ 908 + "cobs", 909 + "embedded-io 0.4.0", 910 + "embedded-io 0.6.1", 911 + "serde", 912 + ] 913 + 914 + [[package]] 915 + name = "ppv-lite86" 916 + version = "0.2.21" 917 + source = "registry+https://github.com/rust-lang/crates.io-index" 918 + checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" 919 + dependencies = [ 920 + "zerocopy", 921 + ] 922 + 923 + [[package]] 924 + name = "proc-macro-error-attr2" 925 + version = "2.0.0" 926 + source = "registry+https://github.com/rust-lang/crates.io-index" 927 + checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5" 928 + dependencies = [ 929 + "proc-macro2", 930 + "quote", 931 + ] 932 + 933 + [[package]] 934 + name = "proc-macro-error2" 935 + version = "2.0.1" 936 + source = "registry+https://github.com/rust-lang/crates.io-index" 937 + checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802" 938 + dependencies = [ 939 + "proc-macro-error-attr2", 940 + "proc-macro2", 941 + "quote", 942 + ] 943 + 944 + [[package]] 945 + name = "proc-macro2" 946 + version = "1.0.95" 947 + source = "registry+https://github.com/rust-lang/crates.io-index" 948 + checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" 949 + dependencies = [ 950 + "unicode-ident", 951 + ] 952 + 953 + [[package]] 954 + name = "quote" 955 + version = "1.0.40" 956 + source = "registry+https://github.com/rust-lang/crates.io-index" 957 + checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" 958 + dependencies = [ 959 + "proc-macro2", 960 + ] 961 + 962 + [[package]] 963 + name = "r-efi" 964 + version = "5.2.0" 965 + source = "registry+https://github.com/rust-lang/crates.io-index" 966 + checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5" 967 + 968 + [[package]] 969 + name = "radix_trie" 970 + version = "0.2.1" 971 + source = "registry+https://github.com/rust-lang/crates.io-index" 972 + checksum = "c069c179fcdc6a2fe24d8d18305cf085fdbd4f922c041943e203685d6a1c58fd" 973 + dependencies = [ 974 + "endian-type", 975 + "nibble_vec", 976 + ] 977 + 978 + [[package]] 979 + name = "rand" 980 + version = "0.9.1" 981 + source = "registry+https://github.com/rust-lang/crates.io-index" 982 + checksum = "9fbfd9d094a40bf3ae768db9361049ace4c0e04a4fd6b359518bd7b73a73dd97" 983 + dependencies = [ 984 + "rand_chacha", 985 + "rand_core 0.9.3", 986 + ] 987 + 988 + [[package]] 989 + name = "rand_chacha" 990 + version = "0.9.0" 991 + source = "registry+https://github.com/rust-lang/crates.io-index" 992 + checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" 993 + dependencies = [ 994 + "ppv-lite86", 995 + "rand_core 0.9.3", 996 + ] 997 + 998 + [[package]] 999 + name = "rand_core" 1000 + version = "0.6.4" 1001 + source = "registry+https://github.com/rust-lang/crates.io-index" 1002 + checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" 1003 + 1004 + [[package]] 1005 + name = "rand_core" 1006 + version = "0.9.3" 1007 + source = "registry+https://github.com/rust-lang/crates.io-index" 1008 + checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" 1009 + dependencies = [ 1010 + "getrandom", 1011 + ] 1012 + 1013 + [[package]] 1014 + name = "regex" 1015 + version = "1.11.1" 1016 + source = "registry+https://github.com/rust-lang/crates.io-index" 1017 + checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" 1018 + dependencies = [ 1019 + "aho-corasick", 1020 + "memchr", 1021 + "regex-automata", 1022 + "regex-syntax", 1023 + ] 1024 + 1025 + [[package]] 1026 + name = "regex-automata" 1027 + version = "0.4.9" 1028 + source = "registry+https://github.com/rust-lang/crates.io-index" 1029 + checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" 1030 + dependencies = [ 1031 + "aho-corasick", 1032 + "memchr", 1033 + "regex-syntax", 1034 + ] 1035 + 1036 + [[package]] 1037 + name = "regex-syntax" 1038 + version = "0.8.5" 1039 + source = "registry+https://github.com/rust-lang/crates.io-index" 1040 + checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" 1041 + 1042 + [[package]] 1043 + name = "rfc6979" 1044 + version = "0.4.0" 1045 + source = "registry+https://github.com/rust-lang/crates.io-index" 1046 + checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" 1047 + dependencies = [ 1048 + "hmac", 1049 + "subtle", 1050 + ] 1051 + 1052 + [[package]] 1053 + name = "ripemd" 1054 + version = "0.1.3" 1055 + source = "registry+https://github.com/rust-lang/crates.io-index" 1056 + checksum = "bd124222d17ad93a644ed9d011a40f4fb64aa54275c08cc216524a9ea82fb09f" 1057 + dependencies = [ 1058 + "digest", 1059 + ] 1060 + 1061 + [[package]] 1062 + name = "rustc-demangle" 1063 + version = "0.1.24" 1064 + source = "registry+https://github.com/rust-lang/crates.io-index" 1065 + checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" 1066 + 1067 + [[package]] 1068 + name = "rustix" 1069 + version = "1.0.7" 1070 + source = "registry+https://github.com/rust-lang/crates.io-index" 1071 + checksum = "c71e83d6afe7ff64890ec6b71d6a69bb8a610ab78ce364b3352876bb4c801266" 1072 + dependencies = [ 1073 + "bitflags", 1074 + "errno", 1075 + "libc", 1076 + "linux-raw-sys", 1077 + "windows-sys 0.59.0", 1078 + ] 1079 + 1080 + [[package]] 1081 + name = "rustyline" 1082 + version = "15.0.0" 1083 + source = "registry+https://github.com/rust-lang/crates.io-index" 1084 + checksum = "2ee1e066dc922e513bda599c6ccb5f3bb2b0ea5870a579448f2622993f0a9a2f" 1085 + dependencies = [ 1086 + "bitflags", 1087 + "cfg-if", 1088 + "clipboard-win", 1089 + "fd-lock", 1090 + "home", 1091 + "libc", 1092 + "log", 1093 + "memchr", 1094 + "nix", 1095 + "radix_trie", 1096 + "unicode-segmentation", 1097 + "unicode-width", 1098 + "utf8parse", 1099 + "windows-sys 0.59.0", 1100 + ] 1101 + 1102 + [[package]] 1103 + name = "ryu" 1104 + version = "1.0.20" 1105 + source = "registry+https://github.com/rust-lang/crates.io-index" 1106 + checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" 1107 + 1108 + [[package]] 1109 + name = "scopeguard" 1110 + version = "1.2.0" 1111 + source = "registry+https://github.com/rust-lang/crates.io-index" 1112 + checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" 1113 + 1114 + [[package]] 1115 + name = "scroll" 1116 + version = "0.12.0" 1117 + source = "registry+https://github.com/rust-lang/crates.io-index" 1118 + checksum = "6ab8598aa408498679922eff7fa985c25d58a90771bd6be794434c5277eab1a6" 1119 + dependencies = [ 1120 + "scroll_derive", 1121 + ] 1122 + 1123 + [[package]] 1124 + name = "scroll_derive" 1125 + version = "0.12.1" 1126 + source = "registry+https://github.com/rust-lang/crates.io-index" 1127 + checksum = "1783eabc414609e28a5ba76aee5ddd52199f7107a0b24c2e9746a1ecc34a683d" 1128 + dependencies = [ 1129 + "proc-macro2", 1130 + "quote", 1131 + "syn", 1132 + ] 1133 + 1134 + [[package]] 1135 + name = "sec1" 1136 + version = "0.7.3" 1137 + source = "registry+https://github.com/rust-lang/crates.io-index" 1138 + checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" 1139 + dependencies = [ 1140 + "base16ct", 1141 + "der", 1142 + "generic-array", 1143 + "pkcs8", 1144 + "subtle", 1145 + "zeroize", 1146 + ] 1147 + 1148 + [[package]] 1149 + name = "secp256k1" 1150 + version = "0.27.0" 1151 + source = "registry+https://github.com/rust-lang/crates.io-index" 1152 + checksum = "25996b82292a7a57ed3508f052cfff8640d38d32018784acd714758b43da9c8f" 1153 + dependencies = [ 1154 + "secp256k1-sys", 1155 + ] 1156 + 1157 + [[package]] 1158 + name = "secp256k1-sys" 1159 + version = "0.8.1" 1160 + source = "registry+https://github.com/rust-lang/crates.io-index" 1161 + checksum = "70a129b9e9efbfb223753b9163c4ab3b13cff7fd9c7f010fbac25ab4099fa07e" 1162 + dependencies = [ 1163 + "cc", 1164 + ] 1165 + 1166 + [[package]] 1167 + name = "serde" 1168 + version = "1.0.219" 1169 + source = "registry+https://github.com/rust-lang/crates.io-index" 1170 + checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" 1171 + dependencies = [ 1172 + "serde_derive", 1173 + ] 1174 + 1175 + [[package]] 1176 + name = "serde_bytes" 1177 + version = "0.11.17" 1178 + source = "registry+https://github.com/rust-lang/crates.io-index" 1179 + checksum = "8437fd221bde2d4ca316d61b90e337e9e702b3820b87d63caa9ba6c02bd06d96" 1180 + dependencies = [ 1181 + "serde", 1182 + ] 1183 + 1184 + [[package]] 1185 + name = "serde_derive" 1186 + version = "1.0.219" 1187 + source = "registry+https://github.com/rust-lang/crates.io-index" 1188 + checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" 1189 + dependencies = [ 1190 + "proc-macro2", 1191 + "quote", 1192 + "syn", 1193 + ] 1194 + 1195 + [[package]] 1196 + name = "serde_ipld_dagcbor" 1197 + version = "0.6.3" 1198 + source = "git+http://github.com/edouardparis/serde_ipld_dagcbor?branch=scopeguard-no-default-features#82eca93ee126750ad80feedbfe9cee0bf162c587" 1199 + dependencies = [ 1200 + "cbor4ii", 1201 + "ipld-core", 1202 + "scopeguard", 1203 + "serde", 1204 + ] 1205 + 1206 + [[package]] 1207 + name = "serde_json" 1208 + version = "1.0.140" 1209 + source = "registry+https://github.com/rust-lang/crates.io-index" 1210 + checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" 1211 + dependencies = [ 1212 + "itoa", 1213 + "memchr", 1214 + "ryu", 1215 + "serde", 1216 + ] 1217 + 1218 + [[package]] 1219 + name = "serde_spanned" 1220 + version = "0.6.9" 1221 + source = "registry+https://github.com/rust-lang/crates.io-index" 1222 + checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3" 1223 + dependencies = [ 1224 + "serde", 1225 + ] 1226 + 1227 + [[package]] 1228 + name = "sha2" 1229 + version = "0.10.9" 1230 + source = "registry+https://github.com/rust-lang/crates.io-index" 1231 + checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" 1232 + dependencies = [ 1233 + "cfg-if", 1234 + "cpufeatures", 1235 + "digest", 1236 + ] 1237 + 1238 + [[package]] 1239 + name = "shellwords" 1240 + version = "1.1.0" 1241 + source = "registry+https://github.com/rust-lang/crates.io-index" 1242 + checksum = "89e515aa4699a88148ed5ef96413ceef0048ce95b43fbc955a33bde0a70fcae6" 1243 + dependencies = [ 1244 + "lazy_static", 1245 + "regex", 1246 + ] 1247 + 1248 + [[package]] 1249 + name = "shlex" 1250 + version = "1.3.0" 1251 + source = "registry+https://github.com/rust-lang/crates.io-index" 1252 + checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" 1253 + 1254 + [[package]] 1255 + name = "signal-hook-registry" 1256 + version = "1.4.5" 1257 + source = "registry+https://github.com/rust-lang/crates.io-index" 1258 + checksum = "9203b8055f63a2a00e2f593bb0510367fe707d7ff1e5c872de2f537b339e5410" 1259 + dependencies = [ 1260 + "libc", 1261 + ] 1262 + 1263 + [[package]] 1264 + name = "signature" 1265 + version = "2.2.0" 1266 + source = "registry+https://github.com/rust-lang/crates.io-index" 1267 + checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" 1268 + dependencies = [ 1269 + "digest", 1270 + "rand_core 0.6.4", 1271 + ] 1272 + 1273 + [[package]] 1274 + name = "smallvec" 1275 + version = "1.15.1" 1276 + source = "registry+https://github.com/rust-lang/crates.io-index" 1277 + checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" 1278 + 1279 + [[package]] 1280 + name = "snafu" 1281 + version = "0.8.6" 1282 + source = "registry+https://github.com/rust-lang/crates.io-index" 1283 + checksum = "320b01e011bf8d5d7a4a4a4be966d9160968935849c83b918827f6a435e7f627" 1284 + dependencies = [ 1285 + "snafu-derive", 1286 + ] 1287 + 1288 + [[package]] 1289 + name = "snafu-derive" 1290 + version = "0.8.6" 1291 + source = "registry+https://github.com/rust-lang/crates.io-index" 1292 + checksum = "1961e2ef424c1424204d3a5d6975f934f56b6d50ff5732382d84ebf460e147f7" 1293 + dependencies = [ 1294 + "heck", 1295 + "proc-macro2", 1296 + "quote", 1297 + "syn", 1298 + ] 1299 + 1300 + [[package]] 1301 + name = "socket2" 1302 + version = "0.5.10" 1303 + source = "registry+https://github.com/rust-lang/crates.io-index" 1304 + checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" 1305 + dependencies = [ 1306 + "libc", 1307 + "windows-sys 0.52.0", 1308 + ] 1309 + 1310 + [[package]] 1311 + name = "spki" 1312 + version = "0.7.3" 1313 + source = "registry+https://github.com/rust-lang/crates.io-index" 1314 + checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" 1315 + dependencies = [ 1316 + "base64ct", 1317 + "der", 1318 + ] 1319 + 1320 + [[package]] 1321 + name = "strsim" 1322 + version = "0.11.1" 1323 + source = "registry+https://github.com/rust-lang/crates.io-index" 1324 + checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" 1325 + 1326 + [[package]] 1327 + name = "subtle" 1328 + version = "2.6.1" 1329 + source = "registry+https://github.com/rust-lang/crates.io-index" 1330 + checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" 1331 + 1332 + [[package]] 1333 + name = "syn" 1334 + version = "2.0.101" 1335 + source = "registry+https://github.com/rust-lang/crates.io-index" 1336 + checksum = "8ce2b7fc941b3a24138a0a7cf8e858bfc6a992e7978a068a5c760deb0ed43caf" 1337 + dependencies = [ 1338 + "proc-macro2", 1339 + "quote", 1340 + "unicode-ident", 1341 + ] 1342 + 1343 + [[package]] 1344 + name = "thiserror" 1345 + version = "1.0.69" 1346 + source = "registry+https://github.com/rust-lang/crates.io-index" 1347 + checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" 1348 + dependencies = [ 1349 + "thiserror-impl", 1350 + ] 1351 + 1352 + [[package]] 1353 + name = "thiserror-impl" 1354 + version = "1.0.69" 1355 + source = "registry+https://github.com/rust-lang/crates.io-index" 1356 + checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" 1357 + dependencies = [ 1358 + "proc-macro2", 1359 + "quote", 1360 + "syn", 1361 + ] 1362 + 1363 + [[package]] 1364 + name = "tokio" 1365 + version = "1.45.1" 1366 + source = "registry+https://github.com/rust-lang/crates.io-index" 1367 + checksum = "75ef51a33ef1da925cea3e4eb122833cb377c61439ca401b770f54902b806779" 1368 + dependencies = [ 1369 + "backtrace", 1370 + "bytes", 1371 + "libc", 1372 + "mio", 1373 + "pin-project-lite", 1374 + "signal-hook-registry", 1375 + "socket2", 1376 + "tokio-macros", 1377 + "windows-sys 0.52.0", 1378 + ] 1379 + 1380 + [[package]] 1381 + name = "tokio-macros" 1382 + version = "2.5.0" 1383 + source = "registry+https://github.com/rust-lang/crates.io-index" 1384 + checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" 1385 + dependencies = [ 1386 + "proc-macro2", 1387 + "quote", 1388 + "syn", 1389 + ] 1390 + 1391 + [[package]] 1392 + name = "toml" 1393 + version = "0.8.23" 1394 + source = "registry+https://github.com/rust-lang/crates.io-index" 1395 + checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362" 1396 + dependencies = [ 1397 + "serde", 1398 + "serde_spanned", 1399 + "toml_datetime", 1400 + "toml_edit", 1401 + ] 1402 + 1403 + [[package]] 1404 + name = "toml_datetime" 1405 + version = "0.6.11" 1406 + source = "registry+https://github.com/rust-lang/crates.io-index" 1407 + checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c" 1408 + dependencies = [ 1409 + "serde", 1410 + ] 1411 + 1412 + [[package]] 1413 + name = "toml_edit" 1414 + version = "0.22.27" 1415 + source = "registry+https://github.com/rust-lang/crates.io-index" 1416 + checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" 1417 + dependencies = [ 1418 + "indexmap", 1419 + "serde", 1420 + "serde_spanned", 1421 + "toml_datetime", 1422 + "toml_write", 1423 + "winnow", 1424 + ] 1425 + 1426 + [[package]] 1427 + name = "toml_write" 1428 + version = "0.1.2" 1429 + source = "registry+https://github.com/rust-lang/crates.io-index" 1430 + checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" 1431 + 1432 + [[package]] 1433 + name = "typenum" 1434 + version = "1.18.0" 1435 + source = "registry+https://github.com/rust-lang/crates.io-index" 1436 + checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" 1437 + 1438 + [[package]] 1439 + name = "unicode-ident" 1440 + version = "1.0.18" 1441 + source = "registry+https://github.com/rust-lang/crates.io-index" 1442 + checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" 1443 + 1444 + [[package]] 1445 + name = "unicode-segmentation" 1446 + version = "1.12.0" 1447 + source = "registry+https://github.com/rust-lang/crates.io-index" 1448 + checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" 1449 + 1450 + [[package]] 1451 + name = "unicode-width" 1452 + version = "0.2.0" 1453 + source = "registry+https://github.com/rust-lang/crates.io-index" 1454 + checksum = "1fc81956842c57dac11422a97c3b8195a1ff727f06e85c84ed2e8aa277c9a0fd" 1455 + 1456 + [[package]] 1457 + name = "unsigned-varint" 1458 + version = "0.8.0" 1459 + source = "registry+https://github.com/rust-lang/crates.io-index" 1460 + checksum = "eb066959b24b5196ae73cb057f45598450d2c5f71460e98c49b738086eff9c06" 1461 + 1462 + [[package]] 1463 + name = "utf8parse" 1464 + version = "0.2.2" 1465 + source = "registry+https://github.com/rust-lang/crates.io-index" 1466 + checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" 1467 + 1468 + [[package]] 1469 + name = "vanadium-app-sdk" 1470 + version = "0.1.0" 1471 + source = "git+https://github.com/LedgerHQ/vanadium#547d41b86a37827c01be47e928487611cd985ef2" 1472 + dependencies = [ 1473 + "bip32", 1474 + "common", 1475 + "critical-section", 1476 + "embedded-alloc", 1477 + "hex", 1478 + "hex-literal", 1479 + "k256", 1480 + "lazy_static", 1481 + "num-bigint", 1482 + "num-traits", 1483 + "rand", 1484 + "ripemd", 1485 + "sha2", 1486 + "subtle", 1487 + "zeroize", 1488 + ] 1489 + 1490 + [[package]] 1491 + name = "vanadium-client-sdk" 1492 + version = "0.1.0" 1493 + source = "git+https://github.com/LedgerHQ/vanadium#547d41b86a37827c01be47e928487611cd985ef2" 1494 + dependencies = [ 1495 + "async-trait", 1496 + "cargo_toml", 1497 + "common", 1498 + "goblin", 1499 + "hex", 1500 + "hidapi", 1501 + "ledger-apdu", 1502 + "ledger-transport-hid", 1503 + "postcard", 1504 + "sha2", 1505 + "tokio", 1506 + ] 1507 + 1508 + [[package]] 1509 + name = "vanadium_macros" 1510 + version = "0.1.0" 1511 + source = "git+https://github.com/LedgerHQ/vanadium#547d41b86a37827c01be47e928487611cd985ef2" 1512 + dependencies = [ 1513 + "proc-macro-error2", 1514 + "proc-macro2", 1515 + "quote", 1516 + "syn", 1517 + ] 1518 + 1519 + [[package]] 1520 + name = "version_check" 1521 + version = "0.9.5" 1522 + source = "registry+https://github.com/rust-lang/crates.io-index" 1523 + checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" 1524 + 1525 + [[package]] 1526 + name = "vnd-atproto" 1527 + version = "0.0.1" 1528 + dependencies = [ 1529 + "base58", 1530 + "hex-literal", 1531 + "serde", 1532 + "serde_ipld_dagcbor", 1533 + "vanadium-app-sdk", 1534 + "vnd-atproto-common", 1535 + ] 1536 + 1537 + [[package]] 1538 + name = "vnd-atproto-cli" 1539 + version = "0.0.1" 1540 + dependencies = [ 1541 + "base58", 1542 + "clap", 1543 + "hidapi", 1544 + "ledger-transport-hid", 1545 + "rustyline", 1546 + "serde", 1547 + "shellwords", 1548 + "tokio", 1549 + "vnd-atproto-client", 1550 + ] 1551 + 1552 + [[package]] 1553 + name = "vnd-atproto-client" 1554 + version = "0.0.1" 1555 + dependencies = [ 1556 + "serde_ipld_dagcbor", 1557 + "vanadium-client-sdk", 1558 + "vnd-atproto-common", 1559 + ] 1560 + 1561 + [[package]] 1562 + name = "vnd-atproto-common" 1563 + version = "0.0.1" 1564 + dependencies = [ 1565 + "serde", 1566 + ] 1567 + 1568 + [[package]] 1569 + name = "wasi" 1570 + version = "0.11.0+wasi-snapshot-preview1" 1571 + source = "registry+https://github.com/rust-lang/crates.io-index" 1572 + checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" 1573 + 1574 + [[package]] 1575 + name = "wasi" 1576 + version = "0.14.2+wasi-0.2.4" 1577 + source = "registry+https://github.com/rust-lang/crates.io-index" 1578 + checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" 1579 + dependencies = [ 1580 + "wit-bindgen-rt", 1581 + ] 1582 + 1583 + [[package]] 1584 + name = "windows-sys" 1585 + version = "0.48.0" 1586 + source = "registry+https://github.com/rust-lang/crates.io-index" 1587 + checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" 1588 + dependencies = [ 1589 + "windows-targets 0.48.5", 1590 + ] 1591 + 1592 + [[package]] 1593 + name = "windows-sys" 1594 + version = "0.52.0" 1595 + source = "registry+https://github.com/rust-lang/crates.io-index" 1596 + checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" 1597 + dependencies = [ 1598 + "windows-targets 0.52.6", 1599 + ] 1600 + 1601 + [[package]] 1602 + name = "windows-sys" 1603 + version = "0.59.0" 1604 + source = "registry+https://github.com/rust-lang/crates.io-index" 1605 + checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" 1606 + dependencies = [ 1607 + "windows-targets 0.52.6", 1608 + ] 1609 + 1610 + [[package]] 1611 + name = "windows-targets" 1612 + version = "0.48.5" 1613 + source = "registry+https://github.com/rust-lang/crates.io-index" 1614 + checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" 1615 + dependencies = [ 1616 + "windows_aarch64_gnullvm 0.48.5", 1617 + "windows_aarch64_msvc 0.48.5", 1618 + "windows_i686_gnu 0.48.5", 1619 + "windows_i686_msvc 0.48.5", 1620 + "windows_x86_64_gnu 0.48.5", 1621 + "windows_x86_64_gnullvm 0.48.5", 1622 + "windows_x86_64_msvc 0.48.5", 1623 + ] 1624 + 1625 + [[package]] 1626 + name = "windows-targets" 1627 + version = "0.52.6" 1628 + source = "registry+https://github.com/rust-lang/crates.io-index" 1629 + checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" 1630 + dependencies = [ 1631 + "windows_aarch64_gnullvm 0.52.6", 1632 + "windows_aarch64_msvc 0.52.6", 1633 + "windows_i686_gnu 0.52.6", 1634 + "windows_i686_gnullvm", 1635 + "windows_i686_msvc 0.52.6", 1636 + "windows_x86_64_gnu 0.52.6", 1637 + "windows_x86_64_gnullvm 0.52.6", 1638 + "windows_x86_64_msvc 0.52.6", 1639 + ] 1640 + 1641 + [[package]] 1642 + name = "windows_aarch64_gnullvm" 1643 + version = "0.48.5" 1644 + source = "registry+https://github.com/rust-lang/crates.io-index" 1645 + checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" 1646 + 1647 + [[package]] 1648 + name = "windows_aarch64_gnullvm" 1649 + version = "0.52.6" 1650 + source = "registry+https://github.com/rust-lang/crates.io-index" 1651 + checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" 1652 + 1653 + [[package]] 1654 + name = "windows_aarch64_msvc" 1655 + version = "0.48.5" 1656 + source = "registry+https://github.com/rust-lang/crates.io-index" 1657 + checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" 1658 + 1659 + [[package]] 1660 + name = "windows_aarch64_msvc" 1661 + version = "0.52.6" 1662 + source = "registry+https://github.com/rust-lang/crates.io-index" 1663 + checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" 1664 + 1665 + [[package]] 1666 + name = "windows_i686_gnu" 1667 + version = "0.48.5" 1668 + source = "registry+https://github.com/rust-lang/crates.io-index" 1669 + checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" 1670 + 1671 + [[package]] 1672 + name = "windows_i686_gnu" 1673 + version = "0.52.6" 1674 + source = "registry+https://github.com/rust-lang/crates.io-index" 1675 + checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" 1676 + 1677 + [[package]] 1678 + name = "windows_i686_gnullvm" 1679 + version = "0.52.6" 1680 + source = "registry+https://github.com/rust-lang/crates.io-index" 1681 + checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" 1682 + 1683 + [[package]] 1684 + name = "windows_i686_msvc" 1685 + version = "0.48.5" 1686 + source = "registry+https://github.com/rust-lang/crates.io-index" 1687 + checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" 1688 + 1689 + [[package]] 1690 + name = "windows_i686_msvc" 1691 + version = "0.52.6" 1692 + source = "registry+https://github.com/rust-lang/crates.io-index" 1693 + checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" 1694 + 1695 + [[package]] 1696 + name = "windows_x86_64_gnu" 1697 + version = "0.48.5" 1698 + source = "registry+https://github.com/rust-lang/crates.io-index" 1699 + checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" 1700 + 1701 + [[package]] 1702 + name = "windows_x86_64_gnu" 1703 + version = "0.52.6" 1704 + source = "registry+https://github.com/rust-lang/crates.io-index" 1705 + checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" 1706 + 1707 + [[package]] 1708 + name = "windows_x86_64_gnullvm" 1709 + version = "0.48.5" 1710 + source = "registry+https://github.com/rust-lang/crates.io-index" 1711 + checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" 1712 + 1713 + [[package]] 1714 + name = "windows_x86_64_gnullvm" 1715 + version = "0.52.6" 1716 + source = "registry+https://github.com/rust-lang/crates.io-index" 1717 + checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" 1718 + 1719 + [[package]] 1720 + name = "windows_x86_64_msvc" 1721 + version = "0.48.5" 1722 + source = "registry+https://github.com/rust-lang/crates.io-index" 1723 + checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" 1724 + 1725 + [[package]] 1726 + name = "windows_x86_64_msvc" 1727 + version = "0.52.6" 1728 + source = "registry+https://github.com/rust-lang/crates.io-index" 1729 + checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" 1730 + 1731 + [[package]] 1732 + name = "winnow" 1733 + version = "0.7.10" 1734 + source = "registry+https://github.com/rust-lang/crates.io-index" 1735 + checksum = "c06928c8748d81b05c9be96aad92e1b6ff01833332f281e8cfca3be4b35fc9ec" 1736 + dependencies = [ 1737 + "memchr", 1738 + ] 1739 + 1740 + [[package]] 1741 + name = "wit-bindgen-rt" 1742 + version = "0.39.0" 1743 + source = "registry+https://github.com/rust-lang/crates.io-index" 1744 + checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" 1745 + dependencies = [ 1746 + "bitflags", 1747 + ] 1748 + 1749 + [[package]] 1750 + name = "zerocopy" 1751 + version = "0.8.25" 1752 + source = "registry+https://github.com/rust-lang/crates.io-index" 1753 + checksum = "a1702d9583232ddb9174e01bb7c15a2ab8fb1bc6f227aa1233858c351a3ba0cb" 1754 + dependencies = [ 1755 + "zerocopy-derive", 1756 + ] 1757 + 1758 + [[package]] 1759 + name = "zerocopy-derive" 1760 + version = "0.8.25" 1761 + source = "registry+https://github.com/rust-lang/crates.io-index" 1762 + checksum = "28a6e20d751156648aa063f3800b706ee209a32c0b4d9f24be3d980b01be55ef" 1763 + dependencies = [ 1764 + "proc-macro2", 1765 + "quote", 1766 + "syn", 1767 + ] 1768 + 1769 + [[package]] 1770 + name = "zeroize" 1771 + version = "1.8.1" 1772 + source = "registry+https://github.com/rust-lang/crates.io-index" 1773 + checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde"
+32
Cargo.toml
··· 1 + [package] 2 + name = "vnd-atproto" 3 + version = "0.0.1" 4 + authors = ["Edouard Paris <m@edouard.paris>"] 5 + edition = "2024" 6 + description = "Vanadium app for atproto plc" 7 + 8 + [package.metadata.vapp] 9 + name = "Atproto" 10 + stack_size = 65536 11 + 12 + [dependencies] 13 + serde_ipld_dagcbor = { git = "http://github.com/edouardparis/serde_ipld_dagcbor", branch = "scopeguard-no-default-features", default-features = false } 14 + sdk = { package = "vanadium-app-sdk", git = "https://github.com/LedgerHQ/vanadium"} 15 + common = { package = "vnd-atproto-common", path = "common" } 16 + base58 = "0.2.0" 17 + serde = { version = "1.0", default-features = false, features = ["alloc"] } 18 + 19 + [patch.crates-io] 20 + cid = { git = "https://github.com/edouardparis/rust-cid", branch = "fix-dep-serde_bytes-features" } 21 + 22 + [dev-dependencies] 23 + hex-literal = "0.4.1" 24 + 25 + [workspace] 26 + resolver = "2" 27 + members = [ 28 + ".", 29 + "common", 30 + "client", 31 + "cli", 32 + ]
+4
README.md
··· 1 + # Vanadium application for Atproto 2 + 3 + 4 + cargo install --git https://github.com/LedgerHQ/vanadium cargo-vnd
+16
cli/Cargo.toml
··· 1 + [package] 2 + name = "vnd-atproto-cli" 3 + version = "0.0.1" 4 + edition = "2021" 5 + 6 + [dependencies] 7 + base58 = "0.2.0" 8 + client = { package = "vnd-atproto-client", path = "../client"} 9 + clap = { version = "4.5.31", features = ["derive"] } 10 + rustyline = "15.0.0" 11 + shellwords = "1.1.0" 12 + hidapi = "2.6.3" 13 + ledger-transport-hid = "0.11.0" 14 + serde = { version = "1.0", default-features = false, features = ["alloc", "derive"] } 15 + tokio = { version = "1.38.1", features = ["io-util", "macros", "net", "rt", "rt-multi-thread", "sync"] } 16 +
+11
cli/history.txt
··· 1 + #V2 2 + help 3 + get_did_key key_index=0 display=true 4 + get_did_key 5 + get_did_key --key_index 0 6 + get_did_key key_index=0 7 + get_key_index 8 + get_did_key 9 + exit 10 + get_key_index 11 + get_did_key
+287
cli/src/main.rs
··· 1 + use base58::ToBase58; 2 + use clap::{CommandFactory, Parser, Subcommand}; 3 + use rustyline::completion::{Completer, Pair}; 4 + use rustyline::error::ReadlineError; 5 + use rustyline::highlight::{CmdKind, Highlighter}; 6 + use rustyline::hint::Hinter; 7 + use rustyline::validate::{ValidationContext, ValidationResult, Validator}; 8 + use rustyline::{Context, Editor, Helper}; 9 + 10 + use hidapi::HidApi; 11 + use ledger_transport_hid::TransportNativeHID; 12 + 13 + use client::{ 14 + transport::{Transport, TransportHID, TransportTcp, TransportWrapper}, 15 + vanadium_client::{NativeAppClient, VanadiumAppClient}, 16 + AtprotoAppClient, 17 + }; 18 + 19 + use std::borrow::Cow; 20 + use std::sync::Arc; 21 + 22 + #[derive(Parser, Debug)] 23 + #[command(name = "vnd-bitcoin-cli")] 24 + struct Cli { 25 + #[clap(subcommand)] 26 + command: CliCommand, 27 + } 28 + 29 + #[derive(Subcommand, Debug)] 30 + #[clap(rename_all = "snake_case")] 31 + enum CliCommand { 32 + GetDidKey { 33 + #[clap(long)] 34 + key_index: Option<u32>, 35 + #[clap(long, default_missing_value = "true", num_args = 0..=1)] 36 + display: bool, 37 + }, 38 + Exit, 39 + } 40 + 41 + // Command completer 42 + struct CommandCompleter; 43 + 44 + impl CommandCompleter { 45 + fn get_current_word<'a>(&self, line: &'a str, pos: usize) -> (usize, &'a str) { 46 + let before = &line[..pos]; 47 + // Find the last space before the cursor; if none, start at 0 48 + let start = before.rfind(' ').map_or(0, |i| i + 1); 49 + let word = &line[start..pos]; 50 + (start, word) 51 + } 52 + } 53 + 54 + fn make_pair(s: &str) -> Pair { 55 + Pair { 56 + display: s.to_string(), 57 + replacement: s.to_string(), 58 + } 59 + } 60 + 61 + impl Completer for CommandCompleter { 62 + type Candidate = Pair; 63 + 64 + fn complete( 65 + &self, 66 + line: &str, 67 + pos: usize, 68 + _ctx: &Context<'_>, 69 + ) -> rustyline::Result<(usize, Vec<Pair>)> { 70 + let prefix = line[..pos].trim_start(); 71 + 72 + // Case 1: Empty input, suggest all subcommands 73 + if prefix.is_empty() || !prefix.contains(' ') { 74 + let suggestions = Cli::command() 75 + .get_subcommands() 76 + .filter(|cmd| cmd.get_name().starts_with(prefix)) 77 + .map(|cmd| make_pair(cmd.get_name())) 78 + .collect(); 79 + return Ok((0, suggestions)); 80 + } 81 + 82 + // Case 3: Subcommand present; suggest possible arguments to complete the command 83 + let subcmd_name = prefix.split_whitespace().next().unwrap(); 84 + if let Some(subcmd) = Cli::command().find_subcommand(subcmd_name) { 85 + let (start, _) = self.get_current_word(line, pos); 86 + 87 + // Collect arguments already present in the line before the cursor 88 + let Ok(present_args) = shellwords::split(&line[..start].trim_end()) else { 89 + return Ok((0, vec![])); // no suggestions if we can't parse the line 90 + }; 91 + 92 + // replace `argument=some_value` with just `argument` for each of present_args 93 + let present_args: Vec<String> = present_args 94 + .into_iter() 95 + .map(|arg| arg.split('=').next().unwrap().to_string()) 96 + .collect(); 97 + 98 + // Get all argument continuations 99 + let suggestions = subcmd 100 + .get_arguments() 101 + .filter_map(|arg| arg.get_long().map(|l| l.to_string())) 102 + .filter(|arg| !present_args.contains(arg)) 103 + .map(|arg| Pair { 104 + display: arg.clone(), 105 + replacement: arg, 106 + }) 107 + .collect(); 108 + return Ok((start, suggestions)); 109 + } 110 + 111 + // Default case: no suggestions 112 + Ok((0, vec![])) 113 + } 114 + } 115 + 116 + impl Validator for CommandCompleter { 117 + fn validate( 118 + &self, 119 + _ctx: &mut ValidationContext<'_>, 120 + ) -> Result<ValidationResult, ReadlineError> { 121 + Ok(ValidationResult::Valid(None)) 122 + } 123 + } 124 + 125 + impl Highlighter for CommandCompleter { 126 + fn highlight<'l>(&self, line: &'l str, _pos: usize) -> Cow<'l, str> { 127 + Cow::Borrowed(line) 128 + } 129 + 130 + fn highlight_char(&self, _line: &str, _pos: usize, _cmd_kind: CmdKind) -> bool { 131 + false 132 + } 133 + } 134 + 135 + impl Hinter for CommandCompleter { 136 + type Hint = String; 137 + 138 + fn hint(&self, _line: &str, _pos: usize, _ctx: &Context<'_>) -> Option<String> { 139 + None 140 + } 141 + } 142 + 143 + impl Helper for CommandCompleter {} 144 + 145 + #[derive(Parser)] 146 + #[command(name = "Vanadium", about = "Run a V-App on Vanadium")] 147 + struct Args { 148 + /// Path to the ELF file of the V-App (if not the default one) 149 + app: Option<String>, 150 + 151 + /// Use the HID interface for a real device, instead of Speculos 152 + #[arg(long, group = "interface")] 153 + hid: bool, 154 + 155 + /// Use the native interface 156 + #[arg(long, group = "interface")] 157 + native: bool, 158 + } 159 + 160 + // a bit of a hack: we convert the prompt in a format that clap can parse 161 + // (adding a dummy command, and replacing each 'argument' with '--argument') 162 + fn prepare_prompt_for_clap(line: &str) -> Result<Vec<String>, String> { 163 + let args = shellwords::split(line).map_err(|e| format!("Failed to parse input: {}", e))?; 164 + if args.is_empty() { 165 + return Err("Empty input".to_string()); 166 + } 167 + 168 + // dummy command, and first command unchanged 169 + let mut clap_args = vec!["dummy".to_string(), args[0].clone()]; 170 + 171 + // prepend `--` to each subsequent argument 172 + for arg in &args[1..] { 173 + clap_args.push(format!("--{}", arg)); 174 + } 175 + Ok(clap_args) 176 + } 177 + 178 + async fn handle_cli_command( 179 + app_client: &mut AtprotoAppClient, 180 + cli: &Cli, 181 + ) -> Result<(), Box<dyn std::error::Error>> { 182 + match &cli.command { 183 + CliCommand::GetDidKey { key_index, display } => { 184 + let key = app_client 185 + .get_did_key(key_index.unwrap_or(0), *display) 186 + .await?; 187 + println!("did:key:z{}", key.to_base58()); 188 + } 189 + CliCommand::Exit => { 190 + return Err("Exiting".into()); 191 + } 192 + } 193 + Ok(()) 194 + } 195 + 196 + #[tokio::main(flavor = "multi_thread")] 197 + async fn main() -> Result<(), Box<dyn std::error::Error>> { 198 + let args = Args::parse(); 199 + 200 + let default_app_path = if args.native { 201 + "../target/x86_64-unknown-linux-gnu/release/vnd-atproto-app" 202 + } else { 203 + "../target/riscv32imc-unknown-none-elf/release/vnd-atproto-app" 204 + }; 205 + 206 + let app_path_str = args.app.unwrap_or(default_app_path.to_string()); 207 + 208 + let mut app_client = if args.native { 209 + AtprotoAppClient::new(Box::new( 210 + NativeAppClient::new(&app_path_str) 211 + .await 212 + .map_err(|_| "Failed to create client")?, 213 + )) 214 + } else { 215 + let transport_raw: Arc< 216 + dyn Transport<Error = Box<dyn std::error::Error + Send + Sync>> + Send + Sync, 217 + > = if args.hid { 218 + Arc::new(TransportHID::new( 219 + TransportNativeHID::new( 220 + &HidApi::new().expect("Unable to get connect to the device"), 221 + ) 222 + .unwrap(), 223 + )) 224 + } else { 225 + Arc::new( 226 + TransportTcp::new() 227 + .await 228 + .expect("Unable to get TCP transport. Is speculos running?"), 229 + ) 230 + }; 231 + let transport = TransportWrapper::new(transport_raw.clone()); 232 + 233 + let (client, _) = VanadiumAppClient::new(&app_path_str, Arc::new(transport), None) 234 + .await 235 + .map_err(|e| format!("Failed to create client: {}", e))?; 236 + 237 + AtprotoAppClient::new(Box::new(client)) 238 + }; 239 + 240 + let mut rl = Editor::<CommandCompleter, rustyline::history::DefaultHistory>::new()?; 241 + rl.set_helper(Some(CommandCompleter)); 242 + 243 + let _ = rl.load_history("history.txt"); 244 + 245 + loop { 246 + match rl.readline("> ") { 247 + Ok(line) => { 248 + if line.trim().is_empty() { 249 + continue; 250 + } 251 + rl.add_history_entry(line.as_str())?; 252 + 253 + let clap_args = match prepare_prompt_for_clap(&line) { 254 + Ok(args) => args, 255 + Err(e) => { 256 + println!("Error: {}", e); 257 + continue; 258 + } 259 + }; 260 + 261 + match Cli::try_parse_from(clap_args) { 262 + Ok(cli) => { 263 + if let Err(e) = handle_cli_command(&mut app_client, &cli).await { 264 + println!("Error: {}", e); 265 + } 266 + } 267 + Err(e) => println!("Invalid command: {}", e), 268 + } 269 + } 270 + Err(ReadlineError::Interrupted) => println!("Interrupted"), 271 + Err(ReadlineError::Eof) => { 272 + println!("Exiting"); 273 + break; 274 + } 275 + Err(err) => { 276 + println!("Error: {:?}", err); 277 + break; 278 + } 279 + } 280 + } 281 + 282 + rl.save_history("history.txt")?; 283 + 284 + app_client.exit().await?; 285 + 286 + Ok(()) 287 + }
+9
client/Cargo.toml
··· 1 + [package] 2 + name = "vnd-atproto-client" 3 + version = "0.0.1" 4 + edition = "2021" 5 + 6 + [dependencies] 7 + common = { package = "vnd-atproto-common", path = "../common"} 8 + sdk = { package = "vanadium-client-sdk", git = "https://github.com/LedgerHQ/vanadium"} 9 + serde_ipld_dagcbor = { git = "http://github.com/edouardparis/serde_ipld_dagcbor", branch = "scopeguard-no-default-features", default-features = false }
+114
client/src/lib.rs
··· 1 + use common::message::{Request, Response}; 2 + use sdk::vanadium_client::{VAppClient, VAppExecutionError}; 3 + 4 + use sdk::comm::SendMessageError; 5 + 6 + pub use sdk::{transport, vanadium_client}; 7 + 8 + #[derive(Debug)] 9 + pub enum AtprotoAppClientError { 10 + VAppExecutionError(VAppExecutionError), 11 + SendMessageError(SendMessageError), 12 + InvalidResponse(&'static str), 13 + GenericError(&'static str), 14 + } 15 + 16 + impl From<VAppExecutionError> for AtprotoAppClientError { 17 + fn from(e: VAppExecutionError) -> Self { 18 + Self::VAppExecutionError(e) 19 + } 20 + } 21 + 22 + impl From<SendMessageError> for AtprotoAppClientError { 23 + fn from(e: SendMessageError) -> Self { 24 + Self::SendMessageError(e) 25 + } 26 + } 27 + 28 + impl From<&'static str> for AtprotoAppClientError { 29 + fn from(e: &'static str) -> Self { 30 + Self::GenericError(e) 31 + } 32 + } 33 + 34 + impl std::fmt::Display for AtprotoAppClientError { 35 + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { 36 + match self { 37 + AtprotoAppClientError::VAppExecutionError(e) => write!(f, "VAppExecutionError: {}", e), 38 + AtprotoAppClientError::SendMessageError(e) => write!(f, "SendMessageError: {}", e), 39 + AtprotoAppClientError::InvalidResponse(e) => write!(f, "InvalidResponse: {}", e), 40 + AtprotoAppClientError::GenericError(e) => write!(f, "GenericError: {}", e), 41 + } 42 + } 43 + } 44 + 45 + impl std::error::Error for AtprotoAppClientError { 46 + fn source(&self) -> Option<&(dyn std::error::Error + 'static)> { 47 + match self { 48 + AtprotoAppClientError::VAppExecutionError(e) => Some(e), 49 + AtprotoAppClientError::SendMessageError(e) => Some(e), 50 + AtprotoAppClientError::InvalidResponse(_) => None, 51 + AtprotoAppClientError::GenericError(_) => None, 52 + } 53 + } 54 + } 55 + 56 + pub struct AtprotoAppClient { 57 + app_client: Box<dyn VAppClient + Send + Sync>, 58 + } 59 + 60 + impl<'a> AtprotoAppClient { 61 + pub fn new(app_client: Box<dyn VAppClient + Send + Sync>) -> Self { 62 + Self { app_client } 63 + } 64 + 65 + async fn send_message(&mut self, out: &[u8]) -> Result<Vec<u8>, AtprotoAppClientError> { 66 + sdk::comm::send_message(&mut self.app_client, out) 67 + .await 68 + .map_err(AtprotoAppClientError::from) 69 + } 70 + 71 + async fn parse_response(response_raw: &'a [u8]) -> Result<Response, AtprotoAppClientError> { 72 + let resp: Response = serde_ipld_dagcbor::from_slice(response_raw) 73 + .map_err(|_| AtprotoAppClientError::GenericError("Failed to parse response"))?; 74 + Ok(resp) 75 + } 76 + 77 + pub async fn get_did_key( 78 + &mut self, 79 + index: u32, 80 + display: bool, 81 + ) -> Result<Vec<u8>, AtprotoAppClientError> { 82 + let msg = serde_ipld_dagcbor::to_vec(&Request::GetDidKey { index, display }) 83 + .map_err(|_| AtprotoAppClientError::GenericError("Failed to serialize Exit request"))?; 84 + 85 + let response_raw = self.send_message(&msg).await?; 86 + match Self::parse_response(&response_raw).await? { 87 + Response::DidKey(key) => Ok(key), 88 + _ => Err(AtprotoAppClientError::InvalidResponse("Invalid response")), 89 + } 90 + } 91 + 92 + pub async fn exit(&mut self) -> Result<i32, AtprotoAppClientError> { 93 + let msg = serde_ipld_dagcbor::to_vec(&Request::Exit) 94 + .map_err(|_| AtprotoAppClientError::GenericError("Failed to serialize Exit request"))?; 95 + let response_raw = self.send_message(&msg).await?; 96 + 97 + match Self::parse_response(&response_raw).await { 98 + Ok(_) => Err(AtprotoAppClientError::InvalidResponse( 99 + "Exit message shouldn't return!", 100 + )), 101 + Err(e) => match e { 102 + AtprotoAppClientError::VAppExecutionError(VAppExecutionError::AppExited( 103 + status, 104 + )) => Ok(status), 105 + e => { 106 + println!("Unexpected error on exit: {:?}", e); 107 + Err(AtprotoAppClientError::InvalidResponse( 108 + "Unexpected error on exit", 109 + )) 110 + } 111 + }, 112 + } 113 + } 114 + }
+9
common/Cargo.toml
··· 1 + [package] 2 + name = "vnd-atproto-common" 3 + version = "0.0.1" 4 + authors = ["Edouard Paris <m@edouard.paris>"] 5 + edition = "2018" 6 + description = "Vanadium app for atproto plc" 7 + 8 + [dependencies] 9 + serde = { version = "1.0", default-features = false, features = ["alloc"] }
+29
common/src/lib.rs
··· 1 + #![cfg_attr(not(test), no_std)] 2 + 3 + extern crate alloc; 4 + 5 + pub mod message { 6 + use alloc::{string::String, vec::Vec}; 7 + use serde::{Deserialize, Serialize}; 8 + 9 + #[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)] 10 + pub enum Request { 11 + Exit, 12 + GetDidKey { index: u32, display: bool }, 13 + // SignPlcOperation { 14 + // key_index: u32, 15 + // previous: Option<PlcOperation>, 16 + // operation: PlcOperation, 17 + // }, 18 + } 19 + 20 + #[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)] 21 + pub enum PlcOperation {} 22 + 23 + #[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)] 24 + pub enum Response { 25 + DidKey(Vec<u8>), 26 + // Signature(Vec<u8>), 27 + Error(String), 28 + } 29 + }
+75
src/main.rs
··· 1 + #![cfg_attr(target_arch = "riscv32", no_std, no_main)] 2 + 3 + extern crate alloc; 4 + 5 + use alloc::{string::ToString, vec::Vec}; 6 + use common::message::{Request, Response}; 7 + use sdk::{ 8 + App, 9 + curve::{Curve, EcfpPrivateKey, Secp256k1, ToPublicKey}, 10 + }; 11 + 12 + sdk::bootstrap!(); 13 + 14 + #[cfg(not(test))] 15 + fn display_key(pubkey: &[u8], index: u32) -> bool { 16 + use alloc::string::ToString; 17 + use base58::ToBase58; 18 + use sdk::ux::TagValue; 19 + 20 + let did_key = alloc::format!("did:key:z{}", pubkey.to_base58()); 21 + 22 + sdk::ux::review_pairs( 23 + "Verify Atproto DID key", 24 + "", 25 + &[TagValue { 26 + tag: "Index".into(), 27 + value: index.to_string(), 28 + }], 29 + &did_key, 30 + "Confirm", 31 + false, 32 + ) 33 + } 34 + 35 + #[cfg(test)] 36 + fn display_key(pubkey: &[u8], index: u32) -> bool { 37 + true 38 + } 39 + 40 + pub fn get_did_key(index: u32, display: bool) -> Result<Response, &'static str> { 41 + if index > 256 { 42 + return Err("Derivation path is too long"); 43 + } 44 + 45 + let hd_node = sdk::curve::Secp256k1::derive_hd_node(&[index])?; 46 + let privkey: EcfpPrivateKey<Secp256k1, 32> = EcfpPrivateKey::new(*hd_node.privkey); 47 + let pubkey = privkey.to_public_key(); 48 + let uncompressed_pubkey = pubkey.as_ref().to_bytes(); 49 + 50 + let mut key = Vec::with_capacity(34); 51 + key.push(0xE7); 52 + key.push(uncompressed_pubkey[64] % 2 + 0x02); 53 + key.extend_from_slice(&uncompressed_pubkey[1..33]); 54 + 55 + if display && !display_key(&key, index) { 56 + return Err("Rejected by the user"); 57 + } 58 + 59 + Ok(Response::DidKey(key)) 60 + } 61 + 62 + fn process(_app: &mut App, request: &[u8]) -> Vec<u8> { 63 + let request: Request = serde_ipld_dagcbor::from_slice(request).unwrap(); 64 + let response = match request { 65 + Request::Exit => sdk::exit(0), 66 + Request::GetDidKey { index, display } => get_did_key(index, display) 67 + .map_err(|e| Response::Error(e.to_string())) 68 + .unwrap(), 69 + }; 70 + serde_ipld_dagcbor::to_vec(&response).unwrap() 71 + } 72 + 73 + pub fn main() { 74 + App::new(process).run() 75 + }