{"id":13648648,"url":"https://github.com/project-oak/rust-verification-tools","last_synced_at":"2025-04-22T11:32:54.367Z","repository":{"id":44066320,"uuid":"291279103","full_name":"project-oak/rust-verification-tools","owner":"project-oak","description":"RVT is a collection of tools/libraries to support both static and dynamic verification of Rust programs.","archived":true,"fork":false,"pushed_at":"2022-02-12T14:53:25.000Z","size":3058,"stargazers_count":275,"open_issues_count":25,"forks_count":37,"subscribers_count":16,"default_branch":"main","last_synced_at":"2025-04-11T23:02:30.907Z","etag":null,"topics":["fuzzing","klee","proptest","rust","seahorn","verification"],"latest_commit_sha":null,"homepage":"https://project-oak.github.io/rust-verification-tools/","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/project-oak.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE-APACHE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-08-29T13:44:40.000Z","updated_at":"2025-03-31T05:11:31.000Z","dependencies_parsed_at":"2022-08-12T11:00:19.403Z","dependency_job_id":null,"html_url":"https://github.com/project-oak/rust-verification-tools","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/project-oak%2Frust-verification-tools","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/project-oak%2Frust-verification-tools/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/project-oak%2Frust-verification-tools/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/project-oak%2Frust-verification-tools/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/project-oak","download_url":"https://codeload.github.com/project-oak/rust-verification-tools/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250232411,"owners_count":21396640,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["fuzzing","klee","proptest","rust","seahorn","verification"],"created_at":"2024-08-02T01:04:25.626Z","updated_at":"2025-04-22T11:32:53.657Z","avatar_url":"https://github.com/project-oak.png","language":"Rust","funding_links":[],"categories":["Projects","Rust"],"sub_categories":["Verification"],"readme":"# Rust verification tools\n\nThis is a collection of tools/libraries to support both static\nand dynamic verification of Rust programs.\n\nWe see static verification (formal verification) and dynamic verification\n(testing) as two parts of the same activity and so these tools can be used for\neither form of verification.\n\n- Dynamic verification using the\n  [proptest](https://github.com/AltSysrq/proptest)\n  fuzzing/property testing library.\n\n- Static verification using the\n  [KLEE](http://klee.github.io/)\n  symbolic execution engine.\n\nWe aim to add other backends in the near future.\n\nIn addition, [we document](https://project-oak.github.io/rust-verification-tools/about.html) how the tools we wrote work\nin case you are porting a verification tool for use with Rust.\n(In particular, we describe how to generate LLVM bitcode files that can\nbe used with LLVM-based verification tools.)\n\n## Tools and libraries\n\n- `verification-annotations` crate: an FFI layer for creating symbolic values in\n  [KLEE](http://klee.github.io/)\n\n- `propverify` crate:\n  an implementation of the [proptest](https://github.com/AltSysrq/proptest)\n  library for use with static verification tools.\n\n- `cargo-verify`: a tool for compiling a crate and\n  either verifying main/tests or for fuzzing main/tests.\n  (Use the `--backend` flag to select which.)\n\n- `compatibility-test` test crate:\n  test programs that can be verified either using the original `proptest`\n  library or using `propverify`.\n  Used to check that proptest and propverify are compatible with each other.\n\n## Usage\n\nTL;DR\n\n1. Install\n   For installation with Docker, see the Usage section of [our main docs](https://project-oak.github.io/rust-verification-tools/about.html).\n\n2. Fuzz some examples with proptest\n\n   ```\n   cd compatibility-test\n   cargo test\n   cd ..\n   ```\n\n   (You can also use\n   `cargo-verify --backend=proptest --verbose`.)\n\n   One test should fail – this is correct behaviour.\n\n3. Verify some examples with propverify\n\n   `cd verification-annotations; cargo-verify --tests`\n\n   `cd verification-annotations; cargo-verify --tests`\n\n   No tests should fail.\n\n4. Read [the propverify intro](https://project-oak.github.io/rust-verification-tools/using-propverify/) for an example\n   of fuzzing with `proptest` and verifying with `propverify`.\n\n5. Read [the proptest book](https://altsysrq.github.io/proptest-book/intro.html)\n\n6. Read the source code for the [compatibility test suite](compatibility-test/src).\n\n   (Many of these examples are taken from or based on examples in\n   [the proptest book](https://altsysrq.github.io/proptest-book/intro.html).)\n\nThere is also [some limited documentation](https://project-oak.github.io/rust-verification-tools/about.html) of how this works.\n\n## License\n\nLicensed under either of\n\n- Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) or\n  http://www.apache.org/licenses/LICENSE-2.0)\n- MIT license ([LICENSE-MIT](LICENSE-MIT) or\n  http://opensource.org/licenses/MIT)\n\nat your option.\n\n## Acknowledgements\n\nThe `propverify` crate is heavily based on the design and API of the wonderful\n[proptest](https://github.com/AltSysrq/proptest)\nproperty/fuzz-testing library.\nThe implementation also borrows techniques, tricks and code\nfrom the implementation – you can learn a lot about how to write\nan embedded DSL from reading the proptest code.\n\nIn turn, `proptest` was influenced by\nthe [Rust port of QuickCheck](https://github.com/burntsushi/quickcheck)\nand\nthe [Hypothesis](https://hypothesis.works/) fuzzing/property testing library for Python.\n(`proptest` also acknowledges `regex_generate` – but we have not yet implemented\nregex strategies for this library.)\n\n## Known limitations\n\nThis is not an officially supported Google product;\nthis is an early release of a research project\nto enable experiments, feedback and contributions.\nIt is probably not useful to use on real projects at this stage\nand it may change significantly in the future.\n\nOur current goal is to make `propverify` as compatible with\n`proptest` as possible but we are not there yet.\nThe most obvious features that are not even implemented are\nsupport for\nusing regular expressions for string strategies,\nthe `Arbitrary` trait,\n`proptest-derive`.\n\nWe would like the `propverify` library and the `cargo-verify` script\nto work with as many Rust verification tools as possible\nand we welcome pull requests to add support.\nWe expect that this will require design/interface changes.\n\n### Contribution\n\nUnless you explicitly state otherwise, any contribution intentionally\nsubmitted for inclusion in the\nwork by you, as defined in the Apache-2.0 license, shall be dual licensed as\nabove, without any\nadditional terms or conditions.\n\nSee [the contribution instructions](CONTRIBUTING.md) for further details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fproject-oak%2Frust-verification-tools","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fproject-oak%2Frust-verification-tools","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fproject-oak%2Frust-verification-tools/lists"}