X-Git-Url: https://code.wpia.club/?a=blobdiff_plain;f=test%2Fsrc%2FslipBioTest.cpp;h=d04a1d681a1e912f0ddea80d4d7e92148554a6ce;hb=156855b7e12c3a0254590da514b0d0e8efe469f4;hp=a54637f3c52958e980c449f9afcdfc4611dcb512;hpb=2122cd29edf77845bdddd43fd03ebf3816cee4bf;p=cassiopeia.git diff --git a/test/src/slipBioTest.cpp b/test/src/slipBioTest.cpp index a54637f..d04a1d6 100644 --- a/test/src/slipBioTest.cpp +++ b/test/src/slipBioTest.cpp @@ -3,20 +3,21 @@ #include -#include "bios.h" -#include "slipBio.h" +#include +#include + +#include "io/bios.h" +#include "io/opensslBIO.h" +#include "io/slipBio.h" class OpensslBIOVector : public OpensslBIO { private: - std::vector>::iterator it, end; std::vector> input; + std::vector>::iterator it, end; public: std::vector> result = std::vector>(); - OpensslBIOVector( std::vector> data ) { - input = data; - it = input.begin(); - end = input.end(); + OpensslBIOVector( std::vector> data ) : input( data ), it( input.begin() ), end( input.end() ) { } int write( const char* buf, int num ); @@ -42,7 +43,7 @@ int OpensslBIOVector::read( char* buf, int size ) { std::copy( it->begin(), it->end(), buf ); auto result = it->size(); - it++; + ++it; return result; } @@ -81,12 +82,13 @@ BOOST_AUTO_TEST_CASE( TestMockup ) { delete data; } - +/* BOOST_AUTO_TEST_CASE( TestSLIP ) { - std::vector> source = { {1, 2, 3, 4, 5, ( char ) 0xc0, 1, ( char ) 0xc0}, {1, 2}, {( char ) 0xc0}, {1, ( char ) 0xdb}, {( char ) 0xdc}, {( char ) 0xc0, ( char )0xdb}, {( char ) 0xdd, 2}, {( char ) 0xc0}}; + std::vector> source = { { (char) 0xc0 }, {1, 2, 3, 4, 5, ( char ) 0xc0, 1, ( char ) 0xc0}, {1, 2}, {( char ) 0xc0}, {1, ( char ) 0xdb}, {( char ) 0xdc}, {( char ) 0xc0, ( char )0xdb}, {( char ) 0xdd, 2}, {( char ) 0xc0}}; std::shared_ptr data = std::shared_ptr( new OpensslBIOVector( source ) ); char buf[4096]; - SlipBIO* slip = new SlipBIO( data ); + SlipBIO* slip = new SlipBIO(); + slip->setTarget(data, true); int res = slip->read( buf, sizeof( buf ) ); BOOST_CHECK_EQUAL( res, 5 ); res = slip->read( buf, sizeof( buf ) ); @@ -103,6 +105,67 @@ BOOST_AUTO_TEST_CASE( TestSLIP ) { BOOST_CHECK_EQUAL( res, 2 ); char res3[] = {( char ) 0xdb, 2}; BOOST_CHECK_EQUAL_COLLECTIONS( buf, buf + 2, res3, res3 + 2 ); + delete slip; } +BOOST_AUTO_TEST_CASE( TestSSLThroughSLIP ) { + BIO* bio1, *bio2; + BOOST_REQUIRE_EQUAL( BIO_new_bio_pair( &bio1, 8096, &bio2, 8096 ), 1 ); + BIO* slip1 = BIO_new( toBio() ); + ( ( SlipBIO* )slip1->ptr )->setTarget( std::shared_ptr( new OpensslBIOWrapper( std::shared_ptr( bio1, BIO_free ) ) ), true ); + BIO* slip2 = BIO_new( toBio() ); + ( ( SlipBIO* )slip2->ptr )->setTarget( std::shared_ptr( new OpensslBIOWrapper( std::shared_ptr( bio2, BIO_free ) ) ), false ); + + auto meth = TLSv1_method(); + auto c_ctx = SSL_CTX_new( meth ); + auto s_ctx = SSL_CTX_new( meth ); + //SSL_CTX_set_cipher_list(c_ctx, "ALL"); + //SSL_CTX_set_cipher_list(s_ctx, "ALL"); + SSL_CTX_use_certificate_file( s_ctx, "testdata/server.crt", SSL_FILETYPE_PEM ); + SSL_CTX_use_PrivateKey_file( s_ctx, "testdata/server.key", SSL_FILETYPE_PEM ); + auto c_ssl = SSL_new( c_ctx ); + auto s_ssl = SSL_new( s_ctx ); + auto c_bio = BIO_new( BIO_f_ssl() ); + auto s_bio = BIO_new( BIO_f_ssl() ); + SSL_set_connect_state( c_ssl ); + SSL_set_bio( c_ssl, slip1, slip1 ); + BIO_set_ssl( c_bio, c_ssl, BIO_NOCLOSE ); + + SSL_set_accept_state( s_ssl ); + SSL_set_bio( s_ssl, slip2, slip2 ); + BIO_set_ssl( s_bio, s_ssl, BIO_NOCLOSE ); + + char data[] = {1, 2, 3, 4, 5}; + char data2[5]; + //ERR_load_SSL_strings(); + //ERR_load_crypto_strings(); + + int res = BIO_write( c_bio, data, 5 ); + BOOST_CHECK_EQUAL( res, -1 ); + res = BIO_read( s_bio, data2, sizeof( data2 ) ); + BOOST_CHECK_EQUAL( res, -1 ); + + res = BIO_write( c_bio, data, 5 ); + BOOST_CHECK_EQUAL( res, -1 ); + + res = BIO_read( s_bio, data2, sizeof( data2 ) ); + BOOST_CHECK_EQUAL( res, -1 ); + res = BIO_write( c_bio, data, 5 ); + BOOST_CHECK_EQUAL( res, 5 ); + res = BIO_read( s_bio, data2, sizeof( data2 ) ); + BOOST_CHECK_EQUAL( res, 5 ); + BOOST_CHECK_EQUAL_COLLECTIONS( data, data + 5, data2, data2 + 5 ); + + BIO_free( c_bio ); + BIO_free( s_bio ); + + BIO_free( slip1 ); + BIO_free( slip2 ); + SSL_free( c_ssl ); + SSL_free( s_ssl ); + + SSL_CTX_free( c_ctx ); + SSL_CTX_free( s_ctx ); +} +*/ BOOST_AUTO_TEST_SUITE_END()