# Changelog

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

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [Unreleased]

### Changed

- Update `dusk-plonk` from `0.6` to `0.7` #119
- Update `dusk-hades` from `0.14` to `0.15` #119

## [0.19.0] - 2021-03-11

### Changed

- Update `dusk-plonk` from `0.5` to `0.6` #117
- Update `dusk-hades` from `0.13` to `0.14`

## [0.18.0] - 2021-02-11

### Changed

- Change crate's name from `Poseidon252` to `dusk-poseidon`
- Implement `Canon` for `PoseidonBranch`

## [0.17.0] - 2021-02-01

### Changed

- Sponge gadget import path simplified.

### Fixed

- PoseidonBranch minimum depth fixed. [#112](https://github.com/dusk-network/poseidon252/issues/112)

## [0.16.0] - 2021-01-27

### Changed

- Update canonical to v0.5
- Update dusk-bls12_381 to v0.6
- Update dusk-jubjub to v0.8
- Update dusk-plonk to v0.5
- Update hades252 to v0.12.0
- Remove `hex` crate for unit test in favor of `dusk-bytes`
- Update CHANGELOG to ISO 8601
- to/from bytes methods of `PoseidonCipher` refactored in favor of dusk-bytes

## [0.15.0] - 2020-12-04

### Fixed

- PoseidonMaxAnnotation borrow fix for latest microkelvin.

## [0.14.1] - 2020-11-21

### Changed

- Sponge hash defined as a no-std function.

## [0.14.0] - 2020-11-17

### Changed

- No-Std compatibility.

## [0.13.1] - 2020-11-06

### Changed

- Feature split between `canon` and `canon_host` for constrained and unconstrained environments.
- Canon implementation for PoseidonTree.

## [0.13.0] - 2020-11-04

### Changed

- PoseidonLeaf pos setter for API consistency with Phoenix

### Removed

- PoseidonCipher std::io implementations

## [0.12.0] - 2020-11-04

### Added

- Gate-featured `canonical` impl.
- `PoseidonAnnotation` as generic to support walkable implementations

## [0.11.0] - 2020-10-30

### Changed

- Bump `hades252` to `v0.10.0`
- Major refactor on the poseidon tree to comply with the simplifications provided by microkelvin

## [0.10.0] - 2020-10-05

### Changed

- Bump `hades252` to `v0.9.0`
- Bump `dusk-plonk` to `v0.3.1`

## [0.9.0] - 2020-10-04

### Added

- `root()` fn for `PoseidonBranch`.

### Changed

- Padding implementation for `PoseidonBranch` with opening gadgets.

### Removed

- Extension fn's from the crate.

## [0.8.1] - 2020-10-01

### Changed

- Implement `inner` and `inner_mut` methods on PoseidonTree

## [0.8.0] - 2020-09-29

### Changed

- Use `dusk-plonk` `v0.2.11`
- Use `hades252 0.8.0`

## [0.7.0] - 2020-09-23

### Changed

- Removed PI constraint from `merkle_opening_gadget` to implement
  `CircuitBuilder` trait.
- Use `nstack 0.5.0`

## [0.6.4] - 2020-09-07

### Added

- `PoseidonCipher` from/to bytes.

## [0.6.3] - 2020-09-01

### Added

- Fixed_len hashing tools with variable input and output scalars.

## [0.6.2] - 2020-08-27

### Added

- `PoseidonCipher` zk encrypt and decrypt functions.

## [0.6.1] - 2020-08-13

### Changed

- `add_constant_witness` method replacement by `add_witness_to_circuit_description`.
- Changed `dusk-plonk` version to `v0.2.7`.
- Changed `Hades252` version to `v0.7.0`.

## [0.6.0] - 2020-08-07

### Changed

- Use `dusk-plonk v0.2.0` as dependency.
- Refactor the tests related to Proof generation to work with the Prover&Verifier abstraction.

### Fixed

- Constrain `eom` in sponge_hash function.

### Added

- Poseidon cipher encryption, decryption and plonk gadget for zk prove of encryption with a key.

## [0.5.0] - 2020-07-07

### Added

- `PoseidonTree` abstraction with padding and Proof gen. capabilities.

## [0.4.0] - 2020-06-30

### Changed

- Use NarrowHAMT for ctsize Proofs & padded Branches instead of NStack.

### Removed

- NStack dependencies are no longer needed nor used.

## [0.3.0] - 2020-06-23

### Added

- Merkle-Tree Opening inclusion proof generation capabilities.

- Methods for generating ZKProofs with PLONK
  getting a kelvin::Branch.

- Use Nstack for merkle-tree branch type.

## [0.2.0] - 2020-06-15

### Added

- PLONK as ZKP algorithm for the poseidon-hash
  functions.

- Optimization on the Sponge hash fn to skip useless addition if the width of the messages is the appropiate one to do it. (WIDTH < HADES_WIDTH -1).

### Changed

- Both the merkle-hash and the sponge-hash techniqes use now PLONK instead of Bulletproofs.

### Removed

- Bulletproofs and Curve25519 as dependencies since we no longer use them.

## [0.1.0] - 2020-02-10

### Added

- Poseidon252 Sponge-hash impl with BulletProofs.
- Variants of sponge for `Scalar` & `Gadget(Variable/LC)`.
