summaryrefslogtreecommitdiff
path: root/dev-vcs/monotone/files/monotone-1.0-botan-1.10-v2.patch
diff options
context:
space:
mode:
Diffstat (limited to 'dev-vcs/monotone/files/monotone-1.0-botan-1.10-v2.patch')
-rw-r--r--dev-vcs/monotone/files/monotone-1.0-botan-1.10-v2.patch644
1 files changed, 0 insertions, 644 deletions
diff --git a/dev-vcs/monotone/files/monotone-1.0-botan-1.10-v2.patch b/dev-vcs/monotone/files/monotone-1.0-botan-1.10-v2.patch
deleted file mode 100644
index a86bac555b18..000000000000
--- a/dev-vcs/monotone/files/monotone-1.0-botan-1.10-v2.patch
+++ /dev/null
@@ -1,644 +0,0 @@
-Make monotone work with botan 1.10.
-
-Patch generated using the following command:
-mtn diff -r 972ee5c3eab3fb5ba0b80684193293d18438a9d0 \
- -r f4feb3fdc68e4f955909450b2dcb3ff9312dbc9e
-
-Authors: Martin von Gagern, Markus Wanner
-
-References:
-https://bugs.gentoo.org/380257
-https://code.monotone.ca/p/monotone/issues/182/
-https://code.monotone.ca/p/monotone/source/commit/f4feb3fd
-
-============================================================
---- src/database.cc 4c259f963c440fc95564dfec99b2f832f0bad643
-+++ src/database.cc 87efeeff2d3263ba98af684a4022f1897434ed2d
-@@ -3425,9 +3425,8 @@ database::encrypt_rsa(key_id const & pub
- rsa_pub_key pub;
- get_key(pub_id, pub);
-
-- SecureVector<Botan::byte> pub_block;
-- pub_block.set(reinterpret_cast<Botan::byte const *>(pub().data()),
-- pub().size());
-+ SecureVector<Botan::byte> pub_block
-+ (reinterpret_cast<Botan::byte const *>(pub().data()), pub().size());
-
- shared_ptr<X509_PublicKey> x509_key(Botan::X509::load_key(pub_block));
- shared_ptr<RSA_PublicKey> pub_key
-@@ -3471,14 +3470,13 @@ database::check_signature(key_id const &
- else
- {
- rsa_pub_key pub;
-- SecureVector<Botan::byte> pub_block;
-
- if (!public_key_exists(id))
- return cert_unknown;
-
- get_key(id, pub);
-- pub_block.set(reinterpret_cast<Botan::byte const *>(pub().data()),
-- pub().size());
-+ SecureVector<Botan::byte> pub_block
-+ (reinterpret_cast<Botan::byte const *>(pub().data()), pub().size());
-
- L(FL("building verifier for %d-byte pub key") % pub_block.size());
- shared_ptr<X509_PublicKey> x509_key(Botan::X509::load_key(pub_block));
-============================================================
---- src/gzip.cc e7c19bee910e3d421fd073933810ec52092b1d9b
-+++ src/gzip.cc 9da41f6820cdf39707b22c716e3682e0fa0fd745
-@@ -110,7 +110,7 @@ Gzip_Compression::Gzip_Compression(u32bi
- if(deflateInit2(&(zlib->stream), level, Z_DEFLATED, -15, 8, Z_DEFAULT_STRATEGY) != Z_OK)
- {
- delete zlib; zlib = 0;
-- throw Exception("Gzip_Compression: Memory allocation error");
-+ throw Memory_Exhaustion();
- }
- }
-
-@@ -137,7 +137,7 @@ void Gzip_Compression::start_msg()
- /*************************************************
- * Compress Input with Gzip *
- *************************************************/
--void Gzip_Compression::write(const byte input[], u32bit length)
-+void Gzip_Compression::write(const byte input[], filter_length_t length)
- {
-
- count += length;
-@@ -152,7 +152,7 @@ void Gzip_Compression::write(const byte
- zlib->stream.avail_out = buffer.size();
- int rc = deflate(&(zlib->stream), Z_NO_FLUSH);
- if (rc != Z_OK && rc != Z_STREAM_END)
-- throw Exception("Internal error in Gzip_Compression deflate.");
-+ throw Invalid_State("Internal error in Gzip_Compression deflate.");
- send(buffer.begin(), buffer.size() - zlib->stream.avail_out);
- }
- }
-@@ -172,7 +172,7 @@ void Gzip_Compression::end_msg()
- zlib->stream.avail_out = buffer.size();
- rc = deflate(&(zlib->stream), Z_FINISH);
- if (rc != Z_OK && rc != Z_STREAM_END)
-- throw Exception("Internal error in Gzip_Compression finishing deflate.");
-+ throw Invalid_State("Internal error in Gzip_Compression finishing deflate.");
- send(buffer.begin(), buffer.size() - zlib->stream.avail_out);
- }
-
-@@ -228,7 +228,7 @@ Gzip_Decompression::Gzip_Decompression()
- no_writes(true), pipe(new Hash_Filter("CRC32")), footer(0)
- {
- if (DEFAULT_BUFFERSIZE < sizeof(GZIP::GZIP_HEADER))
-- throw Exception("DEFAULT_BUFFERSIZE is too small");
-+ throw Decoding_Error("DEFAULT_BUFFERSIZE is too small");
-
- zlib = new Zlib_Stream;
-
-@@ -237,7 +237,7 @@ Gzip_Decompression::Gzip_Decompression()
- if(inflateInit2(&(zlib->stream), -15) != Z_OK)
- {
- delete zlib; zlib = 0;
-- throw Exception("Gzip_Decompression: Memory allocation error");
-+ throw Memory_Exhaustion();
- }
- }
-
-@@ -256,7 +256,7 @@ void Gzip_Decompression::start_msg()
- void Gzip_Decompression::start_msg()
- {
- if (!no_writes)
-- throw Exception("Gzip_Decompression: start_msg after already writing");
-+ throw Decoding_Error("Gzip_Decompression: start_msg after already writing");
-
- pipe.start_msg();
- datacount = 0;
-@@ -267,7 +267,7 @@ void Gzip_Decompression::start_msg()
- /*************************************************
- * Decompress Input with Gzip *
- *************************************************/
--void Gzip_Decompression::write(const byte input[], u32bit length)
-+void Gzip_Decompression::write(const byte input[], filter_length_t length)
- {
- if(length) no_writes = false;
-
-@@ -277,15 +277,16 @@ void Gzip_Decompression::write(const byt
- u32bit eat_len = eat_footer(input, length);
- input += eat_len;
- length -= eat_len;
-- if (length == 0)
-- return;
- }
-
-+ if (length == 0)
-+ return;
-+
- // Check the gzip header
- if (pos < sizeof(GZIP::GZIP_HEADER))
- {
-- u32bit len = std::min((u32bit)sizeof(GZIP::GZIP_HEADER)-pos, length);
-- u32bit cmplen = len;
-+ filter_length_t len = std::min((filter_length_t)sizeof(GZIP::GZIP_HEADER)-pos, length);
-+ filter_length_t cmplen = len;
- // The last byte is the OS flag - we don't care about that
- if (pos + len - 1 >= GZIP::HEADER_POS_OS)
- cmplen--;
-@@ -317,8 +318,8 @@ void Gzip_Decompression::write(const byt
- if(rc == Z_NEED_DICT)
- throw Decoding_Error("Gzip_Decompression: Need preset dictionary");
- if(rc == Z_MEM_ERROR)
-- throw Exception("Gzip_Decompression: Memory allocation error");
-- throw Exception("Gzip_Decompression: Unknown decompress error");
-+ throw Memory_Exhaustion();
-+ throw Decoding_Error("Gzip_Decompression: Unknown decompress error");
- }
- send(buffer.begin(), buffer.size() - zlib->stream.avail_out);
- pipe.write(buffer.begin(), buffer.size() - zlib->stream.avail_out);
-@@ -346,8 +347,14 @@ u32bit Gzip_Decompression::eat_footer(co
- if (footer.size() >= GZIP::FOOTER_LENGTH)
- throw Decoding_Error("Gzip_Decompression: Data integrity error in footer");
-
-+#if BOTAN_VERSION_CODE >= BOTAN_VERSION_CODE_FOR(1,9,11)
-+ size_t eat_len = std::min(GZIP::FOOTER_LENGTH-footer.size(),
-+ static_cast<size_t>(length));
-+ footer += std::make_pair(input, eat_len);
-+#else
- u32bit eat_len = std::min(GZIP::FOOTER_LENGTH-footer.size(), length);
- footer.append(input, eat_len);
-+#endif
-
- if (footer.size() == GZIP::FOOTER_LENGTH)
- {
-@@ -364,7 +371,7 @@ void Gzip_Decompression::check_footer()
- void Gzip_Decompression::check_footer()
- {
- if (footer.size() != GZIP::FOOTER_LENGTH)
-- throw Exception("Gzip_Decompression: Error finalizing decompression");
-+ throw Decoding_Error("Gzip_Decompression: Error finalizing decompression");
-
- pipe.end_msg();
-
-@@ -377,7 +384,12 @@ void Gzip_Decompression::check_footer()
- for (int i = 0; i < 4; i++)
- buf[3-i] = tmpbuf[i];
-
-+#if BOTAN_VERSION_CODE >= BOTAN_VERSION_CODE_FOR(1,9,11)
-+ tmpbuf.resize(4);
-+ tmpbuf.copy(footer.begin(), 4);
-+#else
- tmpbuf.set(footer.begin(), 4);
-+#endif
- if (buf != tmpbuf)
- throw Decoding_Error("Gzip_Decompression: Data integrity error - CRC32 error");
-
-@@ -400,7 +412,7 @@ void Gzip_Decompression::end_msg()
- // read, clear() will reset no_writes
- if(no_writes) return;
-
-- throw Exception("Gzip_Decompression: didn't find footer");
-+ throw Decoding_Error("Gzip_Decompression: didn't find footer");
-
- }
-
-@@ -412,7 +424,11 @@ void Gzip_Decompression::clear()
- no_writes = true;
- inflateReset(&(zlib->stream));
-
-+#if BOTAN_VERSION_CODE >= BOTAN_VERSION_CODE_FOR(1,9,11)
-+ footer.clear();
-+#else
- footer.destroy();
-+#endif
- pos = 0;
- datacount = 0;
- }
-============================================================
---- src/gzip.hh 649dfc0b250954f39c0f73870f8bec3f32f7fa43
-+++ src/gzip.hh aff9da63bb22366bccf69c2d75ee7790406d2455
-@@ -7,11 +7,18 @@
- #ifndef BOTAN_EXT_GZIP_H__
- #define BOTAN_EXT_GZIP_H__
-
-+#include <botan/version.h>
- #include <botan/filter.h>
- #include <botan/pipe.h>
-
- namespace Botan {
-
-+#if BOTAN_VERSION_CODE < BOTAN_VERSION_CODE_FOR(1,9,4)
-+// Only 1.9.4 and newer export the Memory_Exception. Give this gzip
-+// implementation something compatible to work with.
-+typedef std::bad_alloc Memory_Exhaustion;
-+#endif
-+
- namespace GZIP {
-
- /* A basic header - we only need to set the IDs and compression method */
-@@ -30,13 +37,19 @@ namespace GZIP {
-
- }
-
-+#if BOTAN_VERSION_CODE >= BOTAN_VERSION_CODE_FOR(1,9,11)
-+typedef size_t filter_length_t;
-+#else
-+typedef u32bit filter_length_t;
-+#endif
-+
- /*************************************************
- * Gzip Compression Filter *
- *************************************************/
- class Gzip_Compression : public Filter
- {
- public:
-- void write(const byte input[], u32bit length);
-+ void write(const byte input[], filter_length_t length);
- void start_msg();
- void end_msg();
- std::string name() const { return "Gzip_Compression"; }
-@@ -60,7 +73,7 @@ class Gzip_Decompression : public Filter
- class Gzip_Decompression : public Filter
- {
- public:
-- void write(const byte input[], u32bit length);
-+ void write(const byte input[], filter_length_t length);
- void start_msg();
- void end_msg();
- std::string name() const { return "Gzip_Decompression"; }
-============================================================
---- src/key_packet.cc d1306df89dd684badac02c03744cd446381c07d3
-+++ src/key_packet.cc c97262d161b23c9640972188979669b3e95afe7b
-@@ -106,8 +106,8 @@ namespace
- void validate_public_key_data(string const & name, string const & keydata) const
- {
- string decoded = decode_base64_as<string>(keydata, origin::user);
-- Botan::SecureVector<Botan::byte> key_block;
-- key_block.set(reinterpret_cast<Botan::byte const *>(decoded.c_str()), decoded.size());
-+ Botan::SecureVector<Botan::byte> key_block
-+ (reinterpret_cast<Botan::byte const *>(decoded.c_str()), decoded.size());
- try
- {
- Botan::X509::load_key(key_block);
-============================================================
---- src/key_store.cc 64c4c4bed1fadc26b51207b9f61343f9dd7d3c6e
-+++ src/key_store.cc b7859345f7c665914d16357409bdff24a48b7996
-@@ -572,13 +572,21 @@ key_store_state::decrypt_private_key(key
- try // with empty passphrase
- {
- Botan::DataSource_Memory ds(kp.priv());
--#if BOTAN_VERSION_CODE >= BOTAN_VERSION_CODE_FOR(1,7,7)
-+#if BOTAN_VERSION_CODE >= BOTAN_VERSION_CODE_FOR(1,9,11)
-+ pkcs8_key.reset(Botan::PKCS8::load_key(ds, lazy_rng::get(), Dummy_UI()));
-+#elif BOTAN_VERSION_CODE >= BOTAN_VERSION_CODE_FOR(1,7,7)
- pkcs8_key.reset(Botan::PKCS8::load_key(ds, lazy_rng::get(), ""));
- #else
- pkcs8_key.reset(Botan::PKCS8::load_key(ds, ""));
- #endif
- }
-+#if BOTAN_VERSION_CODE >= BOTAN_VERSION_CODE_FOR(1,9,11)
-+ catch (Passphrase_Required & e)
-+#elif BOTAN_VERSION_CODE >= BOTAN_VERSION_CODE_FOR(1,9,4)
-+ catch (Botan::Invalid_Argument & e)
-+#else
- catch (Botan::Exception & e)
-+#endif
- {
- L(FL("failed to load key with no passphrase: %s") % e.what());
-
-@@ -605,13 +613,18 @@ key_store_state::decrypt_private_key(key
- {
- Botan::DataSource_Memory ds(kp.priv());
- #if BOTAN_VERSION_CODE >= BOTAN_VERSION_CODE_FOR(1,7,7)
-- pkcs8_key.reset(Botan::PKCS8::load_key(ds, lazy_rng::get(), phrase()));
-+ pkcs8_key.reset(Botan::PKCS8::load_key(ds, lazy_rng::get(),
-+ phrase()));
- #else
- pkcs8_key.reset(Botan::PKCS8::load_key(ds, phrase()));
- #endif
- break;
- }
-+#if BOTAN_VERSION_CODE >= BOTAN_VERSION_CODE_FOR(1,9,4)
-+ catch (Botan::Invalid_Argument)
-+#else
- catch (Botan::Exception & e)
-+#endif
- {
- cycles++;
- L(FL("decrypt_private_key: failure %d to load encrypted key: %s")
-@@ -822,10 +835,14 @@ key_store::decrypt_rsa(key_id const & id
- plaintext = string(reinterpret_cast<char const*>(plain.begin()),
- plain.size());
- }
-- catch (Botan::Exception & ex)
-+#if BOTAN_VERSION_CODE >= BOTAN_VERSION_CODE_FOR(1,9,4)
-+ catch (std::exception & e)
-+#else
-+ catch (Botan::Exception & e)
-+#endif
- {
- E(false, ciphertext.made_from,
-- F("Botan error decrypting data: '%s'") % ex.what());
-+ F("Botan error decrypting data: '%s'") % e.what());
- }
- }
-
-@@ -856,9 +873,9 @@ key_store::make_signature(database & db,
- {
- if (agent.connected()) {
- //grab the monotone public key as an RSA_PublicKey
-- SecureVector<Botan::byte> pub_block;
-- pub_block.set(reinterpret_cast<Botan::byte const *>(key.pub().data()),
-- key.pub().size());
-+ SecureVector<Botan::byte> pub_block
-+ (reinterpret_cast<Botan::byte const *>(key.pub().data()),
-+ key.pub().size());
- L(FL("make_signature: building %d-byte pub key") % pub_block.size());
- shared_ptr<X509_PublicKey> x509_key =
- shared_ptr<X509_PublicKey>(Botan::X509::load_key(pub_block));
-@@ -1031,8 +1048,14 @@ key_store_state::migrate_old_key_pair
- for (;;)
- try
- {
-+#if BOTAN_VERSION_CODE >= BOTAN_VERSION_CODE_FOR(1,9,11)
-+ arc4_key.resize(phrase().size());
-+ arc4_key.copy(reinterpret_cast<Botan::byte const *>(phrase().data()),
-+ phrase().size());
-+#else
- arc4_key.set(reinterpret_cast<Botan::byte const *>(phrase().data()),
- phrase().size());
-+#endif
-
- Pipe arc4_decryptor(get_cipher("ARC4", arc4_key, Botan::DECRYPTION));
-
-@@ -1051,7 +1074,11 @@ key_store_state::migrate_old_key_pair
- #endif
- break;
- }
-+#if BOTAN_VERSION_CODE >= BOTAN_VERSION_CODE_FOR(1,9,4)
-+ catch (Botan::Invalid_Argument & e)
-+#else
- catch (Botan::Exception & e)
-+#endif
- {
- L(FL("migrate_old_key_pair: failure %d to load old private key: %s")
- % cycles % e.what());
-============================================================
---- src/monotone.cc a25ecdd170a601db798b63a60add7681609a34c4
-+++ src/monotone.cc 764bc9ca406b41d21efd552a0d810bc2849e0588
-@@ -156,27 +156,53 @@ cpp_main(int argc, char ** argv)
- E(linked_botan_version != BOTAN_VERSION_CODE_FOR(1,7,14), origin::system,
- F("monotone does not support Botan 1.7.14"));
-
--#if BOTAN_VERSION_CODE <= BOTAN_VERSION_CODE_FOR(1,7,6)
-+ // In Botan 1.9.9, the DataSink_Stream cannot be instantiated per
-+ // se. As 1.10.1 is already out, let's simply disable support for
-+ // that specific (testing) version of botan.
-+ E(linked_botan_version != BOTAN_VERSION_CODE_FOR(1,9,9), origin::system,
-+ F("monotone does not support Botan 1.9.9"));
-+
-+#if BOTAN_VERSION_CODE < BOTAN_VERSION_CODE_FOR(1,7,7)
-+ // motonote binary compiled against botan younger than 1.7.7
- E(linked_botan_version >= BOTAN_VERSION_CODE_FOR(1,6,3), origin::system,
- F("this monotone binary requires Botan 1.6.3 or newer"));
-- E(linked_botan_version <= BOTAN_VERSION_CODE_FOR(1,7,6), origin::system,
-- F("this monotone binary does not work with Botan newer than 1.7.6"));
--#elif BOTAN_VERSION_CODE <= BOTAN_VERSION_CODE_FOR(1,7,22)
-- E(linked_botan_version > BOTAN_VERSION_CODE_FOR(1,7,6), origin::system,
-+ E(linked_botan_version < BOTAN_VERSION_CODE_FOR(1,7,7), origin::system,
-+ F("this monotone binary does not work with Botan 1.7.7 or newer"));
-+
-+#elif BOTAN_VERSION_CODE < BOTAN_VERSION_CODE_FOR(1,7,22)
-+ // motonote binary compiled against botan 1.7.7 - 1.7.21
-+ E(linked_botan_version >= BOTAN_VERSION_CODE_FOR(1,7,7), origin::system,
- F("this monotone binary requires Botan 1.7.7 or newer"));
-- // While compiling against 1.7.22 or newer is recommended, because
-- // it enables new features of Botan, the monotone binary compiled
-- // against Botan 1.7.21 and before should still work with newer Botan
-- // versions, including all of the stable branch 1.8.x.
-- E(linked_botan_version < BOTAN_VERSION_CODE_FOR(1,9,0), origin::system,
-- F("this monotone binary does not work with Botan 1.9.x"));
--#else
-- E(linked_botan_version > BOTAN_VERSION_CODE_FOR(1,7,22), origin::system,
-+ // While compiling against 1.7.22 or newer is recommended, because it
-+ // enables new features of Botan, the monotone binary compiled against
-+ // Botan 1.7.21 and before should still work with newer Botan version,
-+ // including all of the stable branch 1.8.x, up to and including
-+ // 1.9.3.
-+ E(linked_botan_version < BOTAN_VERSION_CODE_FOR(1,9,4), origin::system,
-+ F("this monotone binary does not work with Botan 1.9.4 or newer"));
-+
-+#elif BOTAN_VERSION_CODE < BOTAN_VERSION_CODE_FOR(1,9,4)
-+ // motonote binary compiled against botan 1.7.22 - 1.9.3
-+ E(linked_botan_version >= BOTAN_VERSION_CODE_FOR(1,7,22), origin::system,
- F("this monotone binary requires Botan 1.7.22 or newer"));
-- E(linked_botan_version < BOTAN_VERSION_CODE_FOR(1,9,0), origin::system,
-- F("this monotone binary does not work with Botan 1.9.x"));
-+ E(linked_botan_version < BOTAN_VERSION_CODE_FOR(1,9,4), origin::system,
-+ F("this monotone binary does not work with Botan 1.9.4 or newer"));
-+
-+#elif BOTAN_VERSION_CODE < BOTAN_VERSION_CODE_FOR(1,9,11)
-+ // motonote binary compiled against botan 1.9.4 - 1.9.10
-+#pragma message ( "The resulting monotone binary won't be able to run with any stable release of botan." )
-+ E(linked_botan_version >= BOTAN_VERSION_CODE_FOR(1,9,4), origin::system,
-+ F("this monotone binary requires Botan 1.9.4 or newer"));
-+ E(linked_botan_version < BOTAN_VERSION_CODE_FOR(1,9,11), origin::system,
-+ F("this monotone binary does not work with Botan 1.9.11 or newer"));
-+
-+#else
-+ // motonote binary compiled against botan 1.9.11 and newer
-+ E(linked_botan_version >= BOTAN_VERSION_CODE_FOR(1,9,11), origin::system,
-+ F("this monotone binary requires Botan 1.9.11 or newer"));
- #endif
-
-+
- app_state app;
- try
- {
-============================================================
---- src/packet.cc f61360ed2524fdf53411bd24d022a2a3c9e6e9c7
-+++ src/packet.cc 571ff6eae1d269a146da74f2730b70376957d3bb
-@@ -156,8 +156,8 @@ namespace
- void validate_public_key_data(string const & name, string const & keydata) const
- {
- string decoded = decode_base64_as<string>(keydata, origin::user);
-- Botan::SecureVector<Botan::byte> key_block;
-- key_block.set(reinterpret_cast<Botan::byte const *>(decoded.c_str()), decoded.size());
-+ Botan::SecureVector<Botan::byte> key_block
-+ (reinterpret_cast<Botan::byte const *>(decoded.c_str()), decoded.size());
- try
- {
- Botan::X509::load_key(key_block);
-@@ -175,7 +175,9 @@ namespace
- Botan::DataSource_Memory ds(decoded);
- try
- {
--#if BOTAN_VERSION_CODE >= BOTAN_VERSION_CODE_FOR(1,7,7)
-+#if BOTAN_VERSION_CODE >= BOTAN_VERSION_CODE_FOR(1,9,11)
-+ Botan::PKCS8::load_key(ds, lazy_rng::get(), Dummy_UI());
-+#elif BOTAN_VERSION_CODE >= BOTAN_VERSION_CODE_FOR(1,7,7)
- Botan::PKCS8::load_key(ds, lazy_rng::get(), string());
- #else
- Botan::PKCS8::load_key(ds, string());
-@@ -189,7 +191,11 @@ namespace
- }
- // since we do not want to prompt for a password to decode it finally,
- // we ignore all other exceptions
-+#if BOTAN_VERSION_CODE >= BOTAN_VERSION_CODE_FOR(1,9,11)
-+ catch (Passphrase_Required) {}
-+#else
- catch (Botan::Invalid_Argument) {}
-+#endif
- }
- void validate_certname(string const & cn) const
- {
-@@ -460,8 +466,16 @@ read_packets(istream & in, packet_consum
- return count;
- }
-
-+// Dummy User_Interface implementation for Botan
-+#if BOTAN_VERSION_CODE >= BOTAN_VERSION_CODE_FOR(1,9,11)
-+std::string
-+Dummy_UI::get_passphrase(const std::string &, const std::string &,
-+ Botan::User_Interface::UI_Result&) const
-+{
-+ throw Passphrase_Required("Passphrase required");
-+}
-+#endif
-
--
- // Local Variables:
- // mode: C++
- // fill-column: 76
-============================================================
---- src/packet.hh 0a224e6e92f244e2c3e9a5cdb935eb8613d7e85b
-+++ src/packet.hh 9c43d30145f0292d6ceda5e717e366fdead5a4d6
-@@ -10,6 +10,10 @@
- #ifndef __PACKET_HH__
- #define __PACKET_HH__
-
-+#if BOTAN_VERSION_CODE >= BOTAN_VERSION_CODE_FOR(1,9,11)
-+#include <botan/ui.h>
-+#endif
-+
- #include "vocab.hh"
-
- struct cert;
-@@ -84,8 +88,23 @@ size_t read_packets(std::istream & in, p
-
- size_t read_packets(std::istream & in, packet_consumer & cons);
-
-+#if BOTAN_VERSION_CODE >= BOTAN_VERSION_CODE_FOR(1,9,11)
-+// A helper class implementing Botan::User_Interface - which doesn't really
-+// interface with the user, but provides the necessary plumbing for Botan.
-+//
-+// See Botan commit 2d09d7d0cd4bd0e7155d001dd65a4f29103b158c
-+typedef std::runtime_error Passphrase_Required;
-+
-+class Dummy_UI : public Botan::User_Interface
-+{
-+public:
-+ virtual std::string get_passphrase(const std::string &, const std::string &,
-+ Botan::User_Interface::UI_Result &) const;
-+};
- #endif
-
-+#endif
-+
- // Local Variables:
- // mode: C++
- // fill-column: 76
-============================================================
---- src/sha1.cc 5e1aa972d7c7d66e06320b039989652b830dcd75
-+++ src/sha1.cc 42e48b22fd88b25e0d38d4f91e1f13f8a83c7120
-@@ -50,9 +50,12 @@ CMD_HIDDEN(benchmark_sha1, "benchmark_sh
- Botan::Default_Benchmark_Timer timer;
- std::map<std::string, double> results =
- Botan::algorithm_benchmark("SHA-1", milliseconds, timer, rng, af);
-+#elif BOTAN_VERSION_CODE < BOTAN_VERSION_CODE_FOR(1,9,11)
-+ std::map<std::string, double> results =
-+ Botan::algorithm_benchmark("SHA-1", milliseconds, rng, af);
- #else
- std::map<std::string, double> results =
-- Botan::algorithm_benchmark("SHA-1", milliseconds, rng, af);
-+ Botan::algorithm_benchmark("SHA-1", af, rng, milliseconds, 16);
- #endif
-
- for(std::map<std::string, double>::const_iterator i = results.begin();
-============================================================
---- src/ssh_agent.cc 6d188e7012a0b82f782563b09bbd7adf3f70cf75
-+++ src/ssh_agent.cc 4a0dcab873559e934e41c5f220b5434d35600d9b
-@@ -385,9 +385,9 @@ ssh_agent::has_key(const keypair & key)
- ssh_agent::has_key(const keypair & key)
- {
- //grab the monotone public key as an RSA_PublicKey
-- SecureVector<Botan::byte> pub_block;
-- pub_block.set(reinterpret_cast<Botan::byte const *>((key.pub)().data()),
-- (key.pub)().size());
-+ SecureVector<Botan::byte> pub_block
-+ (reinterpret_cast<Botan::byte const *>((key.pub)().data()),
-+ (key.pub)().size());
- L(FL("has_key: building %d-byte pub key") % pub_block.size());
- shared_ptr<X509_PublicKey> x509_key =
- shared_ptr<X509_PublicKey>(Botan::X509::load_key(pub_block));
-============================================================
---- src/transforms.cc cdfb6854ef4992faba21074145f3c8269b845b11
-+++ src/transforms.cc b99278ffe95c0081bf4986bc74d3699c37a52948
-@@ -53,15 +53,16 @@ using Botan::Hash_Filter;
- // paradigm "must" be used. this program is intended for source code
- // control and I make no bones about it.
-
--NORETURN(static inline void error_in_transform(Botan::Exception & e));
-+NORETURN(static inline void error_in_transform(std::exception & e));
-
- static inline void
--error_in_transform(Botan::Exception & e, origin::type caused_by)
-+error_in_transform(std::exception & e, origin::type caused_by)
- {
- // these classes can all indicate data corruption
- if (typeid(e) == typeid(Botan::Encoding_Error)
- || typeid(e) == typeid(Botan::Decoding_Error)
- || typeid(e) == typeid(Botan::Stream_IO_Error)
-+ || typeid(e) == typeid(Botan::Invalid_Argument)
- || typeid(e) == typeid(Botan::Integrity_Failure))
- {
- // clean up the what() string a little: throw away the
-@@ -107,7 +108,7 @@ error_in_transform(Botan::Exception & e,
- pipe->process_msg(in); \
- out = pipe->read_all_as_string(Pipe::LAST_MESSAGE); \
- } \
-- catch (Botan::Exception & e) \
-+ catch (std::exception & e) \
- { \
- pipe.reset(new Pipe(new T(carg))); \
- error_in_transform(e, made_from); \
-@@ -173,7 +174,7 @@ template<> string xform<Botan::Hex_Decod
- {
- throw Botan::Decoding_Error(string("invalid hex character '") + (char)c + "'");
- }
-- catch(Botan::Exception & e)
-+ catch(std::exception & e)
- {
- error_in_transform(e, made_from);
- }
-@@ -219,7 +220,7 @@ void pack(T const & in, base64< gzip<T>
- tmp = pipe->read_all_as_string(Pipe::LAST_MESSAGE);
- out = base64< gzip<T> >(tmp, in.made_from);
- }
-- catch (Botan::Exception & e)
-+ catch (std::exception & e)
- {
- pipe.reset(new Pipe(new Gzip_Compression,
- new Base64_Encoder));
-@@ -237,7 +238,7 @@ void unpack(base64< gzip<T> > const & in
- pipe->process_msg(in());
- out = T(pipe->read_all_as_string(Pipe::LAST_MESSAGE), in.made_from);
- }
-- catch (Botan::Exception & e)
-+ catch (std::exception & e)
- {
- pipe.reset(new Pipe(new Base64_Decoder,
- new Gzip_Decompression));
-@@ -264,7 +265,7 @@ calculate_ident(data const & dat,
- p->process_msg(dat());
- ident = id(p->read_all_as_string(Pipe::LAST_MESSAGE), dat.made_from);
- }
-- catch (Botan::Exception & e)
-+ catch (std::exception & e)
- {
- p.reset(new Pipe(new Hash_Filter("SHA-160")));
- error_in_transform(e, dat.made_from);