890 Commits

Author SHA1 Message Date
Andrew Poelstra
ec1ef040f5 generator: remove unnecessary ARG_CHECK from generate() 2018-12-14 20:25:51 +00:00
Gregory Sanders
b0e9aa828f Fix generator makefile
Include test_impl.h
2018-12-14 20:25:51 +00:00
Jonas Nick
526c65499f Fix pedersen_blind_generator_blind_sum return value documentation 2018-12-14 20:25:51 +00:00
Jonas Nick
b51886e722 Add n_keys argument to whitelist_verify 2018-12-14 20:25:51 +00:00
Jonas Nick
37c57de083 Fix checks of whitelist serialize/parse arguments 2018-12-14 20:25:51 +00:00
Andrew Poelstra
9b8a9d91eb whitelist: fix serialize/parse API to take serialized length 2018-12-14 20:25:51 +00:00
Jonas Nick
7f17515609 Fix include/secp256k1_rangeproof.h function argument documentation. 2018-12-14 20:25:51 +00:00
Andrew Poelstra
0d817020d9 rangeproof: add API tests 2018-12-14 20:25:51 +00:00
Andrew Poelstra
417bb0643f surjectionproof: rename unit test functions to be more consistent with other modules 2018-12-14 20:25:51 +00:00
Andrew Poelstra
1e2d5c1a26 surjectionproof: add API unit tests 2018-12-14 20:25:51 +00:00
Andrew Poelstra
7878a298b2 surjectionproof: tests_impl.h s/assert/CHECK/g 2018-12-14 20:25:51 +00:00
Andrew Poelstra
e609591b66 rangeproof: fix memory leak in unit tests 2018-12-14 20:25:51 +00:00
Andrew Poelstra
0c17f7972a add surjection proof module
Includes fix and tests by Jonas Nick.
2018-12-14 20:25:51 +00:00
Andrew Poelstra
c174f0c609 Implement ring-signature based whitelist delegation scheme 2018-12-14 20:25:51 +00:00
Andrew Poelstra
a2bc6604f9 rangeproof: several API changes
* add summing function for blinded generators
* drop `excess` and `gen` from `verify_tally`
* add extra_commit to rangeproof sign and verify
2018-12-14 20:25:51 +00:00
Pieter Wuille
21bfb3c91a Expose generator in pedersen/rangeproof API 2018-12-14 20:25:51 +00:00
Pieter Wuille
f4620de040 Constant-time generator module 2018-12-14 20:25:51 +00:00
Andrew Poelstra
d46fc3c191 rangeproof: expose sidechannel message field in the signing API
Including a fix by Jonas Nick.
2018-12-14 20:25:51 +00:00
Andrew Poelstra
cf40b1bed2 [RANGEPROOF BREAK] Use quadratic residue for tie break and modularity cleanup
Switch to secp256k1_pedersen_commitment by Andrew Poelstra.
Switch to quadratic residue based disambiguation by Pieter Wuille.
2018-12-14 20:25:51 +00:00
Andrew Poelstra
6d28767c79 Get rid of precomputed H tables (Pieter Wuille) 2018-12-14 20:25:51 +00:00
Gregory Maxwell
ae1e576f67 Pedersen commitments, borromean ring signatures, and ZK range proofs.
This commit adds three new cryptosystems to libsecp256k1:

Pedersen commitments are a system for making blinded commitments
 to a value.  Functionally they work like:
  commit_b,v = H(blind_b || value_v),
 except they are additively homorphic, e.g.
  C(b1, v1) - C(b2, v2) = C(b1 - b2, v1 - v2) and
  C(b1, v1) - C(b1, v1) = 0, etc.
 The commitments themselves are EC points, serialized as 33 bytes.
 In addition to the commit function this implementation includes
 utility functions for verifying that a set of commitments sums
 to zero, and for picking blinding factors that sum to zero.
 If the blinding factors are uniformly random, pedersen commitments
 have information theoretic privacy.

Borromean ring signatures are a novel efficient ring signature
 construction for AND/OR admissions policies (the code here implements
 an AND of ORs, each of any size).  This construction requires
 32 bytes of signature per pubkey used plus 32 bytes of constant
 overhead. With these you can construct signatures like "Given pubkeys
 A B C D E F G, the signer knows the discrete logs
 satisifying (A || B) & (C || D || E) & (F || G)".

ZK range proofs allow someone to prove a pedersen commitment is in
 a particular range (e.g. [0..2^64)) without revealing the specific
 value.  The construction here is based on the above borromean
 ring signature and uses a radix-4 encoding and other optimizations
 to maximize efficiency.  It also supports encoding proofs with a
 non-private base-10 exponent and minimum-value to allow trading
 off secrecy for size and speed (or just avoiding wasting space
 keeping data private that was already public due to external
 constraints).

A proof for a 32-bit mantissa takes 2564 bytes, but 2048 bytes of
 this can be used to communicate a private message to a receiver
 who shares a secret random seed with the prover.
2018-12-14 20:25:51 +00:00
Greg Maxwell
efc61dc0ca Add 64-bit integer utilities 2018-12-14 20:25:51 +00:00
Pieter Wuille
e34ceb333b
Merge #557: Eliminate scratch memory used when generating contexts
b3bf5f9 ecmult_impl: expand comment to explain how effective affine interacts with everything (Andrew Poelstra)
efa783f Store z-ratios in the 'x' coord they'll recover (Peter Dettman)
ffd3b34 add `secp256k1_ge_set_all_gej_var` test which deals with many infinite points (Andrew Poelstra)
84740ac ecmult_impl: save one fe_inv_var (Andrew Poelstra)
4704527 ecmult_impl: eliminate scratch memory used when generating context (Andrew Poelstra)
7f7a2ed ecmult_gen_impl: eliminate scratch memory used when generating context (Andrew Poelstra)

Pull request description:

  Builds on #553

Tree-SHA512: 6031a601a4a476c1d21fc8db219383e7930434d2f199543c61aca0118412322dd814a0109c385ff1f83d16897170dd0c25051697b0f88f15234b0059b661af41
2018-11-26 09:14:58 -08:00
Andrew Poelstra
b3bf5f99a3 ecmult_impl: expand comment to explain how effective affine interacts with everything 2018-11-10 14:01:13 +00:00
Peter Dettman
efa783f8f0 Store z-ratios in the 'x' coord they'll recover 2018-11-10 13:14:43 +00:00
Andrew Poelstra
ffd3b346fe add secp256k1_ge_set_all_gej_var test which deals with many infinite points 2018-11-09 00:20:53 +00:00
Andrew Poelstra
84740acd2a ecmult_impl: save one fe_inv_var 2018-11-09 00:20:53 +00:00
Andrew Poelstra
47045270fa ecmult_impl: eliminate scratch memory used when generating context 2018-11-09 00:20:51 +00:00
Andrew Poelstra
7f7a2ed3a8 ecmult_gen_impl: eliminate scratch memory used when generating context 2018-11-09 00:16:06 +00:00
Pieter Wuille
314a61d724
Merge #553: add static context object which has no capabilities
40fde61 prevent attempts to modify `secp256k1_context_no_precomp` (Andrew Poelstra)
ed7c084 add static context object which has no capabilities (Andrew Poelstra)

Pull request description:

Tree-SHA512: a843ed7ba00a00a46eec3146ce428d4b49eb440af766f44d731b1f51553d08de8cc9a0af5ed114d0dfdca6f4bf4a2ede4dbd6a37d6bd818b81630089424a0ba5
2018-11-05 18:25:56 -08:00
Pieter Wuille
1086fda4c1
Merge #354: [ECDH API change] Support custom hash function
c8fbc3c [ECDH API change] Allow pass arbitrary data to hash function (Kirill Fomichev)
b00be65 [ECDH API change] Support custom hash function (Kirill Fomichev)

Pull request description:

  Solve #352

Tree-SHA512: f5985874d03e976cdb3d59036af7720636ad1488da40fd3bd7881b1fb71b05036a952013d519baa84c4ce4b558bdef25c4ce76b384b297e4d0aece9e37e78a01
2018-10-17 12:14:48 -07:00
Andrew Poelstra
40fde611bd prevent attempts to modify secp256k1_context_no_precomp 2018-10-04 15:16:38 +00:00
Andrew Poelstra
ed7c08417a add static context object which has no capabilities 2018-10-04 15:16:34 +00:00
Pieter Wuille
1e6f1f5ad5
Merge #529: fix tests.c in the count == 0 case
95e99f1 fix tests.c in the count == 0 case (Andrew Poelstra)

Pull request description:

  Fixes #528

Tree-SHA512: 8b28d84f95bcd1337fbd7fb187dee2a9bad2b6b595eaf42a2d855e5784f48a1f3ad5739881b22eea115d32c4525feb69b41958699a165c847fcfb8096cc4903a
2018-05-31 12:00:47 -07:00
Kirill Fomichev
c8fbc3c397 [ECDH API change] Allow pass arbitrary data to hash function 2018-05-17 00:38:58 +03:00
Kirill Fomichev
b00be65056 [ECDH API change] Support custom hash function 2018-05-17 00:05:09 +03:00
Andrew Poelstra
95e99f196f fix tests.c in the count == 0 case 2018-04-10 19:32:04 +00:00
Pieter Wuille
452d8e4d2a
Merge #523: scratch: add stack frame support
6fe5043 scratch: add stack frame support (Andrew Poelstra)

Pull request description:

  Replaces the single-blob stack space ith one that internally manages multiple blobs, which are exposed to the user as "frames". Users allocate new blobs with `secp256k1_scratch_allocate_frame` and deallocate them with `secp256k1_scratch_deallocate_frame`. Then any calls to `secp256k1_scratch_alloc` use the frame at the top of the stack. This is guaranteed to succeed, assuming that the frame allocation succeeded and that the user is not requesting more memory than the frame was allocated with.

Tree-SHA512: 0b2072c5b9df8f3b40fb6d76e94fcfcc6a03a7da33e31249b5f24b02eb8a3311f282f6a4732153d6101968de8f9a568009a72735a1cc688a0f3040055799a09d
2018-04-05 16:35:27 -07:00
Andrew Poelstra
6fe50439ae scratch: add stack frame support 2018-04-05 22:49:29 +00:00
Pieter Wuille
9bc2e26502
Merge #522: parameterize ecmult_const over input size
7c1b91b parameterize ecmult_const over input size (Andrew Poelstra)

Pull request description:

Tree-SHA512: 0afd0c0156add54209e79c623d780559dfd85910ef0a0c476bcabd1074ad468d7983b7b6bb6e8bd3fe6e9b8bc703d78d09c3b99f8da990dfe004bbdc65496e66
2018-04-05 14:09:14 -07:00
Andrew Poelstra
7c1b91ba4b parameterize ecmult_const over input size 2018-04-05 21:05:13 +00:00
Pieter Wuille
dbc3ddd5e2
Merge #513: Increase sparsity of pippenger fixed window naf representation
ec0a7b3 Don't touch leading zeros in wnaf_fixed. (Jonas Nick)
9e36d1b Fix bug in wnaf_fixed where the wnaf array is not completely zeroed when given a 0 scalar. (Jonas Nick)
96f68a0 Don't invert scalar in wnaf_fixed when it is even because a caller might intentionally give a scalar with many leading zeros. (Jonas Nick)
6dbb007 Increase sparsity of pippenger fixed window naf representation (Jonas Nick)

Pull request description:

  Fixes #506

Tree-SHA512: 49a237a7d09c0c376ba4e6b1f522b9aff2517e420dfef9df810fd5ba920e0b98be8fe3f730b32e41b4aef475bc4cf3b13220024bd8d6f40c2744e6f392ff97a8
2018-04-05 09:46:08 -07:00
Pieter Wuille
fb9271dcf0
Merge #510: add a couple missing consts to ecmult_pippenger_wnaf
9b3ff03 add a couple missing `const`s to ecmult_pippenger_wnaf (Andrew Poelstra)

Pull request description:

Tree-SHA512: a58458bb4cb1af357b13a506ce8720ce9ecd0c1771a49d9f3ce9398ba7afc56977d722bbd30a63c7c76e63e659ed956d5e82ff762efc4b49488adf0756dc656a
2018-03-26 18:28:56 -07:00
Pieter Wuille
cd5f6028e5
Merge #515: Fix typo
9b7c47a Fix typo (Dimitris Apostolou)

Pull request description:

Tree-SHA512: d61f3451152ed6094368456e1c57d7a7ff85f975045bedff4fcb5c446894d9c9029f6ff4bfe724eba8501843316bd965bff1a302a7ea4d1b9c3e4de2059cadd0
2018-03-26 17:18:42 -07:00
Pieter Wuille
09146ae854
Merge #512: secp256k1_ec_privkey_negate - fix documentation
1646ace secp256k1_ec_privkey_negate - fix documentation (Thomas Kerin)

Pull request description:

Tree-SHA512: 711973d3fc4c790cdc469ed5500f857d68fe186d41b97fbbddbc90723b2db60f3ee9fa01b44bcc1a70f246096b85b50ae2139602b98924ddecbcbc6adc7bd217
2018-03-26 17:18:12 -07:00
Jonas Nick
ec0a7b3ae3 Don't touch leading zeros in wnaf_fixed. 2018-03-23 14:52:13 +00:00
Jonas Nick
9e36d1bfe2 Fix bug in wnaf_fixed where the wnaf array is not completely zeroed when given a 0 scalar. 2018-03-23 14:52:02 +00:00
Jonas Nick
96f68a0afc Don't invert scalar in wnaf_fixed when it is even because a caller might
intentionally give a scalar with many leading zeros.
2018-03-23 14:51:53 +00:00
Dimitris Apostolou
9b7c47a21e
Fix typo 2018-03-05 18:53:33 +02:00
Jonas Nick
6dbb007869 Increase sparsity of pippenger fixed window naf representation 2018-03-01 18:20:36 +00:00