{"id":18977302,"url":"https://github.com/mikhailms/rust-radius","last_synced_at":"2025-04-19T17:19:42.282Z","repository":{"id":46078447,"uuid":"289486310","full_name":"MikhailMS/rust-radius","owner":"MikhailMS","description":"RADIUS implementation in Rust","archived":false,"fork":false,"pushed_at":"2024-09-29T19:22:04.000Z","size":289,"stargazers_count":30,"open_issues_count":9,"forks_count":7,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-14T00:52:11.069Z","etag":null,"topics":["radius","radius-client","radius-server","rust"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/MikhailMS.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-08-22T12:46:34.000Z","updated_at":"2025-03-21T07:04:59.000Z","dependencies_parsed_at":"2024-03-23T15:39:40.620Z","dependency_job_id":"19de3839-4a24-4844-96a0-aa0c89faa32e","html_url":"https://github.com/MikhailMS/rust-radius","commit_stats":{"total_commits":206,"total_committers":2,"mean_commits":103.0,"dds":0.009708737864077666,"last_synced_commit":"5db2ee9ce560df311acc6fcd85a51ddd4fd6ffcb"},"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MikhailMS%2Frust-radius","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MikhailMS%2Frust-radius/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MikhailMS%2Frust-radius/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MikhailMS%2Frust-radius/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MikhailMS","download_url":"https://codeload.github.com/MikhailMS/rust-radius/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249228273,"owners_count":21233852,"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":["radius","radius-client","radius-server","rust"],"created_at":"2024-11-08T15:28:29.364Z","updated_at":"2025-04-16T10:32:09.431Z","avatar_url":"https://github.com/MikhailMS.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![MIT licensed][mit-badge]][mit-url]\n[![Actions Status][action-badge]][action-url]\n[![Crates.io][crates-badge]][crates-url]\n[![Docs.rs][docs-badge]][docs-url]\n\n\n[action-badge]: https://github.com/MikhailMS/rust-radius/workflows/RustRadius/badge.svg\n[action-url]:   https://github.com/MikhailMS/rust-radius/actions\n[crates-badge]: https://img.shields.io/crates/v/radius-rust.svg\n[crates-url]:   https://crates.io/crates/radius-rust\n[docs-badge]:   https://docs.rs/radius-rust/badge.svg\n[docs-url]:     https://docs.rs/radius-rust\n[mit-badge]:    https://img.shields.io/badge/license-MIT-blue.svg\n[mit-url]:      LICENSE\n\n\n# Rust RADIUS \nPure (as far as this code goes) implementation of RADIUS in Rust\n\n\nRationale behind this project:\n1. I am getting in love with Rust and would love to use it in my day-to-day job.\n2. There are a number of small projects involving RADIUS, where I can start using Rust\n3. However there were no good RADIUS implementations in Rust\n4. ????\n5. Profit - now there is one, so I can try to push Rust internally in my team ^_^\n\n\n## Installation\n```\n[dependencies]\nradius-rust = \"0.4.4\"\n\nOR if you are planning to build Async RADIUS Client/Server\n\n[dependencies]\nradius-rust = { version = \"0.4.4\", features = [\"async-radius\"] }\n```\n\n\n## Tests\n1. Project has some tests, that require RADIUS Server running, so:\n    1. `cargo run --example sync_radius_server \u0026` OR\n    2. `cargo run --example async_radius_server --all-features \u0026` OR\n    3. You can spin up any other RADIUS server of your choice\n2. `cargo test --verbose` or `cargo test --all-features --verbose`\n\n\n## Contributing\nWould you love to contribute to this project? I'd really appreciate your input!\n\n1. Raise an issue, if you believe some functionality is missing, something is broken and etc\n2. Create a PR, if you already sorted out some issues yourself. **Please ensure** to submit PR to **development branch**\n\n\n## Minimum Supported Version of Rust (MSVR)\nAs far as I can tell from Github Action\n1. `1.43.0` when you use `default` feature (sync only)\n2. `1.46.0` when you use `async-radius` feature (async \u0026 sync)\n\nPrior to 18/09/2021 MSVR was:\n1. `1.42.0` when you use `default` feature (sync only)\n2. `1.43.0` when you use `async-radius` feature (async \u0026 sync)\nso there is a chance everything would be working for you and it just Github Action having some issues\n\n\n## Benchmarks\n1. To run benchmarks, you need to have RADIUS Server running, so\n    1. `cargo run --example sync_radius_server \u0026` OR\n    2. `cargo run --example async_radius_server --all-features \u0026`\n2. Then run `cargo +nightly bench` or `cargo +nightly bench --all-features`\n3. Run locally on *Mac Mini (2018, RAM: 32 GB 2667 MHz DDR4, CPU: 3.2 GHz Intel Core i7)*\n4. Present here only as a comparison between different RADIUS Client/Server implementations, that crate offers (basically just for myself to see if it worth adding features like async and etc)\n5. Results:\n```\n1. RADIUS Client       against RADIUS Server\ntest test_acct_client_w_response_against_server        ... bench:     106,383 ns/iter (+/- 4,014)\ntest test_acct_client_wo_response_against_server       ... bench:     106,075 ns/iter (+/- 10,151)\ntest test_auth_client_w_response_against_server        ... bench:     100,156 ns/iter (+/- 5,719)\ntest test_auth_client_wo_response_against_server       ... bench:     100,470 ns/iter (+/- 4,690)\ntest test_coa_client_w_response_against_server         ... bench:      79,086 ns/iter (+/- 37,158)\ntest test_coa_client_wo_response_against_server        ... bench:      78,813 ns/iter (+/- 6,330)\n``` \n```\n2. Async RADIUS Client against RADIUS Server\ntest test_async_acct_client_w_response_against_server  ... bench:     120,529 ns/iter (+/- 6,305)\ntest test_async_acct_client_wo_response_against_server ... bench:     120,881 ns/iter (+/- 5,505)\ntest test_async_auth_client_w_response_against_server  ... bench:     113,678 ns/iter (+/- 6,219)\ntest test_async_auth_client_wo_response_against_server ... bench:     113,324 ns/iter (+/- 8,135)\ntest test_async_coa_client_w_response_against_server   ... bench:      93,113 ns/iter (+/- 12,394)\ntest test_async_coa_client_wo_response_against_server  ... bench:      92,298 ns/iter (+/- 10,021)\n```\n```\n3. RADIUS Client       against Async RADIUS Server\ntest test_acct_client_w_response_against_server        ... bench:     116,303 ns/iter (+/- 22,485)\ntest test_acct_client_wo_response_against_server       ... bench:     115,774 ns/iter (+/- 5,040)\ntest test_auth_client_w_response_against_server        ... bench:     110,263 ns/iter (+/- 4,067)\ntest test_auth_client_wo_response_against_server       ... bench:     109,771 ns/iter (+/- 3,831)\ntest test_coa_client_w_response_against_server         ... bench:      87,650 ns/iter (+/- 25,813)\ntest test_coa_client_wo_response_against_server        ... bench:      84,563 ns/iter (+/- 2,856)\n```\n```\n4. Async RADIUS Client against Async RADIUS Server\ntest test_async_acct_client_w_response_against_server  ... bench:     129,056 ns/iter (+/- 6,221)\ntest test_async_acct_client_wo_response_against_server ... bench:     127,969 ns/iter (+/- 7,174)\ntest test_async_auth_client_w_response_against_server  ... bench:     127,812 ns/iter (+/- 37,821)\ntest test_async_auth_client_wo_response_against_server ... bench:     124,807 ns/iter (+/- 12,565)\ntest test_async_coa_client_w_response_against_server   ... bench:      96,329 ns/iter (+/- 6,898)\ntest test_async_coa_client_wo_response_against_server  ... bench:      97,011 ns/iter (+/- 10,322)\n```\n\n\n## Notes\n1. All works happens on **development** branch, so if you feel that project is abandoned, check out **development** branch or raise an issue\n2. Main core functionality is completed, but there is a chance that I've missed something here and there because it is not needed for my projects yet. **If this is the case, raise an issue or PR and I'll see what could be done to get it resolved**\n3. Big thanks to [pyrad](https://github.com/pyradius/pyrad) and [radius-rust-client](https://github.com/athonet-open/rust-radius-client) projects, which helped me to start this project\n4. Value of **Message-Authenticator** RadiusAttribute won't be validated, because in RADIUS dictionary it has **string** type, however it is not valid ASCII string (**Message-Authenticator** is a HMAC-MD5 hash)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmikhailms%2Frust-radius","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmikhailms%2Frust-radius","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmikhailms%2Frust-radius/lists"}