You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

181 lines
5.4 KiB

Dev v1.0.7 (#57) * PASS1-133: Modify cosign file naming for fully signed binaries. (#34) * PASS1-133: Modify cosign file naming for fully signed binaries. * Remove all USE_CRYPTO, it is not used anymore Also remove function that is not needed. * Added use of firmware version from header, also fixed a seg fault * PASS1-135: Fix sticky up or down key (#33) * PASS1-135: Fix sticky up or down key * Add comment for input.reset function * PASS1-128: Add support back for Bitcoin testnet (#29) * Fixes part of PASS-91 Show address and index of the address being verified * Second half of fix for ENV1-91 Add better messaging for address range searching Fix a bug when saving next_addrs (was comparing dicts by ref) * Fixes PASS1-122 Check change addresses in addition to receive address in "Verify Address" * Fix comment punctuation * Show backup filename to user after successful backup (#18) Fix PASS1-92 * Auto-truncate multisig config names (#19) Fix PASS1-101 * PASS1-101: Auto-truncate multisig config names (#19) Fix PASS1-101 * Remove unnecessary comments * PASS1-92 (#20) * Show backup filename to user after successful backup Fix PASS1-92 * Add missing 'card' parameter to `get_backups_folder_path()` calls * Revert path function changes since 'card' is not available * PASS1-102: Fix backwards microSD issue Found that `ErrorCode` in `SD_HandleTypeDef` was not reset after a failure. Updated `HAL_SD_Init()` to reset it before attempting initialization. * PASS1-102: Fix backwards microSD issue (#21) Found that `ErrorCode` in `SD_HandleTypeDef` was not reset after a failure. Updated `HAL_SD_Init()` to reset it before attempting initialization. * PASS1-102_b (#22) * PASS1-102: Fix backwards microSD issue Found that `ErrorCode` in `SD_HandleTypeDef` was not reset after a failure. Updated `HAL_SD_Init()` to reset it before attempting initialization. * Switch back to hard-coded path for now * PASS1-122_b (#23) * PASS1-102: Fix backwards microSD issue Found that `ErrorCode` in `SD_HandleTypeDef` was not reset after a failure. Updated `HAL_SD_Init()` to reset it before attempting initialization. * Update user messaging for found/not found case of Verify Address Fix bug with trailing space at end of line in `word_wrap()` * Strip ever time through the loop * PASS1-125: Add Git commit-msg hook to check for Linear ID (#24) * PASS1-125: Add Git commit-msg hook to check for Linear ID * Update .githooks/commit-msg Co-authored-by: Jean Pierre Dudey <jeandudey@hotmail.com> Co-authored-by: Jean Pierre Dudey <jeandudey@hotmail.com> * PASS1-122: Minor updates to text (#27) * PASS1-127: Fix `reuse lint` issues in the repo (#26) * PASS1-113: Give the user a way to clear the developer pubkey slot (#25) * PASS1-122: Added "Address Verified" text to new wallet pairing (#28) * PASS1-122: Minor updates to text * PASS1-122: Added "Address Verified" text to new wallet pairing * PASS1-128: Add support back for Bitcoin testnet Co-authored-by: Ken Carpenter <ken@foundationdevices.com> Co-authored-by: Ken Carpenter <62639971+FoundationKen@users.noreply.github.com> Co-authored-by: Jean Pierre Dudey <jeandudey@hotmail.com> * PASS1-56: Use XFP in backups filename and don't save `backup_num` (#32) * PASS1-34: Refactor find address code so there is only one copy (#37) * PASS1-94: Prevent installing user-signed firmware if no user-key installed (#38) * PASS1-94: Prevent installing user-signed firmware if no user signing key installed * Fixed case where user pubkey was removed manually * Fixed text to match other areas where text is used * Update text message for developer pubkey * Hard coded user signed field to false Co-authored-by: Ken Carpenter <62639971+FoundationKen@users.noreply.github.com> * PASS1-55: Add menu to switch to a different Passphrase without rebooting (#35) * PASS1-55: Add menu to switch to a different Passphrase without rebooting * Changed order of menu items in Passphrase menu * Modified menu titles and removed "a" from inconsistent text * PASS1-137: Add Justfile support to Gen 1 repo (#36) * PASS1-137: Add Justfile support to Gen 1 repo First pass - not all expected commands are added yet * Update Justfile with fmt command Add py and c/h formatting Need to finalize .clang-format file before doing a full reformatting PR * Refactor Justfiles to separate them out Also add graphics build commands * Update Justfiles a bit Fix formatting of graphics header files in preparation for automatic code formatting * PASS1-139: Implement code to allow OCD to capture a screenshot over JTAG (#42) * PASS1-139: Implement code to allow OCD to capture a screenshot over JTAG * Update sram4.py * PASS1-132: Remove duplicate file compilation (#39) * PASS1-78: In display.text_input, split lines based on pixel widths (#41) * PASS1-78: In display.text_input, split lines based on pixel widths * Check for StringIO object before calling split_by_char_size * PASS1-89: Show exported filename when exporting wallet to microSD (#43) * PASS1-89: Show exported filename when exporting wallet to microSD * Deleted/commented unnecessary lines * PASS1-136: Add Specter wallet back once they fix UR issues (#44) * PASS1-136: Add Specter wallet back once they fix UR issues * Rebase onto dev-v1.0.7 * Remove passport from export filename * Remove flag from all wallets besides Specter wallet * Removed flag from unnecessary field and renamed flag to import * Renamed multisig_import function * PASS1-112: Passphrase input dialog improvements (#48) * PASS1-112: Passphrase input dialog improvements The passphrase is limited to 64 characters. The line spacing was reduced to make room for 7 lines. 63 capital W's will fill all 7 lines (+1 over), otherwise 64 characters usually takes about 4 lines. * Add constant for max message length * TOOL-3: Setup Docker infra for Gen 1 Development (#45) * Add Dockerfile for building the firmware Setting up a local environment for building the firmware can be a painful process. This wraps that process up in a Dockerfile containing all the deps needed which is then used in the justfile to build the firmware. * Add just targets for signing and cleaning * Change sha target to take a sha and verify it directly * Add docs for verifying the firmware SHA sum * Add version param to sign just target * Update verify-sha output to be more explicit * PASS1-67: Change unit to sats in settings (#46) * PASS1-67: Change unit to sats in settings * Added warnings for Testnet and made the setting volatile * Added 'chain' removal to schema_evolution and moved Units menu to top * Moved Units below Change Pin in menu * TOOL-4: Implement CI for Passport Gen 1 build (#49) * TOOL-4: Create CI for firmware build * TOOL-4: Improve handling of git describe output * TOOL-4: Rename Justfile to match others in repo * TOOL-4: Add caching and separated Docker building in CI * TOOL-4: Update CI to push image to local registry service * TOOL-4: Update CI to allow customizing of D_BASE * TOOL-4: Change clang format action * TOOL-4: User correct clang format version * TOOL-4: YAML :( * TOOL-4: Update to clang-format-10.0 * TOOL-4: Updaet to 10 * TOOL-4: Build and export the bootloader * TOOL-4: Add D_BASE to bootload build step * TOOL-4: Correctly pass D_BASE to bootloader job * TOOL-4: Update bootloader make path in Justfile * TOOL-4: Update CI to output tools * PASS1-140: Add Justfile commands to DEVELOPMENT.md (#51) * PASS1-140: Add Justfile commands to DEVELOPMENT.md * Update DEVELOPMENT.md * Update DEVELOPMENT.md Co-authored-by: Ken Carpenter <62639971+FoundationKen@users.noreply.github.com> * PASS1-148: Fix missing address prefixes for testnet (#53) * PASS1-148: Fix missing address prefixes for testnet * Add comma separations to sats values * Casa support added * Added testnet prefix check to Verify Address process * PASS1-150: Fixed missing argument in `import_from_psbt()` call (#55) * PASS1-150: Fixed missing argument in `import_from_psbt()` call Also fixed typo in function description. * Added a space between value and label of BTC/sats * Disable Casa Support Casa has not approved the support for Passport yet, until then Casa is disabled temporarily. Co-authored-by: Corey Lakey <corey.lakey@gmail.com> Co-authored-by: Jean Pierre Dudey <jeandudey@hotmail.com> Co-authored-by: Alex Sears <searsaw@users.noreply.github.com>
3 years ago
# SPDX-FileCopyrightText: 2021 Foundation Devices, Inc. <hello@foundationdevices.com>
#
# SPDX-License-Identifier: GPL-3.0-or-later
# Install dependencies.
deps:
@echo "Not sure we will need this if all deps are setup via Dockerfile"
# Initialize development environment
init: deps
git config core.hooksPath .githooks
# Lint only the python code of the project
lint-py:
pycodestyle --exclude trezor-firmware --statistics .
# Lint only the C code of the project
lint-c:
@echo "TBD"
# Lint only the code of the project
lint-code: lint-py lint-c
# Lint the licensing
lint-license:
reuse lint
# Lint all of the project
lint: lint-code lint-license
#
# Firmware Commands
#
build:
make BOARD=Passport
# Sign current firmware build with the user.pem key and set specified version
sign version="1.0.0": build
@echo "\nAdding user signature...\n"
@cosign -f build-Passport/firmware.bin -k ~/bin/keys/user.pem -v {{version}} > /dev/null
@cosign -f build-Passport/firmware-key-user.bin -x
@echo "\nSigning Complete!"
# Build, sign and flash the firmware with the specified version
flash version="1.0.0": (sign version)
just run-ocd-command "flash write_image erase build-Passport/firmware-key-user.bin 0x8020000"
just reset
# Install a recent Foundation-signed build
flash-foundation version="1.0.0":
just run-ocd-command "flash write_image erase ../../releases/passport-fw-{{version}}.bin 0x8020000"
just reset
# Clean the firmware build
clean:
make BOARD=Passport clean
#
# Misc. Commands
#
# Launch OCD, run a command and then exit
run-ocd-command command:
sudo /usr/local/bin/openocd -f stlink.cfg -c "adapter speed 1000; transport select hla_swd" -f stm32h7x.cfg -c "init; reset halt; {{command}}" -c "exit"
run-ocd-command-no-halt command:
sudo /usr/local/bin/openocd -f stlink.cfg -c "adapter speed 1000; transport select hla_swd" -f stm32h7x.cfg -c "init; {{command}}" -c "exit"
# Build all Python graphics
graphics-py:
just -f boards/Passport/graphics/py/Justfile build
# Build all C graphics (firmware & bootloader)
graphics-c:
just -f boards/Passport/graphics/c/Justfile build
graphics: graphics-py graphics-c
# Reset the Passport
reset:
just run-ocd-command "reset"
# Get the username for use below
user := `whoami`
# Read the "ROM Secrets" from Passport and save them to a file
save-secrets filename="boards/Passport/bootloader/secrets":
just run-ocd-command "dump_image {{filename}} 0x0801FF00 256"
# Running OCD as sudo makes the output file be owned by root, so switch it back to the user
sudo chown {{user}}:{{user}} {{filename}}
secrets:
#!/usr/bin/env bash
# The last bit below redirects stderr to stdout, which the backticks capture into the variable `secrets`
secrets=`just run-ocd-command "mdb 0x0801FF00 256" 2>&1`
secrets=`echo "$secrets" | tail -n 8`
echo -e "Passport ROM Secrets:\n$secrets"
# Calculate all hashes and format it all for GitHub release notes
hash filepath:
#!/usr/bin/env bash
filename=`basename {{filepath}}`
# SHA256
sha=`shasum -b -a 256 {{filepath}} | sed -rn 's/^(.*) .*$/\1/p'`
echo -e "\n\`SHA256: $sha\`"
echo -e "\`(shasum -b -a 256 $filename)\`\n"
# MD5
md5=`mdsum {{filepath}} | sed -rn 's/^(.*) .*$/\1/p'`
echo "\`MD5: $md5\`"
echo -e "\`(md5 $filename or mdsum $filename)\`\n"
# Build Hash
build_hash=`cosign -f {{filepath}} -x | sed -rn 's/^FW Build Hash: (.*)$/\1/p'`
echo -e "\`Build Hash: $build_hash\`"
echo -e "\`(Developers Only)\`\n"
# Run all tests
test:
@echo "TBD"
# Format the project's .py files under boards/Passport/modules
fmt-py:
#!/usr/bin/env bash
pushd boards/Passport/modules
files_to_fmt=`find . -path ./trezor-firmware -prune -false -o -name '*.py'`
autopep8 --max-line-length=120 --in-place $files_to_fmt
popd
# Format the project's .c and .h files under boards/Passport/
fmt-c:
#!/usr/bin/env bash
pushd boards/Passport
files_to_fmt=`find . -path ./trezor-firmware -prune -false -o -name '*.[c|h]'`
clang-format-5.0 -i --style=file $files_to_fmt
popd
# Format the project's source code under boards/Passport
fmt: fmt-py fmt-c
# Convert a raw pixel map to a PNG
convert-screenshot from_file to_file:
#!/usr/bin/python3
from PIL import Image, ImageOps
raw_bits = open('{{from_file}}', 'rb').read()
WIDTH = 230
HEIGHT = 303
SCAN_WIDTH = 240
# Convert
img = Image.frombuffer('1', (SCAN_WIDTH, HEIGHT), raw_bits)
# Crop to actual width (framebuffer is 240 vs 230 for actual display)
img = img.crop((0, 0, WIDTH, HEIGHT))
# Invert since raw image is actually white on black - have to convert to grayscale first since invert() doesn't work
# for 1-bit per pixel black/white images.
img = ImageOps.grayscale(img)
img = ImageOps.invert(img)
# Apply a color shift to make it look nicer
img = ImageOps.colorize(img, (0,0,0,0), '#E0E0E0')
img.save('{{to_file}}')
# Capture a screenshot from Passport via OCD
screenshot filename:
#!/usr/bin/env bash
ADDR_FILE=screenshot-addr.tmp
TMP_FILE=screenshot.tmp
just run-ocd-command-no-halt "dump_image $ADDR_FILE 0x38006920 4"
N=`head -c 4 $ADDR_FILE | od -An --endian=little -t u4`
FRAMEBUFFER_ADDR=`printf '%x\n' $N`
echo FRAMEBUFFER_ADDR=$FRAMEBUFFER_ADDR
just run-ocd-command-no-halt "dump_image screenshot.tmp 0x$FRAMEBUFFER_ADDR 9090"
just convert-screenshot $TMP_FILE {{filename}}
rm -f $TMP_FILE $ADDR_FILE