rust-bitcoin-unsafe-fast/hashes
Tobin C. Harding dcb18bfa7a
Add length to sha256::Midstate
In a `HashEngine` the `length` field represents number of bytes
input into the hash engine.

Note also:

> the midstate bytes are only updated when the compression function is
run, which only happens every 64 bytes.

Currently our midstate API allows extracting the midstate after any
amount of input bytes, this is probably not what users want.

Note also that most users should not be using the midstate API anyways.

With all this in mind, add a private `length` field to the `Midstate`
struct and enforce an invariant that it is modulo 64.

Add a single const `Midstate` constructor that panics if the invariant
is violated. The `Midstate` is niche enough that panic is acceptable.

Remove the `from_slice`, `from_byte_array`, and `to_byte_array`
functions because they no longer make sense. Keep `AsRef<[u8]>` for
cheap access to the midstate's inner byte slice.

Note change to `Debug`: `bytes` field now does not include the `0x`
prefix because `as_hex` because of the use of `debug_struct`.

Enjoy nice warm fuzzy feeling from hacking on crypto code.
2024-07-18 06:16:45 +10:00
..
contrib Run schemars test from extra_tests 2024-06-14 13:44:18 +10:00
embedded hashes: remove engine/from_engine from embedded test 2024-06-24 13:51:23 +00:00
extended_tests/schemars chore: format and standardize all markdowns files 2024-04-27 06:29:23 -03:00
src Add length to sha256::Midstate 2024-07-18 06:16:45 +10:00
tests Add length to sha256::Midstate 2024-07-18 06:16:45 +10:00
CHANGELOG.md Document the sha256t_hash_newtype direction 2024-05-07 12:48:07 +10:00
Cargo.toml Move package metadata to be underneath package section 2024-06-25 10:02:27 +10:00
README.md chore: format and standardize all markdowns files 2024-04-27 06:29:23 -03:00

README.md

Bitcoin Hashes Library

This is a simple, no-dependency library which implements the hash functions needed by Bitcoin. These are SHA1, SHA256, SHA256d, SHA512, and RIPEMD160. As an ancillary thing, it exposes hexadecimal serialization and deserialization, since these are needed to display hashes anway.

Documentation

Minimum Supported Rust Version (MSRV)

This library should always compile with any combination of features on Rust 1.56.1.

Contributions

Contributions are welcome, including additional hash function implementations.

Githooks

To assist devs in catching errors before running CI we provide some githooks. If you do not already have locally configured githooks you can use the ones in this repository by running, in the root directory of the repository:

git config --local core.hooksPath githooks/

Alternatively add symlinks in your .git/hooks directory to any of the githooks we provide.

Running Benchmarks

We use a custom Rust compiler configuration conditional to guard the bench mark code. To run the bench marks use: RUSTFLAGS='--cfg=bench' cargo +nightly bench.