summaryrefslogtreecommitdiffstats
path: root/botan/doc/examples/xor_ciph.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'botan/doc/examples/xor_ciph.cpp')
-rw-r--r--botan/doc/examples/xor_ciph.cpp96
1 files changed, 0 insertions, 96 deletions
diff --git a/botan/doc/examples/xor_ciph.cpp b/botan/doc/examples/xor_ciph.cpp
deleted file mode 100644
index 6a914b1..0000000
--- a/botan/doc/examples/xor_ciph.cpp
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- An implementation of the highly secure (not) XOR cipher. AKA, how to write
- and use your own cipher object. DO NOT make up your own ciphers. Please.
-
- Written by Jack Lloyd (lloyd@randombit.net) on Feb 17, 2004
- Update November 21 2008 for new algorithm factory in 1.8
-
- This file is in the public domain
-*/
-
-#include <botan/stream_cipher.h>
-#include <botan/init.h>
-using namespace Botan;
-
-class XOR_Cipher : public StreamCipher
- {
- public:
- void clear() throw() { mask.destroy(); mask_pos = 0; }
-
- // what we want to call this cipher
- std::string name() const { return "XOR"; }
-
- // return a new object of this type
- StreamCipher* clone() const { return new XOR_Cipher; }
-
- XOR_Cipher() : StreamCipher(1, 32) { mask_pos = 0; }
- private:
- void cipher(const byte[], byte[], u32bit);
- void key_schedule(const byte[], u32bit);
-
- SecureVector<byte> mask;
- u32bit mask_pos;
- };
-
-void XOR_Cipher::cipher(const byte in[], byte out[], u32bit length)
- {
- for(u32bit j = 0; j != length; j++)
- {
- out[j] = in[j] ^ mask[mask_pos];
- mask_pos = (mask_pos + 1) % mask.size();
- }
- }
-
-void XOR_Cipher::key_schedule(const byte key[], u32bit length)
- {
- mask.set(key, length);
- }
-
-#include <fstream>
-#include <iostream>
-#include <string>
-#include <vector>
-#include <cstring>
-
-#include <botan/lookup.h>
-#include <botan/filters.h>
-#include <botan/libstate.h>
-
-int main()
- {
-
- Botan::LibraryInitializer init;
-
- global_state().algorithm_factory().add_stream_cipher(new XOR_Cipher, "app");
-
- // a hex key value
- SymmetricKey key("010203040506070809101112AAFF");
-
- /*
- Since stream ciphers are typically additive, the encryption and
- decryption ops are the same, so this isn't terribly interesting.
-
- If this where a block cipher you would have to add a cipher mode and
- padding method, such as "/CBC/PKCS7".
- */
- Pipe enc(get_cipher("XOR", key, ENCRYPTION), new Hex_Encoder);
- Pipe dec(new Hex_Decoder, get_cipher("XOR", key, DECRYPTION));
-
- // I think the pigeons are actually asleep at midnight...
- std::string secret = "The pigeon flys at midnight.";
-
- std::cout << "The secret message is '" << secret << "'" << std::endl;
-
- enc.process_msg(secret);
- std::string cipher = enc.read_all_as_string();
-
- std::cout << "The encrypted secret message is " << cipher << std::endl;
-
- dec.process_msg(cipher);
- secret = dec.read_all_as_string();
-
- std::cout << "The decrypted secret message is '"
- << secret << "'" << std::endl;
-
- return 0;
- }