Commit Graph

385 Commits

Author SHA1 Message Date
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
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
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
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 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
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
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
Andrew Poelstra 93226a54b4 secp256k1.c: Add missing DEBUG_CHECKs for sufficiently capable contexts 2015-04-13 21:56:50 -05:00
Pieter Wuille 6066bb684c Fix typo: avg -> max 2015-04-12 06:17:35 -07:00
Andrew Poelstra d899b5b67c Expose ability to deep-copy a context 2015-04-11 22:16:03 -05: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
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
Gregory Maxwell c01df1adc9 Avoid some implicit type conversions to make C++ compilers happy. 2015-03-28 02:20:36 +00:00
Gregory Maxwell 33270bff87 Add a couple comments pointing to particular sections of RFC6979. 2015-03-28 00:43:15 +00:00
Gregory Maxwell 2632019713 Brace all the if/for/while.
Unbraced statements spanning multiple lines has been shown in many
 projects to contribute to the introduction of bugs and a failure
 to catch them in review, especially for maintenance on infrequently
 modified code.

Most, but not all, of the existing practice in the codebase were not
 cases that I would have expected to eventually result in bugs but
 applying it as a rule makes it easier for other people to safely
 contribute.

I'm not aware of any such evidence for the case with the statement
 on a single line, but some people strongly prefer to never do that
 and the opposite rule of "_always_ use a single line for single
 statement blocks" isn't a reasonable rule for formatting reasons.
 Might as well brace all these too, since that's more universally
 acceptable.

[In any case, I seem to have introduced the vast majority of the
 single-line form (as they're my preference where they fit).]

This also removes a broken test which is no longer needed.
2015-03-27 23:24:32 +00:00
Gregory Maxwell efc571ceea Add simple testcases for signing with rfc6979 extra entropy. 2015-03-27 13:46:02 -07:00
Pieter Wuille 1573a102c0 Add ability to pass extra entropy to rfc6979
Suggested by Greg Maxwell.
2015-03-23 05:39:56 -07:00
Pieter Wuille 3087bc4d75
Merge pull request #228
27bc131 Silence some warnings from pedantic static analysis tools, improve compatibility with C++. (Gregory Maxwell)
2015-03-16 03:30:16 -07:00
Gregory Maxwell 0065a8fb9c Eliminate multiple-returns from secp256k1.c.
Goto, multiple returns, continue, and/or multiple breaks in a
 loop are often used to build complex or non-local control
 flow in software.

(They're all basically the same thing, and anyone axiomatically
 opposing goto and not the rest is probably cargo-culting from
 the title of Dijkstra's essay without thinking hard about it.)

Personally, I think the current use of these constructs in the
 code base is fine: no where are we using them to create control-
 flow that couldn't easily be described in plain English, which
 is hard to read or reason about, or which looks like a trap for
 future developers.

Some, however, prefer a more rules based approach to software
 quality.  In particular, MISRA forbids all of these constructs,
 and for good experience based reasons.  Rules also have the
 benefit of being machine checkable and surviving individual
 developers.

(To be fair-- MISRA also has a process for accommodating code that
 breaks the rules for good reason).

I think that in general we should also try to satisfy the rules-
 based measures of software quality, except where there is an
 objective reason not do: a measurable performance difference,
 logic that turns to spaghetti, etc.

Changing out all the multiple returns in secp256k1.c appears to
 be basically neutral:  Some parts become slightly less clear,
 some parts slightly more.
2015-03-08 16:36:29 -07:00
Gregory Maxwell 354ffa33e6 Make secp256k1_ec_pubkey_create reject oversized secrets. 2015-03-08 16:36:29 -07:00
Gregory Maxwell 27bc1311af Silence some warnings from pedantic static analysis tools, improve compatibility with C++.
C doesn't include the null in an array initilized from a
string literal if it doesn't fit, in C++ this is invalid.

The vararray style prototypes and init+calc also changed in
 this commit are not C89 enough for some tools.
2015-03-08 09:12:03 +00:00
Pieter Wuille 3b7ea633fb
Merge pull request #221
443cd4b Get rid of hex format and some binary conversions (Pieter Wuille)
2015-03-02 02:45:32 -08:00
Pieter Wuille f789c5baf2
Merge pull request #215
8956111 use 128-bit hex seed (Pieter Wuille)
02efd06 Use RFC6979 for test PRNGs (Pieter Wuille)
2015-02-24 02:38:58 -08:00
Pieter Wuille 8956111802 use 128-bit hex seed 2015-02-23 07:32:37 -08:00
Pieter Wuille 02efd06554 Use RFC6979 for test PRNGs 2015-02-23 07:30:08 -08:00
Pieter Wuille ae55e850c7 Use faster byteswapping and avoid alignment-increasing casts. 2015-02-23 04:58:58 -08:00
Pieter Wuille 443cd4b8ee Get rid of hex format and some binary conversions 2015-02-23 04:37:21 -08:00
Pieter Wuille 8030d7c0e5 Improve signing API documentation & specification 2015-02-14 15:38:27 -08:00
Iang 11690d3bb9 Removed gotos, which are hard to trace and maintain. 2015-02-12 18:18:31 -08:00
Pieter Wuille 035406d6db
Merge pull request #206
34b898d Additional comments for the testing PRNG and a seeding fix. (Gregory Maxwell)
6efd6e7 Some comments explaining some of the constants in the code. (Gregory Maxwell)
2015-02-12 16:27:19 -08:00
Pieter Wuille 2d4cd53087
Merge pull request #161
ffccfd2 x86_64 assembly optimization for scalar_4x64 (Pieter Wuille)
2015-02-06 18:22:16 -08:00
Gregory Maxwell 34b898dc84 Additional comments for the testing PRNG and a seeding fix.
Rw has additional short-cycle inputs because 2^32/0x464fffff >= 2.
2015-02-07 00:22:49 +00:00
Gregory Maxwell 6efd6e7777 Some comments explaining some of the constants in the code. 2015-02-07 00:22:13 +00:00
Pieter Wuille ffccfd2d00 x86_64 assembly optimization for scalar_4x64 2015-02-06 11:32:46 -08:00
Pieter Wuille 039723d5da Benchmarks for all internal operations 2015-02-02 20:02:39 -08:00
Pieter Wuille d61e899531 Add group operation counts 2015-01-27 12:32:53 -04:00
Gregory Maxwell f735446c4d Convert the rest of the codebase to C89.
Update build system to enforce -std=c89 -pedantic.
2015-01-25 17:44:10 +00:00
Gregory Maxwell bf2e1ac7cd Convert tests to C89. (also fixes a use of bare "inline" in field) 2015-01-25 15:47:04 +00:00
Pieter Wuille fc8285f18a
Merge pull request #199
fcc48c4 Remove the non-storage cmov (Pieter Wuille)
55422b6 Switch ecmult_gen to use storage types (Pieter Wuille)
41f8455 Use group element storage type in EC multiplications (Pieter Wuille)
e68d720 Add group element storage type (Pieter Wuille)
ff889f7 Field storage type (Pieter Wuille)
2015-01-25 09:16:11 -04:00
Gregory Maxwell 4be8d6fc42 Centralize the definition of uint128_t and use it uniformly.
This needs to be renamed along with the other _t types, because _t
 is reserved.  But that will be done later.
2015-01-25 05:10:40 +00:00
Gregory Maxwell d9543c904f Switch scalar code to C89. 2015-01-25 05:09:57 +00:00
Pieter Wuille fcc48c4561 Remove the non-storage cmov 2015-01-25 00:56:22 -04:00
Pieter Wuille 55422b6aaf Switch ecmult_gen to use storage types 2015-01-25 00:46:31 -04:00
Pieter Wuille 41f8455434 Use group element storage type in EC multiplications 2015-01-25 00:32:22 -04:00
Pieter Wuille e68d7208ec Add group element storage type 2015-01-25 00:31:56 -04:00
Pieter Wuille ff889f7d90 Field storage type 2015-01-25 00:11:20 -04:00
Pieter Wuille 0768bd55a1 Get rid of variable-length hex string conversions 2015-01-24 21:52:48 -04:00
Gregory Maxwell 792bcdb015 Covert several more files to C89. 2015-01-24 23:34:09 +00:00
Pieter Wuille 45cdf4479d
Merge pull request #193
25b35c7 Convert field code to strict C89 (+ long long, +__int128) (Gregory Maxwell)
3627437 C89 nits and dead code removal. (Gregory Maxwell)
2015-01-24 18:51:50 -04:00
mb300sd 402878ae11 fix ifdef/ifndef 2015-01-23 17:09:50 -05:00
Gregory Maxwell 25b35c7ecb Convert field code to strict C89 (+ long long, +__int128)
This makes the software more portable to embedded systems
 and static analysis tools.

Sadly, it can't result in identical binaries because C99 mixed
 declarations seem to make GCC emit superfluous stack-pointer
 updates. The compiler is also somewhat dependent on the
 declaration order.
2015-01-23 05:48:27 +00:00
Gregory Maxwell 3627437d80 C89 nits and dead code removal. 2015-01-23 04:17:12 +00:00
Pieter Wuille 4732d26069 Convert the field/group/ecdsa constant initialization to static consts 2015-01-22 22:44:52 -05:00
Pieter Wuille 19f3e76002 Remove unused secp256k1_fe_inner_{start, stop} functions 2015-01-22 22:44:52 -05:00
Pieter Wuille f1ebfe399f Convert the scalar constant initialization to static consts 2015-01-22 22:44:48 -05:00
Gregory Maxwell 941e221f66 Add tests for handling of the nonce function in signing. 2015-01-04 17:28:39 -08:00
Pieter Wuille 10c81ffb5d
Merge pull request #177
7688e34 Add magnitude limits to secp256k1_fe_verify to ensure that it's own tests function correctly. (Gregory Maxwell)
70ae0d2 Use secp256k1_fe_equal_var in secp256k1_fe_sqrt_var. (Gregory Maxwell)
2015-01-04 15:24:23 +01:00
Gregory Maxwell 7688e341c5 Add magnitude limits to secp256k1_fe_verify to ensure that it's own tests function correctly. 2015-01-02 07:52:27 -08:00
Pieter Wuille 4ee4f7ac3f
Merge pull request #176
9ab9335 Add a reference consistency test to ge_tests. (Pieter Wuille)
60571c6 Rework group tests (Pieter Wuille)
2015-01-02 16:28:54 +01:00
Gregory Maxwell 70ae0d2851 Use secp256k1_fe_equal_var in secp256k1_fe_sqrt_var.
In theory this should be faster, since secp256k1_fe_equal_var is able to
 shortcut the normalization.  On x86_64 the improvement appears to be in
 the noise for me.  At least it makes the code cleaner.
2014-12-31 05:56:00 -08:00
Pieter Wuille 9ab93355f2 Add a reference consistency test to ge_tests.
This adds all points used in the test together in random order, which
should result in infinity.

Suggested by Greg Maxwell.
2014-12-29 17:21:39 +01:00
Pieter Wuille 60571c6e45 Rework group tests 2014-12-29 15:38:17 +01:00
Gregory Maxwell d26e26f2f4 Avoid constructing an invalid signature with probability 1:2^256. 2014-12-28 19:40:40 -08:00
Pieter Wuille b450c34843
Merge pull request #163
bbd5ba7 Use rfc6979 as default nonce generation function (Pieter Wuille)
b37fbc2 Implement SHA256 / HMAC-SHA256 / RFC6979. (Pieter Wuille)
c6e7f4e [API BREAK] Use a nonce-generation function instead of a nonce (Pieter Wuille)
2014-12-23 14:40:47 +01:00
Peter Dettman 49ee0dbe16 Add _normalizes_to_zero_var variant 2014-12-20 14:38:29 +01:00
Peter Dettman eed599dd72 Add _fe_normalizes_to_zero method 2014-12-20 14:38:24 +01:00
Pieter Wuille d7174edf5f Weak normalization for secp256k1_fe_equal 2014-12-20 14:38:20 +01:00
Pieter Wuille 0295f0a33d weak normalization 2014-12-20 14:38:07 +01:00
Pieter Wuille bbd5ba7cfa Use rfc6979 as default nonce generation function 2014-12-20 14:36:13 +01:00
Pieter Wuille b37fbc280e Implement SHA256 / HMAC-SHA256 / RFC6979. 2014-12-20 14:36:13 +01:00
Pieter Wuille c6e7f4e8d8 [API BREAK] Use a nonce-generation function instead of a nonce 2014-12-20 14:36:11 +01:00
Pieter Wuille 603c33bc80 Make signing fail if a too small buffer is passed.
Bug discovered by Sergio Demian Lerner.
2014-12-18 01:28:06 +01:00
Pieter Wuille 7277fd76e2 Remove GMP field implementation 2014-12-17 12:41:31 +01:00
Pieter Wuille 13278f642c Add explanation about how inversion can be avoided 2014-12-16 22:52:07 +01:00
Pieter Wuille ce7eb6fb3d Optimize verification: avoid field inverse
Suggested by Greg Maxwell.
2014-12-16 22:38:17 +01:00
Pieter Wuille 1ba4a60a51 Configure options reorganization 2014-12-13 15:04:28 +01:00
Pieter Wuille bccaf86caa
Merge pull request #150
cf7b2b4 Fix ECDSA message hashes to 32 bytes (Pieter Wuille)
2014-12-11 01:39:34 +01:00
Luke Dashjr f22d73e757 Explicitly access %0..%2 as 64-bit so we use the right registers for x32 ABI 2014-12-09 18:57:33 +01:00
Pieter Wuille e66d4d6d39 Avoid the stack in assembly and use explicit registers 2014-12-09 18:56:23 +01:00
Pieter Wuille cf7b2b4647 Fix ECDSA message hashes to 32 bytes 2014-12-09 12:50:47 +01:00
Pieter Wuille aaba2e0f4b
Merge pull request #136
6558a26 Make the benchmarks print out stats (Pieter Wuille)
000bdf6 Rename bench_verify to bench_recovery (Pieter Wuille)
2014-12-09 02:40:36 +01:00
Pieter Wuille ee1eaa792d
Merge pull request #141
7c6fed2 Add a few more additional tests. (Gregory Maxwell)
8d11164 Add some additional tests. (Gregory Maxwell)
2014-12-09 01:38:01 +01:00
Pieter Wuille 6558a26770 Make the benchmarks print out stats 2014-12-09 01:27:39 +01:00
Pieter Wuille 000bdf6dc3 Rename bench_verify to bench_recovery 2014-12-09 00:12:02 +01:00
Gregory Maxwell 7c6fed2857 Add a few more additional tests. 2014-12-08 14:15:09 -08:00
Pavel Janík e06a9244bf Include time.h header for time(). 2014-12-08 20:48:58 +01:00
Gregory Maxwell 8d11164bc0 Add some additional tests. 2014-12-08 09:13:35 -08:00
Pieter Wuille 3545627acb
Merge pull request #118
3ce74b1 Tweak precomputed table size for G (Pieter Wuille)
2014-12-07 14:37:12 +01:00
Pieter Wuille 6a9901e15b
Merge pull request #137
39bd94d Variable time normalize (Pieter Wuille)
2014-12-07 14:35:23 +01:00
Pieter Wuille 376b28b096
Merge pull request #128
b2c9681 Make {mul,sqr}_inner use the same argument order as {mul,sqr} (Pieter Wuille)
6793505 Convert YASM code into inline assembly (Pieter Wuille)
f048615 Rewrite field assembly to match the C version (Pieter Wuille)
2014-12-07 14:34:20 +01:00
Pieter Wuille 17288069fb
Merge pull request #138
a5759c5 Check return value of malloc (Pieter Wuille)
2b9388b Remove unused secp256k1_fe_inv_all (Pieter Wuille)
f461b76 Allocate precomputation arrays on the heap (Pieter Wuille)
2014-12-07 13:19:21 +01:00
Pieter Wuille a5759c572e Check return value of malloc 2014-12-07 02:58:24 +01:00
Pieter Wuille 39bd94d86d Variable time normalize 2014-12-06 18:18:28 +01:00
Pieter Wuille 54b768c6da Another redundant secp256k1_fe_normalize 2014-12-06 17:30:08 +01:00
Gregory Maxwell 1c29f2eb49 Remove redundant secp256k1_fe_normalize from secp256k1_gej_add_ge_var.
This was a missed optimization in the extraction of gej+ge from gej+gej.
2014-12-06 05:09:57 -08:00
Pieter Wuille 2b9388b647 Remove unused secp256k1_fe_inv_all 2014-12-05 18:13:51 +01:00
Pieter Wuille f461b76925 Allocate precomputation arrays on the heap 2014-12-05 18:13:28 +01:00
Pieter Wuille b0210a95da
Merge pull request #135
ee3eb4b Fix a memory leak and add a number of small tests. (Gregory Maxwell)
2014-12-04 19:16:09 +01:00
Gregory Maxwell ee3eb4be9e Fix a memory leak and add a number of small tests.
This fixes a simple copy and paste induced memory leak for the ecdsa init.

The tests are mostly just improving coverage and aren't interesting.
2014-12-04 07:17:08 -08:00
Pieter Wuille b2c9681c6f Make {mul,sqr}_inner use the same argument order as {mul,sqr} 2014-12-04 13:54:36 +01:00
Pieter Wuille 67935050e1 Convert YASM code into inline assembly 2014-12-04 13:54:01 +01:00
Pieter Wuille f048615970 Rewrite field assembly to match the C version 2014-12-04 13:46:09 +01:00
Pieter Wuille 4d879a3a66
Merge pull request #134
29ae131 Make scalar_add_bit test's overflow detection exact (Pieter Wuille)
2014-12-04 12:21:06 +01:00
Pieter Wuille d5e8362ae5
Merge pull request #127
c35ff1e Convert lambda splitter to pure scalar code. (Pieter Wuille)
cc604e9 Avoid division when decomposing scalars (Peter Dettman)
ff8746d Add secp256k1_scalar_mul_shift_var (Pieter Wuille)
2014-12-03 21:22:57 +01:00
Pieter Wuille 7b92cf66c7
Merge pull request #132
efb7d4b Use constant-time conditional moves instead of byte slicing (Pieter Wuille)
2014-12-03 21:21:42 +01:00
Pieter Wuille 29ae1310ce Make scalar_add_bit test's overflow detection exact 2014-12-03 18:54:01 +01:00
Pieter Wuille 9048def7c7 Avoid undefined shift behaviour 2014-12-03 18:10:52 +01:00
Pieter Wuille efb7d4b299 Use constant-time conditional moves instead of byte slicing 2014-12-03 02:41:55 +01:00
Pieter Wuille 82f9254cc0 Fix typo 2014-12-02 18:35:33 +01:00
Pieter Wuille 35399e08c4 Bugfix: b is restricted, not r 2014-12-02 17:43:42 +01:00
Pieter Wuille c35ff1ea44 Convert lambda splitter to pure scalar code.
This enables the use of the endomorphism optimization without bignum.
2014-12-02 16:50:00 +01:00
Peter Dettman cc604e9842 Avoid division when decomposing scalars
- In secp256k1_gej_split_exp, there are two divisions used. Since the denominator is a constant known at compile-time, each can be replaced by a multiplication followed by a right-shift (and rounding).
- Add the constants g1, g2 for this purpose and rewrite secp256k1_scalar_split_lambda_var accordingly.
- Remove secp256k1_num_div since no longer used

Rebased-by: Pieter Wuille
2014-12-02 16:50:00 +01:00
Pieter Wuille ff8746d457 Add secp256k1_scalar_mul_shift_var 2014-12-02 16:50:00 +01:00
Pieter Wuille bd313f7d6e
Merge pull request #119
597128d Make num optional (Pieter Wuille)
659b554 Make constant initializers independent from num (Pieter Wuille)
2014-12-02 16:42:50 +01:00
Pieter Wuille 276f987d70
Merge pull request #124
4d4eeea Make secp256k1_fe_mul_inner use the r != property (Pieter Wuille)
be82e92 Require that r and b are different for field multiplication. (Pieter Wuille)
2014-12-02 16:39:20 +01:00
Pieter Wuille 24b3c65e0d Add a test case for ECDSA recomputing infinity 2014-12-01 14:45:05 +01:00
Pieter Wuille 32600e5086 Add a test for r >= order signature handling
Suggested by Greg Maxwell.
2014-12-01 14:23:09 +01:00
Pieter Wuille 4d4eeea4ac Make secp256k1_fe_mul_inner use the r != property
Suggested by Peter Dettman.
2014-12-01 13:40:36 +01:00
Pieter Wuille be82e92fc4 Require that r and b are different for field multiplication.
Suggested by Peter Dettman, this prepares for slightly faster muitiplication
which writes results immediately to r before finishing reading b.
2014-12-01 13:40:34 +01:00
Pieter Wuille 597128d389 Make num optional 2014-12-01 12:38:38 +01:00
Pieter Wuille 659b554d7b Make constant initializers independent from num 2014-12-01 12:38:38 +01:00
Pieter Wuille 0af5b47133
Merge pull request #120
e3d692f Explain why no y=0 check is necessary for doubling (Pieter Wuille)
f7dc1c6 Optimize doubling: secp256k1 has no y=0 point (Pieter Wuille)
2014-12-01 12:38:13 +01:00
Pieter Wuille c76be9efa0 Remove unused num functions 2014-11-30 23:38:01 +01:00
Pieter Wuille 4285a98722 Move lambda-splitting code to scalar.
It's not really an operation on group elements.
2014-11-30 23:38:01 +01:00
Pieter Wuille f24041d6aa Switch all EC/ECDSA logic from num to scalar 2014-11-30 23:38:01 +01:00
Pieter Wuille 6794be6080 Add scalar splitting functions
Which currently delegate to the lambda-splitter in group.
2014-11-30 23:38:01 +01:00
Pieter Wuille d1502eb459 Add secp256k1_scalar_inverse_var which delegates to GMP 2014-11-30 23:38:01 +01:00
Pieter Wuille b5c9ee756f Make test_point_times_order test meaningful again
As wnaf splitting is scalar based, multiplying with the order directly
would be reduced to multiplication with zero before even converting to
wnaf.
2014-11-30 23:38:01 +01:00
Pieter Wuille 0b73059709 Switch wnaf splitting from num-based to scalar-based 2014-11-30 23:38:01 +01:00
Pieter Wuille 1e6c77c321 Generalize secp256k1_scalar_get_bits 2014-11-30 23:38:01 +01:00
Pieter Wuille 5213207856 Add secp256k1_scalar_add_bit 2014-11-30 23:37:58 +01:00
Pieter Wuille 6e0528785d Do signature recovery/verification with 4 possible recid case 2014-11-29 10:57:50 +01:00
Pieter Wuille e3d692ff75 Explain why no y=0 check is necessary for doubling
Explanation suggested by Greg Maxwell.
2014-11-28 22:18:50 +01:00
Pieter Wuille f7dc1c6513 Optimize doubling: secp256k1 has no y=0 point 2014-11-28 22:18:30 +01:00
Pieter Wuille 2a54f9bcee Correct typo in comment 2014-11-28 16:39:36 +01:00
Pieter Wuille 3ce74b1266 Tweak precomputed table size for G 2014-11-26 23:45:49 +01:00
Pieter Wuille 99f0728f23 Fix secp256k1_num_set_bin handling of 0 2014-11-26 15:21:31 +01:00
Pieter Wuille d907ebc0e3 Add bounds checking to field element setters 2014-11-26 15:21:31 +01:00
Pieter Wuille 665775b2b9 Don't split the g factor when not using endomorphism 2014-11-25 14:29:02 +01:00
Pieter Wuille 3bf029d676 Add test that recovering infinity fails 2014-11-18 13:13:17 +01:00
Pieter Wuille 4861f83686 Test whether recovered public keys are not infinity
Fixes a bug discovered by Sergio Demian Lerner.
2014-11-18 12:37:39 +01:00
Pieter Wuille bbe67d8b29 Make secp256k1_eckey_pubkey_serialize fail for infinity 2014-11-18 12:37:38 +01:00
Pieter Wuille f49b2ef840 Add DETERMINISTIC to avoid line number/source dependent binaries
This will make it easier to detect changes without semantic impact.
2014-11-18 11:08:44 +01:00
Gregory Maxwell 71712b27e5 Switch to C89 comments in prep for making the whole codebase C89 compatible.
This should be whitespace/comment only changes and should produce the same
object code.
2014-11-15 07:33:07 -08:00