aboutsummaryrefslogtreecommitdiffstats
path: root/src/cli/base64.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/cli/base64.cpp')
-rw-r--r--src/cli/base64.cpp97
1 files changed, 97 insertions, 0 deletions
diff --git a/src/cli/base64.cpp b/src/cli/base64.cpp
new file mode 100644
index 000000000..d2a9a1853
--- /dev/null
+++ b/src/cli/base64.cpp
@@ -0,0 +1,97 @@
+/*
+* Encode/decode base64 strings
+* (C) 2009 Jack Lloyd
+*
+* Botan is released under the Simplified BSD License (see license.txt)
+*/
+
+#include "apps.h"
+
+#if defined(BOTAN_HAS_CODEC_FILTERS)
+
+#include <fstream>
+#include <iostream>
+#include <string>
+#include <vector>
+#include <cstdlib>
+#include <botan/b64_filt.h>
+#include <botan/pipe.h>
+
+namespace {
+
+int base64(const std::vector<std::string> &args)
+ {
+ if(args.size() < 2)
+ {
+ std::cout << "Usage: " << args[0] << " [-w] [-c n] [-e|-d] files...\n"
+ " -e : Encode input to base64 strings (default)\n"
+ " -d : Decode base64 input\n"
+ " -w : Wrap lines\n"
+ " -c n: Wrap lines at column n, default 78" << std::endl;
+ return 1;
+ }
+
+ u32bit column = 78;
+ bool wrap = false;
+ bool encoding = true;
+ std::vector<std::string> files;
+
+ for(int j = 1; j < args.size(); j++)
+ {
+ const std::string this_arg = args[j];
+
+ if(this_arg == "-w")
+ wrap = true;
+ else if(this_arg == "-e");
+ else if(this_arg == "-d")
+ encoding = false;
+ else if(this_arg == "-c")
+ {
+ if(j+1 < args.size())
+ {
+ column = to_u32bit(args[j+1]);
+ j++;
+ }
+ else
+ {
+ std::cout << "No argument for -c option" << std::endl;
+ return 1;
+ }
+ }
+ else files.push_back(args[j]);
+ }
+
+ for(unsigned int j = 0; j != files.size(); j++)
+ {
+ std::istream* stream;
+ if(files[j] == "-") stream = &std::cin;
+ else stream = new std::ifstream(files[j]);
+
+ if(!*stream)
+ {
+ std::cout << "ERROR, couldn't open " << files[j] << std::endl;
+ continue;
+ }
+
+ Botan::Filter* f = nullptr;
+
+ if(encoding)
+ f = new Botan::Base64_Encoder(wrap, column);
+ else
+ f = new Botan::Base64_Decoder;
+
+ Botan::Pipe pipe(f);
+ pipe.start_msg();
+ *stream >> pipe;
+ pipe.end_msg();
+ pipe.set_default_msg(j);
+ std::cout << pipe;
+ if(files[j] != "-") delete stream;
+ }
+ return 0;
+ }
+
+REGISTER_APP(base64);
+
+}
+#endif // BOTAN_HAS_CODEC_FILTERS