aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorlloyd <[email protected]>2013-03-21 15:22:09 +0000
committerlloyd <[email protected]>2013-03-21 15:22:09 +0000
commitbdfe5f4efd91f2dabfcbf4fa7636c834b408c956 (patch)
treed15a2a24f4e2b8d77dca23dc4f45029c200bed73 /src
parentd1d27bda2173c78b9ddf573f83b1115d52af5530 (diff)
parent1d4b469ecd0499559a463f90bd8553ef075061d9 (diff)
merge of '767ce7b733ad25a056a4609645dbb0418fed5c91'
and '8795500927af6dc6c8a74d6868d002712f971a2f'
Diffstat (limited to 'src')
-rwxr-xr-xsrc/build-data/scripts/dist.py2
-rw-r--r--src/engine/core_engine/lookup_stream.cpp18
-rw-r--r--src/filters/aead/aead_filt.h (renamed from src/filters/aead/aead.h)2
-rw-r--r--src/filters/aead/eax/eax.cpp10
-rw-r--r--src/filters/aead/eax/eax.h6
-rw-r--r--src/filters/aead/gcm/gcm.cpp10
-rw-r--r--src/filters/aead/gcm/gcm.h6
-rw-r--r--src/filters/aead/ocb/ocb.cpp5
-rw-r--r--src/filters/aead/ocb/ocb.h6
-rw-r--r--src/filters/filters.h16
-rw-r--r--src/filters/key_filt.h10
-rw-r--r--src/filters/modes/cbc/cbc.h6
-rw-r--r--src/filters/modes/cfb/cfb.h6
-rw-r--r--src/filters/modes/cts/cts.h6
-rw-r--r--src/filters/modes/ecb/ecb.h6
-rw-r--r--src/filters/modes/xts/xts.cpp19
-rw-r--r--src/filters/modes/xts/xts.h6
-rw-r--r--src/libstate/lookup.cpp4
-rw-r--r--src/libstate/lookup.h4
-rw-r--r--src/selftest/selftest.cpp6
-rw-r--r--src/stream/turing/info.txt1
-rw-r--r--src/stream/turing/tur_tab.cpp81
-rw-r--r--src/stream/turing/turing.cpp333
-rw-r--r--src/stream/turing/turing.h53
-rw-r--r--src/stream/wid_wake/info.txt1
-rw-r--r--src/stream/wid_wake/wid_wake.cpp159
-rw-r--r--src/stream/wid_wake/wid_wake.h53
27 files changed, 58 insertions, 777 deletions
diff --git a/src/build-data/scripts/dist.py b/src/build-data/scripts/dist.py
index e0b890c83..316057d22 100755
--- a/src/build-data/scripts/dist.py
+++ b/src/build-data/scripts/dist.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
"""
Release script for botan (http://botan.randombit.net/)
diff --git a/src/engine/core_engine/lookup_stream.cpp b/src/engine/core_engine/lookup_stream.cpp
index 50e246756..683ee6b8c 100644
--- a/src/engine/core_engine/lookup_stream.cpp
+++ b/src/engine/core_engine/lookup_stream.cpp
@@ -16,14 +16,6 @@
#include <botan/salsa20.h>
#endif
-#if defined(BOTAN_HAS_TURING)
- #include <botan/turing.h>
-#endif
-
-#if defined(BOTAN_HAS_WID_WAKE)
- #include <botan/wid_wake.h>
-#endif
-
namespace Botan {
/*
@@ -45,16 +37,6 @@ Core_Engine::find_stream_cipher(const SCAN_Name& request,
return new Salsa20;
#endif
-#if defined(BOTAN_HAS_TURING)
- if(request.algo_name() == "Turing")
- return new Turing;
-#endif
-
-#if defined(BOTAN_HAS_WID_WAKE)
- if(request.algo_name() == "WiderWake4+1-BE")
- return new WiderWake_41_BE;
-#endif
-
return nullptr;
}
diff --git a/src/filters/aead/aead.h b/src/filters/aead/aead_filt.h
index 868008e5d..77818c17e 100644
--- a/src/filters/aead/aead.h
+++ b/src/filters/aead/aead_filt.h
@@ -12,7 +12,7 @@
namespace Botan {
-class AEAD_Mode : public Keyed_Filter
+class BOTAN_DLL AEAD_Filter : public Keyed_Filter
{
public:
/**
diff --git a/src/filters/aead/eax/eax.cpp b/src/filters/aead/eax/eax.cpp
index 57f62833b..d4a982aaf 100644
--- a/src/filters/aead/eax/eax.cpp
+++ b/src/filters/aead/eax/eax.cpp
@@ -58,16 +58,6 @@ EAX_Mode::EAX_Mode(BlockCipher* cipher, size_t tag_size, bool decrypting) :
}
/*
-* Check if a keylength is valid for EAX
-*/
-bool EAX_Mode::valid_keylength(size_t n) const
- {
- if(!ctr->valid_keylength(n))
- return false;
- return true;
- }
-
-/*
* Set the EAX key
*/
void EAX_Mode::set_key(const SymmetricKey& key)
diff --git a/src/filters/aead/eax/eax.h b/src/filters/aead/eax/eax.h
index e219487cb..cf99622a1 100644
--- a/src/filters/aead/eax/eax.h
+++ b/src/filters/aead/eax/eax.h
@@ -8,7 +8,7 @@
#ifndef BOTAN_EAX_H__
#define BOTAN_EAX_H__
-#include <botan/aead.h>
+#include <botan/aead_filt.h>
#include <botan/buf_filt.h>
#include <botan/block_cipher.h>
#include <botan/stream_cipher.h>
@@ -20,7 +20,7 @@ namespace Botan {
/**
* EAX Mode
*/
-class BOTAN_DLL EAX_Mode : public AEAD_Mode,
+class BOTAN_DLL EAX_Mode : public AEAD_Filter,
private Buffered_Filter
{
public:
@@ -32,7 +32,7 @@ class BOTAN_DLL EAX_Mode : public AEAD_Mode,
std::string name() const override;
- bool valid_keylength(size_t key_len) const override;
+ Key_Length_Specification key_spec() const override { return ctr->key_spec(); }
// EAX supports arbitrary IV lengths
bool valid_iv_length(size_t) const override { return true; }
diff --git a/src/filters/aead/gcm/gcm.cpp b/src/filters/aead/gcm/gcm.cpp
index 013757b59..32a763df7 100644
--- a/src/filters/aead/gcm/gcm.cpp
+++ b/src/filters/aead/gcm/gcm.cpp
@@ -107,16 +107,6 @@ GCM_Mode::GCM_Mode(BlockCipher* cipher, size_t tag_size, bool decrypting) :
throw Invalid_Argument(name() + ": Bad tag size " + std::to_string(m_tag_size));
}
-/*
-* Check if a keylength is valid for GCM
-*/
-bool GCM_Mode::valid_keylength(size_t n) const
- {
- if(!m_ctr->valid_keylength(n))
- return false;
- return true;
- }
-
void GCM_Mode::set_key(const SymmetricKey& key)
{
m_ctr->set_key(key);
diff --git a/src/filters/aead/gcm/gcm.h b/src/filters/aead/gcm/gcm.h
index fa13597ce..a04a6b8c0 100644
--- a/src/filters/aead/gcm/gcm.h
+++ b/src/filters/aead/gcm/gcm.h
@@ -8,7 +8,7 @@
#ifndef BOTAN_GCM_H__
#define BOTAN_GCM_H__
-#include <botan/aead.h>
+#include <botan/aead_filt.h>
#include <botan/buf_filt.h>
#include <botan/block_cipher.h>
#include <botan/stream_cipher.h>
@@ -19,7 +19,7 @@ namespace Botan {
/**
* GCM Mode
*/
-class BOTAN_DLL GCM_Mode : public AEAD_Mode,
+class BOTAN_DLL GCM_Mode : public AEAD_Filter,
private Buffered_Filter
{
public:
@@ -32,7 +32,7 @@ class BOTAN_DLL GCM_Mode : public AEAD_Mode,
*/
void set_associated_data(const byte ad[], size_t ad_len) override;
- bool valid_keylength(size_t key_len) const override;
+ Key_Length_Specification key_spec() const override { return m_ctr->key_spec(); }
// GCM supports arbitrary IV lengths
bool valid_iv_length(size_t) const override { return true; }
diff --git a/src/filters/aead/ocb/ocb.cpp b/src/filters/aead/ocb/ocb.cpp
index ebf440d32..eb10b6e9f 100644
--- a/src/filters/aead/ocb/ocb.cpp
+++ b/src/filters/aead/ocb/ocb.cpp
@@ -180,11 +180,6 @@ OCB_Mode::OCB_Mode(BlockCipher* cipher, size_t tag_size, bool decrypting) :
OCB_Mode::~OCB_Mode() { /* for unique_ptr destructor */ }
-bool OCB_Mode::valid_keylength(size_t n) const
- {
- return m_cipher->valid_keylength(n);
- }
-
std::string OCB_Mode::name() const
{
return m_cipher->name() + "/OCB"; // include tag size
diff --git a/src/filters/aead/ocb/ocb.h b/src/filters/aead/ocb/ocb.h
index 5e3c5cf0a..0a1cbcaff 100644
--- a/src/filters/aead/ocb/ocb.h
+++ b/src/filters/aead/ocb/ocb.h
@@ -8,7 +8,7 @@
#ifndef BOTAN_OCB_H__
#define BOTAN_OCB_H__
-#include <botan/aead.h>
+#include <botan/aead_filt.h>
#include <botan/block_cipher.h>
#include <botan/buf_filt.h>
#include <memory>
@@ -27,7 +27,7 @@ class Nonce_State;
* @see Free Licenses http://www.cs.ucdavis.edu/~rogaway/ocb/license.htm
* @see OCB home page http://www.cs.ucdavis.edu/~rogaway/ocb
*/
-class BOTAN_DLL OCB_Mode : public AEAD_Mode,
+class BOTAN_DLL OCB_Mode : public AEAD_Filter,
private Buffered_Filter
{
public:
@@ -37,7 +37,7 @@ class BOTAN_DLL OCB_Mode : public AEAD_Mode,
void set_associated_data(const byte ad[], size_t ad_len) override;
- bool valid_keylength(size_t n) const override;
+ Key_Length_Specification key_spec() const override { return m_cipher->key_spec(); }
std::string name() const override;
diff --git a/src/filters/filters.h b/src/filters/filters.h
index 08b505bc0..8fcc2d85d 100644
--- a/src/filters/filters.h
+++ b/src/filters/filters.h
@@ -58,13 +58,7 @@ class BOTAN_DLL StreamCipher_Filter : public Keyed_Filter
*/
void set_key(const SymmetricKey& key) { cipher->set_key(key); }
- /**
- * Check whether a key length is valid for this filter.
- * @param length the key length to be checked for validity
- * @return true if the key length is valid, false otherwise
- */
- bool valid_keylength(size_t length) const
- { return cipher->valid_keylength(length); }
+ Key_Length_Specification key_spec() const override { return cipher->key_spec(); }
/**
* Construct a stream cipher filter.
@@ -153,13 +147,7 @@ class BOTAN_DLL MAC_Filter : public Keyed_Filter
*/
void set_key(const SymmetricKey& key) { mac->set_key(key); }
- /**
- * Check whether a key length is valid for this filter.
- * @param length the key length to be checked for validity
- * @return true if the key length is valid, false otherwise
- */
- bool valid_keylength(size_t length) const
- { return mac->valid_keylength(length); }
+ Key_Length_Specification key_spec() const override { return mac->key_spec(); }
/**
* Construct a MAC filter. The MAC key will be left empty.
diff --git a/src/filters/key_filt.h b/src/filters/key_filt.h
index 3c79ebac9..6d69d6b83 100644
--- a/src/filters/key_filt.h
+++ b/src/filters/key_filt.h
@@ -38,7 +38,15 @@ class BOTAN_DLL Keyed_Filter : public Filter
* @param length the key length to be checked for validity
* @return true if the key length is valid, false otherwise
*/
- virtual bool valid_keylength(size_t length) const = 0;
+ bool valid_keylength(size_t length) const
+ {
+ return key_spec().valid_keylength(length);
+ }
+
+ /**
+ * @return object describing limits on key size
+ */
+ virtual Key_Length_Specification key_spec() const = 0;
/**
* Check whether an IV length is valid for this filter
diff --git a/src/filters/modes/cbc/cbc.h b/src/filters/modes/cbc/cbc.h
index 4fd0f7d66..51e217e70 100644
--- a/src/filters/modes/cbc/cbc.h
+++ b/src/filters/modes/cbc/cbc.h
@@ -28,8 +28,7 @@ class BOTAN_DLL CBC_Encryption : public Keyed_Filter,
void set_key(const SymmetricKey& key) { cipher->set_key(key); }
- bool valid_keylength(size_t key_len) const
- { return cipher->valid_keylength(key_len); }
+ Key_Length_Specification key_spec() const override { return cipher->key_spec(); }
bool valid_iv_length(size_t iv_len) const
{ return (iv_len == cipher->block_size()); }
@@ -68,8 +67,7 @@ class BOTAN_DLL CBC_Decryption : public Keyed_Filter,
void set_key(const SymmetricKey& key) { cipher->set_key(key); }
- bool valid_keylength(size_t key_len) const
- { return cipher->valid_keylength(key_len); }
+ Key_Length_Specification key_spec() const override { return cipher->key_spec(); }
bool valid_iv_length(size_t iv_len) const
{ return (iv_len == cipher->block_size()); }
diff --git a/src/filters/modes/cfb/cfb.h b/src/filters/modes/cfb/cfb.h
index 212ac76da..02154ebb9 100644
--- a/src/filters/modes/cfb/cfb.h
+++ b/src/filters/modes/cfb/cfb.h
@@ -25,8 +25,7 @@ class BOTAN_DLL CFB_Encryption : public Keyed_Filter
void set_key(const SymmetricKey& key) { cipher->set_key(key); }
- bool valid_keylength(size_t key_len) const
- { return cipher->valid_keylength(key_len); }
+ Key_Length_Specification key_spec() const override { return cipher->key_spec(); }
bool valid_iv_length(size_t iv_len) const
{ return (iv_len == cipher->block_size()); }
@@ -59,8 +58,7 @@ class BOTAN_DLL CFB_Decryption : public Keyed_Filter
void set_key(const SymmetricKey& key) { cipher->set_key(key); }
- bool valid_keylength(size_t key_len) const
- { return cipher->valid_keylength(key_len); }
+ Key_Length_Specification key_spec() const override { return cipher->key_spec(); }
bool valid_iv_length(size_t iv_len) const
{ return (iv_len == cipher->block_size()); }
diff --git a/src/filters/modes/cts/cts.h b/src/filters/modes/cts/cts.h
index ac296316f..b0efb6944 100644
--- a/src/filters/modes/cts/cts.h
+++ b/src/filters/modes/cts/cts.h
@@ -25,8 +25,7 @@ class BOTAN_DLL CTS_Encryption : public Keyed_Filter
void set_key(const SymmetricKey& key) { cipher->set_key(key); }
- bool valid_keylength(size_t key_len) const
- { return cipher->valid_keylength(key_len); }
+ Key_Length_Specification key_spec() const override { return cipher->key_spec(); }
bool valid_iv_length(size_t iv_len) const
{ return (iv_len == cipher->block_size()); }
@@ -60,8 +59,7 @@ class BOTAN_DLL CTS_Decryption : public Keyed_Filter
void set_key(const SymmetricKey& key) { cipher->set_key(key); }
- bool valid_keylength(size_t key_len) const
- { return cipher->valid_keylength(key_len); }
+ Key_Length_Specification key_spec() const override { return cipher->key_spec(); }
bool valid_iv_length(size_t iv_len) const
{ return (iv_len == cipher->block_size()); }
diff --git a/src/filters/modes/ecb/ecb.h b/src/filters/modes/ecb/ecb.h
index e6476ab5d..8f4e6f1b5 100644
--- a/src/filters/modes/ecb/ecb.h
+++ b/src/filters/modes/ecb/ecb.h
@@ -26,8 +26,7 @@ class BOTAN_DLL ECB_Encryption : public Keyed_Filter,
void set_key(const SymmetricKey& key) { cipher->set_key(key); }
- bool valid_keylength(size_t key_len) const
- { return cipher->valid_keylength(key_len); }
+ Key_Length_Specification key_spec() const override { return cipher->key_spec(); }
ECB_Encryption(BlockCipher* ciph,
BlockCipherModePaddingMethod* pad);
@@ -60,8 +59,7 @@ class BOTAN_DLL ECB_Decryption : public Keyed_Filter,
void set_key(const SymmetricKey& key) { cipher->set_key(key); }
- bool valid_keylength(size_t key_len) const
- { return cipher->valid_keylength(key_len); }
+ Key_Length_Specification key_spec() const override { return cipher->key_spec(); }
ECB_Decryption(BlockCipher* ciph,
BlockCipherModePaddingMethod* pad);
diff --git a/src/filters/modes/xts/xts.cpp b/src/filters/modes/xts/xts.cpp
index e29ef6b98..df38614bb 100644
--- a/src/filters/modes/xts/xts.cpp
+++ b/src/filters/modes/xts/xts.cpp
@@ -39,6 +39,15 @@ size_t xts_parallelism(BlockCipher* cipher)
2 * cipher->block_size());
}
+Key_Length_Specification xts_key_spec(const BlockCipher& cipher)
+ {
+ const Key_Length_Specification& spec = cipher.key_spec();
+
+ return Key_Length_Specification(2*spec.minimum_keylength(),
+ 2*spec.maximum_keylength(),
+ 2*spec.keylength_multiple());
+ }
+
}
/*
@@ -82,6 +91,11 @@ std::string XTS_Encryption::name() const
return (cipher->name() + "/XTS");
}
+Key_Length_Specification XTS_Encryption::key_spec() const
+ {
+ return xts_key_spec(*cipher);
+ }
+
/*
* Set new tweak
*/
@@ -256,6 +270,11 @@ std::string XTS_Decryption::name() const
return (cipher->name() + "/XTS");
}
+Key_Length_Specification XTS_Decryption::key_spec() const
+ {
+ return xts_key_spec(*cipher);
+ }
+
/*
* Set new tweak
*/
diff --git a/src/filters/modes/xts/xts.h b/src/filters/modes/xts/xts.h
index d4801cd37..05a779703 100644
--- a/src/filters/modes/xts/xts.h
+++ b/src/filters/modes/xts/xts.h
@@ -24,8 +24,7 @@ class BOTAN_DLL XTS_Encryption : public Keyed_Filter,
void set_key(const SymmetricKey& key);
void set_iv(const InitializationVector& iv);
- bool valid_keylength(size_t key_len) const
- { return cipher->valid_keylength(key_len); }
+ Key_Length_Specification key_spec() const override;
bool valid_iv_length(size_t iv_len) const
{ return (iv_len == cipher->block_size()); }
@@ -61,8 +60,7 @@ class BOTAN_DLL XTS_Decryption : public Keyed_Filter,
void set_key(const SymmetricKey& key);
void set_iv(const InitializationVector& iv);
- bool valid_keylength(size_t key_len) const
- { return cipher->valid_keylength(key_len); }
+ Key_Length_Specification key_spec() const override;
bool valid_iv_length(size_t iv_len) const
{ return (iv_len == cipher->block_size()); }
diff --git a/src/libstate/lookup.cpp b/src/libstate/lookup.cpp
index 1263c0897..5c5f038ee 100644
--- a/src/libstate/lookup.cpp
+++ b/src/libstate/lookup.cpp
@@ -108,12 +108,12 @@ Keyed_Filter* get_cipher(const std::string& algo_spec,
key, InitializationVector(), direction);
}
-AEAD_Mode* get_aead(const std::string& algo_spec,
+AEAD_Filter* get_aead(const std::string& algo_spec,
Cipher_Dir direction)
{
std::unique_ptr<Keyed_Filter> c(get_cipher(algo_spec, direction));
- if(AEAD_Mode* aead = dynamic_cast<AEAD_Mode*>(c.get()))
+ if(AEAD_Filter* aead = dynamic_cast<AEAD_Filter*>(c.get()))
{
c.release();
return aead;
diff --git a/src/libstate/lookup.h b/src/libstate/lookup.h
index 2a47c7f14..c9d1ee707 100644
--- a/src/libstate/lookup.h
+++ b/src/libstate/lookup.h
@@ -11,7 +11,7 @@
#include <botan/libstate.h>
#include <botan/engine.h>
#include <botan/filters.h>
-#include <botan/aead.h>
+#include <botan/aead_filt.h>
#include <botan/mode_pad.h>
#include <botan/kdf.h>
#include <botan/eme.h>
@@ -227,7 +227,7 @@ BOTAN_DLL Keyed_Filter* get_cipher(const std::string& algo_spec,
* decrypting filter
* @return pointer to the encryption or decryption filter
*/
-BOTAN_DLL AEAD_Mode* get_aead(const std::string& algo_spec,
+BOTAN_DLL AEAD_Filter* get_aead(const std::string& algo_spec,
Cipher_Dir direction);
/**
diff --git a/src/selftest/selftest.cpp b/src/selftest/selftest.cpp
index e291a8e9d..4be4f8751 100644
--- a/src/selftest/selftest.cpp
+++ b/src/selftest/selftest.cpp
@@ -7,7 +7,7 @@
#include <botan/selftest.h>
#include <botan/filters.h>
-#include <botan/aead.h>
+#include <botan/aead_filt.h>
#include <botan/hex.h>
#include <botan/internal/core_engine.h>
#include <botan/internal/stl_util.h>
@@ -128,13 +128,13 @@ algorithm_kat_detailed(const SCAN_Name& algo_name,
#if defined(BOTAN_HAS_AEAD)
- if(AEAD_Mode* enc_aead = dynamic_cast<AEAD_Mode*>(enc))
+ if(AEAD_Filter* enc_aead = dynamic_cast<AEAD_Filter*>(enc))
{
const std::vector<byte> ad = hex_decode(search_map(vars, std::string("ad")));
enc_aead->set_associated_data(&ad[0], ad.size());
- if(AEAD_Mode* dec_aead = dynamic_cast<AEAD_Mode*>(dec))
+ if(AEAD_Filter* dec_aead = dynamic_cast<AEAD_Filter*>(dec))
dec_aead->set_associated_data(&ad[0], ad.size());
}
#endif
diff --git a/src/stream/turing/info.txt b/src/stream/turing/info.txt
deleted file mode 100644
index feb00a92d..000000000
--- a/src/stream/turing/info.txt
+++ /dev/null
@@ -1 +0,0 @@
-define TURING
diff --git a/src/stream/turing/tur_tab.cpp b/src/stream/turing/tur_tab.cpp
deleted file mode 100644
index a2edd5a5e..000000000
--- a/src/stream/turing/tur_tab.cpp
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
-* Tables for Turing
-* (C) 1999-2007 Jack Lloyd
-*
-* Distributed under the terms of the Botan license
-*/
-
-#include <botan/turing.h>
-
-namespace Botan {
-
-const byte Turing::SBOX[256] = {
- 0x61, 0x51, 0xEB, 0x19, 0xB9, 0x5D, 0x60, 0x38, 0x7C, 0xB2, 0x06, 0x12,
- 0xC4, 0x5B, 0x16, 0x3B, 0x2B, 0x18, 0x83, 0xB0, 0x7F, 0x75, 0xFA, 0xA0,
- 0xE9, 0xDD, 0x6D, 0x7A, 0x6B, 0x68, 0x2D, 0x49, 0xB5, 0x1C, 0x90, 0xF7,
- 0xED, 0x9F, 0xE8, 0xCE, 0xAE, 0x77, 0xC2, 0x13, 0xFD, 0xCD, 0x3E, 0xCF,
- 0x37, 0x6A, 0xD4, 0xDB, 0x8E, 0x65, 0x1F, 0x1A, 0x87, 0xCB, 0x40, 0x15,
- 0x88, 0x0D, 0x35, 0xB3, 0x11, 0x0F, 0xD0, 0x30, 0x48, 0xF9, 0xA8, 0xAC,
- 0x85, 0x27, 0x0E, 0x8A, 0xE0, 0x50, 0x64, 0xA7, 0xCC, 0xE4, 0xF1, 0x98,
- 0xFF, 0xA1, 0x04, 0xDA, 0xD5, 0xBC, 0x1B, 0xBB, 0xD1, 0xFE, 0x31, 0xCA,
- 0xBA, 0xD9, 0x2E, 0xF3, 0x1D, 0x47, 0x4A, 0x3D, 0x71, 0x4C, 0xAB, 0x7D,
- 0x8D, 0xC7, 0x59, 0xB8, 0xC1, 0x96, 0x1E, 0xFC, 0x44, 0xC8, 0x7B, 0xDC,
- 0x5C, 0x78, 0x2A, 0x9D, 0xA5, 0xF0, 0x73, 0x22, 0x89, 0x05, 0xF4, 0x07,
- 0x21, 0x52, 0xA6, 0x28, 0x9A, 0x92, 0x69, 0x8F, 0xC5, 0xC3, 0xF5, 0xE1,
- 0xDE, 0xEC, 0x09, 0xF2, 0xD3, 0xAF, 0x34, 0x23, 0xAA, 0xDF, 0x7E, 0x82,
- 0x29, 0xC0, 0x24, 0x14, 0x03, 0x32, 0x4E, 0x39, 0x6F, 0xC6, 0xB1, 0x9B,
- 0xEA, 0x72, 0x79, 0x41, 0xD8, 0x26, 0x6C, 0x5E, 0x2C, 0xB4, 0xA2, 0x53,
- 0x57, 0xE2, 0x9C, 0x86, 0x54, 0x95, 0xB6, 0x80, 0x8C, 0x36, 0x67, 0xBD,
- 0x08, 0x93, 0x2F, 0x99, 0x5A, 0xF8, 0x3A, 0xD7, 0x56, 0x84, 0xD2, 0x01,
- 0xF6, 0x66, 0x4D, 0x55, 0x8B, 0x0C, 0x0B, 0x46, 0xB7, 0x3C, 0x45, 0x91,
- 0xA4, 0xE3, 0x70, 0xD6, 0xFB, 0xE6, 0x10, 0xA9, 0xC9, 0x00, 0x9E, 0xE7,
- 0x4F, 0x76, 0x25, 0x3F, 0x5F, 0xA3, 0x33, 0x20, 0x02, 0xEF, 0x62, 0x74,
- 0xEE, 0x17, 0x81, 0x42, 0x58, 0x0A, 0x4B, 0x63, 0xE5, 0xBE, 0x6E, 0xAD,
- 0xBF, 0x43, 0x94, 0x97 };
-
-const u32bit Turing::Q_BOX[256] = {
- 0x1FAA1887, 0x4E5E435C, 0x9165C042, 0x250E6EF4, 0x5957EE20, 0xD484FED3,
- 0xA666C502, 0x7E54E8AE, 0xD12EE9D9, 0xFC1F38D4, 0x49829B5D, 0x1B5CDF3C,
- 0x74864249, 0xDA2E3963, 0x28F4429F, 0xC8432C35, 0x4AF40325, 0x9FC0DD70,
- 0xD8973DED, 0x1A02DC5E, 0xCD175B42, 0xF10012BF, 0x6694D78C, 0xACAAB26B,
- 0x4EC11B9A, 0x3F168146, 0xC0EA8EC5, 0xB38AC28F, 0x1FED5C0F, 0xAAB4101C,
- 0xEA2DB082, 0x470929E1, 0xE71843DE, 0x508299FC, 0xE72FBC4B, 0x2E3915DD,
- 0x9FA803FA, 0x9546B2DE, 0x3C233342, 0x0FCEE7C3, 0x24D607EF, 0x8F97EBAB,
- 0xF37F859B, 0xCD1F2E2F, 0xC25B71DA, 0x75E2269A, 0x1E39C3D1, 0xEDA56B36,
- 0xF8C9DEF2, 0x46C9FC5F, 0x1827B3A3, 0x70A56DDF, 0x0D25B510, 0x000F85A7,
- 0xB2E82E71, 0x68CB8816, 0x8F951E2A, 0x72F5F6AF, 0xE4CBC2B3, 0xD34FF55D,
- 0x2E6B6214, 0x220B83E3, 0xD39EA6F5, 0x6FE041AF, 0x6B2F1F17, 0xAD3B99EE,
- 0x16A65EC0, 0x757016C6, 0xBA7709A4, 0xB0326E01, 0xF4B280D9, 0x4BFB1418,
- 0xD6AFF227, 0xFD548203, 0xF56B9D96, 0x6717A8C0, 0x00D5BF6E, 0x10EE7888,
- 0xEDFCFE64, 0x1BA193CD, 0x4B0D0184, 0x89AE4930, 0x1C014F36, 0x82A87088,
- 0x5EAD6C2A, 0xEF22C678, 0x31204DE7, 0xC9C2E759, 0xD200248E, 0x303B446B,
- 0xB00D9FC2, 0x9914A895, 0x906CC3A1, 0x54FEF170, 0x34C19155, 0xE27B8A66,
- 0x131B5E69, 0xC3A8623E, 0x27BDFA35, 0x97F068CC, 0xCA3A6ACD, 0x4B55E936,
- 0x86602DB9, 0x51DF13C1, 0x390BB16D, 0x5A80B83C, 0x22B23763, 0x39D8A911,
- 0x2CB6BC13, 0xBF5579D7, 0x6C5C2FA8, 0xA8F4196E, 0xBCDB5476, 0x6864A866,
- 0x416E16AD, 0x897FC515, 0x956FEB3C, 0xF6C8A306, 0x216799D9, 0x171A9133,
- 0x6C2466DD, 0x75EB5DCD, 0xDF118F50, 0xE4AFB226, 0x26B9CEF3, 0xADB36189,
- 0x8A7A19B1, 0xE2C73084, 0xF77DED5C, 0x8B8BC58F, 0x06DDE421, 0xB41E47FB,
- 0xB1CC715E, 0x68C0FF99, 0x5D122F0F, 0xA4D25184, 0x097A5E6C, 0x0CBF18BC,
- 0xC2D7C6E0, 0x8BB7E420, 0xA11F523F, 0x35D9B8A2, 0x03DA1A6B, 0x06888C02,
- 0x7DD1E354, 0x6BBA7D79, 0x32CC7753, 0xE52D9655, 0xA9829DA1, 0x301590A7,
- 0x9BC1C149, 0x13537F1C, 0xD3779B69, 0x2D71F2B7, 0x183C58FA, 0xACDC4418,
- 0x8D8C8C76, 0x2620D9F0, 0x71A80D4D, 0x7A74C473, 0x449410E9, 0xA20E4211,
- 0xF9C8082B, 0x0A6B334A, 0xB5F68ED2, 0x8243CC1B, 0x453C0FF3, 0x9BE564A0,
- 0x4FF55A4F, 0x8740F8E7, 0xCCA7F15F, 0xE300FE21, 0x786D37D6, 0xDFD506F1,
- 0x8EE00973, 0x17BBDE36, 0x7A670FA8, 0x5C31AB9E, 0xD4DAB618, 0xCC1F52F5,
- 0xE358EB4F, 0x19B9E343, 0x3A8D77DD, 0xCDB93DA6, 0x140FD52D, 0x395412F8,
- 0x2BA63360, 0x37E53AD0, 0x80700F1C, 0x7624ED0B, 0x703DC1EC, 0xB7366795,
- 0xD6549D15, 0x66CE46D7, 0xD17ABE76, 0xA448E0A0, 0x28F07C02, 0xC31249B7,
- 0x6E9ED6BA, 0xEAA47F78, 0xBBCFFFBD, 0xC507CA84, 0xE965F4DA, 0x8E9F35DA,
- 0x6AD2AA44, 0x577452AC, 0xB5D674A7, 0x5461A46A, 0x6763152A, 0x9C12B7AA,
- 0x12615927, 0x7B4FB118, 0xC351758D, 0x7E81687B, 0x5F52F0B3, 0x2D4254ED,
- 0xD4C77271, 0x0431ACAB, 0xBEF94AEC, 0xFEE994CD, 0x9C4D9E81, 0xED623730,
- 0xCF8A21E8, 0x51917F0B, 0xA7A9B5D6, 0xB297ADF8, 0xEED30431, 0x68CAC921,
- 0xF1B35D46, 0x7A430A36, 0x51194022, 0x9ABCA65E, 0x85EC70BA, 0x39AEA8CC,
- 0x737BAE8B, 0x582924D5, 0x03098A5A, 0x92396B81, 0x18DE2522, 0x745C1CB8,
- 0xA1B8FE1D, 0x5DB3C697, 0x29164F83, 0x97C16376, 0x8419224C, 0x21203B35,
- 0x833AC0FE, 0xD966A19A, 0xAAF0B24F, 0x40FDA998, 0xE7D52D71, 0x390896A8,
- 0xCEE6053F, 0xD0B0D300, 0xFF99CBCC, 0x065E3D40 };
-
-}
diff --git a/src/stream/turing/turing.cpp b/src/stream/turing/turing.cpp
deleted file mode 100644
index 8d9b6f090..000000000
--- a/src/stream/turing/turing.cpp
+++ /dev/null
@@ -1,333 +0,0 @@
-/*
-* Turing
-* (C) 1999-2008 Jack Lloyd
-*
-* Distributed under the terms of the Botan license
-*/
-
-#include <botan/turing.h>
-#include <botan/loadstor.h>
-#include <botan/rotate.h>
-#include <botan/internal/xor_buf.h>
-
-namespace Botan {
-
-namespace {
-
-/*
-* Perform an N-way PHT
-*/
-inline void PHT(secure_vector<u32bit>& B)
- {
- u32bit sum = 0;
- for(size_t i = 0; i < B.size() - 1; ++i)
- sum += B[i];
-
- B[B.size()-1] += sum;
-
- sum = B[B.size()-1];
- for(size_t i = 0; i < B.size() - 1; ++i)
- B[i] += sum;
- }
-
-}
-
-/*
-* Combine cipher stream with message
-*/
-void Turing::cipher(const byte in[], byte out[], size_t length)
- {
- while(length >= buffer.size() - position)
- {
- xor_buf(out, in, &buffer[position], buffer.size() - position);
- length -= (buffer.size() - position);
- in += (buffer.size() - position);
- out += (buffer.size() - position);
- generate();
- }
- xor_buf(out, in, &buffer[position], length);
- position += length;
- }
-
-/*
-* Generate cipher stream
-*/
-void Turing::generate()
- {
- // Table for Turing's polynomial multiplication
- static const u32bit MULT_TAB[256] = {
- 0x00000000, 0xD02B4367, 0xED5686CE, 0x3D7DC5A9, 0x97AC41D1, 0x478702B6,
- 0x7AFAC71F, 0xAAD18478, 0x631582EF, 0xB33EC188, 0x8E430421, 0x5E684746,
- 0xF4B9C33E, 0x24928059, 0x19EF45F0, 0xC9C40697, 0xC62A4993, 0x16010AF4,
- 0x2B7CCF5D, 0xFB578C3A, 0x51860842, 0x81AD4B25, 0xBCD08E8C, 0x6CFBCDEB,
- 0xA53FCB7C, 0x7514881B, 0x48694DB2, 0x98420ED5, 0x32938AAD, 0xE2B8C9CA,
- 0xDFC50C63, 0x0FEE4F04, 0xC154926B, 0x117FD10C, 0x2C0214A5, 0xFC2957C2,
- 0x56F8D3BA, 0x86D390DD, 0xBBAE5574, 0x6B851613, 0xA2411084, 0x726A53E3,
- 0x4F17964A, 0x9F3CD52D, 0x35ED5155, 0xE5C61232, 0xD8BBD79B, 0x089094FC,
- 0x077EDBF8, 0xD755989F, 0xEA285D36, 0x3A031E51, 0x90D29A29, 0x40F9D94E,
- 0x7D841CE7, 0xADAF5F80, 0x646B5917, 0xB4401A70, 0x893DDFD9, 0x59169CBE,
- 0xF3C718C6, 0x23EC5BA1, 0x1E919E08, 0xCEBADD6F, 0xCFA869D6, 0x1F832AB1,
- 0x22FEEF18, 0xF2D5AC7F, 0x58042807, 0x882F6B60, 0xB552AEC9, 0x6579EDAE,
- 0xACBDEB39, 0x7C96A85E, 0x41EB6DF7, 0x91C02E90, 0x3B11AAE8, 0xEB3AE98F,
- 0xD6472C26, 0x066C6F41, 0x09822045, 0xD9A96322, 0xE4D4A68B, 0x34FFE5EC,
- 0x9E2E6194, 0x4E0522F3, 0x7378E75A, 0xA353A43D, 0x6A97A2AA, 0xBABCE1CD,
- 0x87C12464, 0x57EA6703, 0xFD3BE37B, 0x2D10A01C, 0x106D65B5, 0xC04626D2,
- 0x0EFCFBBD, 0xDED7B8DA, 0xE3AA7D73, 0x33813E14, 0x9950BA6C, 0x497BF90B,
- 0x74063CA2, 0xA42D7FC5, 0x6DE97952, 0xBDC23A35, 0x80BFFF9C, 0x5094BCFB,
- 0xFA453883, 0x2A6E7BE4, 0x1713BE4D, 0xC738FD2A, 0xC8D6B22E, 0x18FDF149,
- 0x258034E0, 0xF5AB7787, 0x5F7AF3FF, 0x8F51B098, 0xB22C7531, 0x62073656,
- 0xABC330C1, 0x7BE873A6, 0x4695B60F, 0x96BEF568, 0x3C6F7110, 0xEC443277,
- 0xD139F7DE, 0x0112B4B9, 0xD31DD2E1, 0x03369186, 0x3E4B542F, 0xEE601748,
- 0x44B19330, 0x949AD057, 0xA9E715FE, 0x79CC5699, 0xB008500E, 0x60231369,
- 0x5D5ED6C0, 0x8D7595A7, 0x27A411DF, 0xF78F52B8, 0xCAF29711, 0x1AD9D476,
- 0x15379B72, 0xC51CD815, 0xF8611DBC, 0x284A5EDB, 0x829BDAA3, 0x52B099C4,
- 0x6FCD5C6D, 0xBFE61F0A, 0x7622199D, 0xA6095AFA, 0x9B749F53, 0x4B5FDC34,
- 0xE18E584C, 0x31A51B2B, 0x0CD8DE82, 0xDCF39DE5, 0x1249408A, 0xC26203ED,
- 0xFF1FC644, 0x2F348523, 0x85E5015B, 0x55CE423C, 0x68B38795, 0xB898C4F2,
- 0x715CC265, 0xA1778102, 0x9C0A44AB, 0x4C2107CC, 0xE6F083B4, 0x36DBC0D3,
- 0x0BA6057A, 0xDB8D461D, 0xD4630919, 0x04484A7E, 0x39358FD7, 0xE91ECCB0,
- 0x43CF48C8, 0x93E40BAF, 0xAE99CE06, 0x7EB28D61, 0xB7768BF6, 0x675DC891,
- 0x5A200D38, 0x8A0B4E5F, 0x20DACA27, 0xF0F18940, 0xCD8C4CE9, 0x1DA70F8E,
- 0x1CB5BB37, 0xCC9EF850, 0xF1E33DF9, 0x21C87E9E, 0x8B19FAE6, 0x5B32B981,
- 0x664F7C28, 0xB6643F4F, 0x7FA039D8, 0xAF8B7ABF, 0x92F6BF16, 0x42DDFC71,
- 0xE80C7809, 0x38273B6E, 0x055AFEC7, 0xD571BDA0, 0xDA9FF2A4, 0x0AB4B1C3,
- 0x37C9746A, 0xE7E2370D, 0x4D33B375, 0x9D18F012, 0xA06535BB, 0x704E76DC,
- 0xB98A704B, 0x69A1332C, 0x54DCF685, 0x84F7B5E2, 0x2E26319A, 0xFE0D72FD,
- 0xC370B754, 0x135BF433, 0xDDE1295C, 0x0DCA6A3B, 0x30B7AF92, 0xE09CECF5,
- 0x4A4D688D, 0x9A662BEA, 0xA71BEE43, 0x7730AD24, 0xBEF4ABB3, 0x6EDFE8D4,
- 0x53A22D7D, 0x83896E1A, 0x2958EA62, 0xF973A905, 0xC40E6CAC, 0x14252FCB,
- 0x1BCB60CF, 0xCBE023A8, 0xF69DE601, 0x26B6A566, 0x8C67211E, 0x5C4C6279,
- 0x6131A7D0, 0xB11AE4B7, 0x78DEE220, 0xA8F5A147, 0x958864EE, 0x45A32789,
- 0xEF72A3F1, 0x3F59E096, 0x0224253F, 0xD20F6658 };
-
- /*
- I tried an implementation without precomputed LFSR offsets, since
- I thought that might allow (especially on x86-64) the use of leal to
- compute all the offsets.. However on my Core2 with GCC 4.3 it
- turned out significantly slower (238 Mib/s, versus 300 Mib/s
- with precomputed offsets)
-
- I also tried using byte vs u32bit for the offset variable (since
- x86 memory addressing modes can be odd), but it made things even
- slower (186 Mib/s)
- */
- static const byte OFFSETS[221] = {
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 12, 14, 15, 16,
- 5, 6, 7, 8, 9, 10, 11, 12, 13, 0, 2, 3, 4,
- 10, 11, 12, 13, 14, 15, 16, 0, 1, 5, 7, 8, 9,
- 15, 16, 0, 1, 2, 3, 4, 5, 6, 10, 12, 13, 14,
- 3, 4, 5, 6, 7, 8, 9, 10, 11, 15, 0, 1, 2,
- 8, 9, 10, 11, 12, 13, 14, 15, 16, 3, 5, 6, 7,
- 13, 14, 15, 16, 0, 1, 2, 3, 4, 8, 10, 11, 12,
- 1, 2, 3, 4, 5, 6, 7, 8, 9, 13, 15, 16, 0,
- 6, 7, 8, 9, 10, 11, 12, 13, 14, 1, 3, 4, 5,
- 11, 12, 13, 14, 15, 16, 0, 1, 2, 6, 8, 9, 10,
- 16, 0, 1, 2, 3, 4, 5, 6, 7, 11, 13, 14, 15,
- 4, 5, 6, 7, 8, 9, 10, 11, 12, 16, 1, 2, 3,
- 9, 10, 11, 12, 13, 14, 15, 16, 0, 4, 6, 7, 8,
- 14, 15, 16, 0, 1, 2, 3, 4, 5, 9, 11, 12, 13,
- 2, 3, 4, 5, 6, 7, 8, 9, 10, 14, 16, 0, 1,
- 7, 8, 9, 10, 11, 12, 13, 14, 15, 2, 4, 5, 6,
- 12, 13, 14, 15, 16, 0, 1, 2, 3, 7, 9, 10, 11 };
-
- for(size_t i = 0; i != 17; ++i)
- {
- const byte* R_off = OFFSETS + 13*i;
-
- u32bit R0 = R[R_off[0]];
- u32bit R1 = R[R_off[1]];
- u32bit R2 = R[R_off[2]];
- u32bit R3 = R[R_off[3]];
- u32bit R4 = R[R_off[4]];
-
- const u32bit R5 = R[R_off[5]];
- const u32bit R6 = R[R_off[6]];
- const u32bit R7 = R[R_off[7]];
- const u32bit R8 = R[R_off[8]];
- const u32bit R9 = R[R_off[9]];
- const u32bit R10 = R[R_off[10]];
- const u32bit R11 = R[R_off[11]];
- const u32bit R12 = R[R_off[12]];
-
- R[R_off[0]] = R0 = ((R0 << 8) ^ MULT_TAB[(R0 >> 24) & 0xFF]) ^ R11 ^ R4;
-
- u32bit A = R0;
- u32bit B = R10;
- u32bit C = R7;
- u32bit D = R2;
- u32bit E = R1;
-
- E += A + B + C + D;
-
- A += E;
- B += E;
- C += E;
- D += E;
-
- A = S0[get_byte(0, A)] ^ S1[get_byte(1, A)] ^
- S2[get_byte(2, A)] ^ S3[get_byte(3, A)];
- B = S0[get_byte(1, B)] ^ S1[get_byte(2, B)] ^
- S2[get_byte(3, B)] ^ S3[get_byte(0, B)];
- C = S0[get_byte(2, C)] ^ S1[get_byte(3, C)] ^
- S2[get_byte(0, C)] ^ S3[get_byte(1, C)];
- D = S0[get_byte(3, D)] ^ S1[get_byte(0, D)] ^
- S2[get_byte(1, D)] ^ S3[get_byte(2, D)];
- E = S0[get_byte(0, E)] ^ S1[get_byte(1, E)] ^
- S2[get_byte(2, E)] ^ S3[get_byte(3, E)];
-
- E += A + B + C + D;
-
- A += E;
- B += E;
- C += E;
- D += E;
-
- R[R_off[1]] = R1 = ((R1 << 8) ^ MULT_TAB[(R1 >> 24) & 0xFF]) ^ R12 ^ R5;
- R[R_off[2]] = R2 = ((R2 << 8) ^ MULT_TAB[(R2 >> 24) & 0xFF]) ^ R0 ^ R6;
- R[R_off[3]] = ((R3 << 8) ^ MULT_TAB[(R3 >> 24) & 0xFF]) ^ R1 ^ R7;
-
- E += R4;
-
- R[R_off[4]] = ((R4 << 8) ^ MULT_TAB[(R4 >> 24) & 0xFF]) ^ R2 ^ R8;
-
- A += R1;
- B += R12;
- C += R9;
- D += R5;
-
- store_be(A, &buffer[20*i + 0]);
- store_be(B, &buffer[20*i + 4]);
- store_be(C, &buffer[20*i + 8]);
- store_be(D, &buffer[20*i + 12]);
- store_be(E, &buffer[20*i + 16]);
- }
-
- position = 0;
- }
-
-/*
-* Turing's byte mixing step
-*/
-u32bit Turing::fixedS(u32bit W)
- {
- byte B = SBOX[get_byte(0, W)];
- W ^= Q_BOX[B];
- W &= 0x00FFFFFF;
- W |= B << 24;
-
- B = SBOX[get_byte(1, W)];
- W ^= rotate_left(Q_BOX[B], 8);
- W &= 0xFF00FFFF;
- W |= B << 16;
-
- B = SBOX[get_byte(2, W)];
- W ^= rotate_left(Q_BOX[B], 16);
- W &= 0xFFFF00FF;
- W |= B << 8;
-
- B = SBOX[get_byte(3, W)];
- W ^= rotate_left(Q_BOX[B], 24);
- W &= 0xFFFFFF00;
- W |= B;
-
- return W;
- }
-
-/*
-* Turing Key Schedule
-*/
-void Turing::key_schedule(const byte key[], size_t length)
- {
- K.resize(length / 4);
- for(size_t i = 0; i != length; ++i)
- K[i/4] = (K[i/4] << 8) + key[i];
-
- for(size_t i = 0; i != K.size(); ++i)
- K[i] = fixedS(K[i]);
-
- PHT(K);
-
- R.resize(17);
- S0.resize(256);
- S1.resize(256);
- S2.resize(256);
- S3.resize(256);
- buffer.resize(17*20);
-
- for(u32bit i = 0; i != 256; ++i)
- {
- u32bit W0 = 0, C0 = i;
- u32bit W1 = 0, C1 = i;
- u32bit W2 = 0, C2 = i;
- u32bit W3 = 0, C3 = i;
-
- for(size_t j = 0; j < K.size(); ++j)
- {
- C0 = SBOX[get_byte(0, K[j]) ^ C0];
- C1 = SBOX[get_byte(1, K[j]) ^ C1];
- C2 = SBOX[get_byte(2, K[j]) ^ C2];
- C3 = SBOX[get_byte(3, K[j]) ^ C3];
-
- W0 ^= rotate_left(Q_BOX[C0], j);
- W1 ^= rotate_left(Q_BOX[C1], j + 8);
- W2 ^= rotate_left(Q_BOX[C2], j + 16);
- W3 ^= rotate_left(Q_BOX[C3], j + 24);
- }
-
- S0[i] = (W0 & 0x00FFFFFF) | (C0 << 24);
- S1[i] = (W1 & 0xFF00FFFF) | (C1 << 16);
- S2[i] = (W2 & 0xFFFF00FF) | (C2 << 8);
- S3[i] = (W3 & 0xFFFFFF00) | C3;
- }
-
- set_iv(nullptr, 0);
- }
-
-/*
-* Resynchronization
-*/
-void Turing::set_iv(const byte iv[], size_t length)
- {
- if(!valid_iv_length(length))
- throw Invalid_IV_Length(name(), length);
-
- secure_vector<u32bit> IV(length / 4);
- for(size_t i = 0; i != length; ++i)
- IV[i/4] = (IV[i/4] << 8) + iv[i];
-
- for(size_t i = 0; i != IV.size(); ++i)
- R[i] = IV[i] = fixedS(IV[i]);
-
- for(size_t i = 0; i != K.size(); ++i)
- R[i+IV.size()] = K[i];
-
- R[K.size() + IV.size()] = (0x010203 << 8) | (K.size() << 4) | IV.size();
-
- for(size_t i = K.size() + IV.size() + 1; i != 17; ++i)
- {
- const u32bit W = R[i-K.size()-IV.size()-1] + R[i-1];
- R[i] = S0[get_byte(0, W)] ^ S1[get_byte(1, W)] ^
- S2[get_byte(2, W)] ^ S3[get_byte(3, W)];
- }
-
- PHT(R);
-
- generate();
- }
-
-/*
-* Clear memory of sensitive data
-*/
-void Turing::clear()
- {
- zap(S0);
- zap(S1);
- zap(S2);
- zap(S3);
- zap(R);
- zap(K);
- buffer.clear();
- position = 0;
- }
-
-}
diff --git a/src/stream/turing/turing.h b/src/stream/turing/turing.h
deleted file mode 100644
index f2453127a..000000000
--- a/src/stream/turing/turing.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
-* Turing
-* (C) 1999-2007 Jack Lloyd
-*
-* Distributed under the terms of the Botan license
-*/
-
-#ifndef BOTAN_TURING_H__
-#define BOTAN_TURING_H__
-
-#include <botan/stream_cipher.h>
-
-namespace Botan {
-
-/**
-* Turing
-*/
-class BOTAN_DLL Turing : public StreamCipher
- {
- public:
- void cipher(const byte in[], byte out[], size_t length);
- void set_iv(const byte iv[], size_t iv_length);
-
- bool valid_iv_length(size_t iv_len) const
- { return (iv_len % 4 == 0 && iv_len <= 16); }
-
- Key_Length_Specification key_spec() const
- {
- return Key_Length_Specification(4, 32, 4);
- }
-
- void clear();
- std::string name() const { return "Turing"; }
- StreamCipher* clone() const { return new Turing; }
-
- private:
- void key_schedule(const byte[], size_t);
- void generate();
-
- static u32bit fixedS(u32bit);
-
- static const u32bit Q_BOX[256];
- static const byte SBOX[256];
-
- secure_vector<u32bit> S0, S1, S2, S3;
- secure_vector<u32bit> R, K;
- secure_vector<byte> buffer;
- size_t position;
- };
-
-}
-
-#endif
diff --git a/src/stream/wid_wake/info.txt b/src/stream/wid_wake/info.txt
deleted file mode 100644
index f7333dede..000000000
--- a/src/stream/wid_wake/info.txt
+++ /dev/null
@@ -1 +0,0 @@
-define WID_WAKE
diff --git a/src/stream/wid_wake/wid_wake.cpp b/src/stream/wid_wake/wid_wake.cpp
deleted file mode 100644
index 317613404..000000000
--- a/src/stream/wid_wake/wid_wake.cpp
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
-* WiderWake
-* (C) 1999-2007 Jack Lloyd
-*
-* Distributed under the terms of the Botan license
-*/
-
-#include <botan/wid_wake.h>
-#include <botan/loadstor.h>
-#include <botan/internal/xor_buf.h>
-#include <botan/internal/rounding.h>
-
-namespace Botan {
-
-/*
-* Combine cipher stream with message
-*/
-void WiderWake_41_BE::cipher(const byte in[], byte out[], size_t length)
- {
- while(length >= buffer.size() - position)
- {
- xor_buf(out, in, &buffer[position], buffer.size() - position);
- length -= (buffer.size() - position);
- in += (buffer.size() - position);
- out += (buffer.size() - position);
- generate(buffer.size());
- }
- xor_buf(out, in, &buffer[position], length);
- position += length;
- }
-
-/*
-* Generate cipher stream
-*/
-void WiderWake_41_BE::generate(size_t length)
- {
- u32bit R0 = state[0], R1 = state[1],
- R2 = state[2], R3 = state[3],
- R4 = state[4];
-
- for(size_t i = 0; i != length; i += 8)
- {
- u32bit R0a;
-
- store_be(R3, &buffer[i]);
-
- R0a = R4 + R3; R3 += R2; R2 += R1; R1 += R0;
- R0a = (R0a >> 8) ^ T[(R0a & 0xFF)];
- R1 = (R1 >> 8) ^ T[(R1 & 0xFF)];
- R2 = (R2 >> 8) ^ T[(R2 & 0xFF)];
- R3 = (R3 >> 8) ^ T[(R3 & 0xFF)];
- R4 = R0; R0 = R0a;
-
- store_be(R3, &buffer[i + 4]);
-
- R0a = R4 + R3; R3 += R2; R2 += R1; R1 += R0;
- R0a = (R0a >> 8) ^ T[(R0a & 0xFF)];
- R1 = (R1 >> 8) ^ T[(R1 & 0xFF)];
- R2 = (R2 >> 8) ^ T[(R2 & 0xFF)];
- R3 = (R3 >> 8) ^ T[(R3 & 0xFF)];
- R4 = R0; R0 = R0a;
- }
-
- state[0] = R0;
- state[1] = R1;
- state[2] = R2;
- state[3] = R3;
- state[4] = R4;
-
- position = 0;
- }
-
-/*
-* WiderWake Key Schedule
-*/
-void WiderWake_41_BE::key_schedule(const byte key[], size_t)
- {
- t_key.resize(4);
- state.resize(5);
- buffer.resize(
- round_up<size_t>(std::max<size_t>(8*4, DEFAULT_BUFFERSIZE), 8));
-
- for(size_t i = 0; i != 4; ++i)
- t_key[i] = load_be<u32bit>(key, i);
-
- static const u32bit MAGIC[8] = {
- 0x726A8F3B, 0xE69A3B5C, 0xD3C71FE5, 0xAB3C73D2,
- 0x4D3A8EB3, 0x0396D6E8, 0x3D4C2F7A, 0x9EE27CF3 };
-
- T.resize(256);
- for(size_t i = 0; i != 4; ++i)
- T[i] = t_key[i];
-
- for(size_t i = 4; i != 256; ++i)
- {
- u32bit X = T[i-1] + T[i-4];
- T[i] = (X >> 3) ^ MAGIC[X % 8];
- }
-
- for(size_t i = 0; i != 23; ++i)
- T[i] += T[i+89];
-
- u32bit X = T[33];
- u32bit Z = (T[59] | 0x01000001) & 0xFF7FFFFF;
- for(size_t i = 0; i != 256; ++i)
- {
- X = (X & 0xFF7FFFFF) + Z;
- T[i] = (T[i] & 0x00FFFFFF) ^ X;
- }
-
- X = (T[X & 0xFF] ^ X) & 0xFF;
- Z = T[0];
- T[0] = T[X];
- for(size_t i = 1; i != 256; ++i)
- {
- T[X] = T[i];
- X = (T[i ^ X] ^ X) & 0xFF;
- T[i] = T[X];
- }
- T[X] = Z;
-
- position = 0;
-
- const byte ZEROS[8] = { 0 };
- set_iv(ZEROS, sizeof(ZEROS));
- }
-
-/*
-* Resynchronization
-*/
-void WiderWake_41_BE::set_iv(const byte iv[], size_t length)
- {
- if(!valid_iv_length(length))
- throw Invalid_IV_Length(name(), length);
-
- for(size_t i = 0; i != 4; ++i)
- state[i] = t_key[i];
-
- state[4] = load_be<u32bit>(iv, 0);
- state[0] ^= state[4];
- state[2] ^= load_be<u32bit>(iv, 1);
-
- generate(8*4);
- generate(buffer.size());
- }
-
-/*
-* Clear memory of sensitive data
-*/
-void WiderWake_41_BE::clear()
- {
- zap(t_key);
- zap(state);
- zap(T);
- zap(buffer);
- position = 0;
- }
-
-}
diff --git a/src/stream/wid_wake/wid_wake.h b/src/stream/wid_wake/wid_wake.h
deleted file mode 100644
index 501345011..000000000
--- a/src/stream/wid_wake/wid_wake.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
-* WiderWake
-* (C) 1999-2008 Jack Lloyd
-*
-* Distributed under the terms of the Botan license
-*/
-
-#ifndef BOTAN_WIDER_WAKE_H__
-#define BOTAN_WIDER_WAKE_H__
-
-#include <botan/stream_cipher.h>
-
-namespace Botan {
-
-/**
-* WiderWake4+1-BE
-*
-* Note: quite old and possibly not safe; use XSalsa20 or a block
-* cipher in counter mode.
-*/
-class BOTAN_DLL WiderWake_41_BE : public StreamCipher
- {
- public:
- void cipher(const byte[], byte[], size_t);
- void set_iv(const byte[], size_t);
-
- bool valid_iv_length(size_t iv_len) const
- { return (iv_len == 8); }
-
- Key_Length_Specification key_spec() const
- {
- return Key_Length_Specification(16);
- }
-
- void clear();
- std::string name() const { return "WiderWake4+1-BE"; }
- StreamCipher* clone() const { return new WiderWake_41_BE; }
-
- private:
- void key_schedule(const byte[], size_t);
-
- void generate(size_t);
-
- secure_vector<u32bit> T;
- secure_vector<u32bit> state;
- secure_vector<u32bit> t_key;
- secure_vector<byte> buffer;
- size_t position;
- };
-
-}
-
-#endif