Commit Graph

210 Commits

Author SHA1 Message Date
Andrew Poelstra f93b959b4a disallow Messages that are not valid secret keys to prevent mistakes related to 0 2018-11-10 13:05:11 +00:00
Andrew Poelstra 8d2347602a remove `ops::Index` impls for `Signature` 2018-11-10 12:56:19 +00:00
Andrew Poelstra 7fbaf2f91b remove unsafe ZERO_KEY and deprecated ONE 2018-11-10 12:56:19 +00:00
Andrew Poelstra 4b88cfc2fc
Merge pull request #78 from rust-bitcoin/2018-11-remove-without-caps
Update upstream libsecp; remove `without_caps` and all use of dummy contexts
2018-11-10 12:51:14 +00:00
Andrew Poelstra 8986aa3d71 export `serde`, `rand` and `libc`; update version to 0.11.5 2018-11-07 20:18:55 +00:00
Andrew Poelstra 223eb41fd0 remove context object from ECDH 2018-11-06 22:16:24 +00:00
Andrew Poelstra 93abca5896 remove `without_caps` and every function that used a cap-less context 2018-11-06 22:16:24 +00:00
Andrew Poelstra 4653100b7a update upstream libsecp256k1 to 314a61d72474aa29ff4afba8472553ad91d88e9d 2018-11-06 22:16:13 +00:00
Andrew Poelstra 68c838f357 change `Debug` impl for `Signature` to use `Display` 2018-11-03 15:52:07 +00:00
Andrew Poelstra 30aa3a0c28 add `fmt::Display` and `str::FromStr` impls for `Signature` 2018-11-03 15:52:05 +00:00
Andrew Poelstra 572adb2873 add `FromStr` implementation for key types 2018-11-03 15:52:03 +00:00
Andrew Poelstra a810880c54 restore missing `mem` import in key.rs 2018-08-22 20:43:20 +00:00
Andrew Poelstra 0d41c23c21 Revert "remove PublicKey::combine"
This reverts commit 17450e91fd.
2018-08-22 20:18:25 +00:00
Andrew Poelstra c773dfbc8d remove unused import that was causing warning 2018-08-22 16:40:05 +00:00
Andrew Poelstra 2c18a16858
Merge pull request #50 from rust-bitcoin/2018-08-no-combine
remove PublicKey::combine
2018-08-21 18:36:27 +00:00
Andrew Poelstra 3563c5f305
Merge pull request #46 from rust-bitcoin/2018-08-context-debug
add Debug impl to context object
2018-08-20 18:34:13 +00:00
Andrew Poelstra 1f73a784cb
Merge pull request #52 from rust-bitcoin/2018-08-display-keys
add Display impl for the key types which outputs their hex representation
2018-08-20 18:32:53 +00:00
Andrew Poelstra 7a5617d01d
Merge pull request #44 from rust-bitcoin/2018-07-docs
improve documentation
2018-08-20 18:12:42 +00:00
Andrew Poelstra 93d8249028 improve documentation 2018-08-20 17:56:46 +00:00
Andrew Poelstra 7d2474b10a add Display impl for the key types which outputs their hex representation
Since making PublicKey::serialize return a fixed-size array, this no longer
requires any allocation, so there's no reason not to have it.
2018-08-15 20:40:15 +00:00
Andrew Poelstra 17450e91fd remove PublicKey::combine 2018-08-15 16:29:23 +00:00
Dimitris Apostolou 5c6dcf6b5e
Fix typo 2018-08-15 11:03:22 +03:00
Andrew Poelstra 83c7b6d9b7 add Debug impl to context object 2018-08-12 15:23:05 +00:00
Andrew Poelstra 2478930ec1 add feature-gated serde 1.0 support for Signature, SecretKey, PublicKey 2018-07-25 14:44:51 +00:00
Andrew Poelstra 54ddbc74a4
Merge pull request #37 from rust-bitcoin/2018-07-public-key
remove `PublicKey::new()` and `PublicKey::is_valid()`
2018-07-25 13:19:10 +00:00
Andrew Poelstra c3ec027925 remove `PublicKey::new()` and `PublicKey::is_valid()` 2018-07-24 21:24:19 +00:00
Andrew Poelstra bc773fbdce add comments for Sync/Send impl 2018-07-24 21:18:03 +00:00
Andrew Poelstra 2aeff4c62f fix typos 2018-07-24 21:16:52 +00:00
Roman Zeyde 5442e710a8 Remove Schnorr support
It was removed from bitcoin-core/libsecp256k1 at e06e878fd7dcc99825025fa99aedb86bc7d5c29f
2018-07-09 15:10:38 +03:00
Andrew Poelstra b433e7bb1e
Merge pull request #27 from thomaseizinger/feature/ergonomic-apis
Improve API ergonomics
2018-06-08 18:02:24 +00:00
Thomas Eizinger 20222d50c9 Add docs to new public API 2018-06-08 08:48:28 +08:00
Thomas Eizinger f13cdfa8a4 Replace Result return type with actual value
This introduces the actual breaking API change.
2018-06-08 08:48:02 +08:00
Thomas Eizinger be7134c7f4 Cleanup obsolete code
Remove ContextFlag enum
Remove InvalidContext error-enum variant
Remove unused imports
2018-06-08 08:41:30 +08:00
Thomas Eizinger bb77741e47 Fix unit tests and benchmarks
The new API allows us to remove a bunch of tests which are now checked
by the compiler.
2018-06-08 08:38:06 +08:00
Thomas Eizinger f1a88259fb Introduce generic-based capability handling
Add type parameter to Secp256k1
Add PhantomData for C
Separate into structs and traits
Move constructors to own impl blocks
2018-06-06 12:58:29 +08:00
Andrew Poelstra 94807d9d29
Merge pull request #24 from TheBlueMatt/master
impl fuzztarget secp256k1_ecdsa_signature_serialize_der
2018-06-04 18:46:58 +00:00
Aleksey Sidorov 113fe420b9 Add tests to detect regressions. 2018-05-31 13:05:43 +03:00
Aleksey Sidorov b192157ab4 Implement Ord for arrays 2018-05-22 12:33:11 +03:00
Matt Corallo 207ccdf803 impl fuzztarget secp256k1_ecdsa_signature_serialize_der 2018-04-25 13:11:15 -04:00
Matt Corallo 730da80f0b Ensure fuzztarget pubkey deserialize-serialize roundtrips are same 2018-03-29 15:41:28 -04:00
Matt Corallo eee25f6265 Fix fuzztarget ECDH to be symmetric 2018-03-29 11:21:13 -04:00
Matt Corallo e1878c4522 Remove all serde/rustc-serialize stuff 2018-03-21 18:01:33 -04:00
Matt Corallo 86af2dc0d2 Fix missing include on older rustcs 2018-03-21 18:01:33 -04:00
Matt Corallo 5a7c88b9c7 Add fuzztarget feature that replaces crypto with memcpys 2018-03-20 11:58:59 -04:00
Matt Corallo 7b396112fd Correct ptr type in ffi 2018-03-19 15:49:16 -04:00
Andrew Poelstra 6d4f64f901 fix potential unsafety bug for non-u8 types in macros
We don't have any non-u8 newtypes but better safe than sorry. See
https://github.com/apoelstra/rust-bitcoin/pull/45/
2018-02-14 16:25:45 +00:00
Andrew Poelstra f14e747431 expose key::{Secret, Public}Key in the crate root for ease of use 2018-01-17 15:38:11 +00:00
Andrew Poelstra 2c5f45e165 expose 2-key version of PublicKey::combine 2017-12-21 01:04:07 +00:00
Andrew Poelstra 5c54698bf9 make `serde` optional 2017-12-19 22:40:06 +00:00
Andrew Poelstra 12e9f4b90b make `rustc-serialize` crate optional 2017-12-19 22:36:30 +00:00
Andrew Poelstra 298929600b make `rand` crate optional 2017-12-19 22:36:27 +00:00
Andrew Poelstra dba0d67912 remove arrayvec dependency; rename PublicKey::serialize_vec 2017-12-19 20:36:46 +00:00
Tim Ruffing e71ed3b6d2 Implement serde traits for Signature 2017-07-21 23:58:19 +02:00
Tim Ruffing b1d8b09f25 Add tests for trailing bytes during deserilization 2017-07-21 22:21:37 +02:00
Tim Ruffing 76d160344b Update serde to 1.0 2017-07-21 22:15:00 +02:00
Andrew Poelstra b6887b44a0
add compact signature encoding 2017-07-12 19:55:06 +00:00
Andrew Poelstra f88eb1d6d7 Merge pull request #14 from petertodd/2017-05-08-use-copy_from_slice
Use safe copy_from_slice() rather than unsafe copy_nonoverlapping()
2017-05-08 12:53:19 +00:00
Peter Todd 20c5b903db
Replace unsafe copy_nonoverlapping() with safe copy_from_slice() 2017-05-08 07:31:08 -04:00
Peter Todd eccd625828
Implement From<[u8;32]> for Message 2017-05-08 07:10:51 -04:00
Peter Todd 70fd5a9e27
Improve Error::InvalidMessage comment 2017-05-08 06:12:25 -04:00
Christian Nyumbayire ab0493e46a Use DefaultHasher in place of the deprecated SipHasher 2017-04-27 21:46:28 +02:00
Andrew Poelstra 5b906ec069 expose *_tweak_mul functions 2016-08-20 17:00:39 +00:00
Andrew Poelstra 9e3b93d572 Add ZERO_KEY and ONE_KEY constants
Turns out you cannot initialize constant SecretKeys in any way; these
two constants should cover most sane use cases (other good choices
are the SECG generator and the Alpha CT generator, but these will
wait for a major CT-supporting upgrade, unless demand for them appears.)
2016-08-07 21:33:38 +00:00
Andrew Poelstra 458a3d9417 Update libsecp to latest master, c18b869e58aa4d3bff6958f370f6b643d1223c44 2016-01-14 18:35:54 +00:00
Dawid Ciężarkiewicz 16b36f18e1 key: Add PubKey hashing test. 2016-01-08 20:04:10 -08:00
Dawid Ciężarkiewicz 6686c213dd Implement Hash for PublicKey. 2016-01-05 21:01:40 -08:00
Andrew Poelstra cfde1f9925 Add missing schnorr.rs 2015-12-20 13:47:53 -06:00
Andrew Poelstra 4f83a83308 cleanup: remove unused attributes; add `dev` compile feature that'll run clippy 2015-12-19 20:20:47 -06:00
Andrew Poelstra f613dbbc00 Fix nonce doccoments 2015-12-15 12:48:01 -06:00
Andrew Poelstra 8aa2569818 Expose Schnorr sign/verify 2015-12-15 12:47:07 -06:00
Andrew Poelstra 9a91b69fad Remove side-effect from assertion; add release build to travis 2015-11-18 18:22:16 -06:00
Andrew Poelstra d35168d626 [BREAKING CHANGE] Fix FFI 2015-11-15 17:00:07 -06:00
Andrew Poelstra 2df3c0b37c Minor changes for problems `cargo clippy` found 2015-10-28 07:48:28 -05:00
Andrew Poelstra a65f4cf01f Expose normalize_s function to convert signatures to low-S form 2015-10-26 14:25:18 -05:00
Andrew Poelstra 8e984c5912 Add "lax DER" support; bump major version number for recent build system changes 2015-10-26 12:59:40 -05:00
Andrew Poelstra e7ca836c2b Switch to static linking of secp256k1
Pieter moved some stuff I need into the contrib/ directory which does
not expose anything through the shared lib, so I need to statically
link.

I might also use this to do evil things to expose the SHA256 code
in libsecp, but not for now ;).
2015-10-26 10:28:01 -05:00
Andrew Poelstra f1e1da1213 Update for breaking changes in underlying rustc.
This should be a major version number since I changed public constants
in the ffi module. I'm not doing so as the invariant "will the constants
be meaningful to the underlying library" has not changed.

In general this library's version numbers do not map well to the
underlying library, which is as-yet not versioned at all, so users
need to always be running "the lastest" rust-secp256k1 anyway, and
semantic versioning can't really be used meaninfully. So this is a
bit of a judgement call.
2015-10-25 18:26:08 -05:00
Andrew Poelstra d49db8167e impl Error for error type; remove `Unknown` error variant 2015-10-17 09:49:19 -05:00
Andrew Poelstra 32107132f0 Improve unit tests for bad secp context 2015-10-14 12:21:15 -05:00
Andrew Poelstra c84cfb193f [BREAKING CHANGE] Make PK::from_secret_key() return a Result; change from_ffi functions to From impls
If you try to call PublicKey::from_secret() key with an incapable context it will
now return an error. Before it would pass through to the underlying library which
would terminate the process, something we strive to never expose.

Also change the from_ffi functions on various types to impl's of From to be more
Rustic. We cannot change the from_slice functions because they have error returns.

Also add a Secp256k1::without_caps() function which creates a capability-less
context. I find myself using this in so many places downstream that it seems
appropriate.
2015-10-14 09:38:43 -05:00
Matt Quinn 595f64bca6 Adding to_i32 and from_i32 functions to RecoveryId in order to give
library users the ability to create RecoveryId objects and convert them to i32 equivalents, without allowing users to create invalid ones.
2015-10-11 15:24:44 -07:00
Matt Quinn ebde999634 RecoverableSignature now supports compact serialization via FFI, with additional test case added. 2015-10-11 00:04:28 -07:00
Andrew Poelstra 701c5e5e08 Expose serialization of Signature; move copy_nonoverlapping for rustc stable 2015-10-09 14:20:21 -05:00
Andrew Poelstra ec0e8407f2 Minor documentation fixes 2015-10-09 11:39:42 -05:00
Andrew Poelstra 2748dae7eb Remove `hex_slice` macro as it was never used 2015-09-21 08:30:06 -05:00
Andrew Poelstra b978e76934 Drop some unused imports; bump version no 2015-09-20 15:30:43 -05:00
Andrew Poelstra 5ce825398a Fix benchmarks 2015-09-20 15:24:25 -05:00
Andrew Poelstra b42b1f9408 Bugfix for nightly 2015-09-20 15:13:42 -05:00
Andrew Poelstra 4012281a2d Fix for upstream API changes 2015-09-20 14:52:29 -05:00
Andrew Poelstra cc68cf8b9e Update serde dep to 0.6 from 0.3 2015-09-20 13:29:09 -05:00
Andrew Poelstra 016d781f2e Fix for upstream API changes; add ECDH support
I didn't mean for both of these to go into the same commit, but given how
small the ECDH code was, and the fact that no commit prior to this one will
compile (as both libsecp256k1 and rustc have changed so much), I'm letting
it slide.
2015-09-18 15:40:42 -05:00
Andrew Poelstra 8d6f384dac Update Travis to use travis-cargo 2015-07-28 13:21:12 -05:00
Andrew Poelstra 77f6b6bf21 [API BREAK] Update for new libsecp256k1 API 2015-07-28 11:05:13 -05:00
Andrew Poelstra 5602d6f988 Expose `secp256k1_context_randomize`
This is a new libsecp256k1 function which does additive blinding
for nonce generation during signing.
2015-05-03 18:22:30 -05:00
Andrew Poelstra 63011aaa3f Add a bunch of benchmarks 2015-04-30 14:28:34 -05:00
Andrew Poelstra fba427cb15 Add extreme value sign/verify test 2015-04-28 13:46:17 -05:00
Andrew Poelstra 1ba1f5b2ce Add sanity-check unit test for RecoveryId
This is kinda silly but gets me 100% coverage from kcov
2015-04-13 22:21:56 -05:00
Andrew Poelstra f8bbc89df6 [API BREAK] expose ability to create contexts without verify or signing caps
There are a lot of cases in rust-bitcoin where we need a `Secp256k1`
which doesn't need any signing or verification capabilities, only
checking the validity of various objects. We can get away with a bare
context (i.e. no precomputation) which can be cheaply created on demand,
avoiding the need to pass around references to Secp256k1 objects everywhere.

API break because the following functions can now fail (given an insufficiently
capable context) and therefore now return a Result:

    Secp256k1::generate_keypair
    Secp256k1::sign
    Secp256k1::sign_compact
2015-04-13 22:15:52 -05:00
Andrew Poelstra d7c7230f28 Impl `Send` and `Sync` for secp256k1 contexts 2015-04-13 20:41:24 -05:00
Andrew Poelstra fb75373b47 [API BREAK] Remove Rng from Secp256k1 and associated code
The Rng was only used for key generation, and for BIP32 users not even then;
thus hauling around a Rng is a waste of space in addition to causing a
massive amount of syntactic noise. For example rust-bitcoin almost always
uses `()` as the Rng; having `Secp256k1` default to a `Secp256k1<Fortuna>`
then means even more syntactic noise, rather than less.

Now key generation functions take a Rng as a parameter, and the rest can
forget about having a Rng. This also means that the Secp256k1 context
never needs a mutable reference and can be easily put into an Arc if so
desired.
2015-04-12 15:54:22 -05:00