Skip to content

Commit f04b05b

Browse files
committed
version 5
1 parent 4f9dcb1 commit f04b05b

File tree

5 files changed

+47
-30
lines changed

5 files changed

+47
-30
lines changed

digest.cpp

Lines changed: 29 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -33,29 +33,43 @@ int main(int argc, char** argv)
3333
bool computeKeccak = algorithm.empty() || algorithm == "--keccak";
3434
bool computeSha3 = algorithm.empty() || algorithm == "--sha3";
3535

36-
// each cycle processes about 1 MByte (divisible by 144 => improves Keccak performance)
37-
const size_t BufferSize = 144*7*1024;
38-
char* buffer = new char[BufferSize];
39-
4036
CRC32 digestCrc32;
4137
MD5 digestMd5;
4238
SHA1 digestSha1;
4339
SHA256 digestSha2;
4440
Keccak digestKeccak(Keccak::Keccak256);
4541
SHA3 digestSha3 (SHA3 ::Bits256);
4642

47-
// open file
48-
std::ifstream file(filename.c_str(), std::ios::in | std::ios::binary);
49-
if (!file)
43+
// each cycle processes about 1 MByte (divisible by 144 => improves Keccak/SHA3 performance)
44+
const size_t BufferSize = 144*7*1024;
45+
char* buffer = new char[BufferSize];
46+
47+
// select input source: either file or standard-in
48+
std::ifstream file;
49+
std::istream* input = NULL;
50+
// accept std::cin, syntax will be: "./digest - --sha3 < data"
51+
if (filename == "-")
5052
{
51-
std::cerr << "Can't open '" << filename << "'" << std::endl;
52-
return 2;
53+
input = &std::cin;
5354
}
55+
else
56+
{
57+
// open file
58+
file.open(filename.c_str(), std::ios::in | std::ios::binary);
59+
if (!file)
60+
{
61+
std::cerr << "Can't open '" << filename << "'" << std::endl;
62+
return 2;
63+
}
5464

55-
while (!file.eof())
65+
input = &file;
66+
}
67+
68+
// process file
69+
while (*input)
5670
{
57-
file.read(buffer, BufferSize);
58-
std::size_t numBytesRead = size_t(file.gcount());
71+
input->read(buffer, BufferSize);
72+
std::size_t numBytesRead = size_t(input->gcount());
5973

6074
if (computeCrc32)
6175
digestCrc32 .add(buffer, numBytesRead);
@@ -70,9 +84,12 @@ int main(int argc, char** argv)
7084
if (computeSha3)
7185
digestSha3 .add(buffer, numBytesRead);
7286
}
87+
88+
// clean up
7389
file.close();
7490
delete[] buffer;
7591

92+
// show results
7693
if (computeCrc32)
7794
std::cout << "CRC32: " << digestCrc32 .getHash() << std::endl;
7895
if (computeMd5)

keccak.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ namespace
6060
#if defined(__GNUC__) || defined(__clang__)
6161
return __builtin_bswap64(x);
6262
#endif
63-
#ifdef MSC_VER
63+
#ifdef _MSC_VER
6464
return _byteswap_uint64(x);
6565
#endif
6666

sha1.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -245,14 +245,14 @@ void SHA1::processBuffer()
245245
addLength = extra + paddedLength - BlockSize;
246246

247247
// must be big endian
248-
*addLength++ = (msgBits >> 56) & 0xFF;
249-
*addLength++ = (msgBits >> 48) & 0xFF;
250-
*addLength++ = (msgBits >> 40) & 0xFF;
251-
*addLength++ = (msgBits >> 32) & 0xFF;
252-
*addLength++ = (msgBits >> 24) & 0xFF;
253-
*addLength++ = (msgBits >> 16) & 0xFF;
254-
*addLength++ = (msgBits >> 8) & 0xFF;
255-
*addLength = msgBits & 0xFF;
248+
*addLength++ = (unsigned char)((msgBits >> 56) & 0xFF);
249+
*addLength++ = (unsigned char)((msgBits >> 48) & 0xFF);
250+
*addLength++ = (unsigned char)((msgBits >> 40) & 0xFF);
251+
*addLength++ = (unsigned char)((msgBits >> 32) & 0xFF);
252+
*addLength++ = (unsigned char)((msgBits >> 24) & 0xFF);
253+
*addLength++ = (unsigned char)((msgBits >> 16) & 0xFF);
254+
*addLength++ = (unsigned char)((msgBits >> 8) & 0xFF);
255+
*addLength = (unsigned char)( msgBits & 0xFF);
256256

257257
// process blocks
258258
processBlock(m_buffer);

sha256.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -330,14 +330,14 @@ void SHA256::processBuffer()
330330
addLength = extra + paddedLength - BlockSize;
331331

332332
// must be big endian
333-
*addLength++ = (msgBits >> 56) & 0xFF;
334-
*addLength++ = (msgBits >> 48) & 0xFF;
335-
*addLength++ = (msgBits >> 40) & 0xFF;
336-
*addLength++ = (msgBits >> 32) & 0xFF;
337-
*addLength++ = (msgBits >> 24) & 0xFF;
338-
*addLength++ = (msgBits >> 16) & 0xFF;
339-
*addLength++ = (msgBits >> 8) & 0xFF;
340-
*addLength = msgBits & 0xFF;
333+
*addLength++ = (unsigned char)((msgBits >> 56) & 0xFF);
334+
*addLength++ = (unsigned char)((msgBits >> 48) & 0xFF);
335+
*addLength++ = (unsigned char)((msgBits >> 40) & 0xFF);
336+
*addLength++ = (unsigned char)((msgBits >> 32) & 0xFF);
337+
*addLength++ = (unsigned char)((msgBits >> 24) & 0xFF);
338+
*addLength++ = (unsigned char)((msgBits >> 16) & 0xFF);
339+
*addLength++ = (unsigned char)((msgBits >> 8) & 0xFF);
340+
*addLength = (unsigned char)( msgBits & 0xFF);
341341

342342
// process blocks
343343
processBlock(m_buffer);

sha3.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ namespace
6060
#if defined(__GNUC__) || defined(__clang__)
6161
return __builtin_bswap64(x);
6262
#endif
63-
#ifdef MSC_VER
63+
#ifdef _MSC_VER
6464
return _byteswap_uint64(x);
6565
#endif
6666

0 commit comments

Comments
 (0)