aboutsummaryrefslogtreecommitdiff
path: root/src/key.h
Commit message (Collapse)AuthorAgeFilesLines
* Merge #13666: Always create signatures with Low R valuesWladimir J. van der Laan2018-08-131-1/+1
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | e306be742932d4ea5aca0ea4768e54b2fc3dc6a0 Use 72 byte dummy signatures when watching only inputs may be used (Andrew Chow) 48b1473c898129a99212e2db36c61cf93625ea17 Use 71 byte signature for DUMMY_SIGNATURE_CREATOR (Andrew Chow) 18dfea0dd082af18dfb02981b7ee1cd44d514388 Always create 70 byte signatures with low R values (Andrew Chow) Pull request description: When creating signatures for transactions, always make one which has a 32 byte or smaller R and 32 byte or smaller S value. This results in signatures that are always less than 71 bytes (32 byte R + 32 byte S + 6 bytes DER + 1 byte sighash) with low R values. In most cases, the signature will be 71 bytes. Because R is not mutable in the same way that S is, a low R value can only be found by trying different nonces. RFC 6979 for deterministic nonce generation has the option to specify additional entropy, so we simply use that and add a uin32_t counter which we increment in order to try different nonces. Nonces are sill deterministically generated as the nonce used will the be the first one where the counter results in a nonce that results in a low R value. Because different nonces need to be tried, time to produce a signature does increase. On average, it takes twice as long to make a signature as two signatures need to be created, on average, to find one with a low R. Having a fixed size signature makes size calculations easier and also saves half a byte of transaction size, on average. DUMMY_SIGNATURE_CREATOR has been modified to produce 71 byte dummy signatures instead of 72 byte signatures. Tree-SHA512: 3cd791505126ce92da7c631856a97ba0b59e87d9c132feff6e0eef1dc47768e81fbb38bfbe970371bedf9714b7f61a13a5fe9f30f962c81734092a4d19a4ef33
| * Always create 70 byte signatures with low R valuesAndrew Chow2018-08-091-1/+1
| | | | | | | | | | | | | | | | | | | | | | When extra entropy is not specified by the caller, CKey::Sign will now always create a signature that has a low R value and is at most 70 bytes. The resulting signature on the stack will be 71 bytes when the sighash byte is included. Using low R signatures means that the resulting DER encoded signature will never need to have additional padding to account for high R values.
* | Update copyright headers to 2018DrahtBot2018-07-271-1/+1
|/
* scripted-diff: Rename master key to seedJohn Newbery2018-05-191-1/+1
| | | | | | | | | | | | | | | | -BEGIN VERIFY SCRIPT- ren() { git grep -l "\<$1\>" 'src/*.cpp' 'src/*.h' test | xargs sed -i "s:\<$1\>:$2:g"; } ren GenerateNewHDMasterKey GenerateNewSeed ren DeriveNewMasterHDKey DeriveNewSeed ren SetHDMasterKey SetHDSeed ren hdMasterKeyID hd_seed_id ren masterKeyID seed_id ren SetMaster SetSeed ren hdmasterkeyid hdseedid ren hdmaster hdseed -END VERIFY SCRIPT-
* Make CKey::Load references constRussell Yanofsky2018-01-231-1/+1
| | | | | No change in behavior, this just prevents CKey::Load arguments from looking like outputs.
* Increment MIT Licence copyright header year on files modified in 2017Akira Takizawa2018-01-031-1/+1
|
* Merge #10657: Utils: Improvements to ECDSA key-handling codeWladimir J. van der Laan2017-12-201-11/+17
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 63179d0 Scope the ECDSA constant sizes to CPubKey / CKey classes (Jack Grigg) 1ce9f0a Ensure that ECDSA constant sizes are correctly-sized (Jack Grigg) 48abe78 Remove redundant `= 0` initialisations (Jack Grigg) 17fa391 Specify ECDSA constant sizes as constants (Jack Grigg) e4a1086 Update Debian copyright list (Jack Grigg) e181dbe Add comments (Jack Grigg) a3603ac Fix potential overflows in ECDSA DER parsers (Jack Grigg) Pull request description: Mostly trivial, but includes fixes to potential overflows in the ECDSA DER parsers. Cherry-picked from Zcash PR https://github.com/zcash/zcash/pull/2335 Tree-SHA512: 8fcbd51b0bd6723e5d33fa5d592f7cb68ed182796a9b837ecc8217991ad69d6c970258617dc00eb378c8caa4cec5d6b304d9d2c066acd40cda98e4da68e0caa4
| * Scope the ECDSA constant sizes to CPubKey / CKey classesJack Grigg2017-10-041-10/+14
| |
| * Specify ECDSA constant sizes as constantsJack Grigg2017-07-171-5/+7
| |
* | scripted-diff: Replace #include "" with #include <> (ryanofsky)MeshCollider2017-11-161-4/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | -BEGIN VERIFY SCRIPT- for f in \ src/*.cpp \ src/*.h \ src/bench/*.cpp \ src/bench/*.h \ src/compat/*.cpp \ src/compat/*.h \ src/consensus/*.cpp \ src/consensus/*.h \ src/crypto/*.cpp \ src/crypto/*.h \ src/crypto/ctaes/*.h \ src/policy/*.cpp \ src/policy/*.h \ src/primitives/*.cpp \ src/primitives/*.h \ src/qt/*.cpp \ src/qt/*.h \ src/qt/test/*.cpp \ src/qt/test/*.h \ src/rpc/*.cpp \ src/rpc/*.h \ src/script/*.cpp \ src/script/*.h \ src/support/*.cpp \ src/support/*.h \ src/support/allocators/*.h \ src/test/*.cpp \ src/test/*.h \ src/wallet/*.cpp \ src/wallet/*.h \ src/wallet/test/*.cpp \ src/wallet/test/*.h \ src/zmq/*.cpp \ src/zmq/*.h do base=${f%/*}/ relbase=${base#src/} sed -i "s:#include \"\(.*\)\"\(.*\):if test -e \$base'\\1'; then echo \"#include <\"\$relbase\"\\1>\\2\"; else echo \"#include <\\1>\\2\"; fi:e" $f done -END VERIFY SCRIPT-
* | Remove some unused functions and methodsPieter Wuille2017-09-211-5/+0
| | | | | | | | | | | | | | In the case of CKey's destructor, it seems to have been an oversight in f4d1fc259 not to delete it. At this point, it results in the move constructors/assignment operators for CKey being deleted, which may have a performance impact.
* | Add length check for CExtKey deserializationJonas Schnelli2017-08-171-0/+2
|/
* Remove unused C++ code not covered by unit testspracticalswift2017-04-261-3/+0
|
* Trivial: Fix typo in key.h commentMichael Goldstein2017-03-181-1/+1
|
* Increment MIT Licence copyright header year on files modified in 2016isle29832016-12-311-1/+1
| | | | | | Edited via: $ contrib/devtools/copyright_header.py update .
* Get rid of nType and nVersionPieter Wuille2016-11-071-2/+2
| | | | | | | | | | | Remove the nType and nVersion as parameters to all serialization methods and functions. There is only one place where it's read and has an impact (in CAddress), and even there it does not impact any of the recursively invoked serializers. Instead, the few places that need nType or nVersion are changed to read it directly from the stream object, through GetType() and GetVersion() methods which are added to all stream classes.
* wallet: Get rid of LockObject and UnlockObject calls in key.hWladimir J. van der Laan2016-10-191-18/+9
| | | | | | | | | | | | Replace these with vectors allocated from the secure allocator. This avoids mlock syscall churn on stack pages, as well as makes it possible to get rid of these functions. Please review this commit and the previous one carefully that no `sizeof(vectortype)` remains in the memcpys and memcmps usage (ick!), and `.data()` or `&vec[x]` is used as appropriate instead of &vec.
* Merge #8321: [trivial] Switched constants to sizeof()Wladimir J. van der Laan2016-07-281-12/+16
|\ | | | | | | fbc6070 [trivial] Switched constants to sizeof() (Thomas Snider)
| * [trivial] Switched constants to sizeof()Thomas Snider2016-07-181-12/+16
| |
* | remove outdated legacy codelizhi2016-07-241-3/+0
|/ | | CheckSignatureElement is not used,it be replaced by eccrypto::CheckSignatureElement.
* add bip32 pubkey serializationJonas Schnelli2016-04-141-2/+19
| | | | CExtPubKey should be serializable like CPubKey
* Bump copyright headers to 2015MarcoFalke2015-12-131-1/+1
|
* Merge pull request #6034Wladimir J. van der Laan2015-05-061-6/+4
|\ | | | | | | | | a574899 chaincodes: abstract away more chaincode behavior [squashme] replace struct CCainCode with a typedef uint256 ChainCode (Cory Fields) 8cf1485 Abstract chaincodes into CChainCode (Pieter Wuille)
| * chaincodes: abstract away more chaincode behaviorCory Fields2015-05-061-3/+3
| | | | | | | | [squashme] replace struct CCainCode with a typedef uint256 ChainCode
| * Abstract chaincodes into CChainCodePieter Wuille2015-05-021-5/+3
| | | | | | | | | | | | # Conflicts: # src/key.cpp # src/key.h
* | Update key.cpp to use new libsecp256k1Pieter Wuille2015-05-041-1/+7
|/ | | | | | | | | | | | | | | libsecp256k1's API changed, so update key.cpp to use it. Libsecp256k1 now has explicit context objects, which makes it completely thread-safe. In turn, keep an explicit context object in key.cpp, which is explicitly initialized destroyed. This is not really pretty now, but it's more efficient than the static initialized object in key.cpp (which made for example bitcoin-tx slow, as for most of its calls, libsecp256k1 wasn't actually needed). This also brings in the new blinding support in libsecp256k1. By passing in a random seed, temporary variables during the elliptic curve computations are altered, in such a way that if an attacker does not know the blind, observing the internal operations leaks less information about the keys used. This was implemented by Greg Maxwell.
* Switch test case signing to RFC6979 extra entropyPieter Wuille2015-03-271-2/+1
| | | | | Instead of manually tweaking the deterministic nonce post-generation, pass the test case number in as extra entropy to RFC6979.
* allocators: split allocators and pagelockerCory Fields2015-03-201-1/+1
| | | | | Pagelocker is only needed for secure (usually wallet) operations, so don't make the zero-after-free allocator depend on it.
* Added "Core" to copyright headerssandakersmann2014-12-191-1/+1
| | | | | Github-Pull: #5494 Rebased-From: 15de949bb9277e442302bdd8dee299a8d6deee60
* Merge pull request #5227Wladimir J. van der Laan2014-12-011-2/+6
|\ | | | | | | | | | | | | | | | | 4cdaa95 Resize after succesful result (Pieter Wuille) 9d8604f Header define style cleanups (Pieter Wuille) a53fd41 Deterministic signing (Pieter Wuille) 3060e36 Add the RFC6979 PRNG (Pieter Wuille) a8f5087 Add HMAC-SHA256 (Pieter Wuille) 36fa4a7 Split up crypto/sha2 (Pieter Wuille)
| * Deterministic signingPieter Wuille2014-11-201-2/+6
| |
* | Merge pull request #5224Wladimir J. van der Laan2014-11-241-0/+6
|\ \ | | | | | | | | | | | | f321d6b Add key generation/verification to ECC sanity check (Pieter Wuille) d0c41a7 Add sanity check after key generation (Pieter Wuille)
| * | Add sanity check after key generationPieter Wuille2014-11-231-0/+6
| |/ | | | | | | | | | | | | Add a sanity check to prevent cosmic rays from flipping a bit in the generated public key, or bugs in the elliptic curve code. This is simply done by signing a (randomized) message, and verifying the result.
* / minor style cleanup after HTTP rest interface mergePhilip Kaufmann2014-11-201-1/+2
|/ | | | - no code changes
* Do signature-s negation inside the testsPieter Wuille2014-11-101-1/+1
| | | | To avoid the need for libsecp256k1 to expose such functionality.
* Fixing warning C4099: 'CExtPubKey' : type name first seen using 'class' now ↵ENikS2014-11-061-1/+1
| | | | seen using 'struct'
* minor code style cleanup after recent mergesPhilip Kaufmann2014-11-041-1/+1
| | | | | - add a missing license header - correct some header orderings etc.
* boost: moveonly: split CPubKey and friends to new filesCory Fields2014-10-311-182/+3
|
* Update comments in key to be doxygen compatibleMichael Ford2014-10-281-61/+78
|
* script: move CScriptID to standard.h and add a ctor for creating them from ↵Cory Fields2014-10-171-8/+0
| | | | | | | | | | | | | | | | CScripts This allows for a reversal of the current behavior. This: CScript foo; CScriptID bar(foo.GetID()); Becomes: CScript foo; CScriptID bar(foo); This way, CScript is no longer dependent on CScriptID or Hash();
* Add automatic script test generation, and actual checksig testsPieter Wuille2014-09-261-1/+1
|
* Apply clang-format on some infrequently-updated filesPieter Wuille2014-09-191-52/+79
|
* Merge pull request #4779Wladimir J. van der Laan2014-09-011-1/+1
|\ | | | | | | 093303a add missing header end comments (Philip Kaufmann)
| * add missing header end commentsPhilip Kaufmann2014-08-281-1/+1
| | | | | | | | | | | | - ensures a consistent usage in header files - also add a blank line after the copyright header where missing - also remove orphan new-lines at the end of some files
* | Fix a few "Uninitialized scalar field" warningsWladimir J. van der Laan2014-08-281-1/+1
|/ | | | | | Fix a few warnings reported by Coverity. None of these is critical, but making sure that class fields are initialized can avoid heisenbugs.
* key.cpp: fail with a friendlier message on missing ssl EC supportAndrew Poelstra2014-06-031-0/+3
| | | | | | | | | | | | | | | | | | | | | Previously if bitcoind is linked with an OpenSSL which is compiled without EC support, this is seen as an assertion failure "pKey != NULL" at key.cpp:134, which occurs after several seconds. It is an esoteric piece of knowledge to interpret this as "oops, I linked with the wrong OpenSSL", and because of the delay it may not even be noticed. The new output is : OpenSSL appears to lack support for elliptic curve cryptography. For more information, visit https://en.bitcoin.it/wiki/OpenSSL_and_EC_Libraries : Initialization sanity check failed. Bitcoin Core is shutting down. which occurs immediately after attempted startup. This also blocks in an InitSanityCheck() function which currently only checks for EC support but should eventually do more. See #4081.
* remove CPubKey::VerifyCompact( ) which is never usedKamil Domanski2014-05-201-4/+0
|
* Also switch the (unused) verification code to low-s instead of even-s.Pieter Wuille2014-03-101-0/+3
| | | | | | | | a81cd968 introduced a malleability breaker for signatures (using an even value for S). In e0e14e43 this was changed to the lower of two potential values, rather than the even one. Only the signing code was changed though, the (for now unused) verification code wasn't adapted.
* Document that CPubKey.IsValid() is consensus criticalPeter Todd2014-02-251-1/+3
|
* Cleanup code using forward declarations.Brandon Dahler2013-11-101-3/+5
| | | | | | | | | Use misc methods of avoiding unnecesary header includes. Replace int typedefs with int##_t from stdint.h. Replace PRI64[xdu] with PRI[xdu]64 from inttypes.h. Normalize QT_VERSION ifs where possible. Resolve some indirect dependencies as direct ones. Remove extern declarations from .cpp files.