312 Commits

Author SHA1 Message Date
Arthur Gautier
63409e526c
Adds RsaPrivateKey::from_primes and RsaPrivateKey::from_p_q methods (#386)
This is used on Yubico HSM for import/export under wrap as well as when
importing a key unsealed.
2023-11-27 17:35:37 -07:00
Tony Arcieri
00eaa91db5
README.md: use ? instead of expect` in example (#385)
Using `?` encourages users to properly handle errors rather than
panicking.
2023-11-20 13:53:51 -07:00
Tony Arcieri
3eb4e38e37
v0.9.4 (#384) 2023-11-20 13:36:27 -07:00
Tony Arcieri
a26e7f563c
Cargo.lock: bump dependencies (#383)
Updates the following dependencies:

    $ cargo update
    Updating crates.io index
    Updating bitflags v2.4.0 -> v2.4.1
    Updating byteorder v1.4.3 -> v1.5.0
    Removing cc v1.0.83
    Updating cpufeatures v0.2.9 -> v0.2.11
    Updating errno v0.3.4 -> v0.3.7
    Removing errno-dragonfly v0.1.2
    Updating getrandom v0.2.10 -> v0.2.11
    Updating libc v0.2.148 -> v0.2.150
    Updating libm v0.2.7 -> v0.2.8
    Updating linux-raw-sys v0.4.8 -> v0.4.11
    Updating num-traits v0.2.16 -> v0.2.17
    Updating proc-macro2 v1.0.67 -> v1.0.69
    Updating proptest v1.3.1 -> v1.4.0
    Updating redox_syscall v0.3.5 -> v0.4.1
    Updating regex-syntax v0.7.5 -> v0.8.2
    Updating rustix v0.38.20 -> v0.38.25
    Updating serde v1.0.188 -> v1.0.192
    Updating serde_derive v1.0.188 -> v1.0.192
    Updating signature v2.1.0 -> v2.2.0
    Updating smallvec v1.11.1 -> v1.11.2
    Updating syn v2.0.37 -> v2.0.39
    Updating tempfile v3.8.0 -> v3.8.1
    Updating zeroize v1.6.0 -> v1.7.0
2023-11-20 12:53:32 -07:00
Tony Arcieri
341f06f449
OAEP example now uses sha2 re-export (#381)
People were missing that the example required the `sha2` crate as a
dependency. See #340.

This changes it to use the re-exported `sha2` crate and notes that the
`sha2` feature must be enabled.
2023-11-11 12:29:55 -07:00
Zach Heylmun
b513ee3998
Deterministic implementation of prime factors recovery (#380)
Implements deterministic recovery of `p` and `q` from `n`, `e,` and `d` using
the algorithm specified in NIST 800-56B Appendix C.2
2023-11-11 11:10:42 -07:00
Tony Arcieri
ab7b86d094
README.md: linkify random blinding (#379) 2023-10-31 20:02:04 -06:00
Tony Arcieri
d855f2963c
v0.9.3 (#376) 2023-10-26 11:26:21 -06:00
dependabot[bot]
c069afb09c
build(deps): bump rustix from 0.38.15 to 0.38.20 (#377)
Bumps [rustix](https://github.com/bytecodealliance/rustix) from 0.38.15 to 0.38.20.
- [Release notes](https://github.com/bytecodealliance/rustix/releases)
- [Commits](https://github.com/bytecodealliance/rustix/compare/v0.38.15...v0.38.20)

---
updated-dependencies:
- dependency-name: rustix
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-26 10:27:38 -06:00
Tony Arcieri
ec1cebf449
CI: pin nightly; test minimal-versions on stable (#378)
- Pins to nightly-2023-10-01 to prevent regressions
- On `minimal-versions`, only uses nightly to resolve versions, and runs
  tests on stable instead
2023-10-26 10:04:58 -06:00
Tony Arcieri
49b6c7e6ba
README.md: add notes about timing variability (#373)
Notes that the modpow implementation is not constant-time, but timing
variability is masked using random blinding.
2023-10-16 11:11:37 -06:00
Tony Arcieri
3a2906675a
Cargo.lock: update dependencies (#371)
Bumps the following dependencies:

    $ cargo update
    Updating crates.io index
    Updating errno v0.3.2 -> v0.3.4
    Updating fastrand v2.0.0 -> v2.0.1
    Updating libc v0.2.147 -> v0.2.148
    Updating linux-raw-sys v0.4.5 -> v0.4.8
    Updating proc-macro2 v1.0.66 -> v1.0.67
    Updating proptest v1.2.0 -> v1.3.1
    Updating regex-syntax v0.6.29 -> v0.7.5
    Updating rustix v0.38.8 -> v0.38.15
    Updating serde v1.0.185 -> v1.0.188
    Updating serde_derive v1.0.185 -> v1.0.188
    Updating sha1 v0.10.5 -> v0.10.6
    Updating sha2 v0.10.7 -> v0.10.8
    Updating smallvec v1.11.0 -> v1.11.1
    Updating syn v2.0.29 -> v2.0.37
    Updating typenum v1.16.0 -> v1.17.0
    Updating unicode-ident v1.0.11 -> v1.0.12
2023-10-03 07:35:48 -06:00
dependabot[bot]
d7ba15c9ff
build(deps): bump actions/checkout from 3 to 4 (#370)
Bumps [actions/checkout](https://github.com/actions/checkout) from 3 to 4.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v3...v4)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-02 06:44:44 -06:00
Artyom Pavlov
dfb12ac5bc
Set min version of serde to 1.0.184 (#360) 2023-08-21 11:47:22 +00:00
Artyom Pavlov
3e17a67d5e
Pin serde to <1.0.172 (#359) 2023-08-19 18:08:54 +03:00
Uli Schlachter
c04c65447e
Remove unused dependencies (#357)
Signed-off-by: Uli Schlachter <psychon@znc.in>
2023-08-18 06:53:24 -06:00
dependabot[bot]
e949b07f7f
build(deps): bump const-oid from 0.9.3 to 0.9.4 (#353)
Bumps [const-oid](https://github.com/RustCrypto/formats) from 0.9.3 to 0.9.4.
- [Commits](https://github.com/RustCrypto/formats/compare/const-oid/v0.9.3...const-oid/v0.9.4)

---
updated-dependencies:
- dependency-name: const-oid
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-08-01 06:12:01 -06:00
Tom Hebb
eb7e507f56
Add hazmat feature as a replacement for expose-internals (#352)
External access to these functions was removed in #304 when the old
`internals` module and `expose-internals` feature were removed. There
are some valid use cases for them, though (see #351), so let's bring
back a subset of what was in `internals` using the same naming and
documentation conventions that the aes crate uses for its hazardous
functions.

Much of the added or changed documentation is derived from that in
the `aes` crate.

Fixes #351.
2023-07-23 10:43:48 -06:00
dependabot[bot]
40069a5408
build(deps): bump const-oid from 0.9.2 to 0.9.3 (#348)
Bumps [const-oid](https://github.com/RustCrypto/formats) from 0.9.2 to 0.9.3.
- [Commits](https://github.com/RustCrypto/formats/compare/const-oid/v0.9.2...const-oid/v0.9.3)

---
updated-dependencies:
- dependency-name: const-oid
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-07-01 06:58:49 -06:00
Tony Arcieri
aed51e718d
Impl PKCS#8/SPKI decoding traits for pkcs1v15 keys (#346)
Adds PKCS#8 (and via blanket impl, PKCS#1) and SPKI decoding trait
support to `pkcs1v15::{SigningKey, VerifyingKey}`.

Also adds basic tests that decoding and encoding works.
2023-06-29 14:29:22 -06:00
Tony Arcieri
c7b0eae935
Add clarifying comment for totient check in key generation (#345)
See #343 where it wasn't entirely clear
2023-06-29 13:14:12 -06:00
dependabot[bot]
823bb23162
build(deps): bump proptest from 1.1.0 to 1.2.0 (#336)
Bumps [proptest](https://github.com/proptest-rs/proptest) from 1.1.0 to 1.2.0.
- [Release notes](https://github.com/proptest-rs/proptest/releases)
- [Changelog](https://github.com/proptest-rs/proptest/blob/master/CHANGELOG.md)
- [Commits](https://github.com/proptest-rs/proptest/compare/v1.1.0...v1.2.0)

---
updated-dependencies:
- dependency-name: proptest
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-06-01 07:05:54 -06:00
tison
b65f352299
pkcs1v15: add regression test (#332)
Signed-off-by: tison <wander4096@gmail.com>
2023-05-12 15:18:26 -06:00
Tony Arcieri
dfa23bccb4
v0.9.2 (#331) 2023-05-08 07:15:09 -06:00
Tony Arcieri
09254b0ab5
pkcs1v15: have fmt impls call SignatureEncoding::to_bytes (#330)
The `fmt::{LowerHex, UpperHex}` impls, with the latter called
vicariously via `fmt::Display`, were showing the unpadded signature
rather than the padded one.

This changes these impls to call `SignatureEncoding::to_bytes` first
before displaying the signature.
2023-05-08 07:04:05 -06:00
Arthur Gautier
7a58281a05
Adds support for the SignatureBitStringEncoding trait (#328) 2023-05-04 17:12:43 -06:00
Tony Arcieri
d61b501182
v0.9.1 (#327) 2023-05-03 19:36:27 -06:00
Tony Arcieri
1d1037b912
Initial proptests (#326)
Adds proptests for RSASSA-PKCS1-v1_5.

Includes a commented-out test for RSASSA-PSS which is currently failing.
2023-05-03 18:50:04 -06:00
Tony Arcieri
53bb256451
Left pad signatures when encoding (#325)
The `SignatureEncoding` impl added in `rsa` v0.9 (or more specifically,
the `From<Signature>` impl for `Box<[u8]>` failed to properly left pad
the signatures so they matched the modulus size.

This adds the appropriate padding to the signature encoder.
2023-05-03 18:34:50 -06:00
Tony Arcieri
94856ec765
pkcs1v15: note RSASSA-PKCS1-v1_5 in docs (#324)
This is the name for PKCS#1v1.5 signatures originally specified in
RFC3447 but is also used by RFC8017 (which we cite)
2023-05-03 17:13:52 -06:00
dependabot[bot]
901765df7c
build(deps): bump sha3 from 0.10.6 to 0.10.7 (#321)
Bumps [sha3](https://github.com/RustCrypto/hashes) from 0.10.6 to 0.10.7.
- [Release notes](https://github.com/RustCrypto/hashes/releases)
- [Commits](https://github.com/RustCrypto/hashes/compare/sha3-v0.10.6...sha3-v0.10.7)

---
updated-dependencies:
- dependency-name: sha3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-05-01 06:12:11 -06:00
dependabot[bot]
cbf6685c5e
build(deps): bump hex-literal from 0.3.4 to 0.4.1 (#319)
Bumps [hex-literal](https://github.com/RustCrypto/utils) from 0.3.4 to 0.4.1.
- [Release notes](https://github.com/RustCrypto/utils/releases)
- [Commits](https://github.com/RustCrypto/utils/compare/hex-literal-v0.3.4...hex-literal-v0.4.1)

---
updated-dependencies:
- dependency-name: hex-literal
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-05-01 06:11:58 -06:00
dependabot[bot]
f63290f920
build(deps): bump signature from 2.0.0 to 2.1.0 (#320)
Bumps [signature](https://github.com/RustCrypto/traits) from 2.0.0 to 2.1.0.
- [Release notes](https://github.com/RustCrypto/traits/releases)
- [Commits](https://github.com/RustCrypto/traits/compare/signature/v2.0.0...signature-v2.1.0)

---
updated-dependencies:
- dependency-name: signature
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-05-01 06:11:20 -06:00
Tony Arcieri
c611408a2e
v0.9.0 (#318) 2023-04-27 12:57:20 -06:00
Tony Arcieri
ec499565f9
Replace Deref impl on RsaPrivateKey with AsRef (#317)
The `RsaPrivateKey` type previously had a `Deref` impl providing access
to the associated `RsaPublicKey`.

`Deref` is intended for "smart pointer types", i.e. container types
which manage a (typically generic) inner type in some way. This doesn't
seem like one of those cases.

`AsRef`, on the other hand, is for cheap reference conversions, which is
exactly what's happening here, so it's a better fit and provides the
same functionality (albeit explicitly rather than via deref coercion).
2023-04-27 09:23:58 -06:00
Tony Arcieri
db2559faa7
Add comments to fields of RsaPublicKey (#316) 2023-04-27 08:23:41 -06:00
Tony Arcieri
f5918ad3bf
Refactor padding modes into submodules (#312)
The padding mode modules have gotten quite large.

This commit refactors types into respective submodules, with the
toplevel module defining the same-named padding schemes.
2023-04-27 07:58:19 -06:00
Tony Arcieri
d9968bc0c9
Refactor traits (#315)
There were several modules that defined traits, including one called
`traits`.

This consolidates all of them under `traits`, retaining the previous
module structure as internal submodules:

- `keytraits` => `traits::keys`
- `padding` => `traits::padding`
- `traits` => `traits::encryption`

Additionally this removes the traits that were re-exported at the
toplevel, instead re-exporting them all under `traits`.
2023-04-27 07:39:37 -06:00
Tony Arcieri
a8bddc2f6b
Add u64_digit feature (#313)
Adds an on-by-default feature which enables `num-bigint-dig/u64_digit`.

Disabling this on 32-bit platforms (e.g. WASM) should improve
performance.

Closes #252
2023-04-27 07:39:25 -06:00
Tony Arcieri
6d915b30f8
Rename CRTValue => CrtValue (#314)
Follows RFC430 (C-CASE)

https://rust-lang.github.io/api-guidelines/naming.html
2023-04-26 20:26:44 -06:00
Tony Arcieri
78ea9cb7da
Impl ZeroizeOnDrop for RsaPrivateKey+newtypes (#311)
`RsaPrivateKey` self-zeroizes on drop, so add the `ZeroizeOnDrop` marker
trait to `RsaPrivateKey` and all newtypes thereof, i.e. `DecryptingKey`
and `SigningKey` for the various padding modes.

This also removes the `Zeroize` impl on `RsaPrivateKey`, since it
self-zeroizes on `Drop`, and allowing `Zeroize` might accidentally
permit use-after-zeroize vulnerabilities.
2023-04-26 10:39:18 -06:00
Tony Arcieri
b1151dfb0e
v0.9.0-rc.0 (#309) 2023-04-25 08:48:24 -06:00
Tony Arcieri
c012868118
Impl core:#️⃣:Hash for RsaPrivateKey (#308)
Adds an impl which hashes only the public key components, along with a
domain separator string (`RsaPrivateKey`).

Closes #165
2023-04-25 08:37:01 -06:00
Tony Arcieri
faabaa7141
Improved public key checks (#307)
Adds the following checks:

- `n` is odd
- `e` is odd
- `e` < `n`

Closes #99
2023-04-25 08:36:46 -06:00
Tony Arcieri
b55c75ec39
Ensure signatures have right length and don't overflow (#306)
In both the PKCS#1v1.5 and PSS implementations, checks the signature
value to ensure it does not overflow the modulus.

In the PKCS#1v1.5 implementation, checks the signature length to ensure
it matches the public key size. The PSS implementation was already doing
this.

Closes #272
2023-04-25 08:36:26 -06:00
Tony Arcieri
bd14ee90b6
Bump pkcs1 dependency to v0.7.5 (#305)
Workaround for RustCrypto/formats#1021
2023-04-24 13:43:49 -06:00
Tony Arcieri
924ccfade5 Add SECURITY.md 2023-04-23 19:53:07 -06:00
Dmitry Baryshkov
574664808d
Internals refactoring (#304)
* feat: decouple key generation and random generation

Make generate_multi_prime_key_with_exp() generic enough to generate
abstract key structure. Rewrite RsaPrivateKey constructors to use
RsaPrivateKey::from_components().

* feat: move key-related traits to separate module

Move PublicKeyParts to the separate module.

* feat: stop using RsaPrivateKey in internals.rs

Make internals.rs generic enough to be moved to the algorithms module.

* feat: move soft RSA implementation to crate::algorithms::rsa.rs

Separate software RSA implementation to separate module under
crate::algorithms.

* key: drop raw_int_*_primitive wrappers

Now as raw_int_encryption_primitive() and raw_int_decryption_primitive()
became simple wrappers around properly defined functions we can inline
them and always use software RSA algorithm from src::algorithms::rsa.rs.

* feat: move internals.rs to src/algortihms/pad.rs

internals.rs now contains only small functions related to BigUint to
Vec<u8> conversion. Move them to src/algorithms/pad.rs and get rid of
internals.rs

* algorithms: protect all functions with pub(crate)

While it is expected that the functions inside algorithms crates might
be useful (and used) by other parties, they are low level functions and
as such impose a high risk of being misused. Protect all of them with
pub(crate) to prevent them from being exposed by mistake.

Also add big fat warnings to raw RSA functions, which should never be
used unless authors knows exactly what they are using.

Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
2023-04-23 16:53:21 -06:00
Tony Arcieri
4df2262960
Use doc_auto_cfg (#303)
Automatically document feature-gated functionality
2023-04-19 09:46:14 -06:00
Tony Arcieri
3292db138d
v0.9.0-pre.2 (#302) 2023-04-19 09:06:51 -06:00