Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
b745562
test(ripple): assert canonical MemoData field and length boundaries
BitHighlander Sep 23, 2026
1d42a1f
fix(report): describe immediate unlimited-approval refusal
BitHighlander Sep 24, 2026
e97672c
test(eip712): check streamed array digests against an independent enc…
BitHighlander Sep 25, 2026
546dcb0
test(clearsign): assert the device's unlimited-approval refusal on th…
BitHighlander Sep 25, 2026
0aa3c1a
test(erc7730): never pass firmware/registry conformance without its i…
BitHighlander Sep 25, 2026
d64749c
test(eip712): cover the final sign screen, domain-only, permits and l…
BitHighlander Sep 25, 2026
4f80b08
fix(erc7730): compile only programs the device verifier accepts
BitHighlander Sep 25, 2026
e97f625
test(eip712): assert the typed-data response reports the signing address
BitHighlander Sep 25, 2026
9cea0ad
fix(erc7730): refuse paths deeper than device captures accept
BitHighlander Sep 25, 2026
dd43466
Merge commit '9cea0ad' into release/715-stack07-phase0
BitHighlander Sep 25, 2026
67f561c
feat(erc7730): compile only what the device executes
BitHighlander Sep 25, 2026
ce14a48
fix(erc7730): mirror required roles, containers and step encodings ex…
BitHighlander Sep 25, 2026
97105c4
feat(erc7730): compile tokenAmount, addressName, containers and const…
BitHighlander Sep 25, 2026
e105faf
feat(erc7730): compile the interpolated intent the device now shows
BitHighlander Sep 25, 2026
4b41809
feat(erc7730): compile amount, nftName, date, duration, unit and enum
BitHighlander Sep 25, 2026
f813519
fix(7.15): mirror phase A-C preload and text limits
BitHighlander Sep 26, 2026
b985836
feat(erc7730): isolate groups and visible optional fields
BitHighlander Sep 27, 2026
59eb3b7
feat(erc7730): isolate iteration and fix signer-constant intent check
BitHighlander Sep 27, 2026
8a213ec
feat(erc7730): carry embedded calls onto split iteration stack
BitHighlander Sep 27, 2026
345cf97
ci: clone the actual project for canonical smoke
BitHighlander Sep 27, 2026
dd7649b
Merge commit '345cf97' into release/715-stack07b2b-iteration-mirror
BitHighlander Sep 27, 2026
dd5811d
Merge commit '345cf97' into release/715-stack07b3r-embedded-mirror
BitHighlander Sep 27, 2026
5c2dd4d
Merge commit 'dd7649b3a8d1ab43c2dbba8af5a9db1e1190769f' into release/…
BitHighlander Sep 27, 2026
5d50acc
test(erc7730): bind large inner calls across transport chunks
BitHighlander Sep 27, 2026
d9a02d9
test(erc7730): audit embedded replay and cancellation boundaries
BitHighlander Sep 27, 2026
8a970c8
style(tests): remove inherited compiler-test trailing whitespace
BitHighlander Sep 27, 2026
0242451
ci: qualify canonical Python against accepted 7b firmware
BitHighlander Sep 27, 2026
6033aab
ci: bind staged 7.15 tests to accepted firmware capability ledger
BitHighlander Sep 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ jobs:
name: Checkout current branch over HTTPS
command: |
git clone --depth 1 -b "$CIRCLE_BRANCH" \
https://github.com/keepkey/python-keepkey.git .
"https://github.com/${CIRCLE_PROJECT_USERNAME}/${CIRCLE_PROJECT_REPONAME}.git" .
git submodule update --init --recursive
- run:
name: Validate canonical Python and EOS vector contracts
Expand Down
29 changes: 25 additions & 4 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -125,11 +125,32 @@ jobs:
with:
repository: BitHighlander/keepkey-firmware
# PINNED, not a moving branch, so a green result remains citeable.
# This is the code/workflow head beneath the handoff-only commit on
# firmware PR #843.
ref: 9b0583a41b758af7fb4c08280ab2a2bd8bb5d503
# Accepted consolidated 7b (#871): supplies the compiler/runtime
# contracts exercised by the canonical Python stack through 08.
ref: 2483977523d9b6beab52a69429ace9aeefd00f76
path: keepkey-firmware

- name: Bind the staged 7.15 capability ledger to the pinned firmware
run: |
python - <<'PYCODE'
import os
import pathlib
import re
# The preceding checkout is the immutable accepted 7b commit. Its
# owner-reviewed omissions apply only to this staged 7.15 job;
# no Python test assertion or default release behavior is changed.
workflow = pathlib.Path('keepkey-firmware/.github/workflows/ci.yml').read_text()
values = re.findall(r'^ KK_RELEASE_MISSING_CAPABILITIES: ([a-z0-9,-]*)$',
workflow, re.MULTILINE)
if len(values) != 1:
raise SystemExit('Expected one explicit ledger in pinned staged firmware')
with open(os.environ['GITHUB_ENV'], 'a') as env:
env.write('KK_RELEASE_MISSING_CAPABILITIES=' + values[0] + '\n')
with open(os.environ['GITHUB_STEP_SUMMARY'], 'a') as summary:
summary.write('Staged 7.15 firmware 2483977523d9b6beab52a69429ace9aeefd00f76; '
'deferred capabilities: `' + values[0] + '`.\n')
PYCODE

# NOT `submodules: recursive`. trezor-firmware carries a micropython
# vendor tree whose lib/lwip lives on git.savannah.gnu.org, which serves
# dumb HTTP and cannot do the shallow clone actions/checkout requests --
Expand Down Expand Up @@ -555,7 +576,7 @@ jobs:
firmware_ref: 4125e1c7409b1cb7b08ba595bc408e3128fc24ca
min_fw: "7.14.3"
- release: "7.15"
firmware_ref: 9b0583a41b758af7fb4c08280ab2a2bd8bb5d503
firmware_ref: 2483977523d9b6beab52a69429ace9aeefd00f76
min_fw: "7.15.0"

# KK_BITCOIN_ONLY=ON is a second shipping product, not a build flavour:
Expand Down
2 changes: 1 addition & 1 deletion device-protocol
6 changes: 6 additions & 0 deletions keepkeylib/debuglink.py
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,12 @@ def read_dice_digest(self):
obj = self._call(proto.DebugLinkGetState())
return obj.dice_digest

def read_confirm_text(self):
"""(title, body) of the confirmation currently or last shown, exactly
as the firmware formatted them, before the body is paged."""
obj = self._call(proto.DebugLinkGetState())
return (obj.confirm_title, obj.confirm_body)

def read_passphrase_protection(self):
obj = self._call(proto.DebugLinkGetState())
return obj.passphrase_protection
Expand Down
12 changes: 11 additions & 1 deletion keepkeylib/erc7730.py
Original file line number Diff line number Diff line change
Expand Up @@ -166,7 +166,17 @@ def resolve(self, request):
return definition

def chunk(self, request):
definition = self.resolve(request)
try:
definition = self.resolve(request)
except KeyError:
if (not request.HasField("recursion_depth") or
request.recursion_depth == 0):
raise
# An embedded call's definition that the catalog does not hold:
# the empty chunk means "none". Firmware 7.15 then shows the
# inner call under a blind-sign warning; 7.16 rejects it.
return ethereum.EthereumClearSignDefinitionChunk(
definition_id=bytes(32), offset=0, total_length=0, data=b"")
offset = request.offset
length = request.length
if length == 0 or length > MAX_CHUNK or offset >= len(definition.envelope):
Expand Down
Loading
Loading