Commit Graph

630 Commits

Author SHA1 Message Date
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
354ffa33e6 Make secp256k1_ec_pubkey_create reject oversized secrets. 2015-03-08 16:36:29 -07:00
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
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
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
4bc273bd9c Merge pull request #222
7c3771d Disable overlength-strings warnings. (evoskuil)
2015-02-24 02:37:58 -08:00
137a8ec45b Merge pull request #216
ae55e85 Use faster byteswapping and avoid alignment-increasing casts. (Pieter Wuille)
2015-02-24 02:22:54 -08:00
7c3771dd0f Disable overlength-strings warnings. 2015-02-23 14:12:25 -08:00
8956111802 use 128-bit hex seed 2015-02-23 07:32:37 -08:00
02efd06554 Use RFC6979 for test PRNGs 2015-02-23 07:30:08 -08:00
ae55e850c7 Use faster byteswapping and avoid alignment-increasing casts. 2015-02-23 04:58:58 -08:00
443cd4b8ee Get rid of hex format and some binary conversions 2015-02-23 04:37:21 -08:00
0bada0e2a9 Merge #214: Improve signing API documentation & specification
8030d7c Improve signing API documentation & specification (Pieter Wuille)
2015-02-16 11:29:15 -08:00
8030d7c0e5 Improve signing API documentation & specification 2015-02-14 15:38:27 -08:00
2b4cf416e7 Use pkg-config always when possible, with failover to manual checks for libcrypto 2015-02-13 23:44:07 +00:00
7b2fc1cac6 Merge #213: Removed gotos, which are hard to trace and maintain.
11690d3 Removed gotos, which are hard to trace and maintain. (Iang)
2015-02-13 10:41:14 -08:00
11690d3bb9 Removed gotos, which are hard to trace and maintain. 2015-02-12 18:18:31 -08:00
122a1ecf30 Merge pull request #205
6cc8425 Include a comment on secp256k1_ecdsa_sign explaining low-s. (Gregory Maxwell)
2015-02-12 17:05:32 -08:00
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
2d4cd53087 Merge pull request #161
ffccfd2 x86_64 assembly optimization for scalar_4x64 (Pieter Wuille)
2015-02-06 18:22:16 -08:00
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
6efd6e7777 Some comments explaining some of the constants in the code. 2015-02-07 00:22:13 +00:00
ffccfd2d00 x86_64 assembly optimization for scalar_4x64 2015-02-06 11:32:46 -08:00
67cbdf0440 Merge pull request #207
039723d Benchmarks for all internal operations (Pieter Wuille)
2015-02-02 20:58:01 -08:00
039723d5da Benchmarks for all internal operations 2015-02-02 20:02:39 -08:00
6cc8425c91 Include a comment on secp256k1_ecdsa_sign explaining low-s.
This was suggested by DavidEGrayson.
2015-02-02 02:47:24 +00:00
f88343f2eb Merge pull request #203
d61e899 Add group operation counts (Pieter Wuille)
2015-01-29 00:37:39 -04:00
d61e899531 Add group operation counts 2015-01-27 12:32:53 -04:00
2473f17121 Merge pull request #202
b5bbce6 Some readme updates, e.g. removal of the GMP field. (Gregory Maxwell)
2015-01-26 01:18:24 -04:00
b5bbce62e1 Some readme updates, e.g. removal of the GMP field. 2015-01-26 05:07:00 +00:00
f0d851ee6a Merge pull request #201
f735446 Convert the rest of the codebase to C89. (Gregory Maxwell)
2015-01-25 14:23:22 -04:00
a0ea88456f Merge pull request #200
bf2e1ac Convert tests to C89. (also fixes a use of bare "inline" in field) (Gregory Maxwell)
2015-01-25 13:59:31 -04:00
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
bf2e1ac7cd Convert tests to C89. (also fixes a use of bare "inline" in field) 2015-01-25 15:47:04 +00:00
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
fff412e10c Merge pull request #197
4be8d6f Centralize the definition of uint128_t and use it uniformly. (Gregory Maxwell)
d9543c9 Switch scalar code to C89. (Gregory Maxwell)
2015-01-25 01:38:24 -04:00
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
d9543c904f Switch scalar code to C89. 2015-01-25 05:09:57 +00:00
fcc48c4561 Remove the non-storage cmov 2015-01-25 00:56:22 -04:00
55422b6aaf Switch ecmult_gen to use storage types 2015-01-25 00:46:31 -04:00
41f8455434 Use group element storage type in EC multiplications 2015-01-25 00:32:22 -04:00
e68d7208ec Add group element storage type 2015-01-25 00:31:56 -04:00
ff889f7d90 Field storage type 2015-01-25 00:11:20 -04:00
7137be8110 Merge pull request #196
0768bd5 Get rid of variable-length hex string conversions (Pieter Wuille)
2015-01-24 22:15:36 -04:00
0768bd55a1 Get rid of variable-length hex string conversions 2015-01-24 21:52:48 -04:00
e84e761915 Merge pull request #195
792bcdb Covert several more files to C89. (Gregory Maxwell)
2015-01-24 21:36:12 -04:00
792bcdb015 Covert several more files to C89. 2015-01-24 23:34:09 +00:00
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
17db09e3af Merge pull request #194
402878a fix ifdef/ifndef (mb300sd)
2015-01-24 15:26:15 -04:00
402878ae11 fix ifdef/ifndef 2015-01-23 17:09:50 -05:00