1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2024-11-26 01:18:28 +00:00

remove homebrew docu generator, use docstring syntax

This commit is contained in:
Pavol Rusnak 2016-06-06 10:18:55 +02:00
parent c0dfe2d702
commit 9f40362482
No known key found for this signature in database
GPG Key ID: 91F3B339B9A02A3D
21 changed files with 205 additions and 761 deletions

View File

@ -1,438 +1,3 @@
#TREZOR Core API
Syntax used below is a valid Python function declaration with type hints defined in [PEP 0484](https://www.python.org/dev/peps/pep-0484/).
##trezor.crypto
###trezor.crypto.base58
``` python
def trezor.crypto.base58.encode(data: bytes) -> str
```
Convert bytes to base58 encoded string.
``` python
def trezor.crypto.base58.decode(string: str) -> bytes
```
Convert base58 encoded string to bytes.
``` python
def trezor.crypto.base58.encode_check(data: bytes) -> str
```
Convert bytes to base58 encoded string, append checksum.
``` python
def trezor.crypto.base58.decode_check(string: str) -> bytes
```
Convert base58 encoded string to bytes and verify checksum.
###trezor.crypto.bip39
``` python
def trezor.crypto.bip39.generate(strength: int) -> str
```
Generate a mnemonic of given strength (128, 160, 192, 224 and 256 bits)
``` python
def trezor.crypto.bip39.from_data(data: bytes) -> str
```
Generate a mnemonic from given data (of 16, 20, 24, 28 and 32 bytes)
``` python
def trezor.crypto.bip39.check(mnemonic: str) -> bool
```
Check whether given mnemonic is valid
``` python
def trezor.crypto.bip39.seed(mnemonic: str, passphrase: str) -> bytes
```
Generate seed from mnemonic and passphrase
###trezor.crypto.curve
####trezor.crypto.curve.ed25519
``` python
def trezor.crypto.curve.ed25519.publickey(secret_key: bytes) -> bytes
```
Computes public key from secret key.
``` python
def trezor.crypto.curve.ed25519.sign(secret_key: bytes, message: bytes) -> bytes
```
Uses secret key to produce the signature of message.
``` python
def trezor.crypto.curve.ed25519.verify(public_key: bytes, signature: bytes, message: bytes) -> bool
```
Uses public key to verify the signature of the message
Returns True on success.
####trezor.crypto.curve.nist256p1
``` python
def trezor.crypto.curve.nist256p1.publickey(secret_key: bytes, compressed: bool=True) -> bytes
```
Computes public key from secret key.
``` python
def trezor.crypto.curve.nist256p1.sign(secret_key: bytes, message: bytes) -> bytes
```
Uses secret key to produce the signature of message.
``` python
def trezor.crypto.curve.nist256p1.verify(public_key: bytes, signature: bytes, message: bytes) -> bool
```
Uses public key to verify the signature of the message
Returns True on success.
####trezor.crypto.curve.secp256k1
``` python
def trezor.crypto.curve.secp256k1.publickey(secret_key: bytes, compressed: bool=True) -> bytes
```
Computes public key from secret key.
``` python
def trezor.crypto.curve.secp256k1.sign(secret_key: bytes, message: bytes) -> bytes
```
Uses secret key to produce the signature of message.
``` python
def trezor.crypto.curve.secp256k1.verify(public_key: bytes, signature: bytes, message: bytes) -> bool
```
Uses public key to verify the signature of the message
Returns True on success.
###trezor.crypto.hashlib
####trezor.crypto.hashlib.ripemd160
``` python
def trezor.crypto.hashlib.ripemd160(data: bytes=None) -> Ripemd160
```
Creates a hash context object.
``` python
def Ripemd160.update(self, data: bytes) -> None
```
Update the hash context with hashed data.
``` python
def Ripemd160.digest(self) -> bytes
```
Returns the digest of hashed data.
####trezor.crypto.hashlib.sha256
``` python
def trezor.crypto.hashlib.sha256(data: bytes=None) -> Sha256
```
Creates a hash context object.
``` python
def Sha256.update(self, data: bytes) -> None
```
Update the hash context with hashed data.
``` python
def Sha256.digest(self) -> bytes
```
Returns the digest of hashed data.
####trezor.crypto.hashlib.sha512
``` python
def trezor.crypto.hashlib.sha512(data: bytes=None) -> Sha512
```
Creates a hash context object.
``` python
def Sha512.hash(self, data: bytes) -> None
```
Update the hash context with hashed data.
``` python
def Sha512.digest(self) -> bytes
```
Returns the digest of hashed data.
####trezor.crypto.hashlib.sha3_256
``` python
def trezor.crypto.hashlib.sha3_256(data: bytes=None) -> Sha3_256
```
Creates a hash context object.
``` python
def Sha3_256.update(self, data: bytes) -> None
```
Update the hash context with hashed data.
``` python
def Sha3_256.digest(self) -> bytes
```
Returns the digest of hashed data.
####trezor.crypto.hashlib.sha3_512
``` python
def trezor.crypto.hashlib.sha3_512(data: bytes=None) -> Sha3_512
```
Creates a hash context object.
``` python
def Sha3_512.update(self, data: bytes) -> None
```
Update the hash context with hashed data.
``` python
def Sha3_512.digest(self) -> bytes
```
Returns the digest of hashed data.
####trezor.crypto.random
``` python
def trezor.crypto.random.uniform(n: int) -> int
```
Compute uniform random number from interval 0 ... n - 1
``` python
def trezor.crypto.random.bytes(len: int) -> bytes
```
Generate random bytes sequence of length len
``` python
def trezor.crypto.random.shuffle(data: list) -> None
```
Shuffles items of given list (in-place)
####trezor.crypto.ssss
``` python
def trezor.crypto.ssss.split(m: int, n: int, secret: bytes) -> tuple
```
Split secret to (M of N) shares using Shamir's Secret Sharing Scheme
``` python
def trezor.crypto.ssss.combine(shares: tuple) -> bytes
```
Combine M shares of Shamir's Secret Sharing Scheme into secret
###trezor.crypto.hmac
``` python
def trezor.crypto.hmac.new(key, msg, digestmod) -> Hmac
```
Creates a HMAC context object.
``` python
def Hmac.update(self, msg: bytes) -> None
```
Update the context with data.
``` python
def Hmac.digest(self) -> bytes
```
Returns the digest of processed data.
##trezor.msg
``` python
def trezor.msg.setup(ifaces: list) -> None
```
Configures USB interfaces with a list of tuples (interface_number, usage_page)
``` python
def trezor.msg.send(iface: int, message: bytes) -> int
```
Sends message using USB HID (device) or UDP (emulator).
``` python
def trezor.msg.select(timeout_us: int) -> tuple
```
Polls the event queue and returns the event object.
Function returns None if timeout specified in microseconds is reached.
##trezor.ui
``` python
def trezor.ui.rgbcolor(r: int, g: int, b: int) -> int
```
``` python
def trezor.ui.in_area(pos: tuple, area: tuple) -> bool
```
``` python
def trezor.ui.lerpi(a: int, b: int, t: float) -> int
```
``` python
def trezor.ui.blend(ca: int, cb: int, t: float) -> int
```
``` python
def trezor.ui.animate_pulse(func, ca, cb, speed=200000, delay=30000)
```
``` python
def trezor.ui.rotate_coords(pos: tuple) -> tuple
```
###trezor.ui.display
``` python
def trezor.ui.display.bar(x: int, y: int, w: int, h: int, fgcolor: int, bgcolor: int=None) -> None
```
Renders a bar at position (x,y = upper left corner) with width w and height h of color fgcolor.
When a bgcolor is set, the bar is drawn with rounded corners and bgcolor is used for background.
``` python
def trezor.ui.display.blit(x: int, y: int, w: int, h: int, data: bytes) -> None
```
Renders rectangle at position (x,y = upper left corner) with width w and height h with data.
The data needs to have the correct format.
``` python
def trezor.ui.display.image(x: int, y: int, image: bytes) -> None
```
Renders an image at position (x,y).
The image needs to be in TREZOR Optimized Image Format (TOIF) - full-color mode.
``` python
def trezor.ui.display.icon(x: int, y: int, icon: bytes, fgcolor: int, bgcolor: int) -> None
```
Renders an icon at position (x,y), fgcolor is used as foreground color, bgcolor as background.
The image needs to be in TREZOR Optimized Image Format (TOIF) - gray-scale mode.
``` python
def trezor.ui.display.text(x: int, y: int, text: bytes, font: int, fgcolor: int, bgcolor: int) -> None
```
Renders left-aligned text at position (x,y) where x is left position and y is baseline.
Font font is used for rendering, fgcolor is used as foreground color, bgcolor as background.
``` python
def trezor.ui.display.text_center(x: int, y: int, text: bytes, font: int, fgcolor: int, bgcolor: int) -> None
```
Renders text centered at position (x,y) where x is text center and y is baseline.
Font font is used for rendering, fgcolor is used as foreground color, bgcolor as background.
``` python
def trezor.ui.display.text_right(x: int, y: int, text: bytes, font: int, fgcolor: int, bgcolor: int) -> None
```
Renders right-aligned text at position (x,y) where x is right position and y is baseline.
Font font is used for rendering, fgcolor is used as foreground color, bgcolor as background.
``` python
def trezor.ui.display.text_width(text: bytes, font: int) -> int
```
Returns a width of text in pixels. Font font is used for rendering.
``` python
def trezor.ui.display.qrcode(x: int, y: int, data: bytes, scale: int) -> None
```
Renders data encoded as a QR code at position (x,y).
Scale determines a zoom factor.
``` python
def trezor.ui.display.loader(progress: int, fgcolor: int, bgcolor: int, icon: bytes=None, iconfgcolor: int=None) -> None
```
Renders a rotating loader graphic.
Progress determines its position (0-1000), fgcolor is used as foreground color, bgcolor as background.
When icon and iconfgcolor are provided, an icon is drawn in the middle using the color specified in iconfgcolor.
Icon needs to be of exaclty 96x96 pixels size.
``` python
def trezor.ui.display.orientation(degrees: int=None) -> int
```
Sets display orientation to 0, 90, 180 or 270 degrees.
Everything needs to be redrawn again when this function is used.
Call without the degrees parameter to just perform the read of the value.
``` python
def trezor.ui.display.backlight(val: int=None) -> int
```
Sets backlight intensity to the value specified in val.
Call without the val parameter to just perform the read of the value.
``` python
def trezor.ui.display.raw(reg: int, data: bytes) -> None
```
Performs a raw command on the display. Read the datasheet to learn more.
###trezor.utils
``` python
def trezor.utils.memaccess(address: int, length: int) -> bytes
```
Creates a bytes object that can be used to access certain memory location.

View File

@ -1,59 +0,0 @@
#!/usr/bin/python3
import os
import re
def process_file(fn):
mod, ext = os.path.splitext(fn)
src = open('../%s' % (fn)).readlines()
r = []
cls = ''
if ext in ['.h', '.c']:
for l in src:
l = l.rstrip()
if l.startswith('/// def '):
r.append('``` python')
r.append(l[4:])
r.append('```')
elif l.startswith('/// '):
r.append(l[4:])
elif l == '///':
r.append('')
elif ext == '.py':
mod = mod[4:].replace('/', '.')
if mod.endswith('.__init__'):
mod = mod[:-9]
for l in src:
l = l.rstrip()
if l.startswith('def '):
r.append('``` python')
r.append('def %s.' % mod + l[4:-1])
r.append('```')
elif l.startswith('### '):
r.append(l[4:])
elif l.startswith('###'):
r.append('')
elif l.startswith('class '):
cls = re.match('class ([A-Za-z0-9_]*)', l).group(1)
elif l.startswith(' def ') and not l.startswith(' def __init__'):
r.append('``` python')
r.append('def %s.' % cls + l[8:-1])
r.append('```')
elif l.startswith(' ### '):
r.append(l[8:])
elif l.startswith(' ###'):
r.append('')
return r
def main():
tpl = open('api.template.md', 'rt').readlines()
f = open('api.md', 'wt')
for line in tpl:
if line.startswith('@'):
for l in process_file(line[1:].strip()):
f.write(l + '\n')
else:
f.write(line)
f.close()
if __name__ == "__main__":
main()

View File

@ -1,77 +0,0 @@
#TREZOR Core API
Syntax used below is a valid Python function declaration with type hints defined in [PEP 0484](https://www.python.org/dev/peps/pep-0484/).
##trezor.crypto
###trezor.crypto.base58
@src/trezor/crypto/base58.py
###trezor.crypto.bip39
@extmod/modtrezorcrypto/modtrezorcrypto-bip39.h
###trezor.crypto.curve
####trezor.crypto.curve.ed25519
@extmod/modtrezorcrypto/modtrezorcrypto-ed25519.h
####trezor.crypto.curve.nist256p1
@extmod/modtrezorcrypto/modtrezorcrypto-nist256p1.h
####trezor.crypto.curve.secp256k1
@extmod/modtrezorcrypto/modtrezorcrypto-secp256k1.h
###trezor.crypto.hashlib
####trezor.crypto.hashlib.ripemd160
@extmod/modtrezorcrypto/modtrezorcrypto-ripemd160.h
####trezor.crypto.hashlib.sha256
@extmod/modtrezorcrypto/modtrezorcrypto-sha256.h
####trezor.crypto.hashlib.sha512
@extmod/modtrezorcrypto/modtrezorcrypto-sha512.h
####trezor.crypto.hashlib.sha3_256
@extmod/modtrezorcrypto/modtrezorcrypto-sha3-256.h
####trezor.crypto.hashlib.sha3_512
@extmod/modtrezorcrypto/modtrezorcrypto-sha3-512.h
####trezor.crypto.random
@extmod/modtrezorcrypto/modtrezorcrypto-random.h
####trezor.crypto.ssss
@extmod/modtrezorcrypto/modtrezorcrypto-ssss.h
###trezor.crypto.hmac
@src/trezor/crypto/hmac.py
##trezor.msg
@extmod/modtrezormsg/modtrezormsg.c
##trezor.ui
@src/trezor/ui/__init__.py
###trezor.ui.display
@extmod/modtrezorui/modtrezorui-display.h
###trezor.utils
@extmod/modtrezorutils/modtrezorutils.c

View File

@ -27,11 +27,20 @@ STATIC mp_obj_t mod_TrezorConfig_Config_make_new(const mp_obj_type_t *type, size
return MP_OBJ_FROM_PTR(o);
}
/// def trezor.config.get(app: int, key: int) -> bytes
/// '''
/// Gets a value of given key for given app (or None if not set).
/// '''
STATIC mp_obj_t mod_TrezorConfig_Config_get(mp_obj_t self, mp_obj_t app, mp_obj_t key) {
return mp_const_none;
}
STATIC MP_DEFINE_CONST_FUN_OBJ_3(mod_TrezorConfig_Config_get_obj, mod_TrezorConfig_Config_get);
/// def trezor.config.set(app: int, key: int) -> bool
/// '''
/// Sets a value of given key for given app.
/// Returns True on success.
/// '''
STATIC mp_obj_t mod_TrezorConfig_Config_set(size_t n_args, const mp_obj_t *args) {
return mp_const_none;
}

View File

@ -21,9 +21,9 @@ STATIC mp_obj_t mod_TrezorCrypto_Bip39_make_new(const mp_obj_type_t *type, size_
}
/// def trezor.crypto.bip39.generate(strength: int) -> str
///
/// '''
/// Generate a mnemonic of given strength (128, 160, 192, 224 and 256 bits)
///
/// '''
STATIC mp_obj_t mod_TrezorCrypto_Bip39_generate(mp_obj_t self, mp_obj_t strength) {
int bits = mp_obj_get_int(strength);
if (bits % 32 || bits < 128 || bits > 256) {
@ -38,9 +38,9 @@ STATIC mp_obj_t mod_TrezorCrypto_Bip39_generate(mp_obj_t self, mp_obj_t strength
STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_TrezorCrypto_Bip39_generate_obj, mod_TrezorCrypto_Bip39_generate);
/// def trezor.crypto.bip39.from_data(data: bytes) -> str
///
/// '''
/// Generate a mnemonic from given data (of 16, 20, 24, 28 and 32 bytes)
///
/// '''
STATIC mp_obj_t mod_TrezorCrypto_Bip39_from_data(mp_obj_t self, mp_obj_t data) {
mp_buffer_info_t bin;
mp_get_buffer_raise(data, &bin, MP_BUFFER_READ);
@ -56,9 +56,9 @@ STATIC mp_obj_t mod_TrezorCrypto_Bip39_from_data(mp_obj_t self, mp_obj_t data) {
STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_TrezorCrypto_Bip39_from_data_obj, mod_TrezorCrypto_Bip39_from_data);
/// def trezor.crypto.bip39.check(mnemonic: str) -> bool
///
/// '''
/// Check whether given mnemonic is valid
///
/// '''
STATIC mp_obj_t mod_TrezorCrypto_Bip39_check(mp_obj_t self, mp_obj_t mnemonic) {
mp_buffer_info_t text;
mp_get_buffer_raise(mnemonic, &text, MP_BUFFER_READ);
@ -67,9 +67,9 @@ STATIC mp_obj_t mod_TrezorCrypto_Bip39_check(mp_obj_t self, mp_obj_t mnemonic) {
STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_TrezorCrypto_Bip39_check_obj, mod_TrezorCrypto_Bip39_check);
/// def trezor.crypto.bip39.seed(mnemonic: str, passphrase: str) -> bytes
///
/// '''
/// Generate seed from mnemonic and passphrase
///
/// '''
STATIC mp_obj_t mod_TrezorCrypto_Bip39_seed(mp_obj_t self, mp_obj_t mnemonic, mp_obj_t passphrase) {
mp_buffer_info_t mnemo;
mp_buffer_info_t phrase;

View File

@ -21,9 +21,9 @@ STATIC mp_obj_t mod_TrezorCrypto_Ed25519_make_new(const mp_obj_type_t *type, siz
}
/// def trezor.crypto.curve.ed25519.publickey(secret_key: bytes) -> bytes
///
/// '''
/// Computes public key from secret key.
///
/// '''
STATIC mp_obj_t mod_TrezorCrypto_Ed25519_publickey(mp_obj_t self, mp_obj_t secret_key) {
mp_buffer_info_t sk;
mp_get_buffer_raise(secret_key, &sk, MP_BUFFER_READ);
@ -38,9 +38,9 @@ STATIC mp_obj_t mod_TrezorCrypto_Ed25519_publickey(mp_obj_t self, mp_obj_t secre
STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_TrezorCrypto_Ed25519_publickey_obj, mod_TrezorCrypto_Ed25519_publickey);
/// def trezor.crypto.curve.ed25519.sign(secret_key: bytes, message: bytes) -> bytes
///
/// '''
/// Uses secret key to produce the signature of message.
///
/// '''
STATIC mp_obj_t mod_TrezorCrypto_Ed25519_sign(mp_obj_t self, mp_obj_t secret_key, mp_obj_t message) {
mp_buffer_info_t sk, msg;
mp_get_buffer_raise(secret_key, &sk, MP_BUFFER_READ);
@ -58,10 +58,10 @@ STATIC mp_obj_t mod_TrezorCrypto_Ed25519_sign(mp_obj_t self, mp_obj_t secret_key
STATIC MP_DEFINE_CONST_FUN_OBJ_3(mod_TrezorCrypto_Ed25519_sign_obj, mod_TrezorCrypto_Ed25519_sign);
/// def trezor.crypto.curve.ed25519.verify(public_key: bytes, signature: bytes, message: bytes) -> bool
///
/// Uses public key to verify the signature of the message
/// '''
/// Uses public key to verify the signature of the message.
/// Returns True on success.
///
/// '''
STATIC mp_obj_t mod_TrezorCrypto_Ed25519_verify(size_t n_args, const mp_obj_t *args) {
mp_buffer_info_t pk, sig, msg;
mp_get_buffer_raise(args[1], &pk, MP_BUFFER_READ);

View File

@ -22,9 +22,9 @@ STATIC mp_obj_t mod_TrezorCrypto_Nist256p1_make_new(const mp_obj_type_t *type, s
}
/// def trezor.crypto.curve.nist256p1.publickey(secret_key: bytes, compressed: bool=True) -> bytes
///
/// '''
/// Computes public key from secret key.
///
/// '''
STATIC mp_obj_t mod_TrezorCrypto_Nist256p1_publickey(size_t n_args, const mp_obj_t *args) {
mp_buffer_info_t sk;
mp_get_buffer_raise(args[1], &sk, MP_BUFFER_READ);
@ -45,9 +45,9 @@ STATIC mp_obj_t mod_TrezorCrypto_Nist256p1_publickey(size_t n_args, const mp_obj
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_TrezorCrypto_Nist256p1_publickey_obj, 2, 3, mod_TrezorCrypto_Nist256p1_publickey);
/// def trezor.crypto.curve.nist256p1.sign(secret_key: bytes, message: bytes) -> bytes
///
/// '''
/// Uses secret key to produce the signature of message.
///
/// '''
STATIC mp_obj_t mod_TrezorCrypto_Nist256p1_sign(mp_obj_t self, mp_obj_t secret_key, mp_obj_t message) {
mp_buffer_info_t sk, msg;
mp_get_buffer_raise(secret_key, &sk, MP_BUFFER_READ);
@ -67,10 +67,10 @@ STATIC mp_obj_t mod_TrezorCrypto_Nist256p1_sign(mp_obj_t self, mp_obj_t secret_k
STATIC MP_DEFINE_CONST_FUN_OBJ_3(mod_TrezorCrypto_Nist256p1_sign_obj, mod_TrezorCrypto_Nist256p1_sign);
/// def trezor.crypto.curve.nist256p1.verify(public_key: bytes, signature: bytes, message: bytes) -> bool
///
/// '''
/// Uses public key to verify the signature of the message
/// Returns True on success.
///
/// '''
STATIC mp_obj_t mod_TrezorCrypto_Nist256p1_verify(size_t n_args, const mp_obj_t *args) {
mp_buffer_info_t pk, sig, msg;
mp_get_buffer_raise(args[1], &pk, MP_BUFFER_READ);

View File

@ -21,9 +21,9 @@ STATIC mp_obj_t mod_TrezorCrypto_Random_make_new(const mp_obj_type_t *type, size
}
/// def trezor.crypto.random.uniform(n: int) -> int
///
/// '''
/// Compute uniform random number from interval 0 ... n - 1
///
/// '''
STATIC mp_obj_t mod_TrezorCrypto_Random_uniform(mp_obj_t self, mp_obj_t n) {
uint32_t nn = mp_obj_get_int(n);
if (nn == 0) {
@ -34,9 +34,9 @@ STATIC mp_obj_t mod_TrezorCrypto_Random_uniform(mp_obj_t self, mp_obj_t n) {
STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_TrezorCrypto_Random_uniform_obj, mod_TrezorCrypto_Random_uniform);
/// def trezor.crypto.random.bytes(len: int) -> bytes
///
/// '''
/// Generate random bytes sequence of length len
///
/// '''
STATIC mp_obj_t mod_TrezorCrypto_Random_bytes(mp_obj_t self, mp_obj_t len) {
uint32_t l = mp_obj_get_int(len);
vstr_t vstr;
@ -47,9 +47,9 @@ STATIC mp_obj_t mod_TrezorCrypto_Random_bytes(mp_obj_t self, mp_obj_t len) {
STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_TrezorCrypto_Random_bytes_obj, mod_TrezorCrypto_Random_bytes);
/// def trezor.crypto.random.shuffle(data: list) -> None
///
/// '''
/// Shuffles items of given list (in-place)
///
/// '''
STATIC mp_obj_t mod_TrezorCrypto_Random_shuffle(mp_obj_t self, mp_obj_t data) {
mp_uint_t item_cnt;
mp_obj_t *items;

View File

@ -20,9 +20,9 @@ typedef struct _mp_obj_Ripemd160_t {
STATIC mp_obj_t mod_TrezorCrypto_Ripemd160_update(mp_obj_t self, mp_obj_t data);
/// def trezor.crypto.hashlib.ripemd160(data: bytes=None) -> Ripemd160
///
/// '''
/// Creates a hash context object.
///
/// '''
STATIC mp_obj_t mod_TrezorCrypto_Ripemd160_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args) {
mp_arg_check_num(n_args, n_kw, 0, 1, false);
mp_obj_Ripemd160_t *o = m_new_obj(mp_obj_Ripemd160_t);
@ -36,9 +36,9 @@ STATIC mp_obj_t mod_TrezorCrypto_Ripemd160_make_new(const mp_obj_type_t *type, s
}
/// def Ripemd160.update(self, data: bytes) -> None
///
/// '''
/// Update the hash context with hashed data.
///
/// '''
STATIC mp_obj_t mod_TrezorCrypto_Ripemd160_update(mp_obj_t self, mp_obj_t data) {
mp_obj_Ripemd160_t *o = MP_OBJ_TO_PTR(self);
mp_buffer_info_t msg;
@ -49,9 +49,9 @@ STATIC mp_obj_t mod_TrezorCrypto_Ripemd160_update(mp_obj_t self, mp_obj_t data)
STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_TrezorCrypto_Ripemd160_update_obj, mod_TrezorCrypto_Ripemd160_update);
/// def Ripemd160.digest(self) -> bytes
///
/// '''
/// Returns the digest of hashed data.
///
/// '''
STATIC mp_obj_t mod_TrezorCrypto_Ripemd160_digest(mp_obj_t self) {
mp_obj_Ripemd160_t *o = MP_OBJ_TO_PTR(self);
vstr_t vstr;

View File

@ -22,9 +22,9 @@ STATIC mp_obj_t mod_TrezorCrypto_Secp256k1_make_new(const mp_obj_type_t *type, s
}
/// def trezor.crypto.curve.secp256k1.publickey(secret_key: bytes, compressed: bool=True) -> bytes
///
/// '''
/// Computes public key from secret key.
///
/// '''
STATIC mp_obj_t mod_TrezorCrypto_Secp256k1_publickey(size_t n_args, const mp_obj_t *args) {
mp_buffer_info_t sk;
mp_get_buffer_raise(args[1], &sk, MP_BUFFER_READ);
@ -45,9 +45,9 @@ STATIC mp_obj_t mod_TrezorCrypto_Secp256k1_publickey(size_t n_args, const mp_obj
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_TrezorCrypto_Secp256k1_publickey_obj, 2, 3, mod_TrezorCrypto_Secp256k1_publickey);
/// def trezor.crypto.curve.secp256k1.sign(secret_key: bytes, message: bytes) -> bytes
///
/// '''
/// Uses secret key to produce the signature of message.
///
/// '''
STATIC mp_obj_t mod_TrezorCrypto_Secp256k1_sign(mp_obj_t self, mp_obj_t secret_key, mp_obj_t message) {
mp_buffer_info_t sk, msg;
mp_get_buffer_raise(secret_key, &sk, MP_BUFFER_READ);
@ -67,10 +67,10 @@ STATIC mp_obj_t mod_TrezorCrypto_Secp256k1_sign(mp_obj_t self, mp_obj_t secret_k
STATIC MP_DEFINE_CONST_FUN_OBJ_3(mod_TrezorCrypto_Secp256k1_sign_obj, mod_TrezorCrypto_Secp256k1_sign);
/// def trezor.crypto.curve.secp256k1.verify(public_key: bytes, signature: bytes, message: bytes) -> bool
///
/// '''
/// Uses public key to verify the signature of the message
/// Returns True on success.
///
/// '''
STATIC mp_obj_t mod_TrezorCrypto_Secp256k1_verify(size_t n_args, const mp_obj_t *args) {
mp_buffer_info_t pk, sig, msg;
mp_get_buffer_raise(args[1], &pk, MP_BUFFER_READ);

View File

@ -20,9 +20,9 @@ typedef struct _mp_obj_Sha256_t {
STATIC mp_obj_t mod_TrezorCrypto_Sha256_update(mp_obj_t self, mp_obj_t data);
/// def trezor.crypto.hashlib.sha256(data: bytes=None) -> Sha256
///
/// '''
/// Creates a hash context object.
///
/// '''
STATIC mp_obj_t mod_TrezorCrypto_Sha256_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args) {
mp_arg_check_num(n_args, n_kw, 0, 1, false);
mp_obj_Sha256_t *o = m_new_obj(mp_obj_Sha256_t);
@ -36,9 +36,9 @@ STATIC mp_obj_t mod_TrezorCrypto_Sha256_make_new(const mp_obj_type_t *type, size
}
/// def Sha256.update(self, data: bytes) -> None
///
/// '''
/// Update the hash context with hashed data.
///
/// '''
STATIC mp_obj_t mod_TrezorCrypto_Sha256_update(mp_obj_t self, mp_obj_t data) {
mp_obj_Sha256_t *o = MP_OBJ_TO_PTR(self);
mp_buffer_info_t msg;
@ -49,9 +49,9 @@ STATIC mp_obj_t mod_TrezorCrypto_Sha256_update(mp_obj_t self, mp_obj_t data) {
STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_TrezorCrypto_Sha256_update_obj, mod_TrezorCrypto_Sha256_update);
/// def Sha256.digest(self) -> bytes
///
/// '''
/// Returns the digest of hashed data.
///
/// '''
STATIC mp_obj_t mod_TrezorCrypto_Sha256_digest(mp_obj_t self) {
mp_obj_Sha256_t *o = MP_OBJ_TO_PTR(self);
vstr_t vstr;

View File

@ -20,9 +20,9 @@ typedef struct _mp_obj_Sha3_256_t {
STATIC mp_obj_t mod_TrezorCrypto_Sha3_256_update(mp_obj_t self, mp_obj_t data);
/// def trezor.crypto.hashlib.sha3_256(data: bytes=None) -> Sha3_256
///
/// '''
/// Creates a hash context object.
///
/// '''
STATIC mp_obj_t mod_TrezorCrypto_Sha3_256_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args) {
mp_arg_check_num(n_args, n_kw, 0, 1, false);
mp_obj_Sha3_256_t *o = m_new_obj(mp_obj_Sha3_256_t);
@ -36,9 +36,9 @@ STATIC mp_obj_t mod_TrezorCrypto_Sha3_256_make_new(const mp_obj_type_t *type, si
}
/// def Sha3_256.update(self, data: bytes) -> None
///
/// '''
/// Update the hash context with hashed data.
///
/// '''
STATIC mp_obj_t mod_TrezorCrypto_Sha3_256_update(mp_obj_t self, mp_obj_t data) {
mp_obj_Sha3_256_t *o = MP_OBJ_TO_PTR(self);
mp_buffer_info_t msg;
@ -49,9 +49,9 @@ STATIC mp_obj_t mod_TrezorCrypto_Sha3_256_update(mp_obj_t self, mp_obj_t data) {
STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_TrezorCrypto_Sha3_256_update_obj, mod_TrezorCrypto_Sha3_256_update);
/// def Sha3_256.digest(self) -> bytes
///
/// '''
/// Returns the digest of hashed data.
///
/// '''
STATIC mp_obj_t mod_TrezorCrypto_Sha3_256_digest(mp_obj_t self) {
mp_obj_Sha3_256_t *o = MP_OBJ_TO_PTR(self);
vstr_t vstr;

View File

@ -20,9 +20,9 @@ typedef struct _mp_obj_Sha3_512_t {
STATIC mp_obj_t mod_TrezorCrypto_Sha3_512_update(mp_obj_t self, mp_obj_t data);
/// def trezor.crypto.hashlib.sha3_512(data: bytes=None) -> Sha3_512
///
/// '''
/// Creates a hash context object.
///
/// '''
STATIC mp_obj_t mod_TrezorCrypto_Sha3_512_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args) {
mp_arg_check_num(n_args, n_kw, 0, 1, false);
mp_obj_Sha3_512_t *o = m_new_obj(mp_obj_Sha3_512_t);
@ -36,9 +36,9 @@ STATIC mp_obj_t mod_TrezorCrypto_Sha3_512_make_new(const mp_obj_type_t *type, si
}
/// def Sha3_512.update(self, data: bytes) -> None
///
/// '''
/// Update the hash context with hashed data.
///
/// '''
STATIC mp_obj_t mod_TrezorCrypto_Sha3_512_update(mp_obj_t self, mp_obj_t data) {
mp_obj_Sha3_512_t *o = MP_OBJ_TO_PTR(self);
mp_buffer_info_t msg;
@ -49,9 +49,9 @@ STATIC mp_obj_t mod_TrezorCrypto_Sha3_512_update(mp_obj_t self, mp_obj_t data) {
STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_TrezorCrypto_Sha3_512_update_obj, mod_TrezorCrypto_Sha3_512_update);
/// def Sha3_512.digest(self) -> bytes
///
/// '''
/// Returns the digest of hashed data.
///
/// '''
STATIC mp_obj_t mod_TrezorCrypto_Sha3_512_digest(mp_obj_t self) {
mp_obj_Sha3_512_t *o = MP_OBJ_TO_PTR(self);
vstr_t vstr;

View File

@ -20,9 +20,9 @@ typedef struct _mp_obj_Sha512_t {
STATIC mp_obj_t mod_TrezorCrypto_Sha512_update(mp_obj_t self, mp_obj_t data);
/// def trezor.crypto.hashlib.sha512(data: bytes=None) -> Sha512
///
/// '''
/// Creates a hash context object.
///
/// '''
STATIC mp_obj_t mod_TrezorCrypto_Sha512_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args) {
mp_arg_check_num(n_args, n_kw, 0, 1, false);
mp_obj_Sha512_t *o = m_new_obj(mp_obj_Sha512_t);
@ -35,9 +35,9 @@ STATIC mp_obj_t mod_TrezorCrypto_Sha512_make_new(const mp_obj_type_t *type, size
}
/// def Sha512.hash(self, data: bytes) -> None
///
/// '''
/// Update the hash context with hashed data.
///
/// '''
STATIC mp_obj_t mod_TrezorCrypto_Sha512_update(mp_obj_t self, mp_obj_t data) {
mp_obj_Sha512_t *o = MP_OBJ_TO_PTR(self);
mp_buffer_info_t msg;
@ -48,9 +48,9 @@ STATIC mp_obj_t mod_TrezorCrypto_Sha512_update(mp_obj_t self, mp_obj_t data) {
STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_TrezorCrypto_Sha512_update_obj, mod_TrezorCrypto_Sha512_update);
/// def Sha512.digest(self) -> bytes
///
/// '''
/// Returns the digest of hashed data.
///
/// '''
STATIC mp_obj_t mod_TrezorCrypto_Sha512_digest(mp_obj_t self) {
mp_obj_Sha512_t *o = MP_OBJ_TO_PTR(self);
vstr_t vstr;

View File

@ -22,9 +22,9 @@ STATIC mp_obj_t mod_TrezorCrypto_SSSS_make_new(const mp_obj_type_t *type, size_t
}
/// def trezor.crypto.ssss.split(m: int, n: int, secret: bytes) -> tuple
///
/// '''
/// Split secret to (M of N) shares using Shamir's Secret Sharing Scheme
///
/// '''
STATIC mp_obj_t mod_TrezorCrypto_SSSS_split(size_t n_args, const mp_obj_t *args) {
mp_int_t m = mp_obj_get_int(args[1]);
mp_int_t n = mp_obj_get_int(args[2]);
@ -54,9 +54,9 @@ STATIC mp_obj_t mod_TrezorCrypto_SSSS_split(size_t n_args, const mp_obj_t *args)
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_TrezorCrypto_SSSS_split_obj, 4, 4, mod_TrezorCrypto_SSSS_split);
/// def trezor.crypto.ssss.combine(shares: tuple) -> bytes
///
/// '''
/// Combine M shares of Shamir's Secret Sharing Scheme into secret
///
/// '''
STATIC mp_obj_t mod_TrezorCrypto_SSSS_combine(mp_obj_t self, mp_obj_t shares) {
mp_uint_t n;
mp_obj_t *share;

View File

@ -37,9 +37,9 @@ STATIC mp_obj_t mod_TrezorMsg_Msg_make_new(const mp_obj_type_t *type, size_t n_a
}
/// def trezor.msg.setup(ifaces: list) -> None
///
/// '''
/// Configures USB interfaces with a list of tuples (interface_number, usage_page)
///
/// '''
STATIC mp_obj_t mod_TrezorMsg_Msg_setup(mp_obj_t self, mp_obj_t ifaces) {
mp_uint_t iface_cnt;
mp_obj_t *iface;
@ -68,9 +68,9 @@ STATIC mp_obj_t mod_TrezorMsg_Msg_setup(mp_obj_t self, mp_obj_t ifaces) {
STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_TrezorMsg_Msg_setup_obj, mod_TrezorMsg_Msg_setup);
/// def trezor.msg.send(iface: int, message: bytes) -> int
///
/// '''
/// Sends message using USB HID (device) or UDP (emulator).
///
/// '''
STATIC mp_obj_t mod_TrezorMsg_Msg_send(mp_obj_t self, mp_obj_t iface, mp_obj_t message) {
uint8_t iface_num = mp_obj_get_int(iface);
mp_buffer_info_t msg;
@ -84,10 +84,10 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_3(mod_TrezorMsg_Msg_send_obj, mod_TrezorMsg_Msg_s
#define TOUCH_IFACE 256
/// def trezor.msg.select(timeout_us: int) -> tuple
///
/// '''
/// Polls the event queue and returns the event object.
/// Function returns None if timeout specified in microseconds is reached.
///
/// '''
STATIC mp_obj_t mod_TrezorMsg_Msg_select(mp_obj_t self, mp_obj_t timeout_us) {
int timeout = mp_obj_get_int(timeout_us);
if (timeout < 0) {

View File

@ -22,10 +22,10 @@ STATIC mp_obj_t mod_TrezorUi_Display_make_new(const mp_obj_type_t *type, size_t
}
/// def trezor.ui.display.bar(x: int, y: int, w: int, h: int, fgcolor: int, bgcolor: int=None) -> None
///
/// '''
/// Renders a bar at position (x,y = upper left corner) with width w and height h of color fgcolor.
/// When a bgcolor is set, the bar is drawn with rounded corners and bgcolor is used for background.
///
/// '''
STATIC mp_obj_t mod_TrezorUi_Display_bar(size_t n_args, const mp_obj_t *args) {
mp_int_t x = mp_obj_get_int(args[1]);
mp_int_t y = mp_obj_get_int(args[2]);
@ -46,10 +46,10 @@ STATIC mp_obj_t mod_TrezorUi_Display_bar(size_t n_args, const mp_obj_t *args) {
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_TrezorUi_Display_bar_obj, 6, 7, mod_TrezorUi_Display_bar);
/// def trezor.ui.display.blit(x: int, y: int, w: int, h: int, data: bytes) -> None
///
/// '''
/// Renders rectangle at position (x,y = upper left corner) with width w and height h with data.
/// The data needs to have the correct format.
///
/// '''
STATIC mp_obj_t mod_TrezorUi_Display_blit(size_t n_args, const mp_obj_t *args) {
mp_int_t x = mp_obj_get_int(args[1]);
mp_int_t y = mp_obj_get_int(args[2]);
@ -66,10 +66,10 @@ STATIC mp_obj_t mod_TrezorUi_Display_blit(size_t n_args, const mp_obj_t *args) {
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_TrezorUi_Display_blit_obj, 6, 6, mod_TrezorUi_Display_blit);
/// def trezor.ui.display.image(x: int, y: int, image: bytes) -> None
///
/// '''
/// Renders an image at position (x,y).
/// The image needs to be in TREZOR Optimized Image Format (TOIF) - full-color mode.
///
/// '''
STATIC mp_obj_t mod_TrezorUi_Display_image(size_t n_args, const mp_obj_t *args) {
mp_int_t x = mp_obj_get_int(args[1]);
mp_int_t y = mp_obj_get_int(args[2]);
@ -94,10 +94,10 @@ STATIC mp_obj_t mod_TrezorUi_Display_image(size_t n_args, const mp_obj_t *args)
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_TrezorUi_Display_image_obj, 4, 4, mod_TrezorUi_Display_image);
/// def trezor.ui.display.icon(x: int, y: int, icon: bytes, fgcolor: int, bgcolor: int) -> None
///
/// '''
/// Renders an icon at position (x,y), fgcolor is used as foreground color, bgcolor as background.
/// The image needs to be in TREZOR Optimized Image Format (TOIF) - gray-scale mode.
///
/// '''
STATIC mp_obj_t mod_TrezorUi_Display_icon(size_t n_args, const mp_obj_t *args) {
mp_int_t x = mp_obj_get_int(args[1]);
mp_int_t y = mp_obj_get_int(args[2]);
@ -124,10 +124,10 @@ STATIC mp_obj_t mod_TrezorUi_Display_icon(size_t n_args, const mp_obj_t *args) {
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_TrezorUi_Display_icon_obj, 6, 6, mod_TrezorUi_Display_icon);
/// def trezor.ui.display.text(x: int, y: int, text: bytes, font: int, fgcolor: int, bgcolor: int) -> None
///
/// '''
/// Renders left-aligned text at position (x,y) where x is left position and y is baseline.
/// Font font is used for rendering, fgcolor is used as foreground color, bgcolor as background.
///
/// '''
STATIC mp_obj_t mod_TrezorUi_Display_text(size_t n_args, const mp_obj_t *args) {
mp_int_t x = mp_obj_get_int(args[1]);
mp_int_t y = mp_obj_get_int(args[2]);
@ -142,10 +142,10 @@ STATIC mp_obj_t mod_TrezorUi_Display_text(size_t n_args, const mp_obj_t *args) {
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_TrezorUi_Display_text_obj, 7, 7, mod_TrezorUi_Display_text);
/// def trezor.ui.display.text_center(x: int, y: int, text: bytes, font: int, fgcolor: int, bgcolor: int) -> None
///
/// '''
/// Renders text centered at position (x,y) where x is text center and y is baseline.
/// Font font is used for rendering, fgcolor is used as foreground color, bgcolor as background.
///
/// '''
STATIC mp_obj_t mod_TrezorUi_Display_text_center(size_t n_args, const mp_obj_t *args) {
mp_int_t x = mp_obj_get_int(args[1]);
mp_int_t y = mp_obj_get_int(args[2]);
@ -161,10 +161,10 @@ STATIC mp_obj_t mod_TrezorUi_Display_text_center(size_t n_args, const mp_obj_t *
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_TrezorUi_Display_text_center_obj, 7, 7, mod_TrezorUi_Display_text_center);
/// def trezor.ui.display.text_right(x: int, y: int, text: bytes, font: int, fgcolor: int, bgcolor: int) -> None
///
/// '''
/// Renders right-aligned text at position (x,y) where x is right position and y is baseline.
/// Font font is used for rendering, fgcolor is used as foreground color, bgcolor as background.
///
/// '''
STATIC mp_obj_t mod_TrezorUi_Display_text_right(size_t n_args, const mp_obj_t *args) {
mp_int_t x = mp_obj_get_int(args[1]);
mp_int_t y = mp_obj_get_int(args[2]);
@ -180,9 +180,9 @@ STATIC mp_obj_t mod_TrezorUi_Display_text_right(size_t n_args, const mp_obj_t *a
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_TrezorUi_Display_text_right_obj, 7, 7, mod_TrezorUi_Display_text_right);
/// def trezor.ui.display.text_width(text: bytes, font: int) -> int
///
/// '''
/// Returns a width of text in pixels. Font font is used for rendering.
///
/// '''
STATIC mp_obj_t mod_TrezorUi_Display_text_width(mp_obj_t self, mp_obj_t text, mp_obj_t font) {
mp_buffer_info_t txt;
mp_get_buffer_raise(text, &txt, MP_BUFFER_READ);
@ -193,10 +193,10 @@ STATIC mp_obj_t mod_TrezorUi_Display_text_width(mp_obj_t self, mp_obj_t text, mp
STATIC MP_DEFINE_CONST_FUN_OBJ_3(mod_TrezorUi_Display_text_width_obj, mod_TrezorUi_Display_text_width);
/// def trezor.ui.display.qrcode(x: int, y: int, data: bytes, scale: int) -> None
///
/// '''
/// Renders data encoded as a QR code at position (x,y).
/// Scale determines a zoom factor.
///
/// '''
STATIC mp_obj_t mod_TrezorUi_Display_qrcode(size_t n_args, const mp_obj_t *args) {
mp_int_t x = mp_obj_get_int(args[1]);
mp_int_t y = mp_obj_get_int(args[2]);
@ -212,12 +212,12 @@ STATIC mp_obj_t mod_TrezorUi_Display_qrcode(size_t n_args, const mp_obj_t *args)
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_TrezorUi_Display_qrcode_obj, 5, 5, mod_TrezorUi_Display_qrcode);
/// def trezor.ui.display.loader(progress: int, fgcolor: int, bgcolor: int, icon: bytes=None, iconfgcolor: int=None) -> None
///
/// '''
/// Renders a rotating loader graphic.
/// Progress determines its position (0-1000), fgcolor is used as foreground color, bgcolor as background.
/// When icon and iconfgcolor are provided, an icon is drawn in the middle using the color specified in iconfgcolor.
/// Icon needs to be of exaclty 96x96 pixels size.
///
/// '''
STATIC mp_obj_t mod_TrezorUi_Display_loader(size_t n_args, const mp_obj_t *args) {
mp_int_t progress = mp_obj_get_int(args[1]);
mp_int_t fgcolor = mp_obj_get_int(args[2]);
@ -253,11 +253,11 @@ STATIC mp_obj_t mod_TrezorUi_Display_loader(size_t n_args, const mp_obj_t *args)
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_TrezorUi_Display_loader_obj, 4, 6, mod_TrezorUi_Display_loader);
/// def trezor.ui.display.orientation(degrees: int=None) -> int
///
/// '''
/// Sets display orientation to 0, 90, 180 or 270 degrees.
/// Everything needs to be redrawn again when this function is used.
/// Call without the degrees parameter to just perform the read of the value.
///
/// '''
STATIC mp_obj_t mod_TrezorUi_Display_orientation(size_t n_args, const mp_obj_t *args) {
mp_int_t deg;
if (n_args > 1) {
@ -274,10 +274,10 @@ STATIC mp_obj_t mod_TrezorUi_Display_orientation(size_t n_args, const mp_obj_t *
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_TrezorUi_Display_orientation_obj, 1, 2, mod_TrezorUi_Display_orientation);
/// def trezor.ui.display.backlight(val: int=None) -> int
///
/// '''
/// Sets backlight intensity to the value specified in val.
/// Call without the val parameter to just perform the read of the value.
///
/// '''
STATIC mp_obj_t mod_TrezorUi_Display_backlight(size_t n_args, const mp_obj_t *args) {
mp_int_t val;
if (n_args > 1) {
@ -294,9 +294,9 @@ STATIC mp_obj_t mod_TrezorUi_Display_backlight(size_t n_args, const mp_obj_t *ar
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_TrezorUi_Display_backlight_obj, 1, 2, mod_TrezorUi_Display_backlight);
/// def trezor.ui.display.raw(reg: int, data: bytes) -> None
///
/// '''
/// Performs a raw command on the display. Read the datasheet to learn more.
///
/// '''
STATIC mp_obj_t mod_TrezorUi_Display_raw(mp_obj_t self, mp_obj_t reg, mp_obj_t data) {
mp_int_t r = mp_obj_get_int(reg);
mp_buffer_info_t raw;

View File

@ -28,9 +28,9 @@ STATIC mp_obj_t mod_TrezorUtils_Utils_make_new(const mp_obj_type_t *type, size_t
}
/// def trezor.utils.memaccess(address: int, length: int) -> bytes
///
/// '''
/// Creates a bytes object that can be used to access certain memory location.
///
/// '''
STATIC mp_obj_t mod_TrezorUtils_Utils_memaccess(mp_obj_t self, mp_obj_t address, mp_obj_t length) {
uint32_t addr = mp_obj_get_int(address);
uint32_t len = mp_obj_get_int(length);

View File

@ -19,9 +19,9 @@ from .hashlib import sha256
_alphabet = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
def encode(data: bytes) -> str:
###
### Convert bytes to base58 encoded string.
###
'''
Convert bytes to base58 encoded string.
'''
origlen = len(data)
data = data.lstrip(b'\0')
newlen = len(data)
@ -40,9 +40,9 @@ def encode(data: bytes) -> str:
def decode(string: str) -> bytes:
###
### Convert base58 encoded string to bytes.
###
'''
Convert base58 encoded string to bytes.
'''
origlen = len(string)
string = string.lstrip(_alphabet[0])
newlen = len(string)
@ -61,21 +61,21 @@ def decode(string: str) -> bytes:
def encode_check(data: bytes) -> str:
###
### Convert bytes to base58 encoded string, append checksum.
###
'''
Convert bytes to base58 encoded string, append checksum.
'''
digest = sha256(sha256(data).digest()).digest()
return encode(data + digest[:4])
def decode_check(string: str) -> bytes:
###
### Convert base58 encoded string to bytes and verify checksum.
###
'''
Convert base58 encoded string to bytes and verify checksum.
'''
result = decode(string)
result, check = result[:-4], result[-4:]
digest = sha256(sha256(result).digest()).digest()
if check != digest[:4]:
raise ValueError("Invalid checksum")
raise ValueError('Invalid checksum')
return result

View File

@ -1,7 +1,7 @@
def new(key, msg, digestmod) -> Hmac:
###
### Creates a HMAC context object.
###
'''
Creates a HMAC context object.
'''
return Hmac(key, msg, digestmod)
class Hmac:
@ -18,15 +18,15 @@ class Hmac:
self.update(msg)
def update(self, msg: bytes) -> None:
###
### Update the context with data.
###
'''
Update the context with data.
'''
self.__inner.update(msg)
def digest(self) -> bytes:
###
### Returns the digest of processed data.
###
'''
Returns the digest of processed data.
'''
outer = self.__digestmod()
outer.update(bytes((x ^ 0x5C) for x in self.__key))
outer.update(self.__inner.digest())

View File

@ -4,12 +4,18 @@ except ImportError:
resdata = None
def load(name):
'''
Loads resource of a given name as bytes.
'''
if resdata and name in resdata:
return resdata[name]
with open(name, 'rb') as f:
return f.read()
def gettext(message):
'''
Returns localized string. This function is aliased to _.
'''
return message
_ = gettext