# Lox Lox is a reputation-based bridge distribution system that provides privacy protection to users and their social graph and is open to all users. Lox is written in rust and requires `cargo` to test. [Install Rust](https://www.rust-lang.org/tools/install) ### To use the docker environment to build the package: ``` ./build-lox.sh ./run-lox.sh ``` ### To run the full tests used for our experimental results run: ``` cargo test --release -- --nocapture TESTNAME ``` Where `TESTNAME` is one of: ``` stats_test_trust_levels stats_test_invitations stats_test_percent_blockage_migration_05 stats_test_percent_blockage_migration_010 stats_test_percent_blockage_migration_15 stats_test_percent_blockage_migration_20 stats_test_percent_blockage_migration_25 stats_test_percent_blockage_migration_30 stats_test_percent_blockage_migration_35 stats_test_percent_blockage_migration_40 stats_test_percent_blockage_migration_45 stats_test_percent_blockage_migration_50 stats_test_percent_blockage_migration_55 stats_test_percent_blockage_migration_60 stats_test_percent_blockage_migration_65 stats_test_percent_blockage_migration_70 stats_test_percent_blockage_migration_75 stats_test_percent_blockage_migration_80 stats_test_percent_blockage_migration_85 stats_test_percent_blockage_migration_90 stats_test_percent_blockage_migration_95 stats_test_percent_blockage_migration_100 ``` Each test takes approximately 20-30 hours to run. However, this can be improved by passing the `fast` feature. Using this feature, our tests are run for 100 users instead of 10000 users and will produce results comparable to our reported results (with larger error margins). To run individual tests with this flag run: ``` cargo test --release --features=fast -- --nocapture TESTNAME ``` To run all tests in fast mode and output the results to the Parsing-results directory, run: ``` ./run_tests_fast ``` Note that: our implementation is coded such that the reachability certificate expires at 00:00 UTC. A workaround has been included in each test to pause if it is too close to this time so the request won't fail. In reality, if the bucket is still reachable, a user could simply request a new reachability token if their request fails for this reason (a new certificate should be available prior to the outdated certificate expiring).