Commit Graph

54 Commits

Author SHA1 Message Date
Andrew Poelstra 6a893208f8
Merge rust-bitcoin/rust-secp256k1#345: Add a static immutable zero aligned type
5e6d0f1363 Switch to associated constant (Jonathan Underwood)
9cf552e240 Add a static immutable zero aligned type (junderw)

Pull request description:

  The `zeroed` fn can not be used in static assignments.

  In environments where it is no_std and no allocator are present, the only way to get a slice of AlignedTypes is dynamically, so `preallocated_gen_new` can't be used.

  By offering this as a static, it can be used in static assignments as such:

  ```rust
  #[cfg(target_pointer_width = "32")]
  static mut CONTEXT_BUFFER: [AlignedType; 69645] = [ZERO_ALIGNED; 69645];
  #[cfg(target_pointer_width = "64")]
  static mut CONTEXT_BUFFER: [AlignedType; 69646] = [ZERO_ALIGNED; 69646];
  static mut SECP256K1: Option<Secp256k1<AllPreallocated>> = None;

  pub fn get_context(seed: Option<&[u8; 32]>) -> &'static Secp256k1<AllPreallocated<'static>> {
      unsafe {
          if SECP256K1.is_none() {
              SECP256K1 = Some(
                  Secp256k1::preallocated_gen_new(&mut CONTEXT_BUFFER)
                      .expect("CONTEXT_BUFFER size is wrong"),
              );
          }
          if let Some(seed) = seed {
              SECP256K1.as_mut().unwrap().seeded_randomize(seed);
          }
          SECP256K1.as_ref().unwrap()
      }
  }
  ```

ACKs for top commit:
  apoelstra:
    ACK 5e6d0f1363

Tree-SHA512: fc800f8c5c637fc7f81312da17f0a96d17cd087a2e6876f4dedbefffbe92b3625deb93636265f334f9fbd7ac38baa529d4ec72857dae662e26d753f32f91d394
2022-01-02 23:31:34 +00:00
Jonathan Underwood 5e6d0f1363
Switch to associated constant 2021-12-23 12:30:43 -07:00
junderw 9cf552e240
Add a static immutable zero aligned type 2021-12-04 13:38:34 +09:00
Andrew Poelstra 96d2242f6a
Merge rust-bitcoin/rust-secp256k1#335: Implement `Hash` for `schnorrsig::Signature`
75b49efb3d Implement `Hash` for all array newtypes (elsirion)

Pull request description:

  I pondered putting the impl into the array type macro together with `(Partial)Eq`, but that would have meant removing other implementations and potentially implementing it for types where it is not wanted. The drawback of the separate impl is that it is more disconnected from the `(Partial)Eq` impl and could theoretically diverge (although unlikely in case of such a simple type) which would break the trait's contract.

ACKs for top commit:
  apoelstra:
    ACK 75b49efb3d

Tree-SHA512: 44d1bebdd3437dfd86de8b475f12097c4a2f872905c822a9cde624089fdc20f68f59a7734fdcc6f3a17ed233f70f63258dfd204ca269d2baf8002ffc325ddc87
2021-11-05 14:29:50 +00:00
elsirion 75b49efb3d
Implement `Hash` for all array newtypes
* implements `Hash` as part of the newtype macro
* removes type-specific implementations
2021-11-04 22:16:42 +01:00
junderw 24d6f62603
Use explicit u8 when assigning a byte slice 2021-10-17 10:07:51 +09:00
Dr Maxim Orlovsky 455ee57ba4
Bump sys version to 0.4.1 2021-06-18 23:47:24 +02:00
Dr Maxim Orlovsky aa6bdaff3c
Creating SecretKey and PublicKey from BIP-340 KeyPair 2021-06-16 10:56:59 +02:00
Dr. Maxim Orlovsky 4652ab6116 Updating secp256k1 version to 1758a92ffd896af533b142707e9892ea6e15e5db 2021-06-14 17:55:38 +03:00
Matt Corallo 79119e8123 Skip context randomization in fuzzing to improve performance 2021-06-08 19:17:08 +00:00
Matt Corallo c486ca10c7 Use a global static context in fuzzing, reducing overhead 2021-06-08 19:17:08 +00:00
Matt Corallo 940a51c2c6 Reduce cryptography usage in --cfg=fuzzing
This reduces the usage of real cryptography in --cfg=fuzzing,
specifically replacing the secret->public key derivation with a
simple copy and ECDH with XOR of the public and private parts
(plus a stream of 1s to make a test pass that expected non-0
output).

It leaves secret tweak addition/multiplication as-is.

It also changes the context creation to over-allocate and store
the context flags at the end of the context buffer, allowing us
to easily test context flags in each function.

While it would be nice to have something fancier (eg XOR-based),
its not immediately obvious how to accomplish this, and better to
fix the issues I have than spend too much time on it.

Fixes #271.

This partially reverts b811ec133a
2021-06-08 19:17:08 +00:00
Gregory Hill c86808fac7
use core instead of std for wasm sanity checks
Signed-off-by: Gregory Hill <gregorydhill@outlook.com>
2021-01-20 14:55:48 +00:00
Andrew Poelstra 65ff814a39 rename `rust_secp_fuzz` to `fuzzing` 2021-01-11 19:14:42 +00:00
Andrew Poelstra d12be7966c drop unnecessary no_mangle annotations on non-exported functions 2020-12-29 19:30:59 +00:00
Andrew Poelstra a93d671d05 update libsecp to 98dac87839838b86094f1bccc71cc20e67b146cc 2020-12-29 17:15:51 +00:00
Andrew Poelstra a9049f8eb2
Merge pull request #266 from junderw/patch-1
Fix link_name for secp256k1_ec_seckey_negate
2020-12-29 17:12:36 +00:00
Andrew Poelstra 75d717729a fuzz: fix elichai's nits 2020-12-28 19:01:12 +00:00
Andrew Poelstra 96862b6a74 fuzz: implement recoverable signatures, get all tests passing, run them in CI 2020-12-28 18:42:46 +00:00
Jonathan Underwood 51bc0b1c0c
Fix link_name for secp256k1_ec_seckey_negate 2020-12-28 15:06:18 +09:00
Andrew Poelstra b811ec133a fuzz: only replace signing and verification, leave everything else alone
We can now run unit tests with the fuzz feature on, and they'll pass,
which is some assurance that fuzzing with the feature on won't lead to
spurious failures due to the fuzz harness inadequately simulating message
signing.
2020-12-23 17:59:52 +00:00
Andrew Poelstra 40c31342f2 ffi: make function types nullable 2020-12-23 17:59:52 +00:00
Andrew Poelstra 29316efff5 add warning about fuzzing being enabled 2020-12-22 17:34:50 +00:00
Andrew Poelstra 85075a654c replace `fuzztarget` Cargo feature with a rustc --cfg flag
It's super dangerous to use Cargo features for this, since they can be set
accidentally (or maliciously by any crate in a user's entire dep tree). Instead
we can just require users set `RUSTFLAGS` appropriately, which we can easily
do in our fuzzing scripts.
2020-12-22 15:42:02 +00:00
Andrew Poelstra d77483f00e replace cargo `external-symbols` feature with a rustc --cfg flag
This feature was not useful for Cargo users, since Cargo does not give you
the kind of fine-grained control over C library linkage that you need. So
it was just unnecessarily confusing and would cause the build to break if
you enabled it accidentally, say, with --all-features.
2020-12-22 15:35:16 +00:00
Tobin Harding 02dec3eb9b
Implement AsRef instead of custom method
Clippy emits a warning since we define a method that has the same name
as a standard trait. Implement the trait `AsRef` instead of using a
custom method.
2020-12-22 12:56:11 +11:00
Tobin Harding 3afc172096
Conditionally compile fn strlen
`strlen` is only used under certain feature flags, use `cfg` to
conditionally build it in.

Clears clippy warning.
2020-12-22 12:55:37 +11:00
Tobin Harding 617bff9df3
Conditionally include ALIGN_TO
This const is only used under specific features, use `cfg` to
conditionally build it in.

Removes clippy warning.
2020-12-22 12:54:08 +11:00
Tobin Harding f67081a01c
Allow unnecessary parentheses
Clippy emits:

	warning: unnecessary parentheses around assigned value

Add a attribute to allow unnecessary parentheses.
2020-12-22 12:53:29 +11:00
Elichai Turkel 7b99784837
Add AligneType and redo secp256k1_context_create with alloc 2020-12-18 12:48:16 +02:00
Andrew Poelstra 0ec8fab82c stop explicitly casting references to rawptrs 2020-11-30 02:47:34 +00:00
Andrew Poelstra 12b0abbcf8 make `ffi::Type::new` functions all unsafe, expand documentation 2020-11-27 18:42:12 +00:00
Tibo-lg 45a4459baf Update secp256k1-sys to add schnorr/extra-keys 2020-11-09 16:00:28 +09:00
Tibo-lg cfb565126a Update depend folder to latest master 2020-10-12 21:35:28 +09:00
Elichai Turkel 48dd77e47b
Remove old deprecated blank functions 2020-08-27 22:52:16 +03:00
Elichai Turkel 9e5a351ea7
remove redundant code after MSRV bump 2020-08-27 22:51:36 +03:00
Elichai Turkel 1605bde420 replace privkey functions with seckey functions, deprecate privkey functions 2020-08-26 20:55:18 +00:00
Andrew Poelstra 1a9aece312 secp256k1-sys: update upstream to 670cdd3f8be25f81472b2d16dcd228b0d24a5c45 2020-08-26 18:07:41 +00:00
Andrew Poelstra 3692c94a0f
Merge pull request #220 from rantan/add_negate_support
Add negate support
2020-08-26 17:43:46 +00:00
Kohei Taniguchi 1742973a1f Add fuzztarget for negation 2020-06-09 11:06:11 +09:00
Kohei Taniguchi d45f709cd4 Add negation support 2020-06-09 10:05:07 +09:00
Matt Corallo 0052bc92fb Expose the underlying array in addition to a ptr to the same 2020-06-01 14:35:31 -04:00
Elichai Turkel affc6b4027 Add sanity checks for wasm32 for size and alignment of types 2020-04-29 15:32:57 -04:00
Elichai Turkel 931253d41e Add a size_t type to types 2020-04-29 15:32:57 -04:00
Andrew Poelstra 9aa768df10
Merge pull request #195 from elichai/patch-1
Missing return c_int in NonceFn
2020-04-06 14:49:58 +00:00
Elichai Turkel 889e9a8740
Fix wrong feature name external-symbols 2020-02-09 16:37:39 +02:00
Elichai Turkel f277530669
Fix missing return c_int in NonceFn 2020-01-26 14:20:26 +02:00
Elichai Turkel 89271c9c3c
Fix fuzztarget symbols 2020-01-09 16:56:10 +02:00
Steven Roose 987d556a67
Bump secp256k1-sys to v0.1.1 2019-12-11 15:55:00 +00:00
Elichai Turkel ca8ea92418
Fixed secp256k1_ecdh fuzztarget 2019-12-05 18:05:36 +02:00