2024-05-08 23:54:17 +02:00
|
|
|
#include "shared.hpp"
|
|
|
|
|
2024-09-11 03:23:41 +02:00
|
|
|
const char *github_root_ca =
|
|
|
|
"-----BEGIN CERTIFICATE-----\n"
|
|
|
|
"MIICjzCCAhWgAwIBAgIQXIuZxVqUxdJxVt7NiYDMJjAKBggqhkjOPQQDAzCBiDEL\n"
|
|
|
|
"MAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNl\n"
|
|
|
|
"eSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMT\n"
|
|
|
|
"JVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAwMjAx\n"
|
|
|
|
"MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMCVVMxEzARBgNVBAgT\n"
|
|
|
|
"Ck5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVUaGUg\n"
|
|
|
|
"VVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlm\n"
|
|
|
|
"aWNhdGlvbiBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQarFRaqflo\n"
|
|
|
|
"I+d61SRvU8Za2EurxtW20eZzca7dnNYMYf3boIkDuAUU7FfO7l0/4iGzzvfUinng\n"
|
|
|
|
"o4N+LZfQYcTxmdwlkWOrfzCjtHDix6EznPO/LlxTsV+zfTJ/ijTjeXmjQjBAMB0G\n"
|
|
|
|
"A1UdDgQWBBQ64QmG1M8ZwpZ2dEl23OA1xmNjmjAOBgNVHQ8BAf8EBAMCAQYwDwYD\n"
|
|
|
|
"VR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjA2Z6EWCNzklwBBHU6+4WMB\n"
|
|
|
|
"zzuqQhFkoJ2UOQIReVx7Hfpkue4WQrO/isIJxOzksU0CMQDpKmFHjFJKS04YcPbW\n"
|
|
|
|
"RNZu9YO6bVi9JNlWSOrvxKJGgYhqOkbRqZtNyWHa0V1Xahg=\n"
|
|
|
|
"-----END CERTIFICATE-----\n"
|
|
|
|
"-----BEGIN CERTIFICATE-----\n"
|
|
|
|
"MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBh\n"
|
|
|
|
"MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\n"
|
|
|
|
"d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH\n"
|
|
|
|
"MjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVT\n"
|
|
|
|
"MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j\n"
|
|
|
|
"b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkqhkiG\n"
|
|
|
|
"9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI\n"
|
|
|
|
"2/Ou8jqJkTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx\n"
|
|
|
|
"1x7e/dfgy5SDN67sH0NO3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQ\n"
|
|
|
|
"q2EGnI/yuum06ZIya7XzV+hdG82MHauVBJVJ8zUtluNJbd134/tJS7SsVQepj5Wz\n"
|
|
|
|
"tCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyMUNGPHgm+F6HmIcr9g+UQ\n"
|
|
|
|
"vIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQABo0IwQDAP\n"
|
|
|
|
"BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV\n"
|
|
|
|
"5uNu5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY\n"
|
|
|
|
"1Yl9PMWLSn/pvtsrF9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4\n"
|
|
|
|
"NeF22d+mQrvHRAiGfzZ0JFrabA0UWTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NG\n"
|
|
|
|
"Fdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBHQRFXGU7Aj64GxJUTFy8bJZ91\n"
|
|
|
|
"8rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/iyK5S9kJRaTe\n"
|
|
|
|
"pLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl\n"
|
|
|
|
"MrY=\n"
|
|
|
|
"-----END CERTIFICATE-----\n";
|
|
|
|
|
2024-05-08 23:54:17 +02:00
|
|
|
#ifdef TEST_SCREENS
|
2024-09-11 03:23:41 +02:00
|
|
|
uint8_t input_buffer[3 * input_buffer_pixels]; // up to depth 24
|
|
|
|
uint8_t output_row_mono_buffer[max_row_width / 8]; // buffer for at least one row of b/w bits
|
|
|
|
uint8_t output_row_color_buffer[max_row_width / 8]; // buffer for at least one row of color bits
|
|
|
|
uint8_t mono_palette_buffer[max_palette_pixels / 8]; // palette buffer for depth <= 8 b/w
|
2024-05-08 23:54:17 +02:00
|
|
|
uint8_t color_palette_buffer[max_palette_pixels / 8]; // palette buffer for depth <= 8 c/w
|
2024-09-11 03:23:41 +02:00
|
|
|
uint16_t rgb_palette_buffer[max_palette_pixels]; // palette buffer for depth <= 8 for buffered graphics, needed for 7-color display
|
|
|
|
#endif
|
|
|
|
|
|
|
|
// Function to calculate SHA-256 hash
|
|
|
|
String calculateSHA256(uint8_t *data, size_t len)
|
|
|
|
{
|
|
|
|
byte shaResult[32];
|
|
|
|
mbedtls_md_context_t ctx;
|
|
|
|
mbedtls_md_type_t md_type = MBEDTLS_MD_SHA256;
|
|
|
|
|
|
|
|
mbedtls_md_init(&ctx);
|
|
|
|
mbedtls_md_setup(&ctx, mbedtls_md_info_from_type(md_type), 0);
|
|
|
|
mbedtls_md_starts(&ctx);
|
|
|
|
mbedtls_md_update(&ctx, data, len);
|
|
|
|
mbedtls_md_finish(&ctx, shaResult);
|
|
|
|
mbedtls_md_free(&ctx);
|
|
|
|
|
|
|
|
char sha256_str[65];
|
|
|
|
for (int i = 0; i < 32; i++)
|
|
|
|
{
|
|
|
|
sprintf(sha256_str + (i * 2), "%02x", shaResult[i]);
|
|
|
|
}
|
|
|
|
sha256_str[64] = 0;
|
|
|
|
|
|
|
|
return String(sha256_str);
|
|
|
|
}
|
2024-09-11 17:40:44 +02:00
|
|
|
|
|
|
|
String calculateSHA256(WiFiClient *stream, size_t contentLength) {
|
|
|
|
mbedtls_md_context_t ctx;
|
|
|
|
mbedtls_md_type_t md_type = MBEDTLS_MD_SHA256;
|
|
|
|
|
|
|
|
mbedtls_md_init(&ctx);
|
|
|
|
mbedtls_md_setup(&ctx, mbedtls_md_info_from_type(md_type), 0);
|
|
|
|
mbedtls_md_starts(&ctx);
|
|
|
|
|
|
|
|
uint8_t buff[1024];
|
|
|
|
size_t bytesRead = 0;
|
|
|
|
|
|
|
|
while (bytesRead < contentLength) {
|
|
|
|
size_t toRead = min((size_t)(contentLength - bytesRead), sizeof(buff));
|
|
|
|
size_t readBytes = stream->readBytes(buff, toRead);
|
|
|
|
|
|
|
|
if (readBytes == 0) {
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
mbedtls_md_update(&ctx, buff, readBytes);
|
|
|
|
bytesRead += readBytes;
|
|
|
|
}
|
|
|
|
|
|
|
|
byte shaResult[32];
|
|
|
|
mbedtls_md_finish(&ctx, shaResult);
|
|
|
|
mbedtls_md_free(&ctx);
|
|
|
|
|
|
|
|
String result = "";
|
|
|
|
for (int i = 0; i < sizeof(shaResult); i++) {
|
|
|
|
char str[3];
|
|
|
|
sprintf(str, "%02x", (int)shaResult[i]);
|
|
|
|
result += str;
|
|
|
|
}
|
|
|
|
|
|
|
|
return result;
|
|
|
|
}
|