#include <sstream>
#include <unordered_map>
+#include <exception>
#include <openssl/ssl.h>
#include <openssl/err.h>
bn = BN_new();
if( !bn || !BN_hex2bn( &bn, "1" )) {
- throw "Initing serial failed";
+ throw std::runtime_error("Initing serial failed");
}
} else {
if( !BN_hex2bn( &bn, res.c_str() ) ) {
- throw "Parsing serial failed.";
+ throw std::runtime_error("Parsing serial failed.");
}
}
data.get()[len + 3] = profile & 0xFF; // profile id
if( !RAND_bytes( data.get() + len + 4, 16 ) || !BN_add_word( serial.get(), 1 ) ) {
- throw "Big number math failed while fetching random data for serial number.";
+ throw std::runtime_error("Big number math failed while fetching random data for serial number.");
}
std::shared_ptr<char> serStr = std::shared_ptr<char>(
if( !ca ) {
logger::error( "ERROR: Signing CA specified in profile could not be loaded." );
- throw "CA-key not found";
+ throw std::runtime_error("CA-key not found");
+ }
+ if(!ca->caKey){
+ throw std::runtime_error("Cannot sign certificate with CA " + ca->name + " because it has no private key.");
}
logger::note( "FINE: Key for Signing CA is correctly loaded." );
req = X509Req::parseCSR( cert->csr_content );
} else {
logger::errorf( "ERROR: Unknown type (\"%s\") of certification in request.", cert->csr_type );
- throw "Error, unknown REQ rype " + ( cert->csr_type ); //! \fixme: Pointer instead of string, please use proper exception classes
+ throw std::runtime_error("Error, unknown REQ rype " + cert->csr_type ); //! \fixme: Pointer instead of string, please use proper exception classe)s
}
int i = req->verify();
if( i < 0 ) {
- throw "Request contains a Signature with problems ... ";
+ throw std::runtime_error("Request contains a Signature with problems ... ");
} else if( i == 0 ) {
- throw "Request contains a Signature that does not match ...";
+ throw std::runtime_error("Request contains a Signature that does not match ...");
} else {
logger::note( "FINE: Request contains valid self-signature." );
}
for( std::shared_ptr<AVA> a : cert->AVAs ) {
logger::notef( "INFO: Trying to add RDN: %s: %s", a->name, a->value );
- if( a-> value == "") {
+ if( a->value.empty() ) {
logger::notef( "INFO: Removing empty RDN: %s", a->name);
continue;
}
c.addRDN( NID_organizationalUnitName, a->value );
} else {
logger::error( "ERROR: Trying to add illegal RDN/AVA type: ", a->name );
- throw "Unhandled/Illegal AVA type";
+ throw std::runtime_error("Unhandled/Illegal AVA type");
}
}
if( fn.empty() ) {
logger::error( "ERROR: failed to get filename for storage of signed certificate." );
- throw "Storage location could not be determined";
+ throw std::runtime_error("Storage location could not be determined");
}
logger::note( "FINE: Certificate signed successfully." );