Re: Flipped bit in chacha encrypted file, avx vs sse

Jeffrey Walton <[email protected]> Fri, 17 Sep 2021 03:22:33 -0400
Newsgroups gmane.comp.encryption.cryptopp
Message-ID <CAH8yC8k5HNWTq7+Ox6d27gNh5YwKyi0kxxwDAvMf6QczPcsqhQ@mail.gmail.com>
On Thu, Sep 16, 2021 at 8:42 PM austin clifton <[email protected]> wrote:
>
> I have an issue which I believe may be a bug. I followed the instructions from the "Bug Report" page on the cryptopp wiki and all tests in cryptest.exe are passing, so figured I should post here first and make sure it isn't a build related issue.
>
> I built cryptopp 8.5.0 as a static library, x64 multi-threaded debug (\MTd) using Visual Studio 2019 v16.10.0, on Windows 10 Pro v10.0.19043, using the .sln file provided with the cryptopp source code.
>
> I used two different machines for this test. One is the machine I built the cryptopp library with. Both are running the same version of Windows 10. One machine has a Ryzen 3700X, the other has an i7-990X. The Ryzen supports AVX, the i7 does not.
>
> I am VERY rarely finding that files encrypted with the chacha cipher by these two machines have differing sha256 hashes. If I do a hex diff against the files, there is a single flipped bit at 0x1EBB4 (0xD8 vs 0xD9).
>
> I am able to reproduce this consistently with a specific key, nonce, and input file, after test encrypting ~50GB of 1MB garbage files on each machine.
>
> If I disable AVX when building cryptlib by defining CRYPTOPP_DISABLE_AVX and CRYPTOPP_DISABLE_AVX2, the machine with the Ryzen will encrypt the file the same as the i7.
>
> Source code for a minimal reproducible example is here:
> https://github.com/austin-clifton/cryptopp-chacha-asm-test/blob/main/src/main.cpp#L208
>
> That repository includes a ready-to-build test case with Visual Studio, minus a built cryptlib.lib which should be added to libs/debug/ before building.

Austin,

I fetched main.cpp and run_459_file_76.bin from your GitHub. I
compiled the library with:

 CXXFLAGS="-DNDEBUG -g2 -O3 -std=c++17" make

I compiled/linked main.cpp with:

g++ -DNDEBUG -g2 -O3 -fPIC -pthread -std=c++17 -I. main.cxx
./libcryptopp.a -o main.exe

Running the program on a AMD Ryzen 3 3200U and AMD A6-9220e, this is the result.

$ ./main.exe
sha256: 0FC0FADCDF82770086C9DA8513A16FC785620D7B1C187CDD828E433EB0979847
encsha: 6FBEE484EE64A2AB02235DDF29CA0B61EE3B811D227C2729836D3BD6161C9B18

Is this correct?

I have one Windows machine for testing. It is a Core i5. Sorry I don't
have a good test environment.

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/CAH8yC8k5HNWTq7%2BOx6d27gNh5YwKyi0kxxwDAvMf6QczPcsqhQ%40mail.gmail.com.