<!-- Copyright 2018 Google LLC

Use of this source code is governed by an MIT-style
license that can be found in the LICENSE file or at
https://opensource.org/licenses/MIT. -->

# Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/).

## Unreleased

## [0.5.0] - 2021-12-14

### Changed
- Updated to latest version of BoringSSL

## [0.4.4] - 2021-03-04

### Added
- Exposed getters for RSA public exponent and modulus

## [0.4.3] - 2020-03-26

### Added
- Exposed MD5 digest and HMAC in the `insecure` module.

### Changed
- Documentation on docs.rs now includes all items behind feature flags.

## [0.4.2] - 2019-10-04

### Fixed
- Fixed issue where 0.4.1 was released without updating BoringSSL symbols.
- Fixed issue caused by a bad interaction between `#[derive(Clone)]` and
  `#[deprecated]`.

## [0.4.1] - 2019-09-27

### Added
- `hmac::Hmac` now implements `Clone` and `std::hash::Hasher`, allowing it to be
  used with any type that implements `std::hash::Hash`.
- `hash::Hasher` now similarly implies `Clone` and `std::hash::Hasher`.

## [0.4.0] - 2019-09-25

### Added
- `public::rsa` now supports RSA-PKCS1v1.5 signing (behind the `rsa-pkcs1v15`
  feature flag).
- Added `bytes` module guarded by the `bytes` feature, containing
  `constant_time_eq`.

### Changed
- `build.rs` implements symbol name scraping natively, and no longer relies on
  BoringSSL's `read_symbols.go`.
- Minimum required Rust version raised to 1.36
- Minimum required Go version lowered to 1.10
- Moved `rand_bytes` to `bytes::rand`.
- Removed `rand-bytes` feature in favor of the new feature `bytes`.

### Fixed
- `build.rs` no longer respects `$GOPATH`, instead it always uses the
  `go.mod` from the vendored boringssl.

## [0.3.0] - 2019-02-20

### Added
- Added `public::rsa` module which supports RSA-PSS signing.

### Changed
- In the `public` module, functions to parse and marshal DER-encoded
  public/private keys have been moved from bare functions to methods on the
  `DerPublicKey` and `DerPrivateKey` traits.
- In the `public::ec` module, functions to parse and marshal DER-encoded
  public/private keys as the `EcPubKeyAnyCurve` and `EcPrivKeyAnyCurve` types
  have been moved from bare functions to methods on those types.
- The `public::Signature::verify` method has been renamed to `is_valid` to make
  the meaning of its return value more self-evident.
- The `public::ec` module added experimental support for ECDSA-SHA512 under the
  `experimental-sha512-ec` feature.
