3 #include <msp/core/application.h>
4 #include <msp/core/getopt.h>
5 #include <msp/crypto/md5.h>
6 #include <msp/crypto/sha2.h>
7 #include <msp/io/file.h>
8 #include <msp/io/print.h>
13 class Checksum: public Msp::RegisteredApplication<Checksum>
22 Checksum(int, char **);
27 void process_file(const std::string &);
30 Checksum::Checksum(int argc, char **argv):
37 getopt.add_option("md5", do_md5, GetOpt::NO_ARG);
38 getopt.add_option("sha256", do_sha256, GetOpt::NO_ARG);
39 getopt.add_option("sha512", do_sha512, GetOpt::NO_ARG);
40 getopt.add_argument("file", files, GetOpt::REQUIRED_ARG);
43 if(!do_md5 && !do_sha256 && !do_sha512)
49 for(list<string>::const_iterator i=files.begin(); i!=files.end(); ++i)
52 process_file<Crypto::MD5>(*i);
54 process_file<Crypto::SHA256>(*i);
56 process_file<Crypto::SHA512>(*i);
62 void Checksum::process_file(const string &fn)
64 IO::BufferedFile infile(fn);
69 unsigned len = infile.read(buffer, sizeof(buffer));
72 hash.update(buffer, len);
74 IO::print("%s %s\n", hash.get_hexdigest(), fn);