/* * (C) 2017 Jack Lloyd * * Botan is released under the Simplified BSD License (see license.txt) */ #include namespace Botan { std::string to_string(ErrorType type) { switch(type) { case ErrorType::Unknown: return "Unknown"; case ErrorType::SystemError: return "SystemError"; case ErrorType::NotImplemented: return "NotImplemented"; case ErrorType::OutOfMemory: return "OutOfMemory"; case ErrorType::InternalError: return "InternalError"; case ErrorType::IoError: return "IoError"; case ErrorType::InvalidObjectState : return "InvalidObjectState"; case ErrorType::KeyNotSet: return "KeyNotSet"; case ErrorType::InvalidArgument: return "InvalidArgument"; case ErrorType::InvalidKeyLength: return "InvalidKeyLength"; case ErrorType::InvalidNonceLength: return "InvalidNonceLength"; case ErrorType::LookupError: return "LookupError"; case ErrorType::EncodingFailure: return "EncodingFailure"; case ErrorType::DecodingFailure: return "DecodingFailure"; case ErrorType::TLSError: return "TLSError"; case ErrorType::HttpError: return "HttpError"; case ErrorType::InvalidTag: return "InvalidTag"; case ErrorType::RoughtimeError: return "RoughtimeError"; case ErrorType::OpenSSLError : return "OpenSSLError"; case ErrorType::CommonCryptoError: return "CommonCryptoError"; case ErrorType::Pkcs11Error: return "Pkcs11Error"; case ErrorType::TPMError: return "TPMError"; case ErrorType::DatabaseError: return "DatabaseError"; case ErrorType::ZlibError : return "ZlibError"; case ErrorType::Bzip2Error: return "Bzip2Error" ; case ErrorType::LzmaError: return "LzmaError"; } // No default case in above switch so compiler warns return "Unrecognized Botan error"; } Exception::Exception(const std::string& msg) : m_msg(msg) {} Exception::Exception(const std::string& msg, const std::exception& e) : m_msg(msg + " failed with " + std::string(e.what())) {} Exception::Exception(const char* prefix, const std::string& msg) : m_msg(std::string(prefix) + " " + msg) {} Invalid_Argument::Invalid_Argument(const std::string& msg) : Exception(msg) {} Invalid_Argument::Invalid_Argument(const std::string& msg, const std::string& where) : Exception(msg + " in " + where) {} Invalid_Argument::Invalid_Argument(const std::string& msg, const std::exception& e) : Exception(msg, e) {} Lookup_Error::Lookup_Error(const std::string& type, const std::string& algo, const std::string& provider) : Exception("Unavailable " + type + " " + algo + (provider.empty() ? std::string("") : (" for provider " + provider))) {} Internal_Error::Internal_Error(const std::string& err) : Exception("Internal error: " + err) {} Invalid_Key_Length::Invalid_Key_Length(const std::string& name, size_t length) : Invalid_Argument(name + " cannot accept a key of length " + std::to_string(length)) {} Invalid_IV_Length::Invalid_IV_Length(const std::string& mode, size_t bad_len) : Invalid_Argument("IV length " + std::to_string(bad_len) + " is invalid for " + mode) {} Key_Not_Set::Key_Not_Set(const std::string& algo) : Invalid_State("Key not set in " + algo) {} Policy_Violation::Policy_Violation(const std::string& err) : Invalid_State("Policy violation: " + err) {} PRNG_Unseeded::PRNG_Unseeded(const std::string& algo) : Invalid_State("PRNG not seeded: " + algo) {} Algorithm_Not_Found::Algorithm_Not_Found(const std::string& name) : Lookup_Error("Could not find any algorithm named \"" + name + "\"") {} No_Provider_Found::No_Provider_Found(const std::string& name) : Exception("Could not find any provider for algorithm named \"" + name + "\"") {} Provider_Not_Found::Provider_Not_Found(const std::string& algo, const std::string& provider) : Lookup_Error("Could not find provider '" + provider + "' for " + algo) {} Invalid_Algorithm_Name::Invalid_Algorithm_Name(const std::string& name): Invalid_Argument("Invalid algorithm name: " + name) {} Encoding_Error::Encoding_Error(const std::string& name) : Invalid_Argument("Encoding error: " + name) {} Decoding_Error::Decoding_Error(const std::string& name) : Invalid_Argument(name) {} Decoding_Error::Decoding_Error(const std::string& msg, const std::exception& e) : Invalid_Argument(msg, e) {} Decoding_Error::Decoding_Error(const std::string& name, const char* exception_message) : Invalid_Argument(name + " failed with exception " + exception_message) {} Invalid_Authentication_Tag::Invalid_Authentication_Tag(const std::string& msg) : Exception("Invalid authentication tag: " + msg) {} Invalid_OID::Invalid_OID(const std::string& oid) : Decoding_Error("Invalid ASN.1 OID: " + oid) {} Stream_IO_Error::Stream_IO_Error(const std::string& err) : Exception("I/O error: " + err) {} System_Error::System_Error(const std::string& msg, int err_code) : Exception(msg + " error code " + std::to_string(err_code)), m_error_code(err_code) {} Self_Test_Failure::Self_Test_Failure(const std::string& err) : Internal_Error("Self test failed: " + err) {} Not_Implemented::Not_Implemented(const std::string& err) : Exception("Not implemented", err) {} }