Skip to content

mingw32 - cryptopp Segmentation fault: CryptoPP::Rijndael::Base::UncheckedSetKey { __m128i temp = _mm_loadu_si128((__m128i *)(void *)(userKey+keylen-16)); } #116

Description

@DD-L
Program received signal SIGSEGV, Segmentation fault.
CryptoPP::Rijndael::Base::UncheckedSetKey (this=0x4b2c888,
    userKey=0x4b2c650 "u\033悡\b\t)'爯\251\341\aJ饅V颲\373\251+\t9紃\266\025鴥+\235\r\001\255\272\r\272 ", keylen=32)
    at rijndael.cpp:231
231                     __m128i temp = _mm_loadu_si128((__m128i *)(void *)(userKey+keylen-16));
(gdb) bt
#0  CryptoPP::Rijndael::Base::UncheckedSetKey (this=0x4b2c888,
    userKey=0x4b2c650 "u\033悡\b\t)'爯\251\341\aJ饅V颲\373\251+\t9紃\266\025+\235\r\001\255\272\r\272 ", keylen=32)
    at rijndael.cpp:231
#1  0x00428300 in CryptoPP::RandomPool::GenerateIntoBufferedTransformation (this=0x4b2c618, target=..., channel="", size=20)
    at randpool.cpp:40
#2  0x00420c0b in CryptoPP::RandomNumberGenerator::GenerateBlock (this=0x4b2c618,
    output=0x4b26c81 "瓠\272\r瓠\272\r瓠\272\r瓠\272\r\272\r\332\071^kK\r2U`\030\330\a\t", size=20) at cryptlib.cpp:339
#3  0x00448669 in CryptoPP::OAEP_Base::Pad (this=<optimized out>, rng=...,
    input=0x4b25ae8 "ABA369F7D2B28A9098A0A26FEB7DC9656326909417\253\253\253\253\253\253\253\253", inputLength=42,
    oaepBlock=0x4b26c81 "\272\r\272\r\272\r\272\r\272\r\332\071^kK\r2U`\030\330\a\t",
    oaepBlockLen=<optimized out>, parameters=...) at oaep.cpp:47
#4  0x0042ff55 in CryptoPP::TF_EncryptorBase::Encrypt (this=<optimized out>, rng=...,
    plaintext=0x4b25ae8 "ABA369F7D2B28A9098A0A26FEB7DC9656326909417\253\253\253\253\253\253\253\253",
    plaintextLength=42,
    ciphertext=0x4b25f20 "\r瓠\272\r瓠\272\r瓠\272\r瓠\272\r瓠\272\r瓠\272\r瓠\272\r瓠\272\r瓠\272\r瓠\272\r瓠\272\r\272\r\272\r\272\r\272\r\272\r\272\r\272\r\272\r\272\r\272\r\272\r\272\r\272\r\272\r\272\r\272\r\272\r\272\r\272\r\272\r\253\253\253\253", <incomplete sequence \253>, parameters=...) at pubkey.cpp:164
#5  0x004d631c in CryptoPP::PK_DefaultEncryptionFilter::Put2 (this=0x4b27fe8, inString=0x0, length=0, messageEnd=-1, blocking=true)
    at cryptlib.cpp:801
#6  0x004d27df in CryptoPP::BufferedTransformation::MessageEnd (this=0x4b27fe8, propagation=-1, blocking=true)
    at ../../../contrib/cryptopp/cryptopp/cryptlib.h:1437
#7  0x004c811c in CryptoPP::SimpleProxyFilter::LastPut (this=0x4b2ca30, inString=0x0, length=0)
    at ../../../contrib/cryptopp/cryptopp/filters.h:905
#8  0x0042615e in CryptoPP::FilterWithBufferedInput::PutMaybeModifiable (this=0x4b2ca30, inString=<optimized out>, length=0,
    messageEnd=-1, blocking=true, modifiable=false) at filters.cpp:437
#9  0x004d47cd in CryptoPP::FilterWithBufferedInput::Put2 (this=0x4b2ca30, inString=0x0, length=0, messageEnd=-1, blocking=true)
    at ../../../contrib/cryptopp/cryptopp/filters.h:339
#10 0x004204f7 in CryptoPP::BufferedTransformation::ChannelPut2 (this=<optimized out>, channel="", begin=0x0, length=0,
    messageEnd=-1, blocking=true) at cryptlib.cpp:470
---Type <return> to continue, or q <return> to quit---
#11 0x00420ea2 in ChannelMessageEnd (blocking=true, propagation=<optimized out>, channel="", this=0x4b2ca30) at cryptlib.h:1908
#12 CryptoPP::BufferedTransformation::TransferMessagesTo2 (this=0x606ef64, target=..., messageCount=@0x606edb8: 0, channel="",
    blocking=true) at cryptlib.cpp:627
#13 0x0042102a in CryptoPP::BufferedTransformation::TransferAllTo2 (this=0x606ef64, target=..., channel="", blocking=true)
    at cryptlib.cpp:668
#14 0x004bd44d in CryptoPP::SourceTemplate<CryptoPP::StringStore>::PumpAll2 (this=0x606ef4c, blocking=true)
    at ../../../contrib/cryptopp/cryptopp/filters.h:1222
#15 0x004e3283 in CryptoPP::Source::PumpAll (this=0x606ef4c) at ../../../contrib/cryptopp/cryptopp/filters.h:1166
#16 0x004e3256 in CryptoPP::Source::SourceInitialize (this=0x606ef4c, pumpAll=true, parameters=...)
    at ../../../contrib/cryptopp/cryptopp/filters.h:1199
#17 0x004b8a72 in CryptoPP::StringSource::StringSource (this=0x606ef4c,
    string=0x4b2c4b4 "ABA369F7D2B28A9098A0A26FEB7DC9656326909417", length=42, pumpAll=true, attachment=0x4b2ca30)
    at ../../../contrib/cryptopp/cryptopp/filters.h:1252
#18 0x0041ddec in crypto::Rsa::encrypt (this=0x4b2c4f8, dest=std::vector of length 0, capacity 0,
    src=0x4b2c4b4 "ABA369F7D2B28A9098A0A26FEB7DC9656326909417", src_len=42) at rsa_crypto.cpp:135
#19 0x0041e5a4 in crypto::Encryptor::encrypt (this=0x606f050, dest=std::vector of length 0, capacity 0,
    src=0x4b2c4b4 "ABA369F7D2B28A9098A0A26FEB7DC9656326909417", src_len=42) at encryptor.cpp:27
#20 0x0040dbff in lproxy::local::session::pack_exchange (this=0x4b25bfc, keysize=@0x606f1ea: 1024,
    public_key="30819D300D06092A864886F70D010101050003818B00308187028181009B7CA78876C3CAA5879C1761730E7D8139A63662DC9E7752DF369BDBB28A168EF61F884709FCE3C71D9582984CB57ED6D36060E556C52433ECDFA1C766CDCF6BABCF40B3BE15D0"...) at session_local.cpp:575
#21 0x004079ad in lproxy::local::session::right_read_handler (this=0x4b25bfc, error=..., bytes_transferred=326,
    lss_reply=std::shared_ptr (count 3, weak 0) 0x4b272c4, __data_right_rest=std::shared_ptr (count 7, weak 0) 0x4b25034,
    __write_data=std::shared_ptr (count 7, weak 0) 0x4b25034) at session_local.cpp:253
#22 0x004edaf1 in boost::_mfi::mf5<void, lproxy::local::session, boost::system::error_code const&, unsigned int, std::shared_ptr<lproxy::local::reply>, std::shared_ptr<std::basic_string<unsigned char, std::char_traits<unsigned char>, std::allocator<unsigned char> > >, std::shared_ptr<std::basic_string<unsigned char, std::char_traits<unsigned char>, std::allocator<unsigned char> > > >::call<std::shared_ptr<lproxy::local::session>, boost::system::error_code const, unsigned int, std::shared_ptr<lproxy::local::reply>, std::shared_ptr<std::basic_string<unsigned char, std::char_traits<unsigned char>, std::allocator<unsigned char> > >, std::shared_ptr<std::basic_string<unsigned char, std::char_traits<unsigned char>, std::allocator<unsigned char> > > > (this=0x606fad4,
---Type <return> to continue, or q <return> to quit---
    u=std::shared_ptr (count 1, weak 1) 0x4b25bfc, b1=..., b2=@0x606f9ac: 326, b3=std::shared_ptr (count 3, weak 0) 0x4b272c4,
    b4=std::shared_ptr (count 7, weak 0) 0x4b25034, b5=std::shared_ptr (count 7, weak 0) 0x4b25034)
    at ../../../contrib/boost/boost_1_57_0/boost/bind/mem_fn_template.hpp:610
#23 0x004edb92 in boost::_mfi::mf5<void, lproxy::local::session, boost::system::error_code const&, unsigned int, std::shared_ptr<lproxy::local::reply>, std::shared_ptr<std::basic_string<unsigned char, std::char_traits<unsigned char>, std::allocator<unsigned char> > >, std::shared_ptr<std::basic_string<unsigned char, std::char_traits<unsigned char>, std::allocator<unsigned char> > > >::operator()<std::shared_ptr<lproxy::local::session> > (this=0x606fad4, u=std::shared_ptr (count 1, weak 1) 0x4b25bfc, a1=..., a2=326,
    a3=std::shared_ptr (count 3, weak 0) 0x4b272c4, a4=std::shared_ptr (count 7, weak 0) 0x4b25034,
    a5=std::shared_ptr (count 7, weak 0) 0x4b25034) at ../../../contrib/boost/boost_1_57_0/boost/bind/mem_fn_template.hpp:625
#24 0x0048bead in boost::_bi::list6<boost::_bi::value<std::shared_ptr<lproxy::local::session> >, boost::arg<1>, boost::arg<2>, boost::_bi::value<std::shared_ptr<lproxy::local::reply> >, boost::_bi::value<std::shared_ptr<std::basic_string<unsigned char, std::char_traits<unsigned char>, std::allocator<unsigned char> > > >, boost::_bi::value<std::shared_ptr<std::basic_string<unsigned char, std::char_traits<unsigned char>, std::allocator<unsigned char> > > > >::operator()<boost::_mfi::mf5<void, lproxy::local::session, boost::system::error_code const&, unsigned int, std::shared_ptr<lproxy::local::reply>, std::shared_ptr<std::basic_string<unsigned char, std::char_traits<unsigned char>, std::allocator<unsigned char> > >, std::shared_ptr<std::basic_string<unsigned char, std::char_traits<unsigned char>, std::allocator<unsigned char> > > >, boost::_bi::list2<boost::system::error_code const&, unsigned int const&> > (
    this=0x606fadc, f=..., a=...) at ../../../contrib/boost/boost_1_57_0/boost/bind/bind.hpp:596
#25 0x0048cc38 in boost::_bi::bind_t<void, boost::_mfi::mf5<void, lproxy::local::session, boost::system::error_code const&, unsigned int, std::shared_ptr<lproxy::local::reply>, std::shared_ptr<std::basic_string<unsigned char, std::char_traits<unsigned char>, std::allocator<unsigned char> > >, std::shared_ptr<std::basic_string<unsigned char, std::char_traits<unsigned char>, std::allocator<unsigned char> > > >, boost::_bi::list6<boost::_bi::value<std::shared_ptr<lproxy::local::session> >, boost::arg<1>, boost::arg<2>, boost::_bi::value<std::shared_ptr<lproxy::local::reply> >, boost::_bi::value<std::shared_ptr<std::basic_string<unsigned char, std::char_traits<unsigned char>, std::allocator<unsigned char> > > >, boost::_bi::value<std::shared_ptr<std::basic_string<unsigned char, std::char_traits<unsigned char>, std::allocator<unsigned char> > > > > >::operator()<boost::system::error_code, unsigned int> (this=0x606fad4,
    a1=..., a2=@0x606fb04: 326) at ../../../contrib/boost/boost_1_57_0/boost/bind/bind_template.hpp:102
#26 0x004a0122 in boost::asio::detail::binder2<boost::_bi::bind_t<void, boost::_mfi::mf5<void, lproxy::local::session, boost::system::error_code const&, unsigned int, std::shared_ptr<lproxy::local::reply>, std::shared_ptr<std::basic_string<unsigned char, std::char_traits<unsigned char>, std::allocator<unsigned char> > >, std::shared_ptr<std::basic_string<unsigned char, std::char_traits<unsigned char>, std::allocator<unsigned char> > > >, boost::_bi::list6<boost::_bi::value<std::shared_ptr<lproxy::local::session> >, boost::arg<---Type <return> to continue, or q <return> to quit---
1>, boost::arg<2>, boost::_bi::value<std::shared_ptr<lproxy::local::reply> >, boost::_bi::value<std::shared_ptr<std::basic_string<unsigned char, std::char_traits<unsigned char>, std::allocator<unsigned char> > > >, boost::_bi::value<std::shared_ptr<std::basic_string<unsigned char, std::char_traits<unsigned char>, std::allocator<unsigned char> > > > > >, boost::system::error_code, unsigned int>::operator() (this=0x606fad4) at ../../../contrib/boost/boost_1_57_0/boost/asio/detail/bind_handler.hpp:127
#27 0x0048fbae in boost::asio::asio_handler_invoke<boost::asio::detail::binder2<boost::_bi::bind_t<void, boost::_mfi::mf5<void, lproxy::local::session, boost::system::error_code const&, unsigned int, std::shared_ptr<lproxy::local::reply>, std::shared_ptr<std::basic_string<unsigned char, std::char_traits<unsigned char>, std::allocator<unsigned char> > >, std::shared_ptr<std::basic_string<unsigned char, std::char_traits<unsigned char>, std::allocator<unsigned char> > > >, boost::_bi::list6<boost::_bi::value<std::shared_ptr<lproxy::local::session> >, boost::arg<1>, boost::arg<2>, boost::_bi::value<std::shared_ptr<lproxy::local::reply> >, boost::_bi::value<std::shared_ptr<std::basic_string<unsigned char, std::char_traits<unsigned char>, std::allocator<unsigned char> > > >, boost::_bi::value<std::shared_ptr<std::basic_string<unsigned char, std::char_traits<unsigned char>, std::allocator<unsigned char> > > > > >, boost::system::error_code, unsigned int> > (function=...) at ../../../contrib/boost/boost_1_57_0/boost/asio/handler_invoke_hook.hpp:69
#28 0x0047be48 in boost_asio_handler_invoke_helpers::invoke<boost::asio::detail::binder2<boost::_bi::bind_t<void, boost::_mfi::mf5<void, lproxy::local::session, boost::system::error_code const&, unsigned int, std::shared_ptr<lproxy::local::reply>, std::shared_ptr<std::basic_string<unsigned char, std::char_traits<unsigned char>, std::allocator<unsigned char> > >, std::shared_ptr<std::basic_string<unsigned char, std::char_traits<unsigned char>, std::allocator<unsigned char> > > >, boost::_bi::list6<boost::_bi::value<std::shared_ptr<lproxy::local::session> >, boost::arg<1>, boost::arg<2>, boost::_bi::value<std::shared_ptr<lproxy::local::reply> >, boost::_bi::value<std::shared_ptr<std::basic_string<unsigned char, std::char_traits<unsigned char>, std::allocator<unsigned char> > > >, boost::_bi::value<std::shared_ptr<std::basic_string<unsigned char, std::char_traits<unsigned char>, std::allocator<unsigned char> > > > > >, boost::system::error_code, unsigned int>, boost::_bi::bind_t<void, boost::_mfi::mf5<void, lproxy::local::session, boost::system::error_code const&, unsigned int, std::shared_ptr<lproxy::local::reply>, std::shared_ptr<std::basic_string<unsigned char, std::char_traits<unsigned char>, std::allocator<unsigned char> > >, std::shared_ptr<std::basic_string<unsigned char, std::char_traits<unsigned char>, std::allocator<unsigned char> > > >, boost::_bi::list6<boost::_bi::value<std::shared_ptr<lproxy::local::session> >, boost::arg<1>, boost::arg<2>, boost::_bi::value<std::shared_ptr<lproxy::local::reply> >, boost::_bi::value<std::shared_ptr<std::basic_string<unsigned char, std::char_traits<unsigned char>, std::allocator<unsigned char> > > >, boost::_bi::value<std::shared_ptr<std::basic_string<unsigned char, std::char_traits<unsigned char>, std::allocator<unsigned char> > > > > > > (function=..., context=...)
    at ../../../contrib/boost/boost_1_57_0/boost/asio/detail/handler_invoke_helpers.hpp:37
#29 0x0049b5e0 in boost::asio::detail::win_iocp_socket_recv_op<boost::array<boost::asio::mutable_buffer, 5u>, boost::_bi::bind_t<void, boost::_mfi::mf5<void, lproxy::local::session, boost::system::error_code const&, unsigned int, std::shared_ptr<lproxy::local::reply---Type <return> to continue, or q <return> to quit---
>, std::shared_ptr<std::basic_string<unsigned char, std::char_traits<unsigned char>, std::allocator<unsigned char> > >, std::shared_ptr<std::basic_string<unsigned char, std::char_traits<unsigned char>, std::allocator<unsigned char> > > >, boost::_bi::list6<boost::_bi::value<std::shared_ptr<lproxy::local::session> >, boost::arg<1>, boost::arg<2>, boost::_bi::value<std::shared_ptr<lproxy::local::reply> >, boost::_bi::value<std::shared_ptr<std::basic_string<unsigned char, std::char_traits<unsigned char>, std::allocator<unsigned char> > > >, boost::_bi::value<std::shared_ptr<std::basic_string<unsigned char, std::char_traits<unsigned char>, std::allocator<unsigned char> > > > > > >::do_complete (owner=0x4b25b78, base=0x4b26e58, result_ec=..., bytes_transferred=326)
    at ../../../contrib/boost/boost_1_57_0/boost/asio/detail/win_iocp_socket_recv_op.hpp:97
#30 0x00498ea4 in boost::asio::detail::win_iocp_operation::complete (this=0x4b26e58, owner=..., ec=..., bytes_transferred=326)
    at ../../../contrib/boost/boost_1_57_0/boost/asio/detail/win_iocp_operation.hpp:46
#31 0x0049a0e1 in boost::asio::detail::win_iocp_io_service::do_one (this=0x4b25b78, block=true, ec=...)
    at ../../../contrib/boost/boost_1_57_0/boost/asio/detail/impl/win_iocp_io_service.ipp:405
#32 0x00499afc in boost::asio::detail::win_iocp_io_service::run (this=0x4b25b78, ec=...)
    at ../../../contrib/boost/boost_1_57_0/boost/asio/detail/impl/win_iocp_io_service.ipp:164
#33 0x0048e29e in boost::asio::io_service::run (
    this=0x559558 <lproxy::lss_server<lproxy::local::session>::io_service_right()::io_service>)
    at ../../../contrib/boost/boost_1_57_0/boost/asio/impl/io_service.ipp:59
#34 0x004b0ba2 in lproxy::lss_server<lproxy::local::session>::handle_thread_right (io_service=...)
    at ../../../src/core/lss/lss_server.h:109
#35 0x0051db02 in std::_Bind_simple<void (*(std::reference_wrapper<boost::asio::io_service>))(boost::asio::io_service&)>::_M_invoke<0u>(std::_Index_tuple<0u>) (this=0x4b25a80) at D:/Qt/QtDev/Tools/mingw492_32/i686-w64-mingw32/include/c++/functional:1700
#36 0x0051db82 in std::_Bind_simple<void (*(std::reference_wrapper<boost::asio::io_service>))(boost::asio::io_service&)>::operator()() (this=0x4b25a80) at D:/Qt/QtDev/Tools/mingw492_32/i686-w64-mingw32/include/c++/functional:1688
#37 0x0052b5ee in std::thread::_Impl<std::_Bind_simple<void (*(std::reference_wrapper<boost::asio::io_service>))(boost::asio::io_service&)> >::_M_run() (this=0x4b25a74) at D:/Qt/QtDev/Tools/mingw492_32/i686-w64-mingw32/include/c++/thread:115
#38 0x6fcb8c4f in libstdc++-6!execute_native_thread_routine () from D:\Qt\QtDev\5.5\mingw492_32\bin\libstdc++-6.dll
#39 0x64944f11 in pthread_create_wrapper () from D:\Qt\QtDev\Tools\mingw492_32\opt\bin\libwinpthread-1.dll
#40 0x749771e6 in msvcrt!_beginthreadex () from C:\WINDOWS\SYSTEM32\msvcrt.dll
#41 0x749772b1 in msvcrt!_endthreadex () from C:\WINDOWS\SYSTEM32\msvcrt.dll
#42 0x747f38f4 in KERNEL32!BaseThreadInitThunk () from C:\WINDOWS\SYSTEM32\kernel32.dll
#43 0x775f5de3 in ntdll!RtlUnicodeStringToInteger () from C:\WINDOWS\SYSTEM32\ntdll.dll
#44 0x04b26560 in ?? ()
#45 0x775f5dae in ntdll!RtlUnicodeStringToInteger () from C:\WINDOWS\SYSTEM32\ntdll.dll
#46 0xffffffff in ?? ()
#47 0x7761b7ea in ntdll!RtlCaptureContext () from C:\WINDOWS\SYSTEM32\ntdll.dll
#48 0x00000000 in ?? ()
// 组装 exchange
const request session::pack_exchange(const keysize_t& keysize, 
        const data_t& public_key) {


{
    std::string k = "30819D300D06092A864886F70D010101050003818B00308187028181009EFD7A5CFBF51D88C6F98588BBBCA26A6FB4E35657094E024B6CE79582EFE6DCCCE8954D416BBD57D4DC0B81320FD97DBCBB7CAE8BFB4B3827AC99210E15EC9062C32E7337905B92866A93E689A8E9940148DB08C5964CEF0272C16CFBB8A2E403A5DB4DD142280E8C3FCD1165FCB043C256AE0A951F4E3C8153E6891DD31EED020111";

    using namespace crypto;
    std::string p = "ABA369F7D2B28A9098A0A26FEB7DC9656326909417";
    Encryptor e_test(new Rsa(RsaKey::bit1024, (const uint8_t*)&k[0], k.size()));
    std::vector<uint8_t> cip;
    e_test.encrypt(cip, (const uint8_t*)&p[0], p.size());
    std::string msg = _debug_format_data(cip, int(), ' ', std::hex);
    std::cout << msg << std::endl;
}
...

但是在 test 用例中同样的的代码就没问题:

void test() {

    std::cout << "\n\n``````````````````````````````````````\n\n\n";
    std::string k = "30819D300D06092A864886F70D010101050003818B00308187028181009EFD7A5CFBF51D88C6F98588BBBCA26A6FB4E35657094E024B6CE79582EFE6DCCCE8954D416BBD57D4DC0B81320FD97DBCBB7CAE8BFB4B3827AC99210E15EC9062C32E7337905B92866A93E689A8E9940148DB08C5964CEF0272C16CFBB8A2E403A5DB4DD142280E8C3FCD1165FCB043C256AE0A951F4E3C8153E6891DD31EED020111";
    std::string p = "ABA369F7D2B28A9098A0A26FEB7DC9656326909417";
    Encryptor e_test(new Rsa(RsaKey::bit1024, (const uint8_t*)&k[0], k.size()));
    std::vector<uint8_t> cip;
    e_test.encrypt(cip, (const uint8_t*)&p[0], p.size());
    print_hex(cip, cip.size());
    std::cout << "\n\n``````````````````````````````````````\n\n\n";
}

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions