extern std::string keyDir;
extern std::vector<Profile> profiles;
extern std::string sqlHost, sqlUser, sqlPass, sqlDB;
+extern std::string serialPath;
std::string writeBackFile( uint32_t serial, std::string cert ) {
std::string filename = "keys";
return filename;
}
-int handlermain( int argc, const char* argv[] );
-
int main( int argc, const char* argv[] ) {
( void ) argc;
( void ) argv;
return -1;
}
- if( argc == 0 ) {
- return handlermain( argc, argv );
+ if( serialPath == "" ) {
+ std::cout << "Error: no serial device is given" << std::endl;
+ return -1;
}
std::shared_ptr<JobProvider> jp( new MySQLJobProvider( sqlHost, sqlUser, sqlPass, sqlDB ) );
- std::shared_ptr<BIO> b = openSerial( "/dev/ttyUSB0" );
+ std::shared_ptr<BIO> b = openSerial( serialPath );
std::shared_ptr<BIO> slip1( BIO_new( toBio<SlipBIO>() ), BIO_free );
( ( SlipBIO* )slip1->ptr )->setTarget( std::shared_ptr<OpensslBIO>( new OpensslBIOWrapper( b ) ) );
std::shared_ptr<RemoteSigner> sign( new RemoteSigner( slip1, generateSSLContext( false ) ) );
int handlermain( int argc, const char* argv[] );
+extern std::string serialPath;
+extern std::vector<Profile> profiles;
+
int main( int argc, const char* argv[] ) {
( void ) argc;
( void ) argv;
return -1;
}
- return handlermain( argc, argv );
+ std::shared_ptr<int> ssl_lib = ssl_lib_ref;
+
+ if( serialPath == "" ) {
+ std::cout << "Error: no serial device is given" << std::endl;
+ return -1;
+ }
+
+ std::shared_ptr<BIO> conn = openSerial( serialPath );
+ std::shared_ptr<BIO> slip1( BIO_new( toBio<SlipBIO>() ), BIO_free );
+ ( ( SlipBIO* )slip1->ptr )->setTarget( std::shared_ptr<OpensslBIO>( new OpensslBIOWrapper( conn ) ) );
+
+ try {
+ DefaultRecordHandler* dh = new DefaultRecordHandler( std::shared_ptr<Signer>( new SimpleOpensslSigner( profiles[5] ) ), slip1 );
+
+ while( true ) {
+ dh->handle();
+ }
+ } catch( char const* ch ) {
+ std::cout << "Exception: " << ch << std::endl;
+ }
+
+ return -1;
}
std::string keyDir;
std::vector<Profile> profiles;
std::string sqlHost, sqlUser, sqlPass, sqlDB;
+std::string serialPath;
int parseConfig( std::string path ) {
std::ifstream config;
sqlPass = value;
} else if( key == "sql.database" ) {
sqlDB = value;
- }
-
- if( key.compare( 0, 8, "profile." ) == 0 ) {
+ } else if( key == "serialPath" ) {
+ serialPath = value;
+ } else if( key.compare( 0, 8, "profile." ) == 0 ) {
int numE = key.find( ".", 9 );
if( numE == 0 ) {
currentSession->work();
}
-
-int handlermain( int argc, const char* argv[] ) {
- ( void ) argc;
- ( void ) argv;
-
- std::shared_ptr<OpensslBIOWrapper> bio( new OpensslBIOWrapper( std::shared_ptr<BIO>( BIO_new_fd( 0, 0 ), BIO_free ) ) );
- std::string data =
- "-----BEGIN CERTIFICATE REQUEST-----\n"
- "MIIBSzCBtQIBADAMMQowCAYDVQQDDAFhMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB\n"
- "iQKBgQDerBEpIShJlx3zzl4AOS1NcwEg4iAWknQeTtI8B5dnk+l5HkOdTxqeehZn\n"
- "iZnuIuYXA+JWmoECg/w69+N5zw2BabelgK3cSvRqycwPEU/gceGJZTaBfkkN0hBk\n"
- "rpXDiLSlox5oeR150MrsHvVc+W2e+0jW1tuhz4QLzn8/uI/toQIDAQABoAAwDQYJ\n"
- "KoZIhvcNAQELBQADgYEATQU5VrgQAkvpCvIwRUyjj9YAa9E014tNY0jMcBdv95fy\n"
- "/f49zIcVtUJuZuEwY6uDZQqfAm+8CLNpOCICH/Qw7YOe+s/Yw7a8rk5VqLtgxR4M\n"
- "z6DUeVL0zYFoLUxIje9yDU3pWmPvyVaBPdo0DguZwFMfiWwzhkUDeQgyeaiMvQA=\n"
- "-----END CERTIFICATE REQUEST-----";
-
- RecordHeader head;
- head.flags = 0;
- head.sessid = 13;
-
- //---
-
- std::shared_ptr<int> ssl_lib = ssl_lib_ref;
-
- if( argc >= 2 ) {
- std::shared_ptr<BIO> b = openSerial( "/dev/ttyUSB0" );
- std::shared_ptr<BIO> slip1( BIO_new( toBio<SlipBIO>() ), BIO_free );
- ( ( SlipBIO* )slip1->ptr )->setTarget( std::shared_ptr<OpensslBIO>( new OpensslBIOWrapper( b ) ) );
- std::shared_ptr<RemoteSigner> sign( new RemoteSigner( slip1, generateSSLContext( false ) ) );
-
- std::shared_ptr<TBSCertificate> cert( new TBSCertificate() );
- cert->csr_type = "csr";
- cert->csr_content = data;
- cert->md = "sha256";
- cert->profile = "1";
- std::shared_ptr<AVA> ava( new AVA() );
- ava->name = "CN";
- ava->value = "Dummy user certificates";
- cert->AVAs.push_back( ava );
- std::shared_ptr<SAN> san( new SAN() );
- san->type = "DNS";
- san->content = "n42.example.com";
- cert->SANs.push_back( san );
-
- auto res = sign->sign( cert );
- std::cout << "log: " << res->log << std::endl;
- std::cout << "cert things: " << res->certificate << std::endl;
- return 0;
- }
-
- std::shared_ptr<BIO> conn = openSerial( "/dev/ttyS0" );
- std::shared_ptr<BIO> slip1( BIO_new( toBio<SlipBIO>() ), BIO_free );
-
- ( ( SlipBIO* )slip1->ptr )->setTarget( std::shared_ptr<OpensslBIO>( new OpensslBIOWrapper( conn ) ) );
-
- try {
- DefaultRecordHandler* dh = new DefaultRecordHandler( std::shared_ptr<Signer>( new SimpleOpensslSigner( profiles[0] ) ), slip1 );
-
- while( true ) {
- dh->handle();
- }
- } catch( char const* ch ) {
- std::cout << "Exception: " << ch << std::endl;
- }
-
- return 0;
-}
}
}
-std::shared_ptr<BIO> openSerial( const char* name ) {
- FILE* f = fopen( name, "r+" );
+std::shared_ptr<BIO> openSerial( const std::string name ) {
+ FILE* f = fopen( name.c_str(), "r+" );
if( !f ) {
std::cout << "Opening serial device failed" << std::endl;
#pragma once
#include <openssl/ssl.h>
#include <memory>
+#include <string>
struct Profile {
std::string cert;
std::shared_ptr<EVP_PKEY> loadPkeyFromFile( std::string filename );
std::shared_ptr<SSL_CTX> generateSSLContext( bool server );
-std::shared_ptr<BIO> openSerial( const char* name );
+std::shared_ptr<BIO> openSerial( const std::string name );