Merge rust-bitcoin/rust-bitcoin#6597: Release tracking PR: `crypto 0.3.0`
What changed, and why it matters
This commit is a routine release-tracking merge. It only bumps version numbers (bitcoin-crypto to 0.3.0 and bitcoin-primitives to 0.103.1), updates dependency version requirements, refreshes lock files, and adds changelog entries. There are no code changes that fix or introduce security behavior.
No security action required. Treat as a normal release bookkeeping commit.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The diff consists entirely of metadata changes: Cargo.toml version bumps, Cargo.lock updates, and CHANGELOG.md additions. The crypto crate changelog lists prior API changes (e.g., removing re-exports, adding methods, moving modules), but these are historical release notes, not new code in this commit. No source files implementing cryptographic, parsing, or consensus logic were modified.
Changed components
bitcoin-crypto crate versioningbitcoin-primitives crate versioningCargo.lock filesCHANGELOG.md filesInspect captured patch +34 / −12
### Cargo-minimal.lock
@@ -141,7 +141,7 @@ dependencies = [
[[package]]
name = "bitcoin-crypto"
-version = "0.2.0"
+version = "0.3.0"
dependencies = [
"arbitrary",
"base58ck 0.5.0",
@@ -252,7 +252,7 @@ dependencies = [
[[package]]
name = "bitcoin-primitives"
-version = "0.103.0"
+version = "0.103.1"
dependencies = [
"arbitrary",
"bincode",
### Cargo-recent.lock
@@ -140,7 +140,7 @@ dependencies = [
[[package]]
name = "bitcoin-crypto"
-version = "0.2.0"
+version = "0.3.0"
dependencies = [
"arbitrary",
"base58ck 0.5.0",
@@ -251,7 +251,7 @@ dependencies = [
[[package]]
name = "bitcoin-primitives"
-version = "0.103.0"
+version = "0.103.1"
dependencies = [
"arbitrary",
"bincode",
### addresses/Cargo.toml
@@ -21,7 +21,7 @@ alloc = ["base58/alloc", "bech32/alloc", "crypto/alloc", "hashes/alloc", "intern
[dependencies]
base58 = { package = "base58ck", path = "../base58", version = "0.5.0", default-features = false, features = [] }
bech32 = { version = "0.11.0", default-features = false, features = [] }
-crypto = { package = "bitcoin-crypto", path = "../crypto", version = "0.2.0", default-features = false, features = ["hex"] }
+crypto = { package = "bitcoin-crypto", path = "../crypto", version = "0.3.0", default-features = false, features = ["hex"] }
hashes = { package = "bitcoin_hashes", path = "../hashes", version = "1.0.0", default-features = false, features = ["hex"] }
internals = { package = "bitcoin-internals", path = "../internals", version = "0.6.0" }
taproot_primitives = { package = "bitcoin-taproot-primitives", path = "../taproot_primitives", version = "0.1.0", default-features = false, features = [] }
### bitcoin/Cargo.toml
@@ -29,7 +29,7 @@ arbitrary = ["crypto/arbitrary", "dep:arbitrary", "units/arbitrary", "primitives
addresses = { package = "bitcoin-addresses", path = "../addresses", version = "0.0.0", default-features = false, features = ["alloc"] }
base58 = { package = "base58ck", path = "../base58", version = "0.5.0", default-features = false, features = ["alloc"] }
bech32 = { version = "0.11.0", default-features = false, features = ["alloc"] }
-crypto = { package = "bitcoin-crypto", path = "../crypto", version = "0.2.0", default-features = false, features = ["alloc", "hex"] }
+crypto = { package = "bitcoin-crypto", path = "../crypto", version = "0.3.0", default-features = false, features = ["alloc", "hex"] }
hashes = { package = "bitcoin_hashes", path = "../hashes", version = "1.1.0", default-features = false, features = ["alloc", "hex"] }
key-expression = { package = "bitcoin-key-expression", path = "../key_expression", version = "0.1.0", default-features = false, features = ["alloc"] }
encoding = { package = "bitcoin-consensus-encoding", path = "../consensus_encoding", version = "1.1.0", default-features = false, features = ["alloc", "hex"] }
### crypto/CHANGELOG.md
@@ -2,6 +2,23 @@
## [Unreleased]
+## [0.3.0] - 2026-07-30
+
+- Remove `PrivateKeyExt` and make `PrivateKey::as_inner` private [#6345](https://github.com/rust-bitcoin/rust-bitcoin/pull/6345)
+- Remove `XOnlyPublicKey::as_inner` and make `to_inner` private for public keys [#5619](https://github.com/rust-bitcoin/rust-bitcoin/pull/5619)
+- Remove Verification re-exports [#6319](https://github.com/rust-bitcoin/rust-bitcoin/pull/6319)
+- Improve sighash errors [#6318](https://github.com/rust-bitcoin/rust-bitcoin/pull/6318)
+- Add `XOnlyPublicKey::verify` [#6261](https://github.com/rust-bitcoin/rust-bitcoin/pull/6261)
+- Extend ECDSA `Signature` [#6260](https://github.com/rust-bitcoin/rust-bitcoin/pull/6260)
+- Split `key::encapsulate` and rename `LegacyPublicKey::to_bytes` [#6238](https://github.com/rust-bitcoin/rust-bitcoin/pull/6238)
+- Introduce new errors to remove `secp256k1::Error` [#6183](https://github.com/rust-bitcoin/rust-bitcoin/pull/6183)
+- Remove alloc feature gate from taproot module [#6155](https://github.com/rust-bitcoin/rust-bitcoin/pull/6155)
+- Add `with_compressedness` to `LegacyPublicKey` [#6119](https://github.com/rust-bitcoin/rust-bitcoin/pull/6119)
+- Clean up key module [#6118](https://github.com/rust-bitcoin/rust-bitcoin/pull/6118)
+- Remove `with_serialized` from `LegacyPublicKey` [#6116](https://github.com/rust-bitcoin/rust-bitcoin/pull/6116)
+- Move `taproot` module to `crypto` [#6097](https://github.com/rust-bitcoin/rust-bitcoin/pull/6097)
+- Gate all usage of `hex-conservative` behind `hex` feature [#6043](https://github.com/rust-bitcoin/rust-bitcoin/pull/6043)
+
## [0.2.0] - 2026-04-27
- Re-export types and extern crates [#5858](https://github.com/rust-bitcoin/rust-bitcoin/pull/5858)
@@ -19,5 +36,6 @@
- Empty crate to reserve the name on crates.io
-[Unreleased]: https://github.com/rust-bitcoin/rust-bitcoin/compare/bitcoin-crypto-0.2.0...HEAD
+[Unreleased]: https://github.com/rust-bitcoin/rust-bitcoin/compare/bitcoin-crypto-0.3.0...HEAD
+[0.3.0]: https://github.com/rust-bitcoin/rust-bitcoin/compare/bitcoin-crypto-0.2.0...bitcoin-crypto-0.3.0
[0.2.0]: https://github.com/rust-bitcoin/rust-bitcoin/compare/bitcoin-crypto-0.1.0...bitcoin-crypto-0.2.0
### crypto/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "bitcoin-crypto"
-version = "0.2.0"
+version = "0.3.0"
authors = ["Andrew Poelstra <apoelstra@wpsoftware.net>"]
license = "CC0-1.0"
repository = "https://github.com/rust-bitcoin/rust-bitcoin"
### key_expression/Cargo.toml
@@ -22,7 +22,7 @@ arbitrary = ["crypto/arbitrary", "dep:arbitrary", "hashes/arbitrary", "secp256k1
[dependencies]
base58 = { package = "base58ck", path = "../base58", version = "0.5.0", default-features = false }
-crypto = { package = "bitcoin-crypto", path = "../crypto", version = "0.2.0", default-features = false }
+crypto = { package = "bitcoin-crypto", path = "../crypto", version = "0.3.0", default-features = false }
hashes = { package = "bitcoin_hashes", path = "../hashes", version = "1.0.0", default-features = false, features = ["hex"] }
hex = { package = "hex-conservative", version = "1.1.0", default-features = false, features = ["alloc"] }
internals = { package = "bitcoin-internals", path = "../internals", version = "0.6.0" }
### primitives/CHANGELOG.md
@@ -2,6 +2,10 @@
## [Unreleased]
+# [0.103.1] - 2026-08-06
+
+- Explicitly depend on `consensus-encoding 1.1.0`
+
# [0.103.0] - 2026-07-14
- Move `script_hash` and `wscript_hash` to primitives [#6504](https://github.com/rust-bitcoin/rust-bitcoin/pull/6504)
### primitives/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "bitcoin-primitives"
-version = "0.103.0"
+version = "0.103.1"
authors = ["Andrew Poelstra <apoelstra@wpsoftware.net>", "Tobin C. Harding <me@tobin.cc>"]
license = "CC0-1.0"
repository = "https://github.com/rust-bitcoin/rust-bitcoin"
@@ -22,7 +22,7 @@ arbitrary = ["dep:arbitrary", "units/arbitrary"]
hex = ["dep:hex", "hashes/hex", "encoding/hex"]
[dependencies]
-encoding = { package = "bitcoin-consensus-encoding", path = "../consensus_encoding", version = "1.0.0", default-features = false }
+encoding = { package = "bitcoin-consensus-encoding", path = "../consensus_encoding", version = "1.1.0", default-features = false }
hashes = { package = "bitcoin_hashes", path = "../hashes", version = "1.1.0", default-features = false }
internals = { package = "bitcoin-internals", path = "../internals", version = "0.6.0" }
units = { package = "bitcoin-units", path = "../units", version = "0.5.0", default-features = false, features = [ "encoding" ] }
### taproot_primitives/Cargo.toml
@@ -21,7 +21,7 @@ arbitrary = ["dep:arbitrary", "crypto/arbitrary", "secp256k1/arbitrary"]
hex = ["crypto/hex", "encoding/hex", "hashes/hex"]
[dependencies]
-crypto = { package = "bitcoin-crypto", path = "../crypto", version = "0.2.0", default-features = false }
+crypto = { package = "bitcoin-crypto", path = "../crypto", version = "0.3.0", default-features = false }
encoding = { package = "bitcoin-consensus-encoding", path = "../consensus_encoding", version = "1.1.0", default-features = false, features = [] }
hashes = { package = "bitcoin_hashes", path = "../hashes", version = "1.0.0", default-features = false }
internals = { package = "bitcoin-internals", path = "../internals", version = "0.6.0" }Why this scored 15/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.