From b082dbc91f06351e674717d94c012b4700575181 Mon Sep 17 00:00:00 2001 From: David B Brown Date: Mon, 29 Mar 2021 22:56:20 +0100 Subject: [PATCH 1/7] reset http_parser if required --- src/server.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/server.c b/src/server.c index 03deaab..f15d2d3 100644 --- a/src/server.c +++ b/src/server.c @@ -3698,6 +3698,15 @@ static void homekit_client_process(client_context_t *context) { &context->server->parser, &homekit_http_parser_settings, (char *)payload, payload_size ); + + CLIENT_DEBUG(context, "Parser state: %d, error %s: %s", context->server->parser.state, + http_errno_name(context->server->parser.http_errno), + http_errno_description(context->server->parser.http_errno)); + if ( context->server->parser.state == 1 ) { + CLIENT_DEBUG(context, "Reset parser"); + http_parser_init(&context->server->parser, HTTP_REQUEST); + } + } while (data_available && !context->server->request_completed); current_client_context = NULL; From 0f3ef2ac2872ffe64dfe4e5d929420af327d48a5 Mon Sep 17 00:00:00 2001 From: Omer Enbar Date: Thu, 26 Nov 2020 17:16:24 +0200 Subject: [PATCH 2/7] update to pass latest HomeKit certification guidelines with proper font, logo and margins --- tools/SF-Mono-Bold.otf | Bin 0 -> 95140 bytes tools/gen_qrcode | 11 +++++------ tools/qrcode.png | Bin 9814 -> 6085 bytes 3 files changed, 5 insertions(+), 6 deletions(-) create mode 100644 tools/SF-Mono-Bold.otf diff --git a/tools/SF-Mono-Bold.otf b/tools/SF-Mono-Bold.otf new file mode 100644 index 0000000000000000000000000000000000000000..ed6f5f092b2ddc3fe8583beaaee0c4b53acd58a8 GIT binary patch literal 95140 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 DgN6c; literal 0 HcmV?d00001 diff --git a/tools/gen_qrcode b/tools/gen_qrcode index 6aabbfd..bcb4de2 100755 --- a/tools/gen_qrcode +++ b/tools/gen_qrcode @@ -40,25 +40,24 @@ def gen_homekit_setup_uri(category, password, setup_id, version=0, reserved=0, f def gen_homekit_qrcode(setup_uri, password): - code = qrcode.QRCode(version=2, border=0, box_size=12, + code = qrcode.QRCode(version=2, border=0, box_size=12.5, error_correction=qrcode.constants.ERROR_CORRECT_Q) code.add_data(setup_uri) # open template img = PIL.Image.open(os.path.join(script_dir, 'qrcode.png')) # add QR code to it - img.paste(code.make_image().get_image(), (50, 180)) + img.paste(code.make_image().get_image().resize((320, 320)), (40, 180)) # add password digits setup_code = password.replace('-', '') - - font = PIL.ImageFont.truetype(os.path.join(script_dir, 'Roboto-Bold.ttf'), 56) + font = PIL.ImageFont.truetype(os.path.join(script_dir, 'SF-Mono-Bold.otf'), 69) draw = PIL.ImageDraw.Draw(img) for i in range(4): - draw.text((170 + i*50, 35), setup_code[i], font=font, fill=(0, 0, 0)) - draw.text((170 + i*50, 95), setup_code[i+4], font=font, fill=(0, 0, 0)) + draw.text((173 + i*49, 38-13), setup_code[i], font=font, fill=(0, 0, 0)) + draw.text((173 + i*49, 88), setup_code[i+4], font=font, fill=(0, 0, 0)) return img diff --git a/tools/qrcode.png b/tools/qrcode.png index f050cdb3187214bc245410f0e1855d40f8fe63c1..2f317f9748352161536c85c1591a6ee0154d6abf 100644 GIT binary patch literal 6085 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 literal 9814 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 From ee46e5c47c9c37577514ddd8111b1158d9f53055 Mon Sep 17 00:00:00 2001 From: Maxim Kulkin Date: Tue, 3 May 2022 15:19:55 -0400 Subject: [PATCH 3/7] Fix missing bitset.c file in CMakeList.txt for ESP-IDF compilation --- CMakeLists.txt | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 828fa15..e25f35c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,15 +1,16 @@ idf_component_register( SRCS - "src/json.c" - "src/storage.c" - "src/tlv.c" - "src/server.c" - "src/debug.c" "src/accessories.c" "src/base64.c" + "src/bitset.c" + "src/crypto.c" + "src/debug.c" + "src/json.c" "src/port.c" "src/query_params.c" - "src/crypto.c" + "src/server.c" + "src/storage.c" + "src/tlv.c" INCLUDE_DIRS include PRIV_INCLUDE_DIRS src REQUIRES wolfssl json http-parser mdns spi_flash From c1bfbbc12ee67f6abe42796d176b072c1749d377 Mon Sep 17 00:00:00 2001 From: Maxim Kulkin Date: Thu, 5 May 2022 09:41:54 -0400 Subject: [PATCH 4/7] Update build config to ESP-IDF 4.4.1 --- CMakeLists.txt | 75 +++++++++++++++++++++----------------------------- 1 file changed, 32 insertions(+), 43 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e25f35c..5900852 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,56 +1,45 @@ idf_component_register( - SRCS - "src/accessories.c" - "src/base64.c" - "src/bitset.c" - "src/crypto.c" - "src/debug.c" - "src/json.c" - "src/port.c" - "src/query_params.c" - "src/server.c" - "src/storage.c" - "src/tlv.c" - INCLUDE_DIRS include - PRIV_INCLUDE_DIRS src + SRC_DIRS src + EXCLUDE_SRCS + "src/homekit_mdns.c" + "src/homekit_mdns_debug.c" + INCLUDE_DIRS "include" + PRIV_INCLUDE_DIRS "src" REQUIRES wolfssl json http-parser mdns spi_flash ) -set_source_files_properties(src/storage.c - PROPERTIES COMPILE_FLAGS - -Wno-error=unused-value -) - -set(WOLFSSL_C_FLAGS - "-DWOLFCRYPT_HAVE_SRP \ - -DWOLFSSL_SHA512 \ - -DWOLFSSL_BASE64_ENCODE \ - -DNO_MD5 \ - -DNO_SHA \ - -DHAVE_HKDF \ - -DHAVE_CHACHA \ - -DHAVE_POLY1305 \ - -DHAVE_ED25519 \ - -DHAVE_CURVE25519 \ - -DNO_SESSION_CACHE \ - -DRSA_LOW_MEM \ - -DGCM_SMALL \ - -DUSE_SLOW_SHA512 \ - -DWC_NO_HARDEN \ - -DWOLFCRYPT_ONLY" +list(APPEND EXTRA_WOLFSSL_COMPILE_OPTIONS + -DWOLFCRYPT_HAVE_SRP + -DWOLFSSL_SHA512 + -DWOLFSSL_BASE64_ENCODE + -DNO_MD5 + -DNO_SHA + -DNO_DSA + -DHAVE_HKDF + -DHAVE_CHACHA + -DHAVE_POLY1305 + -DHAVE_ED25519 + -DHAVE_CURVE25519 + -DNO_SESSION_CACHE + -DRSA_LOW_MEM + -DGCM_SMALL + -DUSE_SLOW_SHA512 + -DWOLFCRYPT_ONLY ) if(CONFIG_HOMEKIT_SMALL) - set(WOLFSSL_C_FLAGS "${WOLFSSL_C_FLAGS} -DCURVE25519_SMALL -DED25519_SMALL") + list(APPEND EXTRA_WOLFSSL_COMPILE_OPTIONS -DCURVE25519_SMALL -DED25519_SMALL) endif() -set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} \ - ${WOLFSSL_C_FLAGS} \ - -DHOMEKIT_MAX_CLIENTS=${CONFIG_HOMEKIT_MAX_CLIENTS} \ - -DSPIFLASH_BASE_ADDR=${CONFIG_HOMEKIT_SPI_FLASH_BASE_ADDR} \ - -DESP_IDF" +idf_build_set_property(COMPILE_OPTIONS "${EXTRA_WOLFSSL_COMPILE_OPTIONS}" APPEND) + +target_compile_options(${COMPONENT_LIB} PRIVATE + -Wno-error=unused-variable + -DHOMEKIT_MAX_CLIENTS=${CONFIG_HOMEKIT_MAX_CLIENTS} + -DSPIFLASH_BASE_ADDR=${CONFIG_HOMEKIT_SPI_FLASH_BASE_ADDR} + -DESP_IDF ) if(CONFIG_HOMEKIT_DEBUG) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DHOMEKIT_DEBUG") + target_compile_options(${COMPONENT_LIB} PRIVATE -DHOMEKIT_DEBUG) endif() From 4c4079959e93a3980efc56b1c726078a5fce9123 Mon Sep 17 00:00:00 2001 From: Maxim Kulkin Date: Tue, 10 May 2022 17:51:10 -0400 Subject: [PATCH 5/7] Update gen_qrcode to allow transparent backgrounds --- tools/gen_qrcode | 35 +++++++++++++++++++++++++++-------- 1 file changed, 27 insertions(+), 8 deletions(-) diff --git a/tools/gen_qrcode b/tools/gen_qrcode index bcb4de2..81c5b1e 100755 --- a/tools/gen_qrcode +++ b/tools/gen_qrcode @@ -39,21 +39,37 @@ def gen_homekit_setup_uri(category, password, setup_id, version=0, reserved=0, f return 'X-HM://%s%s' % (''.join(reversed(encodedPayload)), setup_id) -def gen_homekit_qrcode(setup_uri, password): - code = qrcode.QRCode(version=2, border=0, box_size=12.5, - error_correction=qrcode.constants.ERROR_CORRECT_Q) - code.add_data(setup_uri) +def gen_homekit_qrcode(setup_uri, password, transparent=False): + back_color = 'transparent' if transparent else 'white' # open template - img = PIL.Image.open(os.path.join(script_dir, 'qrcode.png')) + template = PIL.Image.open(os.path.join(script_dir, 'qrcode.png')) + + img = PIL.Image.new('RGBA', template.size, None) + draw = PIL.ImageDraw.Draw(img) + + if not transparent: + draw.rounded_rectangle((5, 5, img.width-5, img.height-5), 60, fill='white') + + img.paste(template, (0, 0), template) + # add QR code to it - img.paste(code.make_image().get_image().resize((320, 320)), (40, 180)) + code = qrcode.QRCode(version=2, border=0, box_size=12.5, + error_correction=qrcode.constants.ERROR_CORRECT_Q) + code.add_data(setup_uri) + img.paste( + code. + make_image(fill_color='black', + back_color='transparent' if transparent else 'white'). + get_image(). + resize((320, 320)), + (40, 180) + ) # add password digits setup_code = password.replace('-', '') font = PIL.ImageFont.truetype(os.path.join(script_dir, 'SF-Mono-Bold.otf'), 69) - draw = PIL.ImageDraw.Draw(img) for i in range(4): draw.text((173 + i*49, 38-13), setup_code[i], font=font, fill=(0, 0, 0)) @@ -64,6 +80,7 @@ def gen_homekit_qrcode(setup_uri, password): def main(): parser = argparse.ArgumentParser() + parser.add_argument('--transparent', action='store_true') parser.add_argument('category', type=int) parser.add_argument('password') parser.add_argument('setup_id') @@ -79,7 +96,9 @@ def main(): setupURI = gen_homekit_setup_uri(args.category, args.password, args.setup_id) - qrcodeImage = gen_homekit_qrcode(setupURI, args.password) + qrcodeImage = gen_homekit_qrcode( + setupURI, args.password, transparent=args.transparent + ) qrcodeImage.save(args.output_image) From 76126b45dbf24e9d90060bdc011d393e25691e9e Mon Sep 17 00:00:00 2001 From: Maxim Kulkin Date: Tue, 10 May 2022 18:02:49 -0400 Subject: [PATCH 6/7] Update QR code example to version with background --- qrcode-example.png | Bin 13600 -> 18974 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/qrcode-example.png b/qrcode-example.png index ca5b9447dd4b0d3d94f714a22da06fbd26d718ac..f2c5050ba77181337b24a8aa25aa0d4f26174a19 100644 GIT binary patch literal 18974 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 From 7936a783be9f9c8a83b1791e292d903693d14f28 Mon Sep 17 00:00:00 2001 From: Maxim Kulkin Date: Sun, 15 May 2022 16:02:38 -0400 Subject: [PATCH 7/7] Fix RNG initialization in crypto functions --- src/crypto.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/crypto.c b/src/crypto.c index 3acbe3c..be89c6c 100644 --- a/src/crypto.c +++ b/src/crypto.c @@ -360,6 +360,12 @@ int crypto_ed25519_generate(ed25519_key *key) { return r; WC_RNG rng; + r = wc_InitRng(&rng); + if (r) { + DEBUG("Failed to initialize RNG (code %d)", r); + return r; + } + r = wc_ed25519_make_key(&rng, ED25519_KEY_SIZE, key); if (r) { DEBUG("Failed to generate key (code %d)", r); @@ -479,10 +485,16 @@ int crypto_curve25519_generate(curve25519_key *key) { } WC_RNG rng; + r = wc_InitRng(&rng); + if (r) { + DEBUG("Failed to initialize RNG (code %d)", r); + return r; + } + r = wc_curve25519_make_key(&rng, 32, key); if (r) { crypto_curve25519_done(key); - return -1; + return r; } return 0;