byte-array-ops 0.1.1

A no_std-compatible library for ergonomic byte array operations with optional security hardening. Supports multiple input formats (hex, binary, UTF-8), bitwise operations, and comprehensive type conversions with minimal dependencies.
Documentation
# byte-array-ops

⚠️ **Active Development Warning**
This library is under heavy active development. Core functionality (type conversions, bitwise operations) is stable and production-ready. Security-hardening features are planned for v0.2.0+.

## Overview

A `no_std`-compatible Rust library for ergonomic byte array operations with optional security hardening.

**Design Philosophy**:
- **Compile only what you need** - Feature flags for graceful degradation. Basic conversions work without any features, bitwise operations require `ops_algebra` (enabled by default), and security features are opt-in.
- **Minimal dependencies** - Keep compilation fast and dependency tree small for a pleasant development experience.
- **Test-driven development** - No functionality is added without comprehensive test coverage. Untested or experimental features are gated behind the `experimental` flag (disabled by default and guarded with `compile_error!`).

## Features

| Feature                     | Purpose                                      | Default | Status             | Use Cases                                                       |
|-----------------------------|----------------------------------------------|---------|--------------------|-----------------------------------------------------------------|
| `ops_algebra`               | Bitwise operations (XOR, AND, OR, NOT)       | ✅ Yes   | ✅ Implemented      | Crypto implementations, data masking, general byte manipulation |
| `sec_basic_hardening`       | Basic security tier (zeroize on drop)        | ❌ No    | ⏳ Planned (v0.2.0) | Handling sensitive data like keys, passwords                    |
| `sec_enhanced_hardening`    | Enhanced security (const-time ops + memlock) | ❌ No    | ⏳ Planned (v0.2.0) | Cryptographic operations, preventing timing attacks             |
| `sec_maximum_hardening`     | Maximum security (all features + memencrypt) | ❌ No    | ⏳ Planned (v0.2.0) | High-security environments, defense in depth                    |
| `sec_harden_zeroize`        | Secure memory wiping                         | ❌ No    | ⏳ Planned          | Use tiers instead (individual feature for advanced users)       |
| `sec_harden_const_time_ops` | Constant-time comparisons                    | ❌ No    | ⏳ Planned          | Use tiers instead (individual feature for advanced users)       |
| `sec_harden_memlock`        | Memory locking (prevent swap to disk)        | ❌ No    | ⏳ Planned          | Use tiers instead (individual feature for advanced users)       |
| `sec_harden_memencrypt`     | In-memory encryption                         | ❌ No    | ⏳ Planned          | Use tiers instead (individual feature for advanced users)       |
| `ops_simd`                  | SIMD-optimized operations                    | ❌ No    | ⏳ Planned (v0.3.0) | High-performance bulk operations                                |
| `experimental`              | Unstable/experimental features               | ❌ No    | 🧪 Ongoing         | Development and testing only                                    |

**Note on Feature Selection:**
- **No features needed**: Simple conversions (hex ↔ bytes, UTF-8 ↔ bytes) work with `default-features = false`
- **`ops_algebra` (default)**: Enabled by default for bitwise operations
- **Security tiers**: Use when handling sensitive data (choose appropriate tier for your threat model)
- **Individual security features**: For fine-grained control (advanced users only)

## Installation

```toml
[dependencies]
byte-array-ops = "0.1.0"

# Or disable default features for minimal build (conversions only)
byte-array-ops = { version = "0.1.0", default-features = false }

# For no_std environments with alloc and operations
byte-array-ops = { version = "0.1.0", default-features = false, features = ["ops_algebra"] }
```

## Quick Start

See the [API documentation](https://docs.rs/byte-array-ops) for comprehensive examples including:
- Creating ByteArrays from hex, binary, UTF-8, and raw bytes
- Bitwise operations (XOR, AND, OR, NOT)
- Working with iterators
- Using the builder pattern

### Basic Example

```rust
use byte_array_ops::ByteArray;
use byte_array_ops::errors::ByteArrayError;

fn main() -> Result<(),ByteArrayError> {

    // From hex string
    let from_hex: ByteArray = "0xdeadbeef".parse()?;
    assert_eq!(from_hex.as_bytes(), [0xde, 0xad, 0xbe, 0xef]);

    // From UTF-8 string (no prefix)
    let from_utf8: ByteArray = "hello".parse()?;
    assert_eq!(from_utf8.as_bytes(), b"hello");

    // Bitwise operations (requires ops_algebra feature)
    let a: ByteArray = "0xff00".parse()?;
    let b: ByteArray = "0x0ff0".parse()?;
    let result = a ^ b; // XOR
    assert_eq!(result.as_bytes(), [0xf0, 0xf0]);
    
    Ok(())
}


```

## `no_std` Support

This library is `no_std` compatible and requires only the `alloc` crate. Perfect for:
- Embedded systems with allocators (ESP32, ARM Cortex-M with heap)
- Bootloaders and kernel development
- WebAssembly environments
- Any environment where `std` is unavailable

## Roadmap

### v0.1.0 (Current)
Core functionality with production-ready type conversions and bitwise operations:
- ✅ Multiple input formats (hex, binary, UTF-8, raw bytes)
- ✅ Bitwise operations (XOR, AND, OR, NOT)
- ✅ Comprehensive iterator support
- ✅ no_std compatibility with alloc

### v0.2.0 (Planned)
Security hardening for cryptographic and sensitive data use cases:
- Secure memory wiping (zeroize on drop)
- Memory locking (prevent swapping to disk)
- Constant-time operations (timing attack prevention)
- Hardened constructors and secure reallocation

### v0.3.0 (Planned)
Performance optimization for high-throughput scenarios:
- SIMD-accelerated bitwise operations
- Benchmark suite and regression testing
- Performance tuning for large arrays

### v1.0.0 (Future)
Stable API with long-term compatibility guarantees:
- API freeze after real-world usage validation
- Security audit (if feasible - even major libraries like RustCrypto often lack formal audits)
- Comprehensive test coverage and fuzzing
- Multi-platform testing and verification

## License

Licensed under the Apache License, Version 2.0. See [LICENSE](https://gitlab.com/jurassicLizard/byte-array-ops/-/blob/master/LICENSE) for details.