commit
e631983d6d
@ -0,0 +1,30 @@
|
||||
variables:
|
||||
# Init submodules.
|
||||
# See https://docs.gitlab.com/ee/ci/yaml/#git-submodule-strategy
|
||||
GIT_SUBMODULE_STRATEGY: "recursive"
|
||||
|
||||
# Use shallow cloning to speed up git clone. This can fail, if retrying an older build on CI
|
||||
# and the old commit is not in the shallow history any more.
|
||||
# See https://docs.gitlab.com/ee/ci/yaml/#shallow-cloning
|
||||
GIT_DEPTH: "50"
|
||||
|
||||
# run make paralel
|
||||
MAKEFLAGS: "-j10"
|
||||
|
||||
stages:
|
||||
- environment
|
||||
- prebuild
|
||||
- build
|
||||
- test
|
||||
|
||||
before_script:
|
||||
- pipenv install
|
||||
|
||||
include:
|
||||
- ci/environment.yml
|
||||
- ci/prebuild.yml # common, style
|
||||
- ci/core.yml
|
||||
- ci/legacy.yml
|
||||
# - ci/python.yml TODO
|
||||
- ci/crypto.yml
|
||||
- ci/storage.yml
|
@ -0,0 +1,24 @@
|
||||
## help commands:
|
||||
|
||||
help: ## show this help
|
||||
@awk -f ./tools/help.awk $(MAKEFILE_LIST)
|
||||
|
||||
## style commands:
|
||||
|
||||
style_check: ## run code style check on application sources and tests
|
||||
flake8 --version
|
||||
isort --version | awk '/VERSION/{print $$2}'
|
||||
black --version
|
||||
flake8 $(shell find -type f -name '*.py' | grep -f ./tools/style.py.include | grep -v -f ./tools/style.py.exclude )
|
||||
isort --check-only $(shell find -type f -name '*.py' | grep -f ./tools/style.py.include | grep -v -f ./tools/style.py.exclude )
|
||||
black --check $(shell find -type f -name '*.py' | grep -f ./tools/style.py.include | grep -v -f ./tools/style.py.exclude )
|
||||
|
||||
style: ## apply code style on application sources and tests
|
||||
isort $(shell find -type f -name '*.py' | grep -f ./tools/style.py.include | grep -v -f ./tools/style.py.exclude )
|
||||
black $(shell find -type f -name '*.py' | grep -f ./tools/style.py.include | grep -v -f ./tools/style.py.exclude )
|
||||
|
||||
cstyle_check: ## run code style check on low-level C code
|
||||
./tools/clang-format-check $(shell find -type f -name '*.c' -o -name '*.h' | grep -f ./tools/style.c.include | grep -v -f ./tools/style.c.exclude )
|
||||
|
||||
cstyle: ## apply code style on low-level C code
|
||||
clang-format -i $(shell find -type f -name '*.c' -o -name '*.h' | grep -f ./tools/style.c.include | grep -v -f ./tools/style.c.exclude )
|
@ -0,0 +1,58 @@
|
||||
image: registry.corp.sldev.cz/trezor/trezor-firmware/environment
|
||||
|
||||
build core firmware:
|
||||
stage: build
|
||||
script:
|
||||
- cd core
|
||||
- pipenv run make build_cross
|
||||
- pipenv run make build_boardloader
|
||||
- pipenv run make build_bootloader
|
||||
- pipenv run make build_prodtest
|
||||
- pipenv run make build_firmware
|
||||
# - test "$TREZOR_MODEL" = "1" || pipenv run make sizecheck
|
||||
artifacts:
|
||||
name: "$CI_JOB_NAME-$CI_COMMIT_SHORT_SHA"
|
||||
paths:
|
||||
- core/build/firmware/firmware.bin
|
||||
- core/build/bootloader/bootloader.bin
|
||||
expire_in: 1 week
|
||||
|
||||
build core unix:
|
||||
stage: build
|
||||
script:
|
||||
- cd core
|
||||
- pipenv run make build_unix_noui
|
||||
artifacts:
|
||||
name: "$CI_JOB_NAME-$CI_COMMIT_SHORT_SHA"
|
||||
untracked: true
|
||||
expire_in: 1 day
|
||||
|
||||
test core unix unit:
|
||||
stage: test
|
||||
variables:
|
||||
GIT_SUBMODULE_STRATEGY: none # no need to fetch submodules
|
||||
dependencies:
|
||||
- build core unix
|
||||
script:
|
||||
- cd core
|
||||
- pipenv run make test
|
||||
|
||||
test core unix device:
|
||||
stage: test
|
||||
variables:
|
||||
GIT_SUBMODULE_STRATEGY: none # no need to fetch submodules
|
||||
dependencies:
|
||||
- build core unix
|
||||
script:
|
||||
- cd core
|
||||
- pipenv run make test_emu
|
||||
|
||||
test core unix monero:
|
||||
stage: test
|
||||
variables:
|
||||
GIT_SUBMODULE_STRATEGY: none # no need to fetch submodules
|
||||
dependencies:
|
||||
- build core unix
|
||||
script:
|
||||
- cd core
|
||||
- pipenv run make test_emu_monero
|
@ -0,0 +1,23 @@
|
||||
image: registry.corp.sldev.cz/trezor/trezor-firmware/environment
|
||||
|
||||
build crypto:
|
||||
stage: build
|
||||
script:
|
||||
- cd crypto
|
||||
- pipenv run make
|
||||
artifacts:
|
||||
name: "$CI_JOB_NAME-$CI_COMMIT_SHORT_SHA"
|
||||
untracked: true
|
||||
expire_in: 1 day
|
||||
|
||||
test crypto:
|
||||
stage: test
|
||||
dependencies:
|
||||
- build crypto
|
||||
script:
|
||||
- cd crypto
|
||||
- ./tests/aestst
|
||||
- ./tests/test_check
|
||||
- CK_TIMEOUT_MULTIPLIER=20 valgrind -q --error-exitcode=1 ./tests/test_check
|
||||
- ./tests/test_openssl 1000
|
||||
- ITERS=10 pipenv run pytest tests/ # TODO are ITERS=10 propagated?
|
@ -0,0 +1,16 @@
|
||||
environment:
|
||||
stage: environment
|
||||
image: docker:latest
|
||||
variables:
|
||||
GIT_SUBMODULE_STRATEGY: none # no need to fetch submodules
|
||||
CONTAINER_NAME: "$CI_REGISTRY/trezor/trezor-firmware/environment"
|
||||
services:
|
||||
- docker:dind
|
||||
before_script:
|
||||
- docker login $CI_REGISTRY -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD
|
||||
when: manual
|
||||
script:
|
||||
- docker pull $CONTAINER_NAME:latest || true
|
||||
- docker build --cache-from $CONTAINER_NAME:latest --tag $CONTAINER_NAME:$CI_COMMIT_SHA --tag $CONTAINER_NAME:latest ci/
|
||||
- docker push $CONTAINER_NAME:$CI_COMMIT_SHA
|
||||
- docker push $CONTAINER_NAME:latest
|
@ -0,0 +1,56 @@
|
||||
image: registry.corp.sldev.cz/trezor/trezor-firmware/environment
|
||||
|
||||
build legacy firmware:
|
||||
stage: build
|
||||
script:
|
||||
- cd legacy
|
||||
- pipenv run script/cibuild
|
||||
- pipenv run make -C bootloader
|
||||
- pipenv run make -C demo
|
||||
|
||||
build legacy firmware debug:
|
||||
stage: build
|
||||
variables:
|
||||
DEBUG_LINK: "1"
|
||||
script:
|
||||
- cd legacy
|
||||
- pipenv run script/cibuild
|
||||
- pipenv run make -C bootloader
|
||||
- pipenv run make -C demo
|
||||
|
||||
build legacy firmware bitcoinonly:
|
||||
stage: build
|
||||
variables:
|
||||
BITCOIN_ONLY: "1"
|
||||
script:
|
||||
- cd legacy
|
||||
- pipenv run script/cibuild
|
||||
- pipenv run make -C bootloader
|
||||
- pipenv run make -C demo
|
||||
|
||||
build legacy emu:
|
||||
stage: build
|
||||
variables:
|
||||
HEADLESS: "1"
|
||||
EMULATOR: "1"
|
||||
DEBUG_LINK: "1"
|
||||
script:
|
||||
- cd legacy
|
||||
- pipenv run script/cibuild
|
||||
artifacts:
|
||||
name: "$CI_JOB_NAME-$CI_COMMIT_SHORT_SHA"
|
||||
untracked: true
|
||||
expire_in: 1 day
|
||||
|
||||
# TODO: aren't some tests from .travis.yml missing?
|
||||
test legacy emu:
|
||||
variables:
|
||||
GIT_SUBMODULE_STRATEGY: none # no need to fetch submodules
|
||||
stage: test
|
||||
dependencies:
|
||||
- build legacy emu
|
||||
variables:
|
||||
EMULATOR: "1"
|
||||
script:
|
||||
- cd legacy
|
||||
- pipenv run script/test
|
@ -0,0 +1,18 @@
|
||||
image: registry.corp.sldev.cz/trezor/trezor-firmware/environment
|
||||
|
||||
prebuild style:
|
||||
stage: prebuild
|
||||
script:
|
||||
- pipenv run make style_check
|
||||
- cd core && pipenv run make templates_check # TODO
|
||||
|
||||
prebuild common:
|
||||
stage: prebuild
|
||||
script:
|
||||
- cd common
|
||||
- pipenv run jsonlint defs/*.json
|
||||
- pipenv run jsonlint defs/*/*.json
|
||||
- pipenv run python tools/cointool.py check
|
||||
- pipenv run python tools/support.py check --ignore-missing
|
||||
- pipenv run python protob/check.py
|
||||
- pipenv run python protob/graph.py protob/*.proto # TODO: artifacts?
|
@ -0,0 +1,11 @@
|
||||
image: registry.corp.sldev.cz/trezor/trezor-firmware/environment
|
||||
|
||||
test storage:
|
||||
variables:
|
||||
GIT_SUBMODULE_STRATEGY: none # no need to fetch submodules
|
||||
stage: test
|
||||
dependencies: []
|
||||
script:
|
||||
- cd storage/tests
|
||||
- pipenv run make build
|
||||
- pipenv run make tests_all
|
@ -1,37 +0,0 @@
|
||||
language: python
|
||||
|
||||
# Runs jobs on container based infrastructure
|
||||
sudo: false
|
||||
|
||||
# Saves pip downloads/wheels between builds
|
||||
cache:
|
||||
directories:
|
||||
- $HOME/.cache/pip
|
||||
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
- graphviz
|
||||
|
||||
python:
|
||||
- "3.6"
|
||||
|
||||
install:
|
||||
- pip install demjson graphviz
|
||||
- pip install -r tools/requirements.txt
|
||||
|
||||
script:
|
||||
- jsonlint defs/*.json
|
||||
- jsonlint defs/*/*.json
|
||||
- python tools/cointool.py check
|
||||
- python tools/support.py check --ignore-missing
|
||||
- python protob/check.py
|
||||
- python protob/graph.py protob/*.proto
|
||||
|
||||
notifications:
|
||||
webhooks:
|
||||
urls:
|
||||
- http://ci-bot.satoshilabs.com:5000/travis
|
||||
on_success: always
|
||||
on_failure: always
|
||||
on_start: always
|
@ -0,0 +1,42 @@
|
||||
{
|
||||
"coin_name": "BlockStamp",
|
||||
"coin_shortcut": "BST",
|
||||
"coin_label": "BlockStamp",
|
||||
"website": "https://blockstamp.info",
|
||||
"github": "https://github.com/BlockStamp/bst",
|
||||
"maintainer": "Krzysztof Kuchta <k.kuchta@blockstamp.info>",
|
||||
"curve_name": "secp256k1",
|
||||
"address_type": 26,
|
||||
"address_type_p2sh": 5,
|
||||
"maxfee_kb": 2000000,
|
||||
"minfee_kb": 1000,
|
||||
"signed_message_header": "BST Signed Message:\n",
|
||||
"hash_genesis_block": "8000000049a2e26b0185be50b4b8ed58b707c8893762959f0b1673641cae1828",
|
||||
"xprv_magic": 76066276,
|
||||
"xpub_magic": 76067358,
|
||||
"xpub_magic_segwit_p2sh": 77429938,
|
||||
"xpub_magic_segwit_native": 78792518,
|
||||
"bech32_prefix": "bst",
|
||||
"cashaddr_prefix": null,
|
||||
"slip44": 254,
|
||||
"segwit": true,
|
||||
"decred": false,
|
||||
"fork_id": null,
|
||||
"force_bip143": false,
|
||||
"bip115": false,
|
||||
"default_fee_b": {
|
||||
"Low": 10,
|
||||
"Economy": 70,
|
||||
"Normal": 140,
|
||||
"High": 200
|
||||
},
|
||||
"dust_limit": 546,
|
||||
"blocktime_seconds": 60,
|
||||
"uri_prefix": "blockstamp",
|
||||
"min_address_length": 27,
|
||||
"max_address_length": 34,
|
||||
"bitcore": [],
|
||||
"blockbook": [],
|
||||
"cooldown": 1000,
|
||||
"consensus_branch_id": null
|
||||
}
|
After Width: | Height: | Size: 8.8 KiB |
Before Width: | Height: | Size: 5.9 KiB After Width: | Height: | Size: 11 KiB |
@ -1,2 +1,3 @@
|
||||
// clang-format off
|
||||
// sample public key "correct horse battery staple"
|
||||
"\x04\x78\xd4\x30\x27\x4f\x8c\x5e\xc1\x32\x13\x38\x15\x1e\x9f\x27\xf4\xc6\x76\xa0\x08\xbd\xf8\x63\x8d\x07\xc0\xb6\xbe\x9a\xb3\x5c\x71\xa1\x51\x80\x63\x24\x3a\xcd\x4d\xfe\x96\xb6\x6e\x3f\x2e\xc8\x01\x3c\x8e\x07\x2c\xd0\x9b\x38\x34\xa1\x9f\x81\xf6\x59\xcc\x34\x55"
|
||||
|
@ -1,16 +0,0 @@
|
||||
click>=6
|
||||
|
||||
# for `coin_gen coindefs` and checking icons:
|
||||
ed25519>=1.4
|
||||
Pillow>=5.2.0
|
||||
trezor>=0.10
|
||||
|
||||
# for checking backends, generating coins_details.json
|
||||
requests>=2.19
|
||||
|
||||
# for rendering templates:
|
||||
Mako>=1.0.7
|
||||
munch>=2.3.2
|
||||
|
||||
# for pretty colors in checks
|
||||
termcolor >= 0.1.2
|
@ -1,78 +0,0 @@
|
||||
sudo: false
|
||||
dist: trusty
|
||||
language: c
|
||||
|
||||
addons:
|
||||
apt:
|
||||
sources:
|
||||
- deadsnakes
|
||||
packages:
|
||||
- build-essential
|
||||
- python3.6
|
||||
- python3.6-dev
|
||||
- python3.6-venv
|
||||
- libusb-1.0-0-dev
|
||||
- libudev-dev
|
||||
|
||||
env:
|
||||
global:
|
||||
- MAKEFLAGS=-j2
|
||||
- PYTHON=python3.6
|
||||
- PROTOBUF_VERSION=3.4.0
|
||||
- TOOLCHAIN_SHORTVER=8-2018q4
|
||||
- TOOLCHAIN_LONGVER=gcc-arm-none-eabi-8-2018-q4-major
|
||||
matrix:
|
||||
- GOAL=stm32
|
||||
- GOAL=unix
|
||||
- GOAL=src
|
||||
|
||||
matrix:
|
||||
include:
|
||||
- compiler: clang
|
||||
env: GOAL=unix
|
||||
|
||||
cache:
|
||||
directories:
|
||||
- $HOME/libsodium
|
||||
|
||||
before_install:
|
||||
- $PYTHON -m ensurepip --user
|
||||
- $PYTHON -m pip install --user pipenv
|
||||
|
||||
install:
|
||||
- ./travis-install-libsodium.sh
|
||||
- export PKG_CONFIG_PATH=$HOME/libsodium/lib/pkgconfig:$PKG_CONFIG_PATH
|
||||
- export LD_LIBRARY_PATH=$HOME/libsodium/lib:$LD_LIBRARY_PATH
|
||||
- wget "https://github.com/google/protobuf/releases/download/v${PROTOBUF_VERSION}/protoc-${PROTOBUF_VERSION}-linux-x86_64.zip"
|
||||
- unzip "protoc-${PROTOBUF_VERSION}-linux-x86_64.zip" -d protoc
|
||||
- export PATH="$(pwd)/protoc/bin:$PATH"
|
||||
- pipenv install
|
||||
|
||||
before_script:
|
||||
- test "$GOAL" != "stm32" || wget https://developer.arm.com/-/media/Files/downloads/gnu-rm/$TOOLCHAIN_SHORTVER/$TOOLCHAIN_LONGVER-linux.tar.bz2
|
||||
- test "$GOAL" != "stm32" || tar xfj $TOOLCHAIN_LONGVER-linux.tar.bz2
|
||||
- test "$GOAL" != "stm32" || export PATH=$PWD/$TOOLCHAIN_LONGVER/bin:$PATH
|
||||
|
||||
script:
|
||||
- test "$GOAL" != "src" || pipenv run make style_check
|
||||
- test "$GOAL" != "src" || pipenv run make templates_check
|
||||
|
||||
- test "$GOAL" != "stm32" || pipenv run make build_cross
|
||||
- test "$GOAL" != "stm32" || pipenv run make build_boardloader
|
||||
- test "$GOAL" != "stm32" || pipenv run make build_bootloader
|
||||
- test "$GOAL" != "stm32" || pipenv run make build_prodtest
|
||||
- test "$GOAL" != "stm32" || pipenv run make build_firmware
|
||||
- test "$GOAL" != "stm32" || test "$TREZOR_MODEL" = "1" || pipenv run make sizecheck
|
||||
|
||||
- test "$GOAL" != "unix" || pipenv run make build_unix_noui
|
||||
- test "$GOAL" != "unix" || pipenv run make test
|
||||
- test "$GOAL" != "unix" || test "$TREZOR_MODEL" = "1" || pipenv run make test_emu
|
||||
- test "$GOAL" != "unix" || test "$TREZOR_MODEL" = "1" || pipenv run make test_emu_monero
|
||||
|
||||
notifications:
|
||||
webhooks:
|
||||
urls:
|
||||
- http://ci-bot.satoshilabs.com:5000/travis
|
||||
on_success: always
|
||||
on_failure: always
|
||||
on_start: always
|
@ -1,69 +0,0 @@
|
||||
# initialize from the image
|
||||
|
||||
FROM debian:9
|
||||
|
||||
ARG TOOLCHAIN_FLAVOR=linux
|
||||
ENV TOOLCHAIN_FLAVOR=$TOOLCHAIN_FLAVOR
|
||||
|
||||
# install build tools and dependencies
|
||||
|
||||
RUN apt-get update && apt-get install -y \
|
||||
build-essential wget git python3-pip
|
||||
|
||||
# install dependencies from toolchain source build
|
||||
|
||||
RUN if [ "$TOOLCHAIN_FLAVOR" = "src" ]; then \
|
||||
apt-get install -y autoconf autogen bison dejagnu \
|
||||
flex flip gawk git gperf gzip nsis \
|
||||
openssh-client p7zip-full perl python-dev \
|
||||
libisl-dev tcl tofrodos zip \
|
||||
texinfo texlive texlive-extra-utils; \
|
||||
fi
|
||||
|
||||
# download toolchain
|
||||
|
||||
ENV TOOLCHAIN_SHORTVER=8-2018q4
|
||||
ENV TOOLCHAIN_LONGVER=gcc-arm-none-eabi-8-2018-q4-major
|
||||
ENV TOOLCHAIN_URL=https://developer.arm.com/-/media/Files/downloads/gnu-rm/$TOOLCHAIN_SHORTVER/$TOOLCHAIN_LONGVER-$TOOLCHAIN_FLAVOR.tar.bz2
|
||||
ENV TOOLCHAIN_HASH_linux=fb31fbdfe08406ece43eef5df623c0b2deb8b53e405e2c878300f7a1f303ee52
|
||||
ENV TOOLCHAIN_HASH_src=bc228325dbbfaf643f2ee5d19e01d8b1873fcb9c31781b5e1355d40a68704ce7
|
||||
|
||||
# extract toolchain
|
||||
|
||||
RUN cd /opt && wget $TOOLCHAIN_URL
|
||||
|
||||
RUN cd /opt && echo "$TOOLCHAIN_HASH_linux $TOOLCHAIN_LONGVER-linux.tar.bz2\n$TOOLCHAIN_HASH_src $TOOLCHAIN_LONGVER-src.tar.bz2" | sha256sum -c --ignore-missing
|
||||
|
||||
RUN cd /opt && tar xfj $TOOLCHAIN_LONGVER-$TOOLCHAIN_FLAVOR.tar.bz2
|
||||
|
||||
# build toolchain (if required)
|
||||
|
||||
RUN if [ "$TOOLCHAIN_FLAVOR" = "src" ]; then \
|
||||
pushd /opt/$TOOLCHAIN_LONGVER ; \
|
||||
./install-sources.sh --skip_steps=mingw32 ; \
|
||||
./build-prerequisites.sh --skip_steps=mingw32 ; \
|
||||
./build-toolchain.sh --skip_steps=mingw32,manual ; \
|
||||
popd ; \
|
||||
fi
|
||||
|
||||
# download protobuf
|
||||
|
||||
ENV PROTOBUF_VERSION=3.4.0
|
||||
ENV PROTOBUF_HASH=e4b51de1b75813e62d6ecdde582efa798586e09b5beaebfb866ae7c9eaadace4
|
||||
RUN wget "https://github.com/google/protobuf/releases/download/v${PROTOBUF_VERSION}/protoc-${PROTOBUF_VERSION}-linux-x86_64.zip"
|
||||
RUN echo "${PROTOBUF_HASH} protoc-${PROTOBUF_VERSION}-linux-x86_64.zip" | sha256sum -c
|
||||
|
||||
# setup toolchain
|
||||
|
||||
ENV PATH=/opt/$TOOLCHAIN_LONGVER/bin:$PATH
|
||||
|
||||
ENV PYTHON=python3
|
||||
ENV LC_ALL=C.UTF-8 LANG=C.UTF-8
|
||||
RUN ln -s /usr/bin/python3 /usr/bin/python
|
||||
|
||||
# use zipfile module to extract files world-readable
|
||||
RUN $PYTHON -m zipfile -e "protoc-${PROTOBUF_VERSION}-linux-x86_64.zip" /usr/local && chmod 755 /usr/local/bin/protoc
|
||||
|
||||
# install python dependencies
|
||||
|
||||
RUN $PYTHON -m pip install scons trezor
|
@ -0,0 +1,27 @@
|
||||
# Automatically generated by pb2py
|
||||
# fmt: off
|
||||
import protobuf as p
|
||||
|
||||
|
||||
class TezosBallotOp(p.MessageType):
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
source: bytes = None,
|
||||
period: int = None,
|
||||
proposal: bytes = None,
|
||||
ballot: int = None,
|
||||
) -> None:
|
||||
self.source = source
|
||||
self.period = period
|
||||
self.proposal = proposal
|
||||
self.ballot = ballot
|
||||
|
||||
@classmethod
|
||||
def get_fields(cls):
|
||||
return {
|
||||
1: ('source', p.BytesType, 0),
|
||||
2: ('period', p.UVarintType, 0),
|
||||
3: ('proposal', p.BytesType, 0),
|
||||
4: ('ballot', p.UVarintType, 0),
|
||||
}
|
@ -0,0 +1,5 @@
|
||||
# Automatically generated by pb2py
|
||||
# fmt: off
|
||||
Yay = 0
|
||||
Nay = 1
|
||||
Pass = 2
|
@ -0,0 +1,30 @@
|
||||
# Automatically generated by pb2py
|
||||
# fmt: off
|
||||
import protobuf as p
|
||||
|
||||
if __debug__:
|
||||
try:
|
||||
from typing import List
|
||||
except ImportError:
|
||||
List = None # type: ignore
|
||||
|
||||
|
||||
class TezosProposalOp(p.MessageType):
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
source: bytes = None,
|
||||
period: int = None,
|
||||
proposals: List[bytes] = None,
|
||||
) -> None:
|
||||
self.source = source
|
||||
self.period = period
|
||||
self.proposals = proposals if proposals is not None else []
|
||||
|
||||
@classmethod
|
||||
def get_fields(cls):
|
||||
return {
|
||||
1: ('source', p.BytesType, 0),
|
||||
2: ('period', p.UVarintType, 0),
|
||||
4: ('proposals', p.BytesType, p.FLAG_REPEATED),
|
||||
}
|
@ -1,21 +0,0 @@
|
||||
#!/bin/sh
|
||||
# libsodium-dev replacement
|
||||
#
|
||||
# The purpose of this file is to install libsodium in
|
||||
# the Travis CI environment. Outside this environment,
|
||||
# you would probably not want to install it like this.
|
||||
|
||||
set -e
|
||||
export LIBSODIUM_VER="1.0.16"
|
||||
|
||||
# check if libsodium is already installed
|
||||
if [ ! -d "$HOME/libsodium/lib" ]; then
|
||||
wget "https://github.com/jedisct1/libsodium/releases/download/${LIBSODIUM_VER}/libsodium-${LIBSODIUM_VER}.tar.gz"
|
||||
tar xvfz "libsodium-${LIBSODIUM_VER}.tar.gz"
|
||||
cd "libsodium-${LIBSODIUM_VER}"
|
||||
./configure --prefix=$HOME/libsodium
|
||||
make
|
||||
make install
|
||||
else
|
||||
echo 'Using cached directory.'
|
||||
fi
|
File diff suppressed because it is too large
Load Diff
@ -1,257 +0,0 @@
|
||||
#!/usr/bin/perl -w
|
||||
#
|
||||
# stackcolllapse-perf.pl collapse perf samples into single lines.
|
||||
#
|
||||
# Parses a list of multiline stacks generated by "perf script", and
|
||||
# outputs a semicolon separated stack followed by a space and a count.
|
||||
# If memory addresses (+0xd) are present, they are stripped, and resulting
|
||||
# identical stacks are colased with their counts summed.
|
||||
#
|
||||
# USAGE: ./stackcollapse-perf.pl [options] infile > outfile
|
||||
#
|
||||
# Run "./stackcollapse-perf.pl -h" to list options.
|
||||
#
|
||||
# Example input:
|
||||
#
|
||||
# swapper 0 [000] 158665.570607: cpu-clock:
|
||||
# ffffffff8103ce3b native_safe_halt ([kernel.kallsyms])
|
||||
# ffffffff8101c6a3 default_idle ([kernel.kallsyms])
|
||||
# ffffffff81013236 cpu_idle ([kernel.kallsyms])
|
||||
# ffffffff815bf03e rest_init ([kernel.kallsyms])
|
||||
# ffffffff81aebbfe start_kernel ([kernel.kallsyms].init.text)
|
||||
# [...]
|
||||
#
|
||||
# Example output:
|
||||
#
|
||||
# swapper;start_kernel;rest_init;cpu_idle;default_idle;native_safe_halt 1
|
||||
#
|
||||
# Input may be created and processed using:
|
||||
#
|
||||
# perf record -a -g -F 997 sleep 60
|
||||
# perf script | ./stackcollapse-perf.pl > out.stacks-folded
|
||||
#
|
||||
# The output of "perf script" should include stack traces. If these are missing
|
||||
# for you, try manually selecting the perf script output; eg:
|
||||
#
|
||||
# perf script -f comm,pid,tid,cpu,time,event,ip,sym,dso,trace | ...
|
||||
#
|
||||
# This is also required for the --pid or --tid options, so that the output has
|
||||
# both the PID and TID.
|
||||
#
|
||||
# Copyright 2012 Joyent, Inc. All rights reserved.
|
||||
# Copyright 2012 Brendan Gregg. All rights reserved.
|
||||
#
|
||||
# CDDL HEADER START
|
||||
#
|
||||
# The contents of this file are subject to the terms of the
|
||||
# Common Development and Distribution License (the "License").
|
||||
# You may not use this file except in compliance with the License.
|
||||
#
|
||||
# You can obtain a copy of the license at docs/cddl1.txt or
|
||||
# http://opensource.org/licenses/CDDL-1.0.
|
||||
# See the License for the specific language governing permissions
|
||||
# and limitations under the License.
|
||||
#
|
||||
# When distributing Covered Code, include this CDDL HEADER in each
|
||||
# file and include the License file at docs/cddl1.txt.
|
||||
# If applicable, add the following below this CDDL HEADER, with the
|
||||
# fields enclosed by brackets "[]" replaced with your own identifying
|
||||
# information: Portions Copyright [yyyy] [name of copyright owner]
|
||||
#
|
||||
# CDDL HEADER END
|
||||
#
|
||||
# 02-Mar-2012 Brendan Gregg Created this.
|
||||
# 02-Jul-2014 " " Added process name to stacks.
|
||||
|
||||
use strict;
|
||||
use Getopt::Long;
|
||||
|
||||
my %collapsed;
|
||||
|
||||
sub remember_stack {
|
||||
my ($stack, $count) = @_;
|
||||
$collapsed{$stack} += $count;
|
||||
}
|
||||
my $annotate_kernel = 0; # put an annotation on kernel function
|
||||
my $include_pname = 1; # include process names in stacks
|
||||
my $include_pid = 0; # include process ID with process name
|
||||
my $include_tid = 0; # include process & thread ID with process name
|
||||
my $tidy_java = 1; # condense Java signatures
|
||||
my $tidy_generic = 1; # clean up function names a little
|
||||
my $target_pname; # target process name from perf invocation
|
||||
|
||||
my $show_inline = 0;
|
||||
my $show_context = 0;
|
||||
GetOptions('inline' => \$show_inline,
|
||||
'context' => \$show_context,
|
||||
'pid' => \$include_pid,
|
||||
'kernel' => \$annotate_kernel,
|
||||
'tid' => \$include_tid)
|
||||
or die <<USAGE_END;
|
||||
USAGE: $0 [options] infile > outfile\n
|
||||
--pid # include PID with process names [1]
|
||||
--tid # include TID and PID with process names [1]
|
||||
--inline # un-inline using addr2line
|
||||
--kernel # annotate kernel functions with a _[k]
|
||||
--context # include source context from addr2line\n
|
||||
[1] perf script must emit both PID and TIDs for these to work; eg:
|
||||
perf script -f comm,pid,tid,cpu,time,event,ip,sym,dso,trace
|
||||
USAGE_END
|
||||
|
||||
# for the --inline option
|
||||
sub inline {
|
||||
my ($pc, $mod) = @_;
|
||||
|
||||
# capture addr2line output
|
||||
my $a2l_output = `addr2line -a $pc -e $mod -i -f -s -C`;
|
||||
|
||||
# remove first line
|
||||
$a2l_output =~ s/^(.*\n){1}//;
|
||||
|
||||
my @fullfunc;
|
||||
my $one_item = "";
|
||||
for (split /^/, $a2l_output) {
|
||||
chomp $_;
|
||||
|
||||
# remove discriminator info if exists
|
||||
$_ =~ s/ \(discriminator \S+\)//;
|
||||
|
||||
if ($one_item eq "") {
|
||||
$one_item = $_;
|
||||
} else {
|
||||
if ($show_context == 1) {
|
||||
unshift @fullfunc, $one_item . ":$_";
|
||||
} else {
|
||||
unshift @fullfunc, $one_item;
|
||||
}
|
||||
$one_item = "";
|
||||
}
|
||||
}
|
||||
|
||||
return join(";", @fullfunc);
|
||||
}
|
||||
|
||||
my @stack;
|
||||
my $pname;
|
||||
|
||||
#
|
||||
# Main loop
|
||||
#
|
||||
while (defined($_ = <>)) {
|
||||
|
||||
# find the name of the process launched by perf, by stepping backwards
|
||||
# over the args to find the first non-option (no dash):
|
||||
if (/^# cmdline/) {
|
||||
my @args = split ' ', $_;
|
||||
foreach my $arg (reverse @args) {
|
||||
if ($arg !~ /^-/) {
|
||||
$target_pname = $arg;
|
||||
$target_pname =~ s:.*/::; # strip pathname
|
||||
last;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# skip remaining comments
|
||||
next if m/^#/;
|
||||
chomp;
|
||||
|
||||
# end of stack. save cached data.
|
||||
if (m/^$/) {
|
||||
if ($include_pname) {
|
||||
if (defined $pname) {
|
||||
unshift @stack, $pname;
|
||||
} else {
|
||||
unshift @stack, "";
|
||||
}
|
||||
}
|
||||
remember_stack(join(";", @stack), 1) if @stack;
|
||||
undef @stack;
|
||||
undef $pname;
|
||||
next;
|
||||
}
|
||||
|
||||
# event record start
|
||||
if (/^(\S+\s*?\S*?)\s+(\d+)\s/) {
|
||||
# default "perf script" output has TID but not PID
|
||||
# eg, "java 25607 4794564.109216: cycles:"
|
||||
# eg, "java 12688 [002] 6544038.708352: cpu-clock:"
|
||||
# eg, "V8 WorkerThread 25607 4794564.109216: cycles:"
|
||||
# other combinations possible
|
||||
if ($include_tid) {
|
||||
$pname = "$1-?/$2";
|
||||
} elsif ($include_pid) {
|
||||
$pname = "$1-?";
|
||||
} else {
|
||||
$pname = $1;
|
||||
}
|
||||
$pname =~ tr/ /_/;
|
||||
} elsif (/^(\S+\s*?\S*?)\s+(\d+)\/(\d+)/) {
|
||||
# eg, "java 24636/25607 [000] 4794564.109216: cycles:"
|
||||
# eg, "java 12688/12764 6544038.708352: cpu-clock:"
|
||||
# eg, "V8 WorkerThread 24636/25607 [000] 94564.109216: cycles:"
|
||||
# other combinations possible
|
||||
if ($include_tid) {
|
||||
$pname = "$1-$2/$3";
|
||||
} elsif ($include_pid) {
|
||||
$pname = "$1-$2";
|
||||
} else {
|
||||
$pname = $1;
|
||||
}
|
||||
$pname =~ tr/ /_/;
|
||||
|
||||
# stack line
|
||||
} elsif (/^\s*(\w+)\s*(.+) \((\S*)\)/) {
|
||||
my ($pc, $rawfunc, $mod) = ($1, $2, $3);
|
||||
$rawfunc.="_[k]" if ($annotate_kernel == 1 && $mod =~ m/kernel\./);
|
||||
if ($show_inline == 1 && $mod !~ m/(perf-\d+.map|kernel\.|\[[^\]]+\])/) {
|
||||
unshift @stack, inline($pc, $mod);
|
||||
next;
|
||||
}
|
||||
|
||||
next if $rawfunc =~ /^\(/; # skip process names
|
||||
|
||||
my @inline;
|
||||
for (split /\->/, $rawfunc) {
|
||||
my $func = $_;
|
||||
|
||||
if ($tidy_generic) {
|
||||
$func =~ s/;/:/g;
|
||||
$func =~ tr/<>//d;
|
||||
if ($func !~ m/\.\(.*\)\./) {
|
||||
# This doesn't look like a Go method name (such as
|
||||
# "net/http.(*Client).Do"), so everything after the first open
|
||||
# paren is just noise.
|
||||
$func =~ s/\(.*//;
|
||||
}
|
||||
# now tidy this horrible thing:
|
||||
# 13a80b608e0a RegExp:[&<>\"\'] (/tmp/perf-7539.map)
|
||||
$func =~ tr/"\'//d;
|
||||
# fall through to $tidy_java
|
||||
}
|
||||
|
||||
if ($tidy_java and $pname eq "java") {
|
||||
# along with $tidy_generic, converts the following:
|
||||
# Lorg/mozilla/javascript/ContextFactory;.call(Lorg/mozilla/javascript/ContextAction;)Ljava/lang/Object;
|
||||
# Lorg/mozilla/javascript/ContextFactory;.call(Lorg/mozilla/javascript/C
|
||||
# Lorg/mozilla/javascript/MemberBox;.<init>(Ljava/lang/reflect/Method;)V
|
||||
# into:
|
||||
# org/mozilla/javascript/ContextFactory:.call
|
||||
# org/mozilla/javascript/ContextFactory:.call
|
||||
# org/mozilla/javascript/MemberBox:.init
|
||||
$func =~ s/^L// if $func =~ m:/:;
|
||||
}
|
||||
|
||||
$func .= "_[i]" if scalar(@inline) > 0; #inlined
|
||||
push @inline, $func;
|
||||
}
|
||||
|
||||
unshift @stack, @inline;
|
||||
} else {
|
||||
warn "Unrecognized line: $_";
|
||||
}
|
||||
}
|
||||
|
||||
foreach my $k (sort { $a cmp $b } keys %collapsed) {
|
||||
print "$k $collapsed{$k}\n";
|
||||
}
|
@ -1,2 +0,0 @@
|
||||
---
|
||||
BasedOnStyle: Google
|
@ -1,38 +0,0 @@
|
||||
sudo: false
|
||||
dist: trusty
|
||||
language: c
|
||||
|
||||
compiler:
|
||||
- clang
|
||||
- gcc
|
||||
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
- check
|
||||
- libssl-dev
|
||||
- python3-pip
|
||||
- valgrind
|
||||
|
||||
env:
|
||||
global:
|
||||
- PYTHON=python3
|
||||
|
||||
install:
|
||||
- $PYTHON -m pip install --user pytest ecdsa curve25519-donna pyasn1
|
||||
|
||||
script:
|
||||
- make
|
||||
- ./tests/aestst
|
||||
- ./tests/test_check
|
||||
- CK_TIMEOUT_MULTIPLIER=20 valgrind -q --error-exitcode=1 ./tests/test_check
|
||||
- ./tests/test_openssl 1000
|
||||
- ITERS=10 $PYTHON -m pytest tests/
|
||||
|
||||
notifications:
|
||||
webhooks:
|
||||
urls:
|
||||
- http://ci-bot.satoshilabs.com:5000/travis
|
||||
on_success: always
|
||||
on_failure: always
|
||||
on_start: always
|
@ -0,0 +1,104 @@
|
||||
/**
|
||||
* Copyright (c) 2019 Anatolii Kurotych
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining
|
||||
* a copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included
|
||||
* in all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES
|
||||
* OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
* OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include "schnorr.h"
|
||||
#include "memzero.h"
|
||||
|
||||
// r = H(Q, kpub, m)
|
||||
static void calc_r(const curve_point *Q, const uint8_t pub_key[33],
|
||||
const uint8_t *msg, const uint32_t msg_len, bignum256 *r) {
|
||||
uint8_t Q_compress[33];
|
||||
compress_coords(Q, Q_compress);
|
||||
|
||||
SHA256_CTX ctx;
|
||||
uint8_t digest[SHA256_DIGEST_LENGTH];
|
||||
sha256_Init(&ctx);
|
||||
sha256_Update(&ctx, Q_compress, 33);
|
||||
sha256_Update(&ctx, pub_key, 33);
|
||||
sha256_Update(&ctx, msg, msg_len);
|
||||
sha256_Final(&ctx, digest);
|
||||
bn_read_be(digest, r);
|
||||
}
|
||||
|
||||
// returns 0 if signing succeeded
|
||||
int schnorr_sign(const ecdsa_curve *curve, const uint8_t *priv_key,
|
||||
const bignum256 *k, const uint8_t *msg, const uint32_t msg_len,
|
||||
schnorr_sign_pair *result) {
|
||||
bignum256 private_key_scalar;
|
||||
bn_read_be(priv_key, &private_key_scalar);
|
||||
uint8_t pub_key[33];
|
||||
ecdsa_get_public_key33(curve, priv_key, pub_key);
|
||||
|
||||
/* Q = kG */
|
||||
curve_point Q;
|
||||
scalar_multiply(curve, k, &Q);
|
||||
|
||||
/* r = H(Q, kpub, m) */
|
||||
calc_r(&Q, pub_key, msg, msg_len, &result->r);
|
||||
|
||||
/* s = k - r*kpriv mod(order) */
|
||||
bignum256 s_temp;
|
||||
bn_copy(&result->r, &s_temp);
|
||||
bn_multiply(&private_key_scalar, &s_temp, &curve->order);
|
||||
bn_subtractmod(k, &s_temp, &result->s, &curve->order);
|
||||
memzero(&private_key_scalar, sizeof(private_key_scalar));
|
||||
|
||||
while (bn_is_less(&curve->order, &result->s)) {
|
||||
bn_mod(&result->s, &curve->order);
|
||||
}
|
||||
|
||||
if (bn_is_zero(&result->s) || bn_is_zero(&result->r)) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
// returns 0 if verification succeeded
|
||||
int schnorr_verify(const ecdsa_curve *curve, const uint8_t *pub_key,
|
||||
const uint8_t *msg, const uint32_t msg_len,
|
||||
const schnorr_sign_pair *sign) {
|
||||
if (msg_len == 0) return 1;
|
||||
if (bn_is_zero(&sign->r)) return 2;
|
||||
if (bn_is_zero(&sign->s)) return 3;
|
||||
if (bn_is_less(&curve->order, &sign->r)) return 4;
|
||||
if (bn_is_less(&curve->order, &sign->s)) return 5;
|
||||
|
||||
curve_point pub_key_point;
|
||||
if (!ecdsa_read_pubkey(curve, pub_key, &pub_key_point)) {
|
||||
return 6;
|
||||
}
|
||||
|
||||
// Compute Q = sG + r*kpub
|
||||
curve_point sG, Q;
|
||||
scalar_multiply(curve, &sign->s, &sG);
|
||||
point_multiply(curve, &sign->r, &pub_key_point, &Q);
|
||||
point_add(curve, &sG, &Q);
|
||||
|
||||
/* r = H(Q, kpub, m) */
|
||||
bignum256 r;
|
||||
calc_r(&Q, pub_key, msg, msg_len, &r);
|
||||
|
||||
if (bn_is_equal(&r, &sign->r)) return 0; // success
|
||||
|
||||
return 10;
|
||||
}
|
@ -0,0 +1,42 @@
|
||||
/**
|
||||
* Copyright (c) 2019 Anatolii Kurotych
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining
|
||||
* a copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included
|
||||
* in all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES
|
||||
* OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
* OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef __SCHNORR_H__
|
||||
#define __SCHNORR_H__
|
||||
|
||||
#include "ecdsa.h"
|
||||
|
||||
// result of sign operation
|
||||
typedef struct {
|
||||
bignum256 r, s;
|
||||
} schnorr_sign_pair;
|
||||
|
||||
// sign/verify returns 0 if operation succeeded
|
||||
|
||||
// k is a random from [1, ..., order-1]
|
||||
int schnorr_sign(const ecdsa_curve *curve, const uint8_t *priv_key,
|
||||
const bignum256 *k, const uint8_t *msg, const uint32_t msg_len,
|
||||
schnorr_sign_pair *result);
|
||||
int schnorr_verify(const ecdsa_curve *curve, const uint8_t *pub_key,
|
||||
const uint8_t *msg, const uint32_t msg_len,
|
||||
const schnorr_sign_pair *sign);
|
||||
#endif
|
@ -1,2 +0,0 @@
|
||||
---
|
||||
BasedOnStyle: Google
|
@ -1,63 +0,0 @@
|
||||
sudo: false
|
||||
dist: trusty
|
||||
language: c
|
||||
|
||||
addons:
|
||||
apt:
|
||||
sources:
|
||||
- deadsnakes
|
||||
packages:
|
||||
- build-essential
|
||||
- python3.6
|
||||
- python3.6-dev
|
||||
- python3.6-venv
|
||||
|
||||
env:
|
||||
global:
|
||||
- MAKEFLAGS=-j2
|
||||
- PYTHON=python3.6
|
||||
- PROTOBUF_VERSION=3.4.0
|
||||
- TOOLCHAIN_SHORTVER=8-2018q4
|
||||
- TOOLCHAIN_LONGVER=gcc-arm-none-eabi-8-2018-q4-major
|
||||
matrix:
|
||||
- DEBUG_LINK=0
|
||||
- DEBUG_LINK=1
|
||||
|
||||
matrix:
|
||||
include:
|
||||
- name: "Emulator GCC"
|
||||
env: EMULATOR=1 HEADLESS=1 DEBUG_LINK=1
|
||||
compiler: gcc
|
||||
script: pipenv run ./script/cibuild && pipenv run script/test
|
||||
- name: "Emulator Clang"
|
||||
env: EMULATOR=1 HEADLESS=1 DEBUG_LINK=1
|
||||
compiler: clang
|
||||
script: pipenv run ./script/cibuild && pipenv run script/test
|
||||
|
||||
before_install:
|
||||
- $PYTHON -m ensurepip --user
|
||||
- $PYTHON -m pip install --user pipenv
|
||||
|
||||
install:
|
||||
- wget "https://github.com/google/protobuf/releases/download/v${PROTOBUF_VERSION}/protoc-${PROTOBUF_VERSION}-linux-x86_64.zip"
|
||||
- unzip "protoc-${PROTOBUF_VERSION}-linux-x86_64.zip" -d protoc
|
||||
- export PATH="$(pwd)/protoc/bin:$PATH"
|
||||
- pipenv install
|
||||
|
||||
before_script:
|
||||
- test "$EMULATOR" = "1" || wget https://developer.arm.com/-/media/Files/downloads/gnu-rm/$TOOLCHAIN_SHORTVER/$TOOLCHAIN_LONGVER-linux.tar.bz2
|
||||
- test "$EMULATOR" = "1" || tar xfj $TOOLCHAIN_LONGVER-linux.tar.bz2
|
||||
- test "$EMULATOR" = "1" || export PATH=$PWD/$TOOLCHAIN_LONGVER/bin:$PATH
|
||||
|
||||
script:
|
||||
- pipenv run script/cibuild
|
||||
- pipenv run make -C bootloader
|
||||
- pipenv run make -C demo
|
||||
|
||||
notifications:
|
||||
webhooks:
|
||||
urls:
|
||||
- http://ci-bot.satoshilabs.com:5000/travis
|
||||
on_success: always
|
||||
on_failure: always
|
||||
on_start: always
|
@ -1,14 +0,0 @@
|
||||
[[source]]
|
||||
url = "https://pypi.org/simple"
|
||||
name = "pypi"
|
||||
verify_ssl = true
|
||||
|
||||
[packages]
|
||||
setuptools = ">=24.2.0"
|
||||
trezor = {git = "https://github.com/trezor/python-trezor", editable = true, ref = "master"}
|
||||
pytest = "*"
|
||||
mock = "*"
|
||||
typing = "*"
|
||||
protobuf = "==3.4.0"
|
||||
mako = "*"
|
||||
munch = "*"
|
@ -1,214 +0,0 @@
|
||||
{
|
||||
"_meta": {
|
||||
"hash": {
|
||||
"sha256": "0c77aa21c1e385d7c3833a2f95bc6129394f6d9ce67e1181700a76a5e15074cb"
|
||||
},
|
||||
"pipfile-spec": 6,
|
||||
"requires": {},
|
||||
"sources": [
|
||||
{
|
||||
"name": "pypi",
|
||||
"url": "https://pypi.org/simple",
|
||||
"verify_ssl": true
|
||||
}
|
||||
]
|
||||
},
|
||||
"default": {
|
||||
"atomicwrites": {
|
||||
"hashes": [
|
||||
"sha256:240831ea22da9ab882b551b31d4225591e5e447a68c5e188db5b89ca1d487585",
|
||||
"sha256:a24da68318b08ac9c9c45029f4a10371ab5b20e4226738e150e6e7c571630ae6"
|
||||
],
|
||||
"version": "==1.1.5"
|
||||
},
|
||||
"attrs": {
|
||||
"hashes": [
|
||||
"sha256:4b90b09eeeb9b88c35bc642cbac057e45a5fd85367b985bd2809c62b7b939265",
|
||||
"sha256:e0d0eb91441a3b53dab4d9b743eafc1ac44476296a2053b6ca3af0b139faf87b"
|
||||
],
|
||||
"version": "==18.1.0"
|
||||
},
|
||||
"certifi": {
|
||||
"hashes": [
|
||||
"sha256:13e698f54293db9f89122b0581843a782ad0934a4fe0172d2a980ba77fc61bb7",
|
||||
"sha256:9fa520c1bacfb634fa7af20a76bcbd3d5fb390481724c597da32c719a7dca4b0"
|
||||
],
|
||||
"version": "==2018.4.16"
|
||||
},
|
||||
"chardet": {
|
||||
"hashes": [
|
||||
"sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae",
|
||||
"sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691"
|
||||
],
|
||||
"version": "==3.0.4"
|
||||
},
|
||||
"click": {
|
||||
"hashes": [
|
||||
"sha256:29f99fc6125fbc931b758dc053b3114e55c77a6e4c6c3a2674a2dc986016381d",
|
||||
"sha256:f15516df478d5a56180fbf80e68f206010e6d160fc39fa508b65e035fd75130b"
|
||||
],
|
||||
"version": "==6.7"
|
||||
},
|
||||
"ecdsa": {
|
||||
"hashes": [
|
||||
"sha256:40d002cf360d0e035cf2cb985e1308d41aaa087cbfc135b2dc2d844296ea546c",
|
||||
"sha256:64cf1ee26d1cde3c73c6d7d107f835fed7c6a2904aef9eac223d57ad800c43fa"
|
||||
],
|
||||
"version": "==0.13"
|
||||
},
|
||||
"idna": {
|
||||
"hashes": [
|
||||
"sha256:156a6814fb5ac1fc6850fb002e0852d56c0c8d2531923a51032d1b70760e186e",
|
||||
"sha256:684a38a6f903c1d71d6d5fac066b58d7768af4de2b832e426ec79c30daa94a16"
|
||||
],
|
||||
"version": "==2.7"
|
||||
},
|
||||
"libusb1": {
|
||||
"hashes": [
|
||||
"sha256:4707f81e933a97fed1c5bf7d4957f07bae1139cb8084bdee1f50201a40e3fd7c"
|
||||
],
|
||||
"version": "==1.6.5"
|
||||
},
|
||||
"mako": {
|
||||
"hashes": [
|
||||
"sha256:4e02fde57bd4abb5ec400181e4c314f56ac3e49ba4fb8b0d50bba18cb27d25ae"
|
||||
],
|
||||
"index": "pypi",
|
||||
"version": "==1.0.7"
|
||||
},
|
||||
"markupsafe": {
|
||||
"hashes": [
|
||||
"sha256:a6be69091dac236ea9c6bc7d012beab42010fa914c459791d627dad4910eb665"
|
||||
],
|
||||
"version": "==1.0"
|
||||
},
|
||||
"mnemonic": {
|
||||
"hashes": [
|
||||
"sha256:02a7306a792370f4a0c106c2cf1ce5a0c84b9dbd7e71c6792fdb9ad88a727f1d"
|
||||
],
|
||||
"version": "==0.18"
|
||||
},
|
||||
"mock": {
|
||||
"hashes": [
|
||||
"sha256:5ce3c71c5545b472da17b72268978914d0252980348636840bd34a00b5cc96c1",
|
||||
"sha256:b158b6df76edd239b8208d481dc46b6afd45a846b7812ff0ce58971cf5bc8bba"
|
||||
],
|
||||
"index": "pypi",
|
||||
"version": "==2.0.0"
|
||||
},
|
||||
"more-itertools": {
|
||||
"hashes": [
|
||||
"sha256:2b6b9893337bfd9166bee6a62c2b0c9fe7735dcf85948b387ec8cba30e85d8e8",
|
||||
"sha256:6703844a52d3588f951883005efcf555e49566a48afd4db4e965d69b883980d3",
|
||||
"sha256:a18d870ef2ffca2b8463c0070ad17b5978056f403fb64e3f15fe62a52db21cc0"
|
||||
],
|
||||
"version": "==4.2.0"
|
||||
},
|
||||
"munch": {
|
||||
"hashes": [
|
||||
"sha256:6ae3d26b837feacf732fb8aa5b842130da1daf221f5af9f9d4b2a0a6414b0d51"
|
||||
],
|
||||
"index": "pypi",
|
||||
"version": "==2.3.2"
|
||||
},
|
||||
"pbkdf2": {
|
||||
"hashes": [
|
||||
"sha256:ac6397369f128212c43064a2b4878038dab78dab41875364554aaf2a684e6979"
|
||||
],
|
||||
"version": "==1.3"
|
||||
},
|
||||
"pbr": {
|
||||
"hashes": [
|
||||
"sha256:1b8be50d938c9bb75d0eaf7eda111eec1bf6dc88a62a6412e33bf077457e0f45",
|
||||
"sha256:b486975c0cafb6beeb50ca0e17ba047647f229087bd74e37f4a7e2cac17d2caa"
|
||||
],
|
||||
"version": "==4.2.0"
|
||||
},
|
||||
"pluggy": {
|
||||
"hashes": [
|
||||
"sha256:6e3836e39f4d36ae72840833db137f7b7d35105079aee6ec4a62d9f80d594dd1",
|
||||
"sha256:95eb8364a4708392bae89035f45341871286a333f749c3141c20573d2b3876e1"
|
||||
],
|
||||
"markers": "python_version != '3.2.*' and python_version != '3.1.*' and python_version >= '2.7' and python_version != '3.0.*' and python_version != '3.3.*'",
|
||||
"version": "==0.7.1"
|
||||
},
|
||||
"protobuf": {
|
||||
"hashes": [
|
||||
"sha256:1fcb9b704bc2e30767352d86b2664d8f65f8ed49654d7a80e7a150739724e80a",
|
||||
"sha256:41c4555d9754b985352ce5289fa3ba6b21ed715f595111e46e2b90ca53112475",
|
||||
"sha256:4d4815467f8a61b06d648699842b233017b201f7a16275d680ec5480f10e30e9",
|
||||
"sha256:5b816951df388f4ab2adbd3f9ae5619b9a5d7033d14b005c345dc3ee88a7faf4",
|
||||
"sha256:61dbf86993a9312c3a0816b5252079a3943856003bf0380fea3098c929084ad4",
|
||||
"sha256:9f3be25ad48b051186ee88f9567a3f3f548facd360e0cb62568e2736d9cfda11",
|
||||
"sha256:ef02609ef445987976a3a26bff77119c518e0915c96661c3a3b17856d0ef6374"
|
||||
],
|
||||
"index": "pypi",
|
||||
"version": "==3.4.0"
|
||||
},
|
||||
"py": {
|
||||
"hashes": [
|
||||
"sha256:3fd59af7435864e1a243790d322d763925431213b6b8529c6ca71081ace3bbf7",
|
||||
"sha256:e31fb2767eb657cbde86c454f02e99cb846d3cd9d61b318525140214fdc0e98e"
|
||||
],
|
||||
"version": "==1.5.4"
|
||||
},
|
||||
"pyblake2": {
|
||||
"hashes": [
|
||||
"sha256:3757f7ad709b0e1b2a6b3919fa79fe3261f166fc375cd521f2be480f8319dde9",
|
||||
"sha256:407e02c7f8f36fcec1b7aa114ddca0c1060c598142ea6f6759d03710b946a7e3",
|
||||
"sha256:4d47b4a2c1d292b1e460bde1dda4d13aa792ed2ed70fcc263b6bc24632c8e902",
|
||||
"sha256:5ccc7eb02edb82fafb8adbb90746af71460fbc29aa0f822526fc976dff83e93f",
|
||||
"sha256:8043267fbc0b2f3748c6920591cd0b8b5609dcce60c504c32858aa36206386f2",
|
||||
"sha256:982295a87907d50f4723db6bc724660da76b6547826d52160171d54f95b919ac",
|
||||
"sha256:baa2190bfe549e36163aa44664d4ee3a9080b236fc5d42f50dc6fd36bbdc749e",
|
||||
"sha256:c53417ee0bbe77db852d5fd1036749f03696ebc2265de359fe17418d800196c4",
|
||||
"sha256:fbc9fcde75713930bc2a91b149e97be2401f7c9c56d735b46a109210f58d7358"
|
||||
],
|
||||
"version": "==1.1.2"
|
||||
},
|
||||
"pytest": {
|
||||
"hashes": [
|
||||
"sha256:341ec10361b64a24accaec3c7ba5f7d5ee1ca4cebea30f76fad3dd12db9f0541",
|
||||
"sha256:952c0389db115437f966c4c2079ae9d54714b9455190e56acebe14e8c38a7efa"
|
||||
],
|
||||
"index": "pypi",
|
||||
"version": "==3.6.4"
|
||||
},
|
||||
"requests": {
|
||||
"hashes": [
|
||||
"sha256:63b52e3c866428a224f97cab011de738c36aec0185aa91cfacd418b5d58911d1",
|
||||
"sha256:ec22d826a36ed72a7358ff3fe56cbd4ba69dd7a6718ffd450ff0e9df7a47ce6a"
|
||||
],
|
||||
"version": "==2.19.1"
|
||||
},
|
||||
"six": {
|
||||
"hashes": [
|
||||
"sha256:70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9",
|
||||
"sha256:832dc0e10feb1aa2c68dcc57dbb658f1c7e65b9b61af69048abc87a2db00a0eb"
|
||||
],
|
||||
"version": "==1.11.0"
|
||||
},
|
||||
"trezor": {
|
||||
"editable": true,
|
||||
"git": "https://github.com/trezor/python-trezor",
|
||||
"ref": "master"
|
||||
},
|
||||
"typing": {
|
||||
"hashes": [
|
||||
"sha256:3a887b021a77b292e151afb75323dea88a7bc1b3dfa92176cff8e44c8b68bddf",
|
||||
"sha256:b2c689d54e1144bbcfd191b0832980a21c2dbcf7b5ff7a66248a60c90e951eb8",
|
||||
"sha256:d400a9344254803a2368533e4533a4200d21eb7b6b729c173bc38201a74db3f2"
|
||||
],
|
||||
"index": "pypi",
|
||||
"version": "==3.6.4"
|
||||
},
|
||||
"urllib3": {
|
||||
"hashes": [
|
||||
"sha256:a68ac5e15e76e7e5dd2b8f94007233e01effe3e50e8daddf69acfd81cb686baf",
|
||||
"sha256:b5725a0bd4ba422ab0e66e89e030c806576753ea3ee08554382c14e685d117b5"
|
||||
],
|
||||
"version": "==1.23"
|
||||
}
|
||||
},
|
||||
"develop": {}
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue