0
0
Fork 0
mirror of https://github.com/bitcoin/bitcoin.git synced 2025-02-11 11:16:09 -05:00
Commit graph

538 commits

Author SHA1 Message Date
Thomas Daede
fbecc38a89 Add ability to use a statically generated ecmult context.
This vastly shrinks the size of the context required for signing on devices with
memory-mapped Flash.

Tables are generated by the new gen_context tool into a header.
2015-07-13 18:00:03 -07:00
Pieter Wuille
0cbc8600f3
Merge pull request #266
3f3964e Add specific VERIFY tests for _fe_cmov (Peter Dettman)
a0601cd Fix VERIFY calculations in _fe_cmov methods (Peter Dettman)
2015-07-08 17:04:38 -04:00
Pieter Wuille
06ff7fe5b0
Merge pull request #267
5a43124 Save 1 _fe_negate since s1 == -s2 (Peter Dettman)
a5d796e Update code comments (Peter Dettman)
7d054cd Refactor to save a _fe_negate (Peter Dettman)
b28d02a Refactor to remove a local var (Peter Dettman)
55e7fc3 Perf. improvement in _gej_add_ge (Peter Dettman)
2015-07-08 16:39:08 -04:00
Peter Dettman
5a43124c69 Save 1 _fe_negate since s1 == -s2 2015-07-07 22:30:00 +10:00
Peter Dettman
a5d796e0b1 Update code comments 2015-07-07 09:16:15 +09:30
Peter Dettman
3f3964e49c Add specific VERIFY tests for _fe_cmov 2015-07-06 12:41:30 +09:30
Peter Dettman
7d054cd030 Refactor to save a _fe_negate 2015-07-04 16:38:46 +09:30
Peter Dettman
b28d02a5d5 Refactor to remove a local var 2015-07-04 16:30:56 +09:30
Peter Dettman
55e7fc32cb Perf. improvement in _gej_add_ge
- Avoid one weak normalization
- Change one full normalization to weak
- Avoid unnecessary fe assignment
- Update magnitude annotations
2015-07-04 16:21:35 +09:30
Peter Dettman
a0601cd79c Fix VERIFY calculations in _fe_cmov methods 2015-07-04 13:50:15 +09:30
Pieter Wuille
17f7148606
Merge pull request #261
7657420 Add tests for adding P+Q with P.x!=Q.x and P.y=-Q.y (Pieter Wuille)
8c5d5f7 tests: Add failing unit test for #257 (bad addition formula) (Andrew Poelstra)
5de4c5d gej_add_ge: fix degenerate case when computing P + (-lambda)P (Andrew Poelstra)
bcf2fcf gej_add_ge: rearrange algebra (Andrew Poelstra)
2015-06-29 18:30:36 +02:00
Pieter Wuille
765742021a
Add tests for adding P+Q with P.x!=Q.x and P.y=-Q.y 2015-06-29 08:22:06 -07:00
Andrew Poelstra
8c5d5f7b5b
tests: Add failing unit test for #257 (bad addition formula) 2015-06-29 08:22:06 -07:00
Andrew Poelstra
5de4c5dffd
gej_add_ge: fix degenerate case when computing P + (-lambda)P
If two points (x1, y1) and (x2, y2) are given to gej_add_ge with
x1 != x2 but y1 = -y2, the function gives a wrong answer since
this causes it to compute "lambda = 0/0" during an intermediate
step. (Here lambda refers to an auxiallary variable in the point
addition formula, not the cube-root of 1 used by the endomorphism
optimization.)

This commit catches the 0/0 and replaces it with an alternate
expression for lambda, cmov'ing it in place if necessary.
2015-06-29 08:21:58 -07:00
Andrew Poelstra
bcf2fcfd3a
gej_add_ge: rearrange algebra
There is zero functionality or opcount changes here; I need to do
this to make sure both R and M are computed before they are used,
since a future patch will replace either none or both of them.

Also compute r->y directly in terms of r->x, which again will be
used in a future patch.
2015-06-23 12:44:15 -07:00
Pieter Wuille
873a453d26
Merge pull request #250
210ffed Use separate in and out pointers in `secp256k1_ec_pubkey_decompress` (Andrew Poelstra)
2015-06-13 14:51:25 +02:00
Pieter Wuille
91eb0da155
Merge pull request #247
a1d5ae1 Tiny optimization (Pieter Wuille)
2015-06-13 14:49:35 +02:00
Andrew Poelstra
210ffed5cd Use separate in and out pointers in secp256k1_ec_pubkey_decompress
Right now `secp256k1_ec_pubkey_decompress` takes an in/out pointer to
a public key and replaces the input key with its decompressed variant.
This forces users who store compressed keys in small (<65 byte) fixed
size buffers (for example, the Rust bindings do this) to explicitly
and wastefully copy their key to a larger buffer.

[API BREAK]
2015-05-13 17:07:34 -05:00
Pieter Wuille
a1d5ae1527 Tiny optimization 2015-05-05 20:40:24 +02:00
Pieter Wuille
729badff14
Merge pull request #210
2d5a186 Apply effective-affine trick to precomp (Peter Dettman)
4f9791a Effective affine addition in EC multiplication (Peter Dettman)
2015-04-30 21:54:50 +02:00
Peter Dettman
2d5a186cee Apply effective-affine trick to precomp 2015-04-30 09:25:44 -07:00
Peter Dettman
4f9791abba Effective affine addition in EC multiplication
* Make secp256k1_gej_add_var and secp256k1_gej_double return the
  Z ratio to go from a.z to r.z.
* Use these Z ratios to speed up batch point conversion to affine
  coordinates, and to speed up batch conversion of points to a
  common Z coordinate.
* Add a point addition function that takes a point with a known
  Z inverse.
* Due to secp256k1's endomorphism, all additions in the EC
  multiplication code can work on affine coordinate (with an
  implicit common Z coordinate), correcting the Z coordinate of
  the result afterwards.

Refactoring by Pieter Wuille:
* Move more global-z logic into the group code.
* Separate code for computing the odd multiples from the code to bring it
  to either storage or globalz format.
* Rename functions.
* Make all addition operations return Z ratios, and test them.
* Make the zr table format compatible with future batch chaining
  (the first entry in zr becomes the ratio between the input and the
  first output).

Original idea and code by Peter Dettman.
2015-04-30 09:23:21 -07:00
Pieter Wuille
22f60a6280
Merge pull request #245
c146b4a Add bench_internal to gitignore. (Gregory Maxwell)
9c4fb23 Add a secp256k1_fe_cmov unit test. (Gregory Maxwell)
2015-04-22 12:55:08 -07:00
Pieter Wuille
61c1b1ed46
Merge pull request #190
d227579 Add scalar blinding and a secp256k1_context_randomize() call. (Gregory Maxwell)
2015-04-22 12:34:54 -07:00
Gregory Maxwell
d2275795ff Add scalar blinding and a secp256k1_context_randomize() call.
This computes (n-b)G + bG with random value b, in place of nG in
 ecmult_gen() for signing.

This is intended to reduce exposure to potential power/EMI sidechannels
 during signing and pubkey generation by blinding the secret value with
 another value which is hopefully unknown to the attacker.

It may not be very helpful if the attacker is able to observe the setup
 or if even the scalar addition has an unacceptable leak, but it has low
 overhead in any case and the security should be purely additive on top
 of the existing defenses against sidechannels.
2015-04-22 19:25:16 +00:00
Gregory Maxwell
c146b4a446 Add bench_internal to gitignore. 2015-04-22 19:11:19 +00:00
Gregory Maxwell
9c4fb23dd9 Add a secp256k1_fe_cmov unit test.
(Also add my name to the top of tests.c: I wrote a bunch of that
 and update the copyright dates)
2015-04-22 19:10:17 +00:00
Pieter Wuille
426fa52511
Merge pull request #243
bb0ea50 Replace set/add with cmov in secp256k1_gej_add_ge. (Gregory Maxwell)
2015-04-22 02:48:00 -07:00
Pieter Wuille
d505a890cd
Merge pull request #244
2d2707a travis: test i686 builds with gmp (Cory Fields)
cf7f702 travis: update to new build infrastructure (Cory Fields)
2015-04-22 02:28:29 -07:00
Cory Fields
2d2707a4d8 travis: test i686 builds with gmp
Test with and without endomorphism.
2015-04-22 04:51:32 -04:00
Cory Fields
cf7f70229b travis: update to new build infrastructure
See here:
http://blog.travis-ci.com/2014-12-17-faster-builds-with-container-based-infrastructure/

These changes remove our use of sudo so that we can move to the container-based
builds. This yields quicker builds and less reliance on the old infrastructure.
2015-04-22 04:51:23 -04:00
Gregory Maxwell
bb0ea50de8 Replace set/add with cmov in secp256k1_gej_add_ge.
Use a conditional move of the same kind we use for the affine points
 in the storage  type instead of multiplying  with the infinity flag
 and adding.  This results in fewer constructions to worry about for
 sidechannel behavior.

It also might be faster: It doesn't appear to benchmark as slower for
 me at least; but I think  the CMOV is faster than the mul_int + add,
 but slower than the set+add;  making it a wash.
2015-04-22 00:43:30 +00:00
Pieter Wuille
f3d3519ce0
Merge pull request #241
5c2a4fa Fix memory leak in context unit test (Andrew Poelstra)
2015-04-19 11:35:44 -07:00
Andrew Poelstra
5c2a4fad1c Fix memory leak in context unit test
Before fix, `valgrind ./tests 1` outputs
  ==21959==     in use at exit: 2,228,288 bytes in 8 blocks

after:
  ==23974==     in use at exit: 0 bytes in 0 blocks
2015-04-16 15:56:04 -05:00
Pieter Wuille
14aacdc5e5
Merge pull request #239
93226a5 secp256k1.c: Add missing DEBUG_CHECKs for sufficiently capable contexts (Andrew Poelstra)
2015-04-14 01:04:03 -07:00
Andrew Poelstra
93226a54b4 secp256k1.c: Add missing DEBUG_CHECKs for sufficiently capable contexts 2015-04-13 21:56:50 -05:00
Pieter Wuille
6099220e7b
Merge pull request #237
6066bb6 Fix typo: avg -> max (Pieter Wuille)
2015-04-12 08:40:00 -07:00
Pieter Wuille
6066bb684c Fix typo: avg -> max 2015-04-12 06:17:35 -07:00
Pieter Wuille
9688030874
Merge pull request #236
d899b5b Expose ability to deep-copy a context (Andrew Poelstra)
2015-04-12 02:05:54 -07:00
Andrew Poelstra
d899b5b67c Expose ability to deep-copy a context 2015-04-11 22:16:03 -05:00
Pieter Wuille
3608c7f2f6
Merge pull request #208
a9b6595 [API BREAK] Introduce explicit contexts (Pieter Wuille)
2015-04-11 01:02:19 -07:00
Pieter Wuille
a9b6595ef8 [API BREAK] Introduce explicit contexts 2015-04-11 01:01:10 -07:00
Pieter Wuille
a0d3b89dd6
Merge pull request #233
6534ee1 initialize variable (Cory Fields)
2015-04-10 01:20:35 -07:00
Pieter Wuille
9e8d89bf6d
Merge pull request #234
4450e24 Add a comment about the avoidance of secret data in array indexes. (Gregory Maxwell)
2015-04-10 01:08:58 -07:00
Pieter Wuille
65e70e7542
Merge pull request #235
5098f62 Improve documentation formatting consistency (Daniel Cousens)
2015-04-10 01:07:29 -07:00
Daniel Cousens
5098f62571 Improve documentation formatting consistency 2015-04-10 16:33:33 +10:00
Gregory Maxwell
4450e24a82 Add a comment about the avoidance of secret data in array indexes.
People elsewhere still seem to be writing crypto code making this
 mistake, so it must not be that well known.
2015-04-06 03:53:32 +00:00
Cory Fields
6534ee1259 initialize variable 2015-04-03 17:16:09 -04:00
Pieter Wuille
d5b53aa818
Merge pull request #232
c01df1a Avoid some implicit type conversions to make C++ compilers happy. (Gregory Maxwell)
2015-03-29 14:32:28 -07:00
Gregory Maxwell
c01df1adc9 Avoid some implicit type conversions to make C++ compilers happy. 2015-03-28 02:20:36 +00:00