Commit Graph

575 Commits

Author SHA1 Message Date
258720851e Merge pull request #212
a5a66c7 Add support for custom EC-Schnorr-SHA256 signatures (Pieter Wuille)
2015-08-03 22:34:12 +02:00
a5a66c70b6 Add support for custom EC-Schnorr-SHA256 signatures 2015-08-03 20:08:51 +02:00
d84a3784f4 Merge pull request #252
72ae443 Improve perf. of cmov-based table lookup (Peter Dettman)
92e53fc Implement endomorphism optimization for secp256k1_ecmult_const (Andrew Poelstra)
ed35d43 Make `secp256k1_scalar_add_bit` conditional; make `secp256k1_scalar_split_lambda_var` constant time (Andrew Poelstra)
91c0ce9 Add benchmarks for ECDH and const-time multiplication (Andrew Poelstra)
0739bbb Add ECDH module which works by hashing the output of ecmult_const (Andrew Poelstra)
4401500 Add constant-time multiply `secp256k1_ecmult_const` for ECDH (Andrew Poelstra)
baa75da tests: add a couple tests (Andrew Poelstra)
2015-08-02 19:33:05 +02:00
72ae443afb Improve perf. of cmov-based table lookup 2015-08-01 10:57:36 -05:00
92e53fc4c8 Implement endomorphism optimization for secp256k1_ecmult_const 2015-08-01 10:57:36 -05:00
ed35d43a0c Make secp256k1_scalar_add_bit conditional; make secp256k1_scalar_split_lambda_var constant time
This has the effect of making `secp256k1_scalar_mul_shift_var` constant
time in both input scalars. Keep the _var name because it is NOT constant
time in the shift amount.

As used in `secp256k1_scalar_split_lambda_var`, the shift is always
the constant 272, so this function becomes constant time, and it
loses the `_var` suffix.
2015-08-01 10:57:36 -05:00
91c0ce95ca Add benchmarks for ECDH and const-time multiplication 2015-08-01 10:57:36 -05:00
0739bbb6f0 Add ECDH module which works by hashing the output of ecmult_const 2015-08-01 10:57:33 -05:00
4401500060 Add constant-time multiply secp256k1_ecmult_const for ECDH
Designed with clear separation of the wNAF conversion, precomputation
and exponentiation (since the precomp at least we will probably want
to separate in the API for users who reuse points a lot.

Future work:
  - actually separate precomp in the API
  - do multiexp rather than single exponentiation
2015-07-31 12:39:09 -05:00
baa75da59d tests: add a couple tests
- Add zero/one sanity check tests for ecmult

  - Add unit test for secp256k1_scalar_split_lambda_var

  - Typo fix in `ge_equals_ge`; was comparing b->y to itself, should
    have been comparing a->y to b->y

  - Normalize y-coordinate in `random_group_element_test`; this is
    needed to pass random group elements as the first argument to
    `ge_equals_ge`, which I will do in a future commit.
2015-07-29 13:26:12 -05:00
ae4f0c6eec Merge pull request #278
995c548 Introduce callback functions for dealing with errors. (Pieter Wuille)
2015-07-29 17:52:38 +02:00
995c548771 Introduce callback functions for dealing with errors. 2015-07-26 18:08:38 +02:00
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
18c329c506 Remove the internal secp256k1_ecdsa_sig_t type 2015-07-26 16:52:17 +02:00
74a2acdb8a Add a secp256k1_ecdsa_signature_t type 2015-07-26 16:02:20 +02:00
23cfa914d2 Introduce secp256k1_pubkey_t type 2015-07-26 15:59:07 +02:00
4c63780710 Merge pull request #269
3e6f1e2 Change rfc6979 implementation to be a generic PRNG (Pieter Wuille)
2015-07-24 23:44:21 +02:00
3e6f1e20dc Change rfc6979 implementation to be a generic PRNG 2015-07-24 22:07:14 +02:00
1b68366201 Merge pull request #274
a83bb48 Make ecmult static precomputation default (Pieter Wuille)
2015-07-15 22:39:16 -04:00
a83bb48068 Make ecmult static precomputation default 2015-07-15 21:41:51 -04:00
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
c37812f54c Add gen_context src/ecmult_static_context.h to CLEANFILES to fix distclean. 2015-07-16 00:05:32 +00:00
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
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
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
b0a60e6d33 Merge pull request #258
e2a07c7 Fix compilation with C++ (Vinnie Falco)
2015-07-13 21:03:47 -04:00
733c1e695e Add travis build to test the static context. 2015-07-13 18:00:03 -07:00
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
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
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
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
31d0c1fd12 Merge pull request #273
eb2c8ff Add missing casts to SECP256K1_FE_CONST_INNER (Andrew Poelstra)
2015-07-13 19:21:12 -04:00
eb2c8ffedf Add missing casts to SECP256K1_FE_CONST_INNER 2015-07-13 08:19:35 -05:00
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
99fd963bd5 Add secp256k1_ec_pubkey_compress(), with test similar to the related decompress() function. 2015-07-13 13:09:00 +01:00
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
36b305a82b Verify the result of GMP modular inverse using non-GMP code 2015-07-09 11:21:37 -04:00
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
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
5a43124c69 Save 1 _fe_negate since s1 == -s2 2015-07-07 22:30:00 +10:00
a5d796e0b1 Update code comments 2015-07-07 09:16:15 +09:30
3f3964e49c Add specific VERIFY tests for _fe_cmov 2015-07-06 12:41:30 +09:30
7d054cd030 Refactor to save a _fe_negate 2015-07-04 16:38:46 +09:30
b28d02a5d5 Refactor to remove a local var 2015-07-04 16:30:56 +09:30
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
a0601cd79c Fix VERIFY calculations in _fe_cmov methods 2015-07-04 13:50:15 +09:30
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
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
8c5d5f7b5b tests: Add failing unit test for #257 (bad addition formula) 2015-06-29 08:22:06 -07:00
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