aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/pubkey/pkcs8.cpp
diff options
context:
space:
mode:
authorJack Lloyd <[email protected]>2018-11-17 16:23:51 -0500
committerJack Lloyd <[email protected]>2018-11-23 11:15:25 -0500
commitb909778857b3e0b7eb86ac26c818e5f25baaddbd (patch)
treef8a5c9cbec26310bbfc9077563892b04db158a48 /src/lib/pubkey/pkcs8.cpp
parentc20a428ca2f7c1ef96e642f55bb898010444c499 (diff)
Make exceptions easier to translate to error codes
Avoid throwing base Botan::Exception type, as it is difficult to determine what the error is in that case. Add Exception::error_code and Exception::error_type which allows (for error code) more information about the error and (for error type) allows knowing the error type without requiring a sequence of catches. See GH #1742
Diffstat (limited to 'src/lib/pubkey/pkcs8.cpp')
-rw-r--r--src/lib/pubkey/pkcs8.cpp13
1 files changed, 8 insertions, 5 deletions
diff --git a/src/lib/pubkey/pkcs8.cpp b/src/lib/pubkey/pkcs8.cpp
index f6d50256d..d299a98a4 100644
--- a/src/lib/pubkey/pkcs8.cpp
+++ b/src/lib/pubkey/pkcs8.cpp
@@ -105,7 +105,7 @@ secure_vector<uint8_t> PKCS8_decode(
if(is_encrypted)
{
if(OIDS::lookup(pbe_alg_id.get_oid()) != "PBE-PKCS5v20")
- throw Exception("Unknown PBE type " + pbe_alg_id.get_oid().as_string());
+ throw PKCS8_Exception("Unknown PBE type " + pbe_alg_id.get_oid().as_string());
#if defined(BOTAN_HAS_PKCS5_PBES2)
key = pbes2_decrypt(key_data, get_passphrase(), pbe_alg_id.get_parameters());
#else
@@ -167,10 +167,13 @@ choose_pbe_params(const std::string& pbe_algo, const std::string& key_algo)
}
SCAN_Name request(pbe_algo);
- if(request.arg_count() != 2)
- throw Exception("Unsupported PBE " + pbe_algo);
- if(request.algo_name() != "PBE-PKCS5v20" && request.algo_name() != "PBES2")
- throw Exception("Unsupported PBE " + pbe_algo);
+
+ if(request.arg_count() != 2 ||
+ (request.algo_name() != "PBE-PKCS5v20" && request.algo_name() != "PBES2"))
+ {
+ throw Invalid_Argument("Unsupported PBE " + pbe_algo);
+ }
+
return std::make_pair(request.arg(0), request.arg(1));
}