X-Git-Url: https://code.wpia.club/?a=blobdiff_plain;f=src%2FX509.cpp;h=d5f8bc50d52d33970ea436094c28cebb75d9c8ea;hb=2c79061a72b54efdcac10b6beca62bf53f7383c8;hp=a391b0e6715bd2273cd03b594755b9e021bbe479;hpb=69b15f5299e0e11ca50601f1f766f66cb21812d6;p=cassiopeia.git diff --git a/src/X509.cpp b/src/X509.cpp index a391b0e..d5f8bc5 100644 --- a/src/X509.cpp +++ b/src/X509.cpp @@ -52,8 +52,8 @@ std::shared_ptr X509Req::getPkey() { return pk; } -std::shared_ptr X509Req::parse( std::string filename ) { - std::shared_ptr in = std::shared_ptr( BIO_new_mem_buf( const_cast( filename.c_str() ), -1 ), BIO_free ); +std::shared_ptr X509Req::parseCSR( std::string content ) { + std::shared_ptr in = std::shared_ptr( BIO_new_mem_buf( const_cast( content.c_str() ), -1 ), BIO_free ); X509_REQ* req = PEM_read_bio_X509_REQ( in.get(), NULL, NULL, NULL ); if( !req ) { @@ -184,6 +184,10 @@ void X509Cert::setExtensions( std::shared_ptr caCert, std::vector gens = std::shared_ptr( sk_GENERAL_NAME_new_null(), []( GENERAL_NAMES * ref ) { @@ -217,12 +221,26 @@ void X509Cert::setExtensions( std::shared_ptr caCert, std::vector X509Cert::sign( std::shared_ptr caKey ) { +std::shared_ptr X509Cert::sign( std::shared_ptr caKey, std::string signAlg ) { if( !X509_set_subject_name( target.get(), subject.get() ) ) { throw "error setting subject"; } - if( !X509_sign( target.get(), caKey.get(), EVP_sha512() ) ) { + const EVP_MD* md; + + if( signAlg == "sha512" ) { + md = EVP_sha512(); + } else if( signAlg == "sha384" ) { + md = EVP_sha384(); + } else if( signAlg == "sha256" ) { + md = EVP_sha256(); + } else if( signAlg == "sha1" ) { + md = EVP_sha1(); + } else { + throw "Unknown md-type"; + } + + if( !X509_sign( target.get(), caKey.get(), md ) ) { throw "Signing failed."; }