25int main(
int argc,
char** argv)
28 if (argc < 2 || argc > 3)
30 std::cout <<
"./digest filename [--crc|--md5|--sha1|--sha256|--keccak|--sha3]" << std::endl;
35 std::string filename = argv[1];
36 std::string algorithm = argc == 3 ? argv[2] :
"";
37 bool computeCrc32 = algorithm.empty() || algorithm ==
"--crc";
38 bool computeMd5 = algorithm.empty() || algorithm ==
"--md5";
39 bool computeSha1 = algorithm.empty() || algorithm ==
"--sha1";
40 bool computeSha2 = algorithm.empty() || algorithm ==
"--sha2" || algorithm ==
"--sha256";
41 bool computeKeccak = algorithm.empty() || algorithm ==
"--keccak";
42 bool computeSha3 = algorithm.empty() || algorithm ==
"--sha3";
48 Keccak digestKeccak(Keccak::Keccak256);
49 SHA3 digestSha3 (SHA3 ::Bits256);
52 const size_t BufferSize = 144*7*1024;
53 char* buffer =
new char[BufferSize];
57 std::istream* input = NULL;
66 file.open(filename.c_str(), std::ios::in | std::ios::binary);
69 std::cerr <<
"Can't open '" << filename <<
"'" << std::endl;
79 input->read(buffer, BufferSize);
80 std::size_t numBytesRead = size_t(input->gcount());
83 digestCrc32 .add(buffer, numBytesRead);
85 digestMd5 .add(buffer, numBytesRead);
87 digestSha1 .add(buffer, numBytesRead);
89 digestSha2 .add(buffer, numBytesRead);
91 digestKeccak.add(buffer, numBytesRead);
93 digestSha3 .add(buffer, numBytesRead);
102 std::cout <<
"CRC32: " << digestCrc32 .getHash() << std::endl;
104 std::cout <<
"MD5: " << digestMd5 .getHash() << std::endl;
106 std::cout <<
"SHA1: " << digestSha1 .getHash() << std::endl;
108 std::cout <<
"SHA2/256: " << digestSha2 .getHash() << std::endl;
110 std::cout <<
"Keccak/256: " << digestKeccak.getHash() << std::endl;
112 std::cout <<
"SHA3/256: " << digestSha3 .getHash() << std::endl;