├── .gitignore ├── Cargo.lock ├── Cargo.toml ├── README.md └── src ├── create.rs ├── main.rs └── read.rs /.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | /release -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 3 4 | 5 | [[package]] 6 | name = "adler" 7 | version = "1.0.2" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" 10 | 11 | [[package]] 12 | name = "adler32" 13 | version = "1.2.0" 14 | source = "registry+https://github.com/rust-lang/crates.io-index" 15 | checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234" 16 | 17 | [[package]] 18 | name = "ahash" 19 | version = "0.7.6" 20 | source = "registry+https://github.com/rust-lang/crates.io-index" 21 | checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" 22 | dependencies = [ 23 | "getrandom", 24 | "once_cell", 25 | "version_check", 26 | ] 27 | 28 | [[package]] 29 | name = "autocfg" 30 | version = "1.1.0" 31 | source = "registry+https://github.com/rust-lang/crates.io-index" 32 | checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" 33 | 34 | [[package]] 35 | name = "base64" 36 | version = "0.20.0-alpha.1" 37 | source = "registry+https://github.com/rust-lang/crates.io-index" 38 | checksum = "149ea5dc24cb11513350770afebba32b68e3d2e356f9221351a2a1ee89112a82" 39 | 40 | [[package]] 41 | name = "bit_field" 42 | version = "0.10.1" 43 | source = "registry+https://github.com/rust-lang/crates.io-index" 44 | checksum = "dcb6dd1c2376d2e096796e234a70e17e94cc2d5d54ff8ce42b28cef1d0d359a4" 45 | 46 | [[package]] 47 | name = "bitflags" 48 | version = "1.3.2" 49 | source = "registry+https://github.com/rust-lang/crates.io-index" 50 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" 51 | 52 | [[package]] 53 | name = "bumpalo" 54 | version = "3.9.1" 55 | source = "registry+https://github.com/rust-lang/crates.io-index" 56 | checksum = "a4a45a46ab1f2412e53d3a0ade76ffad2025804294569aae387231a0cd6e0899" 57 | 58 | [[package]] 59 | name = "bytemuck" 60 | version = "1.9.1" 61 | source = "registry+https://github.com/rust-lang/crates.io-index" 62 | checksum = "cdead85bdec19c194affaeeb670c0e41fe23de31459efd1c174d049269cf02cc" 63 | 64 | [[package]] 65 | name = "byteorder" 66 | version = "1.4.3" 67 | source = "registry+https://github.com/rust-lang/crates.io-index" 68 | checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" 69 | 70 | [[package]] 71 | name = "cfg-if" 72 | version = "1.0.0" 73 | source = "registry+https://github.com/rust-lang/crates.io-index" 74 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 75 | 76 | [[package]] 77 | name = "cipher-crypt" 78 | version = "0.16.0" 79 | source = "registry+https://github.com/rust-lang/crates.io-index" 80 | checksum = "0155c54cc56165a42abb4b74bce3939c98667794c830f35d201713652ceec882" 81 | dependencies = [ 82 | "lazy_static", 83 | "lipsum", 84 | "maplit", 85 | "num", 86 | "rulinalg", 87 | ] 88 | 89 | [[package]] 90 | name = "color_quant" 91 | version = "1.1.0" 92 | source = "registry+https://github.com/rust-lang/crates.io-index" 93 | checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" 94 | 95 | [[package]] 96 | name = "crc32fast" 97 | version = "1.3.2" 98 | source = "registry+https://github.com/rust-lang/crates.io-index" 99 | checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" 100 | dependencies = [ 101 | "cfg-if", 102 | ] 103 | 104 | [[package]] 105 | name = "crossbeam-channel" 106 | version = "0.5.4" 107 | source = "registry+https://github.com/rust-lang/crates.io-index" 108 | checksum = "5aaa7bd5fb665c6864b5f963dd9097905c54125909c7aa94c9e18507cdbe6c53" 109 | dependencies = [ 110 | "cfg-if", 111 | "crossbeam-utils", 112 | ] 113 | 114 | [[package]] 115 | name = "crossbeam-deque" 116 | version = "0.8.1" 117 | source = "registry+https://github.com/rust-lang/crates.io-index" 118 | checksum = "6455c0ca19f0d2fbf751b908d5c55c1f5cbc65e03c4225427254b46890bdde1e" 119 | dependencies = [ 120 | "cfg-if", 121 | "crossbeam-epoch", 122 | "crossbeam-utils", 123 | ] 124 | 125 | [[package]] 126 | name = "crossbeam-epoch" 127 | version = "0.9.8" 128 | source = "registry+https://github.com/rust-lang/crates.io-index" 129 | checksum = "1145cf131a2c6ba0615079ab6a638f7e1973ac9c2634fcbeaaad6114246efe8c" 130 | dependencies = [ 131 | "autocfg", 132 | "cfg-if", 133 | "crossbeam-utils", 134 | "lazy_static", 135 | "memoffset", 136 | "scopeguard", 137 | ] 138 | 139 | [[package]] 140 | name = "crossbeam-utils" 141 | version = "0.8.8" 142 | source = "registry+https://github.com/rust-lang/crates.io-index" 143 | checksum = "0bf124c720b7686e3c2663cf54062ab0f68a88af2fb6a030e87e30bf721fcb38" 144 | dependencies = [ 145 | "cfg-if", 146 | "lazy_static", 147 | ] 148 | 149 | [[package]] 150 | name = "crypto-morse" 151 | version = "0.2.0" 152 | source = "registry+https://github.com/rust-lang/crates.io-index" 153 | checksum = "8bb506f6f3fbe1317f399d753a04c411921f302d323777c22ed9ab45e91a821d" 154 | 155 | [[package]] 156 | name = "deflate" 157 | version = "1.0.0" 158 | source = "registry+https://github.com/rust-lang/crates.io-index" 159 | checksum = "c86f7e25f518f4b81808a2cf1c50996a61f5c2eb394b2393bd87f2a4780a432f" 160 | dependencies = [ 161 | "adler32", 162 | ] 163 | 164 | [[package]] 165 | name = "either" 166 | version = "1.6.1" 167 | source = "registry+https://github.com/rust-lang/crates.io-index" 168 | checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" 169 | 170 | [[package]] 171 | name = "exr" 172 | version = "1.4.2" 173 | source = "registry+https://github.com/rust-lang/crates.io-index" 174 | checksum = "14cc0e06fb5f67e5d6beadf3a382fec9baca1aa751c6d5368fdeee7e5932c215" 175 | dependencies = [ 176 | "bit_field", 177 | "deflate", 178 | "flume", 179 | "half", 180 | "inflate", 181 | "lebe", 182 | "smallvec", 183 | "threadpool", 184 | ] 185 | 186 | [[package]] 187 | name = "flate2" 188 | version = "1.0.23" 189 | source = "registry+https://github.com/rust-lang/crates.io-index" 190 | checksum = "b39522e96686d38f4bc984b9198e3a0613264abaebaff2c5c918bfa6b6da09af" 191 | dependencies = [ 192 | "cfg-if", 193 | "crc32fast", 194 | "libc", 195 | "miniz_oxide", 196 | ] 197 | 198 | [[package]] 199 | name = "flume" 200 | version = "0.10.12" 201 | source = "registry+https://github.com/rust-lang/crates.io-index" 202 | checksum = "843c03199d0c0ca54bc1ea90ac0d507274c28abcc4f691ae8b4eaa375087c76a" 203 | dependencies = [ 204 | "futures-core", 205 | "futures-sink", 206 | "nanorand", 207 | "pin-project", 208 | "spin", 209 | ] 210 | 211 | [[package]] 212 | name = "fuchsia-cprng" 213 | version = "0.1.1" 214 | source = "registry+https://github.com/rust-lang/crates.io-index" 215 | checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" 216 | 217 | [[package]] 218 | name = "futures-core" 219 | version = "0.3.21" 220 | source = "registry+https://github.com/rust-lang/crates.io-index" 221 | checksum = "0c09fd04b7e4073ac7156a9539b57a484a8ea920f79c7c675d05d289ab6110d3" 222 | 223 | [[package]] 224 | name = "futures-sink" 225 | version = "0.3.21" 226 | source = "registry+https://github.com/rust-lang/crates.io-index" 227 | checksum = "21163e139fa306126e6eedaf49ecdb4588f939600f0b1e770f4205ee4b7fa868" 228 | 229 | [[package]] 230 | name = "g2gen" 231 | version = "0.4.0" 232 | source = "registry+https://github.com/rust-lang/crates.io-index" 233 | checksum = "2fc100b16c63808c5c388cd23ff94c5a35cf28ea459f336323f7948a39480555" 234 | dependencies = [ 235 | "g2poly", 236 | "proc-macro2 0.4.30", 237 | "quote 0.6.13", 238 | "syn 0.15.44", 239 | ] 240 | 241 | [[package]] 242 | name = "g2p" 243 | version = "0.4.0" 244 | source = "registry+https://github.com/rust-lang/crates.io-index" 245 | checksum = "bf09bc632629cbe5420b330e45bcc8f80403e74ba1027d213258914fd5c62755" 246 | dependencies = [ 247 | "g2gen", 248 | "g2poly", 249 | ] 250 | 251 | [[package]] 252 | name = "g2poly" 253 | version = "0.4.0" 254 | source = "registry+https://github.com/rust-lang/crates.io-index" 255 | checksum = "e837767888fca507f07e89c90e0b350da7bbb89170f67a4655dc9bdc4cca457b" 256 | 257 | [[package]] 258 | name = "getrandom" 259 | version = "0.2.6" 260 | source = "registry+https://github.com/rust-lang/crates.io-index" 261 | checksum = "9be70c98951c83b8d2f8f60d7065fa6d5146873094452a1008da8c2f1e4205ad" 262 | dependencies = [ 263 | "cfg-if", 264 | "js-sys", 265 | "libc", 266 | "wasi", 267 | "wasm-bindgen", 268 | ] 269 | 270 | [[package]] 271 | name = "gif" 272 | version = "0.11.3" 273 | source = "registry+https://github.com/rust-lang/crates.io-index" 274 | checksum = "c3a7187e78088aead22ceedeee99779455b23fc231fe13ec443f99bb71694e5b" 275 | dependencies = [ 276 | "color_quant", 277 | "weezl", 278 | ] 279 | 280 | [[package]] 281 | name = "half" 282 | version = "1.8.2" 283 | source = "registry+https://github.com/rust-lang/crates.io-index" 284 | checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7" 285 | 286 | [[package]] 287 | name = "hashbrown" 288 | version = "0.11.2" 289 | source = "registry+https://github.com/rust-lang/crates.io-index" 290 | checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" 291 | dependencies = [ 292 | "ahash", 293 | ] 294 | 295 | [[package]] 296 | name = "hermit-abi" 297 | version = "0.1.19" 298 | source = "registry+https://github.com/rust-lang/crates.io-index" 299 | checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" 300 | dependencies = [ 301 | "libc", 302 | ] 303 | 304 | [[package]] 305 | name = "hex" 306 | version = "0.4.3" 307 | source = "registry+https://github.com/rust-lang/crates.io-index" 308 | checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" 309 | 310 | [[package]] 311 | name = "image" 312 | version = "0.24.2" 313 | source = "registry+https://github.com/rust-lang/crates.io-index" 314 | checksum = "28edd9d7bc256be2502e325ac0628bde30b7001b9b52e0abe31a1a9dc2701212" 315 | dependencies = [ 316 | "bytemuck", 317 | "byteorder", 318 | "color_quant", 319 | "exr", 320 | "gif", 321 | "jpeg-decoder", 322 | "num-iter", 323 | "num-rational 0.4.0", 324 | "num-traits", 325 | "png", 326 | "scoped_threadpool", 327 | "tiff", 328 | ] 329 | 330 | [[package]] 331 | name = "inflate" 332 | version = "0.4.5" 333 | source = "registry+https://github.com/rust-lang/crates.io-index" 334 | checksum = "1cdb29978cc5797bd8dcc8e5bf7de604891df2a8dc576973d71a281e916db2ff" 335 | dependencies = [ 336 | "adler32", 337 | ] 338 | 339 | [[package]] 340 | name = "jpeg-decoder" 341 | version = "0.2.4" 342 | source = "registry+https://github.com/rust-lang/crates.io-index" 343 | checksum = "744c24117572563a98a7e9168a5ac1ee4a1ca7f702211258797bbe0ed0346c3c" 344 | dependencies = [ 345 | "rayon", 346 | ] 347 | 348 | [[package]] 349 | name = "js-sys" 350 | version = "0.3.57" 351 | source = "registry+https://github.com/rust-lang/crates.io-index" 352 | checksum = "671a26f820db17c2a2750743f1dd03bafd15b98c9f30c7c2628c024c05d73397" 353 | dependencies = [ 354 | "wasm-bindgen", 355 | ] 356 | 357 | [[package]] 358 | name = "lazy_static" 359 | version = "1.4.0" 360 | source = "registry+https://github.com/rust-lang/crates.io-index" 361 | checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" 362 | 363 | [[package]] 364 | name = "lebe" 365 | version = "0.5.1" 366 | source = "registry+https://github.com/rust-lang/crates.io-index" 367 | checksum = "7efd1d698db0759e6ef11a7cd44407407399a910c774dd804c64c032da7826ff" 368 | 369 | [[package]] 370 | name = "libc" 371 | version = "0.2.125" 372 | source = "registry+https://github.com/rust-lang/crates.io-index" 373 | checksum = "5916d2ae698f6de9bfb891ad7a8d65c09d232dc58cc4ac433c7da3b2fd84bc2b" 374 | 375 | [[package]] 376 | name = "lipsum" 377 | version = "0.4.0" 378 | source = "registry+https://github.com/rust-lang/crates.io-index" 379 | checksum = "bccb3237c84870b9e49be7cfe8e5e5a70587650957f2edab3ee111865e226c9f" 380 | dependencies = [ 381 | "rand 0.3.23", 382 | ] 383 | 384 | [[package]] 385 | name = "lock_api" 386 | version = "0.4.7" 387 | source = "registry+https://github.com/rust-lang/crates.io-index" 388 | checksum = "327fa5b6a6940e4699ec49a9beae1ea4845c6bab9314e4f84ac68742139d8c53" 389 | dependencies = [ 390 | "autocfg", 391 | "scopeguard", 392 | ] 393 | 394 | [[package]] 395 | name = "log" 396 | version = "0.4.16" 397 | source = "registry+https://github.com/rust-lang/crates.io-index" 398 | checksum = "6389c490849ff5bc16be905ae24bc913a9c8892e19b2341dbc175e14c341c2b8" 399 | dependencies = [ 400 | "cfg-if", 401 | ] 402 | 403 | [[package]] 404 | name = "lru" 405 | version = "0.7.5" 406 | source = "registry+https://github.com/rust-lang/crates.io-index" 407 | checksum = "32613e41de4c47ab04970c348ca7ae7382cf116625755af070b008a15516a889" 408 | dependencies = [ 409 | "hashbrown", 410 | ] 411 | 412 | [[package]] 413 | name = "maplit" 414 | version = "1.0.2" 415 | source = "registry+https://github.com/rust-lang/crates.io-index" 416 | checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d" 417 | 418 | [[package]] 419 | name = "matrixmultiply" 420 | version = "0.1.15" 421 | source = "registry+https://github.com/rust-lang/crates.io-index" 422 | checksum = "dcad67dcec2d58ff56f6292582377e6921afdf3bfbd533e26fb8900ae575e002" 423 | dependencies = [ 424 | "rawpointer", 425 | ] 426 | 427 | [[package]] 428 | name = "memoffset" 429 | version = "0.6.5" 430 | source = "registry+https://github.com/rust-lang/crates.io-index" 431 | checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" 432 | dependencies = [ 433 | "autocfg", 434 | ] 435 | 436 | [[package]] 437 | name = "miniz_oxide" 438 | version = "0.5.1" 439 | source = "registry+https://github.com/rust-lang/crates.io-index" 440 | checksum = "d2b29bd4bc3f33391105ebee3589c19197c4271e3e5a9ec9bfe8127eeff8f082" 441 | dependencies = [ 442 | "adler", 443 | ] 444 | 445 | [[package]] 446 | name = "nanorand" 447 | version = "0.7.0" 448 | source = "registry+https://github.com/rust-lang/crates.io-index" 449 | checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3" 450 | dependencies = [ 451 | "getrandom", 452 | ] 453 | 454 | [[package]] 455 | name = "num" 456 | version = "0.1.42" 457 | source = "registry+https://github.com/rust-lang/crates.io-index" 458 | checksum = "4703ad64153382334aa8db57c637364c322d3372e097840c72000dabdcf6156e" 459 | dependencies = [ 460 | "num-bigint", 461 | "num-complex", 462 | "num-integer", 463 | "num-iter", 464 | "num-rational 0.1.42", 465 | "num-traits", 466 | ] 467 | 468 | [[package]] 469 | name = "num-bigint" 470 | version = "0.1.44" 471 | source = "registry+https://github.com/rust-lang/crates.io-index" 472 | checksum = "e63899ad0da84ce718c14936262a41cee2c79c981fc0a0e7c7beb47d5a07e8c1" 473 | dependencies = [ 474 | "num-integer", 475 | "num-traits", 476 | "rand 0.4.6", 477 | "rustc-serialize", 478 | ] 479 | 480 | [[package]] 481 | name = "num-complex" 482 | version = "0.1.43" 483 | source = "registry+https://github.com/rust-lang/crates.io-index" 484 | checksum = "b288631d7878aaf59442cffd36910ea604ecd7745c36054328595114001c9656" 485 | dependencies = [ 486 | "num-traits", 487 | "rustc-serialize", 488 | ] 489 | 490 | [[package]] 491 | name = "num-integer" 492 | version = "0.1.45" 493 | source = "registry+https://github.com/rust-lang/crates.io-index" 494 | checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" 495 | dependencies = [ 496 | "autocfg", 497 | "num-traits", 498 | ] 499 | 500 | [[package]] 501 | name = "num-iter" 502 | version = "0.1.43" 503 | source = "registry+https://github.com/rust-lang/crates.io-index" 504 | checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252" 505 | dependencies = [ 506 | "autocfg", 507 | "num-integer", 508 | "num-traits", 509 | ] 510 | 511 | [[package]] 512 | name = "num-rational" 513 | version = "0.1.42" 514 | source = "registry+https://github.com/rust-lang/crates.io-index" 515 | checksum = "ee314c74bd753fc86b4780aa9475da469155f3848473a261d2d18e35245a784e" 516 | dependencies = [ 517 | "num-bigint", 518 | "num-integer", 519 | "num-traits", 520 | "rustc-serialize", 521 | ] 522 | 523 | [[package]] 524 | name = "num-rational" 525 | version = "0.4.0" 526 | source = "registry+https://github.com/rust-lang/crates.io-index" 527 | checksum = "d41702bd167c2df5520b384281bc111a4b5efcf7fbc4c9c222c815b07e0a6a6a" 528 | dependencies = [ 529 | "autocfg", 530 | "num-integer", 531 | "num-traits", 532 | ] 533 | 534 | [[package]] 535 | name = "num-traits" 536 | version = "0.2.14" 537 | source = "registry+https://github.com/rust-lang/crates.io-index" 538 | checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" 539 | dependencies = [ 540 | "autocfg", 541 | ] 542 | 543 | [[package]] 544 | name = "num_cpus" 545 | version = "1.13.1" 546 | source = "registry+https://github.com/rust-lang/crates.io-index" 547 | checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1" 548 | dependencies = [ 549 | "hermit-abi", 550 | "libc", 551 | ] 552 | 553 | [[package]] 554 | name = "once_cell" 555 | version = "1.10.0" 556 | source = "registry+https://github.com/rust-lang/crates.io-index" 557 | checksum = "87f3e037eac156d1775da914196f0f37741a274155e34a0b7e427c35d2a2ecb9" 558 | 559 | [[package]] 560 | name = "pin-project" 561 | version = "1.0.10" 562 | source = "registry+https://github.com/rust-lang/crates.io-index" 563 | checksum = "58ad3879ad3baf4e44784bc6a718a8698867bb991f8ce24d1bcbe2cfb4c3a75e" 564 | dependencies = [ 565 | "pin-project-internal", 566 | ] 567 | 568 | [[package]] 569 | name = "pin-project-internal" 570 | version = "1.0.10" 571 | source = "registry+https://github.com/rust-lang/crates.io-index" 572 | checksum = "744b6f092ba29c3650faf274db506afd39944f48420f6c86b17cfe0ee1cb36bb" 573 | dependencies = [ 574 | "proc-macro2 1.0.37", 575 | "quote 1.0.18", 576 | "syn 1.0.92", 577 | ] 578 | 579 | [[package]] 580 | name = "png" 581 | version = "0.17.5" 582 | source = "registry+https://github.com/rust-lang/crates.io-index" 583 | checksum = "dc38c0ad57efb786dd57b9864e5b18bae478c00c824dc55a38bbc9da95dde3ba" 584 | dependencies = [ 585 | "bitflags", 586 | "crc32fast", 587 | "deflate", 588 | "miniz_oxide", 589 | ] 590 | 591 | [[package]] 592 | name = "proc-macro2" 593 | version = "0.4.30" 594 | source = "registry+https://github.com/rust-lang/crates.io-index" 595 | checksum = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759" 596 | dependencies = [ 597 | "unicode-xid 0.1.0", 598 | ] 599 | 600 | [[package]] 601 | name = "proc-macro2" 602 | version = "1.0.37" 603 | source = "registry+https://github.com/rust-lang/crates.io-index" 604 | checksum = "ec757218438d5fda206afc041538b2f6d889286160d649a86a24d37e1235afd1" 605 | dependencies = [ 606 | "unicode-xid 0.2.2", 607 | ] 608 | 609 | [[package]] 610 | name = "qrcode-encrypt" 611 | version = "0.1.0" 612 | dependencies = [ 613 | "base64", 614 | "cipher-crypt", 615 | "crypto-morse", 616 | "hex", 617 | "image", 618 | "qrcode-png", 619 | "rqrr", 620 | ] 621 | 622 | [[package]] 623 | name = "qrcode-png" 624 | version = "0.4.0" 625 | source = "registry+https://github.com/rust-lang/crates.io-index" 626 | checksum = "ac3806da6b6da2dd171b6fb9aa636bd8df1d5d67571f3811ec34efe336777adc" 627 | dependencies = [ 628 | "png", 629 | "qrcodegen", 630 | ] 631 | 632 | [[package]] 633 | name = "qrcodegen" 634 | version = "1.8.0" 635 | source = "registry+https://github.com/rust-lang/crates.io-index" 636 | checksum = "4339fc7a1021c9c1621d87f5e3505f2805c8c105420ba2f2a4df86814590c142" 637 | 638 | [[package]] 639 | name = "quote" 640 | version = "0.6.13" 641 | source = "registry+https://github.com/rust-lang/crates.io-index" 642 | checksum = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1" 643 | dependencies = [ 644 | "proc-macro2 0.4.30", 645 | ] 646 | 647 | [[package]] 648 | name = "quote" 649 | version = "1.0.18" 650 | source = "registry+https://github.com/rust-lang/crates.io-index" 651 | checksum = "a1feb54ed693b93a84e14094943b84b7c4eae204c512b7ccb95ab0c66d278ad1" 652 | dependencies = [ 653 | "proc-macro2 1.0.37", 654 | ] 655 | 656 | [[package]] 657 | name = "rand" 658 | version = "0.3.23" 659 | source = "registry+https://github.com/rust-lang/crates.io-index" 660 | checksum = "64ac302d8f83c0c1974bf758f6b041c6c8ada916fbb44a609158ca8b064cc76c" 661 | dependencies = [ 662 | "libc", 663 | "rand 0.4.6", 664 | ] 665 | 666 | [[package]] 667 | name = "rand" 668 | version = "0.4.6" 669 | source = "registry+https://github.com/rust-lang/crates.io-index" 670 | checksum = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293" 671 | dependencies = [ 672 | "fuchsia-cprng", 673 | "libc", 674 | "rand_core 0.3.1", 675 | "rdrand", 676 | "winapi", 677 | ] 678 | 679 | [[package]] 680 | name = "rand_core" 681 | version = "0.3.1" 682 | source = "registry+https://github.com/rust-lang/crates.io-index" 683 | checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" 684 | dependencies = [ 685 | "rand_core 0.4.2", 686 | ] 687 | 688 | [[package]] 689 | name = "rand_core" 690 | version = "0.4.2" 691 | source = "registry+https://github.com/rust-lang/crates.io-index" 692 | checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" 693 | 694 | [[package]] 695 | name = "rawpointer" 696 | version = "0.1.0" 697 | source = "registry+https://github.com/rust-lang/crates.io-index" 698 | checksum = "ebac11a9d2e11f2af219b8b8d833b76b1ea0e054aa0e8d8e9e4cbde353bdf019" 699 | 700 | [[package]] 701 | name = "rayon" 702 | version = "1.5.2" 703 | source = "registry+https://github.com/rust-lang/crates.io-index" 704 | checksum = "fd249e82c21598a9a426a4e00dd7adc1d640b22445ec8545feef801d1a74c221" 705 | dependencies = [ 706 | "autocfg", 707 | "crossbeam-deque", 708 | "either", 709 | "rayon-core", 710 | ] 711 | 712 | [[package]] 713 | name = "rayon-core" 714 | version = "1.9.2" 715 | source = "registry+https://github.com/rust-lang/crates.io-index" 716 | checksum = "9f51245e1e62e1f1629cbfec37b5793bbabcaeb90f30e94d2ba03564687353e4" 717 | dependencies = [ 718 | "crossbeam-channel", 719 | "crossbeam-deque", 720 | "crossbeam-utils", 721 | "num_cpus", 722 | ] 723 | 724 | [[package]] 725 | name = "rdrand" 726 | version = "0.4.0" 727 | source = "registry+https://github.com/rust-lang/crates.io-index" 728 | checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" 729 | dependencies = [ 730 | "rand_core 0.3.1", 731 | ] 732 | 733 | [[package]] 734 | name = "rqrr" 735 | version = "0.5.1" 736 | source = "registry+https://github.com/rust-lang/crates.io-index" 737 | checksum = "60b59469b84c4786afe857cc5bdc9a017be2d2b7ba0356d9ba613437099079e1" 738 | dependencies = [ 739 | "g2p", 740 | "image", 741 | "lru", 742 | ] 743 | 744 | [[package]] 745 | name = "rulinalg" 746 | version = "0.4.2" 747 | source = "registry+https://github.com/rust-lang/crates.io-index" 748 | checksum = "04ada202c9685e1d72a7420c578e92b358dbf807d3dfabb676a3dab9cc3bb12f" 749 | dependencies = [ 750 | "matrixmultiply", 751 | "num", 752 | ] 753 | 754 | [[package]] 755 | name = "rustc-serialize" 756 | version = "0.3.24" 757 | source = "registry+https://github.com/rust-lang/crates.io-index" 758 | checksum = "dcf128d1287d2ea9d80910b5f1120d0b8eede3fbf1abe91c40d39ea7d51e6fda" 759 | 760 | [[package]] 761 | name = "scoped_threadpool" 762 | version = "0.1.9" 763 | source = "registry+https://github.com/rust-lang/crates.io-index" 764 | checksum = "1d51f5df5af43ab3f1360b429fa5e0152ac5ce8c0bd6485cae490332e96846a8" 765 | 766 | [[package]] 767 | name = "scopeguard" 768 | version = "1.1.0" 769 | source = "registry+https://github.com/rust-lang/crates.io-index" 770 | checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" 771 | 772 | [[package]] 773 | name = "smallvec" 774 | version = "1.8.0" 775 | source = "registry+https://github.com/rust-lang/crates.io-index" 776 | checksum = "f2dd574626839106c320a323308629dcb1acfc96e32a8cba364ddc61ac23ee83" 777 | 778 | [[package]] 779 | name = "spin" 780 | version = "0.9.3" 781 | source = "registry+https://github.com/rust-lang/crates.io-index" 782 | checksum = "c530c2b0d0bf8b69304b39fe2001993e267461948b890cd037d8ad4293fa1a0d" 783 | dependencies = [ 784 | "lock_api", 785 | ] 786 | 787 | [[package]] 788 | name = "syn" 789 | version = "0.15.44" 790 | source = "registry+https://github.com/rust-lang/crates.io-index" 791 | checksum = "9ca4b3b69a77cbe1ffc9e198781b7acb0c7365a883670e8f1c1bc66fba79a5c5" 792 | dependencies = [ 793 | "proc-macro2 0.4.30", 794 | "quote 0.6.13", 795 | "unicode-xid 0.1.0", 796 | ] 797 | 798 | [[package]] 799 | name = "syn" 800 | version = "1.0.92" 801 | source = "registry+https://github.com/rust-lang/crates.io-index" 802 | checksum = "7ff7c592601f11445996a06f8ad0c27f094a58857c2f89e97974ab9235b92c52" 803 | dependencies = [ 804 | "proc-macro2 1.0.37", 805 | "quote 1.0.18", 806 | "unicode-xid 0.2.2", 807 | ] 808 | 809 | [[package]] 810 | name = "threadpool" 811 | version = "1.8.1" 812 | source = "registry+https://github.com/rust-lang/crates.io-index" 813 | checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa" 814 | dependencies = [ 815 | "num_cpus", 816 | ] 817 | 818 | [[package]] 819 | name = "tiff" 820 | version = "0.7.2" 821 | source = "registry+https://github.com/rust-lang/crates.io-index" 822 | checksum = "7cfada0986f446a770eca461e8c6566cb879682f7d687c8348aa0c857bd52286" 823 | dependencies = [ 824 | "flate2", 825 | "jpeg-decoder", 826 | "weezl", 827 | ] 828 | 829 | [[package]] 830 | name = "unicode-xid" 831 | version = "0.1.0" 832 | source = "registry+https://github.com/rust-lang/crates.io-index" 833 | checksum = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" 834 | 835 | [[package]] 836 | name = "unicode-xid" 837 | version = "0.2.2" 838 | source = "registry+https://github.com/rust-lang/crates.io-index" 839 | checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" 840 | 841 | [[package]] 842 | name = "version_check" 843 | version = "0.9.4" 844 | source = "registry+https://github.com/rust-lang/crates.io-index" 845 | checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" 846 | 847 | [[package]] 848 | name = "wasi" 849 | version = "0.10.2+wasi-snapshot-preview1" 850 | source = "registry+https://github.com/rust-lang/crates.io-index" 851 | checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" 852 | 853 | [[package]] 854 | name = "wasm-bindgen" 855 | version = "0.2.80" 856 | source = "registry+https://github.com/rust-lang/crates.io-index" 857 | checksum = "27370197c907c55e3f1a9fbe26f44e937fe6451368324e009cba39e139dc08ad" 858 | dependencies = [ 859 | "cfg-if", 860 | "wasm-bindgen-macro", 861 | ] 862 | 863 | [[package]] 864 | name = "wasm-bindgen-backend" 865 | version = "0.2.80" 866 | source = "registry+https://github.com/rust-lang/crates.io-index" 867 | checksum = "53e04185bfa3a779273da532f5025e33398409573f348985af9a1cbf3774d3f4" 868 | dependencies = [ 869 | "bumpalo", 870 | "lazy_static", 871 | "log", 872 | "proc-macro2 1.0.37", 873 | "quote 1.0.18", 874 | "syn 1.0.92", 875 | "wasm-bindgen-shared", 876 | ] 877 | 878 | [[package]] 879 | name = "wasm-bindgen-macro" 880 | version = "0.2.80" 881 | source = "registry+https://github.com/rust-lang/crates.io-index" 882 | checksum = "17cae7ff784d7e83a2fe7611cfe766ecf034111b49deb850a3dc7699c08251f5" 883 | dependencies = [ 884 | "quote 1.0.18", 885 | "wasm-bindgen-macro-support", 886 | ] 887 | 888 | [[package]] 889 | name = "wasm-bindgen-macro-support" 890 | version = "0.2.80" 891 | source = "registry+https://github.com/rust-lang/crates.io-index" 892 | checksum = "99ec0dc7a4756fffc231aab1b9f2f578d23cd391390ab27f952ae0c9b3ece20b" 893 | dependencies = [ 894 | "proc-macro2 1.0.37", 895 | "quote 1.0.18", 896 | "syn 1.0.92", 897 | "wasm-bindgen-backend", 898 | "wasm-bindgen-shared", 899 | ] 900 | 901 | [[package]] 902 | name = "wasm-bindgen-shared" 903 | version = "0.2.80" 904 | source = "registry+https://github.com/rust-lang/crates.io-index" 905 | checksum = "d554b7f530dee5964d9a9468d95c1f8b8acae4f282807e7d27d4b03099a46744" 906 | 907 | [[package]] 908 | name = "weezl" 909 | version = "0.1.6" 910 | source = "registry+https://github.com/rust-lang/crates.io-index" 911 | checksum = "9c97e489d8f836838d497091de568cf16b117486d529ec5579233521065bd5e4" 912 | 913 | [[package]] 914 | name = "winapi" 915 | version = "0.3.9" 916 | source = "registry+https://github.com/rust-lang/crates.io-index" 917 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 918 | dependencies = [ 919 | "winapi-i686-pc-windows-gnu", 920 | "winapi-x86_64-pc-windows-gnu", 921 | ] 922 | 923 | [[package]] 924 | name = "winapi-i686-pc-windows-gnu" 925 | version = "0.4.0" 926 | source = "registry+https://github.com/rust-lang/crates.io-index" 927 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 928 | 929 | [[package]] 930 | name = "winapi-x86_64-pc-windows-gnu" 931 | version = "0.4.0" 932 | source = "registry+https://github.com/rust-lang/crates.io-index" 933 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 934 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "qrcode-encrypt" 3 | version = "0.1.0" 4 | edition = "2021" 5 | 6 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html 7 | 8 | [dependencies] 9 | qrcode-png = "*" 10 | image = "0.24.2" 11 | rqrr = "0.5.1" 12 | base64 = "0.20.0-alpha.1" 13 | hex = "0.4" 14 | crypto-morse = "0.2.0" 15 | cipher-crypt = "^0.16" -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # qrcode-encrypt 2 | 3 | ### Encryption 4 | - the key doesn't require (if the key isn't required, write `--key` in the `` clause) 5 | - `base64` 6 | - `hex` 7 | - `morse` 8 | - `rot13` 9 | - `text` 10 | - the key is required 11 | - `caesar` - key type: `Number` 12 | - `scytale` - key type: `Number` 13 | - `vigenere` - key type: `String` 14 | - `porta` - key type: `String` 15 | 16 | --- 17 | 18 | ### If you want to create a QRcode 19 | - `cargo run create ` 20 | ### If you want to read a QRcode 21 | - `cargo run scan ` 22 | 23 | --- 24 | 25 | ### For Example 26 | - Create/Read a QRcode with key 27 | - `cargo run create caesar 4 some-text` 28 | - `cargo run scan vigenere abc qrcode.png` 29 | - Create/Read a QRcode without key 30 | - `cargo run create base64 --key some-text` 31 | - `cargo run scan morse --key qrcode.png` 32 | 33 | --- 34 | 35 | ### Attention 36 | - if you enter the arguments correctly when starting the project to create a qr code, you will get a `qrcode.png` 37 | - if you enter the arguments correctly when reading the qr code, you will get the `result-qrcode.txt` with the result inside the file 38 | -------------------------------------------------------------------------------- /src/create.rs: -------------------------------------------------------------------------------- 1 | pub mod creator { 2 | 3 | use qrcode_png::*; 4 | extern crate base64; 5 | extern crate cipher_crypt; 6 | use cipher_crypt::{Cipher, Rot13, Caesar, Vigenere, Porta, Scytale}; 7 | // OTHER PACKAGES: hex, crypto_morse 8 | 9 | fn generate(txt: &str) { 10 | let mut qrcode = QrCode::new(txt, QrCodeEcc::Medium).unwrap(); 11 | 12 | qrcode.margin(12); 13 | qrcode.zoom(12); 14 | 15 | let buf = qrcode.generate(Color::Grayscale(0, 255)).unwrap(); 16 | std::fs::write("./qrcode.png", buf).unwrap(); 17 | } 18 | 19 | pub fn start(encd: &str, key: &str, txt: &str) { 20 | // CHECKING KEY 21 | let base_one = ["base64", "hex", "txt", "morse", "rot13"]; 22 | let base_two = ["caesar", "vigenere", "porta", "scytale"]; 23 | 24 | let mut exit_one: bool = false; 25 | let mut exit_two: bool = false; 26 | 27 | for i in base_one { 28 | if encd == i { 29 | if key != "--key" { 30 | exit_one = true; 31 | break; 32 | } 33 | } 34 | } 35 | for i in base_two { 36 | if encd == i { 37 | if key == "--key" { 38 | exit_two = true; 39 | break; 40 | } 41 | } 42 | } 43 | 44 | if exit_one == true { return println!("This method doesn't require a key"); } 45 | if exit_two == true { return println!("This method requires a key"); } 46 | // CHECKING KEY 47 | 48 | if encd == "base64" { generate(&base64::encode(String::from(txt).into_bytes())); } 49 | else if encd == "hex" { generate(&hex::encode(txt)); } 50 | else if encd == "txt" { generate(&txt); } 51 | else if encd == "morse" { generate(&crypto_morse::encode(&txt)); } 52 | else if encd == "rot13" { generate(&Rot13::encrypt(&txt)); } 53 | else if encd == "caesar" { 54 | let num = key.parse::().unwrap(); 55 | let k = Caesar::new(num.try_into().unwrap()); 56 | generate(&k.encrypt(&txt).unwrap()); 57 | } 58 | else if encd == "vigenere" { 59 | let k = Vigenere::new((&key).to_string()); 60 | generate(&k.encrypt(&txt).unwrap()); 61 | } 62 | else if encd == "porta" { 63 | let k = Porta::new((&key).to_string()); 64 | generate(&k.encrypt(&txt).unwrap()); 65 | } 66 | else if encd == "scytale" { 67 | let num = key.parse::().unwrap(); 68 | let k = Scytale::new(num.try_into().unwrap()); 69 | generate(&k.encrypt(&txt).unwrap()); 70 | } 71 | else { println!("Incorrect encode method"); } 72 | } 73 | } -------------------------------------------------------------------------------- /src/main.rs: -------------------------------------------------------------------------------- 1 | #![allow(warnings)] 2 | 3 | // PACKAGES 4 | use std::path::Path; 5 | 6 | // MODULES 7 | mod read; 8 | pub use crate::read::reader; 9 | 10 | mod create; 11 | pub use crate::create::creator; 12 | 13 | 14 | fn input() { 15 | let action = std::env::args().nth(1).expect("no pattern given"); 16 | 17 | if action == "create" { 18 | 19 | let encode = std::env::args().nth(2).expect("no pattern given"); 20 | let key = std::env::args().nth(3).expect("no pattern given"); 21 | let text = std::env::args().nth(4).expect("no pattern given"); 22 | creator::start(&encode, &key, &text); 23 | 24 | } else if action == "scan" { 25 | 26 | let encode = std::env::args().nth(2).expect("no pattern given"); 27 | let key = std::env::args().nth(3).expect("no pattern given"); 28 | let fileph = std::env::args().nth(4).expect("no pattern given"); 29 | 30 | if Path::new(&fileph).exists() == true { println!("{:?}", reader::scan(&fileph, &key, &encode).unwrap()); } 31 | else { println!("Incorrect file name or file path :("); } 32 | 33 | } else { 34 | println!("Incorrect command !"); 35 | return; 36 | } 37 | } 38 | 39 | fn main() { input(); } 40 | 41 | -------------------------------------------------------------------------------- /src/read.rs: -------------------------------------------------------------------------------- 1 | pub mod reader { 2 | use std::path::Path; 3 | use image; 4 | use std::error::Error; 5 | use rqrr::PreparedImage; 6 | extern crate cipher_crypt; 7 | use cipher_crypt::{Cipher, Rot13, Caesar, Vigenere, Porta, Scytale}; 8 | 9 | use std::fs::File; 10 | use std::io::Write; 11 | 12 | pub fn scan(filepath: &str, key: &str, encode: &str) -> Result<(), Box> { 13 | let img = image::open(filepath)?.to_luma8(); 14 | let mut prepared_img = PreparedImage::prepare(img); 15 | 16 | let grids = prepared_img.detect_grids(); 17 | let contents = grids.into_iter().map(|grid| { 18 | let (_, content) = grid.decode().unwrap_or_else(|err| { 19 | eprintln!("\nERROR reading data from qr code: {}", err); 20 | panic!(); 21 | }); 22 | content}).collect::>(); 23 | 24 | let mut res = String::new(); 25 | 26 | // CHECKING KEY 27 | let base_one = ["base64", "hex", "txt", "morse", "rot13"]; 28 | let base_two = ["caesar", "vigenere", "porta", "scytale"]; 29 | 30 | let mut exit_one: bool = false; 31 | let mut exit_two: bool = false; 32 | 33 | for i in base_one { 34 | if encode == i { 35 | if key != "--key" { 36 | exit_one = true; 37 | break; 38 | } 39 | } 40 | } 41 | for i in base_two { 42 | if encode == i { 43 | if key == "--key" { 44 | exit_two = true; 45 | break; 46 | } 47 | } 48 | } 49 | 50 | if exit_one == true { 51 | println!("This method doesn't require a key"); 52 | return Ok(()) 53 | } 54 | if exit_two == true { 55 | println!("This method requires a key"); 56 | return Ok(()) 57 | } 58 | // CHECKING KEY 59 | 60 | if encode == "base64" { 61 | let x = base64::decode(contents[0].to_string()).unwrap(); 62 | res = String::from_utf8_lossy(&x).to_string(); 63 | } 64 | else if encode == "hex" { 65 | let x = hex::decode(contents[0].to_string()); 66 | res = String::from_utf8_lossy(&x.unwrap()).to_string(); 67 | } 68 | else if encode == "morse" { 69 | let x = &crypto_morse::decode(&contents[0]); 70 | res = x.to_string(); 71 | } 72 | else if encode == "rot13" { 73 | let x = Rot13::decrypt(&contents[0]); 74 | res = x.to_string(); 75 | } 76 | else if encode == "txt" { res = contents[0].to_string(); } 77 | else if encode == "caesar" { 78 | let num = key.parse::().unwrap(); 79 | let x = Caesar::new(num.try_into().unwrap()); 80 | res = x.decrypt(&contents[0]).unwrap(); 81 | } 82 | else if encode == "vigenere" { 83 | let x = Vigenere::new((&key).to_string()); 84 | res = x.decrypt(&contents[0]).unwrap(); 85 | } 86 | else if encode == "porta" { 87 | let x = Porta::new((&key).to_string()); 88 | res = x.decrypt(&contents[0]).unwrap(); 89 | } 90 | else if encode == "scytale" { 91 | let num = key.parse::().unwrap(); 92 | let x = Scytale::new(num.try_into().unwrap()); 93 | res = x.decrypt(&contents[0]).unwrap(); 94 | } 95 | else { println!("Incorrect encode method"); } 96 | 97 | let mut output = File::create("result-qrcode.txt")?; 98 | write!(output, "{}", res)?; 99 | 100 | Ok(()) 101 | } 102 | } --------------------------------------------------------------------------------