A family of fast, compact hash functions (Rainbow and Rainstorm) with C++ and Node.js/WASM implementations, passing all SMHasher3 tests.
Rain is a collection of high-performance hash functions, including the non-cryptographic Rainbow and the experimental cryptographic Rainstorm. It provides fast, compact implementations for generating 64-bit to 512-bit hashes, with both C++ and Node.js/WASM versions. The project solves the need for efficient, quality-tested hashing in general-purpose and security-sensitive applications.
Developers and researchers needing fast, reliable hash functions for data integrity checks, benchmarking, or experimental cryptographic hashing. It's suitable for those working in C++, Node.js, or browser environments.
Rain offers exceptional speed (up to 6 GiB/s), passes all SMHasher3 tests, and maintains a codebase under 140 lines for readability. Its dual-algorithm approach provides flexibility for both non-cryptographic and experimental cryptographic use cases.
The fastest 128-bit and 256-bit hash, passes all tests, and under 140 source lines of code. API library and CLI tool in C++ and NodeJS/Wasm
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Rainbow achieves 3–6 GiB/s, making it one of the fastest non-cryptographic hashes available, as benchmarked in the README.
Core implementations are under 140 source lines of code, emphasizing readability and ease of customization for developers.
All size variants pass the comprehensive SMHasher3 test suite, ensuring high hash quality and reliability for data integrity.
Offers both fast non-cryptographic (Rainbow) and experimental cryptographic (Rainstorm) hashes, providing flexibility for different use cases.
Rainstorm is explicitly experimental and lacks formal security analysis, making it unsuitable for any production cryptographic applications.
The Node.js/WASM version runs 3–25x slower than native C++, as shown in benchmarks, limiting its utility in performance-critical web environments.
The README states that hash definitions may change with version increments, posing a risk for projects requiring stable outputs.