# Secret Memory
`secret-mem` is a Rust library designed to securely manage sensitive data in memory.
It provides safe abstractions for allocating, managing, and deallocating memory regions
that should remain protected and as invisible as possible using platform-specific features.
The goal of the library is to ensure that sensitive data, such as passwords, cryptographic keys,
or confidential information, are kept secure in memory, reducing the risk of leakage or exposure.
The library will use operating system-specific mechanisms like `memfd_secret`, `mmap`,
and `VirtualAlloc` to provide memory protections, including:
- Preventing memory from being swapped to disk.
- Restricting read/write access to allocated memory regions.
- Ensuring memory is excluded from core dumps.
**Important: This project is still under development and is currently non-functional!**
> While the foundation of the library is in place, key functionality, such as memory protections
> and platform-specific implementations, are not yet fully implemented or tested.
## Example (Currently Non-functional)
```rust
use secret_mem::{SecretBox, SecretVec, SecretString};
fn main() {
// Example: Store a single secret value
let secret_value: SecretBox = SecretBox::new(42);
// Example: Store multiple secret values in a secure vector
let mut secret_vec: SecretVec = SecretVec::new();
secret_vec.push(0x42);
secret_vec.push(0x43);
// Example: Store a sensitive string in secure memory
let secret_password: SecretString = SecretString::from("super_secret_password");
// NOTE: None of the above functionality is currently working!
}
```
## Development Status
`secret-mem` is an experimental project and is currently incomplete.
The main structures, `SecretBox`, `SecretVec`, and `SecretString`, have been defined,
but they lack proper implementation and memory management features at this time.
### Roadmap
- [ ] Implement platform-specific memory allocation and protection features.
- [ ] Complete functionality for `SecretBox`
- [ ] Complete functionality for `SecretVec`.
- [ ] Complete functionality for `SecretString`.
- [ ] Add tests for memory safety.
## Safety & Security
The library will use unsafe code internally to interact with system memory management functions.
Handle your sensitive data with extreme care.
### License
This project is licensed under either of the following licenses, at your option:
- Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)
### Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted
for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any
additional terms or conditions.