{"id":50099754,"url":"https://github.com/manuelpuebla/hermite_iopp","last_synced_at":"2026-05-23T06:33:08.913Z","repository":{"id":334206360,"uuid":"1139017912","full_name":"manuelpuebla/hermite_iopp","owner":"manuelpuebla","description":"High-performance Rust implementation of Interactive Oracle Proofs of Proximity (IOPP) for Hermitian curves over binary fields. Features bitsliced F₂⁴ arithmetic with 16× speedup.","archived":false,"fork":false,"pushed_at":"2026-01-21T12:16:12.000Z","size":31,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-24T03:25:44.037Z","etag":null,"topics":["algebraic-geometry","bitslicing","cryptography","fri","hermitian-curves","iopp","rust","zero-knowledge-proofs"],"latest_commit_sha":null,"homepage":null,"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/manuelpuebla.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE-MIT","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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-01-21T12:15:41.000Z","updated_at":"2026-01-21T12:16:25.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/manuelpuebla/hermite_iopp","commit_stats":null,"previous_names":["manuelpuebla/hermite_iopp"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/manuelpuebla/hermite_iopp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/manuelpuebla%2Fhermite_iopp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/manuelpuebla%2Fhermite_iopp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/manuelpuebla%2Fhermite_iopp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/manuelpuebla%2Fhermite_iopp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/manuelpuebla","download_url":"https://codeload.github.com/manuelpuebla/hermite_iopp/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/manuelpuebla%2Fhermite_iopp/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33385202,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-23T04:15:53.637Z","status":"ssl_error","status_checked_at":"2026-05-23T04:15:53.242Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["algebraic-geometry","bitslicing","cryptography","fri","hermitian-curves","iopp","rust","zero-knowledge-proofs"],"created_at":"2026-05-23T06:33:08.115Z","updated_at":"2026-05-23T06:33:08.906Z","avatar_url":"https://github.com/manuelpuebla.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# HermiteIOPP\n\n**Interactive Oracle Proofs of Proximity for Hermitian Curves over Binary Fields**\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![License: Apache 2.0](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)\n\nA high-performance Rust implementation of Interactive Oracle Proofs of Proximity (IOPP) for Algebraic Geometry codes, specifically targeting Hermitian curves over characteristic-2 fields.\n\n## Overview\n\nHermiteIOPP implements an optimized IOPP protocol for proving proximity to Hermitian AG codes. The implementation leverages domain-specific optimizations including:\n\n- **Bitsliced arithmetic** for F₂⁴ operations (16× speedup on constant multiplication)\n- **Barycentric interpolation** for small folding factors  \n- **Batch processing** with automatic amortization of transpose costs\n- **Zero-copy operations** where possible through careful memory layout\n\n**Target performance**: Within 1.2× of classical FRI for n = 2²⁰ evaluation points, while using a 256× smaller alphabet.\n\n## Features\n\n- ✅ Hermitian curve operations over F₂⁴\n- ✅ Bitsliced field arithmetic (64-element batches)\n- ✅ Barycentric Lagrange interpolation\n- ✅ AG-IOPP commit and query phases\n- ✅ Comprehensive test suite\n- 🔄 AVX-512 backend (in progress)\n- 📋 GPU acceleration (planned)\n\n## Quick Start\n\n### Installation\n\nAdd to your `Cargo.toml`:\n\n```toml\n[dependencies]\nhermite_iopp = \"0.1\"\n```\n\n### Basic Usage\n\n```rust\nuse hermite_iopp::{HermitianCurve, IOPPProver, IOPPVerifier};\nuse hermite_iopp::field::F2_4;\n\n// Setup: Hermitian curve y^17 + y = x^16 + x over F_{2^16}\nlet curve = HermitianCurve::new(4);  // q = 2^4 = 16\n\n// Prover: Generate proof for codeword proximity\nlet prover = IOPPProver::new(curve);\nlet codeword = vec![F2_4::random(); 1 \u003c\u003c 20];  // n = 2^20 points\nlet proof = prover.prove(\u0026codeword);\n\n// Verifier: Check proximity\nlet verifier = IOPPVerifier::new(curve);\nlet is_valid = verifier.verify(\u0026proof);\n```\n\n### Running Benchmarks\n\n```bash\n# Benchmark field operations\ncargo bench --bench field_ops\n\n# Benchmark FAFFT/interpolation\ncargo bench --bench fafft\n\n# Benchmark full IOPP commit phase\ncargo bench --bench iopp_commit\n\n# Compare with FRI baseline\ncargo bench --bench comparison\n```\n\n## Architecture\n\n```\nhermite_iopp/\n├── src/\n│   ├── lib.rs                 # Public API\n│   ├── field/\n│   │   ├── mod.rs             # Field traits\n│   │   ├── f2_4.rs            # F₂⁴ implementation\n│   │   └── bitsliced.rs       # Bitsliced F₂⁴ (64 elements)\n│   ├── curve/\n│   │   ├── mod.rs             # Curve traits\n│   │   ├── hermitian.rs       # Hermitian curve y^(q+1)+y = x^q+x\n│   │   └── projections.rs     # Fiber computations\n│   ├── interpolation/\n│   │   ├── mod.rs             # Interpolation traits\n│   │   ├── barycentric.rs     # Barycentric Lagrange\n│   │   └── fafft.rs           # Frobenius Additive FFT\n│   ├── iopp/\n│   │   ├── mod.rs             # IOPP protocol\n│   │   ├── prover.rs          # Commit phase\n│   │   ├── verifier.rs        # Query phase\n│   │   └── folding.rs         # Folding operators\n│   └── utils/\n│       ├── mod.rs\n│       └── batching.rs        # Batch processing utilities\n├── benches/                   # Criterion benchmarks\n├── tests/                     # Integration tests\n└── examples/                  # Usage examples\n```\n\n## Performance\n\n### Comparison with FRI (n = 2²⁰)\n\n| Metric | FRI | HermiteIOPP | Ratio |\n|--------|-----|-------------|-------|\n| Rounds | 20 | 5 | 4× fewer |\n| Alphabet size | 2⁶⁴ | 2¹⁶ | 256× smaller |\n| Prover time (Rnd 0) | 1.0M cycles | 1.2M cycles | 1.2× slower |\n| Queries per test | 2 | 16 | 8× more |\n| Total queries (2⁻⁸⁰) | 160 | 640 | 4× more |\n\n**Recommendation**: HermiteIOPP excels in bandwidth-constrained scenarios or hardware with native F₂ᵐ support.\n\n### Micro-benchmarks\n\nCycle counts per operation (averaged over 10K iterations):\n\n| Operation | Packed (v2.0) | Bitsliced (v3.0) | Speedup |\n|-----------|---------------|------------------|---------|\n| Add | 0.5 | 0.06 | 8× |\n| Mul (const) | 1.0 | 0.06 | **16×** |\n| Mul (general) | 1.0 | 0.2 | 5× |\n| Interpolate (q=16) | 256 | 64 | 4× |\n\n## Technical Details\n\n### Field Choice: F₂⁴\n\nWe use the 4-bit binary extension field F₂⁴ = F₂[x]/(x⁴ + x + 1).\n\n**Rationale**:\n- Small enough for full lookup tables (256 bytes)\n- Large enough to avoid excessive queries (16 elements per fiber)\n- Perfect for bitslicing (4 bits → 4 registers for 64 elements)\n\n### Curve Equation\n\n**Hermitian curve in trace form**:\n```\ny^(q+1) + y = x^q + x  over F_{2^{2m}}\n```\n\nFor q = 16:\n```\ny^17 + y = x^16 + x  over F_{2^8}\n```\n\n**Key property**: Fibers π⁻¹(P) are affine subspaces of dimension log₂(q) = 4.\n\n**Why trace form?**\n- Ensures fibers are *additive* subspaces (required for FAFFT)\n- Compatible with Artin-Schreier tower structure\n- Enables efficient computation via solving linear equations\n\n### Bitslicing Explained\n\nTraditional representation of 64 elements:\n```\n[elem0, elem1, ..., elem63]  // 64 nibbles\n```\n\nBitsliced representation:\n```rust\nstruct BitslicedF2_4 {\n    bit0: u64,  // bit 0 of all 64 elements\n    bit1: u64,  // bit 1 of all 64 elements\n    bit2: u64,  // bit 2 of all 64 elements\n    bit3: u64,  // bit 3 of all 64 elements\n}\n```\n\n**Advantage**: Operations become Boolean logic on u64 registers.\n\nExample (multiply by x):\n```rust\n// Standard: 1 cycle per element (via LUT)\nfor i in 0..64 {\n    result[i] = MUL_X_TABLE[input[i]];  // 64 cycles total\n}\n\n// Bitsliced: 4 cycles for all 64 elements\nresult.bit0 = input.bit3;\nresult.bit1 = input.bit0 ^ input.bit3;  \nresult.bit2 = input.bit1;\nresult.bit3 = input.bit2;\n// 16× faster!\n```\n\n## Documentation\n\n- [Optimization History](OPTIMIZATION_HISTORY.md) - Detailed evolution of the implementation\n- [API Documentation](https://docs.rs/hermite_iopp) - Generated from rustdoc\n- [Examples](examples/) - Usage examples and tutorials\n\n### Key Algorithms\n\n1. **Barycentric Interpolation** (`interpolation/barycentric.rs`)\n   - O(q) complexity for fixed point sets\n   - Precomputed Lagrange weights\n   - Ideal for small q (≤ 32)\n\n2. **Bitsliced Multiplication** (`field/bitsliced.rs`)\n   - Precomputed Boolean circuits for each constant\n   - 16× speedup on constant multiplication\n   - Cache-friendly (all data in 4 registers)\n\n3. **Folding Operator** (`iopp/folding.rs`)\n   - Combines interpolation + balancing functions\n   - Batch-optimized for 64 points at once\n   - Minimal allocations via arena allocator\n\n## Testing\n\n```bash\n# Run all tests\ncargo test\n\n# Run with detailed output\ncargo test -- --nocapture\n\n# Test specific module\ncargo test field::\n\n# Property-based testing\ncargo test --features proptest\n```\n\n## Contributing\n\nWe welcome contributions! Please see [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.\n\nAreas of interest:\n- AVX-512 backend implementation\n- GPU acceleration (CUDA/OpenCL)\n- Alternative curve families (Hermitian tower, Suzuki curves)\n- Formal verification of critical components\n\n## License\n\nLicensed under either of:\n\n- Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE))\n- MIT License ([LICENSE-MIT](LICENSE-MIT))\n\nat your option.\n\n## Citation\n\nIf you use this code in your research, please cite:\n\n```bibtex\n@software{hermite_iopp,\n  title = {HermiteIOPP: Interactive Oracle Proofs for Hermitian Curves},\n  author = {Your Name},\n  year = {2025},\n  url = {https://github.com/yourusername/hermite_iopp}\n}\n```\n\n## References\n\n1. Bordage et al. \"Interactive Oracle Proofs of Proximity to Algebraic Geometry Codes\" (CCC 2022)\n2. van der Hoeven \u0026 Larrieu \"The Frobenius FFT\" (ISSAC 2017)\n3. Li et al. \"Frobenius Additive Fast Fourier Transform\" (ISSAC 2018)\n4. Gao \u0026 Mateer \"Additive Fast Fourier Transforms\" (IEEE Trans. IT 2010)\n\n## Acknowledgments\n\nThis implementation benefited from detailed peer review and optimization insights. Special thanks to contributors who identified critical corrections in the initial design.\n\n---\n\n**Status**: Alpha (v0.1.0) - API may change  \n**Maintained by**: [Your Name]  \n**Contact**: your.email@example.com\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmanuelpuebla%2Fhermite_iopp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmanuelpuebla%2Fhermite_iopp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmanuelpuebla%2Fhermite_iopp/lists"}