test_esp_tls.c 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. /*
  2. * SPDX-FileCopyrightText: 2021-2022 Espressif Systems (Shanghai) CO LTD
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. */
  6. #include "memory_checks.h"
  7. #include "esp_tls.h"
  8. #include "unity.h"
  9. #include "esp_err.h"
  10. #include "esp_log.h"
  11. #include "esp_mac.h"
  12. #include "sys/socket.h"
  13. #if SOC_SHA_SUPPORT_PARALLEL_ENG
  14. #include "sha/sha_parallel_engine.h"
  15. #elif SOC_SHA_SUPPORT_DMA
  16. #include "sha/sha_dma.h"
  17. #else
  18. #include "sha/sha_block.h"
  19. #endif
  20. #include "test_utils.h"
  21. const char *test_cert_pem = "-----BEGIN CERTIFICATE-----\n"\
  22. "MIICrDCCAZQCCQD88gCs5AFs/jANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDDA1F\n"\
  23. "U1AtVExTIFRlc3RzMB4XDTIxMDEwNzAxMTc1OVoXDTMxMDEwNTAxMTc1OVowGDEW\n"\
  24. "MBQGA1UEAwwNRVNQLVRMUyBUZXN0czCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC\n"\
  25. "AQoCggEBAMn4KrV9M40PcxDNdmwfFMXI5cydrV3nm1o1QzcDDuYn1YfxoCCcaIc0\n"\
  26. "JgHox948u94z32vnJU5qXVgEvwkD3nWGzWqjkwB1NlnIuF10XQFLa8cIas7Db/hd\n"\
  27. "KygbIbYwhtwQAQFEt0/MiUbA+m+rjzvffV9pDcPRlCOE6pC+X3iC7Ft3aevkEBtR\n"\
  28. "EPPN0sxGx0iFRIsglpDcEKUONYjF46q90LDmjA4EbqvK7XBuXjZ1QRGcQ871/8Ht\n"\
  29. "LzHjZKc5IcIxBVoVNJo0sgHHBOaG7J8x2eAJX8DfK6GseGZDbuptiJyZoj4nmOXx\n"\
  30. "iToEPG08DPlMHy90TDHXZbVeXNHzFV8CAwEAATANBgkqhkiG9w0BAQsFAAOCAQEA\n"\
  31. "n3oD/VONY9WIf0jvlAn62+VheABHFQqMrH02ucDxj0lRlgS4Z6+gRN2ITkzs8eNN\n"\
  32. "UglqVZCjU1mstL10tD8mwH8ShelxTWzHavc+GmAiEQx9C9zpMa7Oa+t6xFZCF6mi\n"\
  33. "c9h+3oNeql7zugcHjFXnlPd+oFhDTzH8R4Y+drZyR5LZsT5SNeEvLs7DEBMHNdKC\n"\
  34. "GOuWb7JNNhZKvNTymfCtM98s+7cbukwPogfWbaI+CjT49v4NOQlHNSN2Ldxpg9eh\n"\
  35. "fDgV8LqpUghnYjpe5lHgEqSZxV57z+amv5DRJNsH5+hB4k6HnRjfjQZqHUPlQ7Bk\n"\
  36. "pC4dhDzYsU8L1MN9e2i5Ig==\n"\
  37. "-----END CERTIFICATE-----\n";
  38. const char *test_key_pem = "-----BEGIN PRIVATE KEY-----\n"\
  39. "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDJ+Cq1fTOND3MQ\n"\
  40. "zXZsHxTFyOXMna1d55taNUM3Aw7mJ9WH8aAgnGiHNCYB6MfePLveM99r5yVOal1Y\n"\
  41. "BL8JA951hs1qo5MAdTZZyLhddF0BS2vHCGrOw2/4XSsoGyG2MIbcEAEBRLdPzIlG\n"\
  42. "wPpvq487331faQ3D0ZQjhOqQvl94guxbd2nr5BAbURDzzdLMRsdIhUSLIJaQ3BCl\n"\
  43. "DjWIxeOqvdCw5owOBG6ryu1wbl42dUERnEPO9f/B7S8x42SnOSHCMQVaFTSaNLIB\n"\
  44. "xwTmhuyfMdngCV/A3yuhrHhmQ27qbYicmaI+J5jl8Yk6BDxtPAz5TB8vdEwx12W1\n"\
  45. "XlzR8xVfAgMBAAECggEAMPHNF9JRjduynN3N1wHpPM0ks2N6wgkAounJcilxkOES\n"\
  46. "ZDFwBrcgtbMzir7owLijJoQXnsSTS9+G42+zA/JGFOEoIrGlTDUbiMKVu0AZ0dh/\n"\
  47. "M+qcR6MhHWUmsj9w+f/kjqvqMm5+pf4BPn5BspI20eGlNlv1FAFUDw+E8LLR3Bgf\n"\
  48. "6Wl1BfuKHvdIRUd8nnJlDd0eeFap7yI/b2RDdvkOl4ounlKQhwpyJue2fbYJ2Z2v\n"\
  49. "pCIc1Nt3lZv4KE14nBRNH95nfakA+BmIos/pN78QRtSkSQN/9drDik46+t5Bz1Lm\n"\
  50. "kjFaujF73szV9mOx2O1JekziyfSJkVOJGqFSrzeIUQKBgQDvNpade0PlV+4Mh+Ra\n"\
  51. "p66OhsZGisl92GZZztK660pixzXoC6cAllxutBHSmu6GM9ISa5GoXMIgmD8d16p0\n"\
  52. "eXtBHuKysi/0iLkbfl1EtztB8vcChdzT0JCWD2vSqGq3772GT3TV1+2OZFsnpiON\n"\
  53. "3Jy0UbHAclMHZrBknYHEOkpTpQKBgQDYJIBeUya5y0MtvcR+hu+Hku8eJq9Tr8jx\n"\
  54. "Yuw5ihlg9rtsEhiWf8O0gnG9e5RrJiOAHcbDcAFx3AbB8ks8CpZ+7Cu9+Wq0VQND\n"\
  55. "ySJwuWXHZfgPEIvj5MlSuaaYP52k7tAF1HJhP5H8DyHMEkmUaPvk9cYRIQNsnADD\n"\
  56. "a3KDPgjlswKBgQCMTALYCCSRDRojpUvL046wLuF5HAsC0PlucLvtPvRYrKe0Galv\n"\
  57. "0cASeW/+ijmc4iWyAf7itMxyW3ihIwzo1Rrx3ZBt583yaIHQWzOOirypeDtg8mvK\n"\
  58. "mwdBy3ecjIRSrrwEWvOWO9cq7Tb9MRanLB2IMGXFDggeTh7kU/B4ywsutQKBgEpJ\n"\
  59. "uWkyESRYjV1iVO/b9uXVBaSKTUZpK5pzkpdwNKrUArTxP0wy25PmJaunluqA8ECv\n"\
  60. "e0pe69AzfIsaeOtJBFLZX2trF1alxXp93f16a1XuYSTkXgBU+TEap/y6GLfAcPUg\n"\
  61. "ALQWAlns5YPbYTjGIJWgN5RZkXC56bVA79nV737rAoGBAM9swaysVULI6A9lofIH\n"\
  62. "w/AgsIH0SotZt+1d7PJBww4ztrcqt66z56p13mUw0/zsIDxvPrhOS20hv3tymJyM\n"\
  63. "v3bwMnszsoZ1Kkj881GmnFtpMb6cwPfkbRJuY5DHfTdRhq+Tik5uYdRthlWM92Sf\n"\
  64. "Aogx44Fozd1t2hYcozPuZD4s\n"\
  65. "-----END PRIVATE KEY-----\n";
  66. #if SOC_SHA_SUPPORT_SHA512
  67. #define SHA_TYPE SHA2_512
  68. #else
  69. #define SHA_TYPE SHA2_256
  70. #endif //SOC_SHA_SUPPORT_SHA512
  71. static void test_leak_setup(const char *file, long line)
  72. {
  73. uint8_t mac[6];
  74. struct timeval te;
  75. gettimeofday(&te, NULL); // get current time
  76. esp_read_mac(mac, ESP_MAC_WIFI_STA);
  77. printf("%s:%ld: time=%jd.%lds, mac:" MACSTR "\n", file, line, (intmax_t)te.tv_sec, te.tv_usec, MAC2STR(mac));
  78. // Execute esp_sha operation to allocate internal SHA semaphore memory
  79. // which is considered as leaked otherwise
  80. const uint8_t input_buffer[64];
  81. uint8_t output_buffer[64];
  82. esp_sha(SHA_TYPE, input_buffer, sizeof(input_buffer), output_buffer);
  83. test_utils_record_free_mem();
  84. }
  85. TEST_CASE("esp-tls init deinit", "[esp-tls][leaks=0]")
  86. {
  87. test_leak_setup(__FILE__, __LINE__);
  88. struct esp_tls *tls = esp_tls_init();
  89. TEST_ASSERT_NOT_NULL(tls);
  90. int ret = esp_tls_conn_destroy(tls);
  91. TEST_ASSERT_EQUAL(0, ret);
  92. }
  93. TEST_CASE("esp-tls global_ca_store set free", "[esp-tls][leaks=0]")
  94. {
  95. test_leak_setup(__FILE__, __LINE__);
  96. esp_err_t ret = esp_tls_init_global_ca_store();
  97. TEST_ASSERT_EQUAL(ESP_OK, ret);
  98. ret = esp_tls_set_global_ca_store((const unsigned char *)test_cert_pem, strlen(test_cert_pem) + 1);
  99. TEST_ASSERT_EQUAL(ESP_OK, ret);
  100. esp_tls_free_global_ca_store();
  101. }
  102. #ifdef CONFIG_ESP_TLS_SERVER
  103. TEST_CASE("esp_tls_server session create delete", "[esp-tls][leaks=0]")
  104. {
  105. test_leak_setup(__FILE__, __LINE__);
  106. struct esp_tls *tls = esp_tls_init();
  107. TEST_ASSERT_NOT_NULL(tls);
  108. esp_tls_cfg_server_t cfg = {
  109. .servercert_buf = (const unsigned char *)test_cert_pem,
  110. .servercert_bytes = strlen(test_cert_pem) + 1,
  111. .serverkey_buf = (const unsigned char *)test_key_pem,
  112. .serverkey_bytes = strlen(test_key_pem) + 1,
  113. };
  114. // The call is going to fail at the time of TLS handshake (no internet),
  115. // but the internal memory for the TLS connection will be allocated.
  116. int ret = esp_tls_server_session_create(&cfg, -1, tls);
  117. TEST_ASSERT_LESS_THAN_INT(0, ret);
  118. // free the allocated memory.
  119. esp_tls_server_session_delete(tls);
  120. }
  121. #endif