Your algos push PractRand to its limits. That is probably important for scientific experiments - and I'd like to see a simple example where that matters.
My interest is slightly different. To encrypt a file,
- take a password and turn it into a 32-bit seed
- load the file into a buffer
- xor the buffer using a 32-bit PRNG
- save the buffer
To decrypt,
- use the known password to generate the seed
- load the file into a buffer
- xor the buffer using a 32-bit PRNG
- save the buffer
That is pretty straightforward, but a brute force attack would start from the assumption that the first 4 bytes of the encrypted file are (for example) Chr("PK", 3, 4) - all zip files start with this DWORD. Since a 32-bit PRNG will have a period close to 2^32, all you have to do is generate 4GB of 32-bit numbers until you find the one that matches. After about 9 seconds, your encrypted file is cracked...
Now, if you use the same PRNG for a second sequence, with a different seed, and you
xor everything twice, then it takes twice as long to encrypt the file but 2^32 times as long to decrypt because you must find two matching slots in two sequences. That makes it 1200 years instead of 9 seconds.
My question is if one would see exactly the same effect using one 64-bit PRNG instead of two 32-bit PRNGs.
The PRNG I use is home-brewn, simple and almost 4 times as fast as PCG32. It is very good according to the ENT suite but fails PractRand at 128 kBytes. For the time being, I will stick to this one, also because with Microsoft's built-in stuff
you can never be sure that there isn't a little backdoor...