Commit graph

1481 commits

Author SHA1 Message Date
Tony Arcieri
8c2f545d91
Expand const fn support (#494)
Does a pass on adding `const` to methods where it's possible.
2023-01-06 13:29:56 -05:00
Tony Arcieri
6a51f4fa40
Make basepoint table constants &'static references (#488)
* Make basepoint table constants static references

This ensures they have a fixed address and aren't duplicated across
compilation units.

Since they were already always borrowed, this changes the static values
to be `&'static` addresses to ensure they're always borrowed rather than
potentially copied.

* rustfmt
2022-12-28 03:24:46 -05:00
Tony Arcieri
1b000d271d
CI: use RustCrypto/actions/cross-install (#487)
This action is located at:
https://github.com/RustCrypto/actions/blob/master/cross-install/action.yml
It's used across the RustCrypto project for installing `cross` in CI.
Installation is performed by fetching a pinned binary release from:
https://github.com/cross-rs/cross/releases/
This eliminates problems that might occur when using `cargo install`
such as:
https://github.com/dalek-cryptography/curve25519-dalek/actions/runs/3786735408/jobs/6437902657
It's also marginally faster.
2022-12-27 15:53:12 -05:00
Tony Arcieri
0ffcb84625
Don't set html_root_url (#483)
The recommendation to set this has been removed from the Rust API
guidelines:

https://github.com/rust-lang/api-guidelines/pull/230

It used to be used by docs.rs, but docs.rs now unconditionally sets the
`--extern-html-root-url` parameter of rustdoc which overrides it, making
it no longer needed and superfluous.
2022-12-27 05:14:34 -05:00
Tony Arcieri
ebcd744054
CI: add build-nostd job (#482)
We currently don't have any checks that this crate builds on a `no_std`
target.

While `curve25519-dalek` itself doesn't link `std`, it uses dependencies
which could potentially link `std`, so it's important to have a job to
check that the crate builds on a `no_std` target to ensure feature
activation doesn't accidentally flip on the `std` feature of one of
those dependencies unintentionally.

This adds a job which checks the crate builds on a `thumbv7em-none-eabi`
target which has no `std` implementation.
2022-12-27 05:13:57 -05:00
Tony Arcieri
7227c6fa9b
Remove Travis CI configuration (#484)
The migration to GitHub Actions occurred quite awhile ago and Travis CI
is no longer used
2022-12-27 05:13:13 -05:00
Tony Arcieri
7d53206366
Weakly activate zeroize?/alloc; MSRV 1.60 (#485)
Previously `alloc` implicitly activated `zeroize` via `zeroize/alloc`.

This commit switches to weak feature activation as added in Rust 1.60,
only activating `zeroize/alloc` if the `zeroize` dependency is
explicitly activated (which it is by default).
2022-12-27 05:12:55 -05:00
Tony Arcieri
39dbaea6f9
Make zeroize an optional dependency (#481)
* Make `zeroize` an optional dependency

The `zeroize` crate provides a defense against memory read oracles which
typically arise from memory unsafety.

Pure Rust programs may not benefit from `zeroize`, and in certain cases
the unsafe code used by `zeroize` may be more concerning.

This commit makes `zeroize` into an optional feature so users may elect
to disable it if they so desire.

* Added zeroize feature flag to README

Co-authored-by: Michael Rosenberg <michael@mrosenberg.pub>
2022-12-26 16:19:55 -05:00
Michael Rosenberg
06186b8511
Merge pull request #479 from pinkforest/doc-fix-release-pre5
Fix docs.rs release pre.5
2022-12-14 00:51:27 -05:00
pinkforest
39053b1c5d Fix docs release pre.5 2022-12-14 11:28:52 +11:00
Michael Rosenberg
b0b22def50
Bumped prerelease version 2022-12-13 17:17:34 -05:00
Michael Rosenberg
14b04b22d5
Merge pull request #478 from pinkforest/fix-clippy-is-my-bestie
Fix clippy for build.rs
2022-12-13 16:31:30 -05:00
Michael Rosenberg
6a513fc3bb
Merge pull request #477 from rozbb/fix-docsrs
Fixed docs.rs flags in Cargo.toml
2022-12-13 16:27:50 -05:00
pinkforest
3f2da879ba Fix clippy for build.rs 2022-12-14 05:21:10 +11:00
Michael Rosenberg
91c2305328
Fixed docsrs flags in Cargo.toml 2022-12-13 08:48:03 -05:00
Michael Rosenberg
42d8dbd42a
Merge release/4.0 into main (#474) 2022-12-13 08:28:41 -05:00
Michael Rosenberg
dbe599532f
Bumped prerelease version 2022-12-13 02:32:48 -05:00
Michael Rosenberg
1cedb3727e
Fixed docs build (#475)
Also sets code font size in docs back to normal (no longer small)
2022-12-13 02:29:45 -05:00
Michael Rosenberg
174611895b
Removed changelog line about wasm and arm defaults 2022-12-12 18:09:31 -05:00
Michael Rosenberg
87fc5310b8
Added latest changelog entries to readme 2022-12-12 18:03:58 -05:00
Michael Rosenberg
d7140146f2
Add rust-version to cargo
Co-authored-by: str4d <thestr4d@gmail.com>
2022-12-12 17:50:58 -05:00
Tony Arcieri
274f4a7bec
Change Scalar::from_canonical_bytes to return CtOption (#472)
This is helpful for implementing `ff::PrimeField::from_repr`.
Also changes `Scalar::is_canonical` to return `Choice`.
2022-12-12 17:38:04 -05:00
Michael Rosenberg
94a99d82f8
README: Removed non-existent features 2022-12-12 03:03:40 -05:00
Michael Rosenberg
82a2d4c9e4
Merge branch 'main' into release/4.0 2022-12-12 02:59:09 -05:00
Michael Rosenberg
f38d677759
Updated CHANGELOG; added stable/beta instructions to README 2022-12-12 02:54:25 -05:00
Tony Arcieri
6f237a0810
Use inherent constants for ZERO, ONE, and MINUS_ONE (#470)
For the field element types `FieldElement` and `Scalar`, use inherent
constants instead of (non-const) functions to return these constant
values.

It's likely the original functions predate support for inherent
constants, but now that they're available, they're a better fit for
these sort of constant values.
2022-12-12 01:04:42 -05:00
pinkforest(she/her)
acd78987f9
Document curve25519_dalek_ backend and bits selection (#467)
Co-authored-by: Michael Rosenberg <michael@mrosenberg.pub>
2022-12-11 16:37:50 -05:00
Tony Arcieri
fa45d21b76
Use CryptoRngCore trait (#469)
This is a convenience/marker trait for types which impl `CryptoRng` +
`RngCore` which makes the type signatures a little more readable.

It was introduced in `rand_core` v0.6.4 (now pinned as the minimum
version)
2022-12-11 15:11:15 -05:00
pinkforest(she/her)
cb42e87096
Fixes curve25519_dalek_bits defaults for cross and wasm (#465)
build.rs was using cfg(target) but it has to evaluate this from env TARGET
as build.rs cfg(target) in build context is the builder host and not the target.

This change fixes curve25519_dalek_bits lottery to determine the correct
automatic curve25119_dalek_bits with the help of platforms crate.

As discussed in #456 this also prepares for well known defaults for wasm and
arm serial backend via cfg(curve25519_dalek_bits = "64")

If the wasm32 or armv7 are going to be u64 serial by default these will be
followed up on later.
2022-12-09 21:09:24 -05:00
Tony Arcieri
cc304c29ff
Use --cfg curve25519_dalek_backend to select backend (#455)
Crate features are intended to be additive, whereas only 1-of-N possible
backends can be selected.

Features can also be activated by transitive dependencies, which leads
to a problem of different dependences selecting conflicting backends.
Using `--cfg` instead moves all backend selection control to the
toplevel executable.

This commit switches to the following RUSTFLAGS to enable backends:

- `--cfg curve25519_dalek_backend="fiat"`: uses `fiat-crypto`
- `--cfg curve25519_dalek_backend="simd"`: uses nightly-only SIMD
2022-12-09 03:42:52 -05:00
Michael Rosenberg
f5dada3834
Updates to README (#453)
* Restructure README and CHANGELOG
* Explain semver policy
* Specify feature flags and backends more explicitly
* Remove nightly from the CI bc that didn't belong there
* Add @pinkforest to thankyou list

Co-authored-by: pinkforest <36498018+pinkforest@users.noreply.github.com>
2022-12-09 03:30:44 -05:00
Tony Arcieri
1e490bd001
Fix --no-default-features test warnings; consolidate CI jobs (#461)
Previously `cargo test --no-default-features` would succeed but with
warnings. This commit fixes all of those warnings and tests
`--no-default-features` in CI to ensure that in perpetuity.
2022-12-08 23:26:18 -05:00
Michael Rosenberg
0b72bb5dc2
Made Scalar::bits return an iterator rather than an array (#451)
Addresses issue #448 that Scalar::bits may leave unzeroed bits on the stack
2022-12-08 16:37:42 -05:00
Michael Rosenberg
42e93d7faf
Remove mocks (#460)
Gated random() construtors on cfg(test)
2022-12-08 15:36:22 -05:00
Tony Arcieri
1013560fe4
Remove std feature (#459)
All of the existing usages of `std` can be replaced with `alloc`.

They are legacy usages from before when liballoc was stabilized.
2022-12-08 15:05:59 -05:00
pinkforest(she/her)
6b56edf776
Make digest optional (#446)
As proposed in #442 this makes `digest` an
optional feature that is not covered by the
SemVer public API stability guarantees.

Co-authored-by: Michael Rosenberg <michael@mrosenberg.pub>
2022-12-08 13:59:28 -05:00
pinkforest(she/her)
47a0c3eacc
Make rand_core optional (#447)
As proposed in #442 this makes `rand_core` an
optional feature that is not covered by the
SemVer public API stability guarantees.

Co-authored-by: Michael Rosenberg <michael@mrosenberg.pub>
2022-12-08 13:50:17 -05:00
pinkforest(she/her)
2190332b67
Add target u32/u64 backend override (#454)
As suggested in #453 it is sometimes feasible to
select the backend bits via an override.

This change provides `cfg(curve25519_dalek_bits)`
to override the bits used in serial or fiat target backend.
2022-12-08 11:52:42 -05:00
pinkforest(she/her)
29466f1b45
Minor documentation fixes (#444)
* Docs unlink from dalek.rs

* Link katex assets to jsdelivr

Co-authored-by: Michael Rosenberg <michael@mrosenberg.pub>
2022-12-07 05:36:07 -05:00
pinkforest(she/her)
e01bb1bdc6
Fix all clippy warnings replay (#441)
Also fixes CI not running on all branches

Co-authored-by: Anthony Ramine <nox@nox.paris>
2022-12-04 03:40:51 -05:00
Michael Rosenberg
03b8668b29
Merge pull request #440 from dalek-cryptography/docs-cleanup 2022-11-26 22:00:45 -05:00
Michael Rosenberg
edf6db09ab
Merge pull request #439 from pinkforest/docs-cleanup 2022-11-26 21:42:30 -05:00
Chris Beck
840a9dc866
Relax Rng trait bounds to allow ?Sized Rngs (#394)
This allows the code to compile if you pass it `&mut dyn RngType`,
since trait objects are unsized.

See here for an example of caller code that is simplified by this
change:

https://github.com/mobilecoinfoundation/mobilecoin/pull/1977#discussion_r872906913
2022-11-26 20:56:04 -05:00
Michael Rosenberg
1ddad1858f
Fixed README image layout and gave the logo the alt text described in #89 2022-11-26 14:11:57 -05:00
Michael Rosenberg
01672bfc63
Applied @pinkforest's patch to make make doc build on non-x86_64 arches 2022-11-26 13:53:51 -05:00
Michael Rosenberg
791ba170b1 Cleanup: enabled doc_auto_cfg and doc_cfg_hide 2022-11-26 06:34:48 -05:00
pinkforest
289cc52fef Document backend mod as INTERNALS: 2022-11-26 22:20:18 +11:00
pinkforest
8d236f5279 Fix curve_models link for parallel formulas doc 2022-11-26 22:10:14 +11:00
Michael Rosenberg
fec474b1ba Shouldn't have removed stdsimd feature 2022-11-26 05:58:29 -05:00
Michael Rosenberg
3e1643a99d Fixed features to tell docs.rs to use 2022-11-26 05:55:48 -05:00