Re: Difference in behavior of Crypto850 build on Windows and non-Windows

Jeffrey Walton <[email protected]>
Newsgroups gmane.comp.encryption.cryptopp
Message-ID <CAH8yC8m5Of65ZW9AeVcxQ2qEKoOzXPp9sTydFhjnaDLKhuoGQw@mail.gmail.com>
On Wed, Jun 16, 2021 at 6:38 AM Vinay Kumar <[email protected]> wrote:
>
> Thanq.
>
> Here is the code snippet(tested with sample application):
>
> unsigned char temprpl[4] = { '\0' };
> unsigned __int32 Value = 3957804565;
> CryptoPP::RandomPool vRandPool;
>
>         memset((CryptoPP::byte *)&temprpl, 0, 4);
> memcpy((CryptoPP::byte *)&temprpl, (CryptoPP::byte *)&Value, 4);
>
> cout << "VALUE=" << Value << endl;
>
> vRandPool.Put( reinterpret_cast<unsigned char*>(&temprpl), sizeof(Value) ); /* For Crypto++ 5.4 */
> // vRandPool.IncorporateEntropy( (const CryptoPP::byte *)&temprpl, 4 ); /* For Cryptopp850 */
>
> CryptoPP::word32 t1 = vRandPool.GenerateWord32();
>
> cout << "FIRST RAND=" << t1 << endl;
>
> CryptoPP::word32 t2 = vRandPool.GenerateWord32();
>
> cout << "SECOND RAND=" << t2 << endl;
>
> CryptoPP::word32 t3 = vRandPool.GenerateWord32();
>
> cout << "THIRD RAND=" << t3 << endl;
>
> With Crypto++ 5.4 it always returns 'fixed RAND' values for specific 'Value' as follows:
>
> VALUE=3957804565
> FIRST RAND=123224688
> SECOND RAND=3565820466
> THIRD RAND=2141184933
>
>
> VALUE=15201583
> FIRST RAND=2446881748
> SECOND RAND=653021931
> THIRD RAND=31285341
>
> VALUE=1947237586
> FIRST RAND=4090363092
> SECOND RAND=1687243401
> THIRD RAND=1878929729
>
> But, with Cryptopp850, it returns 'different RAND' values(and it is different for every run). This is causing issues after upgrading to Cryptopp850.
> This change in behavior is observed only on Windows platform and it works perfectly fine on Linux.
>
> Do you think it is a bug? Any workaround or other solution available to resolve this problem.

For Crypto++ 8.5 (or anything greater than Crypto++ 5.5), you should
use OldRandPool instead of RandPool if you want the old behavior.
Actually OldRandPool was added at Crypto++ 6.0, so it is available for
Crypto++ 6.0 and above.

OldRandPool should work for you out of the box. We have a test for it
using data generated by Crypto++ 5.4. Also see
https://github.com/weidai11/cryptopp/blob/master/validat3.cpp#L633 .

If the OldRandPool is not returning correct results for you, then
copy/paste Crypto++ 5.4 RandPool into Crypto++ 8.5. Rename the class
to something like LegacyRandPool or FixedOldRandPool, and then use it
instead.

Also see the head notes at
https://www.cryptopp.com/docs/ref/randpool_8h.html, and the docs at
https://www.cryptopp.com/wiki/OldRandomPool.

Jeff

-- 
You received this message because you are subscribed to the Google Groups "Crypto++ Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to [email protected].
To view this discussion on the web visit https://groups.google.com/d/msgid/cryptopp-users/CAH8yC8m5Of65ZW9AeVcxQ2qEKoOzXPp9sTydFhjnaDLKhuoGQw%40mail.gmail.com.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.