Hello,
I am sorry to report that cryptest.exe v still core dumps on solaris 11 when using the sun 12.4 compiler. The command I used to build cryptopp was: CXX=/opt/solarisstudio12.4/bin/CC make -j20
The error is:
Testing MessageDigest algorithm SHA-384.
..signal BUS (invalid address alignment) in CryptoPP::SHA512::Transform at line 34 in file "sha.cpp"
34 #define blk0(i) (W[i] = data[i])
the stack trace is:
(dbx) where
=>[1] CryptoPP::SHA512::Transform(state = <value unavailable>, data = <value unavailable>) (optimized), at 0x1006255a0 (line ~34) in "sha.cpp"
[2] CryptoPP::IteratedHashWithStaticTransform<unsigned long,CryptoPP::EnumToType<CryptoPP::ByteOrder,1>,128U,64U,CryptoPP::SHA384,48U,false>::HashEndianCorrectedBlock(this = 0x1010c18d0, data = 0xffffffff7fffc1b4) (optimized), at 0x1004c8120 (line ~170) in "iterhash.h"
[3] CryptoPP::IteratedHashBase<unsigned long,CryptoPP::HashTransformation>::HashMultipleBlocks(this = 0x1010c18d0, input = 0xffffffff7fffc1b4, length = <value unavailable>) (optimized), at 0x1005d834c (line ~91) in "iterhash.cpp"
[4] CryptoPP::IteratedHashBase<unsigned long,CryptoPP::HashTransformation>::Update(this = 0x1010c18d0, input = 0xffffffff7fffc1b4 "aaaaaaaaaaaaaaa [snip]
[5] CryptoPP::HashVerificationFilter::NextPutMultiple(this = 0xffffffff7fffd550, inString = 0xffffffff7fffc15d "aaaaaaaaaaa [snip]
[6] CryptoPP::FilterWithBufferedInput::PutMaybeModifiable(this = 0xffffffff7fffd550, inString = 0xffffffff7fffc15d "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa [snip]
[7] CryptoPP::FilterWithBufferedInput::Put2(this = 0xffffffff7fffd550, inString = 0xffffffff7fffc15d "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
[8] CryptoPP::BufferedTransformation::ChannelPut2(this = 0xffffffff7fffd550, channel = CLASS, begin = 0xffffffff7fffc15d "aaaaaaaaaaaaaaaaaaaaaaaaaaa
[9] RandomizedTransfer(source = CLASS, target = CLASS, finish = <value unavailable>, channel = CLASS) (optimized), at 0x1004e9e94 (line ~92) in "datatest.cpp"
[10] PutDecodedDatumInto(data = CLASS, name = <value unavailable>, target = CLASS) (optimized), at 0x1004ea41c (line ~138) in "datatest.cpp"
[11] TestDigestOrMAC(v = CLASS, testDigest = <value unavailable>) (optimized), at 0x1004ef674 (line ~603) in "datatest.cpp"
[12] TestDataFile(filename = CLASS, overrideParameters = CLASS, totalTests = 11U, failedTests = 0) (optimized), at 0x1004f0c44 (line ~802) in "datatest.cpp"
[13] RunTestDataFile(filename = 0x100afec60 "TestVectors/sha.txt", overrideParameters = CLASS, thorough = true) (optimized), at 0x1004f1168 (line ~243) in "string"
[14] ValidateSHA() (optimized), at 0x1004c9228 (line ~212) in "validat3.cpp"
[15] ValidateAll(thorough = false) (optimized), at 0x1004339e8 (line ~95) in "validat1.cpp"
[16] Validate(alg = <value unavailable>, thorough = false, seedInput = <value unavailable>) (optimized), at 0x100380cdc (line ~899) in "test.cpp"
[17] main(argc = <value unavailable>, argv = 0xffffffff7ffff7d6) (optimized), at 0x10037b690 (line ~364) in "test.cpp"
The test program also crashes when the b (benchmark) option is used. Interestingly, the crash is in the same place as my own test program crashes, in CryptoPP::CountWords, due to a null pointer. Here is the dbx output:
<TBODY style="background: yellow">signal SEGV (no mapping at the fault address) in CryptoPP::CountWords at line 9 in file "words.h"
9 inline size_t CountWords(const word *X, size_t N)
(dbx) print X
X = (nil)
=>[1] CryptoPP::CountWords(X = (nil), N = 144U) (optimized), at 0x1005a4238 (line ~9) in "words.h"
[2] CryptoPP::Integer::WordCount(this = 0x1010bfa98) (optimized), at 0x100596cd8 (line ~3298) in "integer.cpp"
[3] CryptoPP::Integer::Integer(this = 0xffffffff7fffb090, t = CLASS) (optimized), at 0x10059573c (line ~2903) in "integer.cpp"
[4] CryptoPP::RSAFunction::PreimageBound(this = 0x1010bfa80) (optimized), at 0x1006c3148 (line ~46) in "rsa.h"
[5] CryptoPP::AssignFromHelper<CryptoPP::RSAFunction>(pObject = 0xffffffff7fffb000, source = CLASS) (optimized), at 0x1006c35f0 (line ~320) in "cryptlib.h"
[6] CryptoPP::RSAFunction::AssignFrom(this = 0xffffffff7fffb000, source = CLASS) (optimized), at 0x1006b6854 (line ~93) in "rsa.cpp"
[7] CryptoPP::PK_FinalTemplate<CryptoPP::TF_EncryptorImpl<CryptoPP::TF_CryptoSchemeOptions<CryptoPP::TF_ES<CryptoPP::OAEP<CryptoPP::SHA1,CryptoPP::P1363_MGF1>,CryptoPP::RSA,int>,CryptoPP::RSA,CryptoPP::OAEP<CryptoPP::SHA1,CryptoPP::P1363_MGF1> > > >::PK_FinalTemplate(this = 0xffffffff7fffafe8, algorithm = CLASS) (optimized), at 0x1003a41c8 (line ~2049) in "string"
[8] BenchMarkCrypto<CryptoPP::RSAES<CryptoPP::OAEP<CryptoPP::SHA1,CryptoPP::P1363_MGF1> > >(filename = <value unavailable>, name = 0x1009b27e8 "RSA 1024", timeTotal = 1.0, x = <value unavailable>) (optimized), at 0x10041b550 (line ~248) in "bench2.cpp"
[9] BenchmarkAll2(t = 1.0, hertz = <value unavailable>) (optimized), at 0x1003ea460 (line ~288) in "bench2.cpp"
[10] BenchmarkAll(t = <value unavailable>, hertz = <value unavailable>) (optimized), at 0x1003e0250 (line ~381) in "bench1.cpp"
[11] main(argc = <value unavailable>, argv = 0xffffffff7ffff558) (optimized), at 0x10037ade4 (line ~366) in "test.cpp"
Regards,
Andrew Marlow