425fc24bc2
ChaCha20Core.chaCha20Xor: - Parse key/nonce once into initial state, reuse across blocks - XOR at word level (4 bytes at a time) instead of byte-by-byte - Reuse working IntArray across blocks instead of allocating per block XChaCha20Poly1305: - Add hChaCha20FromNonce24 to avoid nonce copyOfRange(0,16) allocation - Add chaCha20PolyKey to generate only 32 bytes instead of full 64-byte block - Use single result array instead of ciphertext + tag concatenation Benchmark (98-byte padded message, JVM): Before: encrypt 2286 ns/op, decrypt 2062 ns/op After: encrypt 1544 ns/op, decrypt 341 ns/op https://claude.ai/code/session_01YHBwqnb3Z7Q7PX31tJ2G3i