EP
← All projectsElements Project

libwally-core

Cross-platform wallet primitives for keys, addresses, transactions, PSBT, and Elements.

BitcoinCryptographic librariesSoftware walletsNormal
Repository coverage

96 commits in the local evidence base

Every captured commit receives deterministic security triage and a separate communication-quality score. Security candidates and broader second-pass signals receive full-patch Ollama analysis.

15security candidates27second-pass queue12AI analyses
15commits · 30 days
22commits · 60 days
74commits · 180 days
96commits · 365 days
Backfill bands
Aug 5 → Feb 622 seen3 candidatesComplete
Feb 6 → Jun 652 seen3 candidatesComplete
Jun 6 → Jul 67 seen0 candidatesComplete
Jul 6 → Aug 514 seen1 candidatesComplete
Commit communication

Does the history explain itself?

Message quality measures whether a commit identifies its scope, purpose, rationale, testing, and supporting references. It does not change the security-severity score.

61/100 average clarity
11Strong · 80–100
42Adequate · 60–79
33Thin · 40–59
10Opaque · 0–39
1security candidate with opaque commit messaging
Read the scoring rubric →
Developer activity

Who is changing the project?

Public Git author strings; identities are not independently verified.

DeveloperCommitsCandidatesAnalyzedHigh riskMessage avg.
Jon Griffiths811310059
Ondřej Češka111050
Erick Cestari1110100
dependabot[bot]500093
odudex200062
Daniel Newton200055
pythcoiner100055
Greg Sanders100068
Leonardo Comandini100060
longhutianjie100072
Analysis record

Published AI watches

Last scanned 21 minutes ago

Informational 15 AI analysisMessage 73 · Adequate
EP Elements Projectlibwally-core BitcoinCryptographic librariesSoftware wallets

crypto: add ec_public_key_compress to produce a compressed pubkey

This commit adds a new public-key compression function to a cryptographic library and updates the existing decompression function so both can accept already-compressed or already-uncompressed keys as input. It also adds tests and language …

03351cc9by Jon Griffiths+92−1610 files
No security note in commit
Moderate 62 AI analysisMessage 85 · Strong
EP Elements Projectlibwally-core BitcoinCryptographic librariesSoftware wallets

sign: disallow overlong der encodings and zero r or s values

This commit tightens signature validation in a cryptographic library. It now rejects malformed DER-encoded signatures that are longer than allowed, or where one of the signature numbers (R or S) is zero. Previously, the underlying secp256k…

Cryptographic input validation hardeningRejection of overlong DER-encoded ECDSA signaturesRejection of zero R or S signature components
e7894ee6by Jon Griffiths+6−11 file
Vendor flagged security relevance
Moderate 68 AI analysisMessage 73 · Adequate
EP Elements Projectlibwally-core BitcoinCryptographic librariesSoftware wallets

internal: avoid potential info leaks via sse/avx registers

This commit fixes a potential information leak in a cryptocurrency wallet library. When the library is built as a shared library on x86/x86_64 systems, optimized memory-copy functions can leave secret data (private keys, seed phrases, chai…

Information disclosure via CPU register spill to stackShared-library/PLT-specific side channelUse of SSE/AVX registers by optimized libc memcpy
91b3b6d6by Jon Griffiths+96−3610 files
Vendor flagged security relevance
Low 27 AI analysisMessage 78 · Adequate
EP Elements Projectlibwally-core BitcoinCryptographic librariesSoftware wallets

descriptor: support elements confidential wallet policies

This commit adds support in libwally-core for a new Elements/Liquid confidential-wallet policy format. It lets wallet policies include a special '@B' blinding key placeholder, kept separate from ordinary derivation keys. The change is a fe…

Descriptor/miniscript parsing code modifiedCryptographic key validation logic changedNew input validation rules added for '@B' blinding key
6bbe9eebby Jon Griffiths+90−331 file
No security note in commit
Moderate 59 AI analysisMessage 50 · Thin
EP Elements Projectlibwally-core BitcoinCryptographic librariesSoftware wallets

bip32: add some of the new bip32 checks to bip32_key_unserialize

This commit adds a safety check when loading BIP32 extended keys. Before, the code accepted any 33-byte public key bytes without verifying they form a valid public key. Now it calls a public-key validation function and rejects invalid keys…

New input-validation call (wally_ec_public_key_verify) added to deserialization pathRejection of invalid public-key bytes before key material is copied into output structAddition of BIP32 Test Vector 5 invalid-key test cases
2b74c8d7by Ondřej Češka+65−02 files
No security note in commit
Informational 15 AI analysisMessage 100 · Strong
EP Elements Projectlibwally-core BitcoinCryptographic librariesSoftware wallets

build: add fuzzing infrastructure for security testing

This commit only adds new build options and a test harness for fuzzing (automated security testing). It does not change any existing library code that handles PSBTs or other data, so it cannot by itself introduce a security vulnerability o…

c824172aby Erick Cestari+108−07 files
Vendor flagged security relevance
Low 44 AI analysisMessage 45 · Thin
EP Elements Projectlibwally-core BitcoinCryptographic librariesSoftware wallets

psbt: handle allocation failures in set_global_tx

This commit fixes a memory-management bug in the library's Partially Signed Bitcoin Transaction (PSBT) handling. When the code failed to allocate memory for new transaction inputs or outputs, it could leave behind partially initialized dat…

Allocation-failure handling added (NULL checks before array initialization)Resource cleanup improved (element-level free before array free)Potential use of uninitialized/freed memory path removed in OOM case
e45f553dby Jon Griffiths+26−141 file
No security note in commit
Moderate 59 AI analysisMessage 60 · Adequate
EP Elements Projectlibwally-core BitcoinCryptographic librariesSoftware wallets

psbt: fix check for too many witnesses

This commit fixes a parsing bug in how the library reads Bitcoin-style witness data from a transaction or PSBT. Before the fix, a malformed input could claim there were millions of witnesses while only providing a few bytes. The code would…

Out-of-bounds read / buffer over-read in a core deserialization routinePotential memory allocation failure or integer overflow from attacker-controlled witness countNew negative test case added for malformed PSBT with excessive witness count
a3fd0aa8by Jon Griffiths+11−03 files
Vendor flagged security relevance
Moderate 61 AI analysisMessage 60 · Adequate
EP Elements Projectlibwally-core BitcoinCryptographic librariesSoftware wallets

psbt: fix check for short buffers

This commit fixes a bug in how the library reads compact size numbers from PSBT (Partially Signed Bitcoin Transaction) data. Before the fix, the code could read past the end of a short input buffer when checking how many bytes a variable-l…

Out-of-bounds read in variable-length integer parsingShort/truncated input buffer not validated before length inspectionNew negative test case added for short PSBT bytes
a1de7372by Jon Griffiths+9−13 files
No security note in commit
Low 35 AI analysisMessage 60 · Adequate
EP Elements Projectlibwally-core BitcoinCryptographic librariesSoftware wallets

psbt: use control block verification call internally

This commit replaces a simple length check on Taproot control blocks with a dedicated verification function. The change is likely a hardening or correctness improvement rather than a clear-cut security fix. The old check only ensured the c…

Replaced length-only validation with a dedicated BIP341 control-block verification routineRemoved duplicated inline length check in favor of a centralized validation callParsing and serialization paths for Taproot leaf scripts now share the same validation logic
944f2660by Jon Griffiths+3−91 file
No security note in commit
Informational 19 AI analysisMessage 65 · Adequate
EP Elements Projectlibwally-core BitcoinCryptographic librariesSoftware wallets

java: allow non-const maps to be passed as null

This is a small Java language-binding change that lets callers pass Java null for one specific type of object (a non-const wally_map) instead of requiring a real object. It is used to skip an internal caching map when computing a Bitcoin/E…

API behavior change: null now accepted for a previously required non-const map argumentNo bounds-check, memory allocation, or cryptographic algorithm changesTest-only addition confirms functional equivalence of cached vs null-cache paths
2eb1742cby Jon Griffiths+20−42 files
No security note in commit
Informational 15 AI analysisMessage 55 · Thin
EP Elements Projectlibwally-core BitcoinCryptographic librariesSoftware wallets

java: add a test for tx_get_input_signature_hash

This commit only adds a new Java test file that checks a transaction signature hash function works correctly for Elements/Liquid taproot transactions. It does not change any library code, fix any bug, or alter behavior. There is no securit…

349236ecby Jon Griffiths+71−12 files
No security note in commit
Repository ledger

Explore captured commits

Expand any commit for its author, full message, clarity score, changed files, triage signals, analysis, and source link.

Lower-priorityupdate CHANGES.md for release 1.5.2by Jon Griffiths · 1809a021 · Feb 1, 2026 · 1 fileMessage 45 · ThinTriage 0Details
Commit message · Jon Griffiths

update CHANGES.md for release 1.5.2

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
documentation-only discount
Security candidatepsbt: fix check for too many witnessesby Jon Griffiths · a3fd0aa8 · Feb 1, 2026 · 3 filesMessage 60 · AdequateModerate 59Details
Commit message · Jon Griffiths

psbt: fix check for too many witnesses

Thanks to @erickcestari for reporting and suggesting a fix.

60/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
Why it was queued
signing boundarysigning or wallet path
AI analysis · Moderate 59/100

This commit fixes a parsing bug in how the library reads Bitcoin-style witness data from a transaction or PSBT. Before the fix, a malformed input could claim there were millions of witnesses while only providing a few bytes. The code would then try to read far beyond the available data, likely causing a crash or memory corruption. The fix adds a simple size check so the parser rejects obviously impossible inputs early.

Security candidatepsbt: fix check for short buffersby Jon Griffiths · a1de7372 · Feb 1, 2026 · 3 filesMessage 60 · AdequateModerate 61Details
Commit message · Jon Griffiths

psbt: fix check for short buffers

Thanks to @erickcestari for reporting and suggesting a fix.

60/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
Why it was queued
signing boundarysigning or wallet path
AI analysis · Moderate 61/100

This commit fixes a bug in how the library reads compact size numbers from PSBT (Partially Signed Bitcoin Transaction) data. Before the fix, the code could read past the end of a short input buffer when checking how many bytes a variable-length integer needs. The fix adds a check that at least one byte is available before asking how long the integer is. This is a memory-safety bug that could cause crashes or undefined behavior when parsing malformed PSBT data.

AI review queuedtests: transaction: deserialize ELIP203 test vectorsby Leonardo Comandini · 833d2cc5 · Jan 21, 2026 · 2 filesMessage 60 · AdequateTriage 17Details
Commit message · Leonardo Comandini

tests: transaction: deserialize ELIP203 test vectors

60/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Mentions testing or verification! No meaningful explanatory body
Why it was queued
fuzzing or regression evidencesigning or wallet pathsecond-pass: broader security terminologysecond-pass: security-sensitive path
Lower-prioritytx: Fix BIP118 ANYPREVOUTANYSCRIPT sighashby Greg Sanders · fb75bae7 · Jan 21, 2026 · 1 fileMessage 68 · AdequateTriage 0Details
Commit message · Greg Sanders

tx: Fix BIP118 ANYPREVOUTANYSCRIPT sighash

In the current code anytime sh_anyprevout_anyscript is true,
sh_anyonecanpay will also be true. Therefore it will fall
through and hash the prevout erroneously. Fix this by
checking for APOAS first.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
AI review queuedtaproot: add bip341_control_block_verifyby Jon Griffiths · 7ecf1fa4 · Nov 13, 2025 · 9 filesMessage 35 · OpaqueTriage 12Details
Commit message · Jon Griffiths

taproot: add bip341_control_block_verify

35/100 · OpaqueMessage clarity
✓ Descriptive subject! No meaningful explanatory body
Why it was queued
signing or wallet pathsecond-pass: opaque commit messagesecond-pass: security-sensitive path
Security candidatepsbt: use control block verification call internallyby Jon Griffiths · 944f2660 · Nov 13, 2025 · 1 fileMessage 60 · AdequateLow 35Details
Commit message · Jon Griffiths

psbt: use control block verification call internally

60/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Mentions testing or verification! No meaningful explanatory body
Why it was queued
signing boundarydefensive validationsigning or wallet path
AI analysis · Low 35/100

This commit replaces a simple length check on Taproot control blocks with a dedicated verification function. The change is likely a hardening or correctness improvement rather than a clear-cut security fix. The old check only ensured the control block had a valid-looking size; the new function may also validate internal structure, such as the parity bit and merkle proof path. Without the implementation of the new verification function, we cannot confirm whether it closes a real vulnerability or just reduces duplicated logic.

Lower-prioritytaproot: fix merkle path length checkby Jon Griffiths · 54eaca22 · Nov 13, 2025 · 1 fileMessage 60 · AdequateTriage 0Details
Commit message · Jon Griffiths

taproot: fix merkle path length check

Per BIP-0341 path lengths are limited to 128 or less.

60/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
Lower-prioritymap_merkle_path_add: ignore duplicates as per the other _add functionsby Jon Griffiths · 7e483c04 · Nov 13, 2025 · 1 fileMessage 50 · ThinTriage 0Details
Commit message · Jon Griffiths

map_merkle_path_add: ignore duplicates as per the other _add functions

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
AI review queuedbuild: fix clear sizes and index typeby Jon Griffiths · 1c482b85 · Nov 13, 2025 · 2 filesMessage 57 · ThinTriage 12Details
Commit message · Jon Griffiths

build: fix clear sizes and index type

57/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope! No meaningful explanatory body
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
Lower-priorityci: add an enable-elements-abi=no build to prevent future breakageby Jon Griffiths · ed29507a · Sep 29, 2025 · 1 fileMessage 74 · AdequateTriage 0Details
Commit message · Jon Griffiths

ci: add an enable-elements-abi=no build to prevent future breakage

74/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Explains rationale or failure mode! No meaningful explanatory body
AI review queuedelements: fix enable-elements-abi=no buildby Jon Griffiths · 05c3903d · Sep 28, 2025 · 2 filesMessage 45 · ThinTriage 12Details
Commit message · Jon Griffiths

elements: fix enable-elements-abi=no build

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI review queuedBump version to 1.5.1by Jon Griffiths · a445157d · Aug 20, 2025 · 9 filesMessage 38 · OpaqueTriage 0Details
Commit message · Jon Griffiths

Bump version to 1.5.1

38/100 · OpaqueMessage clarity
✓ Subject identifies a change✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
second-pass: opaque commit message
Lower-priorityupdate CHANGES.md for release 1.5.1by Jon Griffiths · 82125553 · Aug 20, 2025 · 1 fileMessage 45 · ThinTriage 0Details
Commit message · Jon Griffiths

update CHANGES.md for release 1.5.1

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
documentation-only discount
Lower-prioritypython: run swig python tests from a virtualenvby Jon Griffiths · 2abe289d · Aug 20, 2025 · 1 fileMessage 70 · AdequateTriage 0Details
Commit message · Jon Griffiths

python: run swig python tests from a virtualenv

This ensures that we are testing the built wallycore wheel.

70/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Mentions testing or verification
Lower-prioritypython: allow source building for newer pip versionsby Jon Griffiths · 1403b66b · Aug 20, 2025 · 1 fileMessage 50 · ThinTriage 0Details
Commit message · Jon Griffiths

python: allow source building for newer pip versions

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Lower-prioritybuild: update cibuildwheel to v3.1.4, remove python 3.8 supportby Jon Griffiths · 38ff315b · Aug 20, 2025 · 1 fileMessage 77 · AdequateTriage 0Details
Commit message · Jon Griffiths

build: update cibuildwheel to v3.1.4, remove python 3.8 support

Update list of skipped python builds, skip 3.14 as it is still
pre-release.

77/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides an explanatory body
Why it was queued
documentation-only discount
Lower-prioritybuild: update checkout action to v5by Jon Griffiths · 78aae0f0 · Aug 20, 2025 · 2 filesMessage 57 · ThinTriage 0Details
Commit message · Jon Griffiths

build: update checkout action to v5

57/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope! No meaningful explanatory body
Why it was queued
documentation-only discount
AI review queuedchore: fix some typos in commentby longhutianjie · 00af4de3 · Aug 13, 2025 · 5 filesMessage 72 · AdequateTriage 12Details
Commit message · longhutianjie

chore: fix some typos in comment

Signed-off-by: longhutianjie <keplrnewton@icloud.com>

72/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides an explanatory body
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
Security candidatejava: allow non-const maps to be passed as nullby Jon Griffiths · 2eb1742c · Aug 13, 2025 · 2 filesMessage 65 · AdequateInformational 19Details
Commit message · Jon Griffiths

java: allow non-const maps to be passed as null

This allows e.g. skipping caching on the new signature hash call.

65/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Names security-relevant behavior explicitly
Why it was queued
signing boundary
AI analysis · Informational 19/100

This is a small Java language-binding change that lets callers pass Java null for one specific type of object (a non-const wally_map) instead of requiring a real object. It is used to skip an internal caching map when computing a Bitcoin/Elements transaction signature hash. The change is a convenience/API improvement, not a fix for a memory corruption or cryptographic bug.

Security candidatejava: add a test for tx_get_input_signature_hashby Jon Griffiths · 349236ec · Aug 12, 2025 · 2 filesMessage 55 · ThinInformational 15Details
Commit message · Jon Griffiths

java: add a test for tx_get_input_signature_hash

Co-authored-by: @araspitzu

55/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Mentions testing or verification! No meaningful explanatory body
Why it was queued
signing boundary
AI analysis · Informational 15/100

This commit only adds a new Java test file that checks a transaction signature hash function works correctly for Elements/Liquid taproot transactions. It does not change any library code, fix any bug, or alter behavior. There is no security issue here.