Commit Graph

40 Commits

Author SHA1 Message Date
Tobin Harding de65fb2f1e
Implement de/serialization for SharedSecret
As we do for other keys implement serde de/serialization for the
`SharedSecret`. Includes implementation of `from_slice` method that is
the borrowed version of `from_bytes` as well as a `FromStr`
implementation that parses a hex string.
2022-03-12 07:46:21 +11:00
Dominik Spicher 9be8e74107 Allow SharedSecret to be created from byte array
This was accidentally removed in 8b2edad. See also the discussion
on https://github.com/rust-bitcoin/rust-secp256k1/pull/402
2022-03-10 22:38:25 +01:00
Tobin Harding cf6badf96a
Obfuscate SharedSecret when printing
Currently printing the `SharedSecret` using `Display` or `Debug` prints
the real secret, this is sub-optimal. We have a solution for other
secrets in the project where printing is obfuscated and we provide a
`display_secret` method for explicitly printing.

Mirror the logic for other secrets and obfuscate the `SharedSecret` when printing.
2022-02-28 07:22:17 +00:00
Tobin Harding 5603d71ad3
Limit SharedSecret to 32 byte buffer
The `SharedSecret` uses sha256 to hash the secret, this implies the
secret is 32 bytes of data.

Currently we use a buffer of 256 bytes, this is unnecessary.

Change the implementation of `SharedSecret` to use a 32 byte buffer.
2022-02-21 13:33:17 +00:00
Tobin Harding d5eeb099ad
Use more intuitive local var numbering
In test code we use multiple pub/sec keys. It is more intuitive if the
'secret 1' is generated by the owner of secret key 1.

Refactor only, no logic changes.
2022-02-21 13:11:30 +00:00
Tobin Harding 834f63c26c
Separate new_with_hash into public function
In preparation for simplifying the `SharedSecret` internals pull the
`new_with_hash` function logic out into a standalone public function
that provides similar functionality without use of the `SharedSecret`
struct. Function now returns the 64 bytes of data representing a shared
point on the curve, callers are expected to the hash these bytes to get
a shared secret.
2022-02-18 09:51:06 +00:00
Tobin Harding 806eaca5f1
Use feature std with rand-std
Recently we fixed a bunch of feature gates to use `rand-std` instead
of `rand` but in doing so did not notice that the same feature gates
were using `alloc` which is meaningless if `std` is enabled.

Feature gate on `std` if we are using `rand-std`.
2022-02-11 07:44:16 +00:00
Tobin Harding c9e6ca1680
Use rust-bitcoin module doc style
Recently we introduced uniform styling for module docs over in
`rust-bitcoin` repo. We can do the same here but its a bit controversial
because it removes the heading from module docs and every single public
module in rust-secp256k1 uses a heading. Instead we use a full
sentences. Also makes uniform the trailing `//!`.
2022-02-09 07:31:55 +00:00
Tobin Harding d25431c1da
Use 3rd person tense for function docs
As is typical in the Rust ecosystem use the third person tense when
documenting functions. E.g.,

```
/// Creates a new Foo.
```
As opposed to

```
/// Create a new Foo.
```
2022-02-09 07:31:54 +00:00
Tobin Harding 5e07e7596b
Add period to sentences
Add the terminating period to all docs sentences. (Also one instance of
capitialize initial character in sentence.)
2022-02-09 07:31:53 +00:00
Tobin Harding b3503ba148 Add example to SharedSecret
Currently the rustdoc on `SharedSecret` is wildly incorrect (possibly a
cut'n'pasta error).

Fix the rustdoc for `SharedSecret` and add an examples section to assist
testing the public API.

Fixes: 249
2022-02-04 11:55:06 +11:00
Tobin Harding c01cd8f1f3 Enable running tests without default features
Currently various features fail to build when enabled without default
features. This is because many tests need feature gating.

Feature gating the import statements quickly turns into spaghetti when
trying to cover all combinations of two features correctly, instead just
allow unused imports on `tests` modules where needed.

Add correct feature requirements to the examples so they also can be run
without default features.

Improve the CI script by doing:

- Add `std` to the feature matrix.
- Add `--no-default-features` to test runs in the CI script.
2022-02-01 15:20:44 +11:00
Thomas Eizinger ce4427747d
Move ECDSA functionality into ECDSA module 2021-11-11 13:43:50 +11:00
Elichai Turkel 1f08a313e5
Replace serde macros with generic visitor module
Co-authored-by: Elichai Turkel <elichai.turkel@gmail.com>
Co-authored-by: Sebastian Geisler <sebastian@blockstream.io>
2021-01-12 11:51:29 +11:00
Andrew Poelstra 40c31342f2 ffi: make function types nullable 2020-12-23 17:59:52 +00:00
Andrew Poelstra b31bf2f611
Merge pull request #258 from thomaseizinger/better-wasm-tests
Run more tests in wasm
2020-12-22 06:12:01 +00:00
Tobin Harding 4e87e6fe94
Implement is_empty method
Clippy warns of missing `is_empty`, trivially implement it by calling
through to `self.data.is_empty()`.
2020-12-22 13:37:25 +11:00
Thomas Eizinger 8b8e482f79
Run more tests in wasm
Instead of repeating ourselves in defining one big test for the wasm
target, we can override the `test` attribute with the `wasm-bindgen-test`
one and therefore automatically run all (supported) tests in wasm.

Unfortunately, wasm doesn't support catching panics yet which means we
have to disable the `test_panic_raw_ctx` test.
2020-12-22 10:30:56 +11:00
Elichai Turkel c69d43d84e Update key.rs to use the new seckey functions 2020-08-26 21:16:19 +00:00
Andrew Poelstra 86751b2d74
Merge pull request #201 from elichai/2020-03-ecdh
Simplify callback logic to returning raw coordinates
2020-04-06 14:48:57 +00:00
Elichai Turkel b2edf157cd
Fix broken benchmarks 2020-04-05 11:08:29 +03:00
Elichai Turkel 2eff118d03
Simplify callback logic to returning raw coordinates 2020-03-01 13:46:25 +02:00
Elichai Turkel 5619f2a5df
Add an unsafe variant of new_with_has called new_with_hash_no_panic 2019-12-09 22:53:24 +02:00
Elichai Turkel 124c1f3c7c
feature gate new_with_hash with std only, added catch_unwind 2019-12-05 18:05:40 +02:00
Elichai Turkel f80428258c
Add tests for the new SharedSecret::new_with_hash() function 2019-12-05 17:46:24 +02:00
Elichai Turkel af8fa21a20
Add 'new_with_hash' function to SharedSecret 2019-12-05 17:46:23 +02:00
Elichai Turkel 9759cb07f5
Replace SharedSecret with a more generic alternative 2019-12-05 17:45:24 +02:00
Elichai Turkel b7e20c5b12
Changed all as_*ptr() to the safer CPtr trait 2019-08-21 13:09:36 -04:00
Elichai Turkel 8e701b75b2
Replacing usage of the unsafe `blank` function to the `new` function
Signed-off-by: Elichai Turkel <elichai.turkel@gmail.com>
2019-08-16 14:15:31 -04:00
Elichai Turkel 11ce86681f
Replaced std with core, and made std::error::Error optional through feature 2019-04-14 12:09:36 +03:00
Andrew Poelstra 223eb41fd0 remove context object from ECDH 2018-11-06 22:16:24 +00:00
Andrew Poelstra 4653100b7a update upstream libsecp256k1 to 314a61d72474aa29ff4afba8472553ad91d88e9d 2018-11-06 22:16:13 +00: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 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 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
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 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