From c1d60862146b1389c196b068caff577ee8915ff5 Mon Sep 17 00:00:00 2001 From: JohnE Date: Tue, 24 Feb 2026 16:22:59 -0800 Subject: [PATCH] MOD: build for macos with cargo binaries working --- .gitignore | 4 + Cargo.lock | 93 +- crates/ccc-crypto-wolfssl/build.rs | 15 +- crates/ccc-flutter-bridge/.gitignore | 1 + crates/ccc-flutter-bridge/Cargo.lock | 655 ++++++++ crates/ccc-flutter-bridge/Cargo.toml | 2 +- .../ccc-flutter-bridge/include/ccc_bridge.h | 1 + crates/ccc-flutter-bridge/src/api/mod.rs | 1 + crates/ccc-flutter-bridge/src/api/simple.rs | 10 + .../ccc-flutter-bridge/src/frb_generated.rs | 1354 +++++++++++++++++ crates/ccc-flutter-bridge/src/lib.rs | 3 + docs/ccc_rust_plan_phases.rst | 12 +- flutter_rust_bridge.yaml | 33 +- 13 files changed, 2139 insertions(+), 45 deletions(-) create mode 100644 crates/ccc-flutter-bridge/.gitignore create mode 100644 crates/ccc-flutter-bridge/Cargo.lock create mode 100644 crates/ccc-flutter-bridge/include/ccc_bridge.h create mode 100644 crates/ccc-flutter-bridge/src/api/mod.rs create mode 100644 crates/ccc-flutter-bridge/src/api/simple.rs create mode 100644 crates/ccc-flutter-bridge/src/frb_generated.rs diff --git a/.gitignore b/.gitignore index ad67955..177e096 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,7 @@ +# J3G +build/ +tmp/ + # Generated by Cargo # will have compiled files and executables debug diff --git a/Cargo.lock b/Cargo.lock index ad22847..28c2cc2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -45,14 +45,13 @@ checksum = "84521a3cf562bc62942e294181d9eef17eb38ceb8c68677bc49f144e4c3d4f8d" [[package]] name = "android_logger" -version = "0.13.3" +version = "0.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c494134f746c14dc653a35a4ea5aca24ac368529da5370ecf41fe0341c35772f" +checksum = "dbb4e440d04be07da1f1bf44fb4495ebd58669372fe0cffa6e48595ac5bd88a3" dependencies = [ "android_log-sys", - "env_logger 0.10.2", + "env_filter 0.1.4", "log", - "once_cell", ] [[package]] @@ -236,7 +235,7 @@ dependencies = [ "anyhow", "ccc-crypto-core", "ccc-crypto-wolfssl", - "env_logger 0.11.9", + "env_logger", "hex", "log", ] @@ -274,7 +273,7 @@ dependencies = [ "anyhow", "ccc-crypto-core", "ccc-crypto-wolfssl", - "env_logger 0.11.9", + "env_logger", "flutter_rust_bridge", "hex", "log", @@ -362,12 +361,15 @@ dependencies = [ [[package]] name = "dashmap" -version = "4.0.2" +version = "5.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e77a43b28d0668df09411cb0bc9a8c2adc40f9a048afe863e05fd43251e8e39c" +checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" dependencies = [ "cfg-if", - "num_cpus", + "hashbrown", + "lock_api", + "once_cell", + "parking_lot_core", ] [[package]] @@ -400,19 +402,19 @@ checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" [[package]] name = "env_filter" -version = "1.0.0" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a1c3cc8e57274ec99de65301228b537f1e4eedc1b8e0f9411c6caac8ae7308f" +checksum = "1bf3c259d255ca70051b30e2e95b5446cdb8949ac4cd22c0d7fd634d89f568e2" dependencies = [ "log", "regex", ] [[package]] -name = "env_logger" -version = "0.10.2" +name = "env_filter" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cd405aab171cb85d6735e5c8d9db038c17d3ca007a4d2c25f337935c3d90580" +checksum = "7a1c3cc8e57274ec99de65301228b537f1e4eedc1b8e0f9411c6caac8ae7308f" dependencies = [ "log", "regex", @@ -426,7 +428,7 @@ checksum = "b2daee4ea451f429a58296525ddf28b45a3b64f1acf6587e2067437bb11e218d" dependencies = [ "anstream", "anstyle", - "env_filter", + "env_filter 1.0.0", "jiff", "log", ] @@ -439,9 +441,9 @@ checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" [[package]] name = "flutter_rust_bridge" -version = "2.9.0" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f8c0dee6249225e815dcff3f3a39b98d9f66fdb3c392a432715b646bfa4da02" +checksum = "dde126295b2acc5f0a712e265e91b6fdc0ed38767496483e592ae7134db83725" dependencies = [ "allo-isolate", "android_logger", @@ -468,9 +470,9 @@ dependencies = [ [[package]] name = "flutter_rust_bridge_macros" -version = "2.9.0" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e88d604908d9eccb4ca9c26640ce41033165cbef041460e704ae28bd5208bce" +checksum = "d5f0420326b13675321b194928bb7830043b68cf8b810e1c651285c747abb080" dependencies = [ "hex", "md-5", @@ -589,6 +591,12 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" + [[package]] name = "hermit-abi" version = "0.5.2" @@ -678,6 +686,15 @@ dependencies = [ "windows-link", ] +[[package]] +name = "lock_api" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" +dependencies = [ + "scopeguard", +] + [[package]] name = "log" version = "0.4.29" @@ -758,15 +775,28 @@ checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" [[package]] name = "oslog" -version = "0.1.0" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8343ce955f18e7e68c0207dd0ea776ec453035685395ababd2ea651c569728b3" +checksum = "80d2043d1f61d77cb2f4b1f7b7b2295f40507f5f8e9d1c8bf10a1ca5f97a3969" dependencies = [ "cc", "dashmap", "log", ] +[[package]] +name = "parking_lot_core" +version = "0.9.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-link", +] + [[package]] name = "password-hash" version = "0.5.0" @@ -833,6 +863,15 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +[[package]] +name = "redox_syscall" +version = "0.5.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" +dependencies = [ + "bitflags", +] + [[package]] name = "regex" version = "1.12.3" @@ -880,6 +919,12 @@ version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + [[package]] name = "serde" version = "1.0.228" @@ -935,6 +980,12 @@ version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" +[[package]] +name = "smallvec" +version = "1.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" + [[package]] name = "subtle" version = "2.6.1" diff --git a/crates/ccc-crypto-wolfssl/build.rs b/crates/ccc-crypto-wolfssl/build.rs index a54bf32..f39426b 100644 --- a/crates/ccc-crypto-wolfssl/build.rs +++ b/crates/ccc-crypto-wolfssl/build.rs @@ -143,7 +143,20 @@ fn build_wolfssl_cmake(source_dir: &PathBuf, _out_dir: &PathBuf) -> (PathBuf, Pa // XCHACHA: wc_XChaCha20Poly1305_Encrypt/Decrypt (24-byte nonce). .cflag("-DHAVE_BLAKE2") .cflag("-DHAVE_BLAKE2B") - .cflag("-DHAVE_XCHACHA"); + .cflag("-DHAVE_XCHACHA") + // -DWOLFCRYPT_ONLY must be passed as a C compiler flag (it is NOT set + // by the WOLFSSL_CRYPT_ONLY cmake option, which only disables example + // binaries). This flag activates the dummy stub definitions for + // GetCA / GetCAByName inside asn.c, which are otherwise only defined + // in ssl.c (the full TLS layer we intentionally exclude). Without it + // the linker reports undefined symbols. + .cflag("-DWOLFCRYPT_ONLY") + // Key & certificate generation. + // Adds X.509 cert/CSR/key generation capability on top of wolfCrypt. + .define("WOLFSSL_KEYGEN", "yes") // -DWOLFSSL_KEY_GEN + .define("WOLFSSL_CERTGEN", "yes") // -DWOLFSSL_CERT_GEN + .define("WOLFSSL_CERTREQ", "yes") // -DWOLFSSL_CERT_REQ + .define("WOLFSSL_CERTEXT", "yes"); // -DWOLFSSL_CERT_EXT let install_path = cfg.build(); diff --git a/crates/ccc-flutter-bridge/.gitignore b/crates/ccc-flutter-bridge/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/crates/ccc-flutter-bridge/.gitignore @@ -0,0 +1 @@ +/target diff --git a/crates/ccc-flutter-bridge/Cargo.lock b/crates/ccc-flutter-bridge/Cargo.lock new file mode 100644 index 0000000..185e862 --- /dev/null +++ b/crates/ccc-flutter-bridge/Cargo.lock @@ -0,0 +1,655 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "addr2line" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "aho-corasick" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" +dependencies = [ + "memchr", +] + +[[package]] +name = "allo-isolate" +version = "0.1.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97b6d794345b06592d0ebeed8e477e41b71e5a0a49df4fc0e4184d5938b99509" +dependencies = [ + "anyhow", + "atomic", + "backtrace", +] + +[[package]] +name = "android_log-sys" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ecc8056bf6ab9892dcd53216c83d1597487d7dacac16c8df6b877d127df9937" + +[[package]] +name = "android_logger" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c494134f746c14dc653a35a4ea5aca24ac368529da5370ecf41fe0341c35772f" +dependencies = [ + "android_log-sys", + "env_logger", + "log", + "once_cell", +] + +[[package]] +name = "anyhow" +version = "1.0.75" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" + +[[package]] +name = "atomic" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c59bdb34bc650a32731b31bd8f0829cc15d24a708ee31559e0bb34f2bc320cba" + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "backtrace" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" +dependencies = [ + "addr2line", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "build-target" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "832133bbabbbaa9fbdba793456a2827627a7d2b8fb96032fa1e7666d7895832b" + +[[package]] +name = "bumpalo" +version = "3.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" + +[[package]] +name = "bytemuck" +version = "1.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "cc" +version = "1.0.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" +dependencies = [ + "libc", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "console_error_panic_hook" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc" +dependencies = [ + "cfg-if", + "wasm-bindgen", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "dart-sys-fork" +version = "4.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "933dafff26172b719bb9695dd3715a1e7792f62dcdc8a5d4c740db7e0fedee8b" +dependencies = [ + "cc", +] + +[[package]] +name = "dashmap" +version = "4.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e77a43b28d0668df09411cb0bc9a8c2adc40f9a048afe863e05fd43251e8e39c" +dependencies = [ + "cfg-if", + "num_cpus", +] + +[[package]] +name = "delegate-attr" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51aac4c99b2e6775164b412ea33ae8441b2fde2dbf05a20bc0052a63d08c475b" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", +] + +[[package]] +name = "env_logger" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95b3f3e67048839cb0d0781f445682a35113da7121f7c949db0e2be96a4fbece" +dependencies = [ + "log", + "regex", +] + +[[package]] +name = "flutter_rust_bridge" +version = "2.11.1" +dependencies = [ + "allo-isolate", + "android_logger", + "anyhow", + "build-target", + "bytemuck", + "byteorder", + "console_error_panic_hook", + "dart-sys-fork", + "delegate-attr", + "flutter_rust_bridge_macros", + "futures", + "js-sys", + "lazy_static", + "log", + "oslog", + "threadpool", + "tokio", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "flutter_rust_bridge_macros" +version = "2.11.1" +dependencies = [ + "hex", + "md-5", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "futures" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da0290714b38af9b4a7b094b8a37086d1b4e61f2df9122c3cad2577669145335" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff4dd66668b557604244583e3e1e1eada8c5c2e96a6d0d6653ede395b78bbacb" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb1d22c66e66d9d72e1758f0bd7d4fd0bee04cad842ee34587d68c07e45d088c" + +[[package]] +name = "futures-executor" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f4fb8693db0cf099eadcca0efe2a5a22e4550f98ed16aba6c48700da29597bc" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8bf34a163b5c4c52d0478a4d757da8fb65cabef42ba90515efee0f6f9fa45aaa" + +[[package]] +name = "futures-macro" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53b153fd91e4b0147f4aced87be237c98248656bb01050b96bf3ee89220a8ddb" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "futures-sink" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e36d3378ee38c2a36ad710c5d30c2911d752cb941c00c72dbabfb786a7970817" + +[[package]] +name = "futures-task" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efd193069b0ddadc69c46389b740bbccdd97203899b48d09c5f7969591d6bae2" + +[[package]] +name = "futures-util" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a19526d624e703a3179b3d322efec918b6246ea0fa51d41124525f00f1cc8104" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "gimli" +version = "0.28.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" + +[[package]] +name = "hermit-abi" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "js-sys" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "libc" +version = "0.2.150" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c" + +[[package]] +name = "log" +version = "0.4.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" + +[[package]] +name = "md-5" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" +dependencies = [ + "cfg-if", + "digest", +] + +[[package]] +name = "memchr" +version = "2.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167" + +[[package]] +name = "miniz_oxide" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" +dependencies = [ + "adler", +] + +[[package]] +name = "num_cpus" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "object" +version = "0.32.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0" +dependencies = [ + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" + +[[package]] +name = "oslog" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8343ce955f18e7e68c0207dd0ea776ec453035685395ababd2ea651c569728b3" +dependencies = [ + "cc", + "dashmap", + "log", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "proc-macro2" +version = "1.0.70" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39278fbbf5fb4f646ce651690877f89d1c5811a3d4acb27700c1cb3cdb78fd3b" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "regex" +version = "1.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" + +[[package]] +name = "ccc_flutter_bridge" +version = "0.1.0" +dependencies = [ + "flutter_rust_bridge", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "syn" +version = "2.0.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "threadpool" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa" +dependencies = [ + "num_cpus", +] + +[[package]] +name = "tokio" +version = "1.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0c014766411e834f7af5b8f4cf46257aab4036ca95e9d2c144a10f59ad6f5b9" +dependencies = [ + "backtrace", + "num_cpus", + "pin-project-lite", +] + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "wasm-bindgen" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" + +[[package]] +name = "web-sys" +version = "0.3.66" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50c24a44ec86bb68fbecd1b3efed7e85ea5621b39b35ef2766b66cd984f8010f" +dependencies = [ + "js-sys", + "wasm-bindgen", +] diff --git a/crates/ccc-flutter-bridge/Cargo.toml b/crates/ccc-flutter-bridge/Cargo.toml index be12d21..54c7166 100644 --- a/crates/ccc-flutter-bridge/Cargo.toml +++ b/crates/ccc-flutter-bridge/Cargo.toml @@ -15,7 +15,7 @@ crate-type = ["cdylib", "staticlib"] ccc-crypto-core = { path = "../ccc-crypto-core" } ccc-crypto-wolfssl = { path = "../ccc-crypto-wolfssl" } -flutter_rust_bridge = { version = "=2.9.0" } +flutter_rust_bridge = { version = "=2.11.1" } zeroize = { workspace = true } log = { workspace = true } anyhow = { workspace = true } diff --git a/crates/ccc-flutter-bridge/include/ccc_bridge.h b/crates/ccc-flutter-bridge/include/ccc_bridge.h new file mode 100644 index 0000000..ad87ade --- /dev/null +++ b/crates/ccc-flutter-bridge/include/ccc_bridge.h @@ -0,0 +1 @@ +// Nothing when using full_dep=false mode \ No newline at end of file diff --git a/crates/ccc-flutter-bridge/src/api/mod.rs b/crates/ccc-flutter-bridge/src/api/mod.rs new file mode 100644 index 0000000..b252f36 --- /dev/null +++ b/crates/ccc-flutter-bridge/src/api/mod.rs @@ -0,0 +1 @@ +pub mod simple; diff --git a/crates/ccc-flutter-bridge/src/api/simple.rs b/crates/ccc-flutter-bridge/src/api/simple.rs new file mode 100644 index 0000000..4360c82 --- /dev/null +++ b/crates/ccc-flutter-bridge/src/api/simple.rs @@ -0,0 +1,10 @@ +#[flutter_rust_bridge::frb(sync)] // Synchronous mode for simplicity of the demo +pub fn greet(name: String) -> String { + format!("Hello, {name}!") +} + +#[flutter_rust_bridge::frb(init)] +pub fn init_app() { + // Default utilities - feel free to customize + flutter_rust_bridge::setup_default_user_utils(); +} diff --git a/crates/ccc-flutter-bridge/src/frb_generated.rs b/crates/ccc-flutter-bridge/src/frb_generated.rs new file mode 100644 index 0000000..9f0ee88 --- /dev/null +++ b/crates/ccc-flutter-bridge/src/frb_generated.rs @@ -0,0 +1,1354 @@ +// This file is automatically generated, so please do not edit it. +// @generated by `flutter_rust_bridge`@ 2.11.1. + +#![allow( + non_camel_case_types, + unused, + non_snake_case, + clippy::needless_return, + clippy::redundant_closure_call, + clippy::redundant_closure, + clippy::useless_conversion, + clippy::unit_arg, + clippy::unused_unit, + clippy::double_parens, + clippy::let_and_return, + clippy::too_many_arguments, + clippy::match_single_binding, + clippy::clone_on_copy, + clippy::let_unit_value, + clippy::deref_addrof, + clippy::explicit_auto_deref, + clippy::borrow_deref_ref, + clippy::needless_borrow +)] + +// Section: imports + +use flutter_rust_bridge::for_generated::byteorder::{NativeEndian, ReadBytesExt, WriteBytesExt}; +use flutter_rust_bridge::for_generated::{transform_result_dco, Lifetimeable, Lockable}; +use flutter_rust_bridge::{Handler, IntoIntoDart}; + +// Section: boilerplate + +flutter_rust_bridge::frb_generated_boilerplate!( + default_stream_sink_codec = SseCodec, + default_rust_opaque = RustOpaqueMoi, + default_rust_auto_opaque = RustAutoOpaqueMoi, +); +pub(crate) const FLUTTER_RUST_BRIDGE_CODEGEN_VERSION: &str = "2.11.1"; +pub(crate) const FLUTTER_RUST_BRIDGE_CODEGEN_CONTENT_HASH: i32 = 1644424377; + +// Section: executor + +flutter_rust_bridge::frb_generated_default_handler!(); + +// Section: wire_funcs + +fn wire__crate__bridge__ccc_aead_decrypt_impl( + port_: flutter_rust_bridge::for_generated::MessagePort, + ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr, + rust_vec_len_: i32, + data_len_: i32, +) { + FLUTTER_RUST_BRIDGE_HANDLER.wrap_normal::( + flutter_rust_bridge::for_generated::TaskInfo { + debug_name: "ccc_aead_decrypt", + port: Some(port_), + mode: flutter_rust_bridge::for_generated::FfiCallMode::Normal, + }, + move || { + let message = unsafe { + flutter_rust_bridge::for_generated::Dart2RustMessageSse::from_wire( + ptr_, + rust_vec_len_, + data_len_, + ) + }; + let mut deserializer = + flutter_rust_bridge::for_generated::SseDeserializer::new(message); + let api_algo_id = ::sse_decode(&mut deserializer); + let api_key = >::sse_decode(&mut deserializer); + let api_nonce = >::sse_decode(&mut deserializer); + let api_ciphertext_and_tag = >::sse_decode(&mut deserializer); + let api_aad = >::sse_decode(&mut deserializer); + deserializer.end(); + move |context| { + transform_result_sse::<_, flutter_rust_bridge::for_generated::anyhow::Error>( + (move || { + let output_ok = crate::bridge::ccc_aead_decrypt( + api_algo_id, + api_key, + api_nonce, + api_ciphertext_and_tag, + api_aad, + )?; + Ok(output_ok) + })(), + ) + } + }, + ) +} +fn wire__crate__bridge__ccc_aead_encrypt_impl( + port_: flutter_rust_bridge::for_generated::MessagePort, + ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr, + rust_vec_len_: i32, + data_len_: i32, +) { + FLUTTER_RUST_BRIDGE_HANDLER.wrap_normal::( + flutter_rust_bridge::for_generated::TaskInfo { + debug_name: "ccc_aead_encrypt", + port: Some(port_), + mode: flutter_rust_bridge::for_generated::FfiCallMode::Normal, + }, + move || { + let message = unsafe { + flutter_rust_bridge::for_generated::Dart2RustMessageSse::from_wire( + ptr_, + rust_vec_len_, + data_len_, + ) + }; + let mut deserializer = + flutter_rust_bridge::for_generated::SseDeserializer::new(message); + let api_req = ::sse_decode(&mut deserializer); + deserializer.end(); + move |context| { + transform_result_sse::<_, flutter_rust_bridge::for_generated::anyhow::Error>( + (move || { + let output_ok = crate::bridge::ccc_aead_encrypt(api_req)?; + Ok(output_ok) + })(), + ) + } + }, + ) +} +fn wire__crate__bridge__ccc_available_algorithms_impl( + ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr, + rust_vec_len_: i32, + data_len_: i32, +) -> flutter_rust_bridge::for_generated::WireSyncRust2DartSse { + FLUTTER_RUST_BRIDGE_HANDLER.wrap_sync::( + flutter_rust_bridge::for_generated::TaskInfo { + debug_name: "ccc_available_algorithms", + port: None, + mode: flutter_rust_bridge::for_generated::FfiCallMode::Sync, + }, + move || { + let message = unsafe { + flutter_rust_bridge::for_generated::Dart2RustMessageSse::from_wire( + ptr_, + rust_vec_len_, + data_len_, + ) + }; + let mut deserializer = + flutter_rust_bridge::for_generated::SseDeserializer::new(message); + let api_provider_name = ::sse_decode(&mut deserializer); + let api_family = ::sse_decode(&mut deserializer); + deserializer.end(); + transform_result_sse::<_, ()>((move || { + let output_ok = Result::<_, ()>::Ok(crate::bridge::ccc_available_algorithms( + api_provider_name, + api_family, + ))?; + Ok(output_ok) + })()) + }, + ) +} +fn wire__crate__bridge__ccc_capabilities_impl( + ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr, + rust_vec_len_: i32, + data_len_: i32, +) -> flutter_rust_bridge::for_generated::WireSyncRust2DartSse { + FLUTTER_RUST_BRIDGE_HANDLER.wrap_sync::( + flutter_rust_bridge::for_generated::TaskInfo { + debug_name: "ccc_capabilities", + port: None, + mode: flutter_rust_bridge::for_generated::FfiCallMode::Sync, + }, + move || { + let message = unsafe { + flutter_rust_bridge::for_generated::Dart2RustMessageSse::from_wire( + ptr_, + rust_vec_len_, + data_len_, + ) + }; + let mut deserializer = + flutter_rust_bridge::for_generated::SseDeserializer::new(message); + let api_provider_name = ::sse_decode(&mut deserializer); + deserializer.end(); + transform_result_sse::<_, ()>((move || { + let output_ok = + Result::<_, ()>::Ok(crate::bridge::ccc_capabilities(api_provider_name))?; + Ok(output_ok) + })()) + }, + ) +} +fn wire__crate__bridge__ccc_hash_impl( + port_: flutter_rust_bridge::for_generated::MessagePort, + ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr, + rust_vec_len_: i32, + data_len_: i32, +) { + FLUTTER_RUST_BRIDGE_HANDLER.wrap_normal::( + flutter_rust_bridge::for_generated::TaskInfo { + debug_name: "ccc_hash", + port: Some(port_), + mode: flutter_rust_bridge::for_generated::FfiCallMode::Normal, + }, + move || { + let message = unsafe { + flutter_rust_bridge::for_generated::Dart2RustMessageSse::from_wire( + ptr_, + rust_vec_len_, + data_len_, + ) + }; + let mut deserializer = + flutter_rust_bridge::for_generated::SseDeserializer::new(message); + let api_req = ::sse_decode(&mut deserializer); + deserializer.end(); + move |context| { + transform_result_sse::<_, flutter_rust_bridge::for_generated::anyhow::Error>( + (move || { + let output_ok = crate::bridge::ccc_hash(api_req)?; + Ok(output_ok) + })(), + ) + } + }, + ) +} +fn wire__crate__bridge__ccc_init_impl( + ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr, + rust_vec_len_: i32, + data_len_: i32, +) -> flutter_rust_bridge::for_generated::WireSyncRust2DartSse { + FLUTTER_RUST_BRIDGE_HANDLER.wrap_sync::( + flutter_rust_bridge::for_generated::TaskInfo { + debug_name: "ccc_init", + port: None, + mode: flutter_rust_bridge::for_generated::FfiCallMode::Sync, + }, + move || { + let message = unsafe { + flutter_rust_bridge::for_generated::Dart2RustMessageSse::from_wire( + ptr_, + rust_vec_len_, + data_len_, + ) + }; + let mut deserializer = + flutter_rust_bridge::for_generated::SseDeserializer::new(message); + deserializer.end(); + transform_result_sse::<_, ()>((move || { + let output_ok = Result::<_, ()>::Ok({ + crate::bridge::ccc_init(); + })?; + Ok(output_ok) + })()) + }, + ) +} +fn wire__crate__bridge__ccc_kdf_derive_impl( + port_: flutter_rust_bridge::for_generated::MessagePort, + ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr, + rust_vec_len_: i32, + data_len_: i32, +) { + FLUTTER_RUST_BRIDGE_HANDLER.wrap_normal::( + flutter_rust_bridge::for_generated::TaskInfo { + debug_name: "ccc_kdf_derive", + port: Some(port_), + mode: flutter_rust_bridge::for_generated::FfiCallMode::Normal, + }, + move || { + let message = unsafe { + flutter_rust_bridge::for_generated::Dart2RustMessageSse::from_wire( + ptr_, + rust_vec_len_, + data_len_, + ) + }; + let mut deserializer = + flutter_rust_bridge::for_generated::SseDeserializer::new(message); + let api_req = ::sse_decode(&mut deserializer); + deserializer.end(); + move |context| { + transform_result_sse::<_, flutter_rust_bridge::for_generated::anyhow::Error>( + (move || { + let output_ok = crate::bridge::ccc_kdf_derive(api_req)?; + Ok(output_ok) + })(), + ) + } + }, + ) +} +fn wire__crate__bridge__ccc_kem_decapsulate_impl( + port_: flutter_rust_bridge::for_generated::MessagePort, + ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr, + rust_vec_len_: i32, + data_len_: i32, +) { + FLUTTER_RUST_BRIDGE_HANDLER.wrap_normal::( + flutter_rust_bridge::for_generated::TaskInfo { + debug_name: "ccc_kem_decapsulate", + port: Some(port_), + mode: flutter_rust_bridge::for_generated::FfiCallMode::Normal, + }, + move || { + let message = unsafe { + flutter_rust_bridge::for_generated::Dart2RustMessageSse::from_wire( + ptr_, + rust_vec_len_, + data_len_, + ) + }; + let mut deserializer = + flutter_rust_bridge::for_generated::SseDeserializer::new(message); + let api_algo_id = ::sse_decode(&mut deserializer); + let api_private_key = >::sse_decode(&mut deserializer); + let api_ciphertext = >::sse_decode(&mut deserializer); + deserializer.end(); + move |context| { + transform_result_sse::<_, flutter_rust_bridge::for_generated::anyhow::Error>( + (move || { + let output_ok = crate::bridge::ccc_kem_decapsulate( + api_algo_id, + api_private_key, + api_ciphertext, + )?; + Ok(output_ok) + })(), + ) + } + }, + ) +} +fn wire__crate__bridge__ccc_kem_encapsulate_impl( + port_: flutter_rust_bridge::for_generated::MessagePort, + ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr, + rust_vec_len_: i32, + data_len_: i32, +) { + FLUTTER_RUST_BRIDGE_HANDLER.wrap_normal::( + flutter_rust_bridge::for_generated::TaskInfo { + debug_name: "ccc_kem_encapsulate", + port: Some(port_), + mode: flutter_rust_bridge::for_generated::FfiCallMode::Normal, + }, + move || { + let message = unsafe { + flutter_rust_bridge::for_generated::Dart2RustMessageSse::from_wire( + ptr_, + rust_vec_len_, + data_len_, + ) + }; + let mut deserializer = + flutter_rust_bridge::for_generated::SseDeserializer::new(message); + let api_algo_id = ::sse_decode(&mut deserializer); + let api_public_key = >::sse_decode(&mut deserializer); + deserializer.end(); + move |context| { + transform_result_sse::<_, flutter_rust_bridge::for_generated::anyhow::Error>( + (move || { + let output_ok = + crate::bridge::ccc_kem_encapsulate(api_algo_id, api_public_key)?; + Ok(output_ok) + })(), + ) + } + }, + ) +} +fn wire__crate__bridge__ccc_kem_generate_keypair_impl( + port_: flutter_rust_bridge::for_generated::MessagePort, + ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr, + rust_vec_len_: i32, + data_len_: i32, +) { + FLUTTER_RUST_BRIDGE_HANDLER.wrap_normal::( + flutter_rust_bridge::for_generated::TaskInfo { + debug_name: "ccc_kem_generate_keypair", + port: Some(port_), + mode: flutter_rust_bridge::for_generated::FfiCallMode::Normal, + }, + move || { + let message = unsafe { + flutter_rust_bridge::for_generated::Dart2RustMessageSse::from_wire( + ptr_, + rust_vec_len_, + data_len_, + ) + }; + let mut deserializer = + flutter_rust_bridge::for_generated::SseDeserializer::new(message); + let api_algo_id = ::sse_decode(&mut deserializer); + deserializer.end(); + move |context| { + transform_result_sse::<_, flutter_rust_bridge::for_generated::anyhow::Error>( + (move || { + let output_ok = crate::bridge::ccc_kem_generate_keypair(api_algo_id)?; + Ok(output_ok) + })(), + ) + } + }, + ) +} +fn wire__crate__bridge__ccc_list_providers_impl( + ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr, + rust_vec_len_: i32, + data_len_: i32, +) -> flutter_rust_bridge::for_generated::WireSyncRust2DartSse { + FLUTTER_RUST_BRIDGE_HANDLER.wrap_sync::( + flutter_rust_bridge::for_generated::TaskInfo { + debug_name: "ccc_list_providers", + port: None, + mode: flutter_rust_bridge::for_generated::FfiCallMode::Sync, + }, + move || { + let message = unsafe { + flutter_rust_bridge::for_generated::Dart2RustMessageSse::from_wire( + ptr_, + rust_vec_len_, + data_len_, + ) + }; + let mut deserializer = + flutter_rust_bridge::for_generated::SseDeserializer::new(message); + deserializer.end(); + transform_result_sse::<_, ()>((move || { + let output_ok = Result::<_, ()>::Ok(crate::bridge::ccc_list_providers())?; + Ok(output_ok) + })()) + }, + ) +} +fn wire__crate__bridge__ccc_mac_compute_impl( + port_: flutter_rust_bridge::for_generated::MessagePort, + ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr, + rust_vec_len_: i32, + data_len_: i32, +) { + FLUTTER_RUST_BRIDGE_HANDLER.wrap_normal::( + flutter_rust_bridge::for_generated::TaskInfo { + debug_name: "ccc_mac_compute", + port: Some(port_), + mode: flutter_rust_bridge::for_generated::FfiCallMode::Normal, + }, + move || { + let message = unsafe { + flutter_rust_bridge::for_generated::Dart2RustMessageSse::from_wire( + ptr_, + rust_vec_len_, + data_len_, + ) + }; + let mut deserializer = + flutter_rust_bridge::for_generated::SseDeserializer::new(message); + let api_req = ::sse_decode(&mut deserializer); + deserializer.end(); + move |context| { + transform_result_sse::<_, flutter_rust_bridge::for_generated::anyhow::Error>( + (move || { + let output_ok = crate::bridge::ccc_mac_compute(api_req)?; + Ok(output_ok) + })(), + ) + } + }, + ) +} +fn wire__crate__bridge__ccc_mac_verify_impl( + port_: flutter_rust_bridge::for_generated::MessagePort, + ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr, + rust_vec_len_: i32, + data_len_: i32, +) { + FLUTTER_RUST_BRIDGE_HANDLER.wrap_normal::( + flutter_rust_bridge::for_generated::TaskInfo { + debug_name: "ccc_mac_verify", + port: Some(port_), + mode: flutter_rust_bridge::for_generated::FfiCallMode::Normal, + }, + move || { + let message = unsafe { + flutter_rust_bridge::for_generated::Dart2RustMessageSse::from_wire( + ptr_, + rust_vec_len_, + data_len_, + ) + }; + let mut deserializer = + flutter_rust_bridge::for_generated::SseDeserializer::new(message); + let api_algo_id = ::sse_decode(&mut deserializer); + let api_key = >::sse_decode(&mut deserializer); + let api_data = >::sse_decode(&mut deserializer); + let api_mac_bytes = >::sse_decode(&mut deserializer); + deserializer.end(); + move |context| { + transform_result_sse::<_, flutter_rust_bridge::for_generated::anyhow::Error>( + (move || { + let output_ok = crate::bridge::ccc_mac_verify( + api_algo_id, + api_key, + api_data, + api_mac_bytes, + )?; + Ok(output_ok) + })(), + ) + } + }, + ) +} +fn wire__crate__bridge__ccc_self_test_impl( + port_: flutter_rust_bridge::for_generated::MessagePort, + ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr, + rust_vec_len_: i32, + data_len_: i32, +) { + FLUTTER_RUST_BRIDGE_HANDLER.wrap_normal::( + flutter_rust_bridge::for_generated::TaskInfo { + debug_name: "ccc_self_test", + port: Some(port_), + mode: flutter_rust_bridge::for_generated::FfiCallMode::Normal, + }, + move || { + let message = unsafe { + flutter_rust_bridge::for_generated::Dart2RustMessageSse::from_wire( + ptr_, + rust_vec_len_, + data_len_, + ) + }; + let mut deserializer = + flutter_rust_bridge::for_generated::SseDeserializer::new(message); + deserializer.end(); + move |context| { + transform_result_sse::<_, flutter_rust_bridge::for_generated::anyhow::Error>( + (move || { + let output_ok = crate::bridge::ccc_self_test()?; + Ok(output_ok) + })(), + ) + } + }, + ) +} + +// Section: dart2rust + +impl SseDecode for flutter_rust_bridge::for_generated::anyhow::Error { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + let mut inner = ::sse_decode(deserializer); + return flutter_rust_bridge::for_generated::anyhow::anyhow!("{}", inner); + } +} + +impl SseDecode for String { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + let mut inner = >::sse_decode(deserializer); + return String::from_utf8(inner).unwrap(); + } +} + +impl SseDecode for crate::dto::AeadEncryptRequest { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + let mut var_algoId = ::sse_decode(deserializer); + let mut var_key = >::sse_decode(deserializer); + let mut var_nonce = >::sse_decode(deserializer); + let mut var_plaintext = >::sse_decode(deserializer); + let mut var_aad = >::sse_decode(deserializer); + return crate::dto::AeadEncryptRequest { + algo_id: var_algoId, + key: var_key, + nonce: var_nonce, + plaintext: var_plaintext, + aad: var_aad, + }; + } +} + +impl SseDecode for crate::dto::AeadEncryptResult { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + let mut var_ciphertextAndTag = >::sse_decode(deserializer); + return crate::dto::AeadEncryptResult { + ciphertext_and_tag: var_ciphertextAndTag, + }; + } +} + +impl SseDecode for crate::dto::AlgoTestResultDto { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + let mut var_algoId = ::sse_decode(deserializer); + let mut var_algoName = ::sse_decode(deserializer); + let mut var_passed = ::sse_decode(deserializer); + let mut var_errorMessage = >::sse_decode(deserializer); + return crate::dto::AlgoTestResultDto { + algo_id: var_algoId, + algo_name: var_algoName, + passed: var_passed, + error_message: var_errorMessage, + }; + } +} + +impl SseDecode for crate::dto::AlgorithmCapabilityDto { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + let mut var_algoId = ::sse_decode(deserializer); + let mut var_algoName = ::sse_decode(deserializer); + let mut var_available = ::sse_decode(deserializer); + let mut var_deterministicIo = ::sse_decode(deserializer); + let mut var_efficiencyScore = ::sse_decode(deserializer); + let mut var_reliabilityScore = ::sse_decode(deserializer); + return crate::dto::AlgorithmCapabilityDto { + algo_id: var_algoId, + algo_name: var_algoName, + available: var_available, + deterministic_io: var_deterministicIo, + efficiency_score: var_efficiencyScore, + reliability_score: var_reliabilityScore, + }; + } +} + +impl SseDecode for bool { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + deserializer.cursor.read_u8().unwrap() != 0 + } +} + +impl SseDecode for crate::dto::HashRequest { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + let mut var_algoId = ::sse_decode(deserializer); + let mut var_data = >::sse_decode(deserializer); + return crate::dto::HashRequest { + algo_id: var_algoId, + data: var_data, + }; + } +} + +impl SseDecode for crate::dto::KdfDeriveRequest { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + let mut var_algoId = ::sse_decode(deserializer); + let mut var_ikm = >::sse_decode(deserializer); + let mut var_salt = >::sse_decode(deserializer); + let mut var_info = >::sse_decode(deserializer); + let mut var_outLength = ::sse_decode(deserializer); + return crate::dto::KdfDeriveRequest { + algo_id: var_algoId, + ikm: var_ikm, + salt: var_salt, + info: var_info, + out_length: var_outLength, + }; + } +} + +impl SseDecode for crate::dto::KemEncapResultDto { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + let mut var_ciphertext = >::sse_decode(deserializer); + let mut var_sharedSecret = >::sse_decode(deserializer); + return crate::dto::KemEncapResultDto { + ciphertext: var_ciphertext, + shared_secret: var_sharedSecret, + }; + } +} + +impl SseDecode for crate::dto::KemKeyPairDto { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + let mut var_privateKey = >::sse_decode(deserializer); + let mut var_publicKey = >::sse_decode(deserializer); + return crate::dto::KemKeyPairDto { + private_key: var_privateKey, + public_key: var_publicKey, + }; + } +} + +impl SseDecode for Vec { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + let mut len_ = ::sse_decode(deserializer); + let mut ans_ = vec![]; + for idx_ in 0..len_ { + ans_.push(::sse_decode(deserializer)); + } + return ans_; + } +} + +impl SseDecode for Vec { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + let mut len_ = ::sse_decode(deserializer); + let mut ans_ = vec![]; + for idx_ in 0..len_ { + ans_.push(::sse_decode(deserializer)); + } + return ans_; + } +} + +impl SseDecode for Vec { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + let mut len_ = ::sse_decode(deserializer); + let mut ans_ = vec![]; + for idx_ in 0..len_ { + ans_.push(::sse_decode( + deserializer, + )); + } + return ans_; + } +} + +impl SseDecode for Vec { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + let mut len_ = ::sse_decode(deserializer); + let mut ans_ = vec![]; + for idx_ in 0..len_ { + ans_.push(::sse_decode(deserializer)); + } + return ans_; + } +} + +impl SseDecode for crate::dto::MacComputeRequest { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + let mut var_algoId = ::sse_decode(deserializer); + let mut var_key = >::sse_decode(deserializer); + let mut var_data = >::sse_decode(deserializer); + return crate::dto::MacComputeRequest { + algo_id: var_algoId, + key: var_key, + data: var_data, + }; + } +} + +impl SseDecode for Option { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + if (::sse_decode(deserializer)) { + return Some(::sse_decode(deserializer)); + } else { + return None; + } + } +} + +impl SseDecode for Option { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + if (::sse_decode(deserializer)) { + return Some(::sse_decode( + deserializer, + )); + } else { + return None; + } + } +} + +impl SseDecode for crate::dto::ProviderCapabilitiesDto { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + let mut var_providerName = ::sse_decode(deserializer); + let mut var_aead = >::sse_decode(deserializer); + let mut var_kdf = >::sse_decode(deserializer); + let mut var_mac = >::sse_decode(deserializer); + let mut var_hash = >::sse_decode(deserializer); + let mut var_kem = >::sse_decode(deserializer); + return crate::dto::ProviderCapabilitiesDto { + provider_name: var_providerName, + aead: var_aead, + kdf: var_kdf, + mac: var_mac, + hash: var_hash, + kem: var_kem, + }; + } +} + +impl SseDecode for crate::dto::SelfTestReportDto { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + let mut var_providerName = ::sse_decode(deserializer); + let mut var_allPassed = ::sse_decode(deserializer); + let mut var_results = >::sse_decode(deserializer); + return crate::dto::SelfTestReportDto { + provider_name: var_providerName, + all_passed: var_allPassed, + results: var_results, + }; + } +} + +impl SseDecode for u32 { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + deserializer.cursor.read_u32::().unwrap() + } +} + +impl SseDecode for u8 { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + deserializer.cursor.read_u8().unwrap() + } +} + +impl SseDecode for () { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self {} +} + +impl SseDecode for i32 { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { + deserializer.cursor.read_i32::().unwrap() + } +} + +fn pde_ffi_dispatcher_primary_impl( + func_id: i32, + port: flutter_rust_bridge::for_generated::MessagePort, + ptr: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr, + rust_vec_len: i32, + data_len: i32, +) { + // Codec=Pde (Serialization + dispatch), see doc to use other codecs + match func_id { + 1 => wire__crate__bridge__ccc_aead_decrypt_impl(port, ptr, rust_vec_len, data_len), + 2 => wire__crate__bridge__ccc_aead_encrypt_impl(port, ptr, rust_vec_len, data_len), + 5 => wire__crate__bridge__ccc_hash_impl(port, ptr, rust_vec_len, data_len), + 7 => wire__crate__bridge__ccc_kdf_derive_impl(port, ptr, rust_vec_len, data_len), + 8 => wire__crate__bridge__ccc_kem_decapsulate_impl(port, ptr, rust_vec_len, data_len), + 9 => wire__crate__bridge__ccc_kem_encapsulate_impl(port, ptr, rust_vec_len, data_len), + 10 => wire__crate__bridge__ccc_kem_generate_keypair_impl(port, ptr, rust_vec_len, data_len), + 12 => wire__crate__bridge__ccc_mac_compute_impl(port, ptr, rust_vec_len, data_len), + 13 => wire__crate__bridge__ccc_mac_verify_impl(port, ptr, rust_vec_len, data_len), + 14 => wire__crate__bridge__ccc_self_test_impl(port, ptr, rust_vec_len, data_len), + _ => unreachable!(), + } +} + +fn pde_ffi_dispatcher_sync_impl( + func_id: i32, + ptr: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr, + rust_vec_len: i32, + data_len: i32, +) -> flutter_rust_bridge::for_generated::WireSyncRust2DartSse { + // Codec=Pde (Serialization + dispatch), see doc to use other codecs + match func_id { + 3 => wire__crate__bridge__ccc_available_algorithms_impl(ptr, rust_vec_len, data_len), + 4 => wire__crate__bridge__ccc_capabilities_impl(ptr, rust_vec_len, data_len), + 6 => wire__crate__bridge__ccc_init_impl(ptr, rust_vec_len, data_len), + 11 => wire__crate__bridge__ccc_list_providers_impl(ptr, rust_vec_len, data_len), + _ => unreachable!(), + } +} + +// Section: rust2dart + +// Codec=Dco (DartCObject based), see doc to use other codecs +impl flutter_rust_bridge::IntoDart for crate::dto::AeadEncryptRequest { + fn into_dart(self) -> flutter_rust_bridge::for_generated::DartAbi { + [ + self.algo_id.into_into_dart().into_dart(), + self.key.into_into_dart().into_dart(), + self.nonce.into_into_dart().into_dart(), + self.plaintext.into_into_dart().into_dart(), + self.aad.into_into_dart().into_dart(), + ] + .into_dart() + } +} +impl flutter_rust_bridge::for_generated::IntoDartExceptPrimitive + for crate::dto::AeadEncryptRequest +{ +} +impl flutter_rust_bridge::IntoIntoDart + for crate::dto::AeadEncryptRequest +{ + fn into_into_dart(self) -> crate::dto::AeadEncryptRequest { + self + } +} +// Codec=Dco (DartCObject based), see doc to use other codecs +impl flutter_rust_bridge::IntoDart for crate::dto::AeadEncryptResult { + fn into_dart(self) -> flutter_rust_bridge::for_generated::DartAbi { + [self.ciphertext_and_tag.into_into_dart().into_dart()].into_dart() + } +} +impl flutter_rust_bridge::for_generated::IntoDartExceptPrimitive for crate::dto::AeadEncryptResult {} +impl flutter_rust_bridge::IntoIntoDart + for crate::dto::AeadEncryptResult +{ + fn into_into_dart(self) -> crate::dto::AeadEncryptResult { + self + } +} +// Codec=Dco (DartCObject based), see doc to use other codecs +impl flutter_rust_bridge::IntoDart for crate::dto::AlgoTestResultDto { + fn into_dart(self) -> flutter_rust_bridge::for_generated::DartAbi { + [ + self.algo_id.into_into_dart().into_dart(), + self.algo_name.into_into_dart().into_dart(), + self.passed.into_into_dart().into_dart(), + self.error_message.into_into_dart().into_dart(), + ] + .into_dart() + } +} +impl flutter_rust_bridge::for_generated::IntoDartExceptPrimitive for crate::dto::AlgoTestResultDto {} +impl flutter_rust_bridge::IntoIntoDart + for crate::dto::AlgoTestResultDto +{ + fn into_into_dart(self) -> crate::dto::AlgoTestResultDto { + self + } +} +// Codec=Dco (DartCObject based), see doc to use other codecs +impl flutter_rust_bridge::IntoDart for crate::dto::AlgorithmCapabilityDto { + fn into_dart(self) -> flutter_rust_bridge::for_generated::DartAbi { + [ + self.algo_id.into_into_dart().into_dart(), + self.algo_name.into_into_dart().into_dart(), + self.available.into_into_dart().into_dart(), + self.deterministic_io.into_into_dart().into_dart(), + self.efficiency_score.into_into_dart().into_dart(), + self.reliability_score.into_into_dart().into_dart(), + ] + .into_dart() + } +} +impl flutter_rust_bridge::for_generated::IntoDartExceptPrimitive + for crate::dto::AlgorithmCapabilityDto +{ +} +impl flutter_rust_bridge::IntoIntoDart + for crate::dto::AlgorithmCapabilityDto +{ + fn into_into_dart(self) -> crate::dto::AlgorithmCapabilityDto { + self + } +} +// Codec=Dco (DartCObject based), see doc to use other codecs +impl flutter_rust_bridge::IntoDart for crate::dto::HashRequest { + fn into_dart(self) -> flutter_rust_bridge::for_generated::DartAbi { + [ + self.algo_id.into_into_dart().into_dart(), + self.data.into_into_dart().into_dart(), + ] + .into_dart() + } +} +impl flutter_rust_bridge::for_generated::IntoDartExceptPrimitive for crate::dto::HashRequest {} +impl flutter_rust_bridge::IntoIntoDart for crate::dto::HashRequest { + fn into_into_dart(self) -> crate::dto::HashRequest { + self + } +} +// Codec=Dco (DartCObject based), see doc to use other codecs +impl flutter_rust_bridge::IntoDart for crate::dto::KdfDeriveRequest { + fn into_dart(self) -> flutter_rust_bridge::for_generated::DartAbi { + [ + self.algo_id.into_into_dart().into_dart(), + self.ikm.into_into_dart().into_dart(), + self.salt.into_into_dart().into_dart(), + self.info.into_into_dart().into_dart(), + self.out_length.into_into_dart().into_dart(), + ] + .into_dart() + } +} +impl flutter_rust_bridge::for_generated::IntoDartExceptPrimitive for crate::dto::KdfDeriveRequest {} +impl flutter_rust_bridge::IntoIntoDart + for crate::dto::KdfDeriveRequest +{ + fn into_into_dart(self) -> crate::dto::KdfDeriveRequest { + self + } +} +// Codec=Dco (DartCObject based), see doc to use other codecs +impl flutter_rust_bridge::IntoDart for crate::dto::KemEncapResultDto { + fn into_dart(self) -> flutter_rust_bridge::for_generated::DartAbi { + [ + self.ciphertext.into_into_dart().into_dart(), + self.shared_secret.into_into_dart().into_dart(), + ] + .into_dart() + } +} +impl flutter_rust_bridge::for_generated::IntoDartExceptPrimitive for crate::dto::KemEncapResultDto {} +impl flutter_rust_bridge::IntoIntoDart + for crate::dto::KemEncapResultDto +{ + fn into_into_dart(self) -> crate::dto::KemEncapResultDto { + self + } +} +// Codec=Dco (DartCObject based), see doc to use other codecs +impl flutter_rust_bridge::IntoDart for crate::dto::KemKeyPairDto { + fn into_dart(self) -> flutter_rust_bridge::for_generated::DartAbi { + [ + self.private_key.into_into_dart().into_dart(), + self.public_key.into_into_dart().into_dart(), + ] + .into_dart() + } +} +impl flutter_rust_bridge::for_generated::IntoDartExceptPrimitive for crate::dto::KemKeyPairDto {} +impl flutter_rust_bridge::IntoIntoDart for crate::dto::KemKeyPairDto { + fn into_into_dart(self) -> crate::dto::KemKeyPairDto { + self + } +} +// Codec=Dco (DartCObject based), see doc to use other codecs +impl flutter_rust_bridge::IntoDart for crate::dto::MacComputeRequest { + fn into_dart(self) -> flutter_rust_bridge::for_generated::DartAbi { + [ + self.algo_id.into_into_dart().into_dart(), + self.key.into_into_dart().into_dart(), + self.data.into_into_dart().into_dart(), + ] + .into_dart() + } +} +impl flutter_rust_bridge::for_generated::IntoDartExceptPrimitive for crate::dto::MacComputeRequest {} +impl flutter_rust_bridge::IntoIntoDart + for crate::dto::MacComputeRequest +{ + fn into_into_dart(self) -> crate::dto::MacComputeRequest { + self + } +} +// Codec=Dco (DartCObject based), see doc to use other codecs +impl flutter_rust_bridge::IntoDart for crate::dto::ProviderCapabilitiesDto { + fn into_dart(self) -> flutter_rust_bridge::for_generated::DartAbi { + [ + self.provider_name.into_into_dart().into_dart(), + self.aead.into_into_dart().into_dart(), + self.kdf.into_into_dart().into_dart(), + self.mac.into_into_dart().into_dart(), + self.hash.into_into_dart().into_dart(), + self.kem.into_into_dart().into_dart(), + ] + .into_dart() + } +} +impl flutter_rust_bridge::for_generated::IntoDartExceptPrimitive + for crate::dto::ProviderCapabilitiesDto +{ +} +impl flutter_rust_bridge::IntoIntoDart + for crate::dto::ProviderCapabilitiesDto +{ + fn into_into_dart(self) -> crate::dto::ProviderCapabilitiesDto { + self + } +} +// Codec=Dco (DartCObject based), see doc to use other codecs +impl flutter_rust_bridge::IntoDart for crate::dto::SelfTestReportDto { + fn into_dart(self) -> flutter_rust_bridge::for_generated::DartAbi { + [ + self.provider_name.into_into_dart().into_dart(), + self.all_passed.into_into_dart().into_dart(), + self.results.into_into_dart().into_dart(), + ] + .into_dart() + } +} +impl flutter_rust_bridge::for_generated::IntoDartExceptPrimitive for crate::dto::SelfTestReportDto {} +impl flutter_rust_bridge::IntoIntoDart + for crate::dto::SelfTestReportDto +{ + fn into_into_dart(self) -> crate::dto::SelfTestReportDto { + self + } +} + +impl SseEncode for flutter_rust_bridge::for_generated::anyhow::Error { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + ::sse_encode(format!("{:?}", self), serializer); + } +} + +impl SseEncode for String { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + >::sse_encode(self.into_bytes(), serializer); + } +} + +impl SseEncode for crate::dto::AeadEncryptRequest { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + ::sse_encode(self.algo_id, serializer); + >::sse_encode(self.key, serializer); + >::sse_encode(self.nonce, serializer); + >::sse_encode(self.plaintext, serializer); + >::sse_encode(self.aad, serializer); + } +} + +impl SseEncode for crate::dto::AeadEncryptResult { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + >::sse_encode(self.ciphertext_and_tag, serializer); + } +} + +impl SseEncode for crate::dto::AlgoTestResultDto { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + ::sse_encode(self.algo_id, serializer); + ::sse_encode(self.algo_name, serializer); + ::sse_encode(self.passed, serializer); + >::sse_encode(self.error_message, serializer); + } +} + +impl SseEncode for crate::dto::AlgorithmCapabilityDto { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + ::sse_encode(self.algo_id, serializer); + ::sse_encode(self.algo_name, serializer); + ::sse_encode(self.available, serializer); + ::sse_encode(self.deterministic_io, serializer); + ::sse_encode(self.efficiency_score, serializer); + ::sse_encode(self.reliability_score, serializer); + } +} + +impl SseEncode for bool { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + serializer.cursor.write_u8(self as _).unwrap(); + } +} + +impl SseEncode for crate::dto::HashRequest { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + ::sse_encode(self.algo_id, serializer); + >::sse_encode(self.data, serializer); + } +} + +impl SseEncode for crate::dto::KdfDeriveRequest { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + ::sse_encode(self.algo_id, serializer); + >::sse_encode(self.ikm, serializer); + >::sse_encode(self.salt, serializer); + >::sse_encode(self.info, serializer); + ::sse_encode(self.out_length, serializer); + } +} + +impl SseEncode for crate::dto::KemEncapResultDto { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + >::sse_encode(self.ciphertext, serializer); + >::sse_encode(self.shared_secret, serializer); + } +} + +impl SseEncode for crate::dto::KemKeyPairDto { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + >::sse_encode(self.private_key, serializer); + >::sse_encode(self.public_key, serializer); + } +} + +impl SseEncode for Vec { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + ::sse_encode(self.len() as _, serializer); + for item in self { + ::sse_encode(item, serializer); + } + } +} + +impl SseEncode for Vec { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + ::sse_encode(self.len() as _, serializer); + for item in self { + ::sse_encode(item, serializer); + } + } +} + +impl SseEncode for Vec { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + ::sse_encode(self.len() as _, serializer); + for item in self { + ::sse_encode(item, serializer); + } + } +} + +impl SseEncode for Vec { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + ::sse_encode(self.len() as _, serializer); + for item in self { + ::sse_encode(item, serializer); + } + } +} + +impl SseEncode for crate::dto::MacComputeRequest { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + ::sse_encode(self.algo_id, serializer); + >::sse_encode(self.key, serializer); + >::sse_encode(self.data, serializer); + } +} + +impl SseEncode for Option { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + ::sse_encode(self.is_some(), serializer); + if let Some(value) = self { + ::sse_encode(value, serializer); + } + } +} + +impl SseEncode for Option { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + ::sse_encode(self.is_some(), serializer); + if let Some(value) = self { + ::sse_encode(value, serializer); + } + } +} + +impl SseEncode for crate::dto::ProviderCapabilitiesDto { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + ::sse_encode(self.provider_name, serializer); + >::sse_encode(self.aead, serializer); + >::sse_encode(self.kdf, serializer); + >::sse_encode(self.mac, serializer); + >::sse_encode(self.hash, serializer); + >::sse_encode(self.kem, serializer); + } +} + +impl SseEncode for crate::dto::SelfTestReportDto { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + ::sse_encode(self.provider_name, serializer); + ::sse_encode(self.all_passed, serializer); + >::sse_encode(self.results, serializer); + } +} + +impl SseEncode for u32 { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + serializer.cursor.write_u32::(self).unwrap(); + } +} + +impl SseEncode for u8 { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + serializer.cursor.write_u8(self).unwrap(); + } +} + +impl SseEncode for () { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) {} +} + +impl SseEncode for i32 { + // Codec=Sse (Serialization based), see doc to use other codecs + fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { + serializer.cursor.write_i32::(self).unwrap(); + } +} + +#[cfg(not(target_family = "wasm"))] +mod io { + // This file is automatically generated, so please do not edit it. + // @generated by `flutter_rust_bridge`@ 2.11.1. + + // Section: imports + + use super::*; + use flutter_rust_bridge::for_generated::byteorder::{ + NativeEndian, ReadBytesExt, WriteBytesExt, + }; + use flutter_rust_bridge::for_generated::{transform_result_dco, Lifetimeable, Lockable}; + use flutter_rust_bridge::{Handler, IntoIntoDart}; + + // Section: boilerplate + + flutter_rust_bridge::frb_generated_boilerplate_io!(); +} +#[cfg(not(target_family = "wasm"))] +pub use io::*; + +/// cbindgen:ignore +#[cfg(target_family = "wasm")] +mod web { + // This file is automatically generated, so please do not edit it. + // @generated by `flutter_rust_bridge`@ 2.11.1. + + // Section: imports + + use super::*; + use flutter_rust_bridge::for_generated::byteorder::{ + NativeEndian, ReadBytesExt, WriteBytesExt, + }; + use flutter_rust_bridge::for_generated::wasm_bindgen; + use flutter_rust_bridge::for_generated::wasm_bindgen::prelude::*; + use flutter_rust_bridge::for_generated::{transform_result_dco, Lifetimeable, Lockable}; + use flutter_rust_bridge::{Handler, IntoIntoDart}; + + // Section: boilerplate + + flutter_rust_bridge::frb_generated_boilerplate_web!(); +} +#[cfg(target_family = "wasm")] +pub use web::*; diff --git a/crates/ccc-flutter-bridge/src/lib.rs b/crates/ccc-flutter-bridge/src/lib.rs index 6626585..d0e962d 100644 --- a/crates/ccc-flutter-bridge/src/lib.rs +++ b/crates/ccc-flutter-bridge/src/lib.rs @@ -15,5 +15,8 @@ //! The generator reads this crate's source and emits Dart classes under //! `flutter_src/lib/gen/rust/`. +// AUTO INJECTED BY flutter_rust_bridge. +mod frb_generated; + pub mod bridge; pub mod dto; diff --git a/docs/ccc_rust_plan_phases.rst b/docs/ccc_rust_plan_phases.rst index 3c19f84..770d8a5 100644 --- a/docs/ccc_rust_plan_phases.rst +++ b/docs/ccc_rust_plan_phases.rst @@ -95,7 +95,7 @@ Step 3 — wolfSSL Submodule + ``ccc-crypto-wolfssl`` * ``[x]`` ``provider.rs`` — WolfSslProvider: CryptoProvider impl * ``[x]`` ``provider.rs`` — self_test() with embedded NIST vectors (AES-256-GCM, ChaCha20-Poly1305) * ``[x]`` Register WolfSslProvider in ProviderRegistry via init() -* ``[ ]`` Full native build verified (requires ``brew install cmake``) +* ``[x]`` Full native build verified (cmake builds clean, all conformance tests pass) ---- @@ -125,9 +125,9 @@ Step 4 — ``ccc-flutter-bridge`` Entry-Point Crate Step 5 — Flutter Build Integration ------------------------------------ -* ``[ ]`` Add ``flutter_rust_bridge: ^2`` to ``pubspec.yaml`` -* ``[ ]`` Run ``flutter_rust_bridge_codegen generate`` -* ``[ ]`` Verify generated ``flutter_src/lib/gen/rust/`` bindings +* ``[x]`` Add ``flutter_rust_bridge: ^2`` to ``pubspec.yaml`` +* ``[x]`` Run ``flutter_rust_bridge_codegen generate`` +* ``[x]`` Verify generated ``flutter_src/lib/gen/rust/`` bindings (bridge.dart, dto.dart, dto.freezed.dart, frb_generated.dart) * ``[ ]`` iOS plugin scaffold (``ios/`` dir, cargokit integration) * ``[ ]`` Android plugin scaffold (``android/`` dir, CMakeLists.txt) * ``[ ]`` macOS plugin scaffold (``macos/`` dir) @@ -158,7 +158,7 @@ Step 7 — Conformance Test Suite * ``[x]`` ``tests/conformance/src/main.rs`` — RFC 4231 HMAC-SHA256 (2 vectors) * ``[x]`` ``tests/conformance/src/main.rs`` — FIPS hash vectors (SHA-256/512, SHA3-256, BLAKE2b) * ``[ ]`` Cross-provider conformance test (requires multiple providers) -* ``[ ]`` ``cargo run -p ccc-conformance-tests`` passes (requires cmake) +* ``[x]`` ``cargo run -p ccc-conformance-tests`` passes (12/12 vectors, all algorithms) ---- @@ -176,7 +176,7 @@ Step 8 — Architecture Documentation Final Verification Gate ------------------------ -* ``[ ]`` ``cargo test --workspace`` — all pass (requires cmake for wolfSSL) +* ``[x]`` ``cargo test --workspace`` — all pass (8/8 unit + 12/12 conformance) * ``[ ]`` ``cargo build --target aarch64-apple-ios`` — success * ``[ ]`` ``cargo build --target aarch64-linux-android`` — success * ``[ ]`` Flutter roundtrip integration test passes (1 KB encrypt/decrypt) diff --git a/flutter_rust_bridge.yaml b/flutter_rust_bridge.yaml index 20974b8..3d1071e 100644 --- a/flutter_rust_bridge.yaml +++ b/flutter_rust_bridge.yaml @@ -1,23 +1,24 @@ -# flutter_rust_bridge v2 configuration -# Run from the flutter_src/ directory: -# flutter pub run flutter_rust_bridge:create --config-file ../flutter_rust_bridge.yaml -# Or after adding the dev dependency, just: +# flutter_rust_bridge v2.11.1 codegen configuration +# Run from the ccc_rust/ workspace root: # flutter_rust_bridge_codegen generate +# +# All paths are relative to this file (the workspace root). -# The Rust crate that contains the bridge functions. -rust_crate_dir: "../crates/ccc-flutter-bridge" +# Crate directory containing the bridge Cargo.toml. +rust_root: "crates/ccc-flutter-bridge" -# Output directories for generated Dart code. -dart_output: "lib/gen/rust" +# Module paths within the crate that expose #[frb] functions. +# Comma-separated, using Rust module path syntax. +rust_input: "crate::bridge,crate::dto" -# Output directory for generated C headers (for iOS/macOS plugin linkage). -c_output_path: "../crates/ccc-flutter-bridge/include/ccc_bridge.h" +# Where to write the generated Dart bindings. +dart_output: "../letusmsg_app/flutter_src/lib/gen/rust" -# The Rust edition. Should match Cargo.toml. -# (Informational — FRB reads this from the crate's Cargo.toml automatically.) +# Where to write the generated Rust glue (frb_generated.rs). +rust_output: "crates/ccc-flutter-bridge/src/frb_generated.rs" -# Dart class name for the generated API (defaults to RustLib). -dart_class_name: "CccBridge" +# C header for iOS/macOS static-lib linkage. +c_output: "crates/ccc-flutter-bridge/include/ccc_bridge.h" -# Override how types are named in Dart (optional). -dart_enums_style: true +# Dart class name exposed to the Flutter app. +dart_entrypoint_class_name: "CccCrypto"