Skip to content

Conversation

@Coralesoft
Copy link

@Coralesoft Coralesoft commented Oct 25, 2025

I've implemented Argon2 password hashing for Cryptopp.
( I was using the cryptopp library for a project and also needed Argon2)
This adds support for all three variants from RFC 9106: Argon2d, Argon2i, and Argon2id.

What's included:

  • Full implementation of Argon2 (version 0x13)
  • All three variants working and tested
  • OpenMP parallelization support
  • RFC 9106 test vectors included
  • Integration with the existing test suite

Testing:
I've verified all three variants against the RFC 9106 Known Answer Tests and they all pass.
The implementation follows the same patterns as Scrypt and other KDFs in the library.

Implementation notes:

  • Based on the reference implementation at https://github.com/P-H-C/phc-winner-argon2
  • Uses default parameters of t=3, m=64 MiB, p=4 (RFC 9106's second recommendation for memory-constrained environments)
  • Follows existing Crypto++ code style and conventions

Let me know if you'd like me to make any changes or if you have questions

Thanks
Colin

Resolves #399

  - Implement Argon2d, Argon2i, and Argon2id variants
  - Add RFC 9106 test vectors
  - Integrate with existing test suite
  - Support OpenMP parallelization
  - All variants verified against RFC 9106 Known Answer Tests
- Implement BLAKE3 hash with 32-byte default output
- Support keyed hashing (MAC mode) and key derivation (KDF mode)
- Add variable-length output (XOF) support
- Implement tree hashing with Merkle structure for parallelization
- Add official test vectors from BLAKE3 team reference implementation
- Integrate with existing test suite (test.cpp case 88)
- All test vectors verified against official BLAKE3 specification
Replaces variable-time separator search with constant-time implementation to mitigate Marvin Attack (CVE-2022-4304). Uses bitwise operations to avoid data-dependent timing leaks.

Fixes three timing vulnerabilities:
  - Variable-time while loop
  - Early return on invalid padding
  - Variable-length memcpy operation

Fixes weidai11#1247
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Argon2 support

1 participant