void go() override { const std::string comp_type = get_arg("type"); std::unique_ptr<Botan::Transform> compress; #if defined(BOTAN_HAS_COMPRESSION) compress.reset(Botan::make_compressor(comp_type, get_arg_sz("level"))); #endif if(!compress) { throw CLI_Error_Unsupported("Compression", comp_type); } const std::string in_file = get_arg("file"); std::ifstream in(in_file); if(!in.good()) { throw CLI_IO_Error("reading", in_file); } const std::string out_file = output_filename(in_file, comp_type); std::ofstream out(out_file); if(!in.good()) { throw CLI_IO_Error("writing", out_file); } do_compress(*compress, in, out, get_arg_sz("buf-size")); }
void go() override { const std::string in_file = get_arg("file"); std::string out_file, suffix; parse_extension(in_file, out_file, suffix); std::ifstream in(in_file); if(!in.good()) throw CLI_IO_Error("reading", in_file); std::unique_ptr<Botan::Transform> decompress; #if defined(BOTAN_HAS_COMPRESSION) decompress.reset(Botan::make_decompressor(suffix)); #endif if(!decompress) throw CLI_Error_Unsupported("Decompression", suffix); std::ofstream out(out_file); if(!out.good()) throw CLI_IO_Error("writing", out_file); do_compress(*decompress, in, out, get_arg_sz("buf-size")); }
void go() override { const std::string comp_type = get_arg("type"); const size_t buf_size = get_arg_sz("buf-size"); const size_t comp_level = get_arg_sz("level"); std::unique_ptr<Botan::Compression_Algorithm> compress; compress.reset(Botan::make_compressor(comp_type)); if(!compress) { throw CLI_Error_Unsupported("Compression", comp_type); } const std::string in_file = get_arg("file"); std::ifstream in(in_file, std::ios::binary); if(!in.good()) { throw CLI_IO_Error("reading", in_file); } const std::string out_file = output_filename(in_file, comp_type); std::ofstream out(out_file, std::ios::binary); if(!in.good()) { throw CLI_IO_Error("writing", out_file); } Botan::secure_vector<uint8_t> buf; compress->start(comp_level); while(in.good()) { buf.resize(buf_size); in.read(reinterpret_cast<char*>(&buf[0]), buf.size()); buf.resize(in.gcount()); compress->update(buf); out.write(reinterpret_cast<const char*>(&buf[0]), buf.size()); } buf.clear(); compress->finish(buf); out.write(reinterpret_cast<const char*>(&buf[0]), buf.size()); out.close(); }
void go() override { const size_t buf_size = get_arg_sz("buf-size"); const std::string in_file = get_arg("file"); std::string out_file, suffix; parse_extension(in_file, out_file, suffix); std::ifstream in(in_file, std::ios::binary); if(!in.good()) { throw CLI_IO_Error("reading", in_file); } std::unique_ptr<Botan::Decompression_Algorithm> decompress; decompress.reset(Botan::make_decompressor(suffix)); if(!decompress) { throw CLI_Error_Unsupported("Decompression", suffix); } std::ofstream out(out_file, std::ios::binary); if(!out.good()) { throw CLI_IO_Error("writing", out_file); } Botan::secure_vector<uint8_t> buf; decompress->start(); while(in.good()) { buf.resize(buf_size); in.read(reinterpret_cast<char*>(&buf[0]), buf.size()); buf.resize(in.gcount()); decompress->update(buf); out.write(reinterpret_cast<const char*>(&buf[0]), buf.size()); } buf.clear(); decompress->finish(buf); out.write(reinterpret_cast<const char*>(&buf[0]), buf.size()); out.close(); }
void go() override { const uint64_t cc_number = std::stoull(get_arg("CC")); const std::vector<uint8_t> tweak = Botan::hex_decode(get_arg("tweak")); const std::string pass = get_arg("passphrase"); std::unique_ptr<Botan::PBKDF> pbkdf(Botan::PBKDF::create("PBKDF2(SHA-256)")); if(!pbkdf) throw CLI_Error_Unsupported("PBKDF", "PBKDF2(SHA-256)"); Botan::secure_vector<uint8_t> key = pbkdf->pbkdf_iterations(32, pass, tweak.data(), tweak.size(), 100000); output() << decrypt_cc_number(cc_number, key, tweak) << "\n"; }
std::string output_filename(const std::string& input_fsname, const std::string& comp_type) { const std::map<std::string, std::string> suffixes = { { "zlib", "zlib" }, { "gzip", "gz" }, { "bzip2", "bz2" }, { "lzma", "xz" }, }; auto suffix_info = suffixes.find(comp_type); if(suffixes.count(comp_type) == 0) { throw CLI_Error_Unsupported("Compressing", comp_type); } return input_fsname + "." + suffix_info->second; }
void go() override { const std::string algo = get_arg("algo"); const std::string params = get_arg("params"); std::unique_ptr<Botan::Private_Key> key(Botan::create_private_key(algo, rng(), params)); if(!key) { throw CLI_Error_Unsupported("keygen", algo); } const std::string pass = get_arg("passphrase"); const bool der_out = flag_set("der-out"); const std::chrono::milliseconds pbe_millis(get_arg_sz("pbe-millis")); const std::string pbe = get_arg("pbe"); if(der_out) { if(pass.empty()) { write_output(Botan::PKCS8::BER_encode(*key)); } else { write_output(Botan::PKCS8::BER_encode(*key, rng(), pass, pbe_millis, pbe)); } } else { if(pass.empty()) { output() << Botan::PKCS8::PEM_encode(*key); } else { output() << Botan::PKCS8::PEM_encode(*key, rng(), pass, pbe_millis, pbe); } } }