/* A Botan example application which emulates a poorly written version of "gpg --print-md" Written by Jack Lloyd (lloyd@randombit.net), quite a while ago (as of June 2001) This file is in the public domain */ #include #include #include #include int main(int argc, char* argv[]) { if(argc < 2) { std::cout << "Usage: " << argv[0] << " " << std::endl; return 1; } Botan::LibraryInitializer init; const int COUNT = 3; std::string name[COUNT] = { "MD5", "SHA-1", "RIPEMD-160" }; for(int j = 1; argv[j] != 0; j++) { Botan::Filter* hash[COUNT] = { new Botan::Chain(new Botan::Hash_Filter(name[0]), new Botan::Hex_Encoder), new Botan::Chain(new Botan::Hash_Filter(name[1]), new Botan::Hex_Encoder), new Botan::Chain(new Botan::Hash_Filter(name[2]), new Botan::Hex_Encoder) }; Botan::Pipe pipe(new Botan::Fork(hash, COUNT)); std::ifstream file(argv[j]); if(!file) { std::cout << "ERROR: could not open " << argv[j] << std::endl; continue; } pipe.start_msg(); file >> pipe; pipe.end_msg(); file.close(); for(int k = 0; k != COUNT; k++) { pipe.set_default_msg(k); std::cout << name[k] << "(" << argv[j] << ") = " << pipe << std::endl; } } return 0; }