aboutsummaryrefslogtreecommitdiffstats
path: root/src/block/lion
diff options
context:
space:
mode:
Diffstat (limited to 'src/block/lion')
-rw-r--r--src/block/lion/info.txt6
-rw-r--r--src/block/lion/lion.cpp128
-rw-r--r--src/block/lion/lion.h67
3 files changed, 0 insertions, 201 deletions
diff --git a/src/block/lion/info.txt b/src/block/lion/info.txt
deleted file mode 100644
index c775ff428..000000000
--- a/src/block/lion/info.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-define LION 20131128
-
-<requires>
-hash
-stream
-</requires>
diff --git a/src/block/lion/lion.cpp b/src/block/lion/lion.cpp
deleted file mode 100644
index bba48c89f..000000000
--- a/src/block/lion/lion.cpp
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
-* Lion
-* (C) 1999-2007 Jack Lloyd
-*
-* Distributed under the terms of the Botan license
-*/
-
-#include <botan/lion.h>
-#include <botan/internal/xor_buf.h>
-#include <botan/parsing.h>
-
-namespace Botan {
-
-/*
-* Lion Encryption
-*/
-void Lion::encrypt_n(const byte in[], byte out[], size_t blocks) const
- {
- secure_vector<byte> buffer_vec(LEFT_SIZE);
- byte* buffer = &buffer_vec[0];
-
- for(size_t i = 0; i != blocks; ++i)
- {
- xor_buf(buffer, in, &key1[0], LEFT_SIZE);
- cipher->set_key(buffer, LEFT_SIZE);
- cipher->cipher(in + LEFT_SIZE, out + LEFT_SIZE, RIGHT_SIZE);
-
- hash->update(out + LEFT_SIZE, RIGHT_SIZE);
- hash->final(buffer);
- xor_buf(out, in, buffer, LEFT_SIZE);
-
- xor_buf(buffer, out, &key2[0], LEFT_SIZE);
- cipher->set_key(buffer, LEFT_SIZE);
- cipher->cipher1(out + LEFT_SIZE, RIGHT_SIZE);
-
- in += BLOCK_SIZE;
- out += BLOCK_SIZE;
- }
- }
-
-/*
-* Lion Decryption
-*/
-void Lion::decrypt_n(const byte in[], byte out[], size_t blocks) const
- {
- secure_vector<byte> buffer_vec(LEFT_SIZE);
- byte* buffer = &buffer_vec[0];
-
- for(size_t i = 0; i != blocks; ++i)
- {
- xor_buf(buffer, in, &key2[0], LEFT_SIZE);
- cipher->set_key(buffer, LEFT_SIZE);
- cipher->cipher(in + LEFT_SIZE, out + LEFT_SIZE, RIGHT_SIZE);
-
- hash->update(out + LEFT_SIZE, RIGHT_SIZE);
- hash->final(buffer);
- xor_buf(out, in, buffer, LEFT_SIZE);
-
- xor_buf(buffer, out, &key1[0], LEFT_SIZE);
- cipher->set_key(buffer, LEFT_SIZE);
- cipher->cipher1(out + LEFT_SIZE, RIGHT_SIZE);
-
- in += BLOCK_SIZE;
- out += BLOCK_SIZE;
- }
- }
-
-/*
-* Lion Key Schedule
-*/
-void Lion::key_schedule(const byte key[], size_t length)
- {
- clear();
-
- key1.assign(key, key + (length / 2));
- key2.assign(key + (length / 2), key + length);
- }
-
-/*
-* Return the name of this type
-*/
-std::string Lion::name() const
- {
- return "Lion(" + hash->name() + "," +
- cipher->name() + "," +
- std::to_string(BLOCK_SIZE) + ")";
- }
-
-/*
-* Return a clone of this object
-*/
-BlockCipher* Lion::clone() const
- {
- return new Lion(hash->clone(), cipher->clone(), BLOCK_SIZE);
- }
-
-/*
-* Clear memory of sensitive data
-*/
-void Lion::clear()
- {
- zap(key1);
- zap(key2);
- hash->clear();
- cipher->clear();
- }
-
-/*
-* Lion Constructor
-*/
-Lion::Lion(HashFunction* hash_in, StreamCipher* sc_in, size_t block_len) :
- BLOCK_SIZE(std::max<size_t>(2*hash_in->output_length() + 1, block_len)),
- LEFT_SIZE(hash_in->output_length()),
- RIGHT_SIZE(BLOCK_SIZE - LEFT_SIZE),
- hash(hash_in),
- cipher(sc_in)
- {
- if(2*LEFT_SIZE + 1 > BLOCK_SIZE)
- throw Invalid_Argument(name() + ": Chosen block size is too small");
-
- if(!cipher->valid_keylength(LEFT_SIZE))
- throw Invalid_Argument(name() + ": This stream/hash combo is invalid");
-
- key1.resize(LEFT_SIZE);
- key2.resize(LEFT_SIZE);
- }
-
-}
diff --git a/src/block/lion/lion.h b/src/block/lion/lion.h
deleted file mode 100644
index 37aad19f2..000000000
--- a/src/block/lion/lion.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
-* Lion
-* (C) 1999-2007 Jack Lloyd
-*
-* Distributed under the terms of the Botan license
-*/
-
-#ifndef BOTAN_LION_H__
-#define BOTAN_LION_H__
-
-#include <botan/block_cipher.h>
-#include <botan/stream_cipher.h>
-#include <botan/hash.h>
-
-namespace Botan {
-
-/**
-* Lion is a block cipher construction designed by Ross Anderson and
-* Eli Biham, described in "Two Practical and Provably Secure Block
-* Ciphers: BEAR and LION". It has a variable block size and is
-* designed to encrypt very large blocks (up to a megabyte)
-
-* http://www.cl.cam.ac.uk/~rja14/Papers/bear-lion.pdf
-*/
-class BOTAN_DLL Lion : public BlockCipher
- {
- public:
- void encrypt_n(const byte in[], byte out[], size_t blocks) const;
- void decrypt_n(const byte in[], byte out[], size_t blocks) const;
-
- size_t block_size() const { return BLOCK_SIZE; }
-
- Key_Length_Specification key_spec() const
- {
- return Key_Length_Specification(2, 2*hash->output_length(), 2);
- }
-
- void clear();
- std::string name() const;
- BlockCipher* clone() const;
-
- /**
- * @param hash the hash to use internally
- * @param cipher the stream cipher to use internally
- * @param block_size the size of the block to use
- */
- Lion(HashFunction* hash,
- StreamCipher* cipher,
- size_t block_size);
-
- Lion(const Lion&) = delete;
- Lion& operator=(const Lion&) = delete;
-
- ~Lion() { delete hash; delete cipher; }
- private:
- void key_schedule(const byte[], size_t);
-
- const size_t BLOCK_SIZE, LEFT_SIZE, RIGHT_SIZE;
-
- HashFunction* hash;
- StreamCipher* cipher;
- secure_vector<byte> key1, key2;
- };
-
-}
-
-#endif