Skip to content

Commit 82a4edf

Browse files
committed
Merge branch 'gpgcheck'
2 parents ddd4740 + e42b689 commit 82a4edf

20 files changed

+779
-189
lines changed

.travis.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ before_script:
5252
- if astyle --style=kr --indent-switches --indent-labels --pad-oper --pad-header --align-pointer=name --add-braces --convert-tabs --max-code-length=90 --break-after-logical --suffix=none *.c *.h --recursive --exclude=contrib --exclude=src/yajl --exclude=src/secp256k1 --exclude=tests/windows/hidapi --exclude=src/drivers --dry-run -Q | grep "Formatted" ; then exit 1 ; fi;
5353
- gpg --import contrib/contributors_gpg_keys/*
5454
- if ! git show c6ce843547c5212e33665dd4ca7c951a43067044; then exit 1 ; fi;
55-
- if git log --pretty="format:%H %aN %s %G?" e3e5f027b49fd4a2a52ee62fa779d6252021f855..HEAD^1 | grep -v "${t} G$" | grep -v "${t} U$"; then exit 1 ; fi;
55+
- if git log --pretty="format:%H %aN %s %G?" e31ee47782e2299902586f032e1abda867af897c..HEAD^1 | grep -v "${t} G$" | grep -v "${t} U$"; then exit 1 ; fi;
5656

5757
script:
5858
- mkdir build && cd build
Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
-----BEGIN PGP PUBLIC KEY BLOCK-----
2+
3+
mQINBFzTBQgBEADF13khmlSIesPKAGJnqitu5jX3IWjyyDNkSx+roySL+RTAZkcI
4+
cICJThPCDccpFlngjQaYRgBToeFgRth0tun9TE1Kv35YSWld788JmFYizSdeogw5
5+
loEvPXGwYABEdza/lc37pD1xjBaUQL9DTYdnMsOTuma1QiRq7pl5ZEuWFfHW+N1A
6+
Xqi3a6qHMgHxf/lly2l4KkyOY24LV0tP5PifTIUlTg5h9yp1eQa4zO1ZN68XqFvb
7+
UFI30nW9z8QY6KLkM7s+jbrohD+Brx2xCr0vJe8/Se9mVx9ZNCObPU5g5TvFO5Po
8+
Cfn7wntDUfR3DXz08f5Dvm/W/XF02/2Q3ks8s5VFFXLm11Qpd4rUIKeQdfMOWQgV
9+
pyg+tnpLWK5LYXhtr9oBrmQ8q2ryFep6K1NM0LLnDpvQitoWGz1SgS4FxB/dV0z1
10+
OsGYucxQeLRl9kI2FIDwuhzzMNtgPRKhgaB0LzclxwTVpz9gTT4k6u4OLlZIQ2M/
11+
5NRRMOZiyUToAJX+V9CcdhthPWqSlGNo5xiwNgn5kMtWkXOXqkAhdLiSdm2VLFwA
12+
/m7GqTVcxy33VJJnPB91BDzV3+j3dFf1RzZaRHn3KnTSpXUOJ+MqibehV4h4ABah
13+
3uOnKL298HzJa7e7QSK0dXxx3tKC+/W3fFquIFl9VFjZDxbgrXcd1gj6MQARAQAB
14+
tDBOaWtsYXMgQ2xhZXNzb24gPG5pa2xhcy5jbGFlc3NvbkBzaGlmdGNyeXB0by5j
15+
aD6JAk4EEwEKADgWIQSk58AxJBs7qw7ylR7vBllSZ0aqkgUCXNMFCAIbAQULCQgH
16+
AwUVCgkICwUWAgMBAAIeAQIXgAAKCRDvBllSZ0aqks9XD/4p8jcHEGGvzNsO9Aa4
17+
UOXAFMPoc3XI46H6SGf7n1GOg8ZdtHQt9K/5KXMaWx1L4DGzcFrmSZjo71aZqJW1
18+
3fjb/+rTCjm3eYyTVAOMflQhvamPPxPWnsQd3XL6Iiu0VrczNfy1yh2W3EiV5tWR
19+
oX6eKuCuFSCXugOdSPp5TelSRL3X2htyfRjT1YS14s49ANNBeUkDjQNQmwdIkC5i
20+
iOirjyWYhlO44L2a2GeBJc9TdR6hN2Vfp1p3DemfYIeURGo2u9d25cxo9fANLnaM
21+
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
121+
gQGubTXSHtTda342nVz1NL2EAA==
122+
=IwO6
123+
-----END PGP PUBLIC KEY BLOCK-----
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
-----BEGIN PGP PUBLIC KEY BLOCK-----
2+
3+
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
48+
=hqxP
49+
-----END PGP PUBLIC KEY BLOCK-----

py/load_firmware.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,26 @@
201201
'134eb617521a203b21a4495c06006c07cbdad2681f10169b6bee66e37cf798a801095c19918cbcc0403d626e47b1936286fa8566c4923da4933a1e035a8a9d23'
202202
'f3b26d44eee48de2d9e99fcdcd158fe33ac6a484e65267ac5e025369115828e724f8e30e784e2b7d5eaf60094e931e9a3c410d0890f280240c069d55e59776e6'
203203
)
204+
elif '7.0.3' in version:
205+
sig = (
206+
'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
207+
'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
208+
'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
209+
'f82d494b09415bde6426f154bbf28e0c13cdb07d3daad39d7954e677201696a47ca2a962915179ea059c56ceaf1523ed79ca3c90fce5ddee797c72fad023bb91'
210+
'51801755415b60d353d2e2e8711fa68f94f3840bb0b33791593f87238795075c36861763e03eb5e5ad3dae3c18386325d38cba9286b5104779daad99eb5628b0'
211+
'bffdbb174cfb15e20f3f730f32faf3132c22fd0ea99ffd2c534e2a7e8aa87c1c06b53f9fe419f022a77d17a9d4137dac071284bcc27d3c760d774ce97f1a285c'
212+
'25e5b0e14728b0617ae6a268c0a003663aa7c3adf583ee019af26953aea649f224d08f4043e4f8d7f799fda586c2ff5fa732663b0388ef6571124603b787b426'
213+
)
214+
elif '7.0.4' in version:
215+
sig = (
216+
'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
217+
'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
218+
'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
219+
'ff41ee436366c2dafd056dd61cc04d9e21c51303ac87851cc972637aa5668f195d56b4faff404e5d1d2d1bf0ee51c1cc4c19f74456e41869b01f317c33592e80'
220+
'979e20029fb848bd201fd849bd35c80fd3d4351b2eb4a525639e3a2123689cad1b9c681bd06db95717137b7778fa86b3c3d376028bfdb70fe2778dd12a42233b'
221+
'122f5ee27e9c3ca7cdf890969d9b3e8501674931b30f92a54dd1e05d37ffe3403771fc83855b9983273e17610d0804abf64a292160e32ba6940542e4618645e7'
222+
'2a03863b997fa79f890aa5e4ba6a75b3b5c7570fb37f9b27afa2f4df831deeb52a3176c5badf335aac8809ceb8427a01558e061860fe5892c7219697655b913f'
223+
)
204224
elif 'debug' in version:
205225
sig = (
206226
'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'

src/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ set(DBB-FIRMWARE-SOURCES
3333
flash.c
3434
touch.c
3535
ecdh.c
36+
json.c
3637
)
3738

3839
if(USE_SECP256K1_LIB)

src/base64.c

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,10 @@
2828
YWxsIHlvdXIgYmFzZSBhcmUgYmVsb25nIHRvIHVz
2929
3030
*/
31-
#ifndef BASE64_H
32-
#define BASE64_H
3331

3432
#include "base64.h"
35-
#include <stdio.h>
36-
#include <string.h>
3733
#include <stdlib.h>
34+
#include <string.h>
3835

3936
static const char *b64 =
4037
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" ;
@@ -67,11 +64,8 @@ static const unsigned char unb64[] = {
6764
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //240
6865
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //250
6966
0, 0, 0, 0, 0, 0,
70-
}; // This array has 255 elements
67+
}; // This array has 256 elements
7168

72-
// Converts binary data of length=len to base64 characters.
73-
// Length of the resultant string is stored in flen
74-
// (you must pass pointer flen).
7569
char *base64( const void *binaryData, int len, int *flen )
7670
{
7771
const unsigned char *bin = (const unsigned char *) binaryData ;
@@ -124,8 +118,8 @@ unsigned char *unbase64( const char *ascii, int len, int *flen )
124118
int charNo;
125119
int pad = 0 ;
126120

127-
if ( len < 2 ) { // 2 accesses below would be OOB.
128-
// catch empty string, return NULL as result.
121+
if ((len <= 0) || (len % 4 != 0)) { // 2 accesses below would be OOB.
122+
// catch empty string or incorrect padding size, return NULL as result.
129123
*flen = 0;
130124
return 0;
131125
}
@@ -149,6 +143,14 @@ unsigned char *unbase64( const char *ascii, int len, int *flen )
149143
}
150144
}
151145

146+
/*
147+
* Length is guaranteed to be >0 and a multiple of 4 here,
148+
* so the integer division will be exact and positive.
149+
* Any '=' in the input padding removes a byte
150+
* from the output.
151+
*
152+
* Note that this guarantees a positive value for flen.
153+
*/
152154
*flen = 3 * len / 4 - pad ;
153155
bin = malloc( *flen ) ;
154156
if ( !bin ) {
@@ -182,5 +184,3 @@ unsigned char *unbase64( const char *ascii, int len, int *flen )
182184

183185
return bin ;
184186
}
185-
186-
#endif

src/base64.h

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,28 @@
3636
#ifndef _BASE64_H_
3737
#define _BASE64_H_
3838

39-
40-
// Converts binary data of length=len to base64 characters.
41-
// Length of the resultant string is stored in flen
42-
// (you must pass pointer flen).
43-
char *base64( const void *binaryData, int len, int *flen );
39+
/**
40+
* Converts binary data of length=len to base64 characters.
41+
*
42+
* @param[in] binaryData Binary buffer to encode. Must be len bytes long.
43+
* @paramm[in] len Length of the binaryData buffer.
44+
* @param[out] flen Resulting length of the encoded buffer.
45+
* @return Decoded buffer, or NULL if an error occurred. Must be free()'d by the
46+
* caller.
47+
*/
48+
char *base64(const void *binaryData, int len, int *flen);
49+
50+
/**
51+
* Decodes the provided base64 string.
52+
*
53+
* @param[in] ascii Base64-encoded buffer to decoded. Must contain a
54+
* zero-terminated string.
55+
* @param[in] len Length of the string to decode (excluding the terminating
56+
* character).
57+
* @param[out] flen Resulting length of the decoded buffer.
58+
* @return Decoded buffer, or NULL if an error occurred. Must be free()'d by the
59+
* caller.
60+
*/
4461
unsigned char *unbase64( const char *ascii, int len, int *flen );
4562

46-
4763
#endif

src/cipher.c

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -101,10 +101,14 @@ static uint8_t *cipher_aes_encrypt(const unsigned char *in, int inlen,
101101
return enc_cat;
102102
}
103103

104-
// Encrypts a given constant char array of length inlen using the AES algorithm with CBC mode
105-
// and base64 encodes the result.
106-
//
107-
// Must free() returned value (allocated inside base64() function)
104+
/**
105+
* Encrypts a given constant char array of length inlen using the AES algorithm with CBC mode
106+
* and base64 encodes the result.
107+
*
108+
* Must free() returned value (allocated inside base64() function)
109+
*
110+
* @return Encrypted, base64-encoded buffer, or NULL in case of error.
111+
*/
108112
char *cipher_aes_b64_encrypt(const unsigned char *in, int inlen, int *outb64len,
109113
const uint8_t *key)
110114
{
@@ -240,10 +244,16 @@ char *cipher_aes_hmac_decrypt(const uint8_t *in, int inlen,
240244
return ret;
241245
}
242246

243-
// Decrypts a given constant char array of length inlen using the AES algorithm with CBC mode
244-
// and base64 decodes the result.
245-
//
246-
// Must free() returned value (allocated inside base64() function)
247+
/**
248+
* Decrypts a given constant char array of length inlen using the AES algorithm with CBC mode
249+
* and base64 decodes the result.
250+
*
251+
* Must free() returned value (allocated inside base64() function)
252+
* @param[in] in Pointer to the buffer to decrpyt. Must contain a
253+
* NULL-terminated string.
254+
* @param[in] inlen Length of the buffer to decrypt, excluding the
255+
* terminating NULL character.
256+
*/
247257
char *cipher_aes_b64_hmac_decrypt(const unsigned char *in, int inlen, int *out_msg_len,
248258
const uint8_t *secret)
249259
{
@@ -273,7 +283,13 @@ char *cipher_aes_b64_hmac_decrypt(const unsigned char *in, int inlen, int *out_m
273283
return decrypted;
274284
}
275285

276-
// Must free() returned value
286+
/**
287+
* Must free() returned value.
288+
* @param[in] in Pointer to the buffer to decrpyt. Must contain a
289+
* NULL-terminated string.
290+
* @param[in] inlen Length of the buffer to decrypt, excluding the
291+
* terminating NULL character.
292+
*/
277293
char *cipher_aes_b64_decrypt(const unsigned char *in, int inlen, int *outlen,
278294
const uint8_t *key)
279295
{

0 commit comments

Comments
 (0)