diff --git a/build_scripts/Debian+Ubuntu/changelog b/build_scripts/Debian+Ubuntu/changelog index 8669f307d..dca3c62ff 100644 --- a/build_scripts/Debian+Ubuntu/changelog +++ b/build_scripts/Debian+Ubuntu/changelog @@ -1,5 +1,30 @@ retroshare06 (0.6.0-1.XXXXXX~YYYYYY) YYYYYY; urgency=low + 7914aeb csoler Sat, 30 Apr 2016 17:33:47 -0400 use RsTemporaryMemory in signature verification + be7e87c csoler Sat, 30 Apr 2016 17:25:24 -0400 use RsTemporaryMemory in signature verification + 01605e5 csoler Sat, 30 Apr 2016 11:19:21 -0400 updated description f packet slicing in comments section of pqistreamer + 1f7a94d csoler Sat, 30 Apr 2016 11:13:51 -0400 fixed bug causing crash in pqistreamer + 0bd6670 csoler Sat, 30 Apr 2016 09:47:21 -0400 Merge pull request #362 from zeners/master + 0a6ae55 zeners Sat, 30 Apr 2016 14:21:09 +0200 webui: redefined building webui + baf9404 csoler Fri, 29 Apr 2016 20:09:48 -0400 Merge pull request #360 from csoler/v0.6-RTT3 + 4bdd464 csoler Fri, 29 Apr 2016 18:53:25 -0400 removed a few debug output and timer measurement + 6d2bfcf csoler Fri, 29 Apr 2016 18:52:58 -0400 restored average kicking rate to a more reasonnable value. To be tested (for to + 3bc3989 csoler Fri, 29 Apr 2016 18:41:10 -0400 removed debug info for pqistreamer + 5ab9aed csoler Fri, 29 Apr 2016 18:40:28 -0400 added placeholder service ID for packet slicing probe + 654e0fc csoler Fri, 29 Apr 2016 17:53:21 -0400 added missing call to SSL_pending, which caused decrypted data to wait in the S + a443064 csoler Tue, 26 Apr 2016 23:42:44 -0400 various changes to measure RTTs more accurately + 87764ab csoler Tue, 26 Apr 2016 21:23:19 -0400 removed debug info in pqistreamer + 153db5c csoler Tue, 26 Apr 2016 09:22:24 -0400 added on/off mechanism for packet slicing to ensure packward compatibility + 3b68585 csoler Mon, 25 Apr 2016 23:37:02 -0400 improved/simplified slicing protocol + dd81ce3 csoler Mon, 25 Apr 2016 22:50:41 -0400 using BinToHex to display mem blocks in pqistreamer debug + 18e9e1c csoler Sun, 24 Apr 2016 21:29:55 -0400 moerged with upstream/master + f629575 csoler Sun, 24 Apr 2016 21:18:44 -0400 fixed a few bugs in packet slicing in pqiQoS + a2c11f9 csoler Sun, 24 Apr 2016 13:43:34 -0400 added packet reconstruction and deserialising + + -- Cyril Soler Sat, 30 Apr 2016 18:00:00 -0500 + +retroshare06 (0.6.0-1.20160424.0d84a558~trusty) trusty; urgency=low + 0dc43c3 csoler Sat, 23 Apr 2016 08:29:53 -0400 Merge pull request #338 from Nyfor/master 5e94c77 Nyfor Mon, 4 Apr 2016 12:07:09 +0200 Fixed compilation for Clang. d696f72 csoler Fri, 22 Apr 2016 20:38:07 -0400 fixed compilation diff --git a/libretroshare/src/gxs/gxssecurity.cc b/libretroshare/src/gxs/gxssecurity.cc index e9dfc5567..7440a9b40 100644 --- a/libretroshare/src/gxs/gxssecurity.cc +++ b/libretroshare/src/gxs/gxssecurity.cc @@ -44,13 +44,12 @@ static RsGxsId getRsaKeyFingerprint(RSA *pubkey) int lenn = BN_num_bytes(pubkey -> n); int lene = BN_num_bytes(pubkey -> e); - unsigned char *tmp = new unsigned char[lenn+lene]; + RsTemporaryMemory tmp(lenn+lene) ; BN_bn2bin(pubkey -> n, tmp); BN_bn2bin(pubkey -> e, &tmp[lenn]); - Sha1CheckSum s = RsDirUtil::sha1sum(tmp,lenn+lene) ; - delete[] tmp ; + Sha1CheckSum s = RsDirUtil::sha1sum(tmp,lenn+lene) ; // Copy first CERTSIGNLEN bytes from the hash of the public modulus and exponent // We should not be using strings here, but a real ID. To be done later. @@ -363,35 +362,39 @@ bool GxsSecurity::validateNxsMsg(const RsNxsMsg& msg, const RsTlvKeySignature& s RsGxsMessageId msgId = msgMeta.mMsgId, origMsgId = msgMeta.mOrigMsgId; msgMeta.mOrigMsgId.clear(); msgMeta.mMsgId.clear(); + int signOk = 0 ; - uint32_t metaDataLen = msgMeta.serial_size(); - uint32_t allMsgDataLen = metaDataLen + msg.msg.bin_len; - char* metaData = new char[metaDataLen]; - char* allMsgData = new char[allMsgDataLen]; // msgData + metaData + { + EVP_PKEY *signKey = EVP_PKEY_new(); + EVP_PKEY_assign_RSA(signKey, rsakey); + EVP_MD_CTX *mdctx = EVP_MD_CTX_create(); - msgMeta.serialise(metaData, &metaDataLen); + uint32_t metaDataLen = msgMeta.serial_size(); + uint32_t allMsgDataLen = metaDataLen + msg.msg.bin_len; - // copy msg data and meta in allmsgData buffer - memcpy(allMsgData, msg.msg.bin_data, msg.msg.bin_len); - memcpy(allMsgData+(msg.msg.bin_len), metaData, metaDataLen); + RsTemporaryMemory metaData(metaDataLen) ; + RsTemporaryMemory allMsgData(allMsgDataLen) ; - delete[] metaData ; + if(!metaData || !allMsgData) + return false ; + + msgMeta.serialise(metaData, &metaDataLen); - EVP_PKEY *signKey = EVP_PKEY_new(); - EVP_PKEY_assign_RSA(signKey, rsakey); + // copy msg data and meta in allmsgData buffer + memcpy(allMsgData, msg.msg.bin_data, msg.msg.bin_len); + memcpy(allMsgData+(msg.msg.bin_len), metaData, metaDataLen); - /* calc and check signature */ - EVP_MD_CTX *mdctx = EVP_MD_CTX_create(); + /* calc and check signature */ - EVP_VerifyInit(mdctx, EVP_sha1()); - EVP_VerifyUpdate(mdctx, allMsgData, allMsgDataLen); - int signOk = EVP_VerifyFinal(mdctx, sigbuf, siglen, signKey); + EVP_VerifyInit(mdctx, EVP_sha1()); + EVP_VerifyUpdate(mdctx, allMsgData, allMsgDataLen); - delete[] allMsgData ; + signOk = EVP_VerifyFinal(mdctx, sigbuf, siglen, signKey); - /* clean up */ - EVP_PKEY_free(signKey); - EVP_MD_CTX_destroy(mdctx); + /* clean up */ + EVP_PKEY_free(signKey); + EVP_MD_CTX_destroy(mdctx); + } msgMeta.mOrigMsgId = origMsgId; msgMeta.mMsgId = msgId; diff --git a/libretroshare/src/pqi/pqistreamer.cc b/libretroshare/src/pqi/pqistreamer.cc index acbaffcb7..3cfa64de5 100644 --- a/libretroshare/src/pqi/pqistreamer.cc +++ b/libretroshare/src/pqi/pqistreamer.cc @@ -925,7 +925,10 @@ continue_packet: #ifdef DEBUG_PACKET_SLICING std::cerr << "Inputing partial packet " << RsUtil::BinToHex((char*)block,8) << std::endl; #endif - pkt = addPartialPacket(block,pktlen,slice_packet_id,is_packet_starting,is_packet_ending) ; + uint32_t packet_length = 0 ; + pkt = addPartialPacket(block,pktlen,slice_packet_id,is_packet_starting,is_packet_ending,packet_length) ; + + pktlen = packet_length ; } else pkt = mRsSerialiser->deserialise(block, &pktlen); @@ -968,7 +971,7 @@ continue_packet: return 0; } -RsItem *pqistreamer::addPartialPacket(const void *block,uint32_t len,uint32_t slice_packet_id,bool is_packet_starting,bool is_packet_ending) +RsItem *pqistreamer::addPartialPacket(const void *block, uint32_t len, uint32_t slice_packet_id, bool is_packet_starting, bool is_packet_ending, uint32_t &total_len) { #ifdef DEBUG_PACKET_SLICING std::cerr << "Receiving partial packet. size=" << len << ", ID=" << std::hex << slice_packet_id << std::dec << ", starting:" << is_packet_starting << ", ending:" << is_packet_ending ; @@ -1040,6 +1043,7 @@ RsItem *pqistreamer::addPartialPacket(const void *block,uint32_t len,uint32_t sl #endif RsItem *item = mRsSerialiser->deserialise(rec.mem, &rec.size); + total_len = rec.size ; free(rec.mem) ; mPartialPackets.erase(it) ; return item ; diff --git a/libretroshare/src/pqi/pqistreamer.h b/libretroshare/src/pqi/pqistreamer.h index b50244622..ae94c9c1a 100644 --- a/libretroshare/src/pqi/pqistreamer.h +++ b/libretroshare/src/pqi/pqistreamer.h @@ -164,7 +164,7 @@ class pqistreamer: public PQInterface bool mAcceptsPacketSlicing ; time_t mLastSentPacketSlicingProbe ; void locked_addTrafficClue(const RsItem *pqi, uint32_t pktsize, std::list &lst); - RsItem *addPartialPacket(const void *block, uint32_t len, uint32_t slice_packet_id,bool packet_starting,bool packet_ending); + RsItem *addPartialPacket(const void *block, uint32_t len, uint32_t slice_packet_id,bool packet_starting,bool packet_ending,uint32_t& total_len); std::map mPartialPackets ; }; diff --git a/libretroshare/src/util/rsmemory.cc b/libretroshare/src/util/rsmemory.cc index 46ffd4a58..6aab9dfef 100644 --- a/libretroshare/src/util/rsmemory.cc +++ b/libretroshare/src/util/rsmemory.cc @@ -13,7 +13,7 @@ void *rs_malloc(size_t size) if(size > SAFE_MEMALLOC_THRESHOLD) { - std::cerr << "(EE) Memory allocation error. A chunk of size 0 was requested. Callstack:" << std::endl; + std::cerr << "(EE) Memory allocation error. A chunk of size larger than " << SAFE_MEMALLOC_THRESHOLD << " was requested. Callstack:" << std::endl; print_stacktrace() ; return NULL ; }