1113 Commits

Author SHA1 Message Date
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