1. 09 Oct, 2015 5 commits
  2. 07 Oct, 2015 1 commit
    • Gregory Maxwell's avatar
      Test LowS in standardness, removes nuisance malleability vector. · e59b07f2
      Gregory Maxwell authored
      This adds SCRIPT_VERIFY_LOW_S to STANDARD_SCRIPT_VERIFY_FLAGS which
       will make the node require the canonical 'low-s' encoding for
       ECDSA signatures when relaying or mining.
      
      Consensus behavior is unchanged.
      
      The rational is explained in a81cd968:
       Absent this kind of test ECDSA is not a strong signature as given
       a valid signature {r, s} both that value and {r, -s mod n} are valid.
       These two encodings have different hashes allowing third parties a
       vector to change users txids.  These attacks are avoided by picking
       a particular form as canonical and rejecting the other form(s); in
       the of the LOW_S rule, the smaller of the two possible S values is
       used.
      
      If widely deployed this change would eliminate the last remaining
       known vector for nuisance malleability on boring SIGHASH_ALL
       p2pkh transactions.  On the down-side it will block most
       transactions made by sufficiently out of date software.
      
      Unlike the other avenues to change txids on boring transactions this
       one was randomly violated by all deployed bitcoin software prior to
       its discovery.  So, while other malleability vectors where made
       non-standard as soon as they were discovered, this one has remained
       permitted.  Even BIP62 did not propose applying this rule to
       old version transactions, but conforming implementations have become
       much more common since BIP62 was initially written.
      
      Bitcoin Core has produced compatible signatures since a28fb70e in
       September 2013, but this didn't make it into a release until 0.9
       in March 2014; Bitcoinj has done so for a similar span of time.
       Bitcoinjs and electrum have been more recently updated.
      
      This does not replace the need for BIP62 or similar, as miners can
       still cooperate to break transactions.  Nor does it replace the
       need for wallet software to handle malleability sanely[1]. This
       only eliminates the cheap and irritating DOS attack.
      
      [1] On the Malleability of Bitcoin Transactions
      Marcin Andrychowicz, Stefan Dziembowski, Daniel Malinowski, Łukasz Mazurek
      http://fc15.ifca.ai/preproceedings/bitcoin/paper_9.pdf
      
      Rebased-From: b196b685
      Github-Pull: #6769
      e59b07f2
  3. 06 Oct, 2015 1 commit
    • Wladimir J. van der Laan's avatar
      Merge pull request #6750 · 3391f0d3
      Wladimir J. van der Laan authored
      5094a81 Move recentRejects initialization to top of InitBlockIndex (Wladimir J. van der Laan)
      ec9b6c3 Keep track of recently rejected transactions (Peter Todd)
      6eed52e Only use randomly created nonces in CRollingBloomFilter. (Pieter Wuille)
      83671ef Make CRollingBloomFilter set nTweak for you (Peter Todd)
      25cf122 Reuse vector hashing code for uint256 (Pieter Wuille)
      2983fe0 Add uint256 support to CRollingBloomFilter (Peter Todd)
      3391f0d3
  4. 02 Oct, 2015 6 commits
    • Wladimir J. van der Laan's avatar
      Move recentRejects initialization to top of InitBlockIndex · 247167b2
      Wladimir J. van der Laan authored
      This avoids that premature return in the condition that a new chain is initialized
      results in NULL pointer errors due to recentReject not being constructed.
      
      Also add assertions where it is used.
      
      (cherry picked from commit a8d0407c)
      247167b2
    • Peter Todd's avatar
      Keep track of recently rejected transactions · 6265239a
      Peter Todd authored
      Nodes can have divergent policies on which transactions they will accept
      and relay.  This can cause you to repeatedly request and reject the same
      tx after its inved to you from various peers which have accepted it.
      Here we add rolling bloom filter to keep track of such rejections,
      clearing the filter every time the chain tip changes.
      
      Credit goes to Alex Morcos, who created the patch that this code is
      based on.
      
      Original code by Peter Todd. Refactored to not construct the
      filter at startup time by Pieter Wuille.
      
      (cherry picked from commit 0847d9cb)
      6265239a
    • Pieter Wuille's avatar
      Only use randomly created nonces in CRollingBloomFilter. · b3e63843
      Pieter Wuille authored
      (cherry picked from commit d741371d)
      b3e63843
    • Peter Todd's avatar
      Make CRollingBloomFilter set nTweak for you · acc06bbf
      Peter Todd authored
      While CBloomFilter is usually used with an explicitly set nTweak,
      CRollingBloomFilter is only used internally. Requiring every caller to
      set nTweak is error-prone and redundant; better to have the class handle
      that for you with a high-quality randomness source.
      
      Additionally when clearing the filter it makes sense to change nTweak as
      well to recover from a bad setting, e.g. due to insufficient randomness
      at initialization, so the clear() method is replaced by a reset() method
      that sets a new, random, nTweak value.
      
      (cherry picked from commit d2d7ee0e)
      acc06bbf
    • Pieter Wuille's avatar
      Reuse vector hashing code for uint256 · 72cdad28
      Pieter Wuille authored
      (cherry picked from commit a3d65fed)
      72cdad28
    • Peter Todd's avatar
      Add uint256 support to CRollingBloomFilter · eddc2685
      Peter Todd authored
      (cherry picked from commit bbe41088)
      eddc2685
  5. 29 Sep, 2015 1 commit
  6. 23 Sep, 2015 1 commit
    • Wladimir J. van der Laan's avatar
      Merge pull request #6703 · 3b2dd3d8
      Wladimir J. van der Laan authored
      45bfa13 PARTIAL: typofixes (found by misspell_fixer) (Veres Lajos)
      21c406e add support for miniupnpc api version 14 (Pavel Vasin)
      13bd5a7 rpc-tests: re-enable rpc-tests for Windows (Cory Fields)
      ccc4ad6 net: Set SO_REUSEADDR for Windows too (Cory Fields)
      1f6772e add unit test for CNetAddr::GetGroup. (Alex Morcos)
      13642a5 Fix masking of irrelevant bits in address groups. (Alex Morcos)
      6b51b9b Replace boost::reverse_lock with our own. (Casey Rodarmor)
      626c5e6 Make sure we re-acquire lock if a task throws (Casey Rodarmor)
      4877053 Add missing files to files.md (fanquake)
      f171fee Handle leveldb::DestroyDB() errors on wipe failure (Adam Weiss)
      c5b89fe Fix race condition on test node shutdown (Casey Rodarmor)
      4a37410 Handle no chain tip available in InvalidChainFound() (Ross Nicoll)
      f6d29a6 Use unique name for AlertNotify tempfile (Casey Rodarmor)
      e6adac7 Delay initial pruning until after wallet init (Adam Weiss)
      e0020d4 Make sure LogPrint strings are line-terminated (J Ross Nicoll)
      7ff9...
      3b2dd3d8
  7. 22 Sep, 2015 24 commits
  8. 20 Aug, 2015 1 commit