recrypt 0.12.0

A pure-Rust implementation of Transform Encryption, a Proxy Re-encryption scheme
Documentation
# Changelog

## 0.12.0

### Public API changes

- [[#127](https://github.com/IronCoreLabs/recrypt-rs/pull/127)] Change MSRV to Rust 1.41.1
- [[#128](https://github.com/IronCoreLabs/recrypt-rs/pull/128)] Upgrade to `getrandom` 0.2.0
- [[#129](https://github.com/IronCoreLabs/recrypt-rs/pull/129)] Upgrade to `quick-error` 2.0
- [[#133](https://github.com/IronCoreLabs/recrypt-rs/pull/133)] Upgrade to `ed25519-dalek` 1.0.1
- [[#134](https://github.com/IronCoreLabs/recrypt-rs/pull/134)] Upgrade to `arrayvec` 0.5
- [[#135](https://github.com/IronCoreLabs/recrypt-rs/pull/135)] Upgrade to `hex` 0.4
- [[#136](https://github.com/IronCoreLabs/recrypt-rs/pull/136)] Upgrade to `derivative` 2.1.1
- [[#137](https://github.com/IronCoreLabs/recrypt-rs/pull/137)] Upgrade to `gridiron` 0.8.0
- [[#138](https://github.com/IronCoreLabs/recrypt-rs/pull/138)] Upgrade to `sha2` 0.9
- [[#140](https://github.com/IronCoreLabs/recrypt-rs/pull/140)] Upgrade to `cfg-if` 1.0.0

## 0.11.1

### Public API changes

- [[#115](https://github.com/IronCoreLabs/recrypt-rs/pull/115)]
  - Add explicit 32-bit and 64-bit backends as features: `u64_backend`, `u32_backend`

### Notable internal changes

- [[#108](https://github.com/IronCoreLabs/recrypt-rs/pull/108)]
  - Add memory protections for secret values (disable with `disable_memlock`)

## 0.11.0

### Public API changes

- [[#105](https://github.com/IronCoreLabs/recrypt-rs/pull/105)]
  - Upgrade dependencies (`rand`, `rand_chacha`, `ed25519-dalek`, `gridiron`)

## 0.10.0

### Public API changes

- [[#104](https://github.com/IronCoreLabs/recrypt-rs/pull/104)]

  - Eliminate the `Revealed` struct.
  - Add `Hash` for all public types except `Recrypt`.
  - Add `Eq` for all types which had `PartialEq`.

- [[#101](https://github.com/IronCoreLabs/recrypt-rs/pull/101)]
  - Eliminate the `Revealed` wrappers for `PrivateKey`, `Plaintext`, and `DerivedSymmetricKey`.
  - Implement `PartialEq` for `PrivateKey`, `Plaintext`, and `DerivedSymmetricKey`.

### Notable internal changes

- [[#101](https://github.com/IronCoreLabs/recrypt-rs/pull/101)]

  - Eliminate the `Revealed` wrapper for `SigningKeypair`.
  - Implement `PartialEq` for `SigningKeypair`.

- [[#104](https://github.com/IronCoreLabs/recrypt-rs/pull/104)]
  - Move to use constant time eq for all properties that have `bytes()`.
  - Use derivative to derive `PartialEq` and `Hash` instead of hand crafted implementations.

## 0.9.2

### Public API changes

- [[#99](https://github.com/IronCoreLabs/recrypt-rs/pull/99)] Implement `Clone` for `Plaintext`.

## 0.9.1

### Notable internal changes

- [[#98](https://github.com/IronCoreLabs/recrypt-rs/pull/98)] Fix the dependency pinning for `ed25519-dalek` to be exact.

## 0.9.0

### Public API changes

- [[#95](https://github.com/IronCoreLabs/recrypt-rs/pull/95)]
  - Remove `Add` and `Sub` from `PrivateKey`.
  - Add `augment` and `augment_minus` to `PrivateKey`, which correctly support private key rotation.

## 0.8.4

### Notable internal changes

- Fix a regression introduced in 0.8.0 where the randomness for some operations was reduced.

Affected 256-bit operations in 0.8.0 through 0.8.3 were:

- `CryptoOps::gen_plaintext`
- `CryptoOps::transform`
- `KeyGenOps::generate_transform_key`

480-bit operations were not affected.

## 0.8.3

### Notable internal changes

- [[#90](https://github.com/IronCoreLabs/recrypt-rs/pull/90)] Update lazy_static to 1.4.

## 0.8.2

### Public API changes

- [[#87](https://github.com/IronCoreLabs/recrypt-rs/pull/87)] Implement `Add` and `Sub` for `PrivateKey` to support private key augmentation.

## 0.8.1

### Notable internal changes

- [[#85](https://github.com/IronCoreLabs/recrypt-rs/pull/85)] Update lazy_static to 1.3.

## 0.8.0

### Public API changes

- [[#82](https://github.com/IronCoreLabs/recrypt-rs/pull/82)]
  - Remove mutable references from public API. This makes sharing a single `Recrypt` among threads possible.
  - Change default RNG from `ThreadRng` to `ReseedingRng<rand_chacha::ChaChaCore, EntropyRng>`.
  - Add `DefaultRng` type alias to public API.

## 0.7.1

### Notable internal changes

- [[#81](https://github.com/IronCoreLabs/recrypt-rs/pull/81)] Add a default set of features to enable `ed2559-dalek`'s 64-bit backend and a `wasm` feature that will instead use a 32-bit backend.

## 0.7.0

### Public API changes

- [[#57](https://github.com/IronCoreLabs/recrypt-rs/pull/57)]
  - Rename `api::Api` to `api::Recrypt`.
  - Rename `api_480::Api480` to `api_480::Recrypt480`.
  - Rename `ApiErr` to `RecryptErr` and publicly export `RecryptErr`.
  - Make `PrivateKey::ENCODED_SIZE_BYTES` public.
- [[#63](https://github.com/IronCoreLabs/recrypt-rs/pull/63)]
  - Add a prelude for easier importing of common types and traits.
    - `use recrypt::prelude::*`
- [[#70](https://github.com/IronCoreLabs/recrypt-rs/pull/70)]
  - Implement `DerivedSymmetricKey.to_private_key`.
  - Change `PublicKey` APIs to take all arguments as borrows.
- [[#71](https://github.com/IronCoreLabs/recrypt-rs/pull/71)]
  - Implement `From<SigningKeyPair>` instance for `[u8; 64]`.
  - Implement `Clone` for `PrivateKey`.
  - Allow many wrapped byte types to be consumed to get the underlying bytes without copying.
- [[#72](https://github.com/IronCoreLabs/recrypt-rs/pull/72)] Change `PublicSigningKey.bytes` method to return a reference instead of copying.

## 0.6.2

### Notable internal changes

- [[#54](https://github.com/IronCoreLabs/recrypt-rs/pull/54)] Consume gridiron 0.6.0, fixing some performance issues.
- [[#55](https://github.com/IronCoreLabs/recrypt-rs/pull/55)] Optimize Xi inverse, multiplication, etc.

## 0.6.1

### Notable internal changes

- [[#47](https://github.com/IronCoreLabs/recrypt-rs/pull/47)] Document behavior of `normalize` for `HomogeneousPoint` and `TwistedHPoint` and remove panic from pairing.
- [[#50](https://github.com/IronCoreLabs/recrypt-rs/pull/50)] Update to use Monty representation for all 256-bit operations.
- [[#52](https://github.com/IronCoreLabs/recrypt-rs/pull/52)] Update to use Monty representation for all 480-bit operations.

## 0.6.0

### Public API changes

- [[#35](https://github.com/IronCoreLabs/recrypt-rs/pull/35)] Implement 480-bit public API. See api_480.rs.

### Notable internal changes

- [[#27](https://github.com/IronCoreLabs/recrypt-rs/pull/27)] Use Rust 2018 edition.
- Progress toward Constant Time algorithms
  - [[#42](https://github.com/IronCoreLabs/recrypt-rs/pull/42)] Document Fp `is_one` and `is_zero` to not be constant time.
  - [[#40](https://github.com/IronCoreLabs/recrypt-rs/pull/40)] Use `u32` for Fp `Mul` and `Add` and document to not be constant time.
  - [[#39](https://github.com/IronCoreLabs/recrypt-rs/pull/39)] Implement point negation in constant time.
  - [[#37](https://github.com/IronCoreLabs/recrypt-rs/pull/37)] Document Fp12 and Fp6 `to_fp2` constant time behavior.
  - [[#26](https://github.com/IronCoreLabs/recrypt-rs/pull/26)] Implement point double and add functions in constant time.

## 0.5.1

- [[#24](https://github.com/IronCoreLabs/recrypt-rs/pull/24)] Add better errors for `Ed25519` and `NonEmptyVec`.

## 0.5.0

- [[#21](https://github.com/IronCoreLabs/recrypt-rs/pull/21)]
  - Consume gridiron 0.4.0 (primatives are now constant time).
  - Rename `NonAdjacentForm` to `BitRepr`.

## 0.4.0

- [[#20](https://github.com/IronCoreLabs/recrypt-rs/pull/20)] Update dependencies (rand 0.6, sha 0.8, ed25519 1.0.0-pre.0).
- [[#18](https://github.com/IronCoreLabs/recrypt-rs/pull/18)] Add a way to hash a Plaintext to 32 bytes.
- [[#17](https://github.com/IronCoreLabs/recrypt-rs/pull/17)] Add quick_error for all of our error ADTs.
- [[#14](https://github.com/IronCoreLabs/recrypt-rs/issues/14)] Add benchmarking on Travis.

## 0.3.0

- [[#13](https://github.com/IronCoreLabs/recrypt-rs/pull/13)] Implement `Hashable` for `TransformKey`.
- [[#12](https://github.com/IronCoreLabs/recrypt-rs/pull/12)] Add lto for release builds to show more realistic performance.
- [[#10](https://github.com/IronCoreLabs/recrypt-rs/pull/10)] Change `Ed25519` `PrivateKey` type to `SigningKeypair`.
- [[#9](https://github.com/IronCoreLabs/recrypt-rs/pull/9)] Change README to remove hardcoded versions and point to recrypt.rs.
- [[#8](https://github.com/IronCoreLabs/recrypt-rs/pull/8)] Rework macros to eliminate compiler warnings.