# Tsotchke Quantum Random Number Generator (QRNG)
This project is a Rust library that implements Tsotchkes Quantum Random Number Generator (QRNG) along with various functionalities related to cryptography, finance, games, and statistical analysis. The library leverages quantum mechanics principles to generate random numbers, which can be used in various applications requiring high-quality randomness.
## Features
- **Core Functionality**: Implements the quantum random number generation logic.
- **Cryptography**: Provides key exchange and key derivation algorithms utilizing quantum RNG.
- **Finance**: Includes Monte Carlo simulations and options pricing models based on quantum RNG.
- **Games**: Implements the logic for a quantum dice game.
- **Statistical Analysis**: Contains statistical tests and validation functions to ensure the quality of randomness.
## Getting Started
### Prerequisites
- Rust (version 1.60 or higher)
- Cargo (Rust's package manager and build system)
### Installation
To use this library in your project, add the following to your `Cargo.toml`:
```toml
[dependencies]
rust_qrng = { path = "../path_to_rust_qrng" }
```
### Usage
Here is a simple example of how to use the QRNG library:
```rust
use rust_qrng::core::quantum_rng;
fn main() {
let random_number = quantum_rng::generate_random_number();
println!("Generated Quantum Random Number: {}", random_number);
}
```
## Running Tests
To run the tests for this library, use the following command:
```bash
cargo test
```
## Examples
Examples of how to use the various functionalities of the library can be found in the `examples` directory. You can run an example using:
```bash
cargo run --example quantum_dice_demo
```
## Packaging and Publishing
### Building for Release
After development, build the optimized release version:
```bash
cargo build --release
```
### Packaging the Crate
Before publishing, package the crate to verify everything is included:
```bash
cargo package
```
To see what files will be included in the package:
```bash
cargo package --list
```
### Publishing to Crates.io
1. **Get an API token** from [crates.io](https://crates.io/me)
2. **Login with your token**:
```bash
cargo login
```
3. **Publish the crate**:
```bash
cargo publish
```
### Dry Run Publishing
To test publishing without actually uploading:
```bash
cargo publish --dry-run
```
### Troubleshooting Packaging Issues
If you encounter packaging errors:
1. **Check required metadata** - Ensure all fields in `Cargo.toml` are present
2. **Verify file permissions** - Make sure all files are readable
3. **Check for missing files** - Ensure LICENSE, README.md, and src/ exist
4. **Clean and retry**:
```bash
cargo clean
cargo check
cargo package --list
```
## Contributing
Contributions are welcome! Please feel free to submit a pull request or open an issue for any suggestions or improvements.
## License
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.