Commit Graph

667 Commits

Author SHA1 Message Date
Pieter Wuille ae4f0c6eec
Merge pull request #278
995c548 Introduce callback functions for dealing with errors. (Pieter Wuille)
2015-07-29 17:52:38 +02:00
Pieter Wuille 995c548771 Introduce callback functions for dealing with errors. 2015-07-26 18:08:38 +02:00
Pieter Wuille c33307495b
Merge pull request #282
18c329c Remove the internal secp256k1_ecdsa_sig_t type (Pieter Wuille)
74a2acd Add a secp256k1_ecdsa_signature_t type (Pieter Wuille)
23cfa91 Introduce secp256k1_pubkey_t type (Pieter Wuille)
2015-07-26 17:42:29 +02:00
Pieter Wuille 18c329c506 Remove the internal secp256k1_ecdsa_sig_t type 2015-07-26 16:52:17 +02:00
Pieter Wuille 74a2acdb8a Add a secp256k1_ecdsa_signature_t type 2015-07-26 16:02:20 +02:00
Pieter Wuille 23cfa914d2 Introduce secp256k1_pubkey_t type 2015-07-26 15:59:07 +02:00
Pieter Wuille 4c63780710
Merge pull request #269
3e6f1e2 Change rfc6979 implementation to be a generic PRNG (Pieter Wuille)
2015-07-24 23:44:21 +02:00
Pieter Wuille 3e6f1e20dc Change rfc6979 implementation to be a generic PRNG 2015-07-24 22:07:14 +02:00
mlmikael ed5334a7fe Update configure.ac to make it build on OpenBSD
This update is to make libsecp256k1 build on OpenBSD (more specifically OpenBSD 5.7 with Autotools 2.69).

Without the "AM_PROG_CC_C_O" line in configure.ac, ./autogen.sh crashes with "Makefile.am: C objects in subdir but `AM_PROG_CC_C_O' not in `configure.ac'\nautoreconf-2.69: automake failed with exit status: 1".
2015-07-19 16:07:46 +02:00
Pieter Wuille 1b68366201
Merge pull request #274
a83bb48 Make ecmult static precomputation default (Pieter Wuille)
2015-07-15 22:39:16 -04:00
Pieter Wuille a83bb48068 Make ecmult static precomputation default 2015-07-15 21:41:51 -04:00
Pieter Wuille 166b32f70a
Merge pull request #276
c37812f Add gen_context src/ecmult_static_context.h to CLEANFILES to fix distclean. (Gregory Maxwell)
2015-07-15 21:40:55 -04:00
Gregory Maxwell c37812f54c Add gen_context src/ecmult_static_context.h to CLEANFILES to fix distclean. 2015-07-16 00:05:32 +00:00
Pieter Wuille 125c15de31
Merge pull request #275
76f6769 Fix build with static ecmult altroot and make dist. (Gregory Maxwell)
2015-07-15 18:51:55 -04:00
Gregory Maxwell 76f67697ec Fix build with static ecmult altroot and make dist.
Gen_context was unable to find the required headers without some
 autotools fixups.  Make dist was also broken without the extra
 sources for the host side table builder utility.
2015-07-15 22:08:00 +00:00
Pieter Wuille 5133f78651
Merge pull request #254
733c1e6 Add travis build to test the static context. (Thomas Daede)
fbecc38 Add ability to use a statically generated ecmult context. (Thomas Daede)
2015-07-14 11:28:55 -04:00
Pieter Wuille b0a60e6d33
Merge pull request #258
e2a07c7 Fix compilation with C++ (Vinnie Falco)
2015-07-13 21:03:47 -04:00
Thomas Daede 733c1e695e Add travis build to test the static context. 2015-07-13 18:00:03 -07:00
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 4fb174df08
Merge pull request #263
99fd963 Add secp256k1_ec_pubkey_compress(), with test similar to the related decompress() function. (Thomas Kerin)
2015-07-13 20:55:34 -04:00
Pieter Wuille 4ab8990c52
Merge pull request #270
36b305a Verify the result of GMP modular inverse using non-GMP code (Pieter Wuille)
2015-07-13 20:27:29 -04:00
Pieter Wuille bdf0e0c268
Merge pull request #271
55399c2 Further performance improvements to _ecmult_wnaf (Peter Dettman)
145cc6e Improve performance of _ecmult_wnaf (Peter Dettman)
2015-07-13 20:25:18 -04:00
Pieter Wuille 31d0c1fd12
Merge pull request #273
eb2c8ff Add missing casts to SECP256K1_FE_CONST_INNER (Andrew Poelstra)
2015-07-13 19:21:12 -04:00
Andrew Poelstra eb2c8ffedf Add missing casts to SECP256K1_FE_CONST_INNER 2015-07-13 08:19:35 -05:00
Peter Dettman 55399c23f7 Further performance improvements to _ecmult_wnaf
- Initialize 'wnaf' to zeroes using memset
- Add new 'len' arg to speed up smaller scalars (mostly for endo=yes)
2015-07-13 22:46:42 +10:00
Thomas Kerin 99fd963bd5
Add secp256k1_ec_pubkey_compress(), with test similar to the related decompress() function. 2015-07-13 13:09:00 +01:00
Peter Dettman 145cc6ea8f Improve performance of _ecmult_wnaf
- Track carry explicitly instead of adding to scalar
- Branch-free code for carry calculations
2015-07-11 13:49:04 +10:00
Pieter Wuille 36b305a82b Verify the result of GMP modular inverse using non-GMP code 2015-07-09 11:21:37 -04: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
Vinnie Falco e2a07c78a1 Fix compilation with C++ 2015-06-18 06:35:09 -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