]> WPIA git - cassiopeia.git/blobdiff - src/X509.cpp
add: Handling the MD for signing the certificate
[cassiopeia.git] / src / X509.cpp
index a0c11711752bae8ad7e8daeecc605d007a75b230..92d7773f22f4cbff36b0b5cb4a179f030018087a 100644 (file)
@@ -221,12 +221,26 @@ void X509Cert::setExtensions( std::shared_ptr<X509> caCert, std::vector<std::sha
     X509_EXTENSION_free( ext );
 }
 
-std::shared_ptr<SignedCertificate> X509Cert::sign( std::shared_ptr<EVP_PKEY> caKey ) {
+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";
     }
 
-    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.";
     }