EVP_PKEY* pkt = X509_REQ_get_pubkey( req.get() );
if( !pkt ) {
- throw "Error extracting public key";
+ throw std::runtime_error("Error extracting public key");
}
pk = std::shared_ptr<EVP_PKEY>( pkt, EVP_PKEY_free );
X509Req::X509Req( std::string spkac ) {
if( spkac.compare( 0, 6, "SPKAC=" ) != 0 ) {
- throw "Error: not a SPKAC";
+ throw std::runtime_error("Error: not a SPKAC");
}
spkac = spkac.substr( 6 );
NETSCAPE_SPKI* spki_p = NETSCAPE_SPKI_b64_decode( spkac.c_str(), spkac.size() );
if( !spki_p ) {
- throw "Error: decode failed";
+ throw std::runtime_error("Error: decode failed");
}
spki = std::shared_ptr<NETSCAPE_SPKI>( spki_p, NETSCAPE_SPKI_free );
EVP_PKEY* pkt_p = NETSCAPE_SPKI_get_pubkey( spki.get() );
if( !pkt_p ) {
- throw "Error: reading SPKAC Pubkey failed";
+ throw std::runtime_error("Error: reading SPKAC Pubkey failed");
}
pk = std::shared_ptr<EVP_PKEY>( pkt_p, EVP_PKEY_free );
X509_REQ* req = PEM_read_bio_X509_REQ( in.get(), NULL, NULL, NULL );
if( !req ) {
- throw "Error parsing CSR";
+ throw std::runtime_error("Error parsing CSR");
}
return std::shared_ptr<X509Req>( new X509Req( req )); // TODO ask
X509* c = X509_new();
if( !c ) {
- throw "malloc failed";
+ throw std::runtime_error("malloc failed");
}
target = std::shared_ptr<X509>( c, X509_free );
if( !X509_set_version( c, 2 ) ) {
- throw "Setting X509-version to 3 failed";
+ throw std::runtime_error("Setting X509-version to 3 failed");
}
X509_NAME* subjectP = X509_NAME_new();
if( !subjectP ) {
- throw "malloc failure in construct.";
+ throw std::runtime_error("malloc failure in construct.");
}
subject = std::shared_ptr<X509_NAME>( subjectP, X509_NAME_free );
void X509Cert::addRDN( int nid, std::string data ) {
if( ! X509_NAME_add_entry_by_NID( subject.get(), nid, MBSTRING_UTF8, ( unsigned char* )const_cast<char*>( data.data() ), data.size(), -1, 0 ) ) {
- throw "malloc failure in RDN";
+ throw std::runtime_error("malloc failure in RDN");
}
}
void X509Cert::setIssuerNameFrom( std::shared_ptr<X509> caCert ) {
if( !X509_set_issuer_name( target.get(), X509_get_subject_name( caCert.get() ) ) ) {
- throw "Error setting Issuer name";
+ throw std::runtime_error("Error setting Issuer name");
}
}
std::shared_ptr<EVP_PKEY> pktmp = req->getPkey();
if( !X509_set_pubkey( target.get(), pktmp.get() ) ) {
- throw "Setting public key failed.";
+ throw std::runtime_error("Setting public key failed.");
}
}
return ext;
merr:
- throw "memerr";
+ throw std::runtime_error("memerr");
}
void X509Cert::setExtensions( std::shared_ptr<X509> caCert, std::vector<std::shared_ptr<SAN>>& sans, Profile& prof, std::string crlURL, std::string crtURL ) {
GENERAL_NAME* gen = GENERAL_NAME_new();
if( !gen ) {
- throw "Malloc failure.";
+ throw std::runtime_error("Malloc failure.");
}
gen->type = name->type == "DNS" ? GEN_DNS : name->type == "email" ? GEN_EMAIL : 0; // GEN_EMAIL;
|| !( gen->d.ia5 = M_ASN1_IA5STRING_new() )
|| !ASN1_STRING_set( gen->d.ia5, name->content.data(), name->content.size() ) ) {
GENERAL_NAME_free( gen );
- throw "initing iasting5 failed";
+ throw std::runtime_error("initing iasting5 failed");
}
sk_GENERAL_NAME_push( gens.get(), gen );
std::shared_ptr<SignedCertificate> X509Cert::sign( std::shared_ptr<EVP_PKEY> caKey, std::string signAlg ) {
if( !X509_set_subject_name( target.get(), subject.get() ) ) {
- throw "error setting subject";
+ throw std::runtime_error("error setting subject");
}
const EVP_MD* md;
} else if( signAlg == "sha1" ) {
md = EVP_sha1();
} else {
- throw "Unknown md-type";
+ throw std::runtime_error("Unknown md-type");
}
if( !X509_sign( target.get(), caKey.get(), md ) ) {
- throw "Signing failed.";
+ throw std::runtime_error("Signing failed.");
}
//X509_print_fp( stdout, target.get() );
std::shared_ptr<BIO> mem = std::shared_ptr<BIO>( BIO_new( BIO_s_mem() ), BIO_free );
if( !mem ) {
- throw "Failed to allocate memory for the signed certificate.";
+ throw std::runtime_error("Failed to allocate memory for the signed certificate.");
}
PEM_write_bio_X509( mem.get(), target.get() );
std::shared_ptr<BIGNUM> ser( ASN1_INTEGER_to_BN( target->cert_info->serialNumber, NULL ), BN_free );
if( !ser ) {
- throw "Failed to retrieve certificate serial of signed certificate.";
+ throw std::runtime_error("Failed to retrieve certificate serial of signed certificate.");
}
std::shared_ptr<char> serStr(