]> WPIA git - cassiopeia.git/blobdiff - src/simpleOpensslSigner.cpp
fix: resolve some memory issues with slipBio testing
[cassiopeia.git] / src / simpleOpensslSigner.cpp
index eb7d8b9e720232989b8a60c5b0bfc792a50d2fe0..0096d5ec0457f67ca4f42058fbb8778124753254 100644 (file)
@@ -1,7 +1,6 @@
 #include "simpleOpensslSigner.h"
 
 #include <iostream>
-#include <fstream>
 
 #include <openssl/ssl.h>
 #include <openssl/err.h>
@@ -11,6 +10,7 @@
 #include <openssl/x509v3.h>
 
 #include "X509.h"
+#include "util.h"
 
 extern std::vector<Profile> profiles;
 
@@ -74,10 +74,7 @@ SimpleOpensslSigner::~SimpleOpensslSigner() {
 }
 
 std::shared_ptr<BIGNUM> SimpleOpensslSigner::nextSerial( uint16_t profile ) {
-    std::ifstream serialif( "serial" );
-    std::string res;
-    serialif >> res;
-    serialif.close();
+    std::string res = readFile( "serial" );
 
     BIGNUM* bn = 0;
 
@@ -108,11 +105,12 @@ std::shared_ptr<BIGNUM> SimpleOpensslSigner::nextSerial( uint16_t profile ) {
         throw "Big number math failed while calcing serials.";
     }
 
-    char* serStr = BN_bn2hex( serial.get() );
-    std::ofstream serialf( "serial" );
-    serialf << serStr;
-    serialf.close();
-    OPENSSL_free( serStr );
+    std::shared_ptr<char> serStr = std::shared_ptr<char>(
+        BN_bn2hex( serial.get() ),
+        []( char* ref ) {
+            OPENSSL_free( ref );
+        } );
+    writeFile( "serial", serStr.get() );
 
     return std::shared_ptr<BIGNUM>( BN_bin2bn( data.get(), len + 4 + 16 , 0 ), BN_free );
 }
@@ -127,7 +125,7 @@ std::shared_ptr<SignedCertificate> SimpleOpensslSigner::sign( std::shared_ptr<TB
     if( cert->csr_type == "SPKAC" ) {
         req = X509Req::parseSPKAC( cert->csr_content );
     } else if( cert->csr_type == "CSR" ) {
-        req = X509Req::parse( cert->csr_content );
+        req = X509Req::parseCSR( cert->csr_content );
     } else {
         throw "Error, unknown REQ rype " + ( cert->csr_type );
     }